1. 程式人生 > >阿里巴巴JAVA面試後的個人總結與反思

阿里巴巴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_