1.背景
先說一下自己的背景,本人中南大學就讀,計算機專業,現已拿字節、
騰訊測開崗位實習offer、盛大java研發崗位實習offer,阿里交叉面五面掛。自己主要的
技術棧為:java,會使用Spring/SpringMVC/mybatis/Spring Sercurity開發框架,mysql數據庫,了解常用的數據結構和算法,了解基本的計算機網絡和
操作系統知識,會使用簡單的linux命令,了解c/c++。實習經歷為深信服技術服務崗,中國聯通銷售崗。自學儲備:java核心技術上下卷,ssm框架課程,mysql必知必會。
2.面試知識覆蓋
盛大:java基礎知識(重點)、
數據庫、操作系統
騰訊:數據庫相關(重點),
測試知識相關,linux知識
阿里:java知識(超級重點),數據庫,計算機網絡,操作系統等等
字節:算法知識(每一面都有算法題,需要現場手撕,大部分與字符串相關),測試知識,java知識,操作系統知識
當然每一家幾乎都會問到實習經歷和項目相關。整體難度 :阿里>字節>騰訊>盛大。阿里輪次6輪(java1輪+測開5輪),字節(4輪j技術+hr),騰訊(3輪技術+hr),盛大(2輪技術+hr)。
阿里:java一面、測開一面、測開二面主管、測開三面老板、測開四面交叉、測開五面交叉(因為測開四面表現不理想,所以補面交叉,但還是掛了)
字節:測開一面、測開二面(一二面是連在一起得)、測開三面、測開四面、測開五面hr(我也不知道為啥我五面,一般都是三面應該是中間轉部門了)
以下都是
面試過程遇到的一些問題:
2.1java知識
1)基本數據類型的所占字節
2)常量池
3)自動裝箱和拆箱
4)反射與注解
5)深拷貝和淺拷貝
6)四種內部類
7)jvm分區(重點)
8)垃圾回收收集器
9)full gc和minor gc
10)類加載過程
11)線程池(重點),線程池創建方法,參數表示的含義,提交任務的順序
12)ThredLocal
13)單例模式的線程安全手寫
14)oom異常的排查
15)理解繼承與多態
16)多線程(重點):wait()和sleep()的區別、sychornized和lock的區別、 notify()和wait()底層實現,多線程和單線程的運用場景
17)並行與並發的區別
18)hashmap(最好看一看源碼,重點)
19)CAS,AQS原理
20)junit(一個
單元測試的工具)的原理,怎么實現的。
21)用戶登陸狀態怎么保存。
2.2Spring
1)spring的事務傳播機制
2)spring的啟動過程
3)spring容器的原理
4)springaop的底層原理
5)@autowire和@Resource的區別
6)springaop的中代理實現方式,不用代理技術怎么實現AOP。
2.3數據庫
1)ACID
2)事務的隔離級別(重點)
3)索引b+樹結構
4)sql語句優化
5)數據庫引擎比較(重點)
6)數據庫怎么保證事務的acid性質
7)左外連接和普通連接區別
8)delete和trancate的區別
9)什么時候全表查詢比索引快
10)mysql怎么使用,越多越好嗎,一張表最多幾個索引
2.4linux
1)進程間通信ips比較(重點)
2)網絡命令
2.5操作系統
1)進程與線程區別(重點)
2)進程線程的幾種狀態及其轉換
3)進程死鎖條件,死鎖處理方法
2.6計算機網絡
1)tcp和udp區別,tcp和http區別
2)http狀態碼
3)http過程
4)流量控制,擁塞控制的方法和手段(重點)
5)tcp三次握手,四次揮手,原因和過程(重點)
6)網站訪問過程
2.7測試場景
1)秒殺場景的測試與實現
2)抖音下滑功能的測試
3)登陸功能的測試
3.手撕代碼題
做手撕代碼的時候可以先和面試官確定思路然后再動手寫,防止剛開始方向就錯了。
3.1阿里:
題1:
評測題目1:使用兩個不同的線程將會共用一個 HelloWorld 實例。
//其中一個線程將會調用 hello() 方法,另一個線程將會調用 word() 方法。
//請設計修改程序,以確保 "HelloWorld" 被輸出 n 次。
//示例 1:
//輸入: n = 1
//輸出: "HelloWorld"
//解釋: 這里有兩個線程被異步啟動。其中一個調用 foo() 方法, 另一個調用 bar() 方法,"foobar" 將被輸出一次。
//示例 2:
//輸入: n = 2
//輸出: "HelloWorldHelloWorld"
//解釋: "HelloWorld" 將被輸出兩次。
思路:信號量
題2:
評測題目2:含有 x + 1 個整數的數組 nums,其數字都在 1 到 x 之間(包括 1 和 x),假設只有一個重復的數字,請找出這個重復的數。
//示例 1:
//輸入: [1,3,4,2,2] 輸出: 2
//示例 2:
//輸入: [3,1,3,4,2] 輸出: 3
//說明:
//不能改變原來的數組(假設數組只讀)。
//只能使用額外的 O(1) 的空間。
//時間復雜度小於 O(n2) 。
思路:二分
題3:
評測題目3實現一個單例模式
思路:為保證線程安全,用synchornized或者靜態內部類,或者枚舉類實現
題4:
1.生成一個文件,大小不大於1G或行數不大於指定數,文件每行內容 為隨機long型正整數的字符串;
2.讀取該文件,並對文件中的整數進行排序,並輸出一個文件;
3. 要求代碼簡潔優雅,和效率優化
思路:hash拆分,然后歸並
題5:
判斷一個樹是否為平衡樹
思路:遞歸
題6:
中序遍歷一個樹,實現遞歸和非遞歸方法
思路:遞歸:dfs,非遞歸:用棧存儲節點,先找最左邊,再判斷其是否是否有右節點巴拉巴拉,大家還是力扣上看思路吧,有原題。
題7:
模擬棧,能夠實現壓入,彈出,獲取當前棧的最大值的操作。
思路:維護兩個鏈表,一個鏈表存儲元素,一個鏈表存儲截止至當前位置的最大元素,彈出一起彈出即可。
如:
鏈表1:1 2 1 3 1
鏈表2:1 2 2 3 3
題8:
矩陣相乘,並優化。
思路:優化稀疏矩陣 遇0時
記錄跳過
3.2字節:
題1:
給你一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重復的三元組。
nums = [-1, 0, 1, 2, -1, -4,4,5]
注意:答案中不可以包含重復的三元組。
思路:先求一個和數組,然后通過hashmap判斷是否有和的負值存在
題2:
判斷一個字符串是否符合ipv4地址,返回true或者false
比如輸入“127.0.0.1”,返回true
輸入"256.1.2.3",返回false
思路:比較簡單,分四個部分判斷就行,可以注意一下優化,能提前判斷錯誤就直接返回不要進行太多的步驟。
題3:
3.將中文億級數字轉換為int,值范圍[0, 10^9]
一千零二十四 => int
Cases
一千零二十四
一億零九萬三千八百
零
思路:我是根據字符串的‘萬’和‘億’字符的位置進行分割,將字符串分割成三個部分,然后依次判斷,最后累加起來就行。
3.3吉比特:
題1:
重寫string類中的indexof()
思路:標志位
3.4騰訊:
題1:
找數組中第一個等於或大於x的數
思路:二分。
4.心得
不打無准備之戰!不打無准備之戰!不打無准備之戰!
投遞簡歷乘早,越早機會越多
面試之前最好猜一些面試官可能會問的問題,提前寫好自己的“標准答案”,心理默讀幾遍,
注重簡歷,簡歷上寫了的東西自己心理一定要有底,簡歷就像是自己交給面試官的考卷,他拿這個考你,技術崗最好體現自己的技術棧,簡寫一些非技術的。
保持良好的心態,面試不用慌,也不用太在乎結果,反正過了就賺了,沒過就總結就行。
大廠不用慌,其實面大廠的人很少,怕投的人很多,放心大膽投就行,自我感覺大廠比一些小廠面試還要簡單一些。
面試過程盡量引導面試官往自己熟悉的領域問,hr面最重要的是真誠。
5.復習路線
數據庫:《mysql必知必會》,所需時間兩天
計算機知識:把java,計算機網絡,操作系統等等知識回顧一下,准備面試的過程每天都會看。