java面試需要掌握知識(shí)點(diǎn)

重點(diǎn)知識(shí)

由于我面試的JAVA開發(fā)工程師,針對(duì)于JAVA,需要理解的重點(diǎn)內(nèi)容有:

JVM內(nèi)存管理機(jī)制和垃圾回收機(jī)制(基本每次面試都會(huì)問,一定要搞得透徹)

JVM內(nèi)存調(diào)優(yōu)(了解是怎么回事,一般做項(xiàng)目過程中使用較多)

設(shè)計(jì)模式(熟悉常見設(shè)計(jì)模式的應(yīng)用場景,會(huì)畫類圖,實(shí)在不行背幾個(gè)也是有用的)

多線程(每次都會(huì)問,包括線程和進(jìn)程、線程狀態(tài)、線程并發(fā)的操作等,需要深入復(fù)習(xí))

JAVA集合類框架(理解框架圖、HashMap、ArrayList、HashSet等的關(guān)系和區(qū)別,其中HashMap的存儲(chǔ)機(jī)制幾乎每次都有問)

JAVA的異常處理機(jī)制(異常的分類、常見的異常有哪些、Try catch finally的使用)

JVM運(yùn)行機(jī)制(理解JVM是如何運(yùn)行的)

Linux基礎(chǔ)(面試筆試中對(duì)linux也有一定的要求,建議最好搭建一個(gè)linux虛擬機(jī),并練習(xí)常用的命令)

數(shù)據(jù)結(jié)構(gòu)和算法

常見的排序算法就不說了,需要理解其原理和會(huì)寫代碼,還有時(shí)間空間復(fù)雜度也要知道

隊(duì)列、棧:需要理解其存取結(jié)構(gòu),并能在某些場景下使用

二叉樹:樹的遍歷、樹的深度、按層次輸出、平衡二叉樹、逆序打印樹等

鏈表:逆序、合并兩有序的鏈表、判斷鏈表是否又環(huán)、鏈表倒數(shù)第K個(gè)元素等

字符串:KMP算法、動(dòng)態(tài)規(guī)劃(這個(gè)是重點(diǎn),需要好好理解動(dòng)態(tài)規(guī)劃,常見的題有:求解最長回文子串、求解最長公共子串等)

海量數(shù)據(jù)處理:現(xiàn)在好多大公司都會(huì)問海量數(shù)據(jù)的處理,所以需要掌握常見的處理方法,比如Bit-map、分而治之、hash映射等,可以百度看看相關(guān)的文章,加深理解

數(shù)據(jù)庫相關(guān)(數(shù)據(jù)庫是面試的重點(diǎn),每家公司都會(huì)問)

最基本的數(shù)據(jù)庫CRUD操作要熟悉,能夠根據(jù)表寫出需要的SQL語句

事務(wù)、零時(shí)表、索引、表鎖、行列鎖、視圖、存儲(chǔ)過程等都要深入理解

互聯(lián)網(wǎng)公司處理的數(shù)據(jù)量都很大,所以有必要對(duì)數(shù)據(jù)庫優(yōu)化和大數(shù)據(jù)的處理進(jìn)行了解和熟悉

建議看看Nosql和redis等非關(guān)系數(shù)據(jù)庫相關(guān)的書籍和資料

開源框架

像SSH等的開源框架在面試過程中問的很少,但是也是有必要了解SSH的運(yùn)行原理和使用。面試主要考察的是基礎(chǔ),所以更加偏向于考察數(shù)據(jù)結(jié)構(gòu)、算法、數(shù)據(jù)庫、JAVA基礎(chǔ)知識(shí)等。所以,如果你時(shí)間有限,可以把精力放在基礎(chǔ)知識(shí)的學(xué)習(xí)和復(fù)習(xí)上,如果你時(shí)間充裕,可以學(xué)習(xí)和復(fù)習(xí)開源框架相關(guān)知識(shí)。對(duì)于開源框架:最好還是看看源碼,對(duì)自己的好處是很大的。

個(gè)人建議

上面比較詳細(xì)地列出和分析了最近面試過程中的問題,由于時(shí)間長久,不可能全部都回憶起來,但是大體上相差不大。對(duì)于面試,個(gè)人的一些建議:

(1)心態(tài)要放好,不能著急。不要看到被人拿到offer,自己沒有就抱有心里壓力,其實(shí)工作誰都可以找到,就看滿意不滿意,所以著急也是沒有用。

(2)身體很重要。不要熬通宵復(fù)習(xí)、學(xué)習(xí),把身體搞垮了得不償失。保持良好的睡眠。

(3)善于總結(jié)面試中的問題。每一次筆試、面試完后,需要進(jìn)行總結(jié),將自己不會(huì)的知識(shí)點(diǎn)一定要搞清楚,如果不搞清楚,下次還有可能會(huì)問的。其實(shí)找工作的過程就是積累知識(shí)的過 程,所以善于總結(jié)很重要。

(4)不要盲目投遞簡歷。不要看見大公司就投遞,也不要投遞自己不想去的城市,那樣就是在瞎折騰,公司就算要你了,你也不去,還不如把時(shí)間放在自己想去的地方呢。

(5)復(fù)習(xí)需要持續(xù)。由于記憶過后會(huì)遺忘,所以復(fù)習(xí)過程中,需要反復(fù)進(jìn)行,一邊理解一邊記憶,達(dá)到閉上眼就能看見知識(shí)的體系結(jié)構(gòu)。

最后,希望找工作的朋友都能找到一份滿意的工作。下面具體列出了面試常見的知識(shí)點(diǎn),供大家參考,希望對(duì)你有所幫助。

主要詳細(xì)知識(shí)點(diǎn)

常用算法考察

冒泡排序

快速排序

插入排序

希爾排序

歸并排序

堆排序

桶排序

動(dòng)態(tài)規(guī)劃

最長公共子串

最長回文子串

數(shù)組的最大k個(gè)值

數(shù)字的最大連續(xù)子數(shù)組之和

左旋轉(zhuǎn)字符串

字符串匹配算法:KMP算法

二分查找

鏈表

單鏈表逆序

兩個(gè)有序單鏈表合并

兩個(gè)單鏈表是否相交

相交處的節(jié)點(diǎn)

單鏈表倒數(shù)第K個(gè)數(shù)

單鏈表排序

棧和隊(duì)列

設(shè)計(jì)包含min函數(shù)的棧

兩個(gè)隊(duì)列實(shí)現(xiàn)棧

兩個(gè)棧實(shí)現(xiàn)隊(duì)列

一個(gè)數(shù)組實(shí)現(xiàn)棧和隊(duì)列

前序、中序、后續(xù)遍歷

求二叉樹的深度

按層次遍歷二叉樹

判斷二叉樹是否為完全二叉樹

判斷二叉樹是否鏡面對(duì)稱

判斷兩顆樹是否相等

卡特蘭數(shù)

出棧順序

n個(gè)節(jié)點(diǎn)構(gòu)成的二叉樹個(gè)數(shù)

括號(hào)化

凸多邊形三角劃分

設(shè)計(jì)模式

Java源碼中有哪些設(shè)計(jì)模式

http://www.iteye.com/news/18725

常見的設(shè)計(jì)模式類圖

http://blog.sina.com.cn/s/blog_8cc6ff5c0101d4cp.html

常見的設(shè)計(jì)模式的示例:

http://www.jb51.net/article/27973.htm

數(shù)據(jù)庫

數(shù)據(jù)庫的crud語句的書寫

數(shù)據(jù)庫優(yōu)化策略、如何優(yōu)化

海量數(shù)據(jù)優(yōu)化

事務(wù)

事務(wù)中鎖分類

事務(wù)特性

數(shù)據(jù)庫表鎖

行列鎖

臨時(shí)表

索引

存儲(chǔ)空間

視圖

Linux常用命令(最好實(shí)戰(zhàn))

http://www.php100.com/html/webkaifa/Linux/2009/1106/3485.html

linux上搭建服務(wù)器

http://www.cnblogs.com/dudu/archive/2012/12/09/linux-apache-git.html

常用的網(wǎng)絡(luò)端口

http://www.360doc.com/content/11/1202/09/8209768_169068538.shtml

Nosql、redis等的熟悉、了解

http://www.yiibai.com/redis/redis_quick_guide.html

海量數(shù)據(jù)的處理

Bit-map、分而治之、hash映射、分布式處理(Hadoop)、Trie樹、雙層桶排序等

Java基礎(chǔ)

HashMap的存儲(chǔ)機(jī)制(很重要,必看)

Set、map區(qū)別

Set、list區(qū)別

Arraylist、LinkedList區(qū)別

String、Stringbufer、StringBuilder區(qū)別

HashSet、LinkedHashSet區(qū)別

HashMap、TreeMap、LinkedHashMap

熟悉Java集合類的框架圖

HashMap、ArrayList、StringBuffer、String等源碼的熟悉

線程和進(jìn)程

線程的特性

線程的狀態(tài)

多線程并發(fā)的實(shí)現(xiàn)

線程的創(chuàng)建方式

線程池的使用

Java作用域

final、static、native、等特殊關(guān)鍵字的使用

Java按值傳遞的過程

重構(gòu)和重載

抽象類和接口

內(nèi)部類的使用:匿名內(nèi)部類、靜態(tài)內(nèi)部類等

Java多線程并發(fā)、生產(chǎn)者消費(fèi)者的實(shí)現(xiàn)

Java連接數(shù)據(jù)庫的過程

JVM內(nèi)存管理和存儲(chǔ)機(jī)制

http://blog.csdn.net/lengyuhong/article/details/5953544

JVM垃圾回收機(jī)制,垃圾回收算法

http://jbutton.iteye.com/blog/1569746

JVM加載類過程

http://www.cnblogs.com/sunada2005/p/3577799.html

JVM內(nèi)存調(diào)優(yōu)

http://www.cnblogs.com/jackyrong/archive/2010/01/21/1653163.html

http://blog.csdn.net/cutesource/article/details/5907418

框架相關(guān)

對(duì)框架的熟悉:SSH (面試過程中問的很少,像jsp、servlet基本不問)

Spring框架組成、AOP、IOC 、用到的設(shè)計(jì)模式

Hibernate運(yùn)行機(jī)制、緩存的使用、最好看看源碼

熟悉和了解JavaScript和jQuery

java中IO、NIO

Java NIO和IO之間第一個(gè)最大的區(qū)別是,IO是面向流的,NIO是面向緩沖區(qū)的。 Java IO面向流意味著每次從流中讀一個(gè)或多個(gè)字節(jié),直至讀取所有字節(jié),它們沒有被緩存在任何地方。此外,它不能前后移動(dòng)流中的數(shù)據(jù)。如果需要前后移動(dòng)從流中讀取的數(shù)據(jù),需要先將它緩存到一個(gè)緩沖區(qū)。 Java NIO的緩沖導(dǎo)向方法略有不同。數(shù)據(jù)讀取到一個(gè)它稍后處理的緩沖區(qū),需要時(shí)可在緩沖區(qū)中前后移動(dòng)。這就增加了處理過程中的靈活性。但是,還需要檢查是否該緩沖區(qū)中包含所有您需要處理的數(shù)據(jù)。而且,需確保當(dāng)更多的數(shù)據(jù)讀入緩沖區(qū)時(shí),不要覆蓋緩沖區(qū)里尚未處理的數(shù)據(jù)。

IO流包括字節(jié)流和字符流:

字節(jié)流:對(duì)應(yīng)抽象類為InputStream(輸入流)和 OutputStream(輸出流)。 FileInputStream、FileOutputStream

字符流:對(duì)應(yīng)抽象類為Reader(輸入流)和Writer(輸出流)。BufferedReader、InputStreamReader、 StringReader

java中異常的分類及結(jié)構(gòu)

Java中的異常類,包括內(nèi)置的異常類以及自定義的異常類,都直接或者間接地繼承至java.lang.Throwable類。在java.lang包中,Throwable類有兩個(gè)直接子類:Error類和Exception類,Error類及其子類描述了java運(yùn)行時(shí)系統(tǒng)的內(nèi)部錯(cuò)誤和資源耗盡錯(cuò)誤。出現(xiàn)這樣的錯(cuò)誤的,除了通知用戶,并接盡力使程序安全地終止之外,沒有更好的辦法。Exception類的層次結(jié)構(gòu)又分為兩個(gè)分支:一個(gè)分支由RuntimeException派生,另外一個(gè)分支包含除RuntimeException類之外的異常類。

運(yùn)行時(shí)異常、非運(yùn)行時(shí)異常

運(yùn)行時(shí)異常:RuntimeException類及其子類異常,如NullPointerException、IndexOutOfBoundsException、classCastException等,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。這些異常一般是由程序邏輯錯(cuò)誤引起的,程序應(yīng)該從邏輯角度盡可能避免這類異常的發(fā)生。

非運(yùn)行時(shí)異常:RuntimeException以外的異常,類型上都屬于Exception類及其子類。從程序語法角度講是必須進(jìn)行處理的異常,不處理程序不能編譯通過。如IOException、SQLException等以及用戶自定義的Exception異常。

動(dòng)態(tài)代理機(jī)制

動(dòng)態(tài)代理可以提供對(duì)另一個(gè)對(duì)象的訪問,同時(shí)隱藏實(shí)際對(duì)象的具體事實(shí)。代理一般會(huì)實(shí)現(xiàn)它所表示的實(shí)際對(duì)象的接口。代理可以訪問實(shí)際對(duì)象,但是延遲實(shí)現(xiàn)實(shí)際對(duì)象的部分功能,實(shí)際對(duì)象實(shí)現(xiàn)系統(tǒng)的實(shí)際功能,代理對(duì)象對(duì)客戶隱藏了實(shí)際對(duì)象??蛻舨恢浪桥c代理打交道還是與實(shí)際對(duì)象打交道。動(dòng)態(tài)代理主要包含以下角色:動(dòng)態(tài)代理類(以下簡稱為代理類)是一個(gè)實(shí)現(xiàn)在創(chuàng)建類時(shí)在運(yùn)行時(shí)指定的接口列表的類,該類具有下面描述的行為。代理接口 是代理類實(shí)現(xiàn)的一個(gè)接口。代理實(shí)例 是代理類的一個(gè)實(shí)例。每個(gè)代理實(shí)例都有一個(gè)關(guān)聯(lián)的調(diào)用處理程序 對(duì)象,它可以實(shí)現(xiàn)接口 InvocationHandler。通過其中一個(gè)代理接口的代理實(shí)例上的方法調(diào)用將被指派到實(shí)例的調(diào)用處理程序的 Invoke 方法,并傳遞代理實(shí)例、識(shí)別調(diào)用方法的java.lang.reflect.Method 對(duì)象以及包含參數(shù)的 Object 類型的數(shù)組。調(diào)用處理程序以適當(dāng)?shù)姆绞教幚砭幋a的方法調(diào)用,并且它返回的結(jié)果將作為代理實(shí)例上方法調(diào)用的結(jié)果返回。

try catch finally的使用

1. finally 里 始終會(huì)被執(zhí)行到, System.exit(0); 除這種被執(zhí)行外。

2. 即使try中有return ,也是先執(zhí)行 return 后面的語句完了之后,不立馬return,而是去執(zhí)行finally中的語句。

3. 當(dāng)try中與finally里,同時(shí)出現(xiàn)return , 則只會(huì)返回 finally 中的return 結(jié)果。

4. finally中的值不能影響try中 即將返回的結(jié)果值。

注意:?若finally中沒有return在try或catch中有return,那么在執(zhí)行return跟著語句之后,會(huì)把語句的結(jié)果新開辟一內(nèi)存空間,直接把結(jié)果的存放此內(nèi)存空間中。所以,finally中的值不能影響try或catch中即將return的結(jié)果。

靜態(tài)成員、非靜態(tài)成員

(1)類的靜態(tài)成員(變量和方法)屬于類本身,在類加載的時(shí)候就會(huì)分配內(nèi)存,可以通過類名直接去訪問;非靜態(tài)成員(變量和方法)屬于類的對(duì)象,所以只有在類的對(duì)象產(chǎn)生(創(chuàng)建類的實(shí)例)時(shí)才會(huì)分配內(nèi)存,然后通過類的對(duì)象(實(shí)例)去訪問。

(2)在一個(gè)類的靜態(tài)成員中去訪問其非靜態(tài)成員之所以會(huì)出錯(cuò)是因?yàn)樵陬惖姆庆o態(tài)成員不存在的時(shí)候類的靜態(tài)成員就已經(jīng)存在了,訪問一個(gè)內(nèi)存中不存在的東西當(dāng)然會(huì)出錯(cuò)

抽象類遵循的原則:

(1)abstract關(guān)鍵字只能修飾類和方法,不能修飾字段。

(2)抽象類不能被實(shí)例化(無法使用new關(guān)鍵字創(chuàng)建對(duì)象實(shí)例),只能被繼承。

(3)抽象類可以包含屬性,方法,構(gòu)造方法,初始化塊,內(nèi)部類,枚舉類,和普通類一樣,普通方法一定要實(shí)現(xiàn),變量可以初始化、不初始化但不能初始化后在抽象類中重新賦值或操作該變量(只能在子類中改變?cè)撟兞浚?/p>

(4)抽象類中的抽象方法(加了abstract關(guān)鍵字的方法)不能實(shí)現(xiàn)。

(5)含有抽象方法的類必須定義成抽象類。

擴(kuò)展:抽象類和接口的區(qū)別:

(1)接口是公開的,里面不能有私有的方法或變量,是用于讓別人使用的,而抽象類是可以有私有方法或私有變量的。

(2)abstractclass 在Java 語言中表示的是一種繼承關(guān)系,一個(gè)類只能使用一次繼承關(guān)系。但是,一個(gè)類卻可以實(shí)現(xiàn)多個(gè)interface,實(shí)現(xiàn)多重繼承。接口還有標(biāo)識(shí)(里面沒有任何方法,如Remote接口)和數(shù)據(jù)共享(里面的變量全是常量)的作用。

(3)在abstractclass 中可以有自己的數(shù)據(jù)成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是static final的,不過在interface中一般不定義數(shù)據(jù)成員),所有的成員方法默認(rèn)都是 public abstract 類型的。

(4)abstractclass和interface所反映出的設(shè)計(jì)理念不同。其實(shí)abstractclass表示的是"is-a"關(guān)系,interface表示的是"has-a"關(guān)系。

(5)實(shí)現(xiàn)接口的一定要實(shí)現(xiàn)接口里定義的所有方法,而實(shí)現(xiàn)抽象類可以有選擇地重寫需要用到的方法,一般的應(yīng)用里,最頂級(jí)的是接口,然后是抽象類實(shí)現(xiàn)接口,最后才到具體類實(shí)現(xiàn)。抽象類中可以有非抽象方法。接口中則不能有實(shí)現(xiàn)方法。

(6)接口中定義的變量默認(rèn)是publicstatic final 型,且必須給其初值,所以實(shí)現(xiàn)類中不能重新定義,也不能改變其值。抽象類中的變量默認(rèn)是friendly 型,其值可以在子類中重新定義,也可以在子類中重新賦值。

學(xué)習(xí)Java的同學(xué)注意了?。。?br>學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話,歡迎加入Java學(xué)習(xí)交流群346942462,我們一起學(xué)Java!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,623評(píng)論 18 399
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,241評(píng)論 0 62
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,755評(píng)論 11 349
  • 偶爾會(huì)有一些很小的超能力,比如隨手一扔的蘋果核正好掉進(jìn)垃圾桶里,想找書里的一句話翻開來恰好是那一頁,黑暗中掏出鑰匙...
    澹然四海清閱讀 151評(píng)論 0 0
  • 使用Handler消息傳遞機(jī)制; 使用AsyncTask異步任務(wù); 使用runOnUiThread(action)...
    專屬守護(hù)閱讀 509評(píng)論 0 0

友情鏈接更多精彩內(nèi)容