互聯網提早批基本告一段落,大大小小的offer也拿了一些,秉着回報社會,堅持中國特點社會主義,挽救新一代碼農的思想,整理了下各個公司的麪筋、考點,但願能激勵各位搬磚工,起到鼓足幹勁,力爭上游的做用O(∩_∩)Ohtml
小姐姐♀說先拿出offer炸炸人,不然沒人看...咱不是那麼庸俗的人,但也沒有那麼脫俗...python
鄙人從7月中旬開始找工做,找的是大數據研發 or 大數據算法方向,反正圍着大數據打☯️,截止到9.12號爲止,騰訊、美團、360安全研究院、搜狗、貝殼 都收到意向offerlinux
固然掛麪也吃了很多😭面試
offer的具體工做內容不介紹了,怕被HR小姐姐查出來,請我去喝茶...正則表達式
本人北京985渣碩一枚,是真的渣,舍友商湯、曠世,出國留學,學校中各種大佬一坨,在夾縫中求生,混口飯吃算法
主攻方向:無。領導搞行政的,每天端茶倒水取快遞,外掛寫不盡的基金本子,論文全靠我的參悟+上天憐憫數據庫
說點正事吧,關於工做路線,我最終選擇的是大數據研發方向,主要緣由是研一上了點分佈式的課,拿出來吹一吹,還能唬的住人。我的感受算法也能作,研發、算法半斤八兩吧設計模式
學校這邊的話,有優秀高校背書天然要好,沒有的話,就沒有吧,大牛們不差這點,渣渣們你們也強不到哪去,沒必要強求數組
項目,在讀書過程當中,必定要了解個項目,不然面試官真沒啥問題你的,尬場基本就涼涼了。這項目沒必要真的是你的,當找工做時,全部前輩、朋友的項目全都是你的,包裝下,你說是你的就是你的,沒人去查你底細的,關鍵瞭解要深,這樣和別人說底氣才足。我有幸給一個數據流項目作了些邊角任務,但在簡歷上,我成爲了該項目的負責人...本身體會包裝的藝術...安全
簡歷,我之前認爲你們「沒見過豬跑還沒吃過豬肉嗎」,網上那麼多強調簡歷重要性的,直到我看見我小師弟的簡歷,發現真的有人沒吃過豬肉(我學碩他專碩,一塊兒找工做,他有百度大廠背書,可這工做找的唉...)。最簡單的修改方法,讓你附近的同窗看看,第一眼感受能夠嗎,能夠就ok,不能夠就gg,照着人家的改改
如今前頭,準備要早,投的也要早基本7月中旬就陸陸續續開始有提早批了,錯過就沒了>...<
這貨也不幹,過去一整陣子了,我能寫多少給你們寫多少吧,考點網上一抓一大把
技術面
先說說技術面流程:
必定要把主動權掌握在本身手中,面試官會問不少你平時不瞭解或壓根不知道的問題,這時你能夠說平時我用不到這些(能夠理解啊,應屆生上哪懂這麼多邪門歪道啊,大佬請無視我),而後說本身對xxx領域有點研究,引導他來問你
對面提問你時,其實很考驗你答辯技巧的,當你熟悉的東西時,那很OK,balabala便可,問你不熟悉的(你只知道點皮毛,但也在簡歷上寫了),你能夠說「我作項目時碰到過一點,大致查了下,有點印象,您能夠試着問一下」,這樣會讓面試官把指望放低,問題難度也會下降,答出來加分,答不出來也無所謂
HR面
下面具體拉拉各廠面試經歷吧,我把比較有特點的問題列出來,統一的我放在下面知識點了,重寫太麻煩了...
難度:easy,可能我比較幸運?
一面
電話面,問了問Java的基礎問題,其中有印象的是
二面
現場面,基本圍繞着你簡歷上問
三面
總監面,這面基本聊聊實習的項目,用到的技術等,不知死活的我問了問sp的問題...建議各位0-offer黨(offer滿天飛的大佬請無視我)不要在該環節問sp的問題,最後給不給sp,好像不是這夥計定的,具體仍是看聊得狀況,聊開了什麼都能聊,聊不開,那就88
難度:normal
1、二面
後面知識點都有我就不展開寫了o_o ....
三面
問我刷題不?(這想要我什麼回答呢),杯子倒水智力題,實習項目聊一聊
難度:normal+
一面
上來懟了我一堆python的東西,我python當腳本用的,說能不能換個方向聊一聊,而後懟了一堆
開始問題偏向於算法,後來我說我其實擅長架構類的東西...小姐姐說,這樣啊,不過看你答的還能夠啊,架構我就不問你了...
二面
問了些數據倉庫的問題,雪花型和星型數據庫等,我表示一臉懵逼,而後和他扯Spark Streaming,他對這個還挺感興趣的,算是晃點住了,後面說加班怎麼看,而後他開始介紹他NB的團隊,我開始瞻仰,膜拜...最後問問能不能來實習,基本回答都是能(不能的好像都沒了...),時間節點本身須要把握一下,最好等到全部offer都下來的時候,我本身預估是10月中旬吧
難度:father
一面
二面
面試官不是很感冒,問我還有什麼補充了,我居然說沒...猝,血淋淋的教訓啊
難度:hard
一面
兩個面試官,發了張卷子,裏面什麼題都有:
二面
難度:normal+
講道理貝殼我是抱着去打小怪的心態去的,並沒打算留下的,可是面試體驗很好,最後給的薪水超高、福利也爆炸,缺點的話你們懂得,偏養老,看你們選擇吧。算是幫一面的大哥打波廣告吧
一面
數據傾斜怎麼處理,我我的感受我回答的比較差,之前沒仔細思考過這個問題,後來查了查發現裏面有不少道道。
但面試官很nice,問了問我其餘方面,感受還不錯,後面和我討論了30分鐘的職業發展問題,感受來的很值,大哥我能加你微信嗎...
二面
比較年輕的高冷小哥面個人
寫給須要的,不想死磕互聯網的人:ヽ(。◕‿◕。)ノ
最後,送上我面試過程當中整理出的知識點(可能有誤-_-||),供你們查漏補全,但願你們都能找到個好offer (@^0^@)
這就是一天坑,基本問不完,難度也是拉滿的那種...
Q:進程和線程的區別?
Q:進程間通訊方式?
核心目的是交換數據
除了會枚舉,這些名詞的具體概念也應該作到心中有數,傳送門
Q:線程間通訊方式?
核心目的是同步
Q:Callable、Runnable區別?
Q:Future和Callable的關係?
Q:建立線程的方法?
Q:volatile關鍵字的做用?
Q:synchronized的用法?
Q:講一下Java內存模型?
網上一大堆,引用前人的清明上河圖
Q:CountDownLatch和CyclicBarrier瞭解嗎?
Q:Semaphore用法?
控制一組資源的使用,經過acquire()和release()獲取和釋放這組鎖,盼盼防盜門
Q:ThreadLocal做用?
修飾變量,控制變量做用域,使變量在同一個線程內的若干個函數中共享。
Q:單例與多例的區別?
Q:鎖釋放的時機?
Q:notify喚醒時機?
notify後不會馬上喚醒處於線程等待池中的線程,而是等當前同步代碼塊執行完,才釋放當前的對象鎖,並喚醒等待線程。
Q:notify和notifyAll區別?
notify通知一個線程獲取鎖,而notifyAll通知全部相關的線程去競爭鎖
Q:講一下Lock?
Lock是爲了彌補synchronized的缺陷而誕生的,主要解決兩種場景
Lock是一個類,並不是Java自己帶的關鍵字,相對於synchronized而言,須要手動釋放鎖。
Q:鎖的種類?
集合相對容易,常規送分題,基本都會問到HashMap
Q:TreeSet特性?
內部元素經過compare排序。
Q:LinkedHashMap特性?
內部有個雙向鏈表維護了插入key的順序,使得map可以依據插入key的順序迭代。
Q:ArrayList與Vector的差異?
ArrayList是非線程安全的,Vector是線程安全的。
Q:LinkedList與ArrayList的差異?
Q:HashMap與HashTable的差異?
Q:Set與List的差異?各自有哪些子類?
Set不容許重複元素,List容許重複元素,List有索引
Q:hashCode()、equals()、==區別?
Q:Java容器中添加的對象是引用仍是值?
引用
Q:Iterator和ListIterator的區別?
Q:HashMap實現?
內容巨多,引用大佬面經,值得一看,目錄供你們參考
PS:HashSet是經過HashMap實現的
Q:ConcurrentHashMap和HashTable區別?
這塊主要介紹JVM內存的劃分以及GC算法
Q:什麼是內存泄漏和內存溢出?
內存泄漏最後會致使沒有足夠的空間分配對象,從而致使內存溢出,固然也可能開始分配過大的對象致使內存溢出
Q:致使內存溢出的因素?
Q:JVM內存劃分?
基本說出上面三條就能夠了,更詳細的見下圖,前門
Q:簡單說一下垃圾回收?
這可不簡單...
垃圾定義:
堆中內存分佈:
垃圾回收算法:
Q:Minor GC、Major GC和 Full GC的區別?
Q:Full GC觸發時機?
Q:什麼是常量池?
常量池分爲靜態常量池和運行時常量池。
包含的信息:
該問題通常會引出字符串常量比較
String s1 = "Hello";
String s2 = "Hello";
String s3 = "Hel" + "lo";
String s4 = "Hel";
String s5 = "lo";
String s6 = s4 + s5;
String s7 = "Hel" + new String("lo");
String s8 = new String("Hello");
String s9 = s8.intern();
System.out.println(s1 == s2); // true,直接取自常量池
System.out.println(s1 == s3); // true,在編譯時會優化成常量池內字符串的拼接,區別 s6
System.out.println(s1 == s6); // false,本質上是變量拼接,區別 s3
System.out.println(s1 == s7); // false,含有對象 new String("lo")
System.out.println(s1 == s8); // false,對象與字符串常量比較
System.out.println(s1 == s9); // true,字面量比較
複製代碼
面試時有人問到過,回去大概查了下
Q:講一下類加載過程?
加載:將*.class文件經過各類類加載器裝載到內存中
連接:分爲三步
初始化:對類變量初始化,執行類變量的構造器
Q:Java初始化順序?
這是在愛奇藝碰到的一面試道題,當時差點兩眼一抹黑過去了...頭一次發現這麼多東西要初始化
類內容(靜態變量、靜態初始化塊) => 實例內容(變量、初始化塊、構造器)
父類的(靜態變量、靜態初始化塊)=> 子類的(靜態變量、靜態初始化塊)=> 父類的(變量、初始化塊、構造器)=> 子類的(變量、初始化塊、構造器)
Q:Java類加載器的種類?
Q:雙親委派模式瞭解嗎?
我理解的深度比較淺,我的理解,委派就是加載類時先看上層加載過沒,若是加載過了,當前就不加載了,直接使用當成加載器加載的類。
其次是加載順序,System->Extension->Boostrap
優勢:
這些問題很弱雞,但考的也比較多
Q:面向對象的三大特性?
順口溜通常的背出來:封裝、繼承、多態
而後會讓你講講這三個特性如何體現,你們本身想一想吧,言之有理便可
Q:Java中接口和抽象類區別?
Q:重載和重寫?
豬腦子,老記混
Q:例舉一下你瞭解的設計模式?
通常說五、6個,有個樣例就好了
Q:手擼單例?
擼完,讓你講講內部細節,volatile或多例問題
public class Singleton {
private volatile static Singleton singleton;
private Singleton(){}
public static Singleton getSingleton(){
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
複製代碼
Q:TCP3次握手4次揮手?
基本畫張圖就K.O.了,fate門,內部的問題也建議看一下
Q:TCP爲何是必定要是3次握手,而不是2次或3次以上?
2次揮手的問題
在第1次創建過程當中,client請求連接在網絡中滯留太久,致使client發送第2次請求,創建完畢後,這時第1次的請求到達server,server接收又維護一連接,但該連接實際上已經做廢,浪費了server端的資源。
3次以上的方案
理論上,作到3次以上是可行的,但真正想作到一個完美可靠的通訊是不可能的,由於每次答覆都是對上次請求的響應,但該次答覆在不可靠的信道中還是會丟失的,考慮到現實效率問題,3次足以。
Q:TCP爲何是4次揮手,而不是3次呢?
Q:TCP半鏈接池與全鏈接池?
Q:TCP和UDP的區別?
Q:TCP和UDP的應用?
Q:TCP/IP與OSI模型?
TCP/IP模型,自下而上
OSI模型,自下而上
Q:ping命令基於哪一種協議?
ICMP
Q:阻塞式和非阻塞式IO區別?
阻塞式
非阻塞式
用數據庫作過開發,可是瞭解的不深刻,面試問我會不會寫SQL時,我多答「簡單的能夠,複雜的嘗試一下」...SQL複雜起來真不是人寫的...
Q:彙集索引和非彙集索引區別?
Q:where、group by、having執行順序?
Q:星型、雪花結構?
Q:SQL縱向轉橫向,橫向轉縱列?
基本上,除了 group by + 彙集函數 外,這是最難的 SQL 題了
sum(case when A='a' then B else 0 end) as D
這裏須要用sum或其餘彙集函數,由於做用在一個group中
核心用union
記住這兩條作到觸類旁通就能夠了,Demo
Q:髒讀、不可重複讀、幻讀?
這引出事務隔離級別
事務隔離級別 | 髒讀 | 不可重複讀 | 幻讀 |
---|---|---|---|
讀未提交(read-uncommitted) | 是 | 是 | 是 |
不可重複讀(read-committed) | 否 | 是 | 是 |
可重複讀(repeatable-read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
Q:join實現的三種方式?
Q:查看xxx端口占用?
Q:查看xxx進程佔用?
Q:查看CPU使用狀況?
Q:查看內存使用狀況?
Q:查看硬盤使用狀況?
Q:$0、$n、$#、$*、$@、$?、$$含義?
變量 | 含義 |
---|---|
$0 | 當前腳本的文件名 |
$n | 傳遞給腳本的第n個參數 |
$# | 傳遞給腳本的參數個數 |
$* | 傳遞給腳本全部參數 |
$@ | 傳遞給腳本全部參數。與$*有小差異,出門下扒 |
$? | 上個命令的退出狀態 |
$$ | 當前Shell進程ID |
Q:>、>>區別?
Q:>、1>、2>、2>&一、2>1區別?
Q:定時任務命令?
算法的海洋的一望無際,可是應付面試題的算法,我的認爲《劍指offer》一本足矣...
我的《劍指offer》刷了大概四遍,基本上看到一道題,全部解法都知道,面試上也基本從這裏出
我遇到現場出的算法題(除了《劍指offer》上的),通常是暴力搜索題,不要上來想DP...
經典問題
智力題
這方面通常問的是偏向於各種框架
以上框架,你們各取所需吧,總有幾個要能拿出來吹的,我我的主要吹Spark這塊
Hive、HBase通常也是當工具用的,主要問平時用沒用過,用過的話就會多問些,我通常是回答搭建過,照着文檔看過一陣子,對方通常就不問了
Zookeeper在底層維護分佈式的一致性,多少了解一些分佈式協議raft這類的也是加分點
Q:兩表Join方案?
三、4方案瞭解便可,我的感受有些不靠譜,面試中通常沒提,面試官通常要求到2,有數據傾斜的另說
Q:MapReduce過程?
大數據崗位必考題
三言兩語也說不清,建議去看網上大佬的,傳送門
看完後能回答以下幾個問題便可:
Q:Hadoop 中 Secondary NameNode做用?
合併fsimage與editlog
Q:Yarn架構?
Q:Yarn相對於Hadoop的優點,或說爲何要有Yarn?
Q:Yarn的三種調度器?
這三張圖很好,但我認爲這樣理解的深度不夠...有興趣的多看看
Q:Yarn延遲調度的含義?
主要針對看成業所需的資源,在本地並無知足時,會延遲一段時間,再嘗試調度,實在不行時會放到別的機器上調度,主要由於本地調度效率最高。
Q:Spark有幾種部署模式?
Q:standalone基本架構?
Q:groupByKey和reduceByKey哪一個效率高?
Q:數據傾斜是什麼?如何處理?
必考題,能夠問的很深...
定義:shuffle過程當中,某個幾個key對應的value太多,集中在某一個reduce task中,致使該task處理過慢或直接崩掉(out of memory)
解決方案:
求大佬點撥,我的認爲隨機數這種算法能夠解決必定的數據傾斜,但
Q:傾斜join如何處理?
和上面的數據傾斜有必定聯繫,但不徹底相同
Q:基本概念?
問的不少,主要看你對Spark的瞭解程度
Q:枚舉一下transform和action?
我通常和麪試官吹 Spark Streaming,這部分提供給有須要的人吧
Q:Spark Streaming原理?
將數據流劃分紅mini batch,本質上是小批量數據的連續處理,核心是定時觸發Job的提交,除此以外,針對流計算中window一類的概念作了一些特殊處理,面試官要是還問你就給他展開講講...這裏我就不展開了
Q:數據接收方式?
這點我通常結合Kafka來講,從Kafka接受數據有兩種方案:
Q:基於receiver數據接收的實現細節?
面試官這點主要想了解你對Spark Streaming源碼的熟悉程度,是否真正的深刻研究過其接收過程,其實糊弄一下仍是比較容易的...
Q:exactly once如何保證?
我的認爲這個問題是個很狠的問題,這個不是某幾個組件的使用問題,而是整個系統的協調組織,我主要從三個方面來講這個問題
個人理解就這麼多,感受很淺,歡迎大佬補充...
Q:基本架構?
能把以上這些概念串起來基本就OK
Q:介紹下ISR副本策略?
一個leader與一堆副本follower,follower從leader上拉取副本並返回ack,leader收集到足夠多的ack後,認爲該message是committed,並返回給client。
該leader與這些follower被稱爲 in sync 狀態,這個集合是動態變化的,當某個follower拉下太多時,會被踢出該集合,從而保證了能快速的響應用戶請求,當它追上來時會再加入該集合。
爲了保證數據不丟失,能夠設置該集合最少須要多少個follwer,當小於該數時該partition便不可用
Q:介紹下HBase的原理與設計?
講的很棒的一篇文章,唐宮仕女圖
看完後能複述下面基本概念
其實還有章ML沒寫,但感受問的不深就沒寫了,你們有需求的話我在補上吧 (ฅ´ω`ฅ)
小姐姐說要附上☞【徵文連接】
小姐姐說要點贊╰( ̄▽ ̄)╮