日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面经分享:历时半个月,终于拿到了蚂蚁金服的offer!

發布時間:2025/3/11 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面经分享:历时半个月,终于拿到了蚂蚁金服的offer! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

在今天,我收到了螞蟻金服A級的實習錄用offer。

從開始面試到拿到口頭offer(四面技術+一面HR)戰線大約拉了半個月,

從拿到口頭offer到收到正式錄用郵件大概又是半個月。

思前想后,決定還是做一個整理與總結。

一方面是回顧并記錄自己的努力過程,

一方面也是希望對后來者起到一些幫助。

前方高能預警,本篇文章萬字有余,通讀可能要很久。


以下內容普適于技術崗,非技術崗請部分參考。

?

目錄

  • 如何進行知識積累

    • 如何把握實踐與理論的天平

    • 我應該如何整理筆記

    • 怎么復習才不會忘

  • 面試前

    • 怎么寫出讓人眼前一亮的簡歷

    • 如何突擊面試

    • 面試前焦慮該怎么辦

  • 面試開始

    • 自我介紹到底要怎么說

  • 面試中

    • 技術面試的時候應該注意些什么

    • 面試尬場怎么辦

    • 如何學會埋坑

  • 面試結束

    • 面試官:“你有什么想問我的嗎”,該說什么?

    • 我怎樣才能知道我是否通過了

  • 我兩年半的技術人生

?

?

如何進行知識積累

????在講面試技巧之前,顯然知識積累是不可或缺的。不然即使面試僥幸通過,在之后的工作中也會體驗極差。

1

如何把握實踐與理論的天平

實踐是什么?

比如你new Object()初始化了一個對象來使用;

比如你用HashMap結構作為容器存儲了一些數據;

比如你拿SpringBoot搭建了一個web網站后臺;

比如……

理論是什么?

初始化對象有什么代價?背后的底層實現邏輯是怎么樣的?初始化太多對象可能導致什么問題?為什么我經常初始化對象,明明是空間消耗大,反而導致程序在運行時間上變得緩慢?

HashMap適合什么場景?我現在這個場景真的是用HashMap最合適嗎?運用的時候有沒有什么需要注意的?有時候遇到一些特殊需求,在HashMap基礎上可以再優化性能嗎?

天天用SpringBoot,IOC、AOP到底是什么概念,背后怎么實現的?它們適用場景如何,我的用法是最佳實踐嗎?會不會有什么弊端,導致在生產環境出現問題?

……

實踐與理論的學習,到底應該側重實踐一些呢,還是側重理論一些呢?

都說實踐與理論要兩相結合,缺一不可,在我看來這是一句廢話。重點是如何權衡兩者,并且在不同的發展階段,兩者的側重比例是否又要發生變化呢?

在我看來,實踐決定方向,理論填補細節

?

(1)首先要實踐,然后填補理論


程序員首先要實踐,才能夠收獲基本的技術視野和處理問題的能力,這兩者都是不可或缺的。

有了基本的視野之后,就可以根據自己學習的方向,去填補你的細節,例如:

  • 我學習了Java,會寫一些應用程序了,也知道如何利用應用服務層的Java來對數據庫層的數據做一些處理,那么接下來: 1. 對數據怎么處理會更快(這里可能就會引出多線程,然后就可能引出線程池,又引出JDK提供的線程池有什么并發問題,怎么解決,然后可能又引入并發包,一下子串出好多) 2. 各種優化(比如初始化太多對象導致頻繁GC,全局變量太多導致占存一直很高blabla)

  • 我學習了MySQL,會用SQL語句操作數據了,知道建索引可以加快訪問速度了,那么接下來: 1. 在SQL語句上是不是也可以做一些優化來提升性能(比如很有名的延遲關聯) 2. 索引到底應該怎么建才好(這就涉及到索引的很多知識,比如B+樹,比如一些匹配原則例如最左適配原則等等)

  • 這種細節的填補是有邏輯性的,從我上面舉的兩個例子就可以看得出來。這種邏輯性的存在會使你在學習的過程中不會感到虛浮,會發現這些理論都是切實有用且有價值的。

    但這樣的理論學習還不夠,因為它不系統。充分的發散思維使你能夠在實踐之外追求到很多理論知識,但那些你發散不到的部分就接觸不到了。這個時候你就需要系統性的學習,例如讀書

    當你第一次學會實踐,就好像在自己的腦海中制作了一個知識星球。它里面幾乎是空白的,但是球體本身存在,幫助你去界定、區分知識——借助這個球體的框架,當你在遇到一個新知識的時候,你會它有一個模糊的概念:這個知識到底是有用知識還是無用知識,它又在哪個范疇或層面里?

    所以借助了一開始的實踐,然后你再去邏輯地發散、或者系統地讀書的時候, 就不會讓新知識成為無根之萍,而是切實地進入你的知識星球中,成為你知識架構的一部分。

    (2)理論再返回到實踐中


    知識架構建立起來了,但它沒有經歷實踐的檢驗,就依然是不可用的。

    一方面在于我們學習的理論知識可能是過時的,甚至是謬誤的;另一方面我們可能以為自己懂了但其實沒懂,這一點相信大家都能理解。

    那么如何實踐呢?有些理論可能是很難實踐出來的,但是至少我們要對能實踐的一部分去做一下嘗試。就比如簡單的JVM排查和調優,通過MySQL EXPLAIN去檢查執行計劃并實踐優化等等。

    2

    我應該如何整理筆記

    ????首先要強調筆記是很重要的。至少我認識的那些能夠面試進大廠的同學,每個人都會為自己做筆記。

    ????而至于到底應該如何整理筆記,我認為最重要的有兩點:一是分門別類,二是控制粒度

    ?

    (1)分門別類


    我們一定要能夠清晰地把我們要整理的知識模塊化,比如說JVM基礎,我們可以這樣分模塊:

    • 運行時數據區

    • 垃圾回收

    • 類加載

    • JMM

    • JVM調優

    然后分別根據每一個小模塊,單獨整理一篇筆記。

    并且在篇末,或者另開一篇筆記,專門記錄針對這個模塊的比較大而廣的問題

    例如運行時數據區,我們就可以記錄這樣一些問題:

    • 講講JVM運行時數據區的各個組成,是什么,有什么用

    • 講講對象。它是如何創建的,里面包含一些什么信息,如何定位到對象

    記錄這種大的問題,有助于我們進行自測。不要問自己太多細小的問題,除非你切實覺得它很重要。

    什么叫細小的問題呢?比如:類里靜態的基本數據類型存在方法區還是堆里?

    這種問題枚舉你是枚舉不完的,它其實已經包含在了”講講JVM運行時數據區的各個組成,是什么,有什么用“這個問題里。

    (2)控制粒度


    ????什么叫控制粒度?其實就是控制你筆記記錄的詳細程度。

    ????如果你筆記中對于知識點的描述非常簡潔,帶來的好處是閱讀起來就會很快,壞處是可能在閱讀時導致你忽略掉一些本不該忽略的細節,或者甚至是:”咦,我這記的是啥,我怎么看不懂了。“

    ????那如果記得太詳細呢?很顯然,就會導致閱讀起來非常繁瑣,可能達不到一個理想的迅速復習的效果。

    ????那到底應該控制在一個什么程度上呢?

    ????我認為一篇良好的筆記應該滿足以下兩個條件:

    • 這段筆記切實提到了所有應該提到的知識點,不需要我去聯想;

    • 這段筆記對于這些知識點都有簡單的描述性文字,并且能夠言簡意賅,盡可能以列表列舉的形式,不要有敘述性的內容。

    tips:什么叫敘述性內容?

    舉個例子,比如下面這是一段對于垃圾回收算法里的標記-清除算法的筆記:

    標記-清除算法:

    ? ?標記出所有需要回收的對象,根據標記統一回收。

    ? ?問題:1. 低效率

    ? ? ? ? 2. 產生大量不連續內存碎片

    帶有敘述性內容的寫法是怎么樣的呢:

    標記-清除算法:

    ? ?它的基本原理是,標記出所有需要回收的對象,然后根據標記統一回收。

    ? ?它有兩個問題,一是在于效率比較低,二是在于可能產生大量不連續的內存碎片。

    非常顯然,閱讀前者的效率遠高于后者。

    整理筆記時,我們盡可能省去不必要的鋪墊,例如”它的基本原理是“這句話就是完全不必要的。

    我們也可以盡可能省去一些聯結詞,例如”首先“、”然后“、”最后“這種。以及對于一些枚舉性內容,我們盡可能采取列表而非文字形式表達,會更加直觀易懂易記。

    3

    怎么復習才不會忘

    每天都反復復習當然可以保證你不會忘,但會非常疲憊而且費時。

    嚴格遵守網上的某些號稱貼合人類記憶曲線的復習方式,堅持起來壓力很大,最終往往也很難達到自己理想的效果。

    實際上這種所謂”曲線“是有一定道理的,但是也要結合我們每個人自身的特殊情況,去找到最適合自己的一種記憶方式。

    我認為這樣一種記憶法是比較有效的:

    從第一次復習并記憶的時候開始算,隔比較短的一段時間再復習并記憶一次,隔不太短的一段時間再復習一次,然后堅持每隔較長的一段時間就復習一次。

    那么這個”比較短的一段時間“、”不太短的一段時間“、“較長的一段時間”又分別是多久呢?我們可以自己來決定。但需要知道的是,我們的復習間隔時間應該是不斷變長的,直到一個比較穩定的值。

    比如我個人的話,就喜歡第一次記憶完后,兩小時再復習一次,隔一天再復習一次,然后隔四五天復習一次,之后可能就一直是7-10天會復習一次。

    無需刻意,比如我本來打算三天后復習一次,但是三天后突然有什么事耽擱了。所以我提前到前一天,或者滯后到后一天,又能怎么樣呢?記憶是量變的過程,一天兩天的偏移根本不會有什么質變可言。


    但讓記憶周期大抵符合一個慢慢變長的規律,我想是有必要的。而如果你覺得最后每隔7-10天復習一次都會壓力很大,那你也可以半個月甚至二十天才看一次。不過這樣的話,等面試要來臨的時候,你可能就難免需要簡單突擊一下了。

    面試前



    1

    怎么寫出讓人眼前一亮的簡歷

    ????按照一般流程來說,你的簡歷會先給懂一點技術/不懂技術的HR初審,然后再交給研發的同事過審,經過這兩層都ok了,才會給你進面試的流程。

    ????也就是說,你的簡歷不僅要讓專業人士看著厲害,還要讓非專業人士看著也厲害。

    ????那么作為技術人員,簡歷到底應該怎么寫呢?

    ?

    ?

    (1)綜述


    我們不妨先概括后具體,先總體看一下簡歷應該寫一些什么東西,寫多長篇幅,排版成什么樣子,然后再分析每個模塊應該如何去寫。

    寫什么東西

    一個正常的簡歷應該有如下內容:

    • 基本信息及聯系方式

    • 學習經歷

    • 工作經歷(或實習經歷)

    • 項目經歷

    • 專業技能

    • 自我評價(這個不一定要有,看前面篇幅)

    寫多長篇幅

    作為技術人員,我覺得簡歷1-2頁就好,3頁未免太過冗長。

    排版成什么樣子

    首先格式上來說,現在一般都是網申,也就是提交電子材料,所以HTML或者PDF格式為佳。

    具體排版的話,盡可能簡潔明了,不要花里胡哨。技術人,又不是去做UI設計,搞那么好看,人家也不會欣賞,反而覺得你不務正業。

    我個人建議簡歷的好看程度,達到markdown能支持的極限就可以了,不要超過markdown的能力。

    (2)基本信息及聯系方式


    可能會包括以下一些信息:

    • 姓名,電話,郵箱:這幾個是必須的,不多說了。

    • 求職意向:單獨列這條出來,我建議要寫。不然你本來做后端的,人家給你安排到測試開發,你哭都來不及。

    • 個人網站/博客/GitHub:如果有厲害的一定要記得寫,如果很水的話建議別寫了。

    (3)學習經歷

    ?

    可能會包括以下一些信息:

    • 學歷(或者畢業年份)

    • 績點:如果不好看,請不要寫,不要寫,不要寫

    • 專業:如果不是計算機相關專業,請不要寫,不要寫,不要寫

    • 獎項:盡可能多寫,從高到低排。先寫厲害的,最后寫不厲害的。如果沒什么拿的出手的獎項,建議干脆什么也不要寫。不要孤零零寫個什么XX大學優秀團員上去,還不如不寫。

    (4)工作經歷(或實習經歷)

    這里就如實說就好,切記一定要準確,包括在職時間也寫明白,一兩個月的偏差也是在給自己埋炸彈。

    應該包括以下信息:

    • 在職時間:例如2018.2~2019.3

    • 工作單位:如果不是大家熟知的大廠,最好附上行業

    • 部門:這個是可選項,不一定要寫。

      如果是厲害的部門請記得寫,比如騰訊微信

    • 崗位:建議具體。如果公司里崗位就叫“研發工程師”,

      你可以寫成“JAVA研發工程師”或者“GO研發工程師”之類的。

    (5)項目經歷

    這是第二重要的部分!!第一重要的部分是下面的專業能力。但這也是決定你是否能簡歷過審的很重要的一部分,并且是可能導致面試官瘋狂追問你的來源。

    一般寫2-3個項目經歷比較好,相對來說,要挑最厲害的、最對口的、最近的。

    那么每個項目經歷中,應該寫一些什么呢?

    • 項目名稱

    • 項目簡介:1-2句話就好,讓別人知道你這是個什么項目。

      比如是個后臺管理系統?比如是個電商平臺?之類的

    • 個人技術工作:請以列表形式列舉自己的核心工作,

      不要大段敘述性文字!!

      ?

      后面是一些可選項,不一定要寫:

    • 技術關鍵詞:項目中涉及到的技術關鍵詞

    • 項目中的收獲

    • 項目成果:項目上線后有什么成果。

      比如抗住了多大的QPS,比如做到了多大的規模等等。

      請注意這兩者是有區別的,前者可能更強調峰值,后者是長期的穩定性。

      當然還可以有其他的,但最好要有技術視角。

    ?

    給一個優秀的范例(來自敖丙大大):

    ?

    如果覺得這個有點太高大上了,再看一個普通一點的:

    (6)專業技能

    專業技能方面應該盡可能講得全面,把自己確定會的一個都不要漏掉。

    但是一定要和崗位對口。比如你投個Java后臺,你非得寫個攝影技能上去,反正我個人感覺不是很好。

    如果你不知道怎么寫,可以看一下崗位描述。一般投遞簡歷前你看到的崗位描述上都會有對于技術要求的說明,比如:

    =======我們的要求=======

  • 全日制211本科以上學歷,計算機相關專業,畢業時間2020.11-2021.10

  • JAVA基礎扎實,理解io、多線程、集合等基礎框架,對JVM原理有一定的理解

  • 熟悉分布式、緩存、消息、搜索、推薦等技術,并能合理應用,解決實際問題

  • 學習能力強,對代碼質量及系統性能具備精益求精的精神

  • 良好的團隊溝通協同能力,抗壓能力,勇于接受挑戰

  • 有作品或者實習經驗優先

  • 我們可以根據崗位的要求,結合我們自身的優勢,來寫我們的專業技能。像這樣:

    2

    如何突擊面試

    我個人覺得,突擊面試是在面試前1-10天的這個階段。

    (1)筆試突擊復習

    ?

    這個是毋庸置疑的。之前在怎么復習才不會忘里說,最后堅持每7-10天復習一次。如果你堅持了這種頻率,我覺得筆記突擊復習對你來說幾乎是不需要的。不過如果你覺得心有不安,可以在突擊階段每天復習一次。

    切記一點,筆記突擊復習時,請記得自己問自己問題,然后模擬一下在面試官面前你會怎么回答。別只是記憶,你還要學會如何表達。

    ?

    (2)針對性復習

    ?

    針對性復習包含兩方面:把握公司面試特點+刷特定面經

    首先是把握公司特點。打個比方,如果你去面試字節跳動,可能就需要多準備一點算法、網絡,他們很喜歡問這些。如果你去面試美團,你可能就更需要準備一些JUC并發包、框架。

    把握公司特點很重要,你會發現即使同樣是面試JAVA崗位,不同公司的面試內容差別也會很大。

    甚至不只是公司。到部門層面,差別也會很大。某公司A部門的JAVA崗,和該公司B部門的JAVA崗,就是要求不一樣的。也許一個更注重并發能力,一個更注重排查調優能力等等。這一點你可以從崗位要求里去了解,或者問部門里相關的人員。

    ?

    其次是刷特定的面經。現在網上有很多人分享面經。可能不一定能直接找到你現在面試的部門的面經,但你至少可以找到同一家公司下、業務類型相近的面經。把他們題目拿過來,給自己模擬面試一遍。和前面說筆記突擊復習一樣,模擬你的表達,別只是心里想一想答案就過去了。

    ?

    (3)每日一道算法

    ?

    如果你面試中可能會出現算法題,建議你在突擊階段每天一道LeetCode以保持手感。不過這因人而異,有些人即使很久不做算法,臨陣磨槍也不虛。

    ?

    3

    面試前焦慮該怎么辦

    什么深吸一口氣?站在陽臺看看窗外?我覺得效果不是很大。

    深呼吸在面試前半小時是有效的,它可以緩解你面試前過分緊張的情緒。但它是緩解緊張的,無法緩解焦慮。

    焦慮的源頭在于:害怕意外的發生。我覺得緩解焦慮最有效的方式就是,為自己規劃好一切

    在突擊面試之前,時間尚早,相信你也不會有太多焦慮。當突擊面試階段開始,你就要開始學會為自己規劃。讓一切有條不紊地進行,你會發現你不再會為面試和其結果感到焦慮,因為你知道你自己做到了最好。

    那如何規劃呢?

    不妨給個例子:

    比如我在下周六(2020-04/18)是阿里的一面。而今天是周日(2020-04-12),接下來我怎么安排呢?

    2020-04-12 周日

    復習單線程容器、JUC包,整理出相關的大而廣的面試問題,進行自測。

    2020-04-13 周一

    復習網絡、操作系統

    2020-04-14 周二

    復習JAVA常見面試題、JVM

    2020-04-15 周三

    復習MySQL和Redis

    2020-04-16 周四

    復習Spring、IO、設計模式

    2020-04-17 周五

    網上查閱面經自測,做兩道算法恢復一下手感

    2020-04-18 周六

    盯著自己準備好的各種大而廣的問題反復車輪式復習,直到面試前半小時。

    半小時里再背一遍自我介紹,復習一下簡歷里的項目。

    迎接面試。

    如果這樣規劃以后,依然讓你感到十分焦慮,很簡單:把規劃再細化

    你會發現,當規劃的細致程度達到某種階段以后,你的焦慮會轉化成壓力和動力,不會再讓你手足無措。

    ?

    最后說一個小tip。其實讓你面試前不焦慮還有一個非常簡單的辦法,就是多投遞簡歷,多面試,面多了你就會感到麻木,不會焦慮了。

    面試開始

    1

    自我介紹到底要怎么說


    ?如果是一面/二面,一般是純技術面,這個時候我建議可以遵照這樣一種自我介紹模板:

    • 自報家門

    • 介紹自己的技術方向和技術能力

      • 我主攻的方向是XX,從技術上來說,我對于XX、XX(枚舉一些技術點)比較熟悉(以引導面試官問你熟悉的內容)

    • 介紹項目經歷(什么項目,在里面做什么事情,有什么難點,怎么克服的,有什么收獲)

      • 我在之前XX(讀大學?在XX工作?之類的)的時候,很喜歡并善于研究 / 做過一些有價值的項目,比如blabla。期間遇到過一個問題至今印象深刻,blabla。經過這個項目,我吸收了一些blabla的知識。

      • tips:在介紹項目經歷的階段中,“在里面做什么事情”是最重要的模塊,一定要講清楚,做什么事情決定你在面試官第一印象中的高度。而“有什么難點,怎么克服的”是給你一個埋坑的機會,讓面試官更有可能在這個點上去追問你。

    • 收尾

      • 希望在未來,可以把這些知識(之前項目中提到的知識)運用在工作中。

      • 也希望在本次面試中,可以得到面試官的一些建議和指導。

    ?

    ????如果是三面/四面/HR面,并且你切實覺得可能不再那么純技術了,你的自我介紹可以向軟實力角度偏移,這里拿我的自我介紹給個例子:

    ??? tips:整理你自己的自我介紹的時候,請切記不要太書面語,背起來不舒服不說,真正到自我介紹的時候也會顯得生硬。

    ? ?您好,我是來自XX大學XX專業的XX。

    ? ?我想從技術理論、項目實踐、工作能力上來簡單介紹一下自己。

    ? ?首先是技術理論。我主攻的方向是Java后臺。技術上來說,我對于Java基礎、JVM、并發容器、線程池等等還是比較熟悉的,另外在框架方面用SpringBoot比較多,讀過Spring的源碼。而數據庫層面的話,磁盤數據庫中我對于MySQL尤其是InnoDB引擎比較熟悉,內存數據庫中對于Redis比較熟悉。

    ? ?而在項目實踐方面,我對于理論和實踐的結合一直是比較看重的。從大一入學兩個月我就有帶領大一的學生隊伍參加院里的項目比賽,之后陸陸續續到今天累計也做了不下十幾個項目了。而在這些項目中,在綜合方面我主要擔任的也都是一個負責人的角色,而在技術方面我主要做的則都是Java后臺的部分。我開過會議,出過文檔,寫過代碼,也參加過有好幾百人作為聽眾的大型答辯,應該說不管在硬實力還是軟實力上,都得到了很不錯的鍛煉。

    ? ?最后是我的工作能力。我現今任我們專業XX班的班長,已經歷時一年半,對于組織工作應該說是非常熟悉了。另外,我也有參與學校里一個較大型的信息技術工作室,出任其中的技術部負責人,偶爾會帶領學弟學妹們進行一些項目實踐,以及參與引導部門及工作室的規劃安排。事務很多很雜,也培養了我強大的規劃力和執行力,相信這也能夠使我在未來的工作中得心應手。

    ???

    面試中



    1

    技術面試的時候應該注意什么

    要從表達內容兩方面來講。

    (1)表達

    ?

    表達切記一定要口齒清楚邏輯清晰

    口齒清楚

    口齒清楚這一點相信大家都能領會。但是也不排除有些小朋友一緊張口齒就不利索,這個一定要注意。

    更有甚者有時候遇到不太確定的問題,想要以口齒不清來蒙混過關,這種更不可取,基本是搬石砸腳。

    邏輯清晰

    如何保證這一點呢?有時候當遇到一個措手不及的問題,很難保證我們的邏輯又快又清晰。

    所以最簡單的方式,就是用速度的犧牲來換取邏輯的明了。甚至有時候你可以短暫地沉默一會兒,好好整理一下思路,千萬別張口就來,導致說得亂七八糟不成體系。

    ?

    (2)內容

    對于一些切入點非常小的問題,直接回答就可以。比如說:

    Q:對象的鎖信息是存在哪里的?

    A:在對象頭MarkWord里

    ?

    但是對于一些切入點比較大的問題。例如:

    Q:講講垃圾回收?

    Q:集合里ArrayList和LinkedList有什么區別?

    回答的內容切記不可過于簡短,但也不能胡亂堆砌。最好的方式是水平擴展或者垂直擴展

    不妨就拿上面的一個問題來舉個例子。比如說講講垃圾回收。

    水平擴展的話,應該怎么講呢?

    A:

    有關垃圾回收,我們首先要考慮兩個問題。一是如何判斷對象可回收,二是用什么樣的方式來回收。

    首先對于前者,有引用計數法和可達性分析兩種方法,它們分別……(講講它們的含義,優缺點)

    而對于后者,市面上主要有標記-清除,標記-整理,復制三種回收算法,它們分別……(講講含義,優缺點)

    結合這些算法,市面上就出現了很多垃圾收集器,例如Serial,ParNew,CMS,G1……(順便講講它們的回收邏輯,優缺點)

    面試官:(暗自點頭)

    水平擴展也就是從一個問題出發,把與它相關的整棵知識樹或者整顆知識樹的一部分(如果樹太大的話)講出來,體現你的知識是有架構有體系的。

    ?

    垂直擴展的話,又應該怎么講呢?

    A:

    垃圾回收的話,自JDK1.8后,市面上就非常流行G1垃圾回收器了。它是不分新生代和老年代的,基本原理是……(講講含義,優點)

    但是垃圾的頻繁回收勢必會導致用戶體驗的下降,雖然G1已經很優秀了,作為開發者我們還是需要關注JVM的優化(話鋒一轉,開始走向深度)

    (講一些具體的優化策略)

    面試官:(暗自點頭)

    垂直擴展主要是需要自行找到一個切入點。或者面試官已經把切入點給到你了,那么接下來你要引入自己的思考,按照一個沒有漏洞的邏輯走向深度,體現你是勤于思考并且善于發現并解決問題的人。

    ?



    2

    面試尬場怎么辦

    首先如果是因為你答不上來而尬場,你就乖乖說你不會,千萬別強撐。

    如果不是這個情況,是面試官一時沉默的話:

    有時候面試官可能很忙,他可能都沒來得及看完你的簡歷就來給你面試。換言之,他并沒有做太多的準備。所以臨時尬場也是非常正常的。

    所以現在你要做的就是:讓面試官不要尬場。

    打個比方:

    Q:你說你熟悉線程池,那你說說看線程池都有些什么重要的參數?

    A:比如有核心線程數、最大線程數、允許存活時間、阻塞隊列等等(順便簡單說一下這幾個參數都是什么含義)

    Q:嗯不錯……(開始沉默)

    一般面試官的沉默可能是你回答完這一個問題之后,他一時間想不到問什么。這個時候你可以繼續沿著這個問題擴展下去:

    A:關于線程池還有一些需要注意的地方。比如當一個任務添加進來的時候……(講一下任務添加到線程池的流程)

    A:考慮到這樣一個流程,所以我們在控制最大線程數、阻塞隊列的時候是需要注意的。如果最大線程數設置過大,或者阻塞隊列設置上限過長,可能導致OOM(又聯系回前面參數的問題)

    是不是聯系回去不要緊,但是只要你依然在講這個問題相關的知識樹里的東西,就可以有效地緩解尬場,還會讓面試官覺得:

    面試官:(嗯這小伙基礎還挺扎實)

    ? ?


    3

    如何學會埋坑

    埋坑是非常重要的一個技巧。

    什么叫埋坑?就是在回答前一個問題的時候,適當地對面試官進行引導,讓他能夠問你想讓他的問題。

    面試前是最容易埋坑的。一是簡歷里的項目經歷,專業技能;二是自我介紹階段,講一些自己擅長的技術點等等,引導面試官去問你。

    而在面試的過程中,應該如何埋坑呢?

    打個簡單的比方。

    比如現在面試官問你:”ArrayList和LinkedList有什么區別?“

    你先中規中矩地回答。回答完之后,我們可以根據我們的擅長點做一些不同的策略:

    如果你比較擅長并發容器,你可以說:

    ArrayList和LinkedList都屬于單線程框架,是并發不安全的。如果要并發安全的話,需要使用CopyOnWriteArrayList或者ConcurrentLinkedQueue

    ?

    如果你比較擅長線程池,你可以說:

    ArrayList和LinkedList分別是對數組和鏈表的封裝。JAVA中比較重要的對于數組、鏈表的封裝集合類還有線程池中的阻塞隊列,例如ArrayBlockingQeque和LinkedBlockingQueue

    ?

    當然了,埋坑只能啟到一定的導向作用,最終決定權還是在面試官手上。不要太刻意,不然會適得其反。

    面試結束



    1

    面試官:“你有什么想問我的嗎”該說什么?

    這個問題可以給幾個例子:

  • 您對我有什么建議嗎?

  • 您平時工作中主要做些什么呢?

  • 如果我有幸能夠被錄取的話,主要會做一些什么樣的工作呢?

  • 2

    我怎樣才能知道我是否通過了

    我個人不建議在面試完后直接問面試官:”我通過了嗎?“

    而且面試本來就是雙向選擇,你是在眾多offer中挑一個最喜歡的,人家也是在眾多面試者中挑最好的那一批。

    所以如果你想要知道自己是否通過了,最好的方式是從面試官對你的態度中窺探。

    比如你最后問:”您平時工作中主要都做些什么呢?“

    他給你回答得非常詳細,而且還會主動跟你聊一點別的,比如告訴你進來以后會做什么之類的,那說明他還是很認可你的。

    如果他只是簡單說一下,有點敷衍的樣子,不排除只是他工作忙的可能,但你最好也可以考慮一下,找找其他出路了。

    另外,等面試結束后,如果你有推薦你去面試的推薦人或者HR的聯系方式,你也可以直接問他們面試的結果。

    ?

    我兩年半的技術人生

    ????最后附上我兩年半的技術生涯,中間不免有些彎路,但總體還是令我滿意的。

    希望給有需要的人以參考。

    ??

    1

    2017(入學

    7-8月

    參加社會上的Java語言基礎培訓課程,學習Java,基本上到可以簡單使用Swing的程度,對于反射泛型等中高級知識一竅不通;

    10月

    拉了五個也是大一的小伙伴參加學院的創新創業比賽,基于Java Swing寫了一個井字策略游戲,拿到學院的優勝獎;

    11月

    機緣巧合認識了一位研二的研究生,經他推薦進入一位教授的實驗室做商業網站;

    12月

    在研究生的帶領下認識SpringBoot和Mybatis,原理一竅不通,但是可以寫一點CRUD;

    總結
    • Java語言最基礎內容的使用比較熟練了

    • 有了可憐到幾乎可以忽略不計的web后臺開發經驗

    • 當時學院算法學習氛圍比較好,到年末我大概相當于共計刷了一百道LeetCode中等題

    2

    2018(大一~大二)

    1-3月寒假

    進入培訓機構學習web前端,了解了html-css-js,學會ajax;

    4-6月

    劃水度過,我不知道我在干嘛,就好好上課;

    7-8月暑假

    做一些基于SpingBoot的簡單實踐,初步學習Unity游戲引擎;

    9-10月

    劃水;

    11-12月

    學校各種創新比賽啟動,我都參加了,最后同時啟動了大約6-7個校園小項目;

    總結
    • 這是我多角度嘗試的一年(比如web前端、游戲開發),因為我還并沒有決定以后從事什么方向。大約在暑假后(9月),我才覺得自己未來應該會做Java后臺;

    • 在后臺技術上提高不多,只是熟練了那么一丟丟;

    • 項目啟動很多,那個時候覺得項目很重要很能鍛煉人,后來覺得其實做那么多差不多級別的項目并不是很有意義。

    4

    2019(大二~大三)

    1-2月寒假

    我啟動了太多項目,CRUD崽忙不過來了!!

    3-6月

    各種項目比賽遍地開花的幾個月:

    • 3月:兩個創新培育項目,一個國創一個市創評級

    • 4月:上海市計算機應用能力大賽二等獎

    • 6月:校大夏杯創業大賽銅獎

    但只有我自己心里清楚,獎是拿得很不錯,但是技術上其實都是一樣的東西,而且非常簡單非常基礎。全是傳統的小型單體web項目,業務驅動。

    還是3-6月

    比我大兩級的拿到螞蟻金服正式offer的學長來講了Java面經,我終于意識到自己太菜了。但是跟著大三春招的洪流,我也沒忍住投了幾個簡歷試試:

    • 攜程:一站式面試,我不知道一站式是什么意思,去面了一面自我感覺良好,就直接走了!走了!沒在那等著繼續面下去,就沒了。

    • 字節跳動 · 北京:視頻面試,在第二面掛了,評價是”相對大二學生來說比較優秀,但是暫時還沒達到實習崗位的要求“

    7月

    買了一堆螞蟻學長推薦的書籍,例如《高性能MySQL》、《深入理解Java虛擬機》、《Java并發編程實踐》、《圖解HTTP》等,開始有計劃地閱讀起來;

    8月

    去安徽會場參加全國大學生計算機設計大賽的答辯,榮獲一等獎。還是那句話,真沒啥技術含量。但是提升了我答辯的能力和吹噓的水平;

    9-12月

    繼續讀書。

    總結
    • 這是我從實踐逐步轉戰理論學習的一年。之前的我太過于知其然而不知其所以然了,寫項目都是不考慮原理的。自螞蟻學長分享了Java面經之后,為我指出了方向。

    • 這一年我仔細閱讀了《高性能MySQL》前七章,《深入理解Java虛擬機》近整本,也買了《MySQL技術內幕 InnoDB存儲引擎》看完了一整本,做了很多筆記。

    • 我還買了很多其他雜七雜八的書,例如《輕量級微服務架構》、《圖解TCP/IP》、《大型網站架構》等等,有些是幾乎讀不懂,有些是沒怎么讀,大抵算是這一年走的彎路。

    5

    2020(大三)

    1月

    瘋狂整理、復習,中旬參加了攜程的日常實習面試,通過了,年前進入攜程實習;

    2月

    過年幾天還帶了兩本書回老家,但是真的學不進去。回來后因為疫情遠程辦公,同時不斷進行復習與整理,準備春招;

    3月

    開始進入春招面試階段。只投了字節和阿里,都通過了;

    4月

    一直到今天4.11,一直是靜待offer。沒有什么事情,就不疾不徐地學一學SpringCloudAlibaba,平時就談談戀愛,打打游戲,看看電影。

    ????我兩年半的技術生涯,主要走的是 實踐學習 → 理論學習 → 實踐理論相結合 這樣一條路線。

    ????一開始的實踐學習就像是培訓班生活,只不過是自我培訓;

    ????然后到理論學習層面,有幸聽到螞蟻學長的面經講座,加上有之前的實踐基礎,讓我的理論學習有方向感且不會太虛浮;

    ????最后是實踐理論相結合層面,主要就是把我一些新學習的沒實踐過的理論付諸實踐。就比如學習了JVM調優和問題排查,就自己寫一個死鎖程序或者OOM程序然后用排查工具來排查一下問題。

    ????最后祝認真閱讀到這里的你,一定會拿到心儀中的offer!

    END

    史上最全的延遲任務實現方式匯總!附代碼(強烈推薦)

    因為我說:volatile 是輕量級的 synchronized,面試官讓我回去等通知!

    有人說:輕量級鎖一定比重量級鎖快!我忍不住笑了

    關注公眾號發送”進群“,老王拉你進讀者群。

    ? ??

    總結

    以上是生活随笔為你收集整理的面经分享:历时半个月,终于拿到了蚂蚁金服的offer!的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。