昨天 hr 面結束了,來許一波願,順便分享下面試題目,後期補上這些問題的答案以及一些想法。
提前交流
我是找的學長內推的,剛開始有一次交流,也不知道算不算一面,主要問了下面的東西:
- 說一下 cas,主要應用在哪
- 說一下 Java 中的鎖,自旋鎖會升級成什麼?
- 專案中的限流是怎麼做的
- 說一下 Java 是如何載入一個類的?
- 什麼是雙親委派模式?
- TCP 滑動視窗瞭解嗎?
- 用的是什麼資料庫?說一下 mysql 的的事務隔離
- InnoDB/MYINSAM 的區別和應用場景
- 介紹下 MYSQL 的索引
- 程式和執行緒的定義
- 程式排程演算法有哪些?
- 說一下你對執行緒池的理解
- 用過什麼模式(除了 JDK 以外。自己實現的 /除了單例模式外)
- 單例模式為什麼要有兩個 null 判斷,一個不可以嗎?
- 排序(歸併排序 /堆排序/快排)
- 說一下你對 Spring 的理解,AOP 的原理是什麼?
- 有什麼想問面試官的
一面
然後就是正式的一面了,一面比較細緻,上來先做了一道演算法題,題目很簡單,劍指 offer 裡的原題,順時針列印矩陣,leetcode-cn.com/problems/sh…
下面是問題的記錄:
- 自我介紹、說一下最近在做什麼事?
- 可以跟我介紹下卷積神經網路嗎?
- 可以說一下邏輯迴歸是什麼嗎?
- 你覺得反向傳播和動態規劃之間有什麼樣的聯絡嗎?
- 我看你的微信公眾號叫「01 二進位制」,那你能說一下為什麼計算機會使用二進位制,而我們人類會使用 10 進位制呢?
- 計算機是怎麼做加法的?那如何用加法代替減法?
- 使用過 Linux 嗎?可以說下常用的 Linux 命令嗎?
- 用什麼命令可以查詢文字中的文字?用什麼命令可以查詢磁碟儲存的容量?
- Vim 使用過嗎?可以說下有哪些快捷鍵嗎?
- 我看你的部落格裡有一篇部落格寫到了區塊鏈,你可以說下去中心化對我們的生活有什麼影響嗎?你覺得區塊鏈有價值嗎?
- 在區塊鏈的世界中,那些資料怎麼樣會變得有效?(廣播機制、共識機制)
- 類比打電話,兩個系統的通訊我們可以採用哪些方式?(我說了 http)
- 說一下 HTTP 和 HTTPS 的區別
- HTTPS 中用了什麼加密方式,在什麼階段體現的?
- 分散式的 CAP 理論瞭解過嗎?
- 你瞭解的一些叢集有哪些選舉方式?
- 公眾號裡寫了很多和 python 有關的文章,那你覺得這兩個語言使用起來有什麼差異?
- 最近有看什麼書嗎?
- HashMap 為什麼執行緒不安全?是否模擬過不安全的場景?
- 說一下 Java 的值傳遞和引用傳遞
- SpringBoot 和 SpringMVC 的區別
- 說一下 Spring 中 bean 的載入過程
- JVM 的垃圾回收器瞭解嗎?垃圾回收演算法有哪些?JDK8 預設的垃圾回收器是什麼?
- 有什麼想跟我溝通的嗎?
總的來說這一次的面試體驗不是很好,問的東西比較多,而且面試官真的把我的簡歷挖得很深,就連公眾號裡的文章他也看了,這點是我沒想到的。面試官很 nice,一直都在和我探討這些問題,氣氛也不是很緊張,之後幾天就迎來了二面。
二面
不知道為什麼,總覺得二面問的問題和一面比起來側重點是平常學習生活中的,而不是基礎知識了。
- 自我介紹
- 自己做的 app 上線了嗎?是自己做的嗎?簡單說一下
- 學校的課程中你覺得哪一門學的最好?(都差不多)
- 你學習了挺久的 Java,對於這門語言有什麼認識?或者和其他程式語言比起來有什麼不一樣的地方?
- 那你在學習的過程中有什麼事情會讓你堅持做下去?
- 開發這個 app 的動力是什麼?
- 有參加過什麼學科競賽嗎?
- 資料結構你覺得你學的怎麼樣?做一道程式設計題(用陣列模擬一個棧)
- 智力題:你僱傭一個工人,他每天工作應該獲得一份金條,你有一根金條可以分成 7 份,但你只能對你的金條切 2 刀,請問怎麼保證你的工人每天都得到一份金條?
- 你有什麼想問我的?
三面
到了三面,基礎知識問的不如前面幾輪了,更多的是專案經驗方面的東西,說實話這裡也是我欠缺的地方,面試的問題如下:
-
介紹一下專案
-
專案是否覆盤,如果說使用者量/資料量/訪問量非常大之後,你瞭解到的可以做哪些改造?
-
SpringBoot 有深入瞭解嗎?和 Spring Cloud 有什麼差別嗎?
-
SpringBoot 核心框架包含什麼?SpringCloud 一套微服務的框架中間有什麼部分你是比較熟悉的,詳細介紹一下。
-
SpringBoot 容器啟動的大致流程(這個不會)
-
SpringCloud 在 SpringBoot 的基礎上擴充套件了什麼?(我提到了註冊中心,作用是什麼說了下)
-
多執行緒,幾種執行緒的建立方式(thread、runnable、callable),使用的時候有什麼場景約束(在什麼場景下使用什麼方式)
-
多執行緒情況下臨界區的資源保護有哪些方式?(比如鎖)
-
場景程式設計題(卡了很長時間)
不考慮高併發/分散式/叢集/網路呼叫等問題,不依賴訊息佇列/快取這些東西。希望你可以提供一個醫院類,這個類有一個核心的方法給外部呼叫,這個方法實現如下功能:5 個醫生,每個醫生可以掛 10 個號,然後醫院有 10 個視窗,也就意味著同時只能有 10 個病人掛號,那第 11 個人要掛號的話就不能立刻拿到號,得前面的使用者掛完號才可以掛號,病人掛號的時候,醫院給病人返回的結果是:1. 如果當前有空餘號可用,就取最前的號;2. 如果沒有號,就給呼叫的病人返回沒有號的錯誤。注意:如果有號的話是不能允許返回給病人說沒號,如何設計這個類以及這個類中的方法。(附加:如果在分配號的時候偶然出現時間抖動,你該怎麼解決)
這一面說實話是我最沒有把握的一輪面試,因為自己對於微服務這塊確實沒有實際操練過,經驗很少,原始碼看的也不多,而且那個場景程式設計題答的也不是很好,沒有很細緻的說該怎麼實現。
不過這輪面試裡,面試官有句話讓我印象很深刻,他說作為一個技術人,經驗是沒有辦法衡量的,但是思維可以,我們在日常生活中,應該要善於去使用程式碼的思維去思考問題。對於一個功能/事物,我可能會想著這個功能可以通過一個訊息佇列去實現,可以redis去實現,但是這樣思考還不夠深入,應該在思考的時候就在腦海裡構建出虛擬碼的結構。不然就真的是紙上談兵。
交叉面
三面結束,慌張了幾天之後迎來了交叉面,我看牛客網上的帖子說交叉面基本上就不刷人了,但還是有些擔心,可能我運氣比較好吧,簡單問了我一些問題就結束了,沒有太刁難我:
- 你可以講一下做的最有成就感的專案嗎?
- 這個專案是如何變現,如何帶來價值?
- 是如何吸引使用者的?怎麼獲取使用者增長的資料?
- 那如果重新接收這個專案有什麼想法嗎?
- 之後對自己有什麼規劃嗎?
- 你對手淘有什麼樣的認知?(產品很優秀,團隊的技術能力也很強)
- 還有什麼要問的?
hr面
隔了兩天接到了hr的電話,前面幾輪面試都拖了挺久的,hr這裡反倒比較快了,問的問題也很正常:
-
有沒有幫助他人的案例可以分享一下的嗎?
-
你是怎麼規劃你未來的職業方向的呢?
-
對於以下案例,你有什麼想法?
-
商家在我們這進貨,為了加快貨物的流通,會有賒賬,在這個過程中,使用者增長非常快,然後需要做一個系統,在這個系統上線的前一週,運營過來說,我們需要加一個子功能,你作為技術,是選擇將原版本上線之後再升級,還是說把新系統的功能全部做完了再上線?(我選的第一個) 那按照第一個方法做了,系統也上線了,後期升級的時候你本以為2個星期就可以升級完成,但是你突然發現你可能搞不定,資料上出現了一些問題,產品經理此時也在國外,沒辦法及時溝通,作為一個技術人員你會怎麼辦?
-
大概什麼時候可以實習?實習地點?
總結
在面試期間我也看了很多其他人的面經,對比一下發現自己遇到的面試題難度上比他們要小一些,可能是因為自己也沒做過什麼太複雜的專案,所以也沒深入問了。不過阿里的面試官人很nice,面試的過程也不是單向的詢問與回答,對一些問題也會進行探討。總的來說,除了進度比較慢(將近1個月),其他方面的體驗還是很不錯,這裡許波願,希望可以收到暑期實習的offer。
最後打波廣告,如果我的文章對你有所幫助,不妨搜尋一下微信公眾號「樑注」,或者掃描下方二維碼,後期我會不定時分享網際網路上有趣的內容,也可以後臺回覆「微信」與我交流。