https://blog.csdn.net/Roger_CoderLife/article/details/88311950
集合題
1.兩個對象的 hashCode()相同根盒,則 equals()也一定為 true,對嗎禽炬?
不對诱告。hashCode有可能沖突。
2.抽象類必須要有抽象方法嗎?
不一定。
- Collection 和 Collections 有什么區(qū)別迈勋?
Collection是集合類的上級接口,繼承與他有關的接口主要有List和Set
Collections是針對集合類的一個幫助類醋粟,他提供一系列靜態(tài)方法實現(xiàn)對各種集合的搜索粪躬、排序、線程安全等操作
4.如何決定使用 HashMap 還是 TreeMap昔穴?
TreeMap是有順序的。
5.說一下 HashMap 的實現(xiàn)原理提前?
HashMap是有數(shù)組和鏈表組成的吗货。
數(shù)組大小是2的n次方減1。根據(jù)key計算出它的hash狈网,然后hash對數(shù)組大小取余宙搬,得到要放置的位置笨腥,然后放進去。然后數(shù)據(jù)該位置已經(jīng)有值勇垛,就用頭插法插進去脖母。
6.說一下 HashSet 的實現(xiàn)原理?
就是將add的object闲孤,計算他的hash谆级,放到指定的buck中,跟HashMap相比讼积,只是沒有value值肥照。
7.ArrayList 和 LinkedList 的區(qū)別是什么?
ArrayList是動態(tài)數(shù)組勤众,LinkedList是雙向鏈表
8.如何實現(xiàn)數(shù)組和 List 之間的轉(zhuǎn)換舆绎?
答:遍歷數(shù)組,插入List们颜。
錯了9选!
正確答案:
List轉(zhuǎn)數(shù)組:toArray(arraylist.size()方法
數(shù)組轉(zhuǎn)List:Arrays的asList(a)方法
9.ArrayList 和 Vector 的區(qū)別是什么顺饮?
答:是否加了同步控制
10.Array 和 ArrayList 有何區(qū)別矾麻?
答:Array數(shù)組長度是定的,ArrayList是動態(tài)數(shù)組波岛。
11.在 Queue 中 poll()和 remove()有什么區(qū)別茅坛?
答:poll是同步阻塞的,remove是不阻塞的则拷。
錯錯錯9北汀!煌茬!
poll()方法和remove()方法都是從隊列中取出一個元素斥铺,但是poll()在獲取失敗的時候會返回空,remove()方法在獲取數(shù)據(jù)失敗的時候拋出異常
12.哪些集合類是線程安全的坛善?
答:vector晾蜘,hashtable,concurenceHashMap
13.迭代器 Iterator 是什么眠屎?
用來遍歷的剔交,包含hashnext,next等方法改衩。
14.Iterator 怎么使用岖常?有什么特點?
hashnext葫督,next方法竭鞍。特點板惑。。偎快。
15.Iterator 和 ListIterator 有什么區(qū)別冯乘?
ListIterator繼承與Iterator,ListIterator只能用來編譯list晒夹。
錯一半:
總體來說ListIterator功能更強大裆馒,但是不通用。
16.怎么確保一個集合不能被修改惋戏?
加final關鍵字领追。
錯!O旆辍H抟ぁ!
對集合使用Collections.unmodifiablexxx方法
多線程題
1.并行和并發(fā)有什么區(qū)別舔亭?
沒有區(qū)別吧些膨,都是多線程的意思。
大錯特錯G掌獭订雾!
并發(fā):在操作系統(tǒng)中,是指一個時間段中有幾個程序都處于已啟動運行到運行完畢之間矛洞,且這幾個程序都是在同一個處理機上運行洼哎,但任一個時刻點上只有一個程序在處理機上運行。
并行:在操作系統(tǒng)中沼本,一組程序按獨立異步的速度執(zhí)行噩峦,無論從微觀還是宏觀,程序都是一起執(zhí)行的抽兆。
2.線程和進程的區(qū)別识补?
進程內(nèi)部可以多個線程,進程內(nèi)部的線程數(shù)據(jù)同享辫红。
3.守護線程是什么凭涂?
后臺線程,用來監(jiān)控另一個線程狀態(tài)的贴妻。
4.創(chuàng)建線程有哪幾種方式切油?
方式1:
Thread thread = new Thread(new Runnable());
thread.start();
方式2名惩;
new Runnable().start
錯了0追!!沒有方式2B蒜伞!底循!
還有一種是寫一個類繼承與Thread巢株,重寫run方法
5.說一下 runnable 和 callable 有什么區(qū)別?
不清楚熙涤。
零分8蟀!
callable可以獲取子線程的返回信息l舸臁那槽!
6.線程有哪些狀態(tài)?
running等舔,sleep骚灸,runable,waitting慌植,stop
錯了I跎!沒有sleep狀態(tài)
new 蝶柿,runnable丈钙,running, block,dead 5種狀態(tài)
7.sleep() 和 wait() 有什么區(qū)別?
sleep還持鎖交汤,wait就放棄鎖雏赦。
8.notify()和 notifyAll()有什么區(qū)別?
notify是喚醒一個線程芙扎,可能導致死鎖星岗,notifyAll是喚醒所有線程。wait和nofity如何配合纵顾?伍茄?
寫個死鎖的例子!施逾!
https://blog.csdn.net/tayanxunhua/article/details/20998449
9.同步的英文怎么寫敷矫?
synchronized
10.線程的 run()和 start()有什么區(qū)別?
run在主線程汉额,start會新開一個線程
11.創(chuàng)建線程池有哪幾種方式曹仗?
忘記API了。
零分H渌选T趺!!
有四種線程池:
singleThreadPool:單一現(xiàn)場的線程池
fixThreadPool :線程數(shù)量固定的線程池
cacheThreadPool:線程數(shù)量可動態(tài)變化的線程池
SchduleThreadPool:可以定時的線程池
12.線程池都有哪些狀態(tài)?
空閑轨蛤,開始蜜宪,停止,滿載
錯了O樯健F匝椤!缝呕!
Running澳窑、ShutDown、Stop供常、Tidying摊聋、Terminated
13.線程池中 submit()和 execute()方法有什么區(qū)別?
submit是提交認為栈暇,execute是啟動線程池麻裁。
錯了!U芭簟1ⅰ!
submit有返回值
14.在 java 程序中怎么保證多線程的運行安全新博?
不知所云薪夕。
15.多線程鎖的升級原理是什么?
偏向鎖赫悄,輕量級鎖原献,重量級鎖,隨著競爭的激烈會升級埂淮。
16.什么是死鎖姑隅?
相互等鎖,就是死鎖倔撞。請手寫一個死鎖
17.怎么防止死鎖讲仰?
不知所云
18.ThreadLocal 是什么?有哪些使用場景痪蝇?
線程本地對象鄙陡,每個線程都有一個備份,使用場景例如looper
19.說一下 synchronized 底層實現(xiàn)原理躏啰?
不知所云
20.synchronized 和 volatile 的區(qū)別是什么趁矾?
同步。volatile內(nèi)存可見给僵,防止指令重排序毫捣。
21.synchronized 和 Lock 有什么區(qū)別?
沒什么區(qū)別。
零分BH恼蕖!牌柄!
1.synchronized是內(nèi)置關鍵字畸悬,lock是一個java類
2.Lock必需是lock和unlock同時。
3.Lock可以判斷是否拿到鎖珊佣,可以定時!披粟!
22.synchronized 和 ReentrantLock 區(qū)別是什么咒锻?
可重入鎖
23.說一下 atomic 的原理?
原子守屉。說一下原理:主內(nèi)存
android模擬面試:
https://blog.csdn.net/maiduoudo/article/details/79567242
2.android view繪制機制和加載過程惑艇,請詳細說下整個流程
ViewRootImpl 執(zhí)行performtraversal可以繪制,分別調(diào)用onLayout拇泛,OnMeasure滨巴,OnDraw進行繪制。
OnMeasure會返回父View給他的尺寸俺叭,和度量方法恭取。
3.android四大組件的加載過程,請詳細介紹下
Activity一般是用startActivity傳入intent啟動熄守,Service可以使用bindService蜈垮,StartService啟動,Broadcast通過sendbroadcast啟動裕照,Provider在應用啟動過程啟動
6.Activity緩存方法
onSaveInstanceState保存數(shù)據(jù)攒发,onRestoreInstanceState恢復數(shù)據(jù)
7.onDestory什么時候調(diào)用;Looper正在處理消息晋南,在插入一條消息會怎樣惠猿?
7.Service的生命周期,兩種啟動方法负间,有什么區(qū)別
oncreate偶妖,onStartCommand,onBind唉擂,onDestory
有兩種啟動方式餐屎,startService,bindService兩種方式玩祟。
8.怎么保證service不被殺死
提供優(yōu)先級腹缩;修改service為persist
9.靜態(tài)的Broadcast 和動態(tài)的有什么區(qū)別
靜態(tài)在AndroidManifest,動態(tài)在代碼registBroadcast中注冊
10.Intent可以傳遞哪些數(shù)據(jù)類型
基本數(shù)據(jù)類型和parcel數(shù)據(jù)類型都可以
11.Json有什么優(yōu)劣勢、解析的原理
完全不知道
12.一個語言的編譯過程
語法解釋藏鹊,解釋成字節(jié)碼
13.動畫有哪幾類润讥,各有什么特點
屬性動畫 補間動畫等
【問題1】為什么連接的時候是三次握手,關閉的時候卻是四次握手盘寡?
答:因為當Server端收到Client端的SYN連接請求報文后楚殿,可以直接發(fā)送SYN+ACK報文。其中ACK報文是用來應答的竿痰,SYN報文是用來同步的脆粥。但是關閉連接時,當Server端收到FIN報文時影涉,很可能并不會立即關閉SOCKET变隔,所以只能先回復一個ACK報文,告訴Client端蟹倾,"你發(fā)的FIN報文我收到了"匣缘。只有等到我Server端所有的報文都發(fā)送完了,我才能發(fā)送FIN報文鲜棠,因此不能一起發(fā)送肌厨。故需要四步握手。
作者:青柚_
來源:CSDN
原文:https://blog.csdn.net/qq_38950316/article/details/81087809
版權(quán)聲明:本文為博主原創(chuàng)文章豁陆,轉(zhuǎn)載請附上博文鏈接柑爸!
【問題2】為什么TIME_WAIT狀態(tài)需要經(jīng)過2MSL(最大報文段生存時間)才能返回到CLOSE狀態(tài)?
答:雖然按道理献联,四個報文都發(fā)送完畢竖配,我們可以直接進入CLOSE狀態(tài)了,但是我們必須假象網(wǎng)絡是不可靠的里逆,有可以最后一個ACK丟失进胯。所以TIME_WAIT狀態(tài)就是用來重發(fā)可能丟失的ACK報文。在Client發(fā)送出最后的ACK回復原押,但該ACK可能丟失胁镐。Server如果沒有收到ACK,將不斷重復發(fā)送FIN片段诸衔。所以Client不能立即關閉盯漂,它必須確認Server接收到了該ACK。Client會在發(fā)送出ACK之后進入到TIME_WAIT狀態(tài)笨农。Client會設置一個計時器就缆,等待2MSL的時間。如果在該時間內(nèi)再次收到FIN谒亦,那么Client會重發(fā)ACK并再次等待2MSL竭宰。所謂的2MSL是兩倍的MSL(Maximum Segment Lifetime)空郊。MSL指一個片段在網(wǎng)絡中最大的存活時間,2MSL就是一個發(fā)送和一個回復所需的最大時間切揭。如果直到2MSL狞甚,Client都沒有再次收到FIN,那么Client推斷ACK已經(jīng)被成功接收廓旬,則結(jié)束TCP連接哼审。
作者:青柚_
來源:CSDN
原文:https://blog.csdn.net/qq_38950316/article/details/81087809
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接孕豹!
【問題4】如果已經(jīng)建立了連接涩盾,但是客戶端突然出現(xiàn)故障了怎么辦?
TCP還設有一個崩常活計時器旁赊,顯然,客戶端如果出現(xiàn)故障椅野,服務器不能一直等下去,白白浪費資源籍胯。服務器每收到一次客戶端的請求后都會重新復位這個計時器竟闪,時間通常是設置為2小時,若兩小時還沒有收到客戶端的任何數(shù)據(jù)杖狼,服務器就會發(fā)送一個探測報文段炼蛤,以后每隔75分鐘發(fā)送一次。若一連發(fā)送10個探測報文仍然沒反應蝶涩,服務器就認為客戶端出了故障理朋,接著就關閉連接。
作者:青柚_
來源:CSDN
原文:https://blog.csdn.net/qq_38950316/article/details/81087809
版權(quán)聲明:本文為博主原創(chuàng)文章绿聘,轉(zhuǎn)載請附上博文鏈接嗽上!
10.Intent可以傳遞哪些數(shù)據(jù)類型
1.Serializable
2.charsequence: 主要用來傳遞String,char等
3.parcelable
4.Bundle
11.java int char long 各占多少字節(jié)
錯Oㄈ痢兽愤!char是兩個字節(jié)!E不G诚簟!
12.string stringbuffer和stringbuilder的區(qū)別
string追加字符串都會創(chuàng)建新的對象
stringbuffer是線程安全
stringbuild是線程不安全的
13.抽象類與接口的區(qū)別
1.修飾符哲思,接口是public洼畅,抽象類是public或者protect
2.屬性,接口的屬性是public static final
3.方法棚赔,抽象類可以有具體的方法帝簇。接口的方法沒有方法實現(xiàn)徘郭,是public abstract
參考:https://www.cnblogs.com/dolphin0520/p/3811437.html
14.泛型中? super T和? extends T的區(qū)別
extends T 代表T的子類,只能讀不能寫己儒,因為可以按照T去讀F槠瘛!
super T代表T的父類闪湾,只能寫冲甘,不能讀,可以寫T或者T的子類
參考:https://www.cnblogs.com/softidea/p/5280921.html
https://www.cnblogs.com/suxuan/p/4970467.html
15.lock()與lockInterruptibly()的區(qū)別
lockInteruptibly在等鎖的過程中途样,然后被中斷江醇,就會進入中斷異常。
https://gotowqj.iteye.com/blog/2103793
16.Activity-Window-View三者的差別
在Activity的attach方法中創(chuàng)建了phonewindow何暇,在setcontentview的時候添加了decordview陶夜,WindowManagerGlobal中新建了一個ViewRootImpl,ViewRootImpl的setview方法會觸發(fā)一次繪制裆站。
17.fragment各種情況下的生命周期
18.java對象生命周期
創(chuàng)建階段(Created)
應用階段(In Use)
不可見階段(Invisible)
不可達階段(Unreachable)
收集階段(Collected)
終結(jié)階段(Finalized)
對象空間重分配階段(De-allocated)
Android為什么引入Parcelable条辟?
不需要反射,速度更快宏胯。
19.oom是否可以try catch
https://www.zhihu.com/question/54630917
20.一張Bitmap所占內(nèi)存以及內(nèi)存占用的計算
ARGB
長度*寬度*4
21.快速排序S鸬铡!<缗邸杭棵!
思想:將數(shù)字分成大小對半!7沾汀;曜Α!
22.Service有onStop嗎艰管?滓侍?
沒有!M苡ぁ4志!
23.HashMap的負載因子是什么街图?浇衬?
用來判斷擴容用的,如果hashmap數(shù)量大于容量*負載因子餐济,就擴容T爬蕖!絮姆!
14.Java 多線程文件讀寫操作怎么保證并發(fā)安全醉冤?
參考:http://www.reibang.com/p/89cad15fff31
15.兩個Activity之間跳轉(zhuǎn)時必然會執(zhí)行的是哪幾個方法秩霍?
一般情況下比如說有兩個activity,分別叫A,B。
當在A 里面激活B 組件的時候, A會調(diào)用onPause()方法,然后B調(diào)用onCreate() ,onStart(), onResume()蚁阳。
這個時候B覆蓋了A的窗體, A會調(diào)用onStop()方法铃绒。
如果B是個透明的窗口,或者是對話框的樣式, 就不會調(diào)用A的onStop()方法。
如果B已經(jīng)存在于Activity棧中螺捐,B就不會調(diào)用onCreate()方法颠悬。
作者:m_xiaoer
來源:CSDN
原文:https://blog.csdn.net/m_xiaoer/article/details/72881082
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接定血!
16.捕捉應用崩潰赔癌?
Thread.UncaughtExceptionHandler
17.java靜態(tài)變量在哪個區(qū)?
1.程序計數(shù)器
2.java棧
3.本地方法棧
4.堆
5.方法區(qū)
18.模塊化與組件化區(qū)別澜沟?
19.堆是什么灾票?
完全二叉樹,用數(shù)組表示茫虽。
20.Activity與fragment生命周期
21.https是什么
http與ssl協(xié)議的結(jié)合體刊苍。
服務器發(fā)送公鑰給客戶端,客戶端生成一對密鑰對濒析,客戶端用公鑰對密鑰對進行加密班缰,傳送到服務器。服務器用私鑰解密出密鑰對悼枢,然后進行通信!脾拆!
22.AQS是什么馒索?
是一種排隊的隊列,對頭獲取到鎖名船,處理完后绰上,喚醒下一個節(jié)點處理。
23.git merge和git rebase區(qū)別
git merge如下圖渠驼,會生成一筆新的提交蜈块,并且這個提交有兩個parent。
24.git rebase是讓分支回到從服務器拉取的點迷扇,然后將另一個分支的提交和本分支的本地提交打成一個個的patch百揭,然后按時間順序打回去。
25.c語言定義宏獲取最大值蜓席?
define MAX(a器一,b) (a>b)?a:b
26.注解怎么用?
實際上是有一個類文件厨内,通過反射獲取到對象祈秕。
參考:
https://www.cnblogs.com/a591378955/p/8350499.html
思想篇:
https://blog.csdn.net/hsk256/article/details/51530667
27.sleep會放棄cpu資源嗎渺贤?
會的。就是讓cpu在多長時間內(nèi)不分配時間片給她请毛。
參考:http://blog.sina.com.cn/s/blog_91c0fdb50102v5yt.html
28.進程與線程的區(qū)別
1.進程是資源分配最小單位志鞍,線程是程序執(zhí)行的最小單位。
2.進程獨立地址空間
3.多進程更加健壯方仿。
29.android的應用內(nèi)多進程是怎樣的固棚?
就是產(chǎn)生了多個進程啊。
30.父進程和子進程如何通信
管道
31.多進程同時寫一個文件會怎樣兼丰?
用系統(tǒng)調(diào)用write方法沒有問題玻孟。用fwrite,fwrite是用戶空間鳍征,有緩存黍翎。
參考:https://blog.csdn.net/yangbodong22011/article/details/63064166/
32.進程調(diào)度算法有哪些?
先來先服務調(diào)度算法
短作業(yè)(進程)優(yōu)先調(diào)度算法
高優(yōu)先權(quán)優(yōu)先調(diào)度算法
高響應比優(yōu)先調(diào)度算法
時間片輪轉(zhuǎn)法
多級反饋隊列調(diào)度算法
33.frok與vfork區(qū)別
frok會復制數(shù)據(jù)與堆棧
vfork只會復制堆棧艳丛,且首先運行匣掸。
34.default與protected哪個更自由?
protected更自由氮双,外包子類可以訪問protected碰酝。
35.外部類可以用protected或者private修飾嗎?
不能
36.外部類可以用static修飾嗎戴差?
不能送爸。
37.嵌套接口怎么用?
嵌套的接口默認是public static
接口中的屬性的默認是public static final 暖释、方法是public abstract