這48個Java技術點,讓你的面試成功率提高5倍!

JAVA基礎 (文末有彩蛋) JAVA中的幾種基本類型,各佔用多少字節?html

這48個Java技術點,讓你的面試成功率提高5倍! 下圖單位是bit,非字節 1B=8bitjava

這48個Java技術點,讓你的面試成功率提高5倍! String能被繼承嗎?爲何?react

不能夠,由於String類有final修飾符,而final修飾的類是不能被繼承的,實現細節不容許改變。日常咱們定義的String str=」a」;其實和String str=new String(「a」)仍是有差別的。git

前者默認調用的是String.valueOf來返回String實例對象,至於調用哪一個則取決於你的賦值,好比String num=1,調用的是web

public static String valueOf(int i) {面試

return Integer.toString(i);算法

}spring

後者則是調用以下部分:編程

public String(String original) {bootstrap

this.value = original.value;

this.hash = original.hash;

}

最後咱們的變量都存儲在一個char數組中

private final char value[];

也爲你們推薦了技術教程:

Java8零基礎入門https://edu.csdn.net/course/detail/3044?utm_source=juejinxk

Drools7規則引擎入門教程https://edu.csdn.net/course/detail/5523?utm_source=juejinxk

Spring Boot開發小而美的我的博客https://edu.csdn.net/course/detail/6359?utm_source=juejinxk

探究Linux的總線、設備、驅動模型https://edu.csdn.net/course/detail/5329?utm_source=juejinxk

軟件測試入門到精通https://edu.csdn.net/course/detail/8729?utm_source=juejinxk

Spring Boot 入門https://edu.csdn.net/course/detail/9068?utm_source=juejinxk

Java多線程+網銀取款案例精講https://edu.csdn.net/course/detail/8973?utm_source=juejinxk

String, Stringbuffer, StringBuilder 的區別。

String 字符串常量(final修飾,不可被繼承),String是常量,當建立以後即不能更改。(能夠經過StringBuffer和StringBuilder建立String對象(經常使用的兩個字符串操做類)。)

StringBuffer 字符串變量(線程安全),其也是final類別的,不容許被繼承,其中的絕大多數方法都進行了同步處理,包括經常使用的Append方法也作了同步處理(synchronized修飾)。其自jdk1.0起就已經出現。其toString方法會進行對象緩存,以減小元素複製開銷。

public synchronized String toString() {

if (toStringCache == null) {

toStringCache = Arrays.copyOfRange(value, 0, count);

}

return new String(toStringCache, true);

}

StringBuilder 字符串變量(非線程安全)其自jdk1.5起開始出現。與StringBuffer同樣都繼承和實現了一樣的接口和類,方法除了沒使用synch修飾之外基本一致,不一樣之處在於最後toString的時候,會直接返回一個新對象。

public String toString() {

// Create a copy, don’t share the array

return new String(value, 0, count);

}

ArrayList 和 LinkedList 有什麼區別。

ArrayList和LinkedList都實現了List接口,有如下的不一樣點:

一、ArrayList是基於索引的數據接口,它的底層是數組。它能夠以O(1)時間複雜度對元素進行隨機訪問。與此對應,LinkedList是以元素列表的形式存儲它的數據,每個元素都和它的前一個和後一個元素連接在一塊兒,在這種狀況下,查找某個元素的時間複雜度是O(n)。

二、相對於ArrayList,LinkedList的插入,添加,刪除操做速度更快,由於當元素被添加到集合任意位置的時候,不須要像數組那樣從新計算大小或者是更新索引。

三、LinkedList比ArrayList更佔內存,由於LinkedList爲每個節點存儲了兩個引用,一個指向前一個元素,一個指向下一個元素。

講講類的實例化順序,好比父類靜態數據,構造函數,字段,子類靜態數據,構造函數,字段,當 new 的時候, 他們的執行順序。

此題考察的是類加載器實例化時進行的操做步驟(加載–>鏈接->初始化)。

父類靜態代變量、

父類靜態代碼塊、

子類靜態變量、

子類靜態代碼塊、

父類非靜態變量(父類實例成員變量)、

父類構造函數、

子類非靜態變量(子類實例成員變量)、

子類構造函數。

測試demo:blog.csdn.net/u014042066/…

參閱個人博客《深刻理解類加載》:blog.csdn.net/u014042066/…

用過哪些 Map 類,都有什麼區別,HashMap 是線程安全的嗎,併發下使用的 Map 是什麼,他們內部原理分別是什麼,好比存儲方式, hashcode,擴容, 默認容量等。

hashMap是線程不安全的,HashMap是數組+鏈表+紅黑樹(JDK1.8增長了紅黑樹部分)實現的,採用哈希表來存儲的,

參照該連接:zhuanlan.zhihu.com/p/21673805

JAVA8 的 ConcurrentHashMap 爲何放棄了分段鎖,有什麼問題嗎,若是你來設計,你如何設計。

參照:yq.aliyun.com/articles/36…

有沒有有順序的 Map 實現類, 若是有, 他們是怎麼保證有序的。

TreeMap和LinkedHashMap是有序的(TreeMap默認升序,LinkedHashMap則記錄了插入順序)。

參照:uule.iteye.com/blog/152229…

抽象類和接口的區別,類能夠繼承多個類麼,接口能夠繼承多個接口麼,類能夠實現多個接口麼。

一、抽象類和接口都不能直接實例化,若是要實例化,抽象類變量必須指向實現全部抽象方法的子類對象,接口變量必須指向實現全部接口方法的類對象。

二、抽象類要被子類繼承,接口要被類實現。

三、接口只能作方法申明,抽象類中能夠作方法申明,也能夠作方法實現

四、接口裏定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量。

五、抽象類裏的抽象方法必須所有被子類所實現,若是子類不能所有實現父類抽象方法,那麼該子類只能是抽象類。一樣,一個實現接口的時候,如不能所有實現接口方法,那麼該類也只能爲抽象類。

六、抽象方法只能申明,不能實現。abstract void abc();不能寫成abstract void abc(){}。

七、抽象類裏能夠沒有抽象方法

八、若是一個類裏有抽象方法,那麼這個類只能是抽象類

九、抽象方法要被實現,因此不能是靜態的,也不能是私有的。

十、接口可繼承接口,並可多繼承接口,但類只能單根繼承。

繼承和聚合的區別在哪。

繼承指的是一個類(稱爲子類、子接口)繼承另外的一個類(稱爲父類、父接口)的功能,並能夠增長它本身的新功能的能力,繼承是類與類或者接口與接口之間最多見的關係;在Java中此類關係經過關鍵字extends明確標識,在設計時通常沒有爭議性;

這48個Java技術點,讓你的面試成功率提高5倍! 聚合是關聯關係的一種特例,他體現的是總體與部分、擁有的關係,即has-a的關係,此時總體與部分之間是可分離的,他們能夠具備各自的生命週期,部分能夠屬於多個總體對象,也能夠爲多個總體對象共享;好比計算機與CPU、公司與員工的關係等;表如今代碼層面,和關聯關係是一致的,只能從語義級別來區分;

這48個Java技術點,讓你的面試成功率提高5倍! 參考:www.cnblogs.com/jiqing9006/…

講講你理解的 nio和 bio 的區別是啥,談談 reactor 模型。

IO是面向流的,NIO是面向緩衝區的

參考:zhuanlan.zhihu.com/p/23488863

developer.51cto.com/art/201103/…

www.jianshu.com/p/3f703d3d8…

反射的原理,反射建立類實例的三種方式是什麼

參照:www.jianshu.com/p/3ea4a6b57…

blog.csdn.net/yongjian109…

反射中,Class.forName 和 ClassLoader 區別。

my.oschina.net/gpzhang/blo…

描述動態代理的幾種實現方式,分別說出相應的優缺點。

Jdk cglib jdk底層是利用反射機制,須要基於接口方式,這是因爲

Proxy.newProxyInstance(target.getClass().getClassLoader(),

target.getClass().getInterfaces(), this);

Cglib則是基於asm框架,實現了無反射機制進行代理,利用空間來換取了時間,代理效率高於jdk

lrd.ele.me/2017/01/09/…

動態代理與 cglib 實現的區別

同上(基於invocationHandler和methodInterceptor)

爲何 CGlib 方式能夠對接口實現代理。

同上

final 的用途

類、變量、方法

www.importnew.com/7553.html

寫出三種單例模式實現。

懶漢式單例,餓漢式單例,雙重檢查等

參考:my.oschina.net/dyyweb/blog…

如何在父類中爲子類自動完成全部的 hashcode 和 equals 實現?這麼作有何優劣。

同時複寫hashcode和equals方法,優點能夠添加自定義邏輯,且沒必要調用超類的實現。

參照:java-min.iteye.com/blog/141672…

請結合 OO 設計理念,談談訪問修飾符 public、private、protected、default 在應用設計中的做用。

訪問修飾符,主要標示修飾塊的做用域,方便隔離防禦

同一個類 同一個包 不一樣包的子類 不一樣包的非子類

1 2 Private √

Default √ √

Protected √ √ √

Public √ √ √ √

public: Java語言中訪問限制最寬的修飾符,通常稱之爲「公共的」。被其修飾的類、屬性以及方法不

僅能夠跨類訪問,並且容許跨包(package)訪問。

private: Java語言中對訪問權限限制的最窄的修飾符,通常稱之爲「私有的」。被其修飾的類、屬性以

及方法只能被該類的對象訪問,其子類不能訪問,更不能容許跨包訪問。

protect: 介於public 和 private 之間的一種訪問修飾符,通常稱之爲「保護形」。被其修飾的類、

屬性以及方法只能被類自己的方法及子類訪問,即便子類在不一樣的包中也能夠訪問。

default:即不加任何訪問修飾符,一般稱爲「默認訪問模式「。該模式下,只容許在同一個包中進行訪

問。

深拷貝和淺拷貝區別。

www.oschina.net/translate/j…

數組和鏈表數據結構描述,各自的時間複雜度

blog.csdn.net/snow_wu/art…

error 和 exception 的區別,CheckedException,RuntimeException 的區別

blog.csdn.net/woshixuye/a…

請列出 5 個運行時異常。

同上

在本身的代碼中,若是建立一個 java.lang.String 對象,這個對象是否能夠被類加載器加載?爲何

類加載無須等到「首次使用該類」時加載,jvm容許預加載某些類。。。。

www.cnblogs.com/jasonstorm/…

說一說你對 java.lang.Object 對象中 hashCode 和 equals 方法的理解。在什麼場景下須要從新實現這兩個方法。

參考上邊試題

在 jdk1.5 中,引入了泛型,泛型的存在是用來解決什麼問題。

泛型的本質是參數化類型,也就是說所操做的數據類型被指定爲一個參數,泛型的好處是在編譯的時候檢查類型安全,而且全部的強制轉換都是自動和隱式的,以提升代碼的重用率

baike.baidu.com/item/java泛型

這樣的 a.hashcode() 有什麼用,與 a.equals(b)有什麼關係。

hashcode

hashcode()方法提供了對象的hashCode值,是一個native方法,返回的默認值與System.identityHashCode(obj)一致。

一般這個值是對象頭部的一部分二進制位組成的數字,具備必定的標識對象的意義存在,但毫不定於地址。

做用是:用一個數字來標識對象。好比在HashMap、HashSet等相似的集合類中,若是用某個對象自己做爲Key,即要基於這個對象實現Hash的寫入和查找,那麼對象自己如何實現這個呢?就是基於hashcode這樣一個數字來完成的,只有數字才能完成計算和對比操做。

hashcode是否惟一

hashcode只能說是標識對象,在hash算法中能夠將對象相對離散開,這樣就能夠在查找數據的時候根據這個key快速縮小數據的範圍,但hashcode不必定是惟一的,因此hash算法中定位到具體的鏈表後,須要循環鏈表,而後經過equals方法來對比Key是不是同樣的。

equals與hashcode的關係

equals相等兩個對象,則hashcode必定要相等。可是hashcode相等的兩個對象不必定equals相等。

segmentfault.com/a/119000000…

有沒有可能 2 個不相等的對象有相同的 hashcode。

Java 中的 HashSet 內部是如何工做的。

底層是基於hashmap實現的

wiki.jikexueyuan.com/project/jav…

什麼是序列化,怎麼序列化,爲何序列化,反序列化會遇到什麼問題,如何解決。

www.importnew.com/17964.html

JVM 知識 什麼狀況下會發生棧內存溢出。

若是線程請求的棧深度大於虛擬機所容許的深度,將拋出StackOverflowError異常。 若是虛擬機在動態擴展棧時沒法申請到足夠的內存空間,則拋出OutOfMemoryError異常。

參照:wiki.jikexueyuan.com/project/jav…

JVM 的內存結構,Eden 和 Survivor 比例。

這48個Java技術點,讓你的面試成功率提高5倍! eden 和 survior 是按8比1分配的

blog.csdn.net/lojze_ly/ar…

jvm 中一次完整的 GC 流程是怎樣的,對象如何晉升到老年代,說說你知道的幾種主要的jvm 參數。

對象誕生即新生代->eden,在進行minor gc過程當中,若是依舊存活,移動到from,變成Survivor,進行標記代數,如此檢查必定次數後,晉升爲老年代,

www.cnblogs.com/redcreen/ar…

ifeve.com/useful-jvm-…

wangkang007.gitbooks.io/jvm/content…

你知道哪幾種垃圾收集器,各自的優缺點,重點講下 cms,包括原理,流程,優缺點

Serial、parNew、ParallelScavenge、SerialOld、ParallelOld、CMS、G1

wangkang007.gitbooks.io/jvm/content…

垃圾回收算法的實現原理。

www.importnew.com/13493.html

當出現了內存溢出,你怎麼排錯。

首先分析是什麼類型的內存溢出,對應的調整參數或者優化代碼。

wangkang007.gitbooks.io/jvm/content…

JVM 內存模型的相關知識瞭解多少,好比重排序,內存屏障,happen-before,主內存,工做內存等。

內存屏障:爲了保障執行順序和可見性的一條cpu指令

重排序:爲了提升性能,編譯器和處理器會對執行進行重拍

happen-before:操做間執行的順序關係。有些操做先發生。

主內存:共享變量存儲的區域便是主內存

工做內存:每一個線程copy的本地內存,存儲了該線程以讀/寫共享變量的副本

ifeve.com/java-memory…

www.jianshu.com/p/d3fda02d4…

blog.csdn.net/kenzyq/arti…

簡單說說你瞭解的類加載器。

類加載器的分類(bootstrap,ext,app,curstom),類加載的流程(load-link-init)

blog.csdn.net/gjanyanlig/…

講講 JAVA 的反射機制。

Java程序在運行狀態能夠動態的獲取類的全部屬性和方法,並實例化該類,調用方法的功能

baike.baidu.com/link?url=C7…

大家線上應用的 JVM 參數有哪些。

-server

Xms6000M

-Xmx6000M

-Xmn500M

-XX:PermSize=500M

-XX:MaxPermSize=500M

-XX:SurvivorRatio=65536

-XX:MaxTenuringThreshold=0

-Xnoclassgc

-XX:+DisableExplicitGC

-XX:+UseParNewGC

-XX:+UseConcMarkSweepGC

-XX:+UseCMSCompactAtFullCollection

-XX:CMSFullGCsBeforeCompaction=0

-XX:+CMSClassUnloadingEnabled

-XX:-CMSParallelRemarkEnabled

-XX:CMSInitiatingOccupancyFraction=90

-XX:SoftRefLRUPolicyMSPerMB=0

-XX:+PrintClassHistogram

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-XX:+PrintHeapAtGC

-Xloggc:log/gc.log

g1 和 cms 區別,吞吐量優先和響應優先的垃圾收集器選擇。

Cms是以獲取最短回收停頓時間爲目標的收集器。基於標記-清除算法實現。比較佔用cpu資源,切易形成碎片。

G1是面向服務端的垃圾收集器,是jdk9默認的收集器,基於標記-整理算法實現。可利用多核、多cpu,保留分代,實現可預測停頓,可控。

blog.csdn.net/linhu007/ar…

請解釋以下 jvm 參數的含義:

-server -Xms512m -Xmx512m -Xss1024K

-XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20

XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly。

Server模式啓動

最小堆內存512m

最大512m

每一個線程棧空間1m

永久代256

最大永久代256

最大轉爲老年代檢查次數20

Cms回收開啓時機:內存佔用80%

命令JVM不基於運行時收集的數據來啓動CMS垃圾收集週期

開源框架知識 簡單講講 tomcat 結構,以及其類加載器流程。

Server- –多個service

Container級別的:–>engine–》host–>context

Listenter

Connector

Logging、Naming、Session、JMX等等

這48個Java技術點,讓你的面試成功率提高5倍! 經過WebappClassLoader 加載class

www.ibm.com/developerwo…

blog.csdn.net/dc_726/arti…

www.cnblogs.com/xing901022/…

www.jianshu.com/p/62ec97799…

tomcat 如何調優,涉及哪些參數。

硬件上選擇,操做系統選擇,版本選擇,jdk選擇,配置jvm參數,配置connector的線程數量,開啓gzip壓縮,trimSpaces,集羣等

blog.csdn.net/lifetragedy…

講講 Spring 加載流程。

經過listener入口,核心是在AbstractApplicationContext的refresh方法,在此處進行裝載bean工廠,bean,建立bean實例,攔截器,後置處理器等。

www.ibm.com/developerwo…

講講 Spring 事務的傳播屬性。

七種傳播屬性。

事務傳播行爲

所謂事務的傳播行爲是指,若是在開始當前事務以前,一個事務上下文已經存在,此時有若干選項能夠指定一個事務性方法的執行行爲。在TransactionDefinition定義中包括了以下幾個表示傳播行爲的常量:

TransactionDefinition.PROPAGATION_REQUIRED:若是當前存在事務,則加入該事務;若是當前沒有事務,則建立一個新的事務。

TransactionDefinition.PROPAGATION_REQUIRES_NEW:建立一個新的事務,若是當前存在事務,則把當前事務掛起。

TransactionDefinition.PROPAGATION_SUPPORTS:若是當前存在事務,則加入該事務;若是當前沒有事務,則以非事務的方式繼續運行。

TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事務方式運行,若是當前存在事務,則把當前事務掛起。

TransactionDefinition.PROPAGATION_NEVER:以非事務方式運行,若是當前存在事務,則拋出異常。

TransactionDefinition.PROPAGATION_MANDATORY:若是當前存在事務,則加入該事務;若是當前沒有事務,則拋出異常。

TransactionDefinition.PROPAGATION_NESTED:若是當前存在事務,則建立一個事務做爲當前事務的嵌套事務來運行;若是當前沒有事務,則該取值等價於TransactionDefinition.PROPAGATION_REQUIRED。

www.ibm.com/developerwo…

Spring 如何管理事務的。

編程式和聲明式

同上

Spring 怎麼配置事務(具體說出一些關鍵的 xml 元素)。

說說你對 Spring 的理解,非單例注入的原理?它的生命週期?循環注入的原理, aop 的實現原理,說說 aop 中的幾個術語,它們是怎麼相互工做的。

核心組件:bean,context,core,單例注入是經過單例beanFactory進行建立,生命週期是在建立的時候經過接口實現開啓,循環注入是經過後置處理器,aop其實就是經過反射進行動態代理,pointcut,advice等。

Aop相關:blog.csdn.net/csh62436618…

Springmvc 中 DispatcherServlet 初始化過程。

入口是web.xml中配置的ds,ds繼承了HttpServletBean,FrameworkServlet,經過其中的init方法進行初始化裝載bean和實例,initServletBean是實際完成上下文工做和bean初始化的方法。

www.mamicode.com/info-detail…

彩蛋:須要相關課程資源推薦能夠留言~

相關文章
相關標籤/搜索