2018 一些個人面試經驗和一些 java 面試筆記
2018 一些個人面試經驗和一些 java 面試筆記
我是2018屆畢業生,在大學快結束(還剩一學期)的時候,準備轉行軟體,就毅然決然辭去了手上的硬體工作,但是這個時候開始轉行確實太難了,我不斷地學習,想用著一學期的時間來把軟體基礎補起來,結果很一般,開始瞭解軟體之後才發現,原來軟體的東西比硬體多的多得多,一直在學習但是總是學不夠(扯得有點遠了)。好了,其實很早就想寫一些記錄,可是因為一直沒找到合心意的工作,所以一直放著。現在終於有時間來好好寫寫,也算是一點總結。內容包括了一些我認為含金量較高的面試經歷,及我個人在準備面試期間的一些知識點的概括總結。(看完的話應該會收穫不少)
首先來說一下面試經歷吧
-
有贊電話一面
我投的是2019屆校招的java開發工程師,這個當時就想試試,畢竟人家招的是2019屆的。沒想到過了一段時間看到郵件傳送過來,簡歷通過初篩,等待溝通。。。當時心裡那個激動啊,下午就接到了有贊面試官的電話,和我約了晚上8點的電話面試。當時想著回去後好好準備一下。
面試開始,有讚的面試官是我遇到過最好的面試官,很耐心,很細節,會從多方面考察你的能力,而不會以偏概全。
- 一開始還是自我介紹,這個我做的很不好,後來去網上查了一下最好這個格式(姓名,畢業學校,家鄉,主要學習的語言和怎麼使用它們/技術棧是什麼、自己對技術的一些想法/對自己的評價)
- 簡單說一下HTTP協議,當時聽到是懵逼的,不知道該怎麼說,我就問他具體指什麼,然後他就換了一個方式問(get,post。。。區別及解釋)
- 瞭解DNS嗎,簡單說一下DNS作用(這個應該都知道,域名解析嘛)
- java的基本型別及包裝類,包裝類和基本型別的關係(基礎的基礎,送分題)
- 接下來是 Mysql ,給了一個 Student 類,該怎麼建索引,需要建幾個。(這個感覺是一個開放題,欄位全部自己定,我定了id,name,sex。id是主鍵,直接就是索引就好了,這個也是個送分題,就是當時理解不了,怎麼問的這麼寬泛,然後就墨跡了很久)
- 面試官說了一下他們的專案及他們需要維護的東西(這裡我很納悶)
- 又回到 sql ,問怎麼優化慢查詢。怎麼調優(這個答的不是很好,不是就說了一些基本的 sql 查詢的優化)
- 最後是一個開放題,真的感覺面試官太好了,看我之前是做爬蟲的,直接給我設計了一題:怎麼設計一個高可用高效率的爬蟲系統(這裡我從頭到尾,分析了一下,從資料庫,到分散式,到訊息佇列,到快取,到資料清洗都說了,說的過程面試官很耐心聽我講,也有記錄,都沒打斷我,等我說完後他做了一個總結,和他問題一一對應我是否有涉及到他考察的點。)
- 期間還有問道一個springboot的問題,忘記是什麼了
這樣就結束了有贊電話面試第一面。他說等通知吧
-
有贊電話二面
二面的話是在國慶後了,在家喝侄子晚了幾天後,回到杭州開始準備面試。之前我以為有讚的面試已經涼了,在8號晚上七點多,突然來了電話,說有讚的電話二面,沒辦法只好硬著頭皮上。
- 還是自我介紹
- 畢竟二面了,面試官也不含糊,上來把我的專案經驗都看了一下。完了之後說,我看你之前都是做爬蟲的,簡單介紹一下你的專案吧(我就大概說了一下,爬蟲的專案真的沒什麼技術含量,無非是翻頁,解析,模擬登入等等)
- 說完後,我看你模擬登入有對加密的密碼破解,你遇到的都是什麼加密方式啊(我說了一下非對稱加密RSA),接著追問,這個是非對稱加密,那對稱加密是怎麼樣的,和非對稱加密的區別是什麼(模糊的知道對稱加密好像破解比較容易,但是不確定,當時就回復了不知道。結束後查了,對稱加密加密和解密用的祕鑰相同,加密速度快,解密難度相對於非對稱加密難度小)
- 接著問,你做爬蟲,對http瞭解吧,https呢,https和http有什麼不同,https的加密方式是對稱加密還是非對稱加密(怪自己只會瞭解表面,知道https加密,但不知道怎麼加密及加密方式是什麼,查了一下https加密方式有對稱加密和非對稱加密)
- TCP 三次握手知道嗎,簡單說一下過程(必會吧),那 TCP 是屬於 OSI 五層或七層的哪一層,先說一下 OSI 五層模型吧,(應用層,傳輸層,網路層,資料鏈路層,物理層),TCP/IP ,在哪一層?(送命題,TCP 屬於傳輸層,IP屬於網路層)。知道 Socket 嗎?它在建立連線的時候 accept ,成功連線後是建立了什麼連線,會返回一個什麼物件(由於對 java 的 socket 程式設計不瞭解,問的時候就不是很清楚了,都說了不知道,結束後查了,socket 連線建立的是TCP 連線( UDP 無連線),在傳輸層建立, accept 返回的是一個 Socket 物件)
- 簡單說一下 TCP / UDP 的區別吧(必會),它們各有什麼問題,怎麼解決(我就說了一個 TCP 的一個粘包問題,定長解決,UDP 會丟包)
- 看你接觸過 ZK ,說說你們怎麼使用的啊,使用原生的 API 嗎?(是的,主要做了一個任務分發,用了watch機制),那問一下 如果我有三臺機器,我壞了幾臺整個系統就不能用了,(這個沒答上來,因為 ZK 用了很久了,而且沒有仔細去研究,只是把他簡單用上了。結束後查了一下,ZK 系統一般宕機一半以上就不能用了,一定要保證存活半數以上,選舉機制的保證),ZK 的記憶體模型怎麼樣(面試官提示的是樹)
- Redis 用過。它是單執行緒還是多執行緒的(單),那為什麼呢( Redis 在記憶體中存取資料,速度本來就很快快,若用多執行緒,上下文切換的時間消耗十分巨大,效率還不如單執行緒)。Redis 是單執行緒的,那它存在併發問題嗎(腦子竟然繞不過來,併發問題簡單的可以用 i++ 這個來驗證,其實 Redis 是存在併發問題的),面試官看我沒反應過來,那或者換個方式問,知道CAS嗎,(compare and swap 樂觀鎖,然後我說了一下知道的),面試官看我沒反應過來應該很失望吧(CAS 可以用來解決Redis併發問題啊,也就是說 Redis 存在併發問題阿)。然後又問了一個怎麼用 Redis 來做選舉(當時 Redis 這塊準備的不充分,分散式鎖這一塊都沒去看,也就沒答出來,但是說可以用 Redis 的 list 來做,每次檢查長度,這個肯定不是答案,也不知道該怎麼答。後來倒是看了 ZK 的選舉機制,1.全新叢集選舉(機器id,開機順序)2.非全新叢集選舉(邏輯時鐘 -> 資料id -> 機器id))
- 接下來問了 Spring ,瞭解spring,說一下 Spring IOC 的初始化過程吧(真的打臉,這個都沒去看過還敢說自己瞭解 Spring ,沒答出來),追問那 BeanPostProcessor 這個介面知道嗎(也不知道。。好了 Spring 問完了。。。。)
- 問了 Hashmap 是不是執行緒安全,加在方法上的 synchronized 鎖實際是加在哪的(例項物件上),那什麼map是執行緒安全的(說了 ConcurrentHashmap ,感覺自己在挑戰權威), 那 ConcurrentHashmap是強一致性還是弱一致性的,為什麼(瞬間懵逼,沒聽說過這個概念,後查到是弱一致性的,因為get無鎖,可能不能馬上拿到新插入的值)
- 說說 Tomcat 內部結構吧(當時說的很亂,結束後瞭解清楚,這個也要必須會),servlet是單例是還多例。
差不多就問完了,問完我也就覺得涼涼了,結果第二天就收到通知沒通過,心裡也很難受,不多讓我知道了自己遠遠不足。
-
瑪瑙灣
這家公司的面試很風趣,主要是面試官,他是支付寶出來的,問的問題可以很深入,看你簡歷怎麼寫
-
還是問了一下基本的情況
-
快排原理(雙軸快排,三向切分快排),說了第一個其他連個都不知道,歸併排序(知道,不知道其過程,這個是要不得的,回來後好好把這個看了一下)
-
小頂堆,有向無環圖,小頂堆說了一下,後面的不知道,回來簡單瞭解了一下也不是很懂。
-
設計模式,瞭解單例,沒有系統去看,設計模式分為哪三大類(建立型,行為型,結構性)
-
給了一個簡單的關聯表 sql 查詢,竟然沒寫出來,不知道是因為啥,腦子壞掉了嗎
-
說說 int a = 1; 在虛擬機器中的執行過程(先生成常量1,放入方法區,將a變數壓入執行緒棧,將a指向1)
-
RFC2616協議瞭解嗎? RFC1945(一臉懵逼,其實就是http1.1 和http1.0),ETAG瞭解嗎(關於快取的,一個標識,服務端會將客戶端傳過來的ETAG和服務端進行對比,若相同,則標識客戶端快取的資料都是可以用,未更新。若不相同,服務端會重新發送已更新的資料)
-
以上就是我認為比較有含金量的兩次面試,可以學到很多東西
一些簡單的總結
- 面向物件的特徵
- final,finally,finalize
- 重寫,過載
- 抽象和介面的區別
- 記憶體洩漏和記憶體溢位區別
- 反射原理
- GET POST區別
- session和cookie區別
- session分散式處理
- JDBC操作
- equals和==區別
- 集合set
- list
- Hashmap(重點)
- ConcurrentHashmap(重點)
- 建立執行緒的方式
- 說說sleep,wait,join,yield
- sleep(0) 的作用
- CAS 原理
- Redis記憶體模型
- volatile 原理作用,可否代替 synchronized
- 執行緒的生命週期的幾種狀態
- 偏向鎖,輕量級鎖,自旋鎖,鎖消除,synchronized可重入,公平鎖,非公平鎖
- 執行緒池,一些引數,用的什麼佇列
- 原子類
- spring預設是單例還是多例
- wait,notify使用
- 隔離級別,會造成什麼問題
- mysql儲存引擎,分別的特點
- 高併發修改一行資料,推薦樂觀鎖還是悲觀鎖,原因
- innodb 標準的行級鎖是什麼,簡單說一下怎麼使用
- innodb 和myisam索引的原理,區別。聚集索引和非聚集索引區別
- 簡單說一下innodb索引的資料結構
- 資料庫的MVCC
- Redis 的快取擊穿,快取雪崩,快取穿透,分別是什麼
- Redis 幾種記憶體淘汰策略是什麼,預設淘汰策略是什麼。當資料庫中有一部分資料用到的非常頻繁,應該選用怎麼策略。當資料庫資料資料的使用比較平均怎麼選擇。
- mysql 產生死鎖的情況及分析
- 正想索引和反向索引
- 一個類中不能被序列化的變數有哪些
- final修飾的引用變數指向的物件的內容可以修改嗎
- spring IOC 初始化流程
- 簡單說一下AOP
- SpringMVC的流程
- JVM的記憶體模型
- 垃圾回收機制
- 二叉堆
- object中公用方法有哪些
- Native修飾的函式是什麼
- String類為什麼設計成final
- String,StringBuilder,StringBuffer區別
- ThreadLocal 原理
- java泛型
- java 萬用字元“?”,解決了設麼問題,怎麼使用
- 手寫單列(懶漢式,餓漢式)
- 一個物件被建立的過程(jvm中)
- OSI模型
- TCP/IP
- socket
- 什麼是非同步
後期會補充知識點的簡要解答,文中若有不對的地方,請大家指出