摘要:近段時間在準備實習的面試,在網上看到一份面試題,就慢慢試著做,爭取每天積累一點點。現在每天給自己在面試題編寫的任務是題,有時候忙起來可能就沒有時間寫了,但是爭取日更,即使當天沒更也會在之后的更新補上。
????近段時間在準備實習的面試,在網上看到一份面試題,就慢慢試著做,爭取每天積累一點點。
????暫時手頭上的面試題只有一份,題量還是挺大的,有208題,所以可能講的不是很詳細,只是我自己幫助記憶的筆記,希望對你們有啟發,同時有什么說的不準確的可以互相討論一下。
????現在每天給自己在面試題編寫的任務是4題,有時候忙起來可能就沒有時間寫了,但是爭取日更,即使當天沒更也會在之后的更新補上。
JDK 和 JRE 區別
JDK全名為Java development kit
JRE全名為Java Runtime environment
JDK包括JRE,編譯器javac,以及很多調試和分析工具,例如jconsole等等
Java程序運行環境必須有JRE
==和equals的區別
在基本數據類型對比中,==用于對比兩者是否相等,沒有equals的適用
equals是Object類的實例方法,若子類沒有重寫equals方法,則跟==作用一致
在引用數據類型對比中,==用于對比實例內存地址是否相同,若引用都指向同一對象,則返回true
在引用數據類型對比中,euqals的返回值取決于重寫邏輯
兩個對象的 hashCode()相同,則 equals()也一定為 true,對嗎
equals用于對比對象間是否相等
hasCode則是給對象返回一個hash code值
在使用Object默認的hasCode以及equals時,equals返回為true
若hasCode或equals任一方法被重寫,返回的結果取決于重寫邏輯的實現
final 在 Java 中作用
final可以修飾類,方法,變量
final修飾類,則該類不能被繼承,且類內所有方法自動指定為final方法
final修飾方法,則該方法不能被繼承,類內private隱式指定為final方法
final修飾基本數據類型變量,則該變量需在定義時指定初始值,且后續該值不能被改變
final修改引用類型的變量,則該變量不能再指向其他對象。
final修飾變量,在編譯時JVM已經將他作為常量,存放于常量池中
Java 中的 Math.round(-1.5)
Java 中的 Math.round(-1.5) 等于-1
Java 中的 Math.round(-1.4) 等于-1
Java 中的 Math.round(-1.6) 等于-2
String 屬于基礎的數據類型嗎
String不屬于基礎數據類型,屬于引用數據類型
String擁有很多方法對字符串進行處理,翻轉裁切追加等等
Java 中操作字符串都有哪些類?它們之間有什么區別?
StringBuilder以及StringBuffer
StringBuffer為線程安全的,性能較StringBuilder弱
StringBuilder為線程不安全的,但是性能比StringBuffer好
若無線程安全的考慮,通常使用StringBuilder
String str="i"與 String str=new String(“i”)一樣嗎
不一樣
兩者的引用都存放于棧中,但是前一引用指向常量池,后一引用指向堆中對象中,對象再指向常量池
如何將字符串反轉
采用遞歸以及二分法進行字符串反轉
調用String中的reverse方法進行反轉
正序遍歷字符串倒序拼接字符串
將字符串轉換成字符數組,倒序遍歷數組拼接
正序遍歷1/2長度字符串,將開頭以及對應結尾的字符對調
String 類的常用方法
字符類
* charAt(int),根據索引找到索引上字符 * indexOf,尋找條件在當前字符串上的索引
字符串信息類
* length,字串長度 * isEmpty,判斷字符串是否為空
字符串操作類
* trim,刪除字符串中所有空格 * substring,截取一部分字符串 * toUpperCase,將字符串全變成大寫 * spilt,根據條件切割字符串并返回數組 * concat,追加字符串
對比
* equals * compareTo
抽象類必須要有抽象方法嗎
抽象類中可以不含有抽象方法,日常開發主要使用抽象類作為模板,若抽象類不含抽象方法,我覺得喪失了抽象類原有的功能
普通類和抽象類有哪些區別
普通類可以實例化,抽象類不可以
普通類不能有抽象方法,抽象類可以含有抽象方法
抽象類被繼承時必須選擇繼承父類的一個構造方法
抽象類能使用 final 修飾嗎?
抽象類不能用final修飾。
final修飾的類不能被繼承,抽象類設計的初衷就是為了被繼承
接口和抽象類有什么區別?
接口不能有抽象方法,抽象類可以
接口內方法只聲明不實現,抽象類的方法可以有具體實現
接口內變量默認為final static,抽象類變量跟普通類一致
接口方法默認是public
普通類可以實現多個接口,只能繼承一個抽象類
Java 中 IO 流分為幾種?
操作對象來看,分為字節流,字符流
流的流向來看,分為輸入流輸出流
總體來說,流分為節點流和處理流,應用了裝飾模式,用處理流包裝節點流,達到代碼通用性
BIO、NIO、AIO 有什么區別?
BIO,從發起I/O請求開始到接收結果,線程都是阻塞的
NIO,線程發起I/O請求后立刻返回,當接收數據時,I/O通知線程,線程阻塞獲取結果
AIO,線程發起I/O請求后立刻返回,I/O操作不阻塞線程,結果通過回調函數進行返回
File的常用方法都有哪些?
獲取文件名字及路徑
* getName,獲取文件名字 * getPath。獲取文件當前路徑 * getPath,獲取文件絕對路徑 * isAbsoulute,判斷文件是否絕對路徑
文件信息
* canRead/canWrite,是否可讀/可寫 * isFile,是否是文件 * isDirectory,是否是目錄 * length,文件內容長度
文件操作
* createFile,新建一個文件/目錄 * delete,刪除當前文件/目錄 * exists,判斷文件/目錄是否存在
Java 容器都有哪些?
java容器主要分兩種,單一數據類型以及鍵值對:Collection以及map
Collection包括List,Set,Queue,List為有序列表,Set為無序列表,Queue為隊列實現
Map子類以及接口底層實現不一樣,但是高層使用是一樣的
Collection 和 Collections 有什么區別?
Collection為java集合類,Collections為java集合操作類
Collections常用方法
* addAll * binarySearch,二分查找 * emptyList,返回一個有序空列表 * synchronizedXxx,將線程不安全的集合轉換成線程安全的集合
Collection具有Set,List,Queue子接口,用于多數據的存儲以及使用
List、Set、Map 之間的區別是什么?
Set為無序集合,List為有序列表,Map為鍵值對集合
Set的底層實現為:Map的所有value置為null封裝而成,Map的key是唯一的,所以Set不允許重復元素
Set不允許重復元素,List允許重復元素
Set和List只允許存儲單一元素,Map允許存儲有映射關系的鍵值對
HashMap 和 Hashtable 有什么區別?
HashMap為線程不安全,Hashtable線程安全
HashMap允許使用null作為key或value,Hashtable不允許
Hashtable使用Enumeration遍歷,HashMap沒有專門的迭代器,但是可以通過遍歷key的集合或者entry對,也可以使用java8的函數接口進行遍歷
如何決定使用 HashMap 還是 TreeMap?
HashMap為無序集合,TreeMap為有序集合
HashMap底層存儲結構為數組,TreeMap為紅黑樹
數據量大且需要按照key排序時,使用TreeMap
數據量小且對順序無要求時,使用HashMap
若查找操作占大部分時,使用HashMap,插入刪除大部分時使用TreeMap
說一下 HashMap 的實現原理?
HashMap底層封裝了一個Entry數組,元素位置基于Object類的hashCode函數計算
當出現哈希沖突時,采用拉鏈法解決沖突
數組的初始大小由capacity決定,默認是16
當數組達到一定限度時,觸發到負載因子的極限,數組進行動態擴容,擴容后的大小為原大小的兩倍
2019.4.24更新
說一下 HashSet 的實現原理?
HashSet底層為HashMap,方法幾乎都是調用HashMap相關方法實現
ArrayList 和 LinkedList 的區別是什么?
ArrayList底層實現為數組,當數組元素個數達到數組長度時,數組將進行動態擴容
LinkedList底層實現為鏈表,原則上不存在元素個數飽和的情況
ArrayList常用于隨機訪問場景
在添加刪除場景中,ArrayList主要耗時為System.arrayCopy,Linked
List則是通過for循環尋找插入位置。 * 數據量小于30,兩者沒有明顯差別,當數據量大于容量1/10時,LinkedList的效率沒有ArrayList高 * 在元素個數大致相等的情況下,兩者遍歷的性能差不多
如何實現數組和 List 之間的轉換?
List轉Array
調用List成員方法toArray
for循環生成Array
Array轉List
調用Arrays類方法asList
for循環生成
ArrayList 和 Vector 的區別是什么?
Vector為jdk1.0的集合類,內部通過數組實現,支持Enumeration遍歷
ArrayList為1.2的集合類,內部通過數組實現,支持Iterator遍歷
Vector線程同步,ArrayList線程不同步
內存不足時,Vector默認擴展1倍,ArrayList默認擴展1.5倍
Array 和 ArrayList 有何區別?
Array可以含有基本數據類型和引用類型,ArrayList只能包括引用類型
Array的大小是固定的,ArrayList大小可以動態增加
ArrayList對數據的處理方法比Array多,ArrayList為Array的加強版
Array的元素數據類型一樣,ArrayList在未指定泛型的前提下數據類型可以多樣
實際開發中Array不常用,主要用于確定元素個數的場景中。多用ArrayList
2019.04.25更新
在 Queue 中 poll()和 remove()有什么區別?
在隊列不為空時,兩者的作用都是返回隊頭元素
在隊列為空時,使用poll方法會返回null,使用remove則會拋出NoSuchElementException異常
哪些集合類是線程安全的?
Hashtable,Vector,Stack
由Collections的synchronizedXxx方法包裝的集合
java.util.concurrent包中的集合
ConcurrentHashMap
CopyOnWriteArrayList/CopyOnWriteArraySet
迭代器 Iterator 是什么?
Iterator隱藏了Collection實現類的具體細節,提供很多對集合元素進行迭代的方法
Iterator 怎么使用?有什么特點?
使用集合類的成員方法獲取Iterator實例
hasNext,檢查是否具有下一迭代元素
next,獲取下一迭代元素
forEachRemaining,java 8新增的方法,利用函數式接口進行迭代
remove,移除底層集合元素
2019.04.26更新
Iterator 和 ListIterator 有什么區別?
相同
* 都是迭代器,都可以用于迭代Collection集合 * 都可以順序向后遍歷集合元素 * 都可以移除底層集合元素
不同
* ListIteaator有add方法,可以添加元素到底層集合中,位置在迭代器當前位置之前 * ListIterator可以向前遍歷,Iterator不能 * ListIterator可以通過nextIndex以及preIndex定位索引位置,Iteratoor不能 * ListIterator可以通過set方法對元素進行修改
怎么確保一個集合不能被修改?
通過Collections工具類的靜態方法unmodifiableXxx對可變集合進行封裝
通過Collections的靜態方法emptyXxx返回一個空的不可變集合
通過Collections靜態方法singletonXxx返回帶有特定對象的不可變集合
并行和并發有什么區別?
并行是指能同時處理多個任務的能力,屬于計算機硬件處理范疇
并發是指多個任務被計算機交替執行,例如Java的多線程,屬于計算機軟件的范疇
線程和進程的區別?
進程是程序在計算機的一次執行活動,是操作系統分配資源的基本單位,可以多帶帶執行
線程是進程的一個實體,是CPU調度和分派的基本單位,必須依附于進程執行
進程是計算機硬件范疇的概念,線程是計算機軟件范疇的概念
一個進程至少由一個線程組成
2019.04.27更新
守護線程是什么?
在Java中有兩類線程,用戶線程與守護線程
守護線程獨立于控制終端·并且周期性執行某種任務或等待處理某些發生的事件
守護線程主要為其他線程運行提供便利服務,例如GC
守護線程創建與用戶線程大概一致,但要在線程開始之前通過成員方法setDaemon設置為守護線程
當所有非守護線程停止工作時,守護線程才會停止工作
創建線程有哪幾種方式?
通過繼承Tread并重寫run方法創建
通過實現Runnable接口并重寫run方法創建
通過實現Callable接口重寫call方法,并使用FutureTask包裝對象進行創建
說一下 runnable 和 callable 有什么區別?
callable有返回值,可以通過Future接口的get方法獲取,runnable沒有返回值
callable執行會阻塞線程,runnable不會
callable的執行通過FutureTask進行包裝,runnable的執行則通過Thread
callable可以拋出異常,runnable只能在內部進行處理
線程有哪些狀態?
新建,就緒,運行,阻塞,死亡五種狀態
當調用線程類的start方法時,線程進入就緒狀態,等待獲得CPU時間片
線程得到CPU時間片時進行運行狀態
當調用sleep方法,調用阻塞式I/O,試圖獲取同步監視器,suspend被調用,等待notify時,進入阻塞狀態
當被notify,獲取到資源或同步監視器時,進行就緒狀態
當run/call方法執行完畢,拋出異常未處理或調用stop方法時,線程死亡
2019.04.28更新
sleep() 和 wait() 有什么區別?
sleep屬于線程類方法,wait屬于Object類的方法
sleep不會釋放線程鎖,wait釋放線程鎖
notify()和 notifyAll()有什么區別?
notify和notifyAll都屬于Object類的方法
notify只會隨機選擇某一wait線程喚醒,notifyAll則會全部喚醒等待線程
線程的 run()和 start()有什么區別?
run定義線程執行的方法體,定義完成后線程處于新建狀態
start用于線程的執行,調用后線程處于就緒狀態
創建線程池有哪幾種方式?
創建單線程的線程池:newSingleThreadExecutor
創建固定大小的線程池:newFixedThreadPool
創建帶緩存的線程池:newCachedThreadPool
創建大小無限的線程池:newScheduledPool,用于定時或周期性執行任務
2019.04.29更新
線程池都有哪些狀態?
running:線程池一旦創建,進入running狀態,接受新任務并處理現有任務
shutdown:調用線程池shutdown方法,不接受新任務,但能處理已有任務
stop:調用線程池shutdownNow方法,不接受新任務,不處理現有任務,中斷現有任務
tidying:當線程池處于stop并且任務隊列為空時,執行terminated方法
terminated:線程池處于tidying狀態并執行完terminated方法,線程池終止
線程池中 submit()和 execute()方法有什么區別?
execute提交一個Runnable對象
submit可以提交Runnable或者Callable對象
submit可以提交Callable對象后返回一個泛型對象
在 Java 程序中怎么保證多線程的運行安全?
通過設置符號位進行訪問,但是資源浪費嚴重
通過synchronized代碼同步塊進行互斥資源的訪問
通過鎖機制的等待與喚醒控制資源的訪問
通過阻塞隊列控制互斥資源的數量進而控制資源的訪問
多線程鎖的升級原理是什么?
略
2019.05.02更新
什么是死鎖?
指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外在協調,它們都將無法推進下去
怎么防止死鎖?
預防死鎖
破環互斥條件
破環部分分配條件
破環循環等待條件
破環不可搶占條件
避免死鎖
在為申請者分配資源前檢測系統狀態
循環檢測死鎖是否產生
ThreadLocal 是什么?有哪些使用場景?
線程局部變量,為每一線程提供其副本,副本間獨立
隔壁線程間對共享變量的競爭
使用場景:多線程中使用同一變量,且該變量沒有線程沖突現象
說一下 Synchronized 底層實現原理?
暫未了解
synchronized 和 volatile 的區別是什么?
synchronized保證操作的內存可見性,volatile保證變量的可見性
synchronized作用在變量,代碼塊,方法,類,volatile作用在變量級別
volatile保證程序從主存讀取變量的值,synchronized鎖定當前變量,甚至造成線程阻塞
volatile變量不會被編譯器優化,synchronized會被編譯器優化
volatile只能保證變量修改可見性,不能保證原子性;synchronized能保證變量修改可見性和原子性
synchronized 和 Lock 有什么區別?
synchronized是java關鍵字,lock是java一個類
synchronized線程執行完成或者執行異常自動釋放鎖,Lock必須顯式釋放鎖
synchronized無法判斷鎖狀態,Lock可以
synchronized會組成線程阻塞,Lock不會
參考:https://blog.csdn.net/u012403...
synchronized 和 ReentrantLock 區別是什么?
兩者都是同一線程進入一次,鎖計數器自增1,計數器變成0釋放鎖
synchronized依賴JVM實現,synchronized是JDK實現的
synchronized自動釋放鎖,synchronized顯式釋放鎖
鎖的細粒度和靈活度:ReenTrantLock優于synchronized
ReenTrantLock可以指定公平或非公平鎖,synchronized為非公平鎖
ReenTrantLock可以指定喚醒線程,synchronized只能隨機或全部喚醒線程
參考:https://blog.csdn.net/qq83864...
說一下 Atomic 的原理?
暫未了解
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74408.html
摘要:作為面試官,我是如何甄別應聘者的包裝程度語言和等其他語言的對比分析和主從復制的原理詳解和持久化的原理是什么面試中經常被問到的持久化與恢復實現故障恢復自動化詳解哨兵技術查漏補缺最易錯過的技術要點大掃盲意外宕機不難解決,但你真的懂數據恢復嗎每秒 作為面試官,我是如何甄別應聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復制的原理詳...
摘要:作為面試官,我是如何甄別應聘者的包裝程度語言和等其他語言的對比分析和主從復制的原理詳解和持久化的原理是什么面試中經常被問到的持久化與恢復實現故障恢復自動化詳解哨兵技術查漏補缺最易錯過的技術要點大掃盲意外宕機不難解決,但你真的懂數據恢復嗎每秒 作為面試官,我是如何甄別應聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復制的原理詳...
摘要:好不容易在月號這天中午點左右接到了來自阿里的面試電話。這里會不斷收集和更新基礎相關的面試題,目前已收集題。面試重難點的和的打包過程多線程機制機制系統啟動過程,啟動過程等等掃清面試障礙最新面試經驗分享,此為第一篇,開篇。 2016 年末,騰訊,百度,華為,搜狗和滴滴面試題匯總 2016 年未,騰訊,百度,華為,搜狗和滴滴面試題匯總 各大公司 Java 后端開發面試題總結 各大公司 Jav...
摘要:今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 面試必備 面試必備:深入Spring MVC DispatchServlet 源碼...
閱讀 3208·2023-04-26 01:30
閱讀 671·2021-11-08 13:15
閱讀 1791·2021-09-24 10:35
閱讀 1005·2021-09-22 15:41
閱讀 1932·2019-08-30 15:44
閱讀 597·2019-08-30 13:22
閱讀 1010·2019-08-30 13:06
閱讀 1203·2019-08-29 13:22