1. 程式人生 > >2018 一些個人面試經驗和一些 java 面試筆記

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和服務端進行對比,若相同,則標識客戶端快取的資料都是可以用,未更新。若不相同,服務端會重新發送已更新的資料)

以上就是我認為比較有含金量的兩次面試,可以學到很多東西

一些簡單的總結

  1. 面向物件的特徵
  2. final,finally,finalize
  3. 重寫,過載
  4. 抽象和介面的區別
  5. 記憶體洩漏和記憶體溢位區別
  6. 反射原理
  7. GET POST區別
  8. session和cookie區別
  9. session分散式處理
  10. JDBC操作
  11. equals和==區別
  12. 集合set
  13. list
  14. Hashmap(重點)
  15. ConcurrentHashmap(重點)
  16. 建立執行緒的方式
  17. 說說sleep,wait,join,yield
  18. sleep(0) 的作用
  19. CAS 原理
  20. Redis記憶體模型
  21. volatile 原理作用,可否代替 synchronized
  22. 執行緒的生命週期的幾種狀態
  23. 偏向鎖,輕量級鎖,自旋鎖,鎖消除,synchronized可重入,公平鎖,非公平鎖
  24. 執行緒池,一些引數,用的什麼佇列
  25. 原子類
  26. spring預設是單例還是多例
  27. wait,notify使用
  28. 隔離級別,會造成什麼問題
  29. mysql儲存引擎,分別的特點
  30. 高併發修改一行資料,推薦樂觀鎖還是悲觀鎖,原因
  31. innodb 標準的行級鎖是什麼,簡單說一下怎麼使用
  32. innodb 和myisam索引的原理,區別。聚集索引和非聚集索引區別
  33. 簡單說一下innodb索引的資料結構
  34. 資料庫的MVCC
  35. Redis 的快取擊穿,快取雪崩,快取穿透,分別是什麼
  36. Redis 幾種記憶體淘汰策略是什麼,預設淘汰策略是什麼。當資料庫中有一部分資料用到的非常頻繁,應該選用怎麼策略。當資料庫資料資料的使用比較平均怎麼選擇。
  37. mysql 產生死鎖的情況及分析
  38. 正想索引和反向索引
  39. 一個類中不能被序列化的變數有哪些
  40. final修飾的引用變數指向的物件的內容可以修改嗎
  41. spring IOC 初始化流程
  42. 簡單說一下AOP
  43. SpringMVC的流程
  44. JVM的記憶體模型
  45. 垃圾回收機制
  46. 二叉堆
  47. object中公用方法有哪些
  48. Native修飾的函式是什麼
  49. String類為什麼設計成final
  50. String,StringBuilder,StringBuffer區別
  51. ThreadLocal 原理
  52. java泛型
  53. java 萬用字元“?”,解決了設麼問題,怎麼使用
  54. 手寫單列(懶漢式,餓漢式)
  55. 一個物件被建立的過程(jvm中)
  56. OSI模型
  57. TCP/IP
  58. socket
  59. 什麼是非同步

後期會補充知識點的簡要解答,文中若有不對的地方,請大家指出