成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Java面試題

OnlyMyRailgun / 3136人閱讀

摘要:近段時間在準(zhǔn)備實習(xí)的面試,在網(wǎng)上看到一份面試題,就慢慢試著做,爭取每天積累一點(diǎn)點(diǎn)?,F(xiàn)在每天給自己在面試題編寫的任務(wù)是題,有時候忙起來可能就沒有時間寫了,但是爭取日更,即使當(dāng)天沒更也會在之后的更新補(bǔ)上。

????近段時間在準(zhǔn)備實習(xí)的面試,在網(wǎng)上看到一份面試題,就慢慢試著做,爭取每天積累一點(diǎn)點(diǎn)。
????暫時手頭上的面試題只有一份,題量還是挺大的,有208題,所以可能講的不是很詳細(xì),只是我自己幫助記憶的筆記,希望對你們有啟發(fā),同時有什么說的不準(zhǔn)確的可以互相討論一下。
????現(xiàn)在每天給自己在面試題編寫的任務(wù)是4題,有時候忙起來可能就沒有時間寫了,但是爭取日更,即使當(dāng)天沒更也會在之后的更新補(bǔ)上。

JDK 和 JRE 區(qū)別

JDK全名為Java development kit

JRE全名為Java Runtime environment

JDK包括JRE,編譯器javac,以及很多調(diào)試和分析工具,例如jconsole等等

Java程序運(yùn)行環(huán)境必須有JRE

==和equals的區(qū)別

在基本數(shù)據(jù)類型對比中,==用于對比兩者是否相等,沒有equals的適用

equals是Object類的實例方法,若子類沒有重寫equals方法,則跟==作用一致

在引用數(shù)據(jù)類型對比中,==用于對比實例內(nèi)存地址是否相同,若引用都指向同一對象,則返回true

在引用數(shù)據(jù)類型對比中,euqals的返回值取決于重寫邏輯

兩個對象的 hashCode()相同,則 equals()也一定為 true,對嗎

equals用于對比對象間是否相等

hasCode則是給對象返回一個hash code值

在使用Object默認(rèn)的hasCode以及equals時,equals返回為true

若hasCode或equals任一方法被重寫,返回的結(jié)果取決于重寫邏輯的實現(xiàn)

final 在 Java 中作用

final可以修飾類,方法,變量

final修飾類,則該類不能被繼承,且類內(nèi)所有方法自動指定為final方法

final修飾方法,則該方法不能被繼承,類內(nèi)private隱式指定為final方法

final修飾基本數(shù)據(jù)類型變量,則該變量需在定義時指定初始值,且后續(xù)該值不能被改變

final修改引用類型的變量,則該變量不能再指向其他對象。

final修飾變量,在編譯時JVM已經(jīng)將他作為常量,存放于常量池中

Java 中的 Math.round(-1.5)

Java 中的 Math.round(-1.5) 等于-1

Java 中的 Math.round(-1.4) 等于-1

Java 中的 Math.round(-1.6) 等于-2

String 屬于基礎(chǔ)的數(shù)據(jù)類型嗎

String不屬于基礎(chǔ)數(shù)據(jù)類型,屬于引用數(shù)據(jù)類型

String擁有很多方法對字符串進(jìn)行處理,翻轉(zhuǎn)裁切追加等等

Java 中操作字符串都有哪些類?它們之間有什么區(qū)別?

StringBuilder以及StringBuffer

StringBuffer為線程安全的,性能較StringBuilder弱

StringBuilder為線程不安全的,但是性能比StringBuffer好

若無線程安全的考慮,通常使用StringBuilder

String str="i"與 String str=new String(“i”)一樣嗎

不一樣

兩者的引用都存放于棧中,但是前一引用指向常量池,后一引用指向堆中對象中,對象再指向常量池

如何將字符串反轉(zhuǎn)

采用遞歸以及二分法進(jìn)行字符串反轉(zhuǎn)

調(diào)用String中的reverse方法進(jìn)行反轉(zhuǎn)

正序遍歷字符串倒序拼接字符串

將字符串轉(zhuǎn)換成字符數(shù)組,倒序遍歷數(shù)組拼接

正序遍歷1/2長度字符串,將開頭以及對應(yīng)結(jié)尾的字符對調(diào)

String 類的常用方法

字符類

* charAt(int),根據(jù)索引找到索引上字符
* indexOf,尋找條件在當(dāng)前字符串上的索引

字符串信息類

* length,字串長度
* isEmpty,判斷字符串是否為空

字符串操作類

* trim,刪除字符串中所有空格
* substring,截取一部分字符串
* toUpperCase,將字符串全變成大寫
* spilt,根據(jù)條件切割字符串并返回數(shù)組
* concat,追加字符串

對比

* equals
* compareTo

抽象類必須要有抽象方法嗎

抽象類中可以不含有抽象方法,日常開發(fā)主要使用抽象類作為模板,若抽象類不含抽象方法,我覺得喪失了抽象類原有的功能

普通類和抽象類有哪些區(qū)別

普通類可以實例化,抽象類不可以

普通類不能有抽象方法,抽象類可以含有抽象方法

抽象類被繼承時必須選擇繼承父類的一個構(gòu)造方法

抽象類能使用 final 修飾嗎?

抽象類不能用final修飾。

final修飾的類不能被繼承,抽象類設(shè)計的初衷就是為了被繼承

接口和抽象類有什么區(qū)別?

接口不能有抽象方法,抽象類可以

接口內(nèi)方法只聲明不實現(xiàn),抽象類的方法可以有具體實現(xiàn)

接口內(nèi)變量默認(rèn)為final static,抽象類變量跟普通類一致

接口方法默認(rèn)是public

普通類可以實現(xiàn)多個接口,只能繼承一個抽象類

Java 中 IO 流分為幾種?

操作對象來看,分為字節(jié)流,字符流

流的流向來看,分為輸入流輸出流

總體來說,流分為節(jié)點(diǎn)流和處理流,應(yīng)用了裝飾模式,用處理流包裝節(jié)點(diǎn)流,達(dá)到代碼通用性

BIO、NIO、AIO 有什么區(qū)別?

BIO,從發(fā)起I/O請求開始到接收結(jié)果,線程都是阻塞的

NIO,線程發(fā)起I/O請求后立刻返回,當(dāng)接收數(shù)據(jù)時,I/O通知線程,線程阻塞獲取結(jié)果

AIO,線程發(fā)起I/O請求后立刻返回,I/O操作不阻塞線程,結(jié)果通過回調(diào)函數(shù)進(jìn)行返回

File的常用方法都有哪些?

獲取文件名字及路徑

* getName,獲取文件名字
* getPath。獲取文件當(dāng)前路徑
* getPath,獲取文件絕對路徑
* isAbsoulute,判斷文件是否絕對路徑

文件信息

* canRead/canWrite,是否可讀/可寫
* isFile,是否是文件
* isDirectory,是否是目錄
* length,文件內(nèi)容長度

文件操作

* createFile,新建一個文件/目錄
* delete,刪除當(dāng)前文件/目錄
* exists,判斷文件/目錄是否存在

Java 容器都有哪些?

java容器主要分兩種,單一數(shù)據(jù)類型以及鍵值對:Collection以及map

Collection包括List,Set,Queue,List為有序列表,Set為無序列表,Queue為隊列實現(xiàn)

Map子類以及接口底層實現(xiàn)不一樣,但是高層使用是一樣的

Collection 和 Collections 有什么區(qū)別?

Collection為java集合類,Collections為java集合操作類

Collections常用方法

* addAll
* binarySearch,二分查找
* emptyList,返回一個有序空列表
* synchronizedXxx,將線程不安全的集合轉(zhuǎn)換成線程安全的集合

Collection具有Set,List,Queue子接口,用于多數(shù)據(jù)的存儲以及使用

List、Set、Map 之間的區(qū)別是什么?

Set為無序集合,List為有序列表,Map為鍵值對集合

Set的底層實現(xiàn)為:Map的所有value置為null封裝而成,Map的key是唯一的,所以Set不允許重復(fù)元素

Set不允許重復(fù)元素,List允許重復(fù)元素

Set和List只允許存儲單一元素,Map允許存儲有映射關(guān)系的鍵值對

HashMap 和 Hashtable 有什么區(qū)別?

HashMap為線程不安全,Hashtable線程安全

HashMap允許使用null作為key或value,Hashtable不允許

Hashtable使用Enumeration遍歷,HashMap沒有專門的迭代器,但是可以通過遍歷key的集合或者entry對,也可以使用java8的函數(shù)接口進(jìn)行遍歷

如何決定使用 HashMap 還是 TreeMap?

HashMap為無序集合,TreeMap為有序集合

HashMap底層存儲結(jié)構(gòu)為數(shù)組,TreeMap為紅黑樹

數(shù)據(jù)量大且需要按照key排序時,使用TreeMap

數(shù)據(jù)量小且對順序無要求時,使用HashMap

若查找操作占大部分時,使用HashMap,插入刪除大部分時使用TreeMap

說一下 HashMap 的實現(xiàn)原理?

HashMap底層封裝了一個Entry數(shù)組,元素位置基于Object類的hashCode函數(shù)計算

當(dāng)出現(xiàn)哈希沖突時,采用拉鏈法解決沖突

數(shù)組的初始大小由capacity決定,默認(rèn)是16

當(dāng)數(shù)組達(dá)到一定限度時,觸發(fā)到負(fù)載因子的極限,數(shù)組進(jìn)行動態(tài)擴(kuò)容,擴(kuò)容后的大小為原大小的兩倍

2019.4.24更新

說一下 HashSet 的實現(xiàn)原理?

HashSet底層為HashMap,方法幾乎都是調(diào)用HashMap相關(guān)方法實現(xiàn)

ArrayList 和 LinkedList 的區(qū)別是什么?

ArrayList底層實現(xiàn)為數(shù)組,當(dāng)數(shù)組元素個數(shù)達(dá)到數(shù)組長度時,數(shù)組將進(jìn)行動態(tài)擴(kuò)容

LinkedList底層實現(xiàn)為鏈表,原則上不存在元素個數(shù)飽和的情況

ArrayList常用于隨機(jī)訪問場景

在添加刪除場景中,ArrayList主要耗時為System.arrayCopy,Linked

List則是通過for循環(huán)尋找插入位置。
* 數(shù)據(jù)量小于30,兩者沒有明顯差別,當(dāng)數(shù)據(jù)量大于容量1/10時,LinkedList的效率沒有ArrayList高
* 在元素個數(shù)大致相等的情況下,兩者遍歷的性能差不多

如何實現(xiàn)數(shù)組和 List 之間的轉(zhuǎn)換?

List轉(zhuǎn)Array

調(diào)用List成員方法toArray

for循環(huán)生成Array

Array轉(zhuǎn)List

調(diào)用Arrays類方法asList

for循環(huán)生成

ArrayList 和 Vector 的區(qū)別是什么?

Vector為jdk1.0的集合類,內(nèi)部通過數(shù)組實現(xiàn),支持Enumeration遍歷

ArrayList為1.2的集合類,內(nèi)部通過數(shù)組實現(xiàn),支持Iterator遍歷

Vector線程同步,ArrayList線程不同步

內(nèi)存不足時,Vector默認(rèn)擴(kuò)展1倍,ArrayList默認(rèn)擴(kuò)展1.5倍

Array 和 ArrayList 有何區(qū)別?

Array可以含有基本數(shù)據(jù)類型和引用類型,ArrayList只能包括引用類型

Array的大小是固定的,ArrayList大小可以動態(tài)增加

ArrayList對數(shù)據(jù)的處理方法比Array多,ArrayList為Array的加強(qiáng)版

Array的元素數(shù)據(jù)類型一樣,ArrayList在未指定泛型的前提下數(shù)據(jù)類型可以多樣

實際開發(fā)中Array不常用,主要用于確定元素個數(shù)的場景中。多用ArrayList

2019.04.25更新

在 Queue 中 poll()和 remove()有什么區(qū)別?

在隊列不為空時,兩者的作用都是返回隊頭元素

在隊列為空時,使用poll方法會返回null,使用remove則會拋出NoSuchElementException異常

哪些集合類是線程安全的?

Hashtable,Vector,Stack

由Collections的synchronizedXxx方法包裝的集合

java.util.concurrent包中的集合

ConcurrentHashMap

CopyOnWriteArrayList/CopyOnWriteArraySet

迭代器 Iterator 是什么?

Iterator隱藏了Collection實現(xiàn)類的具體細(xì)節(jié),提供很多對集合元素進(jìn)行迭代的方法

Iterator 怎么使用?有什么特點(diǎn)?

使用集合類的成員方法獲取Iterator實例

hasNext,檢查是否具有下一迭代元素

next,獲取下一迭代元素

forEachRemaining,java 8新增的方法,利用函數(shù)式接口進(jìn)行迭代

remove,移除底層集合元素

2019.04.26更新

Iterator 和 ListIterator 有什么區(qū)別?

相同

* 都是迭代器,都可以用于迭代Collection集合
* 都可以順序向后遍歷集合元素
* 都可以移除底層集合元素

不同

* ListIteaator有add方法,可以添加元素到底層集合中,位置在迭代器當(dāng)前位置之前
* ListIterator可以向前遍歷,Iterator不能
* ListIterator可以通過nextIndex以及preIndex定位索引位置,Iteratoor不能
* ListIterator可以通過set方法對元素進(jìn)行修改

怎么確保一個集合不能被修改?

通過Collections工具類的靜態(tài)方法unmodifiableXxx對可變集合進(jìn)行封裝

通過Collections的靜態(tài)方法emptyXxx返回一個空的不可變集合

通過Collections靜態(tài)方法singletonXxx返回帶有特定對象的不可變集合

并行和并發(fā)有什么區(qū)別?

并行是指能同時處理多個任務(wù)的能力,屬于計算機(jī)硬件處理范疇

并發(fā)是指多個任務(wù)被計算機(jī)交替執(zhí)行,例如Java的多線程,屬于計算機(jī)軟件的范疇

線程和進(jìn)程的區(qū)別?

進(jìn)程是程序在計算機(jī)的一次執(zhí)行活動,是操作系統(tǒng)分配資源的基本單位,可以多帶帶執(zhí)行

線程是進(jìn)程的一個實體,是CPU調(diào)度和分派的基本單位,必須依附于進(jìn)程執(zhí)行

進(jìn)程是計算機(jī)硬件范疇的概念,線程是計算機(jī)軟件范疇的概念

一個進(jìn)程至少由一個線程組成

2019.04.27更新

守護(hù)線程是什么?

在Java中有兩類線程,用戶線程與守護(hù)線程

守護(hù)線程獨(dú)立于控制終端·并且周期性執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件

守護(hù)線程主要為其他線程運(yùn)行提供便利服務(wù),例如GC

守護(hù)線程創(chuàng)建與用戶線程大概一致,但要在線程開始之前通過成員方法setDaemon設(shè)置為守護(hù)線程

當(dāng)所有非守護(hù)線程停止工作時,守護(hù)線程才會停止工作

創(chuàng)建線程有哪幾種方式?

通過繼承Tread并重寫run方法創(chuàng)建

通過實現(xiàn)Runnable接口并重寫run方法創(chuàng)建

通過實現(xiàn)Callable接口重寫call方法,并使用FutureTask包裝對象進(jìn)行創(chuàng)建

說一下 runnable 和 callable 有什么區(qū)別?

callable有返回值,可以通過Future接口的get方法獲取,runnable沒有返回值

callable執(zhí)行會阻塞線程,runnable不會

callable的執(zhí)行通過FutureTask進(jìn)行包裝,runnable的執(zhí)行則通過Thread

callable可以拋出異常,runnable只能在內(nèi)部進(jìn)行處理

線程有哪些狀態(tài)?

新建,就緒,運(yùn)行,阻塞,死亡五種狀態(tài)

當(dāng)調(diào)用線程類的start方法時,線程進(jìn)入就緒狀態(tài),等待獲得CPU時間片

線程得到CPU時間片時進(jìn)行運(yùn)行狀態(tài)

當(dāng)調(diào)用sleep方法,調(diào)用阻塞式I/O,試圖獲取同步監(jiān)視器,suspend被調(diào)用,等待notify時,進(jìn)入阻塞狀態(tài)

當(dāng)被notify,獲取到資源或同步監(jiān)視器時,進(jìn)行就緒狀態(tài)

當(dāng)run/call方法執(zhí)行完畢,拋出異常未處理或調(diào)用stop方法時,線程死亡

2019.04.28更新

sleep() 和 wait() 有什么區(qū)別?

sleep屬于線程類方法,wait屬于Object類的方法

sleep不會釋放線程鎖,wait釋放線程鎖

notify()和 notifyAll()有什么區(qū)別?

notify和notifyAll都屬于Object類的方法

notify只會隨機(jī)選擇某一wait線程喚醒,notifyAll則會全部喚醒等待線程

線程的 run()和 start()有什么區(qū)別?

run定義線程執(zhí)行的方法體,定義完成后線程處于新建狀態(tài)

start用于線程的執(zhí)行,調(diào)用后線程處于就緒狀態(tài)

創(chuàng)建線程池有哪幾種方式?

創(chuàng)建單線程的線程池:newSingleThreadExecutor

創(chuàng)建固定大小的線程池:newFixedThreadPool

創(chuàng)建帶緩存的線程池:newCachedThreadPool

創(chuàng)建大小無限的線程池:newScheduledPool,用于定時或周期性執(zhí)行任務(wù)

2019.04.29更新

線程池都有哪些狀態(tài)?

running:線程池一旦創(chuàng)建,進(jìn)入running狀態(tài),接受新任務(wù)并處理現(xiàn)有任務(wù)

shutdown:調(diào)用線程池shutdown方法,不接受新任務(wù),但能處理已有任務(wù)

stop:調(diào)用線程池shutdownNow方法,不接受新任務(wù),不處理現(xiàn)有任務(wù),中斷現(xiàn)有任務(wù)

tidying:當(dāng)線程池處于stop并且任務(wù)隊列為空時,執(zhí)行terminated方法

terminated:線程池處于tidying狀態(tài)并執(zhí)行完terminated方法,線程池終止

線程池中 submit()和 execute()方法有什么區(qū)別?

execute提交一個Runnable對象

submit可以提交Runnable或者Callable對象

submit可以提交Callable對象后返回一個泛型對象

在 Java 程序中怎么保證多線程的運(yùn)行安全?

通過設(shè)置符號位進(jìn)行訪問,但是資源浪費(fèi)嚴(yán)重

通過synchronized代碼同步塊進(jìn)行互斥資源的訪問

通過鎖機(jī)制的等待與喚醒控制資源的訪問

通過阻塞隊列控制互斥資源的數(shù)量進(jìn)而控制資源的訪問

多線程鎖的升級原理是什么?

2019.05.02更新

什么是死鎖?

指兩個或兩個以上的進(jìn)程在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象,若無外在協(xié)調(diào),它們都將無法推進(jìn)下去

怎么防止死鎖?

預(yù)防死鎖

破環(huán)互斥條件

破環(huán)部分分配條件

破環(huán)循環(huán)等待條件

破環(huán)不可搶占條件

避免死鎖

在為申請者分配資源前檢測系統(tǒng)狀態(tài)

循環(huán)檢測死鎖是否產(chǎn)生

ThreadLocal 是什么?有哪些使用場景?

線程局部變量,為每一線程提供其副本,副本間獨(dú)立

隔壁線程間對共享變量的競爭

使用場景:多線程中使用同一變量,且該變量沒有線程沖突現(xiàn)象

說一下 Synchronized 底層實現(xiàn)原理?

暫未了解

synchronized 和 volatile 的區(qū)別是什么?

synchronized保證操作的內(nèi)存可見性,volatile保證變量的可見性

synchronized作用在變量,代碼塊,方法,類,volatile作用在變量級別

volatile保證程序從主存讀取變量的值,synchronized鎖定當(dāng)前變量,甚至造成線程阻塞

volatile變量不會被編譯器優(yōu)化,synchronized會被編譯器優(yōu)化

volatile只能保證變量修改可見性,不能保證原子性;synchronized能保證變量修改可見性和原子性

synchronized 和 Lock 有什么區(qū)別?

synchronized是java關(guān)鍵字,lock是java一個類

synchronized線程執(zhí)行完成或者執(zhí)行異常自動釋放鎖,Lock必須顯式釋放鎖

synchronized無法判斷鎖狀態(tài),Lock可以

synchronized會組成線程阻塞,Lock不會

參考:https://blog.csdn.net/u012403...

synchronized 和 ReentrantLock 區(qū)別是什么?

兩者都是同一線程進(jìn)入一次,鎖計數(shù)器自增1,計數(shù)器變成0釋放鎖

synchronized依賴JVM實現(xiàn),synchronized是JDK實現(xiàn)的

synchronized自動釋放鎖,synchronized顯式釋放鎖

鎖的細(xì)粒度和靈活度:ReenTrantLock優(yōu)于synchronized

ReenTrantLock可以指定公平或非公平鎖,synchronized為非公平鎖

ReenTrantLock可以指定喚醒線程,synchronized只能隨機(jī)或全部喚醒線程

參考:https://blog.csdn.net/qq83864...

說一下 Atomic 的原理?

暫未了解

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/74408.html

相關(guān)文章

  • 【推薦】最新200篇:技術(shù)文章整理

    摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語言和等其他語言的對比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復(fù)實現(xiàn)故障恢復(fù)自動化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯過的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...

    BicycleWarrior 評論0 收藏0
  • 【推薦】最新200篇:技術(shù)文章整理

    摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語言和等其他語言的對比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復(fù)實現(xiàn)故障恢復(fù)自動化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯過的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...

    tommego 評論0 收藏0
  • Android-Java面試

    摘要:好不容易在月號這天中午點(diǎn)左右接到了來自阿里的面試電話。這里會不斷收集和更新基礎(chǔ)相關(guān)的面試題,目前已收集題。面試重難點(diǎn)的和的打包過程多線程機(jī)制機(jī)制系統(tǒng)啟動過程,啟動過程等等掃清面試障礙最新面試經(jīng)驗分享,此為第一篇,開篇。 2016 年末,騰訊,百度,華為,搜狗和滴滴面試題匯總 2016 年未,騰訊,百度,華為,搜狗和滴滴面試題匯總 各大公司 Java 后端開發(fā)面試題總結(jié) 各大公司 Jav...

    TalkingData 評論0 收藏0
  • 墻裂推薦:搜云庫技術(shù)團(tuán)隊,面試必備的技術(shù)干貨

    摘要:今天整理了一下近大半年以來的一些文章,和我的預(yù)期一樣,很多文章我都忘記自己曾經(jīng)寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點(diǎn)贊,加轉(zhuǎn)發(fā)。 今天整理了一下近大半年以來的一些文章,和我的預(yù)期一樣,很多文章我都忘記自己曾經(jīng)寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點(diǎn)贊,加轉(zhuǎn)發(fā)。 面試必備 面試必備:深入Spring MVC DispatchServlet 源碼...

    SegmentFault 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<