非科班渣碩面經
作者:WISING
鏈接:https://www.nowcoder.com/discuss/59865?type=0&order=4&pos=5&page=3
來源:牛客網
- 校招經歷
在面試初期好幾家面試都沒過,加上被菊廠拒了,心裏還是很不爽的,直到九月中旬去哪兒三面直接發了offer,當時有點柳暗花明的感覺。後面又面了招銀、海康之內的好幾家公司,在拿到這幾家之後基本就沒找了(期間經常每天四五個面試邀請沖突,拒絕的感覺還是挺爽的,覺得自己之前做這麽多筆試還是有效果的)
下面講講幾個公司的面試問題:
酷家樂(一家創業做家裝的創業公司,面試體驗非常好,但二面約的時間和一個現場面試沖突了沒面)
電面:
- 說說你印象最深的項目(異步隊列)
- 在項目中遇到了什麽問題(數據庫的設計、異步隊列如何將事件傳入)
- 說說對redis的理解(基於內存、I/O多路復用、單線程)
- redis為什麽要使用單線程(面試官補充主要是為了原子性操作)
- redis有哪些常用的數據結構,項目中你使用了什麽數據結構
- 說一下spring的了解,有幾種註入方式,你們項目一般使用什麽進行註入
- 項目的web.xml配置中dispatcherServlet和ContextListener是幹什麽的
- mybatis使用情況,了解哪些,用了哪些標簽
- 項目中用到了什麽設計模式
- 項目使用了什麽版本管理軟件,在github學習什麽開源項目沒有
- 一道算法,有序數組裏面數字可重復,給定一個數,找出該數的範圍(第一次就想到了遍歷,後面想二分查找改進)
- 漢諾塔問題
電面:
- 類加載了解嗎?類加載步驟,雙親委派模型。如果我寫了一個java.lang.String類,怎麽進行加載的,怎麽跟原來的類進行區分的?
- 垃圾回收機制了解嗎?哪些時間我們需要對垃圾進行回收,如果我有一臺雙核4g的機器,我該如何分配新生代和老年代的大小?
- 異常捕獲了解嗎?說說常用的,你在項目中用到了哪些類型的異常捕獲?如果碰到了空指針那些異常你會怎麽處理呢?
- 多線程怎麽樣?說說你項目中用到的並發
- 說說你最拿手的項目?說了redis異步隊列,就問同步和異步的概念,異步需要怎麽實現,需要回調函數嗎
- 既然redis用到了緩存,那如果叫你自己實現一個緩存,你該如何實現?怎麽考慮緩存過期這些問題?
電信IT研發(電信的互聯網公司,有編制,待遇也不錯,前面二十分鐘基礎感覺答的基本倒背如流的,問到架構不太會了)
- 單點登錄怎麽做的,session共享,session和cookie的區別
- Bootstrap啥類型的,jQuery了解情況
- JVM垃圾回收,新生代和老年代的垃圾回收,可達性分析
- HashMap和Hashtable區別,HashMap添加的對象為什麽要重寫equals和hashcode
- 數據庫了解多少,事務acid,事務操作,怎麽加鎖,分布式系統鎖,選舉
- 微服務了解什麽,微服務治理,微服務之間通信
58同城(面試最差的體驗,酒店超級差,悶的要命,安排還惡心,過去等了三小時,一面面的還不錯,二面沒問多少就掛了,好像都是c++崗,面試官不用Java)
一面:
- 手寫快排
- 數據庫引擎的區別,說說btree,手寫聯合查詢sql
- HashMap了解多少說多少
- wait()和sleep()
- 事務舉例
- 用過什麽nosql,說說redis,topk用什麽數據結構
- 數據庫分表
- 情景題,高並發訪問一個接口,如何檢測傳入字符串的相似度很高的?答了個布隆過濾器,說沾了邊
二面
- 算法題給一個數組,如何把偶數放到左邊,奇數放到右邊?寫完後說當兩邊順序已經一致了,交換是否會出現問題,加個判斷
- 說說數據庫,聚合函數了解嗎?
- 網絡編程了解嗎,http請求如何區分請求頭和請求體?說了解一點nio的知識,nio指什麽,同步和非阻塞的概念是什麽?
- 說下註冊的時候的檢測,多用戶怎麽判定是否被註冊
去哪兒網(面試最好的體驗,第一天上午機試,下午就接到通知明天去面試。在一個去哪兒合作的小清新酒店面試的,所有面試官都特別好,遇到答不上來的會給你解答,三面完直接現場發offer,只要在十月三十一號之前把三方寄給他們就行,簡直不要太良心。當時一面完的時候我說我計算機網絡和操作系統方面不是特別好,一面面試官笑著說:沒事,路還長呢,你去等二面吧。待遇呢給的確實偏低,不過還是由衷粉一波去哪兒)
一面:(30來分鐘)
- 說一個自己比較深的項目 ,redis多消費者一起取的時候如果隊列為空你怎麽處理(答了CAS進行嘗試,超過失敗次數之後就進入睡眠,面試官說可以不用這麽復雜~~為空時直接進行睡眠就行)
- 紙上手寫Springmvc DispatcherServlet的大致實現(大概10分鐘的樣子)
- 數據庫了解嗎?聚集索引和非聚集索引的區別,存儲引擎的區別?主鍵使用不重復的字符串會出現什麽問題(插入的時候由於字符串不能像自增長的id一樣連續,所以在磁盤上的位置不同)?
- 說說HashMap吧,然後講了HashMap、ConcurrentHashMap 1.7、1.8的實現(講的很詳細,面試官覺得數據結構還不錯)
- 然後問計算機網絡咋樣,我說很一般操作系統咋樣,我說很一般
- 線程有哪些狀態,怎麽進行切換的。
二面:(40來分鐘)
- 說一個比較深的項目,還是說的異步隊列,問你這為啥要用redis做異步隊列啊,我用線程池直接自己開一個隊列跟這有啥區別。扯了一堆,扯了redis I/O多路復用模型,最後不太滿意~~
- 然後又手擼了一遍Springmvc
- 然後問HashMap
- 最後說你用了這麽多redis,叫你設計一個緩存,你該怎麽設計,get和set的時間復雜度怎麽算的(答了用LinkedHashMap實現,分析了一下LinkedHashMap但是也沒怎麽說清)
三面:(20來分鐘)
- 談下人生,當場發了offer
順豐科技(最懵逼的一次面試,在品學樓一個教室面的,感覺極不正規。一個估計三十來歲但是看著可能四十多歲的大叔面的,完全get不到他的點)
一面:
- 進去跟hr面一樣,談人生(你最喜歡看哪本書,你覺得在華為學到了什麽),全程基本沒問技術,吹牛20分鐘說可以走了
招銀網絡科技(招商銀行下面的子公司,以前叫融博,負面新聞較多,今年在成都剛成立分部,由於是銀行,筆試和面試都比較強調sql,面試偏重於數據庫和項目。現場面在軟件園那邊的招商銀行面的,當天直接三面,基本每個人都有三面。面試的感覺只有一個:不愧是銀行,太壕了。在七樓面試,層高居然有5、6米高)
一面(電面15分鐘)
- 說說對JVM的理解
- Java程序初始化順序
- 線程的創建
- mysql主鍵和唯一索引的區別
- 說說最近的項目
- 如何實現session共享,用redis如何實現
- 說說微服務,微服務之間如何管理
二面(現場面30多分鐘)
- 看項目中有前端的,先問了下前端的css的選擇優先級
- 手寫了一個查詢sql
- 手寫了一個雙重檢查單例,問spring是怎麽實現單例的
- springmvc的大致實現過程
- 項目裏重要的地方
- 說說微服務
- 如果你不用redis來做隊列,自己寫你需要註意哪些方法
- 數據庫存儲引擎的區別
- 數據庫優化會嗎,說說常用的優化
三面(現場面30多分鐘)
- 面試官看了簡歷覺得項目時間都不長,沒有太多興趣,全程帶笑,叫講項目的興趣點。講redis異步隊列,吹吹原理。說這沒啥用,你這單機redis還不如自己實現一個隊列速度還快些呢,你用Java寫一個類似的redis才厲害(當時有點懵逼,感覺這面試官可能不太懂技術)。然後笑著聽我吹完了springmvc一套,最後問我微服務治理知道不,我就扯了點服務註冊和發現的知識。
四面(現場面40多分鐘)
- 女hr全程含沙射影帶笑的問,別人好像都只面了20來分鐘。。。由於是轉行,問了我轉行原因,學習、生活、教研室那些情況。
OPPO(廣告部的工程師面的,面試官自我介紹時有個非常騷氣的花名,整體問的比較開放,二面聊著聊著就掛了)
筆試題比較簡單
一面(現場面20來分鐘):
- 面試官首先自我介紹,然後我自我介紹。叫先看成績單,問我最喜歡哪一門課,這門課有什麽特點(我嗅到了hr面的氣息)
- 然後說先看下筆試題吧,你覺得筆試難不(我回答說不難就看到面試官在紙上寫了個簡單,感覺想教育我了),就問了http和https的區別,https加密的過程
- Spring是什麽啊,為什麽用Spring啊?Hibernate是什麽啊?Mybatis是什麽啊?假如我現在要分庫分表,我選哪個框架?(這沒接觸過啊。。)你為啥用Redis啊,Redis有哪些方法,Redis事務,Redis哪些方法有原子性,Redis和Kafka用什麽區別啊?
- Java虛擬機垃圾回收方面的知識,生存區為什麽要有兩個,空間擔保機制是啥
- 一個32核,64g的linux服務器,硬盤是5TB,怎麽統計一個1TB的文件中一個限定中文名和英文名出現的次數(我簡單說了下使用流水線),問大概需要多久時間,估計一下,一分鐘兩分鐘還是十分鐘。(總而言之面試的問題全部都相當的開放,讓你自己說)
二面(現場面20分鐘):
- 簡單問了下項目,各個知識點都問了一點點。
海康威視(今年擴招特別多,面試相對偏水,面試官感覺技術很不錯,問的問題完全不按套路來)
一面(現場面20分鐘)
- 面試官特別扯,進來就問後面還有幾個,我們稍微快一點吧。然後看了我的簡歷,就問前端的類選擇器。
- 然後問Spring Boot啥概念,有啥優勢。接著問Spring Data JPA是啥,咋用(面試這麽久第一次問我這個)。我解釋了一些JPA是個規範,面試官問你這JPA用的啥版本啊(懵逼,倆月沒用了。。記不住了),然後又問JPA是哪個組織規定的啊(懵逼的說了sun、spring、apache。。實際是EJB3.0小組)
- 看你用了Redis,你這Redis咋用的,用過lua腳本沒有(這個真沒用過)
- 面試官繼續問:你這Java虛擬機什麽掌握的咋樣啊(感覺可以開始表演了),結果我回答還不錯的之後,面試官問:說說一個class文件的具體組成結構啊,要細(懵逼,這部分沒怎麽看,就說裏面有魔數)。繼續問:虛擬機是起解釋作用嗎,有編譯作用嗎(一堆不是常規套路的問題問的很懵)。
- 然後我說我模擬實現過Spring MVC,請讓我表演一哈。面試官看完簡歷之後說,那你就說說用了哪些設計模式(???這怎麽表演),回答了下之後又問我一個http的請求的組成結構,然後叫我說http的狀態碼,有多少說多少。(感覺這個面試官就在觀察表情,看著你很會的那種就馬上換話題,完全不按套路出牌。最後毆打完我之後說了句你基礎還可以)
二面(現場面5分鐘)
- hr小姐姐直接問想去哪,想要啥待遇
京東(投的成都崗結果北京的面試官面的,一面面試官覺得我還不錯,結果二面面試官在某天晚上深夜11點打電話來說面試一下,說自己還在公司裏面。我和他都很意外我投的成都崗,但卻是他們部門面試,估計特別缺人,問我能實習不,我說要做畢設不能實習就涼了。有點可惜,留成都京東還是很不錯的)
一面(50多分鐘)
- Struts2和SpringMVC區別,SpringMVC有啥好處。SpringMVC的執行流程。一個網頁從輸入網址到顯示經歷什麽過程?Cookie和Session的概念。Mybatis和Hibernate的區別。異常處理知道不?詳細介紹了一下異常的分類並舉例
- Redis有哪些數據結構。支持事務嗎?Redis分布式鎖知道不?Redis能持久化嗎,持久化有哪些方式,有什麽特點?斷電會丟失數據嗎?誰更嚴重?
- 數據庫熟悉不,數據庫引擎有哪些,InnoDB和MyIsam有啥區別,索引知道什麽,哈希索引和b+樹索引有啥特點,說說b樹和b+樹,畫畫b+樹的結構,b+樹最下面存的是數據嗎?下面的數據有序嗎?
- 設計模式知道什麽?項目中用了什麽?回答用了策略模式,簡單說了說。寫個單例吧?寫了個雙重檢查的單例。
- 數據結構學的咋樣?說說HashMap吧,對比說了HashMap和Hashtable,詳細說了HashMap,最後引到解決線程安全用ConcurrentHashMap.詳細說了ConcurrentHashMap1.7、1.8的put和size方法的區別和實現。其中問了synchronized底層實現知道不,就回答了個monitor,其它不太清楚。然後CAS是啥,解釋一下。
- 有並發經驗沒有?回答說沒有,但是知道基本知識,看過並發編程的藝術。說說開啟線程的幾種方式吧?說說volatile?說說Happens-before原則?CountDownLatch知道不,解釋下,什麽情況下使用?
- 寫個二分查找吧,遞歸的
- 做個智力題:8個球7個一樣重的,有一個偏重,一個天平,如何兩次找出偏重的小球
- 給了一張紙,寫寫項目中如何保證代碼的魯棒性和可擴展性?
- 你有哪些offer?然後介紹了下自己的部門.
二面(10來分鐘)
- 簡單問了下簡歷上的項目,問能不能現在過來實習
總的來說。面到後面才發現了很多套路,但是好的公司已經基本結束了。所以建議提早準備,即使不能實習,也去投幾個公司練一練,每次把面試問題總結一下,發現裏面的套路,然後自己準備一套吹點。
=================================================================================================================
- 總結
關於轉行,以前評論宣稱學了幾個月Java隨便找好工作,在現在的面試難度來看,基本不太可能,軟件也不是想象中那麽好找工作,一個崗位要的人多但是競爭的人也特別的多。如果覺得本專業不太適合自己或者自己以後不太想去工廠那些地方上班,轉行請趁早,也不一定非的學計算機,可以選自己方向相近的方向來自學。如果想轉學計算機,也請早點明確自己的方向,然後在這個方向上深耕一下。很多概念性、全局性的知識,在短期內可能自己是無法理解的,需要一段時間、一個過程來理解(個人感覺這是科班和非科班主要的差距),很多基礎性的知識可能會在你以後運用某個知識點時才察覺到原來是這樣。在自學了一段時間後,可以開始接觸數據結構和算法及計算機的一些基礎知識,刷題要趁早,平時多看一些技術博客(CSDN、簡書、博客園),有機會的話盡量找個工作室或者實習,如果實習不太靠譜,建議在校招前夯實自己的基礎。關於校招,找工作運氣和實力是46開的,面試掛了不一定是自己不行,也很有可能是和面試官不太聊的來。並不太過沮喪,面完一個反思總結面好下一個。簡歷上的東西力爭全都會,摸索一套屬於自己的吹點。面試官大部分情況下不會問框架的基本使用,都喜歡問點底層的東西(面試造火箭,工作擰螺絲),所以會點基本的CRUD是沒有太多作用的,建議深挖底層,比如樓主比較擅長吹Spring MVC、HashMap和ConcurrentHashMap1.7和1.8的源碼,面試的時候引導面試官,在一張紙上給他詳細畫自己的思路。比如項目中經常用的Redis,那最好知道Redis的底層的單線程模型和持久化的方式,再深入一點自己模擬實現一個簡單的Redis可以嗎(LRU算法,再自己想想時間復雜度)。使用Mybatis,可以自己運用JDBC模擬一下Mybatis的實現。這些好多都是樓主校招後期才慢慢體會到的(然鵝工作都找完了)。
終於寫完了,排版亂見諒了,祝各位找到心儀的工作,希望自己順利畢業(求善良的導師放過)
非科班渣碩面經