Java作為面向?qū)ο缶幊陶Z(yǔ)言,不僅吸收了C++語(yǔ)言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語(yǔ)言具有功能強(qiáng)大和簡(jiǎn)單易用的兩個(gè)特征。也正是由于其簡(jiǎn)單性、可移植性、安全性、動(dòng)態(tài)性等特點(diǎn),Java成為了服務(wù)器端的頂梁柱,保護(hù)著網(wǎng)站的一方安全。既然Java語(yǔ)言這么優(yōu)秀,那么,如果想要以java去找工作,一個(gè)Java初學(xué)者要學(xué)多少Java知識(shí),才能找到第一份Java工作呢?
首先我們先要了解一下在工作過(guò)程中需要用到的java基礎(chǔ)知識(shí)有哪些:
1、synchronized static修飾類和方法有什么區(qū)別?
2、HashMap的原理,底層數(shù)據(jù)結(jié)構(gòu),rehash的過(guò)程,指針碰撞問(wèn)題?
3、HashMap的線程安全問(wèn)題,為什么會(huì)產(chǎn)生這樣的線程安全問(wèn)題?
3、ConcurrentHashMap的數(shù)據(jù)結(jié)構(gòu),底層原理,put和get是否線程安全?
5、Java IO的一些內(nèi)容,包括NIO,BIO等?
如果以上的基礎(chǔ)知識(shí)大家能夠運(yùn)用自如,也就是說(shuō)工作過(guò)程中做一些基本的事情還是可以的,但是是遠(yuǎn)遠(yuǎn)不過(guò)的,如果想要在工作過(guò)程中有自己的一席之地還是要學(xué)會(huì)以下幾點(diǎn),才能夠勉強(qiáng)進(jìn)入企業(yè)工作。
一、Java線程池的構(gòu)造方法,里面參數(shù)的含義,以及原理:
1、volatile和ThreadLocal解決了什么問(wèn)題
2、CAS在Java中的具體實(shí)現(xiàn)
3、Java虛擬機(jī)的構(gòu)成,以及一個(gè)Java對(duì)象的生命周期,還有堆棧和方法區(qū)中存儲(chǔ)的內(nèi)容
4、JVM的GC過(guò)程,包括一些實(shí)際問(wèn)題的分析,比如說(shuō)明一個(gè)現(xiàn)象,讓你分析可能是什么原因會(huì)導(dǎo)致這樣的問(wèn)題,應(yīng)該如何對(duì)JVM參數(shù)進(jìn)行調(diào)優(yōu)
5、synchronized和Lock的區(qū)別,以及底層實(shí)現(xiàn)原理
6、 Full GC和Minor GC觸發(fā)的條件
7、 GC Roots的選擇
8、 jmap,jstat,jstack等的使用場(chǎng)景,MAT等
9、ClassLoader的加載過(guò)程
10、CountDownLatch、CyclicBarrier和Semaphore等
11、Java 8 的新特性等
二、數(shù)據(jù)庫(kù):這里的數(shù)據(jù)庫(kù)包含兩種,一種一般是MySQL,另外是NoSql數(shù)據(jù)庫(kù),包括Redis、MongoDB等。一般會(huì)問(wèn)的問(wèn)題有:
1、inner join和left join等的區(qū)別
2、SQL調(diào)優(yōu),explain,profile等
3、InnoDB和Myisam的區(qū)別
4、ACID
5、數(shù)據(jù)庫(kù)的事務(wù)隔離級(jí)別,以及他們分別能解決什么問(wèn)題
6、Redis的幾種數(shù)據(jù)結(jié)構(gòu)
7、Redis是單線程還是多線程
8、Redis的持久化
9、悲觀鎖和樂(lè)觀鎖的含義
10最左前綴索引,索引的數(shù)據(jù)結(jié)構(gòu),聚簇索引等(這塊還沒(méi)搞明白)
三、框架
因?yàn)閟pring是我們常用的框架,所以這塊的內(nèi)容會(huì)問(wèn)的比較多,也會(huì)比較細(xì)。
1、Spring的兩大特性(IoC和AOP)
2、Spring的bean的生命周期
3、Spring是如何解決Bean的循環(huán)引用問(wèn)題的
4、AOP的兩種實(shí)現(xiàn)方式,以及兩者的區(qū)別(這里其實(shí)使用了動(dòng)態(tài)代理,具體動(dòng)態(tài)代理分為兩種,一種是JDK的動(dòng)態(tài)代理,主要使用的是JDK的反射,還有一種是CGLib,兩者區(qū)別可以自己搜索,文章比較多)
5、AOP一般的使用場(chǎng)景
6、Spring的事務(wù)原理
MyBatis:這塊問(wèn)到的比較簡(jiǎn)單些:
1、$和#的區(qū)別
2、MyBatis和Hibernate的區(qū)別
3、源碼,一般問(wèn)的比較少
Dubbo:因?yàn)槠綍r(shí)自己用到了Dubbo,所以這塊會(huì)有問(wèn)到:
1、RPC的原理
2、Dubbo是如何完成遠(yuǎn)程調(diào)用的
3、Dubbo如何進(jìn)行調(diào)優(yōu)
4、Dubbo的通信協(xié)議
5、Dubbo是如何實(shí)現(xiàn)負(fù)載均衡的
ZooKeeper:
1、ZK的使用場(chǎng)景
2、ZK的選舉機(jī)制
3、ZK的節(jié)點(diǎn)類型
4、一致性Hash原理
數(shù)據(jù)結(jié)構(gòu)和算法:
這塊的內(nèi)容是基礎(chǔ),如果面試官懷疑你的能力,一般一會(huì)問(wèn)到這部分內(nèi)容,比如樹(shù)的遍歷、快速排序等。
linux:
一般會(huì)問(wèn)一些命令的使用,然后會(huì)舉一個(gè)實(shí)際的場(chǎng)景,讓你用命令去排查問(wèn)題,這塊自己不是很熟,需要盡快加強(qiáng)。
隨著java的普及,懂Java的人越來(lái)越多,企業(yè)也會(huì)對(duì)求職者提出更高的要求,他們更希望招聘一些馬上能上手工作的,所以傾向于招聘一些有項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)的,這也是為什么那么多的大學(xué)計(jì)算機(jī)專業(yè)畢業(yè)的大學(xué)生找不到工作的原因,所以越來(lái)越多的大學(xué)生才會(huì)選擇畢業(yè)前后參加一些專業(yè)的Java培訓(xùn)班來(lái)增加實(shí)戰(zhàn)經(jīng)驗(yàn)。只有增加自我實(shí)力才能出于不敗之地。