以下文章來源于公眾號“程序員求職之路”
兩年前宛篇,和同事小T一起進(jìn)入了公司的Java開發(fā)部門娃磺。
看代碼了解情況、查詢數(shù)據(jù)庫到做個(gè)小功能叫倍,我通過這個(gè)流程我慢慢熟悉公司的開發(fā)套路豌鸡,個(gè)把月后開始接觸其他復(fù)雜功能。
就在我還為平均工資奮斗的時(shí)候段标,無意間聽到小T的月薪已經(jīng)上了23k涯冠,好奇和羨慕驅(qū)使我趕忙向他請教一二。
原來這一年里受疫情影響逼庞,在家辦公的他經(jīng)常抽空向各大公司投offer蛇更、約面試。
“倒也不是為了跳槽赛糟,就是想快速了解一下現(xiàn)在的行業(yè)標(biāo)準(zhǔn)派任。”
他表示大廠的HR一定程度上就是技術(shù)要求的風(fēng)向標(biāo)璧南,自己就對照著要求缺啥補(bǔ)啥掌逛。
掌握了前沿的業(yè)務(wù)能力,接觸項(xiàng)目的時(shí)候也是多了一分得心應(yīng)手司倚,和老板談薪也有了一點(diǎn)籌碼豆混。
撇開簡歷設(shè)計(jì)和面試準(zhǔn)備不談(當(dāng)然你如果好奇這部分內(nèi)容可以關(guān)注我們并查看早期文章篓像,我們都提供了相關(guān)意見)
小T羅列了以下面試Java崗位需要掌握的知識點(diǎn):
■?包、內(nèi)部類與外部類?
包允許將類組合成較小的單元(類似文件夾)皿伺,使得找到和使用相應(yīng)的類文件更容易员辩。所以一般編譯后的結(jié)構(gòu)是跟包結(jié)構(gòu)一模一樣的,這樣的結(jié)構(gòu)保證了import時(shí)能找到正確的class引用包鸵鸥。import一般加上全路徑奠滑,并且使用.*時(shí)只包含當(dāng)前目錄的所有類文件,不包括子目錄妒穴。
內(nèi)部類可以有全部訪問權(quán)限宋税,因?yàn)樗母拍罹褪且粋€(gè)成員變量,所以訪問權(quán)限設(shè)置與一般的成員變量相同讼油。
外部類只有public和default兩種修飾弃甥,要么全局可訪問,要么包內(nèi)可訪問汁讼。
非靜態(tài)內(nèi)部類是外部類的一個(gè)成員變量淆攻,只跟外部類的實(shí)例有關(guān)。
靜態(tài)內(nèi)部類是獨(dú)立于外部類存在的一個(gè)類嘿架,與外部類實(shí)例無關(guān)瓶珊,可以通過外部類.內(nèi)部類直接獲取Class類型。
■ Object類和Class類
Object類和Class類沒有直接的關(guān)系耸彪。
Object類是一切java類的父類伞芹,對于普通的java類,即便不聲明蝉娜,也是默認(rèn)繼承了Object類唱较。典型的有Object類中的toString()方法。
Class類是用于java反射機(jī)制的召川,一切java類南缓,都有一個(gè)對應(yīng)的Class對象,他是一個(gè)final類荧呐。Class 類的實(shí)例表示汉形,正在運(yùn)行的 Java 應(yīng)用程序中的類和接口。
■ javac和java
javac可以將java源文件編譯為class字節(jié)碼文件倍阐,如 javac HelloWorld.java概疆。
java 可以運(yùn)行class字節(jié)碼文件,如 java HelloWorld峰搪。
■ 反射
Java反射包reflection提供對Class岔冀,Method,field等信息的封裝類型概耻。
它賦予jvm動態(tài)編譯的能力使套,失去反射類的元數(shù)據(jù)信息只能用靜態(tài)編譯的方式實(shí)現(xiàn)罐呼。
反射是Java中最強(qiáng)大的技術(shù)之一,應(yīng)用范圍廣童漩,很多優(yōu)秀的開源框架都是通過反射完成的,比如大部分最初的注解框架春锋。
后來因?yàn)閖ava反射影響性能矫膨,所以被運(yùn)行時(shí)注解APT替代了。
■ 動態(tài)代理
通過實(shí)現(xiàn) InvocationHandler 接口創(chuàng)建自己的調(diào)用處理器期奔。
通過為 Proxy 類指定 ClassLoader 對象和一組 interface 來創(chuàng)建動態(tài)代理類侧馅。
通過反射機(jī)制獲得動態(tài)代理類的構(gòu)造函數(shù),其唯一參數(shù)類型是調(diào)用處理器接口類型呐萌。
通過構(gòu)造函數(shù)創(chuàng)建動態(tài)代理類實(shí)例馁痴,構(gòu)造時(shí)調(diào)用處理器對象作為參數(shù)被傳入。
■ 多線程
多線程是從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)肺孤。這里用幾道面試真題更好說明相關(guān)知識點(diǎn):
1 現(xiàn)在有T1罗晕、T2、T3三個(gè)線程赠堵,你怎樣保證T2在T1執(zhí)行完后執(zhí)行小渊,T3在T2執(zhí)行完后執(zhí)行?
這個(gè)線程問題通常會在第一輪或電話面試階段被問到茫叭,目的是檢測你對“join”方法是否熟悉酬屉。
2 在java中wait和sleep方法的不同?
最大的不同是在等待時(shí)wait會釋放鎖揍愁,而sleep一直持有鎖呐萨。Wait通常被用于線程間交互,sleep通常被用于暫停執(zhí)行莽囤。
3 Java中的volatile關(guān)鍵是什么作用谬擦?怎樣使用它?在Java中它跟synchronized方法有什么不同朽缎?
自從Java 5和Java內(nèi)存模型改變以后怯屉,基于volatile關(guān)鍵字的線程問題越來越流行。應(yīng)該準(zhǔn)備好回答關(guān)于volatile變量怎樣在并發(fā)環(huán)境中確倍祝可見性锨络。
4 為什么我們調(diào)用start()方法時(shí)會執(zhí)行run()方法,為什么我們不能直接調(diào)用run()方法狼牺?
當(dāng)你調(diào)用start()方法時(shí)你將創(chuàng)建新的線程羡儿,并且執(zhí)行在run()方法里的代碼。但是如果你直接調(diào)用run()方法是钥,它不會創(chuàng)建新的線程也不會執(zhí)行調(diào)用線程的代碼
5 在Java中CycliBarriar和CountdownLatch有什么區(qū)別掠归?
CyclicBarrier可以重復(fù)使用已經(jīng)通過的障礙缅叠,而CountdownLatch不能重復(fù)使用。
Java作為一門隨時(shí)代快速發(fā)展的計(jì)算機(jī)語言程序虏冻,涉及生產(chǎn)生活的各領(lǐng)域肤粱、多方面。
隨之衍生出不計(jì)其數(shù)的知識點(diǎn)厨相,這里只是簡單羅列幾點(diǎn)僅做拋磚引玉的作用领曼,希望大家對自我的及時(shí)學(xué)習(xí)引起重視。
現(xiàn)在關(guān)注我們蛮穿,就可在后臺回復(fù)「面試題庫」領(lǐng)取大廠的Java崗位面試真題哦庶骄。
學(xué)習(xí),什么時(shí)候開始都不算晚践磅。
更多內(nèi)容也請關(guān)注
程序員求職之路
一個(gè)為程序員量身定做的求職公眾號
給你貼心有效的大廠面試真題
面試干貨单刁、職業(yè)發(fā)展干貨、簡歷模版