面試經(jīng)歷 | 快手Java開發(fā) 2021.09

面試崗位

Java開發(fā)工程師(校招)

一面(2021.0914)

快手不知道為啥沒有統(tǒng)一筆試,直接發(fā)起的面試。問的八股文很全面,算法題出的也讓我感覺很好。

基礎題

  1. Java基礎數(shù)據(jù)類型有哪些绞愚,占多少位?
    答:共有8種颖医,分別是:

    1. boolean 布爾:1位
    2. byte 字節(jié):8位
    3. short 短整數(shù):16位位衩,2字節(jié)
    4. char 字符:16位,2字節(jié)
    5. int 整型:32位熔萧,4字節(jié)
    6. float 單精度:32位糖驴,4字節(jié)
    7. long 長整數(shù):64位,8字節(jié)
    8. double 雙精度:64位佛致,8字節(jié)
  2. double運算時需要注意什么贮缕?為什么
    答:精度丟失,比方說當比較時俺榆,可以用差的絕對值小于一個極小值 \epsilon 來說明兩個變量相等感昼。原因是做計算時十進制會先轉(zhuǎn)換成二進制,但是有的十進制轉(zhuǎn)換成二進制是無限小數(shù)罐脊,必然會有精度舍棄巧颈。

  3. 你知道 float 是怎么存儲小數(shù)的嗎蝎毡?
    答:以 6.5432 為例串前,整數(shù)部分用模二取余法:
    6 / 2 = 3 …… 0
    3 / 2 = 1 …… 1
    1 / 2 = 0 …… 1
    得到 6 的二進制表示 110度硝。小數(shù)部分用乘二取整法:
    0.5432 * 2 = 1 + 0.0864
    0.0864 * 2 = 0 + 0.1728
    0.1728 * 2 = 0 + 0.3456
    0.3456 * 2 = 0 + 0.6912
    0.6912 * 2 = 1 + 0.3824
    0.3824 * 2 = 0 + 0.7648
    0.7648 * 2 = 1 + 0.5296
    可以得到 0.5432_{(10)} ≈ 0.1000101_{(2)}
    組合得到二進制為 110.1000101_{(2)}
    左移兩位,使小數(shù)點前只有一位 1上炎,即1.101000101_{(2)} * 2^2恃逻,則存儲時指數(shù)為 2+127=129
    則最終 6.5432 存儲結(jié)果為 0(符號位) 10000001(指數(shù)) 1010001 01000000 00000000

  4. volatile關鍵字作用
    參考資料《【Java線程】volatile的適用場景》
    答:volatile具有可見性和有序性,但是沒有原子性藕施。他可以使得它修飾的變量寇损,每次修改時先同步到主存,每次使用前都從主存直接獲取铅碍。這個操作保證了它的可見性润绵。同時他的引入將避免指令重排的現(xiàn)象,保證了有序性胞谈。
    適用場景:

    • 用來標記某一個一次性狀態(tài)已發(fā)生
    • 單例模式取消指令重排
    • 獨立觀察
    • volatile bean
    • 開銷較低的讀-寫鎖策略
  5. 泛型了解嗎,他有什么用處?
    答:在集合類實現(xiàn)的時候烦绳,如果想實現(xiàn)一個通用的可以處理不同類型的類卿捎,需要使用Object作為屬性和方法參數(shù)。然后具體操作時再去做強制轉(zhuǎn)換径密,一來是使用時不方便午阵,二來是只有運行時才能知道傳入集合的值類型是否正確。因此在JDK 1.5之后享扔,引入了泛型的概念底桂。
    泛型的本質(zhì)是參數(shù)化類型,把要操作的數(shù)據(jù)類型當做一個參數(shù)傳入惧眠,這樣在編譯時就可以對存放的內(nèi)容的類型做安全判斷籽懦。

  6. private關鍵字作用
    答:加了之后的變量和方法,只有在類內(nèi)部才能使用氛魁,外部不能直接調(diào)用暮顺,子類也不會繼承。想調(diào)用的話可以配套寫一對get秀存,set捶码。

  7. 反射了解嗎?他是在編譯階段還是運行階段或链。
    答:運行階段惫恼,反射就是在運行時才知道要操作的類是什么,并且可以在運行時獲取類的完整構造澳盐,并調(diào)用對應的方法尤筐。
    比如正常的調(diào)用應該是先 new 一個對象,然后使用對象的一些屬性和方法做一些操作洞就。但是反射中可能是先獲得類盆繁,然后通過 getConstructor 方法和 newInstance 方法來創(chuàng)建一個對象以供使用。

  8. 反射可以獲得 private 屬性嗎旬蟋?他們倆是不是沖突的油昂。
    答:確實可以用 getDeclaredField 獲得包含私有變量在內(nèi)的所有成員變量。
    private 最主要的目的實際上是為了實現(xiàn)封裝性倾贰,為類內(nèi)的 public 方法提供一些支持冕碟,同時不希望被外部直接調(diào)用,或是繼承匆浙。
    反射如果單獨的使用某個 private 方法或?qū)傩园菜拢蟾怕适菦]有什么作用的,因為本身 private 變量可能就已經(jīng)配套有 getset首尼;而單獨調(diào)用 private 方法可能導致程序異常挑庶;同時原本繼承該類的子類依然不能繼承得到 private 成員變量言秸。因此我們可以認為反射對我們希望實現(xiàn)的封裝性(及一個父類的一些內(nèi)部使用方法不影響外部環(huán)境),基本沒有影響迎捺。

  9. 線程池了解嗎举畸?
    答:由于每次創(chuàng)建、銷毀凳枝、或是管理線程都有一定的資源消耗抄沮,因此使用線程池,對線程做統(tǒng)一管理岖瑰,當程序需要線程時叛买,只需要向線程池申請,如果某個線程異常掛掉蹋订,那線程池還可以及時補充率挣。

  10. ThreadPoolExecutor 知道哪些?
    答:SingleThreadExecutor :返回一個只有一個線程的線程池辅辩,多余的任務會被放到消息隊列里慢慢執(zhí)行难礼。
    FixedThreadPoolExecutor :返回一個固定線程數(shù)的線程池,任務來時玫锋,如果有空閑線程就立刻執(zhí)行蛾茉,否則同樣存放在消息隊列中;如果線程掛掉撩鹿,及時重新創(chuàng)建線程谦炬。
    CachedThreadPoolExecutor:可以動態(tài)調(diào)整線程池線程數(shù),只要 JVM 能支持节沦,可以無限開線程键思,同時如果沒有任務需要也會自動回收。
    ScheduledThreadPoolExecutor:周期性執(zhí)行任務

  11. ThreadPoolExecutor 有哪些參數(shù)甫贯?
    答:(當時并沒有答出來)
    corePoolSize:核心線程數(shù)吼鳞,及最小同時運行線程數(shù)量。
    workQueue:當新任務來時先判斷線程數(shù)是否到核心線程數(shù)叫搁,若達到赔桌,則放進任務隊列中。
    maximumPoolSize:當隊列達到容量上限時渴逻,將同時運行線程數(shù)變?yōu)樽畲缶€程數(shù)疾党。
    keepAliveTime:若當前實際任務數(shù)不超過核心線程數(shù),但運行中的線程數(shù)超過了時惨奕,等待keepAliveTime 時間后雪位,才進行銷毀。
    unitkeepAliveTime參數(shù)的實踐單位
    threadFactory:創(chuàng)建新線程的工廠類
    handler:飽和策略:線程容量和隊列容量同時飽和時執(zhí)行策略梨撞。包括①拒絕新任務 ②增加隊列容量 ③ 直接丟棄 ④ 丟棄最早任務雹洗。默認使用第一種香罐。

  12. GC 了解嗎,怎么判斷某個對象應該被回收队伟?
    答:兩種方法:引用計數(shù)法和可達性分析穴吹。
    引用計數(shù):對于某個對象幽勒,每有一個地方引用他嗜侮,計數(shù)器加 1,引用時效啥容,計數(shù)器減 1锈颗。當計數(shù)值為 0 時說明對象應該被回收。
    可達性分析:從 GC root 出發(fā)咪惠,所有不可達的對象會被標記击吱。 GC root 有以下幾種: ①虛擬機棧:棧幀中的本地變量表引用的對象 ②native方法引用的對象 ③方法去中的靜態(tài)變量和常量引用的對象

  13. G1 怎么做的標記和清除,過程是什么遥昧?
    答:G1 會將內(nèi)存劃分成若干個小塊覆醇,且標記為老年代、Eden炭臭、Survivor永脓,然后執(zhí)行Young GC,如果對象存活就會被轉(zhuǎn)移到Survivor 上鞋仍,如果存活時間多于閾值常摧,就會晉升老年代。而 G1 的老年代垃圾回收威创,就或用到標記清理過程:

    • 初始標記:Stop the World落午,標記可能有引用指向老年代對象的 Survivor 區(qū),此操作與一次 Young GC 同時肚豺。
    • 掃描根區(qū)域:掃描 Survivor 區(qū)中引用到老年代的引用溃斋。
    • 并發(fā)標記:在堆上找活著的對象,并標記
    • 再次標記:Stop the World吸申,完成堆內(nèi)存中存活對象標記梗劫,使用 SATB 算法
    • 清理:Stop the World,統(tǒng)計+擦寫+重置空 heap 區(qū)
    • 拷貝:Stop the World呛谜,轉(zhuǎn)移或拷貝存活對象到未使用的 heap 區(qū)
  14. 三次握手四次揮手
    答:握手時:甲說嘿我要和你聊天了在跳,乙回復我知道了,甲回復乙我知道你知道了隐岛。此時雙方確認對方可以接收消息猫妙,因此開始建立連接發(fā)送消息。
    揮手時:甲說我說完了聚凹,乙說好的我知道了割坠,但此時乙可能還有消息沒有發(fā)送完畢齐帚。等了一會之后乙也發(fā)送完畢了,通知甲自己要中斷連接了彼哼,甲收到之后回信知道了对妄,并中斷連接,乙收到后也中斷連接敢朱。
    在兩個過程中剪菱,都是通過比方說一個發(fā)送信號 x,另一個發(fā)送 x+1 這樣的形式拴签,驗證對方確實收到自己發(fā)出的信號孝常。

  15. TCP是什么?
    答:TCP是面向連接的蚓哩,全雙工的构灸,可以提供可靠地連接服務。連接時使用三次握手岸梨,斷連時使用四次揮手喜颁。TCP可以通過確認、重傳曹阔、窗口半开、擁塞控制等機制保證數(shù)據(jù)正確性,但效率較低次兆,且開銷比UDP要大稿茉。

  16. MYSQL 索引的數(shù)據(jù)結(jié)構什么樣?
    答:B+ 樹芥炭,B 樹是在中間節(jié)點及葉子節(jié)點都可以存放信息的一棵樹漓库,而 B+ 樹則是所有信息均被存放在葉子節(jié)點,且在所有葉子節(jié)點間园蝠,從左至右存在一條鏈表渺蒿,這樣的好處是比方說我們想查一段區(qū)間中的索引值,那我們只需要找到兩端彪薛,然后通過那條鏈表就可以很快的獲取到我們想要的所有數(shù)據(jù)信息茂装。而且B+樹查詢更穩(wěn)定。

算法題

很喜歡這個算法題善延,不難但是考察有沒有刷過題非常好少态。

  1. 給一個鏈表 1,2,3,4,5,...,n,把他變成1,n,2,n-1,...這種形式的鏈表返回
    答:先快慢指針找到中間點易遣,然后把右半段鏈表逆序彼妻,然后雙指針兩頭向中間靠近。
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市侨歉,隨后出現(xiàn)的幾起案子屋摇,更是在濱河造成了極大的恐慌,老刑警劉巖幽邓,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炮温,死亡現(xiàn)場離奇詭異,居然都是意外死亡牵舵,警方通過查閱死者的電腦和手機柒啤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棋枕,“玉大人白修,你說我怎么就攤上這事妒峦≈匕撸” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵肯骇,是天一觀的道長窥浪。 經(jīng)常有香客問我,道長笛丙,這世上最難降的妖魔是什么漾脂? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮胚鸯,結(jié)果婚禮上骨稿,老公的妹妹穿的比我還像新娘。我一直安慰自己姜钳,他們只是感情好坦冠,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哥桥,像睡著了一般辙浑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拟糕,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天判呕,我揣著相機與錄音,去河邊找鬼送滞。 笑死侠草,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的犁嗅。 我是一名探鬼主播边涕,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼愧哟!你這毒婦竟也來了奥吩?” 一聲冷哼從身側(cè)響起哼蛆,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霞赫,沒想到半個月后腮介,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡端衰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年叠洗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旅东。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡灭抑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抵代,到底是詐尸還是另有隱情腾节,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布荤牍,位于F島的核電站案腺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏康吵。R本人自食惡果不足惜劈榨,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晦嵌。 院中可真熱鬧同辣,春花似錦、人聲如沸惭载。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棕兼。三九已至陡舅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伴挚,已是汗流浹背靶衍。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茎芋,地道東北人颅眶。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像田弥,于是被迫代替她去往敵國和親涛酗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容