基礎篇
參考這裡的面試題:面試題寫在後面了
能回答上百分之七十,基礎的廣度就算OK了。如果達不到,那麼缺什麼就趕緊補什麼。廣度達到了,還需要對個別熱點問題有深度。每個人的精力都有限,可以適當挑選兩個熱點問題進行深入挖掘。比如HashMap,要不僅僅能夠說上來原始碼是什麼去實現的,還要了解JDK1.7版本到1.8版本都做了哪些改進,為什麼這麼改進,ConcurrentHashMap怎麼實現的,針對併發場景都做了哪些優化措施,JDK1.7和1.8的實現有什麼差異。瞭解這些可能需要花費很大精力。但是,面試的時候一但問到了這個你非常精通的知識點,就基本進入你的主場了。這個能起到一錘定音的作用,給面試官留下極強的印象,甚至直接決定了此次面試的成敗。因此,至少準備那麼一兩個非常精通的知識點,一定不要多,但要比面試官和其他求職者都要精通。這個賭的就是運氣,只要在一個問題上能給面試官上一課,就能讓對方產生“你很厲害”的錯覺。
所有基礎知識都要做好筆記,面試前多回顧下,在配合刷下題,問題就不大了。
專案篇
要回答好專案問題,核心就是要提前做好充足的準備。首先,仔細回顧自己做過的專案。然後挑選最有價值的部分,寫一篇關於這個專案的總結性文件,要講清楚這個專案的架構,設計思路。其次是努力回想當時遇到的難點,踩過的坑,以及自己怎麼思考和應對的,還有對專案後續改進的思考。這個非常重要,一定寫下來。文件寫出來後,還要反覆提煉和補充。面試的時候就以此文件為綱領,方能做到侃侃而談,從容應對。
情商篇
面試的時候,可能會穿插一些考察性格的問題。比如,問你為什麼離職/想換工作,對技術和業務怎麼看,對我們公司有什麼瞭解,對我們的業務有什麼瞭解,你有什麼想問我的,你覺得自己有什麼優點/缺點。做技術的同學往往在情商方面有所欠缺,如果沒有準備的話,面試時一不小心說錯一句話就可能導致前功盡棄。尤其在阿里,HR是有一票否決權的。 那麼,應對此類問題的第一點就是提前預防,可以提前拿張紙,猜想對方可能會問的問題,把標準答案寫出來,反覆推敲,然後背下來即可。比如,“你覺得自己有什麼優點”這個問題,我當時的標準答案就是,“我覺得人最難了解的就是自己,所以我想借用我前領導對我的評價,XXX是個......的人”。我的這個標準答案是基於 “第三方的評價更有可信度” 這個原理來設計的。第二點,回答問題的時候表現的謙虛一點即可,而且千萬不要有負能量。比如“為什麼離職/想換工作”,這個問題,不要去吐槽公司或者同事,或者表達情緒上的不滿。要儘量展現出自己好學上進的一面,這一點很重要。面試官會把對你的印象記錄在案的,包括你的優點和缺點。因此即便技術達不到要求,也儘量展現性格上的優點。
阿里面試流程
面試一般是四到五面,以電話面試為主。最後一輪面試時HR面試,所以只要挺過前面的技術面試一般就OK了。第一輪是考察基礎,第二輪開始考察專案,溝通表達能力。第三四輪會可能有程式設計,要求現場寫程式碼,或者線下完成一個指定的專案。面試官的級別在p6-p9之間,一般隨著面試流程的推進而升高。技術面試通過後就是HR面了,這一輪主要考察價值觀。所有面試結束後,就是一個漫長的等待了,期間會有體檢,背景調查,然後發offer。這個流程會有一個月的時間,比較久。需要注意的是,面試過程中一定要保證誠實,不能有半點弄虛作假。因為一但背景調查的時候發現說謊了,不但offer會取消,還會記錄到人才庫裡。再有一點,約好了的面試不能隨意爽約,這個也會永久記錄。你的每次面試的過程都會詳細的記錄在人才庫裡的,因此儘量不要留下汙點,以免影響以後的面試。
面試題
本人是做java開發的,這是我參加58,搜狐,搜狗,新浪微博,百度,騰訊文學,網易以及其他一些小的創業型公司的面試常被問的問題,當然有重複,弄清楚這些,相信面試會輕鬆許多。
-
junit用法,before,beforeClass,after, afterClass的執行順序
-
分散式鎖
-
nginx的請求轉發演算法,如何配置根據權重轉發
-
用hashmap實現redis有什麼問題(死鎖,死迴圈,可用ConcurrentHashmap)
-
執行緒的狀態
-
執行緒的阻塞的方式
-
sleep和wait的區別
-
hashmap的底層實現
-
一萬個人搶100個紅包,如何實現(不用佇列),如何保證2個人不能搶到同一個紅包,可用分散式鎖
-
java記憶體模型,垃圾回收機制,不可達演算法
-
兩個Integer的引用物件傳給一個swap方法在方法內部交換引用,返回後,兩個引用的值是否會發現變化
-
aop的底層實現,動態代理是如何動態,假如有100個物件,如何動態的為這100個物件代理
-
是否用過maven install。 maven test。git(make install是安裝本地jar包)
-
tomcat的各種配置,如何配置docBase
-
spring的bean配置的幾種方式
-
web.xml的配置
-
spring的監聽器。
-
zookeeper的實現機制,有快取,如何儲存註冊服務的
-
IO會阻塞嗎?readLine是不是阻塞的
-
用過spring的執行緒池還是java的執行緒池?
-
字串的格式化方法 (20,21這兩個問題問的太低階了)
-
時間的格式化方法
-
定時器用什麼做的
-
執行緒如何退出結束
-
java有哪些鎖?樂觀鎖 悲觀鎖 synchronized 可重入鎖 讀寫鎖,用過reentrantlock嗎?reentrantlock與synmchronized的區別
-
ThreadLocal的使用場景
-
java的記憶體模型,垃圾回收機制
-
為什麼執行緒執行要呼叫start而不是直接run(直接run,跟普通方法沒什麼區別,先調start,run才會作為一個執行緒方法執行)
-
qmq訊息的實現機制(qmq是去哪兒網自己封裝的訊息佇列)
-
遍歷hashmap的三種方式
-
jvm的一些命令
-
memcache和redis的區別
-
mysql的行級鎖加在哪個位置
-
ConcurrentHashmap的鎖是如何加的?是不是分段越多越好
-
myisam和innodb的區別(innodb是行級鎖,myisam是表級鎖)
-
mysql其他的效能優化方式
-
linux系統日誌在哪裡看
-
如何檢視網路程式
-
統計一個整數的二進位制表示中bit為1的個數
-
jvm記憶體模型,java記憶體模型
-
如何把java記憶體的資料全部dump出來
-
如何手動觸發全量回收垃圾,如何立即觸發垃圾回收
-
hashmap如果只有一個寫其他全讀會出什麼問題
-
git rebase
-
mongodb和hbase的區別
-
如何解決併發問題
-
volatile的用途
-
java執行緒池(好像之前我的理解有問題)
-
mysql的binlog
-
代理模式
-
mysql是如何實現事務的
-
讀寫分離何時強制要讀主庫,讀哪個從庫是通過什麼方式決定的,從庫的同步mysql用的什麼方式
-
mysql的儲存引擎
-
mysql的預設隔離級別,其他隔離級別
-
將一個連結串列反轉(用三個指標,但是每次只發轉一個)
-
spring Aop的實現原理,具體說說
-
何時會記憶體洩漏,記憶體洩漏會拋哪些異常
-
是否用過Autowire註解
-
spring的注入bean的方式
-
sql語句各種條件的執行順序,如select, where, order by, group by
-
select xx from xx where xx and xx order by xx limit xx; 如何優化這個(看explain)
-
四則元算寫程式碼
-
統計100G的ip檔案中出現ip次數最多的100個ip
-
zookeeper的事物,結點,服務提供方掛了如何告知消費方
-
5臺伺服器如何選出leader(選舉演算法)
-
介面卡和代理模式的區別
-
讀寫鎖
-
static加鎖
-
事務隔離級別
-
門面模式,類圖(外觀模式)
-
mybatis如何對映表結構
-
二叉樹遍歷
-
主從複製
-
mysql引擎區別
-
靜態內部類載入到了哪個區?方法區
-
class檔案編譯後載入到了哪
-
web的http請求如何整體響應時間變長導致處理的請求數變少,該如何處理?用佇列,當處理不了那麼多http請求時將請求放到佇列
中慢慢處理,web如何實現佇列
-
執行緒安全的單例模式
-
快速排序效能考慮
-
volatile關鍵字用法
-
求表的size,或做資料統計可用什麼儲存引擎
-
讀多寫少可用什麼引擎
-
假如要統計多個表應該用什麼引擎
-
concurrenhashmap求size是如何加鎖的,如果剛求完一段後這段發生了變化該如何處理
-
1000個蘋果放10個籃子,怎麼放,能讓我拿到所有可能的個數
-
可重入的讀寫鎖,可重入是如何實現的?
-
是否用過NIO
-
java的concurrent包用過沒
-
sting s=new string("abc")分別在堆疊上新建了哪些物件
-
java虛擬機器的區域分配,各區分別存什麼
-
分散式事務(JTA)
-
threadlocal使用時注意的問題(ThreadLocal和Synchonized都用於解決多執行緒併發訪問。但是ThreadLocal與synchronized有本質的區別。synchronized是利用鎖的機制,使變數或程式碼塊在某一時該只能被一個執行緒訪問。而ThreadLocal為每一個執行緒都提供了變數的副本,使得每個執行緒在某一時間訪問到的並不是同一個物件,這樣就隔離了多個執行緒對資料的資料共享。而Synchronized卻正好相反,它用於在多個執行緒間通訊時能夠獲得資料共享)
-
java有哪些容器(集合,tomcat也是一種容器)
-
二分查詢演算法
-
myisam的優點,和innodb的區別
-
redis能存哪些型別
-
http協議格式,get和post的區別
-
可重入鎖中對應的wait和notify
-
redis能把記憶體空間交換進磁碟中嗎(這個應該是可以的,但是那個面試官非跟我說不可以)
-
java執行緒池中基於快取和基於定長的兩種執行緒池,當請求太多時分別是如何處理的?定長的事用的佇列,如果佇列也滿了呢?交換進磁碟?基於快取的執行緒池解決方法呢?
-
synchronized加在方法上用的什麼鎖
-
可重入鎖中的lock和trylock的區別
-
innodb對一行資料的讀會枷鎖嗎?不枷鎖,讀實際讀的是副本
-
redis做快取是分散式存的?不同的伺服器上存的資料是否重複?guava cache呢?是否重複?不同的機器存的資料不同
-
用awk統計一個ip檔案中top10
-
對錶做統計時可直接看schema info資訊,即檢視錶的系統資訊
-
mysql目前用的版本
-
公司經驗豐富的人給了什麼幫助?(一般boss面會問這些)
-
自己相對於一樣的應屆生有什麼優勢
-
自己的好的總結習慣給自己今後的工作帶了什麼幫助,舉例為證
-
原子類,執行緒安全的物件,異常的處理方式
-
4億個int數,如何找出重複的數(用hash方法,建一個2的32次方個bit的hash陣列,每取一個int數,可hash下2的32次方找到它在hash陣列中的位置,然後將bit置1表示已存在)
-
4億個url,找出其中重複的(考慮記憶體不夠,通過hash演算法,將url分配到1000個檔案中,不同的檔案間肯定就不會重複了,再分別找出重複的)
有1萬個陣列,每個陣列有1000個整數,每個陣列都是降序的,從中找出最大的N個數,N<1000
-
LinkedHashmap的底層實現
-
類序列化時類的版本號的用途,如果沒有指定一個版本號,系統是怎麼處理的?如果加了欄位會怎麼樣?
-
Override和Overload的區別,分別用在什麼場景
-
java的反射是如何實現的
一個程式設計師學習平臺分享給你們,讓你在實踐中積累經驗掌握原理。主要方向是JAVA工程師。如果你想拿高薪,想突破瓶頸,想跟別人競爭能取得優勢的,想進BAT但是有擔心面試不過的,可以加我的Java學習交流群:450936584
注:加群要求
1、大學學習的是Java相關專業,畢業後面試受挫,找不到對口工作可以 2、在公司待久了,現在過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的 3、參加過線下培訓後,知識點掌握不夠深刻,就業困難,想繼續深造 4、已經在Java相關部門上班的在職人員,對自身職業規劃不清晰,混日子的 5、有一定的C語言基礎,接觸過java開發,想轉行的 小號勿擾,不喜勿加