本文來(lái)自作者投稿(原作者:小胖兒),原作者是一位2021屆本科畢業(yè)生,就讀于一所雙非(非985、非211)院校,在今年2月份的時(shí)候,我曾經(jīng)幫他指導(dǎo)過(guò)簡(jiǎn)歷,并且根據(jù)他的簡(jiǎn)歷內(nèi)容幫他提了一些可能會(huì)問(wèn)到的問(wèn)題。
4月份的時(shí)候說(shuō)是已經(jīng)通過(guò)了阿里的四面,最近又得知已經(jīng)順利的拿到了阿里的Offer,非常為他感到高興。他還順便總結(jié)了一下自己面試經(jīng)歷,介紹了一下自己是如何準(zhǔn)備的,也希望能夠給大家?guī)?lái)一些幫助。
以下是他的原文內(nèi)容,我也對(duì)其中的部分內(nèi)容做了些批注。
前言
前兩天,我收到了阿里巴巴的暑假實(shí)習(xí)offer,從學(xué)長(zhǎng)內(nèi)推開(kāi)始面試到拿到最后offer經(jīng)歷了4面技術(shù)、一面交叉面和一面HR面。經(jīng)過(guò)了漫長(zhǎng)的等待和幾次幾乎折磨的面試之后,終于拿到了暑期實(shí)習(xí)offer。
H哥:阿里的校園招聘一般會(huì)經(jīng)歷4-5輪的面試,大概會(huì)持續(xù)一個(gè)月左右,每一輪結(jié)束之后到下一輪面試的時(shí)間一半不會(huì)超過(guò)兩周,如果等待時(shí)間過(guò)長(zhǎng),不用著急,可以聯(lián)系一下自己的內(nèi)推人,他們可以幫忙查看進(jìn)度。
自我介紹
本人來(lái)自西南某雙非本科學(xué)校,在校學(xué)的專業(yè)是物聯(lián)網(wǎng)工程。我的專業(yè)與Java開(kāi)發(fā)關(guān)系不大,學(xué)校也只教過(guò)一些簡(jiǎn)單的編程課,其余的編程相關(guān)知識(shí)都是自己在課余時(shí)間在實(shí)驗(yàn)室學(xué)習(xí)和自學(xué)的。技術(shù)不是大牛,項(xiàng)目做得多但是大部分都是自己練手的小項(xiàng)目或者一些有意思的小項(xiàng)目,沒(méi)有接觸過(guò)真正意義上的大項(xiàng)目。平時(shí)沒(méi)事的時(shí)候喜歡逛一逛微信公眾號(hào)、簡(jiǎn)書(shū)、掘進(jìn)等平臺(tái),看一看技術(shù)類文章,自己也偶爾寫過(guò)一些文章。在校期間在實(shí)驗(yàn)室的時(shí)間偏多,喜歡寫代碼的過(guò)程和攻克難題的過(guò)程。
H哥:和本人的經(jīng)歷有點(diǎn)像,我也是畢業(yè)于某雙非本科學(xué)校,相同點(diǎn)都是會(huì)利用自己大學(xué)的課余時(shí)間,去鉆研代碼。現(xiàn)在看來(lái),真的要感謝那個(gè)時(shí)候努力的自己。
學(xué)習(xí)過(guò)程
Java基礎(chǔ)最開(kāi)始是在菜鳥(niǎo)教程和其他的一些教程網(wǎng)站上自學(xué)的,后來(lái)又通過(guò)閱讀《Java編程思想》、《Effective
Java》、Hollis大神的“成神之路”系列文章等強(qiáng)化鞏固Java編程基礎(chǔ)。對(duì)于Java基礎(chǔ)一定要學(xué)的扎實(shí),這是編程的基本功,和練武功時(shí)候的扎馬步一樣,雖然枯燥但是必須扎實(shí)。
H哥:沒(méi)錯(cuò),Java基礎(chǔ)一定要扎實(shí),這是基本功,如果基礎(chǔ)不扎實(shí),基本沒(méi)有可能通過(guò)阿里的前幾輪技術(shù)面。
框架方面最開(kāi)始是實(shí)驗(yàn)室老師讓學(xué)習(xí)jfinal框架(但是當(dāng)時(shí)看到網(wǎng)上很多地方都在說(shuō)spring,自己一直沒(méi)有去主動(dòng)學(xué)習(xí)),后來(lái)我的人生導(dǎo)師讓我去學(xué)習(xí)SpringBoot和Vue這兩個(gè)框架,由于之前有框架學(xué)習(xí)經(jīng)驗(yàn),且這兩個(gè)框架對(duì)新手很友好,學(xué)習(xí)過(guò)程很快。當(dāng)時(shí)學(xué)習(xí)也就是從網(wǎng)上找了幾個(gè)系列文章一邊看一邊學(xué),然后在開(kāi)始學(xué)習(xí)的兩周之內(nèi)做了一個(gè)留言板(做了兩版,一版前后端分離,一版使用thymeleaf)。
JVM方面,大二下學(xué)期買了《深入理解Java虛擬機(jī)》,那時(shí)候第一遍閱讀,里面幾乎所有東西都不懂,后來(lái)大三又讀了一遍,復(fù)習(xí)面試的時(shí)候又讀了一遍,對(duì)書(shū)中的知識(shí)終于有了一點(diǎn)點(diǎn)認(rèn)識(shí)。除了閱讀這本書(shū),其他時(shí)候還經(jīng)常瀏覽一些面經(jīng),然后根據(jù)面經(jīng)中的JVM問(wèn)題來(lái)查閱資料,了解JVM相關(guān)知識(shí)。
Java并發(fā)編程,大三從B站上找了一個(gè)并發(fā)編程的教程,后來(lái)自己又買了一本《Java高并發(fā)程序設(shè)計(jì)》,這本書(shū)的前半部分看了2、3遍,對(duì)高并發(fā)有了上一定的認(rèn)識(shí)。
設(shè)計(jì)模式也是一直在B站上找視頻學(xué)習(xí),同時(shí)網(wǎng)上查閱資料對(duì)設(shè)計(jì)模式進(jìn)一步理解。
以上就是我的整個(gè)大學(xué)期間的學(xué)習(xí)過(guò)程,學(xué)習(xí)過(guò)程中也一直在做項(xiàng)目,從項(xiàng)目中發(fā)現(xiàn)錯(cuò)誤并改正,從重構(gòu)中找到更合適的解決方式,從調(diào)試中發(fā)現(xiàn)代碼的真正運(yùn)行原理
才是最關(guān)鍵的。
H哥:我當(dāng)年準(zhǔn)備校招的時(shí)候,也是看了很多書(shū)籍,還有重點(diǎn)看了很多面經(jīng),然后自己通過(guò)書(shū)籍或者博客去學(xué)習(xí)。
面試準(zhǔn)備
首先準(zhǔn)備校招之前一定是要好好準(zhǔn)備的,長(zhǎng)期的就是自己的編程基本功以及對(duì)各個(gè)方面知識(shí)點(diǎn)的了解程度,短期的就是突破一下自己不會(huì)的知識(shí)點(diǎn)。
我是投簡(jiǎn)歷之前一個(gè)半月就開(kāi)始做準(zhǔn)備了,首先就是刷leetcode,算法這一關(guān)還是比較重要,而且阿里還有筆試成績(jī),面試的時(shí)候也會(huì)問(wèn)到一些不是太難的筆試題;
然后就是多找?guī)灼娼?jīng),看看學(xué)長(zhǎng)學(xué)姐當(dāng)初面試的時(shí)候面試官都問(wèn)了哪些問(wèn)題,如果遇到會(huì)的,自己嘗試回答一遍,如果遇到不會(huì)的,那就去學(xué)習(xí)一下;
不過(guò)網(wǎng)上找的面經(jīng)可能因?yàn)榇蠹业膶W(xué)習(xí)過(guò)程不一樣,找到類似的面經(jīng)的概率個(gè)人感覺(jué)不太大,我恰巧在H大的知識(shí)星球里面,就找H大做了一下簡(jiǎn)歷指導(dǎo)(不是在打廣告,是真心感謝H大);
最后還是在H大的知識(shí)星球里面找到了一個(gè)很完整的Java面試題及答案的文檔(付費(fèi)資源,但是很值)用來(lái)做復(fù)習(xí)資料。
面試過(guò)程
第一次技術(shù)面(60min)
* 說(shuō)一說(shuō)你使用的是什么樣的線程池,自定義線程池的幾個(gè)參數(shù)是什么
* 說(shuō)一說(shuō)線程池的執(zhí)行流程
* 你的項(xiàng)目中定義的核心線程數(shù)、最大線程數(shù)和隊(duì)列大小是如何定義的?為什么這樣定義?(這道題根絕我導(dǎo)師給我說(shuō)是一個(gè)加分項(xiàng))
* 在項(xiàng)目中如何防止超賣現(xiàn)象
* 你的下訂單的sql語(yǔ)句如何編寫的?(考察MySQL的樂(lè)觀鎖)
* 如果有用戶反饋說(shuō)整個(gè)系統(tǒng)的反饋比較慢,你是如何排查和如何解決問(wèn)題的?
* 影響系統(tǒng)響應(yīng)慢的原因有哪些?
* 算法題:給定一個(gè)無(wú)序數(shù)組和一個(gè)目標(biāo)值,找出數(shù)組中兩個(gè)數(shù)之和等于目標(biāo)值的所有組合,并指出其時(shí)間復(fù)雜度。(很簡(jiǎn)單的一個(gè)算法題,leetcode
easy難度)
* 了解過(guò)JVM內(nèi)存模型么?說(shuō)說(shuō)哪些是線程獨(dú)享、哪些是線程共享的?
* 詳細(xì)說(shuō)一下Java堆的分區(qū),他們的比例,以及如果把比例調(diào)大以后會(huì)有什么樣的后果?
* 說(shuō)一下JVM的GC算法,以及為什么“標(biāo)記-整理”法更好一些,他能解決什么樣的問(wèn)題?
* 了解過(guò)Java類加載機(jī)制么?一共有哪幾種類加載器?
* 如果你想查看線上正在運(yùn)行的服務(wù)的GC日志,你需要輸入什么指令?
* 了解過(guò)HashMap么,說(shuō)一下HashMap的原理。
* 如果兩個(gè)對(duì)象hashCode相同,則一定是相同對(duì)象么,如果是兩個(gè)相等的對(duì)象,那么他們的hashCode相同么?
* 如何解決hash沖突?
* HashMap是線程安全的么,如何把HashMap變成線程安全的類?
* 說(shuō)一說(shuō)MySQL數(shù)據(jù)庫(kù)有哪些數(shù)據(jù)庫(kù)引擎?
* InnoDB的索引的數(shù)據(jù)結(jié)構(gòu)是什么,說(shuō)一說(shuō)他的原理
* 數(shù)據(jù)庫(kù)事務(wù)等級(jí)以及他們解決了什么問(wèn)題,請(qǐng)舉例說(shuō)明一下
* MySQL默認(rèn)的事務(wù)等級(jí)是什么?
* MySQL如何開(kāi)啟慢查詢?
* 說(shuō)一下Spring主要包含哪些模塊?
* 說(shuō)一下你對(duì)Spring的IOC容器的理解以及啟動(dòng)流程
* 有了解過(guò)RPC框架或分布式的東西么?(這個(gè)后來(lái)問(wèn)面試官,就是考察對(duì)新技術(shù)的了解以及對(duì)互聯(lián)網(wǎng)發(fā)展的一個(gè)關(guān)注度)
* 說(shuō)一下你讀過(guò)的有關(guān)Java的書(shū)籍
H哥:一面一共問(wèn)了26個(gè)問(wèn)題,信息量還是很大的,但是可以看到這些問(wèn)題都不難,主要是考察基礎(chǔ)知識(shí)的掌握情況,這一輪面試的難度數(shù)據(jù)阿里一面的正常難度,持續(xù)的時(shí)長(zhǎng)也算是正常范圍。圍繞的都是Java基礎(chǔ)、MySql數(shù)據(jù)庫(kù)以及Spring框架。
第二次技術(shù)面(30min)
* 介紹一下你做的項(xiàng)目中你覺(jué)得最好的那個(gè);說(shuō)一下你這個(gè)項(xiàng)目中的技術(shù)難點(diǎn)和挑戰(zhàn)。
* 如何解決商城項(xiàng)目中出現(xiàn)的超賣、少賣問(wèn)題?
* 說(shuō)一下什么是冪等性
* Redis如何保證高可用的
* Redis的哨兵模式知道嗎?
* 你用Redis覺(jué)得有什么缺點(diǎn)嗎?
* 你是如何做壓力測(cè)試的?壓力測(cè)試的數(shù)據(jù)是什么?
* 線城池有哪些參數(shù)?
* 核心線程數(shù)和最大線程數(shù)有什么區(qū)別?
* 常見(jiàn)的拒絕策略有哪些?
* 介紹一下SpringBoot的特性
* 說(shuō)一下什么是單例模式
* 什么是餓漢模式、懶漢模式
* 使用懶漢模式的注意事項(xiàng)以及如何解決
* 說(shuō)一下volatile關(guān)鍵字的作用和原理
* 說(shuō)一下自旋鎖和一些常見(jiàn)的自旋鎖的實(shí)現(xiàn)
* 說(shuō)一下數(shù)據(jù)庫(kù)的左外連接
* 數(shù)據(jù)庫(kù)索引優(yōu)化
* 數(shù)據(jù)庫(kù)索引的數(shù)據(jù)結(jié)構(gòu)
H哥:二面在一面的基礎(chǔ)上開(kāi)始包含一些如何做優(yōu)化、底層原理、以及相關(guān)框架的優(yōu)缺點(diǎn)等。希望考察面試者是否有鉆研精神,是否有自己獨(dú)立的思考,而不是那種只會(huì)用技術(shù)而不會(huì)思考的人。
第三次技術(shù)面(25min)
* 如何解決商城項(xiàng)目中出現(xiàn)的超賣、少賣問(wèn)題?
* 在開(kāi)發(fā)項(xiàng)目中,遇到了那些問(wèn)題?
* Redis與數(shù)據(jù)庫(kù)同步時(shí)候出現(xiàn)問(wèn)題是如何解決的
* 說(shuō)一下Java當(dāng)中線程有哪些狀態(tài)
* 線程的阻塞和等待有什么區(qū)別
* 介紹一些Java的鎖機(jī)制
* 你了解過(guò)哪些鎖的類型
* 為什么wait、notify這個(gè)方法會(huì)在Object這個(gè)類下面
* 分布式、RPC框架有了解過(guò)嗎
* Redis的線程模型是什么(考察NIO)
* Redis實(shí)現(xiàn)的消息隊(duì)列是如何保證消息不丟
* 介紹一下堆排序是如何實(shí)現(xiàn)的
* 介紹一下TCP/IP協(xié)議是如何保證消息可靠傳輸?shù)?
* TCP/IP協(xié)議做了什么優(yōu)化(擁塞控制和流量控制)
H哥:這一輪和上一輪面試的范圍差不多,主要目的也是在做一輪篩選。從這一輪和上一輪整體看,重點(diǎn)都考差了并發(fā)編程和Redis的相關(guān)知識(shí)。
第四次技術(shù)面(15min)
* 說(shuō)一下你投稿的文章寫得是什么內(nèi)容
* 介紹一下消息隊(duì)列
* 超賣是如何解決的?
* 下單過(guò)程是如何設(shè)計(jì)的?
* 介紹一下雪花算法
* 你怎么理解分布式?
* 分布式之間怎么通信?
* 生產(chǎn)者、消費(fèi)者模型是怎么工作的?
* Java里面創(chuàng)建線程的方式
* 代碼場(chǎng)景:給一個(gè)字符串,統(tǒng)計(jì)每個(gè)大寫字母出現(xiàn)的次數(shù),按著次數(shù)排序,從小到大輸出字母和其出現(xiàn)的次數(shù)
H哥:這一輪開(kāi)始問(wèn)到了一些和分布式有關(guān)的知識(shí),這部分知識(shí)點(diǎn)對(duì)于本科生來(lái)說(shuō)確實(shí)會(huì)有些難度,因?yàn)榇蟛糠秩硕紱](méi)有接觸過(guò),所以要求也不會(huì)太高,一般會(huì)關(guān)注一些理論知識(shí)或者概念的理解
交叉面試(30min)
* 你在學(xué)校學(xué)習(xí)過(guò)程中,哪些可能成績(jī)更好一些以及為什么這些課程成績(jī)更好一些
* 你學(xué)習(xí)Java多長(zhǎng)時(shí)間了
* 你是如何學(xué)習(xí)Java的?
* 你看過(guò)哪些開(kāi)源框架源碼?
* 你是怎么看開(kāi)源框架源碼的?
* 介紹一個(gè)你參與較多或者比較有難度的項(xiàng)目
* 你們團(tuán)隊(duì)開(kāi)發(fā)項(xiàng)目的時(shí)候有沒(méi)有大家一起解決的某些技術(shù)問(wèn)題
* 你們做的這個(gè)項(xiàng)目有沒(méi)有借鑒過(guò)其他已經(jīng)成熟的項(xiàng)目
* 說(shuō)一下你們項(xiàng)目的要求和指標(biāo)大概是多少
* 你們項(xiàng)目中的線程池隊(duì)列容量是如何確定的
* 項(xiàng)目中的某些解決方案是個(gè)人想出來(lái)的還是團(tuán)隊(duì)討論的結(jié)果
* 如果再讓你做一個(gè)商城系統(tǒng),你會(huì)做哪些技術(shù)選型
* 項(xiàng)目中做過(guò)哪些安全方面的措施
* 你會(huì)如何設(shè)計(jì)一個(gè)淘寶會(huì)員系統(tǒng)?
* 你未來(lái)的發(fā)展方向是什么?
H哥:這一輪的問(wèn)題就都比較開(kāi)放了,因?yàn)槟艿竭_(dá)這一輪的說(shuō)明技術(shù)都是還可以的,這一輪一般會(huì)給出一些問(wèn)題,詢問(wèn)解決方案等,更好的考察面試者的全方面知識(shí)的理解以及如何靈活運(yùn)用。
面試總結(jié)
每一次面試都感覺(jué)是煎熬,雖然之前看過(guò)很多阿里的面經(jīng),都說(shuō)阿里面試官會(huì)抓住某一點(diǎn)一直問(wèn)下去,直到問(wèn)到你不會(huì)為止,但是當(dāng)?shù)谝淮斡H身體會(huì)的時(shí)候,還是感覺(jué)很煎熬。
不過(guò)最終的結(jié)果還是好的,至少收到了心儀的offer,能在這個(gè)疫情期間,大環(huán)境不好的情況下找到實(shí)習(xí)工作。
對(duì)于整個(gè)的學(xué)習(xí)過(guò)程和面試過(guò)程,最大的感悟有四:
* 基礎(chǔ)知識(shí)要扎實(shí),尤其是Java和數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí),如果基礎(chǔ)知識(shí)不扎實(shí),后面什么框架和實(shí)戰(zhàn)不會(huì)有太好的結(jié)果
*
多看一些技術(shù)類的博客或者文章,但是要有自己的思考,因?yàn)楹芏嗉夹g(shù)類文章都是跟緊互聯(lián)網(wǎng)發(fā)展的,多看一些能夠更加了解互聯(lián)網(wǎng)的發(fā)展方向;同時(shí)自己的思考也能讓自己過(guò)濾掉某些文章中的較差的觀點(diǎn),做到取其精華去其糟粕
* 主動(dòng)很重要,給我內(nèi)推的學(xué)長(zhǎng)是我主動(dòng)認(rèn)識(shí)的,我的導(dǎo)師是我主動(dòng)認(rèn)識(shí)的,學(xué)技術(shù)也是我主動(dòng)學(xué)習(xí)的,這世上沒(méi)有天上掉餡餅的好事,主動(dòng)才會(huì)有故事
*
一個(gè)合適的導(dǎo)師真的很重要,我在遇到我的導(dǎo)師之前,學(xué)習(xí)方向很迷茫,對(duì)于很多東西都不知道如何入手,很多文章也沒(méi)有解決我的問(wèn)題;老師這時(shí)候就可以指明方向,讓我的學(xué)習(xí)之路少了很多崎嶇
H哥:這4點(diǎn),總結(jié)的很到位,如果很多人能夠像本文作者一樣,在大學(xué)期間就能按照這4點(diǎn)要求去努力的話,相信都可以拿到很好的Offer
以上就是我暑期實(shí)習(xí)的應(yīng)聘全過(guò)程,當(dāng)然了,作為技術(shù)人員就要保持終生學(xué)習(xí)的態(tài)度,不斷提高自己的核心競(jìng)爭(zhēng)力,才能不被時(shí)代所淘汰。
以上,就是作者的一些總結(jié),其實(shí),從他開(kāi)始準(zhǔn)備校招到最后拿到阿里的Offer,我們一直都有些交流,可以看得出來(lái),他拿到滿意的Offer除了和自己實(shí)力有關(guān)之外,自己的努力也起到了很大的作用。
從剛開(kāi)始的準(zhǔn)備簡(jiǎn)歷、到準(zhǔn)備筆試面試、到后來(lái)拿到Offer,一直到最近他寫的這篇面經(jīng),都看得出來(lái)他有認(rèn)真努力對(duì)待找工作這件事情。
很多人說(shuō),現(xiàn)在阿里要求越來(lái)越高了,是不是非985/211就完全沒(méi)有機(jī)會(huì)了,但是,其實(shí)通過(guò)本文作者的經(jīng)歷就能知道,機(jī)會(huì)是自己努力創(chuàng)造的。
最后,送給本文的作者——小胖兒、我自己以及所有讀者一句話:
愿你一生努力,一生被愛(ài)。想要的都擁有,得不到的都釋懷。
熱門工具 換一換
