2020校招Java開發(fā)面試知識點解析(附最新筆面試題)

前言

6月馬上要到了,很多互聯(lián)網(wǎng)企業(yè)都開始了校招。

互聯(lián)網(wǎng)校招時間早,崗位多,并且每家的筆面試都不同。一份合適的筆面試資料,絕對能提高你的校招通過率!

Java 一些知識點

1.Java基礎(chǔ)知識點

2.Java常見集合

3.高并發(fā)編程(JUC包)

4.JVM內(nèi)存管理

5.Java?8 知識點

6.網(wǎng)絡(luò)協(xié)議相關(guān)

7.數(shù)據(jù)庫相關(guān)

8.MVC框架相關(guān)

9.大數(shù)據(jù)相關(guān)

10.Linux命令相關(guān)

面試,是大家從學(xué)校走向社會的第一步。

互聯(lián)網(wǎng)公司的校園招聘,從形式上說,面試一般分為2-3 輪技術(shù)面試 +1 輪 HR 面試。

但是一些公司確實是沒有HR 面試的,直接就是三輪技術(shù)面。

技術(shù)面試中,面試官一般會先就你所應(yīng)聘的崗位進行相關(guān)知識的考察,也叫基礎(chǔ)知識和業(yè)務(wù)邏輯面試。

只要你回答的不是特別差,面試官通常會說:“咱們寫個代碼吧”,這個時候就開始了算法面試。

也就是說,一輪技術(shù)面試= 基礎(chǔ)知識和業(yè)務(wù)邏輯面試 + 算法面試。

本文我們主要從技術(shù)面試聊起。技術(shù)面試包括:業(yè)務(wù)邏輯和基礎(chǔ)知識面試。

首先是業(yè)務(wù)邏輯面試,也就是講項目。

面試官會對你簡歷上寫的若干個項目其中之一拿出來和你聊聊。在期間,會針對你所做的東西進行深度挖掘。

包括:為什么要這么做?優(yōu)缺點分析,假如重新讓你做一次,你打算怎么做?等等。這個環(huán)節(jié)主要考察我們對自己做過的項目(實習(xí)項目或者校內(nèi)項目)是否有一個清晰的認識。

關(guān)于業(yè)務(wù)邏輯面試的準備,建議在平時多多思考總結(jié),對項目的數(shù)據(jù)來源、整體運行框架都應(yīng)該熟悉掌握。

比如說你在某公司實習(xí)過程中,就可以進行總結(jié),而不必等到快離職的時候慌慌張張的去總結(jié)該項目。

Java 基礎(chǔ)知識

01. 面向?qū)ο蟮奶匦杂心男?/b>

封裝、繼承和多態(tài)。

02. Java 中覆蓋和重載是什么意思?

覆蓋(Override)是指子類對父類方法的一種重寫,只能比父類拋出更少的異常,訪問權(quán)限不能比父類的小。

被覆蓋的方法不能是private 的,否則只是在子類中重新定義了一個方法;重載(Overload)表示同一個類中可以有多個名稱相同的方法,但這些方法的參數(shù)列表各不相同。

那么構(gòu)成重載的條件有哪些?

參數(shù)類型不同、參數(shù)個數(shù)不同、參數(shù)順序不同。

函數(shù)的返回值不同可以構(gòu)成重載嗎?為什么?

不可以,因為Java 中調(diào)用函數(shù)并不需要強制賦值。舉例如下:

如下兩個方法:

 void?f(){}    int?f(){ return?1;}

只要編譯器可以根據(jù)語境明確判斷出語義,比如在int x = f();中,那么的確可以據(jù)此區(qū)分重載方法。

不過,有時你并不關(guān)心方法的返回值,你想要的是方法調(diào)用的其他效果(這常被稱為“為了副作用而調(diào)用”),這時你可能會調(diào)用方法而忽略其返回值,所以如果像下面的調(diào)用:

fun();

此時Java 如何才能判斷調(diào)用的是哪一個 f( ) 呢?別人如何理解這種代碼呢?所以,根據(jù)方法返回值來區(qū)分重載方法是行不通的。

03. 抽象類和接口的區(qū)別有哪些?

[if !supportLists]·?[endif]抽象類中可以沒有抽象方法;接口中的方法必須是抽象方法;

[if !supportLists]·?[endif]抽象類中可以有普通的成員變量;接口中的變量必須是static final 類型的,必須被初始化 , 接口中只有常量,沒有變量。

[if !supportLists]·?[endif]抽象類只能單繼承,接口可以繼承多個父接口;

[if !supportLists]·?[endif]Java8 中接口中會有 default 方法,即方法可以被實現(xiàn)。

04.Java 和 C++ 的區(qū)別:

解析:雖然我們不太懂C++,但是就是會這么問,尤其是三面(總監(jiān)級別)面試中。

[if !supportLists]·?[endif]都是面向?qū)ο蟮恼Z言,都支持封裝、繼承和多態(tài);

[if !supportLists]·?[endif]指針:Java 不提供指針來直接訪問內(nèi)存,程序更加安全;

[if !supportLists]·?[endif]繼承:Java 的類是單繼承的,C++ 支持多重繼承; Java 通過一個類實現(xiàn)多個接口來實現(xiàn) C++ 中的多重繼承; Java 中類不可以多繼承,但是!?。〗涌诳梢远嗬^承;

[if !supportLists]·?[endif]內(nèi)存:Java 有自動內(nèi)存管理機制,不需要程序員手動釋放無用內(nèi)存。

05. JDK 中常用的包有哪些?

java.lang、java.util、java.io、java.net、java.sql。

07. JDK,JRE 和 JVM 的聯(lián)系和區(qū)別:

[if !supportLists]·?[endif]JDK 是 java 開發(fā)工具包,是 java 開發(fā)環(huán)境的核心組件,并提供編譯、調(diào)試和運行一個 java 程序所需要的所有工具,可執(zhí)行文件和二進制文件,是一個平臺特定的軟件。

[if !supportLists]·?[endif]JRE 是 java 運行時環(huán)境,是 JVM 的實施實現(xiàn),提供了運行 java 程序的平臺。JRE 包含了 JVM,但是不包含 java 編譯器 / 調(diào)試器之類的開發(fā)工具。

[if !supportLists]·?[endif]JVM 是 java 虛擬機,當(dāng)我們運行一個程序時,JVM 負責(zé)將字節(jié)碼轉(zhuǎn)換為特定機器代碼,JVM 提供了內(nèi)存管理 / 垃圾回收和安全機制等。

這種獨立于硬件和操作系統(tǒng),正是java 程序可以一次編寫多處執(zhí)行的原因。

區(qū)別:

[if !supportLists]·?[endif]JDK 用于開發(fā),JRE 用于運行 java 程序;

[if !supportLists]·?[endif]JDK 和 JRE 中都包含 JVM;

[if !supportLists]·?[endif]JVM 是 java 編程語言的核心并且具有平臺獨立性。

篇幅原因,需要詳細答案的可以加Java校招資料QQ群:967051845

Java 中常見集合

[if !supportLists]1.?[endif]說說常見的集合有哪些吧?

[if !supportLists]2.?[endif]HashMap 和 Hashtable 的區(qū)別有哪些?(必問)

[if !supportLists]3.?[endif]HashMap 的底層實現(xiàn)你知道嗎?

[if !supportLists]4.?[endif]ConcurrentHashMap 和 Hashtable 的區(qū)別? (必問)

[if !supportLists]5.?[endif]HashMap 的長度為什么是 2 的冪次方?

[if !supportLists]6.?[endif]List 和 Set 的區(qū)別是啥?

[if !supportLists]7.?[endif]List、Set 和 Map 的初始容量和加載因子

[if !supportLists]8.?[endif]Comparable 接口和 Comparator 接口有什么區(qū)別?

[if !supportLists]9.?[endif]Java 集合的快速失敗機制 “fail-fast”

高并發(fā)編程

在Java 5.0 提供了 java.util.concurrent(簡稱 JUC )包,在此包中增加了在并發(fā)編程中很常用的實用工具類,用于定義類似于線程的自定義子系統(tǒng),包括線程池、異步 IO 和輕量級任務(wù)框架。

[if !supportLists]1.?[endif]多線程和單線程的區(qū)別和聯(lián)系:

[if !supportLists]2.?[endif]如何指定多個線程的執(zhí)行順序?

[if !supportLists]3.?[endif]線程和進程的區(qū)別(必考)

[if !supportLists]4.?[endif]多線程產(chǎn)生死鎖的4 個必要條件?

[if !supportLists]5.?[endif]sleep( ) 和 wait( n)、wait( ) 的區(qū)別:

[if !supportLists]6.?[endif]synchronized 關(guān)鍵字:

[if !supportLists]7.?[endif]volatile 關(guān)鍵字

[if !supportLists]8.?[endif]ThreadLocal(線程局部變量)關(guān)鍵字:

[if !supportLists]9.?[endif]Atomic 關(guān)鍵字:

[if !supportLists]10.?[endif]線程池有了解嗎?(必考)

JVM 內(nèi)存管理

既然是Java 開發(fā)面試,那么對 JVM 的考察當(dāng)然也是必須的,面試官一般會問你對 JVM 有了解嗎?

我通常都會把我所了解的都說一遍,包括:JVM 內(nèi)存劃分、JVM 垃圾回收的含義,有哪些 GC 算法,年輕代和老年代各自的特點統(tǒng)統(tǒng)闡述一遍。

[if !supportLists]1.?[endif]JVM 內(nèi)存劃分:

[if !supportLists]2.?[endif]類似-Xms、-Xmn 這些參數(shù)的含義:

[if !supportLists]3.?[endif]垃圾回收算法有哪些?

[if !supportLists]4.?[endif]root 搜索算法中,哪些可以作為 root?

[if !supportLists]5.?[endif]GC 什么時候開始?

[if !supportLists]6.?[endif]內(nèi)存泄漏和內(nèi)存溢出

Java 8 相關(guān)知識

關(guān)于Java8 中新知識點,面試官會讓你說說 Java8 你了解多少,下邊主要闡述我所了解,并且在面試中回答的 Java8 新增知識點。

0.1 HashMap 的底層實現(xiàn)有變化

[if !supportLists]1.?[endif]JVM 內(nèi)存管理方面,由元空間代替了永久代。

[if !supportLists]2.?[endif]Lambda 表達式

[if !supportLists]3.?[endif]函數(shù)式接口

[if !supportLists]4.?[endif]引入重復(fù)注解

[if !supportLists]5.?[endif]接口中可以實現(xiàn)方法default 方法。

[if !supportLists]6.?[endif]注解的使用場景拓寬

[if !supportLists]7.?[endif]新的包java.time 包

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

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

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