摘要:我自己總結的學習的系統(tǒng)知識點以及面試問題,已經(jīng)開源,目前已經(jīng)。面試官那你都了解里面的哪些東西呢我哈哈哈這可是我的強項,從,說到,,又說到線程池,分別說了底層實現(xiàn)和項目中的應用。
我自己總結的Java學習的系統(tǒng)知識點以及面試問題,已經(jīng)開源,目前已經(jīng) 35k+ Star。會一直完善下去,歡迎建議和指導,同時也歡迎Star: https://github.com/Snailclimb...一面 (37 分鐘左右)
一面是上海的小哥打來的,3.12 號中午確認的內(nèi)推,下午就打來約時間了,也是唯一一個約時間的面試官。約的晚上八點。緊張的一比,人生第一次面試就獻給了阿里。
幸運的是一面的小哥特溫柔。好像是個海歸?口語中夾雜著英文。廢話不多說,上干貨:
面試官: 先自我介紹下吧!
我: 巴拉巴拉...。
關于自我介紹:從 HR 面、技術面到高管面/部門主管面,面試官一般會讓你先自我介紹一下,所以好好準備自己的自我介紹真的非常重要。網(wǎng)上一般建議的是準備好兩份自我介紹:一份對 HR 說的,主要講能突出自己的經(jīng)歷,會的編程技術一語帶過;另一份對技術面試官說的,主要講自己會的技術細節(jié),項目經(jīng)驗,經(jīng)歷那些就一語帶過。
面試官: 我看你簡歷上寫你做了個秒殺系統(tǒng)?我們就從這個項目開始吧,先介紹下你的項目。
關于項目介紹:如果有項目的話,技術面試第一步,面試官一般都是讓你自己介紹一下你的項目。你可以從下面幾個方向來考慮:
對項目整體設計的一個感受(面試官可能會讓你畫系統(tǒng)的架構圖)
在這個項目中你負責了什么、做了什么、擔任了什么角色
從這個項目中你學會了那些東西,使用到了那些技術,學會了那些新技術的使用
另外項目描述中,最好可以體現(xiàn)自己的綜合素質(zhì),比如你是如何協(xié)調(diào)項目組成員協(xié)同開發(fā)的或者在遇到某一個棘手的問題的時候你是如何解決的又或者說你在這個項目用了什么技術實現(xiàn)了什么功能比如:用 redis 做緩存提高訪問速度和并發(fā)量、使用消息隊列削峰和降流等等。
我: 我說了我是如何考慮它的需求(秒殺地址隱藏,記錄訂單,減庫存),一開始簡單的用 synchronized 鎖住方法,出現(xiàn)了問題,后來樂觀鎖改進,又有瓶頸,再上緩存,出現(xiàn)了緩存雪崩,于是緩存預熱,錯開緩存失效時間。最后,發(fā)現(xiàn)先記錄訂單再減庫存會減少行級鎖等待時間。
一面面試官很耐心地聽,并給了我一些指導,問了我樂觀鎖是怎么實現(xiàn)的,我說是基于 sql 語句,在減庫存操作的 where 條件里加剩余庫存數(shù)>0,他說這應該不算是一種樂觀鎖,應該先查庫存,在減庫存的時候判斷當前庫存是否與讀到的庫存一樣(可這樣不是多一次查詢操作嗎?不是很理解,不過我沒有反駁,只是說理解您的意思。事實證明千萬別懟面試官,即使你覺得他說的不對)
面試官: 我緩存雪崩什么情況下會發(fā)生?如何避免?
我: 當多個商品緩存同時失效時會雪崩,導致大量查詢數(shù)據(jù)庫。還有就是秒殺剛開始的時候緩存里沒有數(shù)據(jù)。解決方案:緩存預熱,錯開緩存失效時間
面試官: 問我更新數(shù)據(jù)庫的同時為什么不馬上更新緩存,而是刪除緩存?
我: 因為考慮到更新數(shù)據(jù)庫后更新緩存可能會因為多線程下導致寫入臟數(shù)據(jù)(比如線程 A 先更新數(shù)據(jù)庫成功,接下來要取更新緩存,接著線程 B 更新數(shù)據(jù)庫,但 B 又更新了緩存,接著 B 的時間片用完了,線程 A 更新了緩存)
逼逼了將近 30 分鐘,面試官居然用周杰倫的語氣對我說:
我突然受寵若驚,連忙說謝謝,也正是因為第一次面試得到了面試官的肯定,才讓我信心大增,二三面穩(wěn)定發(fā)揮。
面試官又曰: 我看你還懂數(shù)據(jù)庫是吧,答:略懂略懂。。。那我問個簡單的吧!
我: 因為這個問題太簡單了,所以我忘記它是什么了。
面試官: 你還會啥數(shù)據(jù)庫知識?
我: 我一聽,問的這么隨意的嗎。。。都讓我選題了,我就說我了解索引,慢查詢優(yōu)化,巴拉巴拉
面試官: 等等,你說索引是吧,那你能說下索引的存儲數(shù)據(jù)結構嗎?
我: 我心想這簡單啊,我就說 B+樹,還說了為什么用 B+樹
面試官: 你簡歷上寫的這個 J.U.C 包是什么啊?(他居然不知道 JUC)
我: 就是 java 多線程的那個包啊。。。
面試官: 那你都了解里面的哪些東西呢?
我: 哈哈哈!這可是我的強項,從 ConcurrentHashMap,ConcurrentLinkedQueue 說到 CountDownLatch,CyclicBarrier,又說到線程池,分別說了底層實現(xiàn)和項目中的應用。
面試官: 我覺得差不多了,那我再問個與技術無關的問題哈,雖然這個問題可能不應該我問,就是你是如何考慮你的項目架構的呢?
我: 先用最簡單的方式實現(xiàn)它,再去發(fā)掘系統(tǒng)的問題和瓶頸,于是查資料改進架構。。。
面試官: 好,那我給你介紹下我這邊的情況吧
總結: 一面可能是簡歷面吧,問的比較簡單,我在講項目中說出了我做項目時的學習歷程和思考,贏得了面試官的好感,感覺他應該給我的評價很好。
二面 (33 分鐘左右)然而開心了沒一會,內(nèi)推人問我面的怎么樣啊?看我流程已經(jīng)到大大 boss 那了。我一聽二面不是主管嗎???怎么直接跳了一面。于是瞬間慌了,趕緊(下床)學習準備二面。
隔了一天,3.14 的早上 10:56 分,杭州的大大 boss 給我打來了電話,臥槽我當時在上毛概課,萬惡的毛概課每節(jié)課都點名,我還在最后一排不敢跑出去。于是接起電話來慫慫地說不好意思我在上課,晚上可以面試嗎?大大 boss 看來很忙啊,跟我說晚上沒時間啊,再說吧!
于是又隔了一天,3.16 中午我收到了北京的電話,當時心里小失望,我的大大 boss 呢???接起電話來,就是一番狂轟亂炸。。。
第一步還是先自我介紹,這個就不多說了,提前準備好要說的重點就沒問題!
面試官: 我們還是從你的項目開始吧,說說你的秒殺系統(tǒng)。
我: 一面時的套路。。。我考慮到秒殺地址在開始前不應暴露給用戶。。。
面試官: 等下啊,為什么要這樣呢?暴露給用戶會怎么樣?
我: 用戶提前知道秒殺地址就可以寫腳本來搶購了,這樣不公平
面試官: 那比如說啊,我現(xiàn)在是個黑客,我在秒殺開始時寫好了腳本,運行一萬個線程獲取秒殺地址,這樣是不是也不公平呢?
我: 我考慮到了這方面,于是我自己寫了個 LRU 緩存(劃重點,這么多好用的緩存我為啥不用偏要自己寫?就是為了讓面試官上鉤問我是怎么寫的,這樣我就可以逼逼準備好的內(nèi)容了!),用這個緩存存儲請求的 ip 和用戶名,一個 ip 和用戶名只能同時透過 3 個請求。
面試官: 那我可不可以創(chuàng)建一個 ip 代理池和很多用戶來搶購呢?假設我有很多手機號的賬戶。
我: 這就是在為難我胖虎啊,我說這種情況跟真實用戶操作太像了。。。我沒法區(qū)別,不過我覺得可以通過地理位置信息或者機器學習算法來做吧。。。
面試官: 好的這個問題就到這吧,你接著說
我: 我把生成訂單和減庫存兩條 sql 語句放在一個事務里,都操作成功了則認為秒殺成功。
面試官: 等等,你這個訂單表和商品庫存表是在一個數(shù)據(jù)庫的吧,那如果在不同的數(shù)據(jù)庫中呢?
我: 這面試官好{{BANNED}}啊,我只是個本科生?!?!我覺得應該要用分布式鎖來實現(xiàn)吧。。。
面試官: 有沒有更輕量級的做法?
我: 不知道了。后來查資料發(fā)現(xiàn)可以用消息隊列來實現(xiàn)。使用消息隊列主要能帶來兩個好處:(1) 通過異步處理提高系統(tǒng)性能(削峰、減少響應所需時間);(2) 降低系統(tǒng)耦合性。關于消息隊列的更多內(nèi)容可以查看這篇文章:https://snailclimb.gitee.io/j...
后來發(fā)現(xiàn)消息隊列作用好大,于是現(xiàn)在在學手寫一個消息隊列。
面試官: 好的你接著說項目吧。
我: 我考慮到了緩存雪崩問題,于是。。。
面試官: 等等,你有沒有考慮到一種情況,假如說你的緩存剛剛失效,大量流量就來查緩存,你的數(shù)據(jù)庫會不會炸?
我: 我不知道數(shù)據(jù)庫會不會炸,反正我快炸了。當時說沒考慮這么高的并發(fā)量,后來發(fā)現(xiàn)也是可以用消息隊列來解決,對流量削峰填谷。
面試官: 好項目聊(懟)完了,我們來說說別的,操作系統(tǒng)了解吧,你能說說 NIO 嗎?
我: NIO 是。。。
面試官: 那你知道 NIO 的系統(tǒng)調(diào)用有哪些嗎,具體是怎么實現(xiàn)的?
我: 當時復習 NIO 的時候就知道是咋回事,不知道咋實現(xiàn)。最近在補這方面的知識,可見 NIO 還是很重要的!
面試官: 說說進程切換時操作系統(tǒng)都會發(fā)生什么?
我: 不如殺了我,我最討厭操作系統(tǒng)了。簡單說了下,可能不對,需要答案自行百度。
面試官: 說說線程池?
答: 臥槽這我熟啊,把 Java 并發(fā)編程的藝術里講的都說出來了,說了得有十分鐘,自夸一波,畢竟這本書我看了五遍
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/77604.html
摘要:作者鏈接來源牛客網(wǎng)今天剛剛收到的電話,開心,簡單記錄一下美團的面經(jīng)。當時面試官評價基礎不是很好,其他還行。的三次握手四次揮手。整體感覺美團的面試比較基礎,但是各個方面都有涉及到。 作者:icysnowgx鏈接:https://www.nowcoder.com/disc...來源:牛客網(wǎng) 今天剛剛收到hr的電話,開心,簡單記錄一下美團的面經(jīng)。時間隔的比較久了,簡單回憶下,最后會給出我之前...
摘要:由于線程被無限期地阻塞,因此程序不可能正常終止。因而,紅黑樹是相對是接近平衡的二叉樹。旋轉(zhuǎn)的目的是讓樹保持紅黑樹的特性。三次握手和四次揮手面試常客為了準確無誤地把數(shù)據(jù)送達目標處,協(xié)議采用了三次握手策略。由于作者面試過程中高度緊張,本文中只列出了自己還記得的部分題目。經(jīng)歷了漫長一個月的等待,終于在前幾天通過面試官獲悉已被螞蟻金服錄取,這期間的焦慮、痛苦自不必說,知道被錄取的那一刻,一整年的陰霾...
摘要:面經(jīng)因為我完全沒有面試經(jīng)驗,從來沒有經(jīng)歷過面試,于是想著在去這類大公司面試之前先找成都的小公司練練手,積累點面試經(jīng)驗。于是三月份開始就有成都的小公司開始約我面試。 前序 從我高考成績出來那一刻開始,從我在高考志愿上填上計算機科學與技術這幾個當時在心中堪稱神圣的幾個字開始,我就已經(jīng)把進入中國互聯(lián)網(wǎng)最高殿堂BAT作為我整個大學奮斗的目標,哪怕我就讀的是一所位于內(nèi)陸的雙非一本大學我也認為我能...
一面(23min) 自我介紹 項目中最自豪的部分 也沒什么太自豪的,就是在移動端開發(fā)的時候不存在cookie和session,然后用redis存了一下驗證碼感覺還不錯。 講一講ArrayList和LinkedListArrayList底層實現(xiàn)是數(shù)組,并且每次擴容擴容1.5倍,常用在查詢較多的場景中。而LinkedList底層實現(xiàn)是鏈表常用在增刪比較多的場景 你說你對鎖有了解,說一說你最熟...
摘要:春招前端實習面試記錄從就開始漸漸的進行復習,月末開始面試,到現(xiàn)在四月中旬基本宣告結束。上海愛樂奇一面盒模型除之外的面向?qū)ο笳Z言繼承因為是視頻面試,只記得這么多,只感覺考察的面很廣,前端后端移動端都問了,某方面也有深度。 春招前端實習面試記錄(2019.3 ~ 2019.5) 從2019.1就開始漸漸的進行復習,2月末開始面試,到現(xiàn)在四月中旬基本宣告結束。在3月和4月經(jīng)歷了無數(shù)次失敗,沮...
閱讀 1802·2021-11-24 09:39
閱讀 2290·2021-09-30 09:47
閱讀 4144·2021-09-22 15:57
閱讀 1873·2019-08-29 18:36
閱讀 3577·2019-08-29 12:21
閱讀 590·2019-08-29 12:17
閱讀 1263·2019-08-29 11:25
閱讀 724·2019-08-28 18:26