前言:由于篇幅有限,只展示了部分知識點,如需更多電子資源,無償共享 歡迎評論區留言+1!或者加文尾助理微信!(備注007)

騰訊的Java面試題
TCP和UDP的區別,TCP為什么是三次握手,不是兩次,
答:1、因為tcp是全雙工協議,區別在于前者可靠,后者不可靠,以及效率更高,
Dubbo面試題
dubbo和dubbox之間的區別?
答:Dubbox 和Dubbo本質上沒有區別,名字的含義擴展了Dubbo而已,以下擴展出來的功能
支持REST風格遠程呼叫(HTTP + JSON/XML);
支持基于Kryo和FST的Java高效序列化實作;
支持基于Jackson的JSON序列化;
支持基于嵌入式Tomcat的HTTP remoting體系;
升級Spring至3.x;
升級ZooKeeper客戶端;
支持完全基于Java代碼的Dubbo配置;
Java List面試題
ArrayList和LinkedList的區別?分別用在什么場景?
答:①ArrayList和LinkedList可想從名字分析,它們一個是Array(動態陣列)的資料結構,一個是Link(鏈表)的資料結構,此外,它們兩個都是對List介面的實作,
前者是陣列佇列,相當于動態陣列;后者為雙向鏈表結構,也可當作堆疊、佇列、雙端佇列
②當隨機訪問List時(get和set操作),ArrayList比LinkedList的效率更高,因為LinkedList是線性的資料存盤方式,所以需要移動指標從前往后依次查找,
③當對資料進行增加和洗掉的操作時(add和remove操作),LinkedList比ArrayList的效率更高,因為ArrayList是陣列,所以在其中進行增刪操作時,會對操作點之后所有資料的下標索引造成影響,需要進行資料的移動,
④從利用效率來看,ArrayList自由性較低,因為它需要手動的設定固定大小的容量,但是它的使用比較方便,只需要創建,然后添加資料,通過呼叫下標進行使用;而LinkedList自由性較高,能夠動態的隨資料量的變化而變化,但是它不便于使用,
⑤ArrayList主要控制元件開銷在于需要在lList串列預留一定空間;而LinkList主要控制元件開銷在于需要存盤結點資訊以及結點指標資訊,
場景:
鏈表,插入洗掉快,查找修改慢, 適用于頻繁增刪的場景,
陣列,查找快,插入洗掉慢, 適用于頻繁查找和修改的場景,
Java Map集合面試題
Collection集合介面和Map介面有什么關系?
答:沒有直接關系,但是一些子類會有依賴,Collection是最基本的集合介面,宣告了適用于JAVA集合(只包括Set和List)的通用方法,Map介面并不是Collection介面的子介面,但是它仍然被看作是Collection框架的一部分,
Spring面試題
什么是Spring的內部bean?
答:當一個bean只能被某一個類使用時,稱該bean為內部bean,
Zookeeper面試題
zookeeper是什么框架?
答:ZooKeeper是一個分布式的,開放原始碼的分布式應用程式協調服務
騰訊Java面試題:說說Java中例外的分類,
答:例外分類:
Throwable -> Error,Exception
Error:嚴重問題,例如記憶體溢位
Exception ->運行時例外: RuntimeException,編譯時例外
AWTError
Dubbo面試題:一般使用什么注冊中心?還有別的選擇嗎?
答:Dubbo 一般用zookeeper做注冊中心
還可以用:Redis,資料庫,consul
Java List面試題:怎么給List排序?
答:List 如何排序:
①:使用 Collections.sort 默認正序,可以傳第二個引數自定義排序
②:自定義bean實作 Comparable 介面,
③: 實作Comparator介面自定義比較器
Java Map集合面試題:你都知道哪些常用的Map集合?
答:HashMap、HashTable、TreeMap、LinkedHashMap
Spring面試題:為什么說Spring是一個容器?
答:Spring的核心理念就是更方便地管理Java Bean,而被管理的Java Bean存快取在一個Map中,這個Map就可以理解為用來裝Java Bean的容器,即IOC容器
1、Java 是如何實作跨平臺的?
注意:跨平臺的是 Java 程式,而不是 JVM,JVM 是用 C/C++ 開發的,是編譯后的機器碼,不能跨平臺,不同平臺下需要安裝不同版本的 JVM
答:我們撰寫的 Java 原始碼,編譯后會生成一種 .class 檔案,稱為位元組碼檔案,Java 虛擬機(JVM)就是負責將位元組碼檔案翻譯成特定平臺下的機器碼然后運行,也就是說,只要在不同平臺上安裝對應的 JVM,就可以運行位元組碼檔案,運行我們撰寫的 Java 程式,
而這個程序,我們撰寫的 Java 程式沒有做任何改變,僅僅是通過 JVM 這一 “中間層” ,就能在不同平臺上運行,真正實作了 “一次編譯,到處運行” 的目的,
2、什么是 JVM ?
決議:不僅僅是基本概念,還有 JVM 的作用,
答:JVM,即 Java Virtual Machine,Java 虛擬機,它通過模擬一個計算機來達到一個計算機所具有的的計算功能,JVM 能夠跨計算機體系結構來執行 Java 位元組碼,主要是由于 JVM 屏蔽了與各個計算機平臺相關的軟體或者硬體之間的差異,使得與平臺相關的耦合統一由 JVM 提供者來實作,
3、JVM 由哪些部分組成?
決議:這是對 JVM 體系結構的考察
答:JVM 的結構基本上由 4 部分組成:
類加載器,在 JVM 啟動時或者類運行時將需要的 class 加載到 JVM 中
執行引擎,執行引擎的任務是負責執行 class 檔案中包含的位元組碼指令,相當于實際機器上的 CPU
記憶體區,將記憶體劃分成若干個區以模擬實際機器上的存盤、記錄和調度功能模塊,如實際機器上的各種功能的暫存器或者 PC 指標的記錄器等
本地方法呼叫,呼叫 C 或 C++ 實作的本地方法的代碼回傳結果
4、類加載器是有了解嗎?
決議:底層原理的考察,其中涉及到類加載器的概念,功能以及一些底層的實作,
答:顧名思義,類加載器(class loader)用來加載 Java 類到 Java 虛擬機中,一般來說,Java 虛擬機使用 Java 類的方式如下:Java 源程式(.java 檔案)在經過 Java 編譯器編譯之后就被轉換成 Java 位元組代碼(.class 檔案),
類加載器負責讀取 Java 位元組代碼,并轉換成 java.lang.Class類的一個實體,每個這樣的實體用來表示一個 Java 類,通過此實體的 newInstance()方法就可以創建出該類的一個物件,實際的情況可能更加復雜,比如 Java 位元組代碼可能是通過工具動態生成的,也可能是通過網路下載的,
5、面試官:Java 虛擬機是如何判定兩個 Java 類是相同的?
答:Java 虛擬機不僅要看類的全名是否相同,還要看加載此類的類加載器是否一樣,只有兩者都相同的情況,才認為兩個類是相同的,即便是同樣的位元組代碼,被不同的類加載器加載之后所得到的類,也是不同的,比如一個 Java 類 com.example.Sample,編譯之后生成了位元組代碼檔案 Sample.class,兩個不同的類加載器 ClassLoaderA和 ClassLoaderB分別讀取了這個 Sample.class檔案,并定義出兩個 java.lang.Class類的實體來表示這個類,這兩個實體是不相同的,對于 Java 虛擬機來說,它們是不同的類,試圖對這兩個類的物件進行相互賦值,會拋出運行時例外 ClassCastException,
6、類似-Xms、-Xmn這些引數的含義:
答:
堆記憶體分配:
JVM初始分配的記憶體由-Xms指定,默認是物理記憶體的1/64
JVM最大分配的記憶體由-Xmx指定,默認是物理記憶體的1/4
默認空余堆記憶體小于40%時,JVM就會增大堆直到-Xmx的最大限制;空余堆記憶體大于70%時,JVM會減少堆直到 -Xms的最小限制,
因此服務器一般設定-Xms、-Xmx相等以避免在每次GC 后調整堆的大小,物件的堆記憶體由稱為垃圾回收器的自動記憶體管理系統回收,
非堆記憶體分配:
JVM使用-XX:PermSize設定非堆記憶體初始值,默認是物理記憶體的1/64;
由XX:MaxPermSize設定最大非堆記憶體的大小,默認是物理記憶體的1/4,
-Xmn2G:設定年輕代大小為2G,
-XX:SurvivorRatio,設定年輕代中Eden區與Survivor區的比值,
-
sleep( ) 和 wait( n)、wait( ) 的區別?
sleep 方法: 是 Thread 類的靜態方法,當前執行緒將睡眠 n 毫秒,執行緒進入阻塞狀態,當睡眠時間到了,會解除阻塞,進行可運行狀態,等待 CPU 的到來,睡眠不釋放鎖(如果有的話);
wait 方法: 是 Object 的方法,必須與 synchronized 關鍵字一起使用,執行緒進入阻塞狀態,當 notify 或者 notifyall 被呼叫后,會解除阻塞,但是,只有重新占用互斥鎖之后才會進入可運行狀態,睡眠時,釋放互斥鎖,
2、synchronized 關鍵字?
答:底層實作:
進入時,執行 monitorenter,將計數器 +1,釋放鎖 monitorexit 時,計數器-1;
當一個執行緒判斷到計數器為 0 時,則當前鎖空閑,可以占用;反之,當前執行緒進入等待狀態,
含義:(monitor 機制)
Synchronized 是在加鎖,加物件鎖,物件鎖是一種重量鎖(monitor),synchronized 的鎖機制會根據執行緒競爭情況在運行時會有偏向鎖(單一執行緒)、輕量鎖(多個執行緒訪問 synchronized 區域)、物件鎖(重量鎖,多個執行緒存在競爭的情況)、自旋鎖等,
該關鍵字是一個幾種鎖的封裝,
3、volatile 關鍵字?
答:該關鍵字可以保證可見性不保證原子性,
功能:
-
主記憶體和作業記憶體,直接與主記憶體產生互動,進行讀寫操作,保證可見性;
-
禁止 JVM 進行的指令重排序,
決議:關于指令重排序的問題,可以查閱 DCL 雙檢鎖失效相關資料,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/292934.html
標籤:java
