1. 程式人生 > >2019年網際網路寒冬,帶你走進真實的面試殺出重圍

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));
    }
}

4
6.2、跟進去
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
3

至此,hashmap 底層對null 鍵的處理就完畢了、


2019.01.09 週三  小雨   
安排了4家,面了3家
Fifth day AM 10:00

外包,上海黃浦區廣東路,南京東路地鐵站 ,世界貿易大廈
流程
1、筆試
2、面試
結果未通過

技術面試官: ok,負責了後臺和搜尋,那你說下後臺商品那幾張表?
技術面試官: 你做的這麼快就忘了?
打豆豆內心: 尼瑪,逆向生成又不是我設計的表

4

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 .