2018Java開發面經(持續更新)
不要給自己挖坑!!!不要給自己挖坑!!!不要給自己挖坑!!!如果面試官只是問你了解xxx嗎,如果不是很了解,就直接說不知道,不要說知道,不然面試官深問再不知道就印象很不好!
處女面送給了頭條(北京)日常實習(一面掛,視頻面,持續時間一個小時,2018.3.28):
2)擴展需求(我的設計里面學生每場考試只能考一次):學生反復考同一份考試,怎么查看每場考試的具體情況?
2)訂單號怎么生成?
3)怎么實現定時關單?
字節跳動(武漢)暑期實習(兩面技術一面HR,現場面,給了口頭offer拒了。持續時間技術面平均一個小時,hr十分鍾,2018.6.15)

1 int a = 10; 2 public int fun() { 3 static int b = 10; 4 int k = 1; 5 }
2)操作系統LRU的計算題。
3)TCP和UDP的區別。
4)網絡子網的計算,即有多少個子網,每個子網多少個主機。
5)16進制表示的兩個有符號數相加,0x7FFF FFFF FFFF FFFE + 0x1000 0000 0000 0000,結果是-2。
6)堆排序的時間復雜度是o(nlgn),建堆的時間復雜度是o(n),調整堆的時間復雜度是o(lgn)。
7)排列組合問題,20分鍾內一輛車經過的概率是75%,則10分鍾內一輛車經過的概率是多少。
設10分鍾內一輛車經過的概率是p,則有(1-p)(1-p)+0.75=1,解得p=0.5。
8)匯編高低位怎么放置的問題。
算法題:
1.尋找數組中的峰值(比左右兩個值大)。直觀解法是o(n),遍歷一遍找到就返回;優化解法是o(lgn),二分查找,一旦找到就返回,否則左右誰大往哪邊找。
2.leetcode42題。
設計題:
設計微博時間線系統,關注的人發微博后怎么實時更新到粉絲首頁,盡量少的延時,下滑時翻頁是怎么做到的。要求,模塊設計,模塊之間的協調通信。
解決:仿照微信(寫擴散)。寫擴散的應用:粉絲和發微博不是很多的情況。每次關注的人發微博的時候要向粉絲寫入數據。所以當數據量太大的時候有可能承載不了,但是微信朋友圈是可以的。讀擴散的應用?
考察:設計題沒有標准答案,要注意針對不同的實際業務量有不同的分析和解決方案。
一面(五十分鍾)
1.針對筆試題,一一追問解決辦法。
2.TCP和UDP的區別:TCP可靠、具有擁塞控制,但是有延時、消耗資源;UDP不可靠,適用於視頻通話等。
3.畫出項目的整體框架圖,是架構式的,系統瓶頸在哪里(圖片服務沒法更新、tomcat沒做異步)。
二面(一個小時,TCP和UDP的問題問的很深入,起碼問了有半個小時)
1.域名解析過程,IP由DNS服務器解析出來,DNS用UDP協議,HTTP的PORT默認是80,用到了TCP建立三次握手連接,數據鏈路層查找MAC地址用的ARP協議(但這個協議實際是網絡層的)。
1.TCP和UDP深入追問,TCP是針對字節流的,UDP是針對報文的,他們的本質區別是什么?即字節流和報文在發送和接收數據方面有什么不一樣的地方?TCP由於有窗口大小的限制,所以發送端發送過來的數據如果過大,不能一次性全部接收,而應該循環接收,直至全部接收;而UDP則沒有這種限制,發送端發多少,接收端就可以收多少。
2.Socket編程中,發送端send兩次10B的數據,接收端receive一次數據,可以接收的數據范圍是多少?1B~20B。
3.MySQL索引有哪些?左前綴索引是什么樣的概念?在什么樣的情況下索引會失效?
4.MySQL的引擎有哪些?有什么區別?
5.redis的數據類型有哪些?各適用於什么場景?
6.Java里面的map都有哪些子集合?各有什么區別?HashMap(允許null值,非線程安全,時間復雜度是o(1)),HashTable(不允許null值,線程安全),TreeMap(有序,時間復雜度是o(lgn))。。。
8.HashMap的key是自定義的類時,為了保證key的唯一性,應該重寫該類的hashCode和equals。
7.加密存儲是用什么加密的?MD5是不可逆加密,可不可以用密鑰加密?為什么不采用密鑰加密,這種可逆加密與不可逆加密有什么區別,各有什么好處?
8.自己挖坑了。。。加密算法了解一些嗎?對稱加密和非對稱加密。。。
9.單點登錄系統的實現思路。單點登錄主要解決什么樣的問題?cookie不能跨域問題。你的系統中解決了什么樣的跨域問題?www.mall.com和www.baidu.com這種跨域問題怎么解決?
10.寫sql語句,uid,date,count分別表示學號,進圖書館的日期,進圖書館的次數,查出每個學生四月份進圖書館的總次數。select uid,sum(count) from t where 4月份 group by uid。
11.Java中的堆區和棧區有什么區別?
一面(2018.4.13)
1.技術方面介紹一下項目。
2.用到了redis的哪些數據結構。
2.集群是什么,怎么發展成集群的形式?
3.ngnix的conf怎么配置成集群?
4.散列表解決沖突的方式有幾種?各有什么優劣,哪種最好?
5.介紹一下kmp算法。
二面(2018.4.17)
1.每個組成的作用和所處的角色,包括JDK,JRE和JVM。JRE和JVM的區別。
答案:JVM不只做回收,
2.在什么場景下會用到哪些集合類?
答案:HashMap,ArrayList,HashSet等。
3.每個集合類的特性。
答案:hashmap可以存session,hashset不允許重復值,arraylist獲取列表。hashset數據是否有序。基於set的有序存儲應該用什么實現,treeset。
4.重寫和重載的區別以及什么時候使用。子類怎么調用父類的方法。
5.線程和進程之間的區別以及各自的優缺點以及各自的使用場景。
6.線程的狀態及轉換關系。
7.快排和冒泡的流程。
8.JVM的GC、分代回收等。
9.堆和棧存儲的是什么?基本數據類型和字符串存在哪里?方法定義存在哪里?
答案:堆:對象。棧:引用。
10.http請求的流程。
答案:查找本地緩存ip->DNS解析等。
11.
阿里內推sdn開發實習(一面掛,每次接到電話都是晚上,2018.4.23)
2.用什么進行驗證匹配,五元組?驗證規則有優先順序嗎?
3.另一個項目主要負責了哪一部分。
3.用到了什么數據庫,redis存session數據,數據過期怎么辦?
4.spring怎么加載數據?
5.依賴注入是怎么回事?
6.用到了哪些注解,每個注解的作用和原理。