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