互聯(lián)網(wǎng)提前批基本告一段落,大大小小的offer也拿了一些屹逛,秉著回報社會础废,堅持中國特色社會主義,挽救新一代碼農(nóng)的思想罕模,整理了下各個公司的面筋色迂、考點,希望能激勵各位搬磚工手销,起到鼓足干勁,力爭上游的作用O(∩_∩)O
噱頭
小姐姐♀說先拿出offer炸炸人图张,否則沒人看...咱不是那么庸俗的人锋拖,但也沒有那么脫俗...
鄙人從7月中旬開始找工作,找的是大數(shù)據(jù)研發(fā) or 大數(shù)據(jù)算法方向祸轮,反正圍著大數(shù)據(jù)打??兽埃,截止到9.12號為止,騰訊适袜、美團柄错、360安全研究院、搜狗苦酱、貝殼 都收到意向offer
當(dāng)然掛面也吃了不少??
阿里招聘系統(tǒng)有點bug售貌,沒找到機會去面,然后接受了一波勸退性筆試疫萤,最近看能不能找個好心的小姐姐推我進去面一波
百度三面電話沒接起來颂跨,然后沒然后了...
網(wǎng)易接了一波玄面~
頭條也去面了一波,不過真的沒復(fù)習(xí)那么全扯饶,回來海學(xué)一波恒削,也算值
滴滴給了一“真內(nèi)推”(直接問能來實習(xí)不池颈,來就有...),不過最近在風(fēng)頭上钓丰,考慮中...
offer的具體工作內(nèi)容不介紹了躯砰,怕被HR小姐姐查出來,請我去喝茶...
閑聊
本人北京985渣碩一枚携丁,是真的渣琢歇,舍友商湯、曠世则北,出國留學(xué)矿微,學(xué)校中各類大佬一坨,在夾縫中求生尚揣,混口飯吃
主攻方向:無涌矢。領(lǐng)導(dǎo)搞行政的,天天端茶倒水取快遞快骗,外掛寫不盡的基金本子娜庇,論文全靠個人參悟+上天憐憫
說點正事吧,關(guān)于工作路線方篮,我最終選擇的是大數(shù)據(jù)研發(fā)方向名秀,主要原因是研一上了點分布式的課,拿出來吹一吹藕溅,還能唬的住人匕得。個人感覺算法也能做,研發(fā)巾表、算法半斤八兩吧
學(xué)校這邊的話汁掠,有優(yōu)秀高校背書自然要好,沒有的話集币,就沒有吧考阱,大牛們不差這點,渣渣們大家也強不到哪去鞠苟,不必強求
項目乞榨,在讀書過程中,一定要了解個項目当娱,否則面試官真沒啥問題你的吃既,尬場基本就涼涼了。這項目不必真的是你的跨细,當(dāng)找工作時态秧,所有前輩、朋友的項目全都是你的扼鞋,包裝下申鱼,你說是你的就是你的愤诱,沒人去查你底細(xì)的,關(guān)鍵了解要深捐友,這樣和別人說底氣才足淫半。我有幸給一個數(shù)據(jù)流項目做了些邊角任務(wù),但在簡歷上匣砖,我成為了該項目的負(fù)責(zé)人...自己體會包裝的藝術(shù)...
簡歷科吭,我以前認(rèn)為大家“沒見過豬跑還沒吃過豬肉嗎”,網(wǎng)上那么多強調(diào)簡歷重要性的猴鲫,直到我看見我小師弟的簡歷对人,發(fā)現(xiàn)真的有人沒吃過豬肉(我學(xué)碩他專碩,一起找工作拂共,他有百度大廠背書牺弄,可這工作找的唉...)。最簡單的修改方法宜狐,讓你附近的同學(xué)看看势告,第一眼感覺可以嗎,可以就ok抚恒,不可以就gg咱台,照著人家的改改
現(xiàn)在前頭,準(zhǔn)備要早俭驮,投的也要早基本7月中旬就陸陸續(xù)續(xù)開始有提前批了回溺,錯過就沒了>...<
干貨
這貨也不干,過去一整陣子了混萝,我能寫多少給大家寫多少吧馅而,考點網(wǎng)上一抓一大把
技術(shù)面
先說說技術(shù)面流程:
讓你做自我介紹(準(zhǔn)備好)
看看你簡歷,說你對這個比較熟譬圣?balabla...你問的簡單就熟,問的難不好意思不太了解
看看你實習(xí)經(jīng)歷雄坪,讓你介紹實習(xí)干啥了厘熟,有沒有什么大項目能拿得出手,干聊10-20分鐘的
問問職業(yè)規(guī)劃维哈。這里表現(xiàn)出你態(tài)度的虔誠绳姨,不會亂跳槽,踏踏實實的干阔挠,讓他感受到你想進這家公司飘庄,兩眼能放光就更好了... 大佬們可以海吹一波
你有啥子問題。我一般預(yù)備兩個問題购撼,您這部門具體做什么能介紹一下跪削?我什么時候能知道自己是過了還是沒過呢谴仙?盡量不要不問,各路大佬在貼中都說過了
一定要把主動權(quán)掌握在自己手中碾盐,面試官會問很多你平時不了解或壓根不知道的問題晃跺,這時你可以說平時我用不到這些(可以理解啊,應(yīng)屆生上哪懂這么多邪門歪道啊毫玖,大佬請無視我)掀虎,然后說自己對xxx領(lǐng)域有點研究,引導(dǎo)他來問你
對面提問你時付枫,其實很考驗?zāi)愦疝q技巧的烹玉,當(dāng)你熟悉的東西時,那很OK阐滩,balabala即可二打,問你不熟悉的(你只知道點皮毛,但也在簡歷上寫了)叶眉,你可以說“我做項目時碰到過一點址儒,大體查了下,有點印象衅疙,您可以試著問一下”莲趣,這樣會讓面試官把期望放低,問題難度也會降低饱溢,答出來加分喧伞,答不出來也無所謂
HR面
自我介紹(準(zhǔn)備版非技術(shù)的! 從本科到大學(xué)绩郎,研究方向潘鲫,選擇這家公司理由,實習(xí)經(jīng)歷拉一拉肋杖,時間一般能湊夠了溉仑,讓對方感覺你是個健談的人)
聊聊興趣愛好(準(zhǔn)備些健康的愛好,游戲公司可以考慮非健康的...)
聊聊實習(xí)經(jīng)歷状植,和上下級處的如何浊竟,有壓力怎么辦
你有啥問題。我對這部門還有些不了解津畸,您能在系統(tǒng)介紹下嗎振定?入職培訓(xùn)介紹一下?
下面具體拉拉各廠面試經(jīng)歷吧肉拓,我把比較有特色的問題列出來后频,統(tǒng)一的我放在下面知識點了,重寫太麻煩了...
騰訊
難度:easy暖途,可能我比較幸運卑惜?
一面
電話面膏执,問了問Java的基礎(chǔ)問題,其中有印象的是
final這個字段用在字段和方法上的區(qū)別残揉,在方法上好像能加速胧后,大家自己查吧。抱环。
二面
現(xiàn)場面壳快,基本圍繞著你簡歷上問
xgboost相對gbrt改進
topK問題
三面
總監(jiān)面,這面基本聊聊實習(xí)的項目镇草,用到的技術(shù)等眶痰,不知死活的我問了問sp的問題...建議各位0-offer黨(offer滿天飛的大佬請無視我)不要在該環(huán)節(jié)問sp的問題,最后給不給sp梯啤,好像不是這伙計定的竖伯,具體還是看聊得情況,聊開了什么都能聊因宇,聊不開七婴,那就88
美團
難度:normal
一、二面
Java問了一堆
Spark問了一堆
然后給我介紹部門察滑,我基本在聽他說了...
后面知識點都有我就不展開寫了o_o ....
三面
問我刷題不打厘?(這想要我什么回答呢),杯子倒水智力題贺辰,實習(xí)項目聊一聊
360
難度:normal+
一面
上來懟了我一堆python的東西户盯,我python當(dāng)腳本用的,說能不能換個方向聊一聊饲化,然后懟了一堆
期望
準(zhǔn)確率召回率
AUC和ROC
決策樹聊一聊
闡述自己如何設(shè)計模型的
開始問題偏向于算法莽鸭,后來我說我其實擅長架構(gòu)類的東西...小姐姐說,這樣啊吃靠,不過看你答的還可以啊硫眨,架構(gòu)我就不問你了...
二面
問了些數(shù)據(jù)倉庫的問題,雪花型和星型數(shù)據(jù)庫等巢块,我表示一臉懵逼礁阁,然后和他扯Spark Streaming,他對這個還挺感興趣的夕冲,算是晃點住了,后面說加班怎么看裂逐,然后他開始介紹他NB的團隊歹鱼,我開始瞻仰,膜拜...最后問問能不能來實習(xí)卜高,基本回答都是能(不能的好像都沒了...)弥姻,時間節(jié)點自己需要把握一下南片,最好等到所有offer都下來的時候,我自己預(yù)估是10月中旬吧
頭條
難度:father
一面
spark streaming 懟一波
如何保證exactly once
tcp中全連接池和半連接池等
劍指offer上一道題:二叉樹蛇皮走位庭敦?疼进?
二面
yarn 調(diào)度算法
扯了扯spark streaming
一道算法,樹中兩節(jié)點找最親的爸爸...
實習(xí)聊一聊
面試官不是很感冒秧廉,問我還有什么補充了伞广,我竟然說沒...猝,血淋淋的教訓(xùn)啊
搜狗
難度:hard
一面
兩個面試官疼电,發(fā)了張卷子嚼锄,里面什么題都有:
排序、有重復(fù)的數(shù)組中查詢某數(shù)的index蔽豺,注意不要退化成o(N)的算法
在一棵樹中查找兩個節(jié)點的最近公共父節(jié)點(就是頭條二面那道題)
linux $$ $# $0 等含義
智力題 50紅 50黑 分配兩袋子摸球問題
n!后面有多少個0
hdfs的基本操作
大數(shù)據(jù)處理問題区丑,用spark處理下
二面
問我為啥不考慮讀博?(學(xué)的太渣修陡,感覺沒有必要讀...)
問我對前面面試官的看法(你要炒他們嗎沧侥。。魄鸦。)
實習(xí)聊一聊
貝殼
難度:normal+
講道理貝殼我是抱著去打小怪的心態(tài)去的宴杀,并沒打算留下的,但是面試體驗很好号杏,最后給的薪水超高婴氮、福利也爆炸盾致,缺點的話大家懂得,偏養(yǎng)老庭惜,看大家選擇吧。算是幫一面的大哥打波廣告吧
一面
數(shù)據(jù)傾斜怎么處理惠遏,我個人感覺我回答的比較差骏啰,以前沒仔細(xì)思考過這個問題节吮,后來查了查發(fā)現(xiàn)里面有很多道道。
但面試官很nice判耕,問了問我其他方面透绩,感覺還不錯,后面和我討論了30分鐘的職業(yè)發(fā)展問題,感覺來的很值帚豪,大哥我能加你微信嗎...
二面
比較年輕的高冷小哥面我的
Spark架構(gòu)
shuffle過程
Spark Streaming 原理
一道關(guān)于棋盤左上角跑到右下角的問題碳竟,從搜索、dp狸臣、到數(shù)學(xué)的方法都討論了一遍
機器學(xué)習(xí)捎帶說了一嘴
實習(xí)聊了聊
題外話
寫給需要的莹桅,不想死磕互聯(lián)網(wǎng)的人:ヽ(?????)?
讀博真的不錯,大家可以考慮下烛亦,真的是條出路诈泼,尤其你比較年輕的話
戶口互聯(lián)網(wǎng)不可兼得,最近在考慮戶口唉
國企此洲、銀行厂汗、公務(wù)員都可以考慮啊,感覺這類工作有空陪家人
知識點
最后呜师,送上我面試過程中整理出的知識點(可能有誤-_-||)娶桦,供大家查漏補全,希望大家都能找到個好offer (@^0^@)
Java
線程并發(fā)
這就是一天坑汁汗,基本問不完祈争,難度也是拉滿的那種...
Q:進程和線程的區(qū)別?
進程是資源分配的基本單位沮峡,線程是程序執(zhí)行的最小單位
進程有獨立的地址空間望薄,線程依托于進程存在颁虐,線程切換的開銷小
多進程組成的服務(wù)更穩(wěn)定瞬痘,一個進程掛了不會對另一個進程造成影響干签,相反,一個線程掛了闸度,依托該進程的所有線程都會崩潰
Q:進程間通信方式留量?
管道
信號量
消息隊列
共享內(nèi)存(IPC)
socket
核心目的是交換數(shù)據(jù)
除了會枚舉,這些名詞的具體概念也應(yīng)該做到心中有數(shù)可岂,傳送門
Q:線程間通信方式?
鎖機制
信號量
核心目的是同步
Q:Callable平斩、Runnable區(qū)別糜芳?
核心區(qū)別 Callable 有返回值塘辅,Runnable 沒有返回值
Callable的方法是call()哲银,而 Runnable的方法是run()
Callable可以拋出異常,而 Runnable不可以拋出異常
Q:Future和Callable的關(guān)系做院?
Callable執(zhí)行完后會有一個返回結(jié)果,可以通過Future類返回(異步計算的結(jié)果)。
此外酒奶,應(yīng)當(dāng)了解下FutureTask,其實現(xiàn)了Runnable和Future瘸彤,并存在接收Callable的構(gòu)造函數(shù)
Q:創(chuàng)建線程的方法?
繼承Thread,再通過Thread的start()
實現(xiàn)Runnable臼朗,再通過new Thread(runnable)包裝后,start()
用ExecutorService提交
Q:volatile關(guān)鍵字的作用?
防止指令重排(單例模式中)
內(nèi)存可見性
Q:synchronized的用法跪呈?
修飾實例方法苹支,作用于當(dāng)前對象,兩個不同對象不沖突
修飾靜態(tài)方法,作用于當(dāng)前類奴紧,兩個不同對象也沖突
修飾代碼塊沫浆,對指定對象加鎖
Q:講一下Java內(nèi)存模型?
網(wǎng)上一大堆,引用前人的清明上河圖
Q:CountDownLatch和CyclicBarrier了解嗎拄显?
CountDownLatch中一個線程等待其他幾個線程完成承边。
CyclicBarrier中幾個線程相互等待某一事件的達(dá)成。
CyclicBarrier可以復(fù)用翔始。
Q:Semaphore用法?
控制一組資源的使用脖镀,通過acquire()和release()獲取和釋放這組鎖飒箭,盼盼防盜門
Q:ThreadLocal作用?
修飾變量蜒灰,控制變量作用域枣耀,使變量在同一個線程內(nèi)的若干個函數(shù)中共享。
Q:單例與多例的區(qū)別纳决?
單例非static和static變量都是線程不安全的
多例非static變量是線程安全的翅溺,但static變量依舊是線程不安全的
可以通過synchronized或ThreadLocal來完成static變量的線程安全
Q:鎖釋放的時機?
執(zhí)行完同步代碼塊后
執(zhí)行同步代碼塊途中,發(fā)生了異常物舒,導(dǎo)致線程終止
執(zhí)行同步代碼塊途中,遇到wait關(guān)鍵字宏粤,該線程釋放對象鎖揽涮,當(dāng)前線程會進入線程等待池中村刨,等待被喚醒
Q:notify喚醒時機阿浓?
notify后不會立刻喚醒處于線程等待池中的線程涂炎,而是等當(dāng)前同步代碼塊執(zhí)行完烦感,才釋放當(dāng)前的對象鎖,并喚醒等待線程胀瞪。
Q:notify和notifyAll區(qū)別窖剑?
notify通知一個線程獲取鎖,而notifyAll通知所有相關(guān)的線程去競爭鎖
Q:講一下Lock?
Lock是為了彌補synchronized的缺陷而誕生的挽牢,主要解決兩種場景
讀寫操作,讀讀不應(yīng)該互斥
避免永久的等待某個鎖
Lock是一個類弹澎,并非Java本身帶的關(guān)鍵字殴胧,相對于synchronized而言,需要手動釋放鎖佩迟。
Q:鎖的種類团滥?
可重入鎖,如ReentrantLock
可中斷鎖报强,lockInterruptibly()反應(yīng)了Lock的可中斷性
公平鎖灸姊,synchronized是非公平鎖,Lock默認(rèn)也是非公平鎖(可調(diào)整)
讀寫鎖秉溉,如ReadWriteLock
集合
集合相對容易力惯,常規(guī)送分題,基本都會問到HashMap
Q:TreeSet特性召嘶?
內(nèi)部元素通過compare排序父晶。
Q:LinkedHashMap特性?
內(nèi)部有個雙向鏈表維護了插入key的順序弄跌,使得map能夠依據(jù)插入key的順序迭代甲喝。
Q:ArrayList與Vector的差別?
ArrayList是非線程安全的铛只,Vector是線程安全的埠胖。
Q:LinkedList與ArrayList的差別?
LinkedList基于鏈表淳玩,ArrayList基于數(shù)組
LinkedList沒有隨機訪問的特性
ArrayList刪除添加元素沒有LinkedList高效
Q:HashMap與HashTable的差別直撤?
HashTable線程安全,HashMap線程不安全
HashMap允許null key和value蜕着,而HashTable不允許
Q:Set與List的差別谋竖?各自有哪些子類?
Set不允許重復(fù)元素,List允許重復(fù)元素圈盔,List有索引
Set:HashSet豹芯、LinkedHashMap、TreeSet
List:Vector驱敲、ArrayList铁蹈、LinkedList
Q:hashCode()、equals()众眨、==區(qū)別握牧?
equals 比較兩個對象是否相等,若相等則其hashCode必然相等
若兩個對象的hashCode不等娩梨,則必然不equals
==比較內(nèi)存地址沿腰,比較是否是同一對象
Q:Java容器中添加的對象是引用還是值?
引用
Q:Iterator和ListIterator的區(qū)別狈定?
ListIterator 能向前遍歷颂龙,也能向后遍歷
可以添加元素
可以定位當(dāng)前index
Q:HashMap實現(xiàn)?
內(nèi)容巨多纽什,引用大佬面經(jīng)措嵌,值得一看,目錄供大家參考
hashing的概念
HashMap中解決碰撞的方法(拉鏈法)
equals()和hashCode()的應(yīng)用芦缰,在HashMap中到底如何判斷一個對象有無
不可變對象的好處
HashMap多線程的條件競爭
重新調(diào)整HashMap的大小
PS:HashSet是通過HashMap實現(xiàn)的
Q:ConcurrentHashMap和HashTable區(qū)別企巢?
HashTable通過synchronized來實現(xiàn)線程安全
ConcurrentHashMap通過分段鎖,僅鎖定map的某一部分
GC
這塊主要介紹JVM內(nèi)存的劃分以及GC算法
Q:什么是內(nèi)存泄漏和內(nèi)存溢出让蕾?
內(nèi)存泄漏:無法釋放已申請的內(nèi)存空間浪规,一次內(nèi)存泄露危害可以忽略,但堆積后果很嚴(yán)重探孝,無論多少內(nèi)存笋婿,遲早會被漏光。
內(nèi)存溢出:沒有足夠的內(nèi)存空間供其使用再姑。
內(nèi)存泄漏最后會導(dǎo)致沒有足夠的空間分配對象萌抵,從而導(dǎo)致內(nèi)存溢出找御,當(dāng)然也可能開始分配過大的對象導(dǎo)致內(nèi)存溢出
Q:導(dǎo)致內(nèi)存溢出的因素元镀?
內(nèi)存中加載的數(shù)據(jù)量過于龐大,如一次從數(shù)據(jù)庫取出過多數(shù)據(jù)霎桅。
集合類中有對象的引用栖疑,使用完后未清空,使得JVM不能回收滔驶。
代碼中存在死循環(huán)或循環(huán)產(chǎn)生過多重復(fù)的對象實體遇革。
啟動參數(shù)內(nèi)存值設(shè)定的過小。
Q:JVM內(nèi)存劃分?
堆:對象
方法區(qū):類萝快、靜態(tài)變量和常量
棧:局部變量表
基本說出上面三條就可以了锻霎,更詳細(xì)的見下圖,前門
Q:簡單說一下垃圾回收揪漩?
這可不簡單...
垃圾定義:
引用計數(shù)法:循環(huán)引用會bug
可達(dá)性算法:GC Roots旋恼,如 棧中的引用對象、方法區(qū)靜態(tài)奄容、常量對象冰更、本地方法區(qū)內(nèi)的對象,不在堆中就可以
堆中內(nèi)存分布:
新生代(33%):小對象昂勒,Eden:From Survivor:To Survivor=8:1:1
老年代(66%):大對象蜀细、長期存活的對象
永生代(三界之外):通常利用永生代來實現(xiàn)方法區(qū)
垃圾回收算法:
標(biāo)記清除算法
復(fù)制清除(新生代)
標(biāo)記整理清除(老年代)
Q:Minor GC、Major GC和 Full GC的區(qū)別戈盈?
Minor GC是對新生代做垃圾回收
Major GC是對老年代做垃圾回收
Full GC是對整個堆做垃圾回收
Q:Full GC觸發(fā)時機奠衔?
System.gc(),并非一定觸發(fā)塘娶,只是建議
老年代空間不足(核心觸發(fā)點涣觉,其他方案都是從這里衍生出來)
永生代空間不足(當(dāng)將方法區(qū)放在永生代中時)
Minor GC后晉升到老年代中的大小>老年代剩余空間(其實就是2.老年代空間不足的一種表現(xiàn))
堆中分配大對象(大對象可以直接進入老年代,導(dǎo)致老年代空間不足)
Q:什么是常量池血柳?
常量池分為靜態(tài)常量池和運行時常量池官册。
靜態(tài)常量池:指的是在*.class文件中的常量池
運行常量池:指的是將*.class文件中的常量裝載到內(nèi)存中方法區(qū)的位置(當(dāng)方法區(qū)放在永生代時,也可以理解為內(nèi)存中的永生代)
包含的信息:
字符串字面量
類难捌、方法信息
該問題一般會引出字符串常量比較
類加載
面試時有人問到過膝宁,回去大概查了下
Q:講一下類加載過程?
加載:將*.class文件通過各種類加載器裝載到內(nèi)存中
鏈接:分為三步
驗證:保證加載進來的字節(jié)流符合JVM的規(guī)范根吁,我理解成語法上的驗證(可能不嚴(yán)謹(jǐn))
準(zhǔn)備:為類變量(非實例變量)分配內(nèi)存员淫,賦予初值(該初值是JVM自已約定的初值,非用戶自定義初值击敌,除非是常量介返,用final static修飾的)
解析:將符號引用替換成直接引用(A.a()=> 某一內(nèi)存地址)
初始化:對類變量初始化,執(zhí)行類變量的構(gòu)造器
Q:Java初始化順序沃斤?
這是在愛奇藝碰到的一面試道題圣蝎,當(dāng)時差點兩眼一抹黑過去了...頭一次發(fā)現(xiàn)這么多東西要初始化
一個類中初始化順序(先類后實例)
類內(nèi)容(靜態(tài)變量、靜態(tài)初始化塊) => 實例內(nèi)容(變量衡瓶、初始化塊徘公、構(gòu)造器)
繼承關(guān)系的兩個類中初始化順序(先類后實例,再先父后子)
父類的(靜態(tài)變量哮针、靜態(tài)初始化塊)=> 子類的(靜態(tài)變量关面、靜態(tài)初始化塊)=> 父類的(變量坦袍、初始化塊、構(gòu)造器)=> 子類的(變量等太、初始化塊捂齐、構(gòu)造器)
Q:Java類加載器的種類?
啟動Boostrap類加載器:加載路徑<JAVA_HOME>/lib
擴展Extension類加載器:加載路徑<JAVA_HOME>/lib/ext
系統(tǒng)System類加載器:加載路徑 -classpath
Q:雙親委派模式了解嗎缩抡?
我理解的深度比較淺辛燥,個人理解,委派就是加載類時先看上層加載過沒缝其,如果加載過了挎塌,當(dāng)前就不加載了,直接使用當(dāng)成加載器加載的類内边。
其次是加載順序榴都,System->Extension->Boostrap
優(yōu)點:
避免重復(fù)加載類
核心API不會被改動
面向?qū)ο?/p>
這些問題很弱雞,但考的也比較多
Q:面向?qū)ο蟮娜筇匦裕?/b>
順口溜一般的背出來:封裝漠其、繼承嘴高、多態(tài)
然后會讓你講講這三個特性如何體現(xiàn),大家自己想想吧和屎,言之有理即可
Q:Java中接口和抽象類區(qū)別拴驮?
可以實現(xiàn)多個接口(implement),但只能繼承一個抽象類(extend)
接口中的方法不能實現(xiàn)柴信,抽象類中可以實現(xiàn)部分方法
接口中數(shù)據(jù)全是public static final類型的套啤,方法全是public abstract的
本質(zhì)上,接口是說對象能干什么随常,抽象類是說對象是什么
Q:重載和重寫潜沦?
豬腦子,老記混
重載:同一個類中绪氛,函數(shù)名一樣唆鸡,但接受的參數(shù)一定不同,返回的結(jié)果可以不同
重寫:不同類中枣察,函數(shù)名一樣争占,參數(shù)一樣,結(jié)果也一樣
設(shè)計模式
Q:例舉一下你了解的設(shè)計模式序目?
一般說5臂痕、6個,有個樣例就行了
組合模式:集合的addAll
裝飾者模式:stream的各種嵌套
抽象工廠:JDBC中driver創(chuàng)建新連接
建造者模式:StringBuilder或SQL中PreparedStatement
責(zé)任鏈:structs2中對請求的處理各種Filter
解釋器:正則表達(dá)式
觀察者:swing中的事件監(jiān)聽各種Listener
Q:手?jǐn)]單例宛琅?
擼完刻蟹,讓你講講內(nèi)部細(xì)節(jié)逗旁,volatile或多例問題
網(wǎng)絡(luò)協(xié)議
Q:TCP3次握手4次揮手嘿辟?
基本畫張圖就K.O.了舆瘪,fate門,內(nèi)部的問題也建議看一下
Q:TCP為什么是一定要是3次握手红伦,而不是2次或3次以上英古?
2次揮手的問題
在第1次建立過程中,client請求鏈接在網(wǎng)絡(luò)中滯留過久昙读,導(dǎo)致client發(fā)送第2次請求召调,建立完畢后,這時第1次的請求到達(dá)server蛮浑,server接收又維護一鏈接唠叛,但該鏈接實際上已經(jīng)作廢,浪費了server端的資源沮稚。
3次以上的方案
理論上艺沼,做到3次以上是可行的,但真正想做到一個完美可靠的通信是不可能的蕴掏,因為每次答復(fù)都是對上次請求的響應(yīng)障般,但該次答復(fù)在不可靠的信道中仍是會丟失的,考慮到現(xiàn)實效率問題盛杰,3次足以挽荡。
Q:TCP為什么是4次揮手,而不是3次呢即供?
握手的第二次攜帶了定拟,響應(yīng)ACK和請求SYN信息
揮手過程中不能一次性攜帶這兩種信息,因為server方可能還有數(shù)據(jù)沒傳輸完逗嫡。
Q:TCP半連接池與全連接池办素?
半連接池:接受client握手第一步請求時,將該次鏈接放到半連接池中祸穷,Synflood的主要攻擊對象
全連接池:接受client握手第二步請求時性穿,將該次鏈接從半連接池中取出放到全連接池中。
Q:TCP和UDP的區(qū)別雷滚?
TCP基于連接需曾,而UDP基于無連接
TCP由于有握手和揮手的過程消費資源相對較多
TCP是傳輸數(shù)據(jù)流,而UDP是數(shù)據(jù)報
TCP保證數(shù)據(jù)正確性和順序性祈远,而UDP可能丟包呆万,不保證有序
Q:TCP和UDP的應(yīng)用?
TCP:FTP车份、HTTP谋减、POP、IMAP扫沼、SMTP出爹、TELNET庄吼、SSH
UDP:視頻流、網(wǎng)絡(luò)語音電話
Q:TCP/IP與OSI模型严就?
TCP/IP模型总寻,自下而上
鏈路層
網(wǎng)絡(luò)層(IP、ICMP梢为、IGMP)
運輸層(TCP渐行、UDP)
應(yīng)用層(Telnet、FTP)
OSI模型铸董,自下而上
物理層
數(shù)據(jù)鏈路層
網(wǎng)絡(luò)層
運輸層
會話層
表示層
應(yīng)用層
Q:ping命令基于哪種協(xié)議祟印?
ICMP
Q:阻塞式和非阻塞式IO區(qū)別?
阻塞式
每來一個連接都會開啟一個線程來處理粟害,10個線程對應(yīng)10個請求
線程大多時候都在等在數(shù)據(jù)的到來旁理,浪費資源
適合并發(fā)量小,數(shù)據(jù)量大的應(yīng)用
非阻塞式
基本思想我磁,將所有連接放在一張table中孽文,然后輪詢處理
實現(xiàn)上可以用事件通知機制,可以用10個線程處理100個請求
適合并發(fā)量大夺艰,數(shù)據(jù)量小的應(yīng)用
數(shù)據(jù)庫
用數(shù)據(jù)庫做過開發(fā)芋哭,但是了解的不深入,面試問我會不會寫SQL時郁副,我多答“簡單的可以减牺,復(fù)雜的嘗試一下”...SQL復(fù)雜起來真不是人寫的...
Q:聚集索引和非聚集索引區(qū)別?
聚集索引:葉子節(jié)點是實際數(shù)據(jù)存谎,表中只能有一個聚集索引
非聚集索引:葉子節(jié)點是地址拔疚,需要再跳轉(zhuǎn)一次,表中可以有多個非聚集索引
Q:where既荚、group by稚失、having執(zhí)行順序?
where 過濾行數(shù)據(jù)
group by 分組
having 過濾分組
Q:星型恰聘、雪花結(jié)構(gòu)句各?
星型:存在部分冗余
雪花:表切分的十分細(xì),沒有冗余
Q:SQL縱向轉(zhuǎn)橫向晴叨,橫向轉(zhuǎn)縱列凿宾?
基本上,除了 group by + 聚集函數(shù) 外兼蕊,這是最難的 SQL 題了
縱向轉(zhuǎn)橫向
sum(case when A='a' then B else 0 end) as D
這里需要用sum或其他聚集函數(shù)初厚,因為作用在一個group中
橫向轉(zhuǎn)縱向
核心用union
記住這兩條做到舉一反三就可以了,Demo
Q:臟讀孙技、不可重復(fù)讀产禾、幻讀排作?
臟讀:事務(wù)A讀取了事務(wù)B提交的值
不可重復(fù)讀:事務(wù)A兩次讀取了事務(wù)B的值,事務(wù)B在該過程中修改并提交過下愈,導(dǎo)致A兩次讀取值不一致
幻讀:事務(wù)A修改 a 到 b 纽绍,事務(wù)B在該過程中添加了新的a蕾久,導(dǎo)致新添加的a势似,沒有修改成b
這引出事務(wù)隔離級別
Q:join實現(xiàn)的三種方式?
nested loops:嵌套迭代僧著,相當(dāng)于兩個for循環(huán)履因,內(nèi)部表有索引時,效果較好
merge join:將兩表先sort(如果沒sort的話)盹愚,再合并
hash join:將表hash栅迄,然后掃描另一表
Linux
Q:查看xxx端口占用?
netstat -tunlp |grep xxx
lsof -i:xxx
Q:查看xxx進程占用皆怕?
ps -ef |grep xxx
Q:查看CPU使用情況毅舆?
top
Q:查看內(nèi)存使用情況?
free
top
Q:查看硬盤使用情況愈腾?
df -l
Q:$0憋活、$n、$#虱黄、$*悦即、$@、$?橱乱、$$含義辜梳?
Q:>、>>區(qū)別泳叠?
>:重定向到一個文件
>>:追加到一個文件
Q:>作瞄、1>、2>危纫、2>&1粉洼、2>1區(qū)別?
>:默認(rèn)是正確輸出到某一文件叶摄,錯誤直接輸出到控制臺
1>:正確輸出
2>:錯誤輸出
2>&1:將錯誤輸出重定向到正確輸出中属韧,一般前面會有 1> a.txt,這樣后面的錯誤也會輸出到 a.txt蛤吓,通過正確輸出
2>1:錯誤輸出到 1 文件中宵喂,錯誤寫法,區(qū)分&1
Q:定時任務(wù)命令会傲?
crontab
算法
算法的海洋的無邊無際锅棕,但是應(yīng)付面試題的算法拙泽,個人認(rèn)為《劍指offer》一本足矣...
個人《劍指offer》刷了大概四遍,基本上看到一道題裸燎,所有解法都知道顾瞻,面試上也基本從這里出
我遇到現(xiàn)場出的算法題(除了《劍指offer》上的),一般是暴力搜索題德绿,不要上來想DP...
經(jīng)典問題
子串匹配問題
子序列匹配問題
合并鏈表
樹中兩個節(jié)點最近的公共父節(jié)點
快排荷荤、堆排
各種類型的二分查找
兩數(shù)交換,不用第三變量
水塘抽樣移稳,大佬題解
智力題
一根棍子隨機折三節(jié)蕴纳,組成三角形的概率
倒水問題
面粉稱重問題
燒繩子問題
大數(shù)據(jù)
這方面一般問的是偏向于各類框架
Hadoop
Yarn
Spark
Hive
HBase
Zookeeper
以上框架,大家各取所需吧个粱,總有幾個要能拿出來吹的古毛,我個人主要吹Spark這塊
Hive、HBase一般也是當(dāng)工具用的都许,主要問平時用沒用過稻薇,用過的話就會多問些,我一般是回答搭建過胶征,照著文檔看過一陣子塞椎,對方一般就不問了
Zookeeper在底層維護分布式的一致性,多少了解一些分布式協(xié)議raft這類的也是加分點
Hadoop
Q:兩表Join方案弧烤?
reduce side join:最基本的
map side join:分發(fā)小表忱屑,做only map
semi join + reduce side join:提取一表的key,分發(fā)出去暇昂,再做reduce side join莺戒,減輕join的數(shù)據(jù)量
semi join + bloomfilter + reduce side join:基于上面方案的改良,主要應(yīng)對key太大也放不下去的情況
3急波、4方案了解即可从铲,個人感覺有些不靠譜,面試中一般沒提澄暮,面試官一般要求到2名段,有數(shù)據(jù)傾斜的另說
Q:MapReduce過程?
大數(shù)據(jù)崗位必考題
三言兩語也說不清泣懊,建議去看網(wǎng)上大佬的伸辟,傳送門
看完后能回答如下幾個問題即可:
map處理過程中,數(shù)據(jù)滿了如何處理的
combiner作用馍刮、位置
幾次sort信夫,發(fā)生位置,什么樣的sort
Q:Hadoop 中 Secondary NameNode作用?
合并fsimage與editlog
Yarn
Q:Yarn架構(gòu)静稻?
Q:Yarn相對于Hadoop的優(yōu)勢警没,或說為什么要有Yarn?
簡化JobTracker振湾,將其功能下放到ResourceManager和ApplicationMaster
資源以內(nèi)存為單位杀迹,相比之前剩余slot更合理
通過Container的抽象,使集群能支持多種框架如Spark
Q:Yarn的三種調(diào)度器押搪?
這三張圖很好树酪,但我認(rèn)為這樣理解的深度不夠...有興趣的多看看
Q:Yarn延遲調(diào)度的含義?
主要針對當(dāng)作業(yè)所需的資源嵌言,在本地并沒有滿足時嗅回,會延遲一段時間及穗,再嘗試調(diào)度摧茴,實在不行時會放到別的機器上調(diào)度,主要因為本地調(diào)度效率最高埂陆。
Spark
Q:Spark有幾種部署模式苛白?
local
standalone
yarn
mesos
Q:standalone基本架構(gòu)?
Client:提交job
Master:收集client提交的job焚虱,管理worker
Worker:管理本節(jié)點的資源购裙,定時想master匯報使用情況
Driver:含DAGScheduler、TaskScheduler鹃栽,根據(jù)client與cluster決定driver的具體在client還是worker上
Executer:位于Worker上躏率,job真正執(zhí)行的地方
Q:groupByKey和reduceByKey哪個效率高?
reduceByKey效率更高民鼓,在每個executor上執(zhí)行時薇芝,附帶合并邏輯,結(jié)果更緊湊(可以理解為 key,value)丰嘉,shuffle量小
groupByKey保留同key的所有數(shù)據(jù)(可以理解為 key,List)
Q:數(shù)據(jù)傾斜是什么夯到?如何處理?
必考題饮亏,可以問的很深...
定義:shuffle過程中耍贾,某個幾個key對應(yīng)的value太多,集中在某一個reduce task中路幸,導(dǎo)致該task處理過慢或直接崩掉(out of memory)
解決方案:
換用更高性能的計算機荐开,加memory:從而避免內(nèi)存溢出,不過治標(biāo)不治本简肴,面試官一般不會滿意
修改并行度:說不定剛好把這幾個擁有眾多value的key劃分開來晃听,當(dāng)都集中在少數(shù)的key,或說在1個key上時,無效
加隨機數(shù)杂伟,做兩次聚合:第一次聚合時移层,key以 random數(shù)_key 作為新key,第二次聚合時赫粥,去掉random數(shù)观话,相當(dāng)于將原始key所對應(yīng)的分區(qū)先局部聚合,再統(tǒng)一聚合越平,面試官一般期待能講到這里
求大佬點撥频蛔,個人認(rèn)為隨機數(shù)這種算法可以解決一定的數(shù)據(jù)傾斜,但
用combiner的思想和這個是一致的秦叛?那random數(shù)_key似乎沒有什么價值了
只能解決可以用combiner的場景晦溪,不能用combiner的場景如何解決呢?
Q:傾斜join如何處理挣跋?
和上面的數(shù)據(jù)傾斜有一定聯(lián)系三圆,但不完全相同
map side join:在hadoop那邊講join方式提到過
加隨機值并擴容表:將傾斜key中,較小表映射成 range_key避咆,其中range取遍[0,...,n-1]中每個數(shù)舟肉,即小表中每條記錄會被映射成n條不一樣key的記錄;將較大表映射成single_key查库,其中single 是由 random(n) 產(chǎn)生路媚,即大小表中每條記錄會被映射成唯一一條隨機key的記錄,然后做join即可
Q:基本概念樊销?
問的很多整慎,主要看你對Spark的了解程度
RDD
DAG
Stage
寬依賴、窄依賴
并行度
Q:枚舉一下transform和action围苫?
transform:filter裤园、map、flatmap够吩、reduceByKey比然、groupByKey
action:take、collect周循、count强法、foreach
Spark Streaming
我一般和面試官吹 Spark Streaming,這部分提供給有需要的人吧
Q:Spark Streaming原理湾笛?
將數(shù)據(jù)流劃分成mini batch饮怯,本質(zhì)上是小批量數(shù)據(jù)的連續(xù)處理,核心是定時觸發(fā)Job的提交嚎研,除此之外蓖墅,針對流計算中window一類的概念做了一些特殊處理库倘,面試官要是還問你就給他展開講講...這里我就不展開了
Q:數(shù)據(jù)接收方式?
這點我一般結(jié)合Kafka來說论矾,從Kafka接受數(shù)據(jù)有兩種方案:
基于receiver:需要拉取數(shù)據(jù)到本地教翩,并做好備份,自己保證數(shù)據(jù)的完整性
基于底層API(direct):由kafka保證數(shù)據(jù)的完整性贪壳,spark streaming這邊只是計算好需要拉取的offset就可以了
Q:基于receiver數(shù)據(jù)接收的實現(xiàn)細(xì)節(jié)饱亿?
面試官這點主要想了解你對Spark Streaming源碼的熟悉程度,是否真正的深入研究過其接收過程闰靴,其實糊弄一下還是比較容易的...
從receiver接收的數(shù)據(jù)會從在一個buffer中
這時會有兩個定時器來處理
定時將buffer中的數(shù)據(jù)封裝成block
定時將block傳播出去存到BlockManager中彪笼,保證數(shù)據(jù)完整性的
Q:exactly once如何保證?
個人認(rèn)為這個問題是個很狠的問題蚂且,這個不是某幾個組件的使用問題配猫,而是整個系統(tǒng)的協(xié)調(diào)組織,我主要從三個方面來說這個問題
數(shù)據(jù)源:保證數(shù)據(jù)源可回溯杏死,防止數(shù)據(jù)丟失后泵肄,找不到原始數(shù)據(jù),這樣需要可靠的消息隊列來保證识埋,如Kafka
處理框架:處理框架需要自身來維護offset凡伊,在失敗時零渐,能夠明確自己處理到什么位置窒舟,由于數(shù)據(jù)完整性由上游保證,這里用 direct 的方式拉取即可
輸出:輸出算子要保證冪等性
我的理解就這么多诵盼,感覺很淺惠豺,歡迎大佬補充...
Kafka
Q:基本架構(gòu)?
Producer
Consumer
Broker
Topic
Partition
Leader
Follower
User Group
Offset
能把以上這些概念串起來基本就OK
Q:介紹下ISR副本策略风宁?
一個leader與一堆副本follower洁墙,follower從leader上拉取副本并返回ack,leader收集到足夠多的ack后戒财,認(rèn)為該message是committed热监,并返回給client。
該leader與這些follower被稱為 in sync 狀態(tài)饮寞,這個集合是動態(tài)變化的孝扛,當(dāng)某個follower拉下太多時,會被踢出該集合幽崩,從而保證了能快速的響應(yīng)用戶請求苦始,當(dāng)它追上來時會再加入該集合。
為了保證數(shù)據(jù)不丟失慌申,可以設(shè)置該集合最少需要多少個follwer陌选,當(dāng)小于該數(shù)時該partition便不可用
HBase
Q:介紹下HBase的原理與設(shè)計?
看完后能復(fù)述下面基本概念
Master
RegionServer
Region
memstore
HFile
HLog
其實還有章ML沒寫,但感覺問的不深就沒寫了咨油,大家有需求的話我在補上吧 (?′ω`?)