2019年網際網路寒冬,帶你走進真實的面試殺出重圍
座標上海、
》
博主最近找工作的真實經歷。
從01月5號-01月11號為期一週的面試安排以及遇到的問題,做一個總結,帶你走進2019年這個網際網路寒冬環境下找工作的真實經歷,帶大家做一個梳理,希望能幫到大家。
》
這裡不講虛的,直接上來就是面試官丟擲的問題,以及後來面試通過情況,回答問題情況,關注點在哪,整個做一個詳細的說明,畢竟年底,HR想壓薪資,並且好多一部分公司招人需求並不是很強烈,寒冬已至,只有不斷的面嘍…
好了,下面開始總結。
》
從01月02號週三開始投遞簡歷,面試邀請往後排,安排了為期3天的面試,然後,後面邊面試邊投遞。
2019.01.04週五 小雨
Firstday AM10:00
這天安排了3家,甲方和外包均有、
週五上午10:00 甲方,上海市黃浦區,地鐵9號線打浦橋站
1、老流程,填表,筆試(非技術題),面試
2、筆試不多說,直接進入面試
面試官3人組,技術面試官(27/8年輕小夥子),hr(大姐姐),產品(大姐姐)
1、自我介紹,博主傻帽的說了如下:
“你好,我是打豆豆, 老家xxx,以前在北京一家外包,這家公司主要做金融以及電商的專案,最近做了個基於springCloud架構的綜合品類電商的這麼一個專案,我在專案中負責商品後臺管理以及es實時搜尋模組的開發,參與了…此處省略100字 ”。
問題如下:
說老家時候,hr大姐姐直接打斷:“你說下你之前在哪家公司?”
打豆豆:xxx 還沒說完 hr又打斷:“說下最近做的哪個專案,還有在專案組中擔任什麼樣的角色?”
打豆豆:比拉比拉…負責商品後臺管理以及es實時搜尋模組的開發
2、支付
技術面試官: 說下支付模組實現
打豆豆內心 : 尼瑪,老子開發的是後臺商品管理,上下架,CURD,還有ES搜尋模組,你問我支付模組…
打豆豆不動聲色 : 支付這個,前臺…到order微服務生成唯一order號…呼叫微信支付寶銀聯介面,支付成功更改訂單狀態status …
3、秒殺
技術面試官: 說下商品秒殺實現
打豆豆內心 : 尼瑪,秒殺業務的執行緒併發,熔斷,限流,以及單人秒殺許可權只有一次,orderId 不重複支付(分散式事務)最終結果一致性。實在不行用TCC
打豆豆不動聲色 : 支付這個,雖然不是我開發的,也有參與,保證支付訂單的冪等性唄
PS:當然現場答得不好,好多東西沒講出來,
我可以用分散式鎖來解決,
也可以用身份標籤來解決
當然重要的是支付ok 生成的訂單流水插入mysql ,重複請求支付同一orderId時候先查詢流水,然後決定事務是否回滾、
4、整個springCloud的架構瞭解麼
打豆豆:
5、JWT鑑權
技術面試官: 哎呦,還做了JWT鑑權,你說下JWT鑑權實現流程是怎樣的?
打豆豆內心: 尼瑪,上臉了…麻煩瞅下簡歷,你這一問這個專案都是我做的好啦,我獨立開發,我是全棧…
打豆豆: 額,這個… 結合Zuul閘道器微服務做了一個JWT(java webService token)+rsa 相結合…
請求進來…
auth-center鑑權中心微服務,存放一個rsa.pri(私鑰)…呼叫…微服務…
在每一個微服務存放一個rsa.pub(公鑰),用來解密token 、完成對使用者的鑑權…
PS: 當時答得一塌糊塗,以上均是做了優化,
防止有小夥伴沒有看清楚,照著我這部落格背然後弄錯了,面試吃癟回來找我理論。
所以這些回答均是優化過了,當時這個jwt 鑑權答得不怎麼樣、
6、日常高併發從不缺席
技術面試官: 你們併發量多少?秒殺時候高併發問題怎麼處理的?
打豆豆內心: 這個是我強項啊
打豆豆: mysql 併發600左右,使用redis的master-salve 讀寫分離架構以及訊息佇列,外加mysql 主從,資料分發
表結構優化,當然表結構優化這一點不能夠過早的優化,在你併發量較低情況下,業務需求不需要做過早的分表,過早的分表會導致一些其他的問題凸顯、
PS: 當然不能夠忘記 高可用,宕機仍會導致你整個應用的癱瘓,這一點上springCould較為注重AP
技術面試官: 恩,hashmap用到過?hashmap的特點 ,實現原理是怎樣的?
打豆豆: …使用場景在… 底層資料結構是…
技術面試官: hashmap的hash衝突 怎麼解決?
打豆豆內心: 啥?懵逼…
打豆豆: 不太瞭解
PS: 解決方式,1、再次hash 2、連結串列對 相同hashcode值的key 進行處理(hashmap底層預設的處理方式)
當然,redis 單機模式讀寫資料qps在萬級別,qps要達到 數十萬級別的話,那就要用讀寫分離,叢集了,redis叢集可基於zookeeper 和redis cluster 搭建、
具體可自行百度
小結
這家涼涼,下午還有兩家
Firstday PM13:00
週五下午13:00 外包,浦東新區碧波路 ,2號線張江高科地鐵站
這家上去就是讓做題
1,N道邏輯判斷
2,定義單例Rectangle類 編碼;判斷2個矩形相交編碼
好多人在等,筆試沒過
Firstday PM16:30
週五下午16:30 外包,徐彙區華宜大廈 ,9號線宜山路
1、無筆試
2、面試
redis 。分散式。mysql儲存過程(當時沒答出來)。高併發
3、薪資未達到期望
2019.01.06週日 小雨 下午2:30
Second day PM 14:30
甲方,上海市楊高中路,xx科技
流程
1、填表筆試,幾個選擇,程式設計題 :系統時間上一個月是哪一天?
2、面試
結果未通過
技術面試官: ok ,自我介紹下
打豆豆 : …負責某某某…
技術面試官: ok ,thymeleaf 靜態化怎麼實現的
打豆豆 : …xxx
靜態化的具體實現(回答的不好)、
PS : 靜態化,生成HTML,請求進來從nginx 拉取靜態頁面…但是有靜態化同步問題,使用mq解決
技術面試官: 靜態化頁面存在可變動的資訊?類似於庫存?
打豆豆 : 當然了,有貨沒貨顯示就行了,status欄位麼
技術面試官: es 搜尋,秒殺
打豆豆內心 : 秒殺你妹,這模組又不是我做的…
打豆豆 : 怎麼怎麼 … 秒殺配置熔斷限流
技術面試官: nginx 伺服器,使用場景,哪裡用的?除了反向代理別的地方用在哪了?
打豆豆 : 熔斷限流具體設定(沒答上來)。
PS : 設定執行緒熔斷時間 300ms ,為了單執行緒 能抗 3/s 個請求、
技術面試官: 期望薪資
技術面試官: 有什麼想問的?
打豆豆 : xxx上下班時間,你們主要做哪些方向?線上碰到過什麼比較棘手的問題?支付冪等性怎麼保證?
技術面試官: 有沒有其他要問的?
打豆豆 : 沒有
2019.01.07週一 晴
第三天排了3家
Third day AM 10:00
甲方,上海市長寧區通協路,地鐵二號線淞虹路站
流程:1、筆試
2、面試
筆試未通過,演算法和程式設計以及表設計寫了下,估計做完中午了,沒寫完直奔下一家
題超多,sql 題20道,選擇6頁,演算法(二分法),表設計1個
資料庫優化設計1道
表拆分1道
Third day PM 14:30
甲方,2019年1月7日 14:30
上海市黃浦區打浦路
無筆試
期望薪資未達到
以下為了節省時間,直接磕重點了,不寫那麼細了
技術面試官: 專案
技術面試官: 秒殺實現、springcloud用了什麼元件
打豆豆 : Zuul 等等
技術面試官: 資料庫
打豆豆 : 就一些優化問題,引擎優化具體怎麼做講一講ok了,結合redis 處理併發
技術面試官: 遞迴瞭解多少,jdk8新特性
打豆豆 : 遞迴開始結束條件,新特性lambda
技術面試官: 我們是一家…期望薪資多少… 什麼問題?
打豆豆 : 恩恩…比拉比啦…
技術面試官: 引擎 …記憶體片段怎麼怎麼滴…微信厲害吧,我仿微信寫了個一樣的…
打豆豆內心 : 牛批牛批…
Third day PM 17:00
甲方,2019年1月7日 17:00
上海閔行區 ,甲方 中庚環球創意中心
無筆試
未通過
技術面試官: 說下專案,負責那些模組
技術面試官: springcloud都哪些元件
技術面試官: hashmap hashtable 還有執行緒併發問題
技術面試官: redis叢集高可用怎麼保證
打豆豆: 比拉比啦…
技術面試官: 有用過es,那你說下es的原理
打豆豆內心: es不就讀寫,底層怎麼讀怎麼寫…到記憶體buffer …重新整理…oscache…segmentFile合併…
然後使用的話,建立index ,對映… 根據詞條…
技術面試官: IK分詞器底層原理
打豆豆內心: 栽了…
打豆豆: 栽了…
2019.01.08 週二 小雨
Fourth day AM 10:30
甲方,上海市張江路,地鐵2號線廣蘭路站 xxx金服
流程
1、無筆試
2、面試
結果未通過
技術面試官: ok,負責了後臺和搜尋,那你說下購物車怎麼實現的,就說下從購物車的表設計,到新增購物車,然後展示購物車,使用redis 的話,你是如何設計 key 和value 的…整個你來說,我來寫?
技術面試官: 我們就說說最常見的購物車模式,登入才能夠新增展示購物車的這種,來,你講一講。
打豆豆內心: 尼瑪,這個
打豆豆: 可以把資料存放在localStorage, 購物車若基於redis 設計的話,key 設計成userId ,value 設計成 map<skuid, 商品資料> ,就是一個雙層map結構
1、新增購物車
資料新增到mysql同步到redis ,並存入localstorage 中
2、展示購物車
localstorage 中是否存在資料,
存在 ,返回值渲染到頁面、
不存在,請求redis 把資料渲染到前端、
技術面試官: 涉及到哪些表?
打豆豆: 涉及到的表有:
tb_user 、tb_spu、tb_spu_detail 、 tb_sku 、tb_spec_group 、tb_spec_param 、tb_category 、tb_brand
技術面試官邊記邊問: 涉及到這麼多張表,說下你封裝了哪些資料?
打豆豆內心已接近崩潰: 商品的通用規格引數、特有規格引數…比拉比拉…
技術面試官邊: ok ,目前這些問題均已解決,你說後臺商品是可以修改的,我修改商品,你購物車如何同步?
打豆豆內心: 終於正常些了,呼呼
打豆豆: 使用rabbitMq 佇列,在後臺定義監聽器,監聽…比拉比啦,刪除redis ,建立新的redis 資料
技術面試官邊內心: 好,重點來了,小夥子,嘿嘿
技術面試官邊: 方案可行,具體下,刪除redis 你怎麼找到被更新的資料的id ? 也就是說,redis 中這麼多資料,你怎麼找到哪個被更新了,哪個被修改了?
打豆豆: 額,額,沒答好
技術面試官邊: 其他問題開始問… 秒殺怎麼實現的
打豆豆: 比比比…
技術面試官邊: 你們版本控制工具用的什麼,常用哪些命令?
打豆豆: git svn 都用過,現在用git ,用了git 就停不下來…建立分支,合併分支…
技術面試官邊: 合併分支幾種方式?
打豆豆: 2種,…
技術面試官邊: 另一種呢?
打豆豆: 我只用過這一種,打豆豆內心一臉黑線
技術面試官邊: 既然git 分散式的,為什麼說分散式?
打豆豆: 比拉比啦,還舉了個提交程式碼的例子
技術面試官邊: mysql 資料庫優化,你在開發中做了什麼優化,具體細節
技術面試官邊: 資料庫引擎優化你做了哪些?
打豆豆: 沒有做,但是可以這樣優化…ok,就這樣
技術面試官邊: 你提到MQ,你說下你用過幾種?都有什麼優缺點?
打豆豆: activemq、rabbitmq、kafka、rocketMq 比拉比啦…高吞吐的話就kafka了,比拉比拉…
技術面試官邊: 技術廣度是夠了,期望薪資多少?有什麼想要問的?
打豆豆: 估計涼涼,隨便問了點
技術面試官邊: 哦,今天先到這兒
每一個購物車均是一個物件(如下),所以購物車列表是個 json陣列
{
skuId:2131241,
title:"大麥",
image:"",
price:190000,
num:1,
ownSpec:"{"機身顏色":"陶瓷黑尊享版","記憶體":"6GB","機身儲存":"128GB"}"
}
外層map的key
// 獲取登入使用者
UserInfo user = LoginInterceptor.getLoginUser();
// Redis的key
String key = KEY_PREFIX + user.getId();
// 獲取hash操作物件
BoundHashOperations<String, Object, Object> hashOps = this.redisTemplate.boundHashOps(key);
// 查詢是否存在
Long skuId = cart.getSkuId();
Integer num = cart.getNum();
Boolean boo = hashOps.hasKey(skuId.toString());
//判斷
Fourth day PM 13:30
外包某為,上海浦東新區錦繡東路 錦繡申江,地鐵2號線廣蘭路站
無筆試
2、面試
結果未通過,原因:缺乏移動性,至今不懂他說的移動性是什麼、
技術面試官: 說下專案,負責那些模組
訂單模組說說怎麼開發的
微服務配置
參與的哪些模組都說下
打豆豆內心: ok…
打豆豆: 比拉比啦…
技術面試官: redis相關
集合陣列,hashmap
mq使用長連線短連結,使用場景
設計模式瞭解多少?單例模式使用場景
技術面試官: 怎麼保證訂單的一致性問題
打豆豆: 好多方法啊,1、加鎖,2、使用身份標識,3、可以使用mq 連線各個服務 …不推薦使用分散式鎖 …
併發效能收到影響…推薦使用ticket …
技術面試官: zookeeper瞭解多少,談下使用作用等
打豆豆: 配置管理,故障轉移…
技術面試官: maven構建子工程
打豆豆: 怎麼滴怎麼滴… 打包方式 pom …依賴傳遞…
技術面試官: 有什麼想問的?
打豆豆內心: 沒問期望薪資,ok ,問你幾個問題,看你水平咋樣,反正是涼涼了,露出了邪惡微笑
打豆豆: 你們業務流 是怎樣的,哦,做支付啊,ok,TCC有用過? 你們是怎麼保證分散式訂單不重複支付的呢?
技術面試官: 啥?
技術面試官: 加鎖
打豆豆: 是加同步鎖 執行緒?
技術面試官: 恩
打豆豆: 鎖級別跳不過jvm 啊,並且對效能上有影響,有考慮過麼?其實使用zk鎖也可以解決這樣的問題
技術面試官: 使用分散式鎖
打豆豆: 其實,分散式鎖一樣跳不過 jvm ,本質是一樣的,那這個你們是怎麼處理的呢?
技術面試官內心罵娘: 額,我們都是前端做的,我們調介面就行了
打豆豆: 不會吧,前後端一般情況下都會做校驗呀,尤其後端資料庫這塊要保證資料的一致性、
技術面試官: 不知道、你還有其它問題麼
打豆豆: 沒有了
PS: 其實這個問題給每一個請求一個門票,支付req來了校驗門票,已支付,插入資料庫流水,同步redis ,同時銷燬門票,第二個請求來了,判斷是否存在流水就行了,只要不是特別要求一般用不到TCC事務補償,基本這些就能99.99保證不重複支付了
Fourth day PM 17:00
外包,外高橋富特北路237號,6號線航津路站;
1、無筆試
2、面試
結果未通過,面試過程中就收到郵件說已停止招聘了,尼瑪大坑
技術面試官: 隨意問了幾個模組
技術面試官: concurrentHashMap 什麼特點?
技術面試官: null 鍵,那你說為什麼支援null 鍵?
打豆豆內心: 好吧,我認栽…
先點開原始碼過一下,然後寫個demo 跟進去瞅瞅
//key為null的話 hash值為 0
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
// 原始碼如下:
public V get(Object key) {
Node<K,V> e;
return (e = getNode(hash(key), key)) == null ? null : e.value;
}
6.1 、開啟debug
/**
* @auther SyntacticSugar
* @data 2019/1/11 0011下午 10:05
*/
public class YZTest {
@Test
public void test(){
HashMap<Object, Object> map = new HashMap<>();
map.put(null, "null值");
System.out.println(map.get(null));
}
}
6.2、跟進去
// 底層是這樣處理的
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
再往下會呼叫hash(key) 方法對key 進行hash值計算,把計算出結果傳參,呼叫putVal( ) 方法、
//key為null的話 hash值為 0
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
boolean evict) {
//宣告變數
Node<K,V>[] tab; Node<K,V> p; int n, i;
// 1、直接到這裡判斷
if ((tab = table) == null || (n = tab.length) == 0)
//2、滿足條件就呼叫 resize()方法返回一個Node<K,V>[] 物件
// 給 tab賦值
//n=16
n = (tab = resize()).length;
if ((p = tab[i = (n - 1) & hash]) == null)
//3、 i=0
//呼叫構造建立 Node物件
//直接到 ++modCount;
tab[i] = newNode(hash, key, value, null);
else {
Node<K,V> e; K k;
if (p.hash == hash &&
((k = p.key) == key || (key != null && key.equals(k))))
e = p;
else if (p instanceof TreeNode)
e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);
else {
for (int binCount = 0; ; ++binCount) {
if ((e = p.next) == null) {
p.next = newNode(hash, key, value, null);
if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
treeifyBin(tab, hash);
break;
}
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
break;
p = e;
}
}
if (e != null) { // existing mapping for key
V oldValue = e.value;
if (!onlyIfAbsent || oldValue == null)
e.value = value;
afterNodeAccess(e);
return oldValue;
}
}
//4、 ++modCount值為0
++modCount;
//5、 ++size值0 ,threshold值是12
// 所以走afterNodeInsertion(evict);
if (++size > threshold)
resize();
//6、 evict值為true
//然後執行 return null 就返回 null
afterNodeInsertion(evict);
return null;
}
返回值為null ,所以key 為 null
至此,hashmap 底層對null 鍵的處理就完畢了、
2019.01.09 週三 小雨
安排了4家,面了3家
Fifth day AM 10:00
外包,上海黃浦區廣東路,南京東路地鐵站 ,世界貿易大廈
流程
1、筆試
2、面試
結果未通過
技術面試官: ok,負責了後臺和搜尋,那你說下後臺商品那幾張表?
技術面試官: 你做的這麼快就忘了?
打豆豆內心: 尼瑪,逆向生成又不是我設計的表
Fifth day PM 13:00
甲方,上海市楊浦區,地跌8號線黃興路
無筆試
2、面試
結果通過
專案
靜態化實現同步
redis分散式
hashtable和hashmap和concurrenthashmap
開源專案參與
部署
dubbo和cloud的介面區別
如何保證分散式商品id唯一
如何保證訂單不重複(冪等性)
spring瞭解多少
mvc框架了解多少(手寫過mvc框架,估計是個加分項)
bean載入的整個過程(答的不好)
只回答了工廠,反射
mq的瞭解,專案為什麼選rabbit
搜尋模組
遇到什麼問題,怎麼解決的
單例模式有用到?什麼場景?還有哪些場景
設計模式瞭解多少
Fifth day PM 15:30
甲方外派,上海徐彙區欽州路,地鐵1號線人民廣場
無筆試
2、面試
結果一面通過
如何保證分散式id唯一,
如何保證
執行緒阻塞和同步?
打豆豆: 同步/非同步關注的是訊息通知的機制,而阻塞/非阻塞關注的是程式(執行緒)等待訊息通知時的狀態。
打豆豆:
阻塞狀態(Blocked):一個正在執行的執行緒因某些原因不能繼續執行時,就進入阻塞 狀態。這些原因包括:
- 等待阻塞:當執行緒執行了某個物件的wait()方法時,執行緒會被置入該物件的等待集中,直到執行了該物件的notify()方法wait()/notify()方法的執行要求執行緒首先獲得該物件的鎖。
- 同步阻塞:當多個執行緒試圖進入某個同步區域(同步鎖)時,沒能進入該同步區域(同步鎖)的執行緒會被置入鎖定集(鎖池)中,直到獲得該同步區域的鎖,進入就緒狀態。
- 其他阻塞:執行的執行緒執行sleep()或join()方法,或者發出了I/O請求時,JVM會把該執行緒置為阻塞狀態。當sleep()狀態超時、join()等待執行緒終止或者超時、或者I/O處理完畢時,執行緒重新轉入就緒狀態。
treemap和hashmap
docker部署(不知道)
mysql語句執行順序(沒答上)
insert into(沒答上)
select insert into
遞迴
專案越來越慢怎麼處理
死鎖問題,遇到過?什麼是死鎖問題?
什麼場景遇到?
安全問題考慮過?你開發遇到過?
檔案注入,sql注入,命令注入?前端注入?怎麼解決
前端框架怎樣?vue門戶是你寫?
說下所有的你熟悉的前端框架
能寫前端?
打豆豆: 寫能寫,醜一點而已
一般都是前端寫
學習通過什麼方式
2019.01.10 週四 小雨
安排了2家,面了一家
Sixth day AM 10:00
外包,凱旋路369號 龍之夢雅仕大廈, 地鐵二號線中山公園站
流程
1、筆試
2、面試
結果未面試,做完筆試11:00 等待20分鐘仍不見面試官,直接走了
一個外包公司而已,不懂得尊重人
Sixth day PM 14:00
甲方,上海市松江區, 地鐵松江大學城站
流程
1、筆試
2、面試
結果薪資未達到期望
輪詢底層
閘道器配置
熔斷限流配置
redis超高併發
jwt鑑權如何傳遞資訊,如何解析出userInfo中資訊到其他微服務
userid儲存到哪裡?rsa非對稱加密載荷中
如何判斷2個token是不同的token
(當時回答每個使用者攜帶標記,)
(面試官說解析出來token判斷id ,也可行,
判斷signatrue )
後來想想是 signatrue標識著每一個token都不同
(寶貴時間問了問)諮詢了業務流程
2019.01.11 週五 小雨
安排了2家,某國企複試二面,寶鋼一面
Seventh day AM 9:30
某國企二面,浦東新區沈家弄路, 地鐵二號線
無筆試
2、面試
結果未通過,烏龍了,招前端的,我一個後端,嘎嘎
Seventh day AM 9:30
外包寶鋼,寶山區漠河路600號 東鼎國際大廈,3號線友誼路站
無筆試
2、面試
結果未通過,做物流專案,賣鋼鐵,對面試官水平保持懷疑
技術面試官: 我們是賣鋼鐵的,你們做商城的,差不多
技術面試官: 我們這邊主要做物流,其他人做其他的…
打豆豆內心: 哎呀,我去,啥都沒問
技術面試官: 對加班什麼看法
打豆豆: 錢到位一切ok
技術面試官笑笑: 你期望的這個就能讓你拼命幹了麼?
打豆豆內心: 這傢伙不是來招人的…
打豆豆: 開什麼玩笑,這點薪水是正常上下班的錢…
技術面試官: 有什麼想問的麼
打豆豆一分鐘都不想待: 沒有
That's all .