【毕业求职季】-听说你想去大厂看学姐,带你看看网易java面经
?
前言
畢業(yè)求職季,你準備好了嗎?希望各位小伙伴能夠苦練技術,早日達成自己心儀的offer。
?
下面是博主收集的一些關于面試的比較幫的面試題目,有需要的小伙伴可自行訂閱下載。
Spring系列面試題129道(附答案解析)
Redis,快看看這40道面試題
MyBatis的27道面試題
73道Java面試題合集-多線程與進程
28道ZooKeeper面試題
?
【一面】
1.為什么做這個分布式的項目?說說你對分布式的理解?
1. 如何理解“分布式”?
經(jīng)常聽到”分布式系統(tǒng)“,”分布式計算“,”分布式算法“。分布式的具體含義是什么?狹義的分布是指,指多臺PC在地理位置上分布在不同的地方。
2. 分布式系統(tǒng)
分布式系統(tǒng):多個能獨立運行的計算機(稱為結點)組成。各個結點利用計算機網(wǎng)絡進行信息傳遞,從而實現(xiàn)共同的“目標或者任務”。
分布式程序: 運行在分布式系統(tǒng)上的計算機程序。
分布式計算:利用分布式系統(tǒng)解決來計算問題。在分布式計算里,一個問題被細化成多個任務,每個任務可以被一個或者多個計算機來完成。
區(qū)分分布式計算和并行計算:共同點都是大任務劃分為小任務。不同點: 分布式計算:基于多臺PC,每臺PC完成同一任務中的不同部分。分布式的計算被分解后的小任務互相之間有獨立性,節(jié)點之間的結果幾乎不互相影響,實時性要求不高。并行計算:基于同一個臺PC,利用CPU的多核共同完成一個任務。
1)分布式操作系統(tǒng)
分布式操作系統(tǒng):負責管理分布式處理系統(tǒng)資源和控制分布式程序運行。它和集中式操作系統(tǒng)的區(qū)別在于資源管理、進程通信和系統(tǒng)結構等方面。
2)分布式文件系統(tǒng)
分布式文件系統(tǒng)具有執(zhí)行遠程文件存取的能力,并以透明方式對分布在網(wǎng)絡上的文件進行管理和存取。
3)分布式程序設計和編譯解釋系統(tǒng)
分布式程序設計語言用于編寫運行于分布式計算機系統(tǒng)上的分布式程序。一個分布式程序由若干個可以獨立執(zhí)行的程序模塊組成,它們分布于一個分布式處理系統(tǒng)的多臺計算機上被同時執(zhí)行。它與集中式的程序設計語言相比有三個特點:分布性、通信性和穩(wěn)健性。
分層應用程序可以按層數(shù)進行劃分,信息可以從數(shù)據(jù)層(通常存儲在數(shù)據(jù)庫)傳送到表現(xiàn)層(顯示在客戶端上)。通常每層相對于其他層來說都運行在不同的系統(tǒng)中,或者在同一系統(tǒng)中的不同進程空間里。分層好處:減小整個應用程序的復雜性;使應用程序能夠更好的擴展,跟得上企業(yè)發(fā)展的需要。
兩層應用程序: 典型的結構,一個客戶端的用戶PC機(前端);一個包含數(shù)據(jù)庫的網(wǎng)絡服務器(后端)。邏輯上根據(jù)兩者的物理位置劃分。通常客戶端包含大部分業(yè)務邏輯,隨著數(shù)據(jù)庫及存儲過程的發(fā)展,SQL語言允許業(yè)務邏輯在數(shù)據(jù)庫服務器中存儲并執(zhí)行。
三層應用程序:目前最常用的是三層應用程序結構,包含一個用戶服務層(表現(xiàn)層),一個業(yè)務服務層和一個數(shù)據(jù)服務層。業(yè)務邏輯層從用戶界面和數(shù)據(jù)源中分離出來。 由于兩層應用程序即客戶端/服務器端結構的功能限制,分布式應用程序通常分為三層或者更多層。每層的組件都執(zhí)行一個特定類型的處理。
3)分布式數(shù)據(jù)庫
之我見:分布式數(shù)據(jù)庫,由分布在不同地方(地理位置上的分布)的多個數(shù)據(jù)庫(稱為站點)連接(基于計算機網(wǎng)絡來連接)而成。利用分布式DBMS對各個站點統(tǒng)一管理,各個站點邏輯上統(tǒng)一起來。基于數(shù)據(jù)分布的透明性,仿佛在管理單個站點上的數(shù)據(jù)。其優(yōu)點在于:容錯,提高訪問速度。
wiki官方解釋: 分布式數(shù)據(jù)庫是用計算機網(wǎng)絡將物理上分散的多個數(shù)據(jù)庫單元連接起來組成的一個邏輯上統(tǒng)一的數(shù)據(jù)庫。每個被連接起來的數(shù)據(jù)庫單元稱為站點或結點。分布式數(shù)據(jù)庫有一個統(tǒng)一的數(shù)據(jù)庫管理系統(tǒng)來進行管理,稱為分布式數(shù)據(jù)庫管理系統(tǒng)。
分布式數(shù)據(jù)庫的基本特點包括:物理分布性、邏輯整體性和站點自治性。從這三個基本特點還可以導出的其它特點有:數(shù)據(jù)分布透明性、集中與自治相結合的控制機制、適當?shù)臄?shù)據(jù)冗余度和事務管理的分布性。分布式數(shù)據(jù)庫按照各站點中數(shù)據(jù)庫管理系統(tǒng)的數(shù)據(jù)模型的異同分為異構型分布式數(shù)據(jù)庫和同構型分布式數(shù)據(jù)庫,按照控制系統(tǒng)的類型分為全局控制集中性、全局控制分散型和全局控制可變型
2.Redis怎么用的?
3.緩存中存什么數(shù)據(jù)?
4.如何保證數(shù)據(jù)庫和緩存的一致性?
?
我們日常開發(fā)中,對于緩存用的最多的場景就像下圖一樣,可能僅僅是對數(shù)據(jù)進行緩存,減輕數(shù)據(jù)庫壓力,縮短接口響應時間。
這種方案在不需要考慮高并發(fā)得去寫緩存,高并發(fā)得讀寫緩存時,是不會有問題,但是如果是在高并發(fā)場景下,要保證緩存和數(shù)據(jù)庫的一致性,至少需要解決以下問題:
高并發(fā)寫時的數(shù)據(jù)不一致問題
高并發(fā)讀寫時,請求執(zhí)行各步驟的順序是不可控的。假設此時有一個請求A,B都在在執(zhí)行寫流程,請求A是需要將某個數(shù)據(jù)改成1,請求B是需要將某個數(shù)據(jù)改為2,執(zhí)行操作如下時就會導致數(shù)據(jù)不一致的問題:
1.請求A執(zhí)行操作1.1刪除緩存。
2.請求A執(zhí)行操作1.2更新數(shù)據(jù)庫,將值改為1。
3.請求B執(zhí)行操作1.1刪除緩存。
4.請求B執(zhí)行操作1.2更新數(shù)據(jù)庫,將值改為2
5.假設說請求B所在服務器網(wǎng)絡延遲比較低,請求B先更新緩存,此時緩存中的key對應的value是2。
6.請求A更新緩存,將緩存中B更新的數(shù)據(jù)進行覆蓋,將key對應的值改為1。
此時數(shù)據(jù)庫中是B修改后的數(shù)據(jù),值為2,而緩存中的數(shù)據(jù)是1,這樣在緩存過期錢,用戶讀到的都是臟數(shù)據(jù),與數(shù)據(jù)庫不一致。
高并發(fā)讀寫時的數(shù)據(jù)不一致的問題
高并發(fā)讀寫時,請求執(zhí)行各步驟的順序是不可控的。假設此時有一個請求A在執(zhí)行寫流程,將原值由1改成2,請求B執(zhí)行讀流程,執(zhí)行操作如下時就會導致數(shù)據(jù)不一致的問題:
1.寫請求A執(zhí)行1.1操作刪除緩存key,value是原值1。
2.讀請求B執(zhí)行2.1操作發(fā)現(xiàn)緩存中沒有數(shù)據(jù),就去執(zhí)行2.2操作讀數(shù)據(jù)庫,讀到舊數(shù)據(jù),值為1。
3.寫請求A執(zhí)行1.2操作更新數(shù)據(jù)庫,將數(shù)據(jù)由1改為2。
4.寫請求A執(zhí)行1.3操作更新緩存,此時緩存中的數(shù)據(jù)key對應的value是2。
5.讀請求B執(zhí)行2.3操作更新緩存,將之前讀到的舊數(shù)據(jù)1設置到緩存中,此時緩存中的數(shù)據(jù)key對應的value是1。
所以如果說讀請求B所在服務器網(wǎng)絡延遲比較高,去執(zhí)行2.3操作比寫請求A晚,就會導致寫請求A更新完緩存后,讀請求B使用之前讀到的舊數(shù)據(jù)去更新緩存,此時緩存中數(shù)據(jù)就與數(shù)據(jù)庫中的不一致。
解決方案
保證數(shù)據(jù)一致性,網(wǎng)上有很多種方案,例如:
1.先刪除緩存,再更新數(shù)據(jù)庫。
2.先更新數(shù)據(jù)庫,再刪除緩存。
3.先刪除緩存,再更新數(shù)據(jù)庫,然后異步延遲一段時間再去刪一次緩存。
5.什么時候需要用到這些nosql或者ES?
6.說下什么是反向代理?
?
反向代理是指服務器根據(jù)客戶端的請求,從其關系的一組或多組后端服務器(如Web服務器)上獲取資源,然后再將這些資源返回給客戶端,客戶端只會得知反向代理的IP地址,而不知道在代理服務器后面的服務器簇的存在。
兩者區(qū)別:
1、用途差異
正向代理的典型用途是為在防火墻內的局域網(wǎng)客戶端提供訪問Internet的途徑。正向代理還可以使用緩沖特性減少網(wǎng)絡使用率;
反向代理的典型用途是將防火墻后面的服務器提供給Internet用戶訪問。反向代理還可以為后端的多臺服務器提供負載平衡,或為后端較慢的服務器提供緩沖服務。
2、安全差異
正向代理允許客戶端通過它訪問任意網(wǎng)站并且隱藏客戶端自身,因此必須采取安全措施以確保僅為經(jīng)過授權的客戶端提供服務;反向代理對外都是透明的,訪問者并不知道自己訪問的是一個代理。
7.Linux中怎么查看文件的末尾幾行?(tail命令)
8.如果linux負載過高,如何查看linux運行情況?
9.如果linux負載過高,怎么定位哪個進程的哪一行代碼出問題了?
10.你的項目在linux中是如何部署的?
11.mysql一條sql非常慢,如何進行分析?(explain)
12.mysql什么時候分庫分表?
13.ArrayList和LinkedList的區(qū)別?
14.CAS說下?
15.泛型說下?泛型的好處?
16.exception和error的區(qū)別?
?
1.異常:這種情況下的異常,可以通過完善任務重試機制,當執(zhí)行異常時,保存當前任務信息加入重試隊列。重試的策略根據(jù)業(yè)務需要決定,當達到重試上限依然無法成功,記錄任務執(zhí)行失敗,同時發(fā)出告警。
2.日志:類比消息中間件,處在不同線程之間的同一任務,簡單高效一點的做法可能是用traceId/requestId串聯(lián)。有些日志系統(tǒng)本身支持MDC/NDC功能,可以串聯(lián)相關聯(lián)的日志。
?
- Throwable:它是異常處理機制的基本組成類型,在 Java 中只有 Throwable 類型的實例才可以被拋出(throw)或者捕獲(catch)。
- Exception 和 Error 都是繼承了 Throwable 類。
Exception 和 Error 體現(xiàn)了 Java 平臺設設計者對不同異常情況的分類。
- Error:系統(tǒng)錯誤,虛擬機出錯,我們處理不了,也不需要我們來處理。比如OutOfMeoryError。
- Exception:可以捕獲的異常,且作出處理。也就是要么捕獲異常并作出處理,要么繼續(xù)拋出異常。
Exception又分為檢查型異常和非檢查型異常
- 檢查型異常:在源代碼里必須顯式地進行捕獲處理,這是編譯期檢查的一部分。如FileNotFoundException客戶端需要知道是文件沒有找到的問題,客戶端可以通過其它方法來解決這個問題如更換其它路徑等。
- 非檢查型異常:就是所謂的運行時異常,類似 NullPointerException,通常是可以編碼避免的邏輯錯誤,具體根據(jù)需要來判斷是否需要捕獲,并不會在編譯期強制要求。
?
17.什么是類型擦除?
18.什么時候發(fā)生棧溢出?舉個例子?
19.如何設計秒殺系統(tǒng)?
20.反問為什么面試時間這么短?(說如果他覺得我能進二面就沒有必要繼續(xù)面了)
技術棧?
面試表現(xiàn)?
?
【二面】
二面面試官可能能看到一面的評分吧,可能對我期望比較大,讓他老人家失望了。。。
1.項目的難點?( ? 我說的和4G模塊通信,然后一頓BIO/NIO/AIO懟上來,答不上來,只能大眼瞪小眼,自己給自己挖坑。。)
2.使用Redis做了什么?
3.分布式鎖怎么做的?
4.分布式鎖,如果向主機加鎖,但是還沒同步到從機,此時主機宕機,重新選取了一個從機,那么此時是不是就會重新獲取到鎖(回答的redlock算法)
5.mysql的復制方式?(只回答出來異步復制?)問還有沒有其他的,回答:不知道。。。
6.分布式事務?二階段提交、三階段提交、TCC?區(qū)別?優(yōu)勢???( 自閉+1)
7.如果是2pc,準備階段成功之后,但是提交的時候一方?jīng)]有提交成功,會怎么樣?會不會回滾?(蒙的會回滾, 自閉+1)
8.我覺得你很多東西掌握的也不扎實呀??????(可能一面面試官對我評價太高了,讓他失望了,自閉+1)
9.你覺得數(shù)據(jù)結構和算法怎么樣?做個簡單算法題吧。
簡單的判斷鏈表是不是有環(huán)?使用快慢指針做的,并且通過了,問還有沒有更優(yōu)的?他說可以不考慮空間復雜度,我說可以用HashSet??
我快慢指針的時間復雜度是O(n),空間復雜度O(1),如果使用HashSet之后,不是時間復雜度還是O(n),空間也是O(N)???難道是考慮如果環(huán)比較大的時候,快慢指針效率低??
10.說我簡歷上掌握的知識面挺多的,問平時怎么學習的?
沒有反問環(huán)節(jié),以為涼了。。
?
【HR面】
HR面,一共30分鐘整。沒有自我介紹,沒有反問。
1.上來就是為什么要選杭州?為什么不去北上廣?
2.目前都投了哪些公司?
3.目前都拿到了什么offer?(hr難道是認為我太菜了,然后張大嘴20s。。。)
4.說下超出你預期的事情?
5.經(jīng)歷的比較有成就感的事情?
6.項目中遇到的最有挑戰(zhàn)性的問題?怎么解決的?然后一頓問(大概10分鐘)
7.和別人溝通時遇到的矛盾,怎么溝通的?怎么解決的?
總結
以上是生活随笔為你收集整理的【毕业求职季】-听说你想去大厂看学姐,带你看看网易java面经的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tableau可视化数据分析60讲(二十
- 下一篇: 深度学习核心技术精讲100篇(二十九)-