更新時(shí)間:2022-12-22 14:27:03 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1270次
2023新的一年已經(jīng)開始,時(shí)間晃眼就過去了,有的同學(xué)已經(jīng)為新年的跳槽早早做足了準(zhǔn)備,而有的同學(xué)還在臨陣磨槍中,想必看到這篇文章的你,也是為了新的開始而做準(zhǔn)備呢吧,現(xiàn)在的問題是, 需要了解到什么樣的面試題才能讓我們后面的就業(yè)更加的順利呢。這些都是小編整理的高頻面試題,希望可以幫助到大家:
1、創(chuàng)建socket通訊的步驟?
1、 服務(wù)器程序創(chuàng)建一個(gè)ServerSocket,然后再用accept方法等待客戶來連接
2、 客戶端程序創(chuàng)建一個(gè)Socket并請(qǐng)求與服務(wù)器建立連接
3、 服務(wù)器接收客戶的連接請(qǐng)求,并創(chuàng)建一個(gè)新的Socket與該客戶建立專線連接
4、 剛才建立了連接的兩個(gè)Socket在一個(gè)線程上對(duì)話
5、 服務(wù)器開始等待新的連接請(qǐng)求
2、Java 中 sleep 方法和 wait 方法的區(qū)別?
雖然兩者都是用來暫停當(dāng)前運(yùn)行的線程,但是 sleep() 實(shí)際上只是短暫停頓,因?yàn)樗粫?huì)釋放鎖,而 wait() 意味著條件等待,這就是為什么該方法要釋放鎖,因?yàn)橹挥羞@樣,其他等待的線程才能在滿足條件時(shí)獲取到該鎖。
3、程序計(jì)數(shù)器(線程私有)
一塊較小的內(nèi)存空間, 是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器,每條線程都要有一個(gè)獨(dú)立的程序計(jì)數(shù)器,這類內(nèi)存也稱為“線程私有” 的內(nèi)存。
正在執(zhí)行 java 方法的話,計(jì)數(shù)器記錄的是虛擬機(jī)字節(jié)碼指令的地址(當(dāng)前指令的地址) 。如果還是 Native 方法,則為空。
這個(gè)內(nèi)存區(qū)域是唯一一個(gè)在虛擬機(jī)中沒有規(guī)定任何 OutOfMemoryError 情況的區(qū)域。
4、什么是線程調(diào)度器(Thread Scheduler)和時(shí)間分片(Time Slicing)?
線程調(diào)度器是一個(gè)操作系統(tǒng)服務(wù),它負(fù)責(zé)為Runnable狀態(tài)的線程分配CPU時(shí)間。一旦我們創(chuàng)建一個(gè)線程并啟動(dòng)它,它的執(zhí)行便依賴于線程調(diào)度器的實(shí)現(xiàn)。時(shí)間分片是指將可用的CPU時(shí)間分配給可用的Runnable線程的過程。分配CPU時(shí)間可以基于線程優(yōu)先級(jí)或者線程等待的時(shí)間。線程調(diào)度并不受到Java虛擬機(jī)控制,所以由應(yīng)用程序來控制它是更好的選擇(也就是說不要讓你的程序依賴于線程的優(yōu)先級(jí))。
5、迭代器 Iterator 是什么?
Iterator 接口提供遍歷任何 Collection 的接口。我們可以從一個(gè) Collection 中使用迭代器方法來獲取迭代器實(shí)例。迭代器取代了 Java 集合框架中的 Enumeration,迭代器允許調(diào)用者在迭代過程中移除元素。
因?yàn)樗蠧ollection接繼承了Iterator迭代器
6、線程的 sleep()方法和 yield()方法有什么區(qū)別?
1、 sleep()方法給其他線程運(yùn)行機(jī)會(huì)時(shí)不考慮線程的優(yōu)先級(jí),因此會(huì)給低優(yōu)先級(jí)的線程以運(yùn)行的機(jī)會(huì);yield()方法只會(huì)給相同優(yōu)先級(jí)或更高優(yōu)先級(jí)的線程以運(yùn)行的機(jī)會(huì);
2、 線程執(zhí)行 sleep()方法后轉(zhuǎn)入阻塞(blocked)狀態(tài),而執(zhí)行 yield()方法后轉(zhuǎn)入就緒(ready)狀態(tài);
3、 sleep()方法聲明拋出 InterruptedException,而 yield()方法沒有聲明任何異常;
4、 sleep()方法比 yield()方法(跟操作系統(tǒng) CPU 調(diào)度相關(guān))具有更好的可移植性,通常不建議使用yield()方法來控制并發(fā)線程的執(zhí)行。
7、Java 中能創(chuàng)建 volatile 數(shù)組嗎?
能,Java 中可以創(chuàng)建 volatile 類型數(shù)組,不過只是一個(gè)指向數(shù)組的引用,而不是整個(gè)數(shù)組。意思是,如果改變引用指向的數(shù)組,將會(huì)受到 volatile 的保護(hù),但是如果多個(gè)線程同時(shí)改變數(shù)組的元素,volatile 標(biāo)示符就不能起到之前的保護(hù)作用了。
8、java中equals方法的用法以及==的用法
tech.souyunku.com/bluestorm/a…
9、如何創(chuàng)建一個(gè)json對(duì)象?
使用{}實(shí)例化一個(gè)json對(duì)象,json對(duì)象多個(gè)元素使用逗號(hào)隔開,每個(gè)元素都是一個(gè)鍵值對(duì)
10、如何判斷對(duì)象是否是垃圾?
**引用計(jì)數(shù):**在對(duì)象中添加一個(gè)引用計(jì)數(shù)器,如果被引用計(jì)數(shù)器加 1,引用失效時(shí)計(jì)數(shù)器減 1,如果計(jì)數(shù)器為 0 則被標(biāo)記為垃圾。原理簡(jiǎn)單,效率高,但是在 Java 中很少使用,因?yàn)榇嬖趯?duì)象間循環(huán)引用的問題,導(dǎo)致計(jì)數(shù)器無法清零。
**可達(dá)性分析:**主流語言的內(nèi)存管理都使用可達(dá)性分析判斷對(duì)象是否存活。基本思路是通過一系列稱為 GC Roots 的根對(duì)象作為起始節(jié)點(diǎn)集,從這些節(jié)點(diǎn)開始,根據(jù)引用關(guān)系向下搜索,搜索過程走過的路徑稱為引用鏈,如果某個(gè)對(duì)象到 GC Roots 沒有任何引用鏈相連,則會(huì)被標(biāo)記為垃圾。可作為 GC Roots 的對(duì)象包括虛擬機(jī)棧和本地方法棧中引用的對(duì)象、類靜態(tài)屬性引用的對(duì)象、常量引用的對(duì)象。
以上就是“一些大廠高頻出現(xiàn)的Java高級(jí)面試題及答案”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動(dòng)力節(jié)點(diǎn)Java官網(wǎng)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743