天天看點

阿裡巴巴JAVA面試後的個人總結與反思

一面

這周獲得了阿裡巴巴的面試邀請,應聘的崗位為支付寶内某IOT部門的JAVA軟體工程師。面試時間是通過電話面試1天後通知我的,地點為高端的上海大廈。

接到面試通知後的我,即高興又有些膽怯。高興的是:全國數一數二的大廠會給我一份面試機會,證明我的某些地方還是受到了面試人員的初步肯定;膽怯的是早就聽說阿裡巴巴這樣的大廠要求很高,非等閑之輩很難進去,對于自己的技術知識信心感覺不足。

面試當天的下午,按照能到達的面試時間乘着地鐵到達了陸家嘴地鐵站,由于是第一次參加這樣的大廠面試,一路上的我非常緊張激動了。出地鐵後,我遍隻身向上海中心大廈走去(還好以前無聊時去陸家嘴轉悠過幾次,陸家嘴區域中最高直上雲霄的那坐旋轉大廈遍是,要不然又得用步行導航了)。健步如飛的我在辦理好了證件後順利到達第N層樓,出電梯一看,“支付寶”三個大字映入門簾,想着終于見到了每天在手機裡要用的支付寶APP了,這感覺沒得說啊(原諒沒見過市面的我)!

此間N分鐘略。。。。。。直奔面試。

面試官是一位年輕的小哥,30來歲左右。

面試時,總花了50分鐘左右,一直和面試官聊着,盡管這期間我非常緊張。這期間面試官問的主要問題如下:

1.先作個自我介紹。我就簡單介紹了下,就幾句話的樣子,說了下大學時和上一家公司的工作基本内容啥的。

2.HTTPS建立連接配接的詳細過程。這個問題,由于在坐地鐵時有複習到,就按照所知道的向面試官回答了,回答的比較詳細。

2.1HTTPS中為什麼會要用到CA機構,其目的何在?我回答的是有CA機構可以確定服務端證書的真實性。 

2.2HTTPS它能解決什麼問題?我回答的是可以防止抓包。

2.3HTTPS建立好連接配接後,每次傳輸時為什麼用的是對稱加密了,而不用RSA這種公鑰私鑰方式加密?    我回答的是對稱加密的效率更快

2.3.1你知道RSA,DES,AES這些算法加密解密所需要耗費的時間嗎,有曾經做過DEMO驗證過嗎?   我說的是,RSA應該是最耗時的,對稱加密應該更快一點,但确實沒做過DEMO驗證。

2.4HTTPS在建立好連接配接後,每次為什麼要生成一個随機數,這樣的設計目的有哪些?    我回答的是,可以防止重播攻擊。

2.5你之前抓包是用的什麼軟體抓的?  我說wireshark。 于是面試官便問我,wireshark的TCP協定格式是什麼樣的。這個問題我不是很懂,就放棄了,說不知道。

2.6如果讓你自己用httpClient或urlConnection去設計一個HTTPS的請求用戶端,你會怎麼設計?    這個場景我以前沒接觸過,我說不知道,以前我用httpClient去調用https的API接口時,能直接通路,也就沒有深入去研究了,可能是httpClient裡自帶了CA憑證吧。這個問題應該沒有答好,或偏離太大,HTTPS問題就停止了,沒有繼續在HTTPS上問了。

3我看你以前的項目中有用過spring架構是吧?    我說是的,于是問題就來了。

3.1那說下spring項目啟動的原理吧!     聽到問題後的我,發覺轉折太大,怎麼難度一下就加深了這麼多,面試時也忘了複習下spring的原理。于是我就說了下spring架構加載的大概,啟動後會根據項目中的配置參數,将配好的bean加載到spring的容器中等等。

3.2說下spring源碼中你對哪些類或包比較熟悉?    又是一個沒複習的問題,于是我就說我隻記得beanFactory類了,其他的都忘了。

3.3那說下beanFactory下的幾個常用的子類吧?   我說忘了。然後就沒有繼續問spring下的問題了。

4說下concurrentHashMap的原理?   這個我确實不知道,平時用這個的也很少,我就也就實話實說了。concurrentHashmap的原理不清楚,我以前項目中有用過AtomicInteger,以前看源碼時見裡面有cas操作之類的,我想concurrentHashmap它是一個線程安全的,應該會用到lock或synchronized這種鎖去實作的。

4.1那說下lock和synchronized底層上有什麼差別呢?   我說不知道。

5.說下線程池有哪幾種?    我答的是具體的我忘了,隻記得有fix的還有其他什麼的。

6.說下你對常用的排序算法還記得吧,說下? (自己感覺已經連續回答了問題都沒回答好了,越來越緊張) 算法我就真的忘了差不多了,也沒複習,畢業後一兩年沒玩過這個了。我就說,我隻記得冒泡了,其他的幾乎都忘了,什麼快排、歸并啥的都隻記得個大概了。

6.1那寫個冒泡排序吧?  給我了一張紙,讓我寫下。我一想,冒泡這算法這麼簡單我肯定還是會的。于是乎就接過筆和紙刷刷刷幾十秒寫好後,自己感覺不會出錯,就給他看了。面試官看後,說了下嗯。(回來後,我仔細想想了我當時手寫的冒泡,有文法錯誤,寫錯了,後來想想這個之尴尬呀!)

6.2看完我寫的冒泡後,面試官遍又問我連結清單還記得吧? 我說記得。 于時他在紙上畫了一個連結清單,問我如何判斷連結清單存在環路? 我回答了一種算法,他說,我那算法時間複雜度太高了,不好,還有别的辦法嗎?我想了下後,搖搖頭告訴他其他的我暫時不知道了。

7說下以前你在項目中硬體和服務端你負責的通信中nettry這塊的工作内容,你解決了什麼事情?    我就說了下我當時那個項目我主要負責硬體TCP協定棧的解析工作,以及向硬體端發送指令時的協定封裝工作。

7.1說下bluetooth的連接配接過程?  這個我沒接觸過,說不知道。

8然後問了下我大學時期參加的兩個進入了國家賽的比賽是幹什麼的?  我說一個是教育部的一個是工信部的,一個是類似ACM的算法比賽,一個是軟體設計比賽,當時太緊張了,我也就沒過多補充了。

9問我平時的開發代碼風格怎麼樣,平時用的是什麼開發工具?  我說是IDEA,風格這個确實不清楚。

10說一下你在做軟體開發中,解決的最大的難題是什麼?  這個問題,我把從開始到目前做過的軟體大腦海裡快速閃現了一遍,我去,我還真沒想法哪個最有代表性。于是我挑了一個用于在mysql查詢拆分查詢的項目,用的多線程+結果聚合。(現在想起來,我要是當時說曾經做的超級搶課軟體會不會更好一點,可惜沒有如果)

11然後問我有沒有什麼問題需要問他的? 那時差不多40多分鐘過去了。我當時還是很緊張啊,也感覺自己的答題答得不是很好,很多基礎性的問題都沒有答上來。于是我就直說了,我說我感覺我答得不是很好,對于技術上你能給我一些建議嗎?  于時面試官小哥說告訴了我曾經也有人告訴過我的問題:廣度和深度選擇的問題。他說,我目前23歲這個年齡,應該對于基礎知識要掌握牢固一點,對于技術知識不要隻追求廣度,應該追求深度。學習技術時,最好是通過看官方的DEMO或源碼學習或文檔學習,而通過看部落格這種去學習技術,往往學到的都不是最新的,都是其他人會的技術,其價值可能就沒有原版的好。

以上就是我在支付寶面試的主要問題彙總,水準很菜,勿噴。

個人總結:

通過這次大廠的面試後,讓我知道了“機會隻留給有準備的人”這句話說得一點也沒錯,學過的東西,要溫故。對于比較重要的面試,得要認真把學的東西抽出一些時間來複習下,複習時,尤其對于基礎性的知道要認真複習,特别是JAVA多線程、spring源碼、HTTP、TCP、 IO、資料庫事務、索引原理相關的要有深入的了解。

學習新技術或架構時,最好是參看官方的文檔,不要隻知道用百度,還要多用google。

當學會某一新技術時,在會用後要多去總結,多思考其原理。

算法+基礎源碼+常用架構原理真的很重要。

反思:

時光荏苒。轉眼大學畢業已經快一年了,但感覺自己對于技術在這畢業後的一年内沒有多少提升,對于技術的學習有些顯得有些浮躁。來上海也一年多了,知識沒漲多少,肚子倒是長大了不少,看着看出來時的幾塊腹肌現在變成了一個大肚子。這一年,惰性漲了,當初激情和活力也銳減了。曾經在大學的那個寒假在寝室裡敲着鍵盤的,因為做出一個搶課評教神器APP而喜悅萬分、那個站在三尺講台與老師同學們進行項目答辯與競賽、曾經頭頂光環在校園裡叱咤風雲的少年,你去了哪裡? 

二面

-------------------------一周後更新---------------------------

在一面結束一周後收到了阿裡二面的面試邀請,喜悅之情,溢于言表。 

去參加二面前我以為又要考查技術的基礎知識,特意将一些JAVA相關的基礎知識再次溫故了下,也盡管二面時沒有用上。

二面主要内容就是聊天,問了我現在的就職狀況、多久能入職、對于物聯網做過哪些項目、然後就是履歷上的一些項目介紹了下,最後問了我為什麼高中畢業時選擇的是一個二本的師範學校,又确認了下我是不是去年剛畢業的。後面又問我有沒有什麼問題要問他的,我問了幾個問題就結束了。剛開始我還以為這一輪也會過的,最後才發現我還是天真了,以為聊天聊得好過的機率就大,是以最後二面挂了。盡管挂了,但通過這次的面試讓我感受了一次大公司面試的過程,總體來說還是有所收獲的。

加油! 

本文作者:

靜下心來靜下心來

本文轉自:

https://blog.csdn.net/puhaiyang/article/details/79503005

社群技術交流:想要提前了解面試題,歡迎關注【

阿裡Java技術進階

】每周在群内進行【免費技術直播】和【線上回答技術問題】歡迎點選link入群:

http://tb.cn/gXRstIw

或者 釘釘掃碼入群:

阿裡巴巴JAVA面試後的個人總結與反思