背景:
這周獲得了阿里巴巴的面試邀請,應聘的崗位為支付寶內某IOT部門的JAVA軟體工程師,面試時間是通過電話面試1天后通知我的,地點為高端的上海大廈,
接到面試通知后的我,即高興又有些膽怯,高興的是:全國數一數二的大廠會給我一份面試機會,證明我的某些地方還是受到了面試人員的初步肯定;膽怯的是:早就聽說阿里巴巴這樣的大廠要求很高,非等閑之輩很難進去,對于自己的技術知識信心感覺不足,
面試前奏
面試當天的下午,按照能到達的面試時間乘著地鐵到達了陸家嘴地鐵站,由于是第一次參加這樣的大廠面試,一路上的我非常緊張激動了,出地鐵后,我遍只身向上海中心大廈走去(還好以前無聊時去陸家嘴轉悠過幾次,陸家嘴區域中最高直上云霄的那坐旋轉大廈遍是,要不然又得用步行導航了),健步如飛的我在辦理好了證件后順利到達第N層樓,出電梯一看,“支付寶”三個大字映入門簾,想著終于見到了每天在手機里要用的支付寶APP了,這感覺沒得說啊(原諒沒見過市面的我)!

此間N分鐘略,,,,,,直奔面試,
面試官是一位年輕的小哥,30來歲左右,
支付寶面試經歷
面試時,總花了50分鐘左右,一直和面試官聊著,盡管這期間我非常緊張,這期間面試官問的主要問題如下:
【一】、先作個自我介紹,我就簡單介紹了下,就幾句話的樣子,說了下大學時和上一家公司的作業基本內容啥的,
【二】、HTTPS建立連接的詳細程序,這個問題,由于在坐地鐵時有復習到,就按照所知道的向面試官回答了,回答的比較詳細,
- HTTPS中為什么會要用到CA機構,其目的何在?我回答的是有CA機構可以確保服務端證書的真實性,
- HTTPS它能解決什么問題?我回答的是可以防止抓包,
- HTTPS建立好連接后,每次傳輸時為什么用的是對稱加密了,而不用RSA這種公鑰私鑰方式加密? 我回答的是對稱加密的效率更快
你知道RSA,DES,AES這些演算法加密解密所需要耗費的時間嗎,有曾經做過DEMO驗證過嗎? 我說的是,RSA應該是最耗時的,對稱加密應該更快一點,但確實沒做過DEMO驗證,
- HTTPS在建立好連接后,每次為什么要生成一個亂數,這樣的設計目的有哪些? 我回答的是,可以防止重放攻擊,
- 你之前抓包是用的什么軟體抓的? 我說wireshark, 于是面試官便問我,wireshark的TCP協議格式是什么樣的,這個問題我不是很懂,就放棄了,說不知道,
- 如果讓你自己用httpClient或urlConnection去設計一個HTTPS的請求客戶端,你會怎么設計? 這個場景我以前沒接觸過,我說不知道,以前我用httpClient去呼叫https的API介面時,能直接訪問,也就沒有深入去研究了,可能是httpClient里自帶了CA證書吧,這個問題應該沒有答好,或偏離太大,HTTPS問題就停止了,沒有繼續在HTTPS上問了,
【三】、我看你以前的專案中有用過spring框架是吧? 我說是的,于是問題就來了,
于是我腦子里馬上浮現出自己構建的Spring框架圖:


等等等等......
- 那說下spring專案啟動的原理吧! 聽到問題后的我,發覺轉折太大,怎么難度一下就加深了這么多,面試時也忘了復習下spring的原理,于是我就說了下spring框架加載的大概,啟動后會根據專案中的配置引數,將配好的bean加載到spring的容器中等等,
- 說下spring原始碼中你對哪些類或包比較熟悉? 又是一個沒復習的問題,于是我就說我只記得beanFactory類了,其他的都忘了,
- 那說下beanFactory下的幾個常用的子類吧? 我說忘了,然后就沒有繼續問spring下的問題了,
【四】、說下concurrentHashMap的原理? 這個我確實不知道,平時用這個的也很少,我就也就實話實說了,concurrentHashmap的原理不清楚,我以前專案中有用過AtomicInteger,以前看原始碼時見里面有cas操作之類的,我想concurrentHashmap它是一個執行緒安全的,應該會用到lock或synchronized這種鎖去實作的,
- 那說下lock和synchronized底層上有什么區別呢? 我說不知道,
【五】、說下執行緒池有哪幾種? 我答的是具體的我忘了,只記得有fix的還有其他什么的,
【六】、說下你對常用的排序演算法還記得吧,說下? (自己感覺已經連續回答了問題都沒回答好了,越來越緊張) 演算法我就真的忘了差不多了,也沒復習,畢業后一兩年沒玩過這個了,我就說,我只記得冒泡了,其他的幾乎都忘了,什么快排、歸并啥的都只記得個大概了,
- 那寫個冒泡排序吧? 給我了一張紙,讓我寫下,我一想,冒泡這演算法這么簡單我肯定還是會的,于是乎就接過筆和紙刷刷刷幾十秒寫好后,自己感覺不會出錯,就給他看了,面試官看后,說了下嗯,(回來后,我仔細想想了我當時手寫的冒泡,有語法錯誤,寫錯了,后來想想這個之尷尬呀!)
- 看完我寫的冒泡后,面試官遍又問我鏈表還記得吧? 我說記得, 于時他在紙上畫了一個鏈表,問我如何判斷鏈表存在環路? 我回答了一種演算法,他說,我那演算法時間復雜度太高了,不好,還有別的辦法嗎?我想了下后,搖搖頭告訴他其他的我暫時不知道了,
【七】、說下以前你在專案中硬體和服務端你負責的通信中nettry這塊的作業內容,你解決了什么事情? 我就說了下我當時那個專案我主要負責硬體TCP協議堆疊的決議作業,以及向硬體端發送指令時的協議封裝作業,
- 說下bluetooth的連接程序? 這個我沒接觸過,說不知道,
【八】、然后問了下我大學時期參加的兩個進入了國家賽的比賽是干什么的? 我說一個是教育部的一個是工信部的,一個是類似ACM的演算法比賽,一個是軟體設計比賽,當時太緊張了,我也就沒過多補充了,
【九】、問我平時的開發代碼風格怎么樣,平時用的是什么開發工具? 我說是IDEA,風格這個確實不清楚,
【十】、說一下你在做軟體開發中,解決的最大的難題是什么? 這個問題,我把從開始到目前做過的軟體大腦海里快速閃現了一遍,我去,我還真沒想法哪個最有代表性,于是我挑了一個用于在mysql查詢拆分查詢的專案,用的多執行緒+結果聚合,(現在想起來,我要是當時說曾經做的超級搶課軟體會不會更好一點,可惜沒有如果)
【十一】、然后問我有沒有什么問題需要問他的?
那時差不多40多分鐘過去了,我當時還是很緊張啊,也感覺自己的答題答得不是很好,很多基礎性的問題都沒有答上來,于是我就直說了
我說我感覺我答得不是很好,對于技術上你能給我一些建議嗎?
于時面試官小哥說告訴了我曾經也有人告訴過我的問題:廣度和深度選擇的問題,他說,我目前23歲這個年齡,應該對于基礎知識要掌握牢固一點,對于技術知識不要只追求廣度,應該追求深度,學習技術時,最好是通過看系統的架構體系圖進行原始碼學習+檔案學習+視頻學習,
以上就是我在支付寶面試的主要問題匯總,勿噴,歡迎留言指導!
個人總結:
通過這次大廠的面試后,讓我知道了“機會只留給有準備的人”這句話說得一點也沒錯,學過的東西,要溫故,對于比較重要的面試,得要認真把學的東西抽出一些時間來復習下,復習時,尤其對于基礎性的知道要認真復習,特別是JAVA多執行緒、spring原始碼、HTTP、TCP、 IO、資料庫事務、索引原理相關的要有深入的了解,
反思:
還記得他說:
時光荏苒,轉眼大學畢業已經快一年了,但感覺自己對于技術在這畢業后的一年內沒有多少提升,對于技術的學習有些顯得有些浮躁,來上海也一年多了,知識沒漲多少,肚子倒是長大了不少,看著看出來時的幾塊腹肌現在變成了一個大肚子,這一年,惰性漲了,當初激情和活力也銳減了,曾經在大學的那個寒假在寢室里敲著鍵盤的,因為做出一個搶課評教神器APP而喜悅萬分、那個站在三尺講臺與老師同學們進行專案答辯與競賽、曾經頭頂光環在校園里叱咤風云的少年,你去了哪里?
如何打破浮躁?
古人云:生于憂患,死于安樂,
- 現有崗位上玩命干,就是要用牛逼的技術搞定別人口中的難題,就是要加班完成時間緊任務重的專案,業界不服不罷休,
- 跳槽,問下自己要多少錢,那些公司給得了,自己有別人要求的這些技術與管理能力沒,沒有就好好學,有就投簡歷吧,
程式員常見發展路徑有兩種:管理路徑、技術路徑,以下,enjoy:

你適合學什么?你需要學什么?
1、閱讀原始碼
閱讀、分析原始碼是程式員最基本的碼代碼能力也是碼農的根本所在,學習經典原始碼中所用到的經典設計思想及常用設計模式,能夠幫你了解大牛是如何寫代碼的,從而吸收大牛的代碼功力,在阿里面試中,MyBatis,Spring等框架的底層原理是經常會被問到的

2、分布式架構
阿里巴巴有很多大團隊,這種大團隊里有很多小團隊,到小團隊之后,做的業務都不相同,如果想立足成為一線互聯網公司中的萬能選手,最主流的分布式架構中有很多知識都是必須要去了解與學習的,并且在阿里面試程序中,面試官會問到實際應用場景的問題:比如微服務化、用戶量、并發量、業務復雜度以及可擴展程度等,這里不多贅述,本屌提供一個分布式架構的學習思路也是自己目前還在學習中的體系:

3、微服務架構
微服務是現在互聯網架構技術中最火熱的話題之一,也是本屌目前正在學習研究的方向,在阿里面試程序中,面試官很少會問到關于微服務相關的問題,

4、并發編程
并發編程幾乎是所有互聯網公司面試必問問題,并發編程是Java程式員最重要的技能之一,也是最難掌握的一種技能

5、性能優化
性能一直是讓程式員比較頭疼的問題,當系統架構變得復雜而龐大之后,性能方面就會下降,特別是阿里巴巴這樣的一線互聯網公司最為注重,因此想進入阿里,性能優化一定是要去深入學習與理解的一環,本屌在性能優化這一塊雖然不能算專家,也可以自信的說是精通了

6.設計模式
毫無疑問,設計模式于己于他人于系統都是多贏的,設計模式使代碼編制真正工程化,設計模式是軟體工程的基石,如同大廈的一塊塊磚石一樣,

作為后端Java過來人,我是整理了很多進階架構視頻資料、面試檔案以及PDF的學習資料,針對上面一套系統大綱小編也有對應的相關進階架構視頻資料,如果‘你’確定好自己未來的道路或者想學習提升自己技術堆疊、技術知識的小伙伴們可以關注小編幫小編轉發此文后私信回復【資料】或者查看下方來獲取學習資料提升自己(全套面試檔案、PDF、進階架構視頻)




學習資料獲取方式三連后關注、私信回復【資料】或者掃描下方即可領取哦!

結束語
確實是程式員不管多少歲其實都是一個坎,但通過這個坎的路不只一條,或者四大皆空追求世外桃源的生活,或者沿著老路再向上奮斗,或者創業還是否能找個捷徑,或者換個環境繼續向前進,不管怎樣,唯有努力,才會過得更好,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/202550.html
標籤:其他

