1. 程式人生 > >2017年BAT,京東,美團,滴滴等公司面試經驗總結

2017年BAT,京東,美團,滴滴等公司面試經驗總結

一、心態
   心態很重要!
   心態很重要!
   心態很重要!
   重要的事情說三遍,這一點我覺得是必須放到前面來講。
   找工作之前,有一點你必須清楚,就是找工作是一件看緣分的事情,不是你很牛,你就一定能進你想進的公司,都是有一個概率在那。如果你基礎好,專案經驗足,同時準備充分,那麼你拿到offer的概率就會比較高;相反,如果你準備不充分,基礎也不好,那麼你拿到offer的概率就會比較低,但是你可以多投幾家公司,這樣拿到offer的機率就要大一點,因為你總有運氣好的時候。所以,不要懼怕面試,剛開始失敗了沒什麼的,多投多嘗試,面多了你就自然能成麵霸了。得失心也不要太重,最後每個人都會有offer的。
   還有就是對待校招的態度,校招的目的並不僅僅是為了找工作,而且也是為了鍛鍊自己,提升自己;對於每個大學生來說,真正的校招只有一次,因此一定要珍惜;經過了校招的磨練後,自己的能力將得到很大的提升;這也是人生一個重要的經歷;


二、基礎

基礎這東西,各個公司都很看重,尤其是BAT這種大公司,他們看中人的潛力,他們捨得花精力去培養,所以基礎是重中之重。之前很多人問我,專案經歷少怎麼辦,那就去打牢基礎,當你的基礎好的髮指的時候,你的其他東西都不重要了。基礎無外乎幾部分:語言(C/C++或java),作業系統,TCP/IP,資料結構與演算法,再加上你所熟悉的領域。這裡面其實有很多東西,各大面試寶典都有列舉。在這隻列舉了java後臺工程師所需要的和我的學生面試中所遇到的知識點,儘量做到全面,如果你掌握了以下知識點,去面java後臺工程師應該得心應手。 J2SE基礎
1. 八種基本資料型別的大小,以及他們的封裝類。
2. 如果兩個Integer的值相等,使用==進行判斷的結果是否相等(常量池問題)?
3. 你重寫過hashcode和equals麼,要注意什麼
4. Object有哪些公用方法?
5. Java的四種引用,強弱軟虛,用到的場景。
6. equals與==的區別。
7. try catch finally,try裡有return,finally還執行麼?
8. Excption與Error包結構。OOM你遇到過哪些情況,SOF你遇到過哪些情況。
9. Java面向物件的三個特徵與含義。
10. Override和Overload的含義與區別。
11. Interface與abstract類的區別。
12. Static class 與non static class的區別。
13. String、StringBuffer與StringBuilder的區別。
14. ArrayList、LinkedList、Vector的區別。
15. Hashmap的原理
16. Map、Set、List、Queue、Stack的特點與用法。
17. HashMap和HashTable的區別。
18. HashMap和ConcurrentHashMap的區別,HashMap的底層原始碼。
19. TreeMap、HashMap、LindedHashMap的區別。
20. Collection包結構,與Collections的區別。
21. Hashmap的大小為什麼指定為2的冪次
22. Arraylist的原理
23. Hashmap中jdk1.8之後做了哪些優化
24. 多執行緒條件變數為什麼要在while體裡
25. Concurrent包裡的其他東西:ArrayBlockingQueue、CountDownLatch等等。
26. 實現多執行緒的三種方法:Thread,Runable,Callable.
27. 執行緒同步的方法:sychronized、lock、reentrantLock等。
28. 寫一個單例模式,如何解決執行緒安全的問題;
29. 問了為什麼用Volatile,synchronize移到方法最外面會怎麼樣?
30. 鎖的等級:方法鎖、物件鎖、類鎖。
31. 寫出生產者消費者模式。
32. Synchronize關鍵字為什麼jdk1.5後效率提高了
33. 講一下countDownLatch
34. ThreadLocal的設計理念與作用。
35. ThreadPool用法與優勢。
36. wait()和sleep()的區別。
37. 說一個你最熟悉的設計模式
38.講一下你專案中用到了哪些設計模式
39 講一下執行緒狀態轉移圖
40. Java IO與NIO。
41.Nio的原理
42.Channel和buffer
43.directBuffer和buffer的區別
44.nio和aio的區別
45.I++操作怎麼保證執行緒安全
46.如何解決併發訪問的錯誤
47.死鎖是什麼呢
48.怎麼解決死鎖
49. 反射的作用於原理。
50. 泛型常用特點,List<String>能否轉為List<Object>。
51. 解析XML的幾種方式的原理與特點:DOM、SAX、PULL。
52. Java與C++對比。
53. Java1.7與1.8新特性。
54. 設計模式:單例、工廠、介面卡、責任鏈、觀察者等等。
55.單例模式在你專案裡哪些應用?

Java裡有很多很雜的東西,有時候需要你閱讀原始碼,大多數可能書裡面講的不是太清楚,需要你在網上尋找答案。
推薦書籍:《java核心技術卷I》《Thinking in java》《java併發程式設計實戰》《effictive java》《大話設計模式》
 
JVM

1. 記憶體模型以及分割槽,需要詳細到每個區放什麼。
2. 堆裡面的分割槽:Eden,survival from to,老年代,各自的特點。
3. 物件建立方法,物件的記憶體分配,物件的訪問定位。
4. GC的兩種判定方法:引用計數與引用鏈。
5. GC的三種收集方法:標記清除、標記整理、複製演算法的原理與特點,分別用在什麼地方,如果讓你優化收集方法,有什麼思路?
6. GC收集器有哪些?CMS收集器與G1收集器的特點。
7. Minor GC與Full GC分別在什麼時候發生?
8. 幾種常用的記憶體除錯工具:jmap、jstack、jconsole。
9. 類載入的五個過程:載入、驗證、準備、解析、初始化。
10.雙親委派模型:Bootstrap ClassLoader、Extension ClassLoader、ApplicationClassLoader。
11.分派:靜態分派與動態分派。
10.Java的full gc
11.Full gc會導致什麼問題
12.垃圾回收演算法的過程
13.你瞭解的垃圾收集器? Cms收集器的過程
14.怎樣進入老年代?

JVM過去過來就問了這麼些問題,沒怎麼變,記憶體模型和GC演算法這塊問得比較多,可以在網上多找幾篇部落格來看看。
推薦書籍:《深入理解java虛擬機器》
 


作業系統

1. 程序和執行緒的區別。
2. 死鎖的必要條件,怎麼處理死鎖。
3. Window記憶體管理方式:段儲存,頁儲存,段頁儲存。
4. 程序的幾種狀態。
5. IPC幾種通訊方式。
6. 什麼是虛擬記憶體。
7. 虛擬地址、邏輯地址、線性地址、實體地址的區別。

推薦書籍:《深入理解現代作業系統》
 


TCP/IP

1. OSI與TCP/IP各層的結構與功能,都有哪些協議。
2. TCP與UDP的區別。
3. TCP報文結構。
4. TCP的三次握手與四次揮手過程,各個狀態名稱與含義,TIMEWAIT的作用。
5. TCP擁塞控制。
6. TCP滑動視窗與回退N針協議。
7. Http的報文結構。
8. Http的狀態碼含義。
9. Http request的幾種型別。
10. Http1.1和Http1.0的區別
11. Http怎麼處理長連線。
12. Cookie與Session的作用於原理。
13. 電腦上訪問一個網頁,整個過程是怎麼樣的:DNS、HTTP、TCP、OSPF、IP、ARP。
14. Ping的整個過程。ICMP報文是什麼。
15. C/S模式下使用socket通訊,幾個關鍵函式。
16. IP地址分類。
17. 路由器與交換機區別。
18. http請求流程
網路其實大體分為兩塊,一個TCP協議,一個HTTP協議,只要把這兩塊以及相關協議搞清楚,一般問題不大。
推薦書籍:《TCP/IP協議族》
 


資料結構與演算法

1. 連結串列與陣列。
2. 佇列和棧,出棧與入棧。
3. 連結串列的刪除、插入、反向。
4. 字串操作。
5. Hash表的hash函式,衝突解決方法有哪些。
6. 各種排序:冒泡、選擇、插入、希爾、歸併、快排、堆排、桶排、基數的原理、平均時間複雜度、最壞時間複雜度、空間複雜度、是否穩定。
7. 快排的partition函式與歸併的Merge函式。
8. 對冒泡與快排的改進。
9. 二分查詢,與變種二分查詢。
10. 二叉樹、B+樹、AVL樹、紅黑樹、哈夫曼樹。
11. 二叉樹的前中後續遍歷:遞迴與非遞迴寫法,層序遍歷演算法。
12. 圖的BFS與DFS演算法,最小生成樹prim演算法與最短路徑Dijkstra演算法。
13. KMP演算法。
14. 排列組合問題。
15. 動態規劃、貪心演算法、分治演算法。(一般不會問到)
16. 大資料處理:類似10億條資料找出最大的1000個數.........等等
17. 加密解密瞭解麼?幾種演算法,講一下你瞭解的
18.寫一個兩個有序連結串列合併成一個有序連結串列
19.堆排序的原理
20.介紹一下紅黑樹
21.對演算法有什麼瞭解?答主先回答了動態規劃,解釋了一下dp的思想
22.快排的思想講一下
23.講一下穩定的排序演算法和不穩定的排序演算法
24.手撕演算法:一棵二叉排序樹,給定一個數,找到與給定數差值最小的數
25.場景題:設計一個系統,解決搶購時所需要的大量的短連結的功能,如何保證高併發,如何設計短連結
26.手撕演算法:兩個排序的陣列A和B分別含有m和n個數,找到兩個排序陣列的中位數,答主用的二分,時間複雜度為O(log (m+n))。結果面試官不滿意,
讓用歸併的思想做,時間複雜度其實更高了
27.手撕演算法:假設你是一個專業的竊賊,準備沿著一條街打劫房屋。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是:相鄰的房子裝著相互
聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。給定一個非負整數列表,表示每個房子中存放的錢, 算一算,如果今晚去
打劫,你最多可以得到多少錢 在不觸動報警裝置的情況下。
28.演算法題:給一個整數陣列,找到兩個數使得他們的和等於一個給定的數 target。
29.手撕演算法:最小公倍數和最大公約數
30.手撕演算法:反轉單鏈表
31.手撕演算法:實現類似微博子結構的資料結構,輸入一系列父子關係,輸出一個類似微博評論的父子結構圖
32.手撕一個單例模式
33.智力題:時針分針什麼時候重合

演算法的話其實是個重點,因為最後都是要你寫程式碼,所以演算法還是需要花不少時間準備,這裡有太多演算法題,寫不全,我的建議是沒事多在OJ上刷刷題(牛客網、leetcode等),劍指offer上的演算法要能理解並自己寫出來,程式設計之美也推薦看一看。
推薦書籍:《大話資料結構》《劍指offer》《程式設計之美》《程式設計珠璣》
 
javaEE:


1.servlet工作流程,如何解決配置檔案過於繁瑣的問題
2.JSP和Servlet有什麼區別?為什麼要搞出兩個來。
3.forward 和 redirect區別
4.servlet的幾個方法 doget dopost區別
5.在多個伺服器之間session是怎麼共享的。
6.servlet工作流程,如何解決配置檔案過於繁瑣的問題
7.session的機制;session和cookie區別
8.servlet和filter的區別。filter你在哪些地方用到過。
9.怎麼解決session一致性快取的問題


框架:

1.Hibernate的延遲載入是怎麼實現的
2.Hibernate持久化的狀態。
3.Hibernate的生成策略
4.Hibernate的batch有數量限制麼
5.hiberate與mybatis區別
6.Mybatis高階對映
7.Spring IOC和AOP的理解,它們的原理是什麼,如果讓你自己搞個IOC,AOP的話,怎麼搞。
8.Struts2和SpringMVC的區別。
9.spring實現事務的方式有哪些。
10.spring中$與#。
11.spring的事務有幾種方式?談談spring事務的隔離級別和傳播行為。
12.spring中用到了哪些設計模式,執行緒池;
13.Spring中autowire和resourse關鍵字的區別
14.講講你對spring的理解,不要把ioc和aop背給我聽
15.介紹spring中的熟悉的註解
16.讓你實現autowire註解的功能你會如何實現
17.Spring的aop怎麼實現

18.Spring的aop有哪些實現方式

19.動態代理的實現方式和區別

框架裡有很多很雜的東西,有時候需要你閱讀原始碼,大多數可能書裡面講的不是太清楚,需要你在網上尋找答案,也同時需要看一下官方的文件


資料庫
1.講一下資料的acid
2.什麼是一致性
3.什麼是隔離性
4.Mysql的隔離級別
5.每個隔離級別是如何解決
6.資料庫的索引原理
7.非聚簇索引和聚簇索引
8.索引的使用注意事項
9.專案用到什麼資料庫?隔離級別?每個隔離級別各做了什麼
10.資料庫的索引?mysql不同引擎索引的區別
11.資料庫的索引原理
12.索引使用的注意事項
13.Mysql的資料庫引擎,區別特點
14.一千萬使用者併發搶購,怎麼設計
15.什麼時候用讀鎖
16.什麼時候用寫鎖
17.Cas的原理,使用場景
18.資料庫的瓶頸
19.快取還沒更新到主存,伺服器掛了怎麼辦
20.資料庫掛了怎麼辦
21.鎖的實現原理
22.怎麼解決快取和主存的一致性問題
23.資料庫掛了怎麼怎麼辦
24.怎麼保證一致性
25.分散式事務知道麼
26.介紹分散式事務
27.為什麼負載均衡
28.怎麼實現負載均衡
29.資料庫掛了怎麼辦?除了熱備份還有什麼方法
30.資料庫的索引
31.資料庫的隔離級別
32.Mysql的容災備份
33.Redis和memcache 的區別
34.為什麼選擇redis
35.mysql資料庫的引擎和區別
36.看你最近部落格寫的是redis,介紹redis和mysql的區別
37.Redis的應用場景
38.設計題,一個圖書館管理系統,資料庫怎麼設計,需求自己定
39.Redis的特點
40.分散式事務瞭解麼
41.Mongodb和關係型資料庫之間的區別,還了解其他的非關係型資料庫沒
42.Redis如何解決key衝突
43.有深入瞭解過redis嗎?
44.Redis的優勢和特點
45.Redis和mysql的區別
46.Redis的持久化有哪些方式,具體原理
47.如果成功的使用者有10萬,redis存不下怎麼處理
48.瞭解redis原始碼麼
49.瞭解redis叢集麼
50.Redis的持久化?有哪些方式,原理是什麼?
51.Mysql對聯合索引有優化麼?會自動調整順序麼?哪個版本開始優化?
52.Redis的應用
53.Redis的持久化的方式和原理


新技術
1.如果你夠牛,mq,dubbo,zookeeper都會問到
2.對高負載有了解麼
3.對高併發有了解麼?
4.訊息隊列了解麼
5.分散式瞭解麼
6.自己寫一個tomcat伺服器,你會怎麼寫
7.分散式伺服器會出現哪些問題    
8.反爬蟲的機制,有哪些方式
場景
1.場景題:設計一個下單系統,下單成功後可以給使用者發優惠券
2.接上面場景題:伺服器掛了,優惠券還沒發怎麼辦
3.場景題:千萬使用者搶購,如何處理高併發,並且有一個連結,指向前一天搶購成功的使用者,如何設計這個系統和資料庫
4.如果後臺處理搶購請求的伺服器,每次最多承受200的負載,系統該怎麼設計


hr
你的職業規劃
有哪些offer
為什麼還來我們這
自我介紹


三、 專案
關於專案,這部分每個人的所做的專案不同,所以不能具體的講。專案不再與好與不好,在於你會不會包裝,有時候一個很low的專案也能包裝成比較高大上的專案,多用一些專業名詞,突出關鍵字,能使面試官能比較容易抓住重點。在聊專案的過程中,其實你的整個介紹應該是有一個大體的邏輯,這個時候是在考驗你的表達與敘述能力,所以好好準備很重要。、
面試官喜歡問的問題無非就幾個點:
1. XXX(某個比較重要的點)是怎麼實現的?
2. 你在專案中遇到的最大的困難是什麼,怎麼解決的?
3. 專案某個部分考慮的不夠全面,如果XXXX,你怎麼優化?
4. XXX(一個新功能)需要實現,你有什麼思路?
5. XXX專案的亮點有哪些?
6. 如果資料量很大,併發數很多怎麼處理?
7. 專案介紹,最複雜的表
8. 專案介紹
9. 專案架構
10.專案難點
11.專案裡一個完整請求的流程
12.專案的優化

其實你應該能夠預料到面試官要問的地方,請提前準備好,如果被問到沒有準備到的地方,也不要緊張,一定要說出自己的想法,對不對都不是關鍵,主
要是有自己的想法,另外,你應該對你的專案整體框架和你做的部分足夠熟悉。


四、 其他

你應該問的問題

面試裡,最後面完之後一般面試官都會問你,你有沒有什麼要問他的。其實這個問題是有考究的,問好了其實是有加分的,一般不要問薪資,主要應該是:關於公司的、技術和自身成長的。

以下是我常問的幾個問題,如果需要可以參考:
1. 貴公司一向以XXX著稱,能不能說明一下公司這方面的特點?
2. 貴公司XXX業務發展很好,這是公司發展的重點麼?
3. 對技術和業務怎麼看?
4. 貴公司一般的團隊是多大,幾個人負責一個產品或者業務?
5. 貴公司的開發中是否會使用到一些最新技術?
6. 對新人有沒有什麼培訓,會不會安排導師?
7. 對Full Stack怎麼看?
8. 你覺得我有哪些需要提高的地方?
 
知識面
除了基礎外,你還應該對其他領域的知識有多少有所涉獵。對於你所熟悉的領域,你需要多瞭解一點新技術與科技前沿,你才能和麵試官談笑風生。
軟實力
什麼是軟實力,就是你的人際交往、靈活應變能力,在面試過程中,良好的禮節、流暢的表達、積極的交流其實都是非常重要的。很多公司可能不光看你的技術水平怎麼樣,而更看重的是你這個人怎麼樣的。所以在面試過程中,請保持誠信、積極、樂觀、幽默,這樣更容易得到公司青睞。很多時候我們都會遇到一個情況,就是面試官的問題我不會,這時候大多數情況下不要馬上說我不會,要懂得牽引,例如面試官問我C++的多型原理,我不懂,但我知道java的,哪我可以向面試官解釋說我知道java的,類似的這種可以往相關的地方遷移(但是需要注意的是一定不要不懂裝懂,被拆穿了是很尷尬的),意思就是你要儘可能的展示自己,表現出你的主動性,向面試官推銷自己。還有就是遇到智力題的時候,不要什麼都不說,面試官其實不是在看你的答案,而是在看你的邏輯思維,你只要說出你自己的見解,有一定的思考過程就行。
 

五、面試技巧
1.技術面試時,會的問題以回答,不會的問題怎麼回答;
2.HR面時,注意自己的禮貌;
3.聽懂面試官的問題