




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄
第1章面試說明9
1.1面試過程最關(guān)鍵的是什么?9
1.2面試時(shí)該怎么說?91)語言表達(dá)清楚9
2)所述內(nèi)容不犯錯(cuò)9
1.3面試技巧9六個(gè)常見問題9
1.3.1兩個(gè)考前須知10自我介紹(控制在4分半以內(nèi),不超過5分鐘)10
第2章手寫代碼10
2.1冒泡排序10
2.2二分查找11
2.3快排13
2.4歸并14
2.5二叉樹之Scala實(shí)現(xiàn)16二叉樹概念16
2.5.1二叉樹的特點(diǎn)16二叉樹的Scala代碼實(shí)現(xiàn)16
2.6手寫Spark-WordCount20
2.7手寫Spark程序21第3章工程架構(gòu)21
3.1數(shù)倉概念21
3.2系統(tǒng)數(shù)據(jù)流程設(shè)計(jì)21
3.3框架版本選型21
3.4服務(wù)器選型211)機(jī)器本錢考慮:22
2)運(yùn)維本錢考慮:22
3.5集群規(guī)模22
3.6人員配置參考22整體架構(gòu)。22
3.6.1你們部門的職級(jí)等級(jí),晉升規(guī)那么22人員配置參考23
第4章工程涉及技術(shù)23
1.1
第1章面試說明
1.1面試過程最關(guān)鍵的是什么?
1)不是你說了什么,而是你怎么說2)大大方方的聊,放松
1.2面試時(shí)該怎么說?
1)語言表達(dá)清楚(1)思維邏輯清晰,表達(dá)流暢
(2)一二三層次表達(dá)2)所述內(nèi)容不犯錯(cuò)
(1)不說前東家或者自己的壞話(2)往自己擅長(zhǎng)的方面說
(3)實(shí)質(zhì),對(duì)考官來說,內(nèi)容聽過,就是自我肯定;沒聽過,那就是個(gè)學(xué)習(xí)的過程。
1.3面試技巧六個(gè)常見問題
1)你的優(yōu)點(diǎn)是什么?
大膽的說出自己各個(gè)方面的優(yōu)勢(shì)和特長(zhǎng)2)你的缺點(diǎn)是什么?
不要談自己真實(shí)問題;月“缺點(diǎn)”襯托自己的優(yōu)點(diǎn)3)你的離職原因是什么?
>不說前東家壞話,哪怕被傷過
>合情合理合法
>不要說超過1個(gè)以上的原因4)您對(duì)薪資的期望是多少?
>非終面不深談薪資
>只說區(qū)間,不說具體數(shù)字
>底線是不低于當(dāng)前薪資
>非要具體數(shù)字,區(qū)間取中間值,或者當(dāng)前薪資的+20%
finalize:Object類中定義的方法,Java中允許使用finalize。方法在垃圾收集器將對(duì)象
從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在銷毀對(duì)象時(shí)調(diào)用的,
通過重寫finalize.方法可以整理系統(tǒng)資源或者執(zhí)行其他清理工作。
10.7二二和Equals區(qū)另lj
二:如果比擬的是基本數(shù)據(jù)類型,那么比擬的是變量的值如果比擬的是引用數(shù)據(jù)類型,
那么比擬的是地址值(兩個(gè)對(duì)象是否指向同一塊內(nèi)
存)
equals:如果沒重寫equals方法比擬的是兩個(gè)對(duì)象的地址值。
如果重寫了equals方法后我們往往比擬的是對(duì)象中的屬性的內(nèi)容
equal*方法是從Object類中繼承的,默認(rèn)的實(shí)現(xiàn)就是使用二publicboolean
return(this
n.i緩存穿透、緩存雪崩、緩存擊穿1)緩存穿透是指查詢一個(gè)一定不
存在的數(shù)據(jù)。由于緩存命不中時(shí)會(huì)去查詢數(shù)據(jù)庫,查不到數(shù)據(jù)那么不
寫入緩存,這將導(dǎo)致這個(gè)不存在的數(shù)據(jù)每次請(qǐng)求都要到數(shù)據(jù)庫去查
詢,造成緩存穿透。
解決方案:
①是將空對(duì)象也緩存起來,并給它設(shè)置一個(gè)很短的過期時(shí)間,最長(zhǎng)不超過5分鐘
②采用布隆過濾器,將所有可能存在的數(shù)據(jù)哈希到一個(gè)足夠大的bitmap中,一個(gè)一定不
存在的數(shù)據(jù)會(huì)被這個(gè)bitmap攔截掉,從而防止了對(duì)底層存儲(chǔ)系統(tǒng)的查詢壓力2)如果緩存集中
在一段時(shí)間內(nèi)失效,發(fā)生大量的緩存穿透,所有的查詢都落在數(shù)據(jù)庫上,就會(huì)造成緩存雪崩。
解決方案:
盡量讓失效的時(shí)間點(diǎn)不分布在同一個(gè)時(shí)間點(diǎn)3)緩存山穿,是指一個(gè)key非常熱點(diǎn),在不
停的扛著大并發(fā),當(dāng)這個(gè)key在失效的瞬間,持續(xù)的大并發(fā)就穿破緩存,直接請(qǐng)求數(shù)據(jù)庫,
就像在一個(gè)屏障上鑿開了一個(gè)洞。
解決方案:
可以設(shè)置key永不過期99
11.2哨兵模式
主從復(fù)制中反客為主的自動(dòng)版,如果主機(jī)Down掉,哨兵會(huì)從從機(jī)中選擇一臺(tái)作為主
機(jī),并將它設(shè)置為其他從機(jī)的主機(jī),而且如果原來的主機(jī)再次啟動(dòng)的話也會(huì)成為從機(jī)。
11.3數(shù)據(jù)類型
string字符串
list可以重復(fù)的集合
set不口J以重復(fù)的集合
hash類似于Map<String,String>
zset(sortedset)帶分?jǐn)?shù)的set
11.4持久化RDB持久化:
①在指定的時(shí)間間隔內(nèi)持久化
②服務(wù)shutdown會(huì)自動(dòng)持久化
③輸入bgsave也會(huì)持久化)AOF:以日志形式記錄每個(gè)更新操作
Redis重新啟動(dòng)時(shí)讀取這個(gè)文件,重新執(zhí)行新建、修改數(shù)據(jù)的命令恢復(fù)數(shù)據(jù)。
保存策略:
推薦(并且也是默認(rèn))的措施為每秒持久化一次,這種策略可以兼顧速度和平安性。
缺點(diǎn):
1比起RDB占用更多的磁盤空間
2恢復(fù)備份速度要慢
3每次讀寫都同步的話,有一定的性能壓力
4存在個(gè)別Bug,造成恢復(fù)不能選擇策略:
官方推薦:
10()
如果對(duì)數(shù)據(jù)不敏感,可以選單獨(dú)用RDB;不建議單獨(dú)用AOF,因?yàn)榭赡艹霈F(xiàn)Bug:如果只
是做純內(nèi)存緩存,可以都不用悲觀鎖
執(zhí)行操作前假設(shè)當(dāng)前的操作肯定(或有很大幾率)會(huì)被打斷(悲觀)?;谶@個(gè)假設(shè),
我們?cè)谧霾僮髑熬蜁?huì)把相關(guān)資源鎖定,不允許自己執(zhí)行期間有其他操作干擾。
11.5樂觀鎖
執(zhí)行操作前假設(shè)當(dāng)前操作不會(huì)被打斷(樂觀)。基于這個(gè)假設(shè),我們?cè)谧霾僮髑安粫?huì)鎖定
資源,萬一發(fā)生了其他操作的干擾,那么本次操作將被放棄。Redis使用的就是樂觀鎖。
第12章MySqlMylSAM與InnoDB的區(qū)別
比照項(xiàng)MylSAMInnoDB
外鍵不支持支持
事務(wù)不支持支持
行表鎖表鎖,即使操作一條記錄也會(huì)行鎖,操作時(shí)只鎖某一行,不對(duì)
鎖住整個(gè)表,不適合高并發(fā)的其它行有影響,
操作適合高并發(fā)的操作
緩存只緩存索引,不緩存真實(shí)數(shù)據(jù)不僅緩存索引還要緩存真實(shí)數(shù)
據(jù),對(duì)內(nèi)存要求較高,而且內(nèi)存
大小對(duì)性能有決定性的影響
_______
數(shù)據(jù)結(jié)構(gòu):B+Tree
一般來說能夠到達(dá)range就可以算是優(yōu)化了口訣(兩個(gè)法那么加6種索引失效的情況)
全值匹配我最愛,最左前綴要遵守;
帶頭大哥不能死,中間兄弟不能斷;101
索引列上少計(jì)算,范圍之后全失效;
LIKE百分寫最右,覆蓋索引不寫啊
不等空值還有OR.索引影響要注意;
VAR引號(hào)不可丟,SQL優(yōu)化有訣竅。
12.1b-tree和b+tree的區(qū)別B-
樹的關(guān)鍵字和記錄是放在一起的,葉子節(jié)點(diǎn)可以看作外部節(jié)點(diǎn),不包
含任何信息;B+
樹的非葉子節(jié)點(diǎn)中只有關(guān)鍵字和指向下一個(gè)節(jié)點(diǎn)的索引,記錄只放在
葉子節(jié)點(diǎn)中。
2)在B-樹中,越靠近根節(jié)點(diǎn)的記錄查找時(shí)間越快,只要找到關(guān)鍵字即可確定記錄的存在;而
B+樹中每個(gè)記錄的查找時(shí)間基本是一樣的,都需要從根節(jié)點(diǎn)走到葉子節(jié)點(diǎn),而且在葉子節(jié)點(diǎn)
中還要再比擬關(guān)鍵字。
12.2redis是單線程的,為什么那么快
1)完全基于內(nèi)存,絕大局部請(qǐng)求是純粹的內(nèi)存操作,非??焖?。
2)數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單,對(duì)數(shù)據(jù)操作也簡(jiǎn)單,Redis中的數(shù)據(jù)結(jié)構(gòu)是專門進(jìn)行設(shè)計(jì)的3)采用單線程,
防止了不必要的上下文切換和競(jìng)爭(zhēng)條件,也不存在多進(jìn)程或者多線程導(dǎo)致的切換而消耗CPU,
不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因?yàn)榭赡艹霈F(xiàn)死鎖而導(dǎo)致的性能消
耗
4)使用多路1/0復(fù)用模型,非阻塞105)使用底層模型不同,它們之間底層實(shí)現(xiàn)方式以及與客戶
端之間通信的應(yīng)用協(xié)議不一樣,Rcdis直接自己構(gòu)建了VM機(jī)制,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函
數(shù)的話,會(huì)浪費(fèi)一定的時(shí)間去移動(dòng)和請(qǐng)求
12.3MySQL的事務(wù)一、事務(wù)的基本要素(ACID)
1、原子性(Atomicity):事務(wù)開始后所有操作,要么全部做完,要么全部不做,不可能停滯在中
間環(huán)節(jié)。事務(wù)執(zhí)行過程中出錯(cuò),會(huì)回滾到事務(wù)開始前的狀態(tài),所有的操作就像沒有發(fā)生一樣。
也就是說事務(wù)是一個(gè)不可分割的整體,就像化學(xué)中學(xué)過的原子,是物質(zhì)構(gòu)成的基本單位2、一
致性(Consislency):事務(wù)開始前和結(jié)束后,數(shù)據(jù)庫的完整性約束沒有被破壞。比如A向B轉(zhuǎn)
賬,不可能A扣了錢,B卻沒收到。
1023、隔離性(Isolation):同一時(shí)間,只允許一個(gè)事務(wù)請(qǐng)求同一數(shù)據(jù),不同的事務(wù)之間彼此沒
有任何干擾.比方A正在從一張銀行卡中取錢,在A取錢的過程結(jié)束前,R不能向這張卡轉(zhuǎn)
賬。
4、持久性(Durability):事務(wù)完成后,事務(wù)對(duì)數(shù)據(jù)庫的所有更新將被保存到數(shù)據(jù)庫,不能回
滾。
二、事務(wù)的并發(fā)問題1、臟讀:事務(wù)A讀取了事務(wù)B更新的數(shù)據(jù),然后B回滾操作,那么A
讀取到的數(shù)據(jù)是臟數(shù)據(jù)
2、不可重復(fù)讀:事務(wù)A屢次讀取同一數(shù)據(jù),事務(wù)B在事務(wù)A屢次讀取的過程中,對(duì)數(shù)據(jù)作
了更新并提交,導(dǎo)致事務(wù)A屢次讀取同一數(shù)據(jù)時(shí)\結(jié)果不一致3、幻讀:系統(tǒng)管理員A將數(shù)據(jù)
庫中所有學(xué)生的成績(jī)從具體分?jǐn)?shù)改為ABCDE等級(jí),但是系統(tǒng)管理員B就在這個(gè)時(shí)候插入了
一條具體分?jǐn)?shù)的記錄,當(dāng)系統(tǒng)管理員A改結(jié)束后發(fā)現(xiàn)還有一條記錄沒有改過來,就好像發(fā)生
了幻覺一樣,這就叫幻讀。
小結(jié):不可重復(fù)讀的和幻讀很容易混淆,不可重復(fù)讀側(cè)重于修改,幻讀側(cè)重于新增或刪除。
解決不可重復(fù)讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表三、MySQL事務(wù)隔離級(jí)別
事務(wù)隔離級(jí)別臟讀不可重復(fù)讀幻讀
讀未提交(read-uncommilted)是是是
不可重復(fù)讀(read-committed)否是是
可重復(fù)讀(repeatable-read)否否是
串行化(serializable)否否否
拓恁敏題墉蚓杵詢出每門課都大于80分的學(xué)生姓名namekecheng
張三語文81張三數(shù)學(xué)75
李四語文76李四數(shù)學(xué)90
103
王五語文數(shù)學(xué)81
王五王五英語90A:100
selectdistinctnamefromtablewherenamenotin(selectdistinctname
fromtablewherefenshu<=80)
B:selectnamefromtablegroupbynamehavingmin(fenshu)>802.學(xué)生表如下:
自動(dòng)編號(hào)學(xué)號(hào)姓名課程編號(hào)課程名稱分?jǐn)?shù)
12005001張三0001數(shù)學(xué)69
數(shù)
ooo1學(xué)89
22005002李四1
數(shù)
ooo1學(xué)69
32005001張三1
刪除除了自動(dòng)編號(hào)不同,其他都相同的學(xué)生冗余信息A:deletetablcnamewhere
自動(dòng)編號(hào)notin(selectmin(自動(dòng)編號(hào))fromtablenamegroupby學(xué)號(hào),姓
名,課程編號(hào),課程名稱,分?jǐn)?shù))
3.一個(gè)叫team的表,里面只有一個(gè)字段name,一共有4條紀(jì)錄,分別是a,b,c,d,
對(duì)應(yīng)四個(gè)球隊(duì),現(xiàn)在四個(gè)球隊(duì)進(jìn)行比賽,用一條sql語句顯示所有可能的比賽組
合.
答:selecta.name,b.n^mefromteama,teambwherea.name<b.named.面試
題:怎么把這樣一個(gè)
yearmonthamount
199111.1
199121.2
199131.3
199141.4
199212.1
199222.2
199232.3
1碗42.4
查成這樣一個(gè)結(jié)果yearmlm2m3m4
19911.11.21.31.419922.12.22.32.4
selectyear,
(selectamountfrom
(selectamountfrom
(selectamountfrom
(cclc八十cmciin十
答案
selectyear,
(selectamountfromaaamwheremonth=landm.year=aaa.year)asml,
(selectamountfroniaaamwheremonth=2andm.year=aaa.year)asm2,
(selectamountfromaaainwheremonth=3andm.year=aaa.year)asm3,
aaamwharamont.h=4andm.year:aaa.year)asm4
fromaaagroupbyyear/TirtfcTaExmx?xmEMXmcf?■,Xn?m/n/八la3E/T?m
SQL:select*!5.說明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a新表名:b)
SQL:select*intobfromawhereK>1(wherel=l,拷貝表結(jié)構(gòu)和數(shù)據(jù)內(nèi)容)
ORACLE:createtableb
As
_<>笊)*(6^5aMzfec&npact)
訕擬兩個(gè)表達(dá)式。當(dāng)使用此運(yùn)算符比擬非空表達(dá)式時(shí),如果左操作數(shù)不等于右操
作數(shù),那么結(jié)果為TRUEo否那么,結(jié)果為FALSE。].
原表:
courseidcoursenamescore1java70
2oracle903xml40
4jsp305servlet80
105
為了便于閱讀,查詢此表后的結(jié)果顯式如下(及格分?jǐn)?shù)為60):courseid
coursenamescoremarkjava70pass
1oracle90passxml40fail
2jsp30failservlet80pass
寫出此查詢語句selectcourseid,coursename,score,if(score>=60,
pass","failff)asmarkfromcourse
7.表購物信息
購物人商品名稱數(shù)量
A甲2
B乙4
C丙1
AT2
給出所有購入確為兩種或兩種以上的購物人記錄
答:select*from購物信息where購物人in(select購物人from購物信息group
by購物人havingcount(*)>=2);8.
info表dateresult
2005-05-09win2005-05-09lose
2005-05-09lose2005-05-09lose
2005-05-10win2005-05-10lose
2005-05-10lose106
如果耍生成以下結(jié)果,該如何寫sql語句?winlose2005-05-0922
2005-05-1012答案:
(1)selectdate,sum(casewhenresult="win"then1else0end)as〃
win〃,sum(casewhenresult二"lose〃then1else0encl)as〃lose,!from
infogroupbydate;selecta.date,a.resultaswin,b.resultaslose
from
(selectdate,count(result)asresultfrominfowhereresult二"winf,
groupbydate)asa
join
(selectdate,count(result)asresultfrominfowhereresult=fflose"
groupbydate)asb
ona.date=b.date;107
第13章JVM13.1JVM內(nèi)存分哪幾個(gè)區(qū),每個(gè)區(qū)的作用是什么?
類裝載器子系統(tǒng)
Classloader
Classfiles
類裝載器子系統(tǒng)
Classloader
方法區(qū)
MethodArea
運(yùn)行時(shí)數(shù)據(jù)區(qū)(RuntimeDataArea)
方法區(qū)Java棧本法棧
MethodAreaJavastackNativeMethodStack
程序計(jì)數(shù)器
ProgramCounterRegister
堆Execution
heapEngine
java虛擬機(jī)主要分為以下幾個(gè)區(qū):
本地方法接口本地方法走
1)方法區(qū):NativeInterface
a.有時(shí)候也成為永久代,在該區(qū)內(nèi)很少發(fā)生垃圾回收,但是并不代表不發(fā)生GC,在這里進(jìn)行
的GC主要是對(duì)方法區(qū)里的常量池和對(duì)類型的卸載b.方法區(qū)主要用來存儲(chǔ)已被虛擬機(jī)加載
的類的信息、常量、靜態(tài)變量和即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。
c.該區(qū)域是被線程共享的。
d.方法區(qū)里有一個(gè)運(yùn)行時(shí)常量池,用于存放靜態(tài)編譯產(chǎn)生的字面量和符號(hào)引用。該常量池具
有動(dòng)態(tài)性,也就是說常量并不一定是編譯時(shí)確定,運(yùn)行時(shí)生成的常量也會(huì)存在這個(gè)常量池
中。
2)虛擬機(jī)棧:
a.虛擬機(jī)棧也就是我們平常所稱的棧內(nèi)存,它為java方法服務(wù),每個(gè)方法在執(zhí)行的時(shí)候都會(huì)
創(chuàng)立一個(gè)棧幀,用于存儲(chǔ)局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接和方法出口等信息。
108
5)您還有什么想問的問題?
>這是表達(dá)個(gè)人眼界和層次的問題
>問題本身不在于面試官想得到什么樣的答案,而在于你跟別的應(yīng)聘者的比照
>標(biāo)準(zhǔn)答案:
公司希望我入職后的3-6個(gè)月內(nèi),給公司解決什么樣的問題公司(或者對(duì)這個(gè)部門)
未來的戰(zhàn)略規(guī)劃是什么樣子的?
以你現(xiàn)在對(duì)我的了解,您覺得我需要多長(zhǎng)時(shí)間融入公司?
6)您最快多長(zhǎng)時(shí)間能入職?
一周左右,如果公司需要,可以適當(dāng)提前兩個(gè)考前須知
1)職業(yè)化的語言2)職業(yè)化的形象
1.3.2自我介紹(控制在4分半以內(nèi),不超過5分鐘)1)個(gè)人基本信息
2)工作履歷
時(shí)間、公司名稱、任職崗位、主要工作內(nèi)容、工作業(yè)績(jī)、離職原因3)深度溝通(也叫壓
力面試)
刨根問底下沉式追問(注意是下沉式,而不是發(fā)散式的)
基本技巧:往自己熟悉的方向說第2章手寫代碼
2.1冒泡排序/★*
*冒泡排序時(shí)間復(fù)雜度0(n人2)空間復(fù)雜度0(1)
*/publicclassBubbleSort{
publicstaticvoidbubbleSort(int[]data){System.out.printin(〃開始排序”);
intarrayLength=data.lcngth;10
b.虛擬機(jī)棧是線程私有的,它的生命周期與線程相同。
c.局部變量表里存儲(chǔ)的是基本數(shù)據(jù)類型、returnAddress類型(指向一條字節(jié)碼指令的地址)
和對(duì)象引用,這個(gè)對(duì)象引用有可能是指向?qū)ο笃鹗嫉刂返囊粋€(gè)指針,也有可能是代表對(duì)象
的句柄或者與對(duì)象相關(guān)聯(lián)的位置。局部變量所需的內(nèi)存空間在編譯器間確定d.操作數(shù)棧的
作用主要用來存儲(chǔ)運(yùn)算結(jié)果以及運(yùn)算的操作數(shù),它不同于局部變量表通過索引來訪問,而
是壓棧和出棧的方式
e.每個(gè)棧幀都包含一個(gè)指向運(yùn)行時(shí)常量池中該棧幀所屬方法的引用,持有這個(gè)引用是為了支
持方法調(diào)用過程中的動(dòng)態(tài)連接.動(dòng)態(tài)鏈接就是將常量池中的符號(hào)引用在運(yùn)行期轉(zhuǎn)化為直接
引用。
3)本地方法棧:
本地方法棧和虛擬機(jī)棧類似,只不過本地方法棧為Native方法服務(wù)。
4)堆:
java堆是所有線程所共享的一塊內(nèi)存,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)立,幾乎所有的對(duì)象實(shí)例都在這里創(chuàng)
立,因此該區(qū)域經(jīng)常發(fā)生垃圾回收操作。
5)程序計(jì)數(shù)器:
內(nèi)存空間小,字節(jié)碼解釋器工作時(shí)通過改變這個(gè)計(jì)數(shù)值可以選取下一條需要執(zhí)行的字節(jié)碼指令,
分支、循環(huán)、跳轉(zhuǎn)、異常處理和線程恢復(fù)等功能都需要依賴這個(gè)計(jì)數(shù)器完成。該內(nèi)存區(qū)域是唯
一一個(gè)java虛擬機(jī)規(guī)范沒有規(guī)定任何00M情況的區(qū)域。
13.2Java類加載過程?
Java類加載需要經(jīng)歷一下幾個(gè)過程:
1)加載加載時(shí)類加載的第一個(gè)過程,在這個(gè)階段,將完成一下三件事情:
a.通過一個(gè)類的全限定名獲取該類的二進(jìn)制流。
b.將該二進(jìn)制流中的靜態(tài)存儲(chǔ)結(jié)構(gòu)轉(zhuǎn)化為方法去運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)。
C.在內(nèi)存中生成該類的Class對(duì)象,作為該類的數(shù)據(jù)訪問入口。
2)驗(yàn)證驗(yàn)證的目的是為了確保Class文件的字節(jié)流中的信息不回危害到虛擬機(jī).在該階段主要
完成以下四鐘驗(yàn)證:
a.文件格式驗(yàn)證:驗(yàn)證字節(jié)流是否符合Class文件的規(guī)范,如主次版本號(hào)是否在當(dāng)前虛擬機(jī)
范圍內(nèi),常量池中的常量是否有不被支持的類型.
b-元數(shù)據(jù)驗(yàn)證:對(duì)字節(jié)碼描述的信息進(jìn)行語義分析,如這個(gè)類是否有父類,是否集成了不被
繼承的類等。
C.字節(jié)碼驗(yàn)證:是整個(gè)驗(yàn)證過程中最復(fù)雜的一個(gè)階段,通過驗(yàn)證數(shù)據(jù)流和控制流的分析,109確
定程序語義是否正確,主要針對(duì)方法體的驗(yàn)證。如:方法中的類型轉(zhuǎn)換是否正確,跳轉(zhuǎn)指令是
否正確等。
d.符號(hào)引用驗(yàn)證:這個(gè)動(dòng)作在后面的解析過程中發(fā)生,主要是為了確保解析動(dòng)作能正確執(zhí)行。
已準(zhǔn)備準(zhǔn)備階段是為類的靜態(tài)變量分配內(nèi)存并將其初始化為默認(rèn)值,這些內(nèi)存都將在方法區(qū)
中進(jìn)行分配。準(zhǔn)備階段不分配類中的實(shí)例變量的內(nèi)存,實(shí)例變量將會(huì)在對(duì)象實(shí)例化時(shí)隨著對(duì)
象一起分配在Java堆中。
3)解析該階段主要完成符號(hào)引用到直接引用的轉(zhuǎn)換動(dòng)作,解析動(dòng)作并不一定在初始化動(dòng)作完成
之前,也有可能在初始化之后。
4)初始化初始化時(shí)類加載的最后一步,前面的類加載過程,除了在加載階段用戶應(yīng)用程序可
以通過自定義類加載器參與之外,其余動(dòng)作完全由虛擬機(jī)主導(dǎo)和控制。到了初始化階段,才
真正開始執(zhí)行類中定義的Java程序代碼。
13.3java中垃圾提供的方法有哪些?
1)引用計(jì)數(shù)法應(yīng)用于:微軟為C0M/ActionScrip3/Python等
a)如果對(duì)象沒有被引用,就會(huì)被回收,缺點(diǎn):需要維護(hù)一個(gè)引用計(jì)算器2)復(fù)制算法年
輕代中使用的是MinorGC,這種GC算法采用的是復(fù)制算法(Copying)
a)效率高,缺點(diǎn):需要內(nèi)存容量大,比擬耗內(nèi)存
b)使用在占空間比擬小、刷新次數(shù)多的新牛區(qū)3)標(biāo)記清除老年代一般是由標(biāo)記清除或者
是標(biāo)記清除與標(biāo)記整理的混合實(shí)現(xiàn)
a)效率比擬低,會(huì)差生碎片。
4)標(biāo)記壓縮老年代一般是由標(biāo)記清除或者是標(biāo)記清除與標(biāo)記整理的混合實(shí)現(xiàn)
a)效率低速度慢,需要移動(dòng)對(duì)象,但不會(huì)產(chǎn)生碎片,
5)標(biāo)記清除壓縮標(biāo)記清除-標(biāo)記壓縮的集合,屢次GC后才Compact
a)使用于占空間大刷新次數(shù)少的養(yǎng)老區(qū),是34的集合體如何判斷一個(gè)對(duì)象是否存活?
(或者GC對(duì)象的判定方法)
判斷一個(gè)對(duì)象是否存活有兩種方法:
1)引用計(jì)數(shù)法110
2)可達(dá)性算法(引用鏈法)什么是類加載器,類加載器有哪些?
實(shí)現(xiàn)通過類的權(quán)限定名獲取該類的二進(jìn)制字節(jié)流的代碼塊叫做類加載器。
主要有一下四種類加載器:
1)啟動(dòng)類加載器(BootslrapClassLoader)用來力n載java核心類庫,無法被java程序直接引用。
2)擴(kuò)展類加載器(extensionsclassloader):它用來加載Java的擴(kuò)展庫。Java虛擬機(jī)的實(shí)現(xiàn)會(huì)提供
一個(gè)擴(kuò)展庫目錄。該類加載器在此目錄里面查找并加載Java類。
3)系統(tǒng)類加載器(systemclassloader)也叫應(yīng)用類加載器:它根據(jù)Java應(yīng)用的類路徑
(CLASSPATH)來加載Java類。一般來說,Java應(yīng)用的類都是由它來完成加載的。
可以通過ClassLoader.getSystemClassLoader。來獲取它。
4)用戶自定義類加載器,通過繼承類的方式實(shí)現(xiàn)。
13.6簡(jiǎn)述Java內(nèi)存分配與收策略以及MinorGC和MajorGC
(fullGC)內(nèi)存分配:
1)棧區(qū):棧分為java虛擬機(jī)棧和本地方法棧2)堆區(qū):堆被所有線程共享區(qū)域,在虛擬機(jī)啟動(dòng)時(shí)
創(chuàng)立,唯一目的存放對(duì)象實(shí)例。堆區(qū)是gc的主要區(qū)域,通常情況下分為兩個(gè)區(qū)塊年輕代和年老
代。更細(xì)一點(diǎn)年輕代又分為Eden區(qū),主要放新創(chuàng)立對(duì)象,F(xiàn)romsurvivor和Tosurvivor保存
gc后幸存下的對(duì)象,默認(rèn)情況下各自占比8:l:k
3)方法區(qū):被所有線程共享區(qū)域,用于存放已被虛擬機(jī)加載的類信息,常量,靜態(tài)變量等數(shù)據(jù)。
被Java虛擬機(jī)描述為堆的一個(gè)邏輯局部。習(xí)慣是也叫它永久代(pennanmentgencration)4)
程序計(jì)數(shù)器:當(dāng)前線程所執(zhí)行的行號(hào)指示器。通過改變計(jì)數(shù)器的值來確定下一條指令,比
方循環(huán),分支,跳轉(zhuǎn),異常處理,線程恢復(fù)等都是依賴計(jì)數(shù)器來完成。線程私有的。
回收策略以及MinorGC和MajorGC:
1)對(duì)象優(yōu)先在堆的Eden區(qū)分配。
2)大對(duì)象直接進(jìn)入老年代。
3)長(zhǎng)期存活的對(duì)象將直接進(jìn)入老年代。
當(dāng)Eden區(qū)沒有足夠的空間進(jìn)行分配時(shí),虛擬機(jī)會(huì)執(zhí)行一次MinorGC.MinorGC通常發(fā)生在新
生代的Eden區(qū),在這個(gè)區(qū)的對(duì)象生存期短,往往發(fā)生GC的頻率較高,回收速度比擬llI快;Full
Gc/MajorGC發(fā)生在老年代,一般情況下,觸發(fā)老年代GC的時(shí)候不會(huì)觸發(fā)MinorGC,但是通過
配置,可以在FullGC之前進(jìn)行一次MinorGC這樣可以加快老年代的回收速度。
第14章JUCSynchronized與Lock的區(qū)另lj
1)Synchronized能實(shí)現(xiàn)的功能Lock都可以實(shí)現(xiàn),而且Lock比Synchronized更好用,更靈
活。
2)Synchronized可以自動(dòng)上鎖和解鎖;Lock需要手動(dòng)上鎖和解鎖Runnable和Callable的
區(qū)別
1)Runnable接口中的方法沒有返回值:Callable接口中的方法有返叵I值Runnable接口中的方
法沒有拋出異常;Callable接口中的方法拋出了異常
2)Runnable接口中的落地方法是call方法;Callable接口中的落地方法是run方法
什么是分布式鎖
當(dāng)在分布式模型下,數(shù)據(jù)只有一份(或有限制),此時(shí)需要利用鎖的技術(shù)控制某一時(shí)刻修改
數(shù)據(jù)的進(jìn)程數(shù)。分布式鎖可以將標(biāo)記存在內(nèi)存,只是該內(nèi)存不是某個(gè)進(jìn)程分配的內(nèi)存而是公共
內(nèi)存,如Rudis,通過scl(key,value,nx,px,liineoul)方法添力口分飾式鎖。
14.1什么是分布式事務(wù)
分布式事務(wù)指事務(wù)的參與者、支持事務(wù)的服務(wù)器、資源服務(wù)器以及事務(wù)管理器分別位于不
同的分布式系統(tǒng)的不同節(jié)點(diǎn)之上。簡(jiǎn)單的說,就是一次大的操作由不同的小操作組成,這些小
的操作分布在不同的服務(wù)器上,且屬于不同的應(yīng)用,分布式事務(wù)需要保證這些小操作要么全部
成功,要么全部失敗。
第15章模擬考試選擇題
14.1.1HDFS1,下面哪個(gè)程序負(fù)責(zé)HDFS數(shù)據(jù)存儲(chǔ)?
a)NameNodeb)Jobtrackerc)Datanoded)secondaryNameNodee)tasktrackerHDfS中的block
默認(rèn)保存幾份?
心3份房2份61份d)不確定以下哪個(gè)程序通常與NameNode在一個(gè)節(jié)點(diǎn)啟動(dòng)?
112
a)SecondaryNameNodeb)DataNodec)TaskTrackerd)Jobtracker
解析:
JobTracker對(duì)應(yīng)于NameNode
TaskTracker對(duì)應(yīng)于DataNodeHDFS默認(rèn)BlockSize
a)32MBb)64MBc)128MB
注:舊版本是64MBelient端上傳文件的時(shí)候以下哪項(xiàng)正確
a)數(shù)據(jù)經(jīng)過NameNode傳遞給DataNode
b)Client端將文件切分為Block,依次上傳
c)Client只上傳數(shù)據(jù)到一臺(tái)DataNode,然后由NameNode負(fù)貢Block宴制工作
分析:
Client向NameNode發(fā)起文件寫入的請(qǐng)求。
NameNode根據(jù)文件大小和文件塊配置情況,返回給Client它所管理局部DataNode的信
Client將文件劃分為多個(gè)Block,根據(jù)DataNode的地址信息,按順序?qū)懭氲矫恳粋€(gè)
DataNode塊中。
2.下面與HDFS類似的框架是?C
ANTFSBFAT32CGESDEX13集群管埋
L以下哪項(xiàng)通常是集群的最主要瓶頸C
a)CPUb)網(wǎng)絡(luò)c)磁盤10d)內(nèi)存.關(guān)于SecondaryNameNode哪項(xiàng)是正確的?C
a)它是NameNode的熱各
b)它對(duì)內(nèi)存沒有要求
c)它的目的是幫助NameNode合并編輯日志,減少NameNode啟動(dòng)時(shí)間
d)SecondaryNameNode應(yīng)與NameNode部署到一個(gè)節(jié)點(diǎn).配置機(jī)架感知的下面哪項(xiàng)正確C
a)如果一個(gè)機(jī)架出問題,不會(huì)影響數(shù)據(jù)讀寫113
b)寫入數(shù)據(jù)的時(shí)候會(huì)寫到不同機(jī)架的DataNode中
c)M叩Reduce會(huì)根據(jù)機(jī)架獲取離自己比擬近的網(wǎng)絡(luò)數(shù)據(jù)4,以下哪個(gè)是Hadoop運(yùn)行的模
式ABC
a)單機(jī)版b)偽分布式c)分布式5.Cloudera提供哪幾種安裝式H的方法A
a)Clouderamanagerb)Tarballc)Yumd)Rpm14.1.3ZookeeperStill
1.卜面與Zookeeper類似的框架是?D
AProtobuf
BJava
CKafka
DChubby14.2判斷題
14.2.1集群管理
Ganglia不僅可以進(jìn)行監(jiān)控,也可以進(jìn)行告警。(正確)
1.Nagios不可以監(jiān)控Hadocp集群,因?yàn)樗惶峁〩adoop支持。(錯(cuò)誤)如果NameNode意
外終止,SecondaryNameNode會(huì)接替它使集群繼續(xù)工作。(錯(cuò)誤)
2.ClouderaCDH是需要付費(fèi)使用的。(錯(cuò)誤)NameNode負(fù)責(zé)管理metadata,client端每次讀
寫請(qǐng)求,它都會(huì)從磁盤中讀取或那么會(huì)寫入metadata信息并反應(yīng)client端。(錯(cuò)誤)
3.DataNodc通過長(zhǎng)連接與NamcNodc保持通信。錯(cuò)誤
Hadoop自身具有嚴(yán)格的權(quán)限管理和平安措施保障集群正常運(yùn)行。(錯(cuò)誤)
4.Slave節(jié)點(diǎn)要存儲(chǔ)數(shù)據(jù),所以它的磁盤越大越好。(錯(cuò)誤)hadoopdfsadmin-report命
令用于檢測(cè)HDFS損壞塊。(借誤)
5.Hadoop默認(rèn)調(diào)度器策略為FIFO(錯(cuò)誤)
集群內(nèi)每個(gè)節(jié)點(diǎn)都應(yīng)該配RAID,這樣防止單磁盤損壞,影響整個(gè)節(jié)點(diǎn)運(yùn)行。(錯(cuò)誤)
6.Hadoop環(huán)境變量中的HADOOP.HEAPSIZE用于設(shè)置所有Hadoop守護(hù)線程的內(nèi)存。它
默認(rèn)是2()0GB。(錯(cuò)誤)114
7.DataNode首次加入cluster的時(shí)候,如果log中報(bào)告不兼容文件版本,那需要NameNode執(zhí)
行一Hadoopnamenode-formatII操作格式化磁盤。(錯(cuò)誤)
14.2.2HDFSBlockSize是不可以修改的。(錯(cuò)誤)
1.Hadoop支持?jǐn)?shù)據(jù)的隨機(jī)讀寫。(錯(cuò))3?因?yàn)镠DFS有多個(gè)副本,所以NameNode是不存
在單點(diǎn)問題的。(錯(cuò)誤)
14.2.3MapReducel.Hadoop是Java開發(fā)的,所以MapReduce只支持Java語言編
寫。(錯(cuò)誤)
2.每個(gè)map就是■■個(gè)線程。(錯(cuò)誤).Mapreduce的inputsplit就是一個(gè)blocko(錯(cuò)
誤)
115
for(inti=0;i<arrayLength-1;i++){booleanflag=false;
for(intj=0;j<arrayLength-1-i;j++){if(data[j]>data[j+1]){
inttemp=data[j+l];data[j+1]=data|j);
data[j]=tcmp;flag=true;
))
System.out.printin(java.util.Arrays.toString(data));if(!flag)break;
)
)
publicstaticvoidmain(String[]args){int[]data={9,-16,21,23,-30,-49,21,30,30);
System.out.println(*'序之前:\nn+java.util.Arrays.toString(data));
bubbleSort(data);System.out.printinC排序之后:W+
java.util.Arrays.toString(data));
))
二分查找全流程fAaikeba
125810253564
10
Ie代midright2.2二分查找
二分查找前提:數(shù)組有序
10>&向左道歷.mid敏值給left,杳找范圍城半二分堂找的思路.先找到中間值
.然后將中間值和查找值比擬相等,找出
中向值>查找值,向左進(jìn)行遞歸查找中聞伍<杏找便,向右進(jìn)行遞歸杳找
findVai
[00leftmidright如果存在值,就返回而應(yīng)的卜標(biāo).否那么返回t圖4-二分查找核心思路
10<25,向右遍歷.midright,查找英圖再次減半
leftmidright
10=10、找到.返回Ed
實(shí)現(xiàn)代碼:
/**
*二分查找時(shí)間復(fù)雜度0(【og2n);空間復(fù)雜度0(1)
*/defbinarySearch(arr:Array[Int]rleft:Int,right:Int,findVai:Int):
Int={
if(left)right){〃遞歸退出條件,找不到,返回-1
-1
valmidIndex=(left+right)/2if(findVal<arr(midLnd?x)){〃向左遞歸查找
biiiaiySeaich(aii,left,inidiiidex,fiudVal)
}elseif(findVal>arr(midI:ndex)){〃向右遞歸查找binarySearch(arrf
midIndex,righl,findVal)}else{〃查找至Ij,返回下標(biāo)midIndex
))拓展需求:當(dāng)一個(gè)有序數(shù)組中,有多個(gè)相同的數(shù)值時(shí),如何將所有的數(shù)值都查找到。
代碼實(shí)現(xiàn)如下:
i大
{1,8,10,89,1000,1000,1234}當(dāng)?個(gè)有序數(shù)組中,有多個(gè)相同的數(shù)值時(shí),如何將所有的數(shù)
值都查找到,比方這里的1000.
〃分析
1.返回的結(jié)果是一個(gè)可變數(shù)組ArrayBuff一r
2.在找到結(jié)果時(shí),向左邊掃描,向右邊掃描[條件]
3.找到結(jié)果后,就加入到ArrayBuffer
*/defbinar)rSearch2(arr:Array[Int],1:工nt,r:Int,findVal:Int):
ArrayBuffer[Int]={
〃找不到條件?
if(l>r){
returnArrayBuffer())
valmidlndex=(1+r)/2
valmidVai=arr(midlndex)
if(midVai>findVal){〃向左進(jìn)行遞歸查找
binarySearch2(arr,1,midlndex-lrfindVal))elseif(midVai<findVal){〃向右進(jìn)行遞
歸查找binaryScarch2(arr,midlndex+lrfindVal)
}else{
printin(^micllndex^+mid工nd一x)//定義一個(gè)可變數(shù)組
valresArr=ArrayBuffer[Int]()〃向左邊掃描
vartemp=midIndex-1
breakable(12
while(true){if(temp<0||
arr(temp)!=findVai){break
0
)if(arr(temp)
==findVal)
{resArr.appe
nd(temp)
)temp-=1
)
)
〃將中間這個(gè)索引加入resArr.append(midlndex)〃向右邊掃描temp=midlndex+1
breakable{while(true){
if(temp>arr.length-1||arr(temp)!=findVai){break())
if(arr(temp)==findVal){resArr.append(temp))
temp+=1)
}returnresArr)
2.3快排
k'ikaba
快速排序圖解核心思想
1.取數(shù)組最左邊為左點(diǎn)(15),取數(shù)組最右邊為6點(diǎn)口6),取數(shù)阻中間值為基準(zhǔn)點(diǎn)(即將數(shù)據(jù)分成西阻的中間值點(diǎn)10)varhint=left
157108<—16varr:Int=right
varpivot7rMieft+nght)/2),左點(diǎn)向右走,到大于中間值此時(shí)右點(diǎn)向左走,在到小于中間值交換左右點(diǎn)的(ft
while(an(l)<pivotl(while(arr(r)>pivotl(temp=arr(l)l+=lr-=larr(l)=arr(r)
}}arr(r)=:emp
2
87_>101516左點(diǎn)向右走’“到大于中間值(無),比時(shí)右點(diǎn)向左上’“到小于中間值(無3第?輪結(jié)束
if(l>=r){
break。
3.這中間值左右兩邊拘個(gè)數(shù)級(jí)調(diào)用自身排序方法(遞歸),將左方兩個(gè)數(shù)組博序if0eft<r){l“rlght>l){
87101516quicksort-r,arr)quicksortsright,arr)ii
5?nn.
圖1-快速排序核心思想
78101516
代碼實(shí)現(xiàn):
/**
*快排
*時(shí)間復(fù)雜度:平均時(shí)間復(fù)雜度為O(nlogn)13
上空間復(fù)雜度:0(logn),因?yàn)檫f歸??臻g的使用問題
*/defquicksort(list:List[Int]):List[Int]=listmatch{caseNi1=>Ni1
caseList()=>List()
casehead::tail=>
val(left,right)=tail.partition(_<head)quicksort(left):二head::quicksort(right))
2.4歸并
歸并排序k'alkeba
核心思想
分一
核心思想:不斷的將大的數(shù)組分成兩個(gè)小數(shù)組,直到不能拆分為止,即形成了單個(gè)值。此
圖2-歸并排序核心思想
時(shí)使用合并的排序思想對(duì)己經(jīng)有序的數(shù)組進(jìn)行合并,合并為一個(gè)大的數(shù)據(jù),不斷重復(fù)此過程,
直到最終所有數(shù)據(jù)合并到一個(gè)數(shù)組為止。
14
歸并排序治流程
1<4,將1收入tempj右移temp
temp
2<4刈2放入tempMi核
_temp
7>6,將6取入temp,此時(shí)IH經(jīng)足出大用
456
直按珞1號(hào)數(shù)組剜余數(shù)據(jù)添加至期時(shí)數(shù)出
最后:將臨時(shí)數(shù)組的數(shù)據(jù)拷貝回原數(shù)組
圖3.歸并排序“治”流程
代碼實(shí)現(xiàn):
/**
*快排
*時(shí)間復(fù)雜度:O(n)ogn)
*空間復(fù)雜度:0(n)
*/defmerge(left:List[Int],right:List[Int]):List[Int]=(left,right)
nicitch{
case(Nil,_)=>right
case(_,Nil)=>left
case(x::xTail,y::yTail)=>if(x<=y)x::merge(xTail,right)
elsey::merge(left,yTail)
)15
2.5二叉樹之Scala實(shí)現(xiàn)二叉樹概念
二叉樹的概念fzaikeba
1)樹有很多種,每個(gè)節(jié)點(diǎn)最多只旨總有兩個(gè)子節(jié)點(diǎn)的一種形式稱為二叉樹-
2)二叉的的子節(jié)點(diǎn)分為左節(jié)點(diǎn)和右節(jié)點(diǎn).
3)如果該二叉樹的所有葉子節(jié)點(diǎn)都在最后一層,并且結(jié)點(diǎn)總數(shù)=2八n-l,n為層數(shù),那么我們稱為滿二叉W,
4)如果該二叉樹的所有葉子節(jié)點(diǎn)都在最后一層或者倒數(shù)第二層,而且最后一層的葉子節(jié)點(diǎn)在左邊連續(xù),倒數(shù)第二層的葉子節(jié)點(diǎn)在右邊連續(xù).
我們稱為完全二叉樹.
二叉樹滿二叉樹完全二叉樹,如果把《61>節(jié)點(diǎn)刪除,
二叉樹的特點(diǎn)就不是完全二叉樹了,因?yàn)槿~子節(jié)點(diǎn)不連城了
1)樹執(zhí)行查找、刪除、插入的時(shí)間復(fù)雜度都是0(logN)
2)遍歷二叉樹的方法包括前序、中序、后序
3)非平衡樹指的是根的左右兩邊的子節(jié)點(diǎn)的數(shù)量不一致
4)在非空二叉樹中,第i層的結(jié)點(diǎn)總數(shù)不超過,i>=l;
5)深度為h的二叉樹最多有個(gè)結(jié)點(diǎn)(h>=l),最少有h個(gè)結(jié)點(diǎn);
6)對(duì)于任意一棵二叉樹,如果其葉結(jié)點(diǎn)數(shù)為NO,而度數(shù)為2的結(jié)點(diǎn)總數(shù)為N2,那么
NON2+1;
2.5.1二叉樹的Scala代碼實(shí)現(xiàn)
定義節(jié)點(diǎn)以及前序、中序、后序遍歷classTreeNode(treeNo:Int){valno=treeNo
varleft:TreeNode=nullvarright:TreeNode=null
〃后序遍歷
defpostOrderO:Unit={
〃向左遞歸輸出左子樹16
//向右遞歸輸出右子樹if(this,right!=null)
)
〃輸出當(dāng)前節(jié)點(diǎn)值
n
printf(〃節(jié)點(diǎn)信息no=%d\nzno))
//中序遍歷
definfixOrdcr():Unit={
〃向左遞歸輸出左子樹if(this,left!=null){this.left.infixOrder()
)
〃輸出當(dāng)前節(jié)點(diǎn)值
printf("節(jié)點(diǎn)信息no=%d\nnzno)
〃向右遞歸輸出右子樹if(this,right!=null){this.right.infixOrder()
)
)
〃前序遍歷
defpreOrder():Unit={
〃輸出當(dāng)前節(jié)點(diǎn)值
printf(“節(jié)點(diǎn)信息no=%d\n”,no)
〃向左遞歸輸出左子樹if(this,left!=null){this.left.postOrder()
)
〃向右遞歸輸出右子樹if(this,right!=null){this,right.preOrder0
〃后序遍歷查找
defpostOrderSearch(no:Inc):TreeNodc={
〃向左遞歸輸出左子樹
varresNode:TreeNode=null
if(this.left!=null){
resNodc=this.lcft.postOrdcrScarch(no))it(rcsNodc!=null){returnresNodc
)
if(this.right!=null){
resNode=this.right.postOrderSearch(no))
if(resNode!=null){17
returnresNodc
)
printin("ttt??”)if(this.no==no){returnthis
)
resNode
〃中序遍歷查找
definfixOrderSearch(no:Int):TreeNode={
varresNode:TreeNode=null
〃先向左遞歸查找
if(this.left!=null){resNode=this.left.infixOrderSearch(no))if(resNode!=null){return
resNode
)
printin("yyy-----")if(no==this.no){returnthis
)
〃向右遞歸查找
if(this.right!=null){resNode=this.right.infixOrderSearch(no))returnresNode
)
〃前序查找
defpreOrderSearch(no:Int):TreeNode={if(no==this.no){returnthis
)
〃向左遞歸查找
varresNode:TreeNode=null
if(this
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通隧道美術(shù)課件
- 七年級(jí)語文上冊(cè) 第三單元 5背影教學(xué)實(shí)錄 北師大版
- 2025企業(yè)的合同履行與監(jiān)管制度
- 2025年上海員工勞動(dòng)合同
- 2025設(shè)備采購合同(合同示范文本)
- Module 5 Unit 1 I was two then.(教學(xué)設(shè)計(jì))-2023-2024學(xué)年外研版(三起)英語四年級(jí)下冊(cè)
- 23 月跡教學(xué)設(shè)計(jì)-2024-2025學(xué)年統(tǒng)編版語文五年級(jí)上冊(cè)
- 2025家居裝修工程合同范本
- 2023三年級(jí)語文下冊(cè) 第七單元 23 海底世界配套教學(xué)實(shí)錄 新人教版
- 2025網(wǎng)絡(luò)電視臺(tái)廣告發(fā)布合同
- 人教版2025-2026學(xué)年四年級(jí)數(shù)學(xué)下冊(cè)教學(xué)工作計(jì)劃(含進(jìn)度表)
- 二級(jí)甲等醫(yī)院評(píng)審標(biāo)準(zhǔn)與評(píng)價(jià)細(xì)則
- 江西省鷹潭市2023-2024學(xué)年六年級(jí)下學(xué)期數(shù)學(xué)期中試卷(含答案)
- 2025年宜昌科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫完整
- 2025年長(zhǎng)春醫(yī)學(xué)高等??茖W(xué)校單招職業(yè)技能測(cè)試題庫及完整答案1套
- 2024全球感染預(yù)防與控制報(bào)告
- 春季傳染病預(yù)防科普宣傳
- 廣播電視采訪與制作知到智慧樹章節(jié)測(cè)試課后答案2024年秋漢口學(xué)院
- 2025年中國華電集團(tuán)海南有限公司招聘筆試參考題庫含答案解析
- ERAS理念及臨床實(shí)踐
- 合規(guī)教育培訓(xùn)
評(píng)論
0/150
提交評(píng)論