Java大數據開發實習面經

2021-01-14 大數據練習生
百度(某邊緣部門)-大數據開發(偏數倉和離線計算)
一面(線上):

首先說一下面試體驗:面試官人真的很不錯,很有耐心。

時間:面試是線上的,耗時80分鐘左右。

注意:針對於面試小白,最好提前熟悉一下面試連結(一般是牛客網),牛客網(最好提前熟悉一下,編程界面只有一個main函數,此外需要手動導包,推薦提前寫好:import java.util.*),還有就是ListNode類和TreeNode類要會自己定義,跟LeetCode刷題不太一樣。


面試的大概內容

1.計算機網絡

                        (大概半個小時左右)(回憶版,具體順序可能有顛倒)

                          1.TCP三次握手,四次揮手具體過程描述一下?

                          (接著問了:三次握手為什麼三次,兩次可以嗎?四次揮手為什麼四次,三次可以嗎?……)

                          2.TCP和UDP的區別?什麼時候用TCP什麼時候用UDP?

                          3.TCP擁塞控制,(慢啟動,快重傳……)

                          4.TCP報文頭的具體內容?

                          5.HTTP和HTTPS的區別?

                          6.cookie和session的區別?

                          7.其他問題記不清了,有一兩個沒答出來。

2.Java基礎知識:

       (面試官問的很基礎,自己對其問的內容進行了瘋狂的擴展(為了拖延時間&表現……))

           1.常用的容器有哪些?(List,Set,Map)

              除了說底層的實現,也說了數據和鍊表的區別,以及應用場景。接著說了他們對應的線程安全的容器,Vector,HashTable,ConcurentHashMap,CopyOnWriteList……以及對應的底層實現。

           2.HashMap的底層實現?(1.7&1.8)

          3.重點講了一下ConcurentHashMap的底層實現

3.作業系統:

          1.線程與進程的區別?(瘋狂輸出)

          2.內存管理?(我說我沒看,只了解了鎖,多線程等)

4.多線程&並發

          1.實現多線程的方式?

5.shell(了解過shell,但是不熟,簡歷上沒寫)

          1.問題是,一個Nginx伺服器日誌,對應的欄位有……,寫一個shell腳本,統計一下PV/UV

6.大數據技術:

          1.Hadoop和Spark的shuffle的區別?(瘋狂輸出)

          2.Spark任務提交與執行過程?(了解過底層源碼,大概講了一下)

          3.Hive和UDF和UDAF等(不太了解,只了解過Spark SQL的UDF)

7.項目

         介紹了一下,沒怎麼問。

8.算法題:

(三道題,主要原因是個人原因,個人語速太快,還剩下很多時間(面試官那邊好像至少要問一個小時))

            1.leetcode原題(兩數之和等於target,輸出兩數的位置信息,HashMap做的)(Easy題)

leetcode第一題)(easy)

給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。


你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素不能使用兩遍。

示例:

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

https://leetcode-cn.com/problems/two-sum/


       由於是原題,面試官還沒說完,就開始搶答(沙雕行為!!!)跟面試官交流了一下,問了下能不能先說思路,怕緊張寫不出來,答曰:可以。先說了一下思路,說完之後,答曰:ok,寫一下吧。之後寫了出來(一分鐘左右)

       面試的時候不要裝逼和語速太快(個人生活習慣(不是緊張))

            2.leetcode原題,找出一個無序數組中第k個元素?(Easy題)

在未排序的數組中找到第 k 個最大的元素。請注意,你需要找的是數組排序後的第 k 個最大的元素,而不是第 k 個不同的元素。 

示例 1: 

      輸入: [3,2,1,5,6,4] 和 k = 2    輸出: 5 

示例 2: 

    輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4輸出: 4 

https://leetcode-cn.com/problems/kth-largest-element-in-an-array/


            第一題答完之後,答曰:再來一道 ,心裡……

            回答了三種思路,O(n^2)和O(nlogn)

            1.排序都ok,或者藉助sort工具類

            2.大頂堆(PriorityQueue),順便說了一下,說這個問題其實還可以這麼問,10G的數據量找前10大等……(沙雕行為)   尷尬的局面……寫出來了,一直出問題,哈哈哈哈

            3.跟面試官學到了利用快排的原理去求解的,複雜度為O(n)的解答思路(CSDN上有這個題的三種解答思路)    

非常推薦把三種解答思路都能記住。針對於另外一個常問的問題,10G數據找到前10大的問題,最大堆也是其中一種思路。有興趣的小夥伴可以自行拓展。

https://blog.csdn.net/orangefly0214/article/details/86527462?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control


          3.leetcode原題,一維DP(小青蛙跳臺階)

一隻青蛙一次可以跳上1級臺階,也可以跳上2級臺階。求該青蛙跳上一個 n 級的臺階總共有多少種跳法。答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1。 

示例 1:輸入:n = 2輸出:2

示例 2:輸入:n = 7輸出:21

https://leetcode-cn.com/problems/kth-largest-element-in-an-array/

            1.說了思路,講了優化辦法

            2.寫了程序

最後:問了我幾個問題

       問:你能實習幾個月,大概什麼時候能過來?

       答:我本月15就能過去,實習我只能保證至少去三個月,如果我覺得我能學到東西,我就願意繼續待下去(沙雕行為,切記不要說類似的話)

       面試官:好的,我們約一下二面。(當天下午六點多給我電話約了面試,面試官推薦線下)

二面(線下)

下午三點,面試官人很不錯,部門leader

先自我介紹,簡單交流一下,開始問答

1.多線程和並發

        1.多線程的實現方式?

        2.線程池的創建方式?拒絕策略?參數?(瘋狂輸出,還說看了阿里巴巴開發手冊……)

       3.CAS實現原理?(說完之後,自己補充了ABA問題和解決方案)

2.鎖

       1.Volatile和Synchronized的區別與聯繫(瘋狂輸出,又引出了lock以及RentrantLoack,以及對應的讀寫鎖)

3.JVM

       1.Java內存模型?

       2.垃圾回收方式?區別?

       3.OOM?(沒問太多)

       4.記不太清了,都是基本問題

4.大數據技術

       1.Spark Steaming的基本的相關問題

       2.一面的一道shell題,回答:問過了,不會

       3.PV/UV的區別的意義?

       4.flink了解多少?(把了解的能說的都說了)

5.項目介紹

      描述項目很久很久,沒怎麼問問題

6.算法題

      1.三數之和為0 (leetcode中等)

給你一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。 

 注意:答案中不可以包含重複的三元組。  

示例:給定數組 nums = [-1, 0, 1, 2, -1, -4],滿足要求的三元組集合為:

[  

   [-1, 0, 1],  

   [-1, -1, 2] 

]

https://leetcode-cn.com/problems/3sum/

         說了一下思路,沒讓寫(面試官拿的有紙和筆,秋招感覺肯定是手撕)

     2.背包問題(湊錢)

https://www.cnblogs.com/jbelial/articles/2116074.htmlhttps://space.bilibili.com/7836741?spm_id_from=333.788.b_765f7570696e666f.1

         看完之後,說了一下,面試官不好意思,這是個背包問題,我背包問題不會,可以換一個嗎?

     3.前序和中序的二叉樹數組,重建二叉樹?(中等)

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。 

 注意:你可以假設樹中沒有重複的元素。 

例如,給出前序遍歷 preorder = [3,9,20,15,7]中序遍歷 inorder = [9,3,15,20,7]返回如下的二叉樹:    3   

                               / \  

                              9  20    

                                  /  \  

                                15   7

https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/

         說了下思路,沒讓寫

7.問題:

     面試官:你對咱們部門了解嗎?

     我:不了解,我是在boss直聘上隨便投的

     面試官:那我介紹一下我們的具體業務吧……

     暢聊了一會大數據的未來,以及我對大數據未來的應用場景的想法……

     面試官:稍等,我去把三面面試官叫過來。

三面(線下):

    時長(一個多小時,感覺像是心理面,但是面試官又懂技術)

       面試官:大概問題就是涉及一些場景,都是心理問題的相關場景題吧?

       我:我說我看過心理學的書,我也比較了解。喜歡看心理學相關的影視劇

       對答好久

       面試官:你了解了那麼多技術,那你有沒有什麼事能讓你堅持很久嗎?或者輕易放棄的事嗎?

       我:堅持的事很多,我曾經一個學期早餐只吃同樣一種包子,同樣的豆漿(本科,無趣的人,哈哈哈)

       我學大數據技術,準確來說堅持了一年(我先把後端學完了,之後轉了大數據)

       面試官:你有什麼個人愛好嗎?

       我:看劇算嗎?(我並不看劇,但我想不到啥說的),答曰:不算。那就是打羽毛球了,在學校我一般周五上午10-11點都會去體育館打羽毛球。

       ……

       面試官:關於我語速快?為啥?周圍的人能接受嗎?

      我:我知道我語速很快,我不是因為緊張才快的,我一般聊到我擅長或者專注的事,我會語速很快。我語速很快您能聽懂吧?面試官:能,我覺得你說的很清楚。

       面試官:個人學習如何安排的?有沒有未來的計劃?個人發力方向?有沒有個人規劃的習慣?

      我:有,巴拉巴拉……

      面試官:你還有問題嗎?

      我:(能留下來吃個晚飯嗎?哈哈,沒說……),我這次面試通過了嗎?答曰:等通知。如果你通過了的話,兩周之後會給你回復,如果兩周之內沒回復就是沒過。

       我的處女面就這樣結束了,整體感覺就是不怎麼緊張,心態聽平和的,面試官人都很不錯,尤其一面和二面。

      接下來,HR打了電話,問了一下,具體能入職的時間,順便問了一下能不能給高點,答曰:不行,我們這個是統一安排的。問了下有沒有房補之類的(入職之後才能申請)。後續給HR打電話再也打不通了,發郵件也不回復。體驗不太好。


字節(核心部門)-大數據開發(實時計算方向)

面試整體情況說明:三輪技術面+一輪HR面,時長都不超過一個小時,全是線上

一面:1.項目

 1.自我介紹?(說了很多,很緊張,也很困,三輪均是下午四點多)

 2.問了一下,狀態計算和checkpoint,以及項目延時情況?

 3.Append輸出模式有什麼特點?

 4.Flink了解多少?(簡單的說了一下)

 5.其他的問的記不清了,基本答出來了,效果不太好,很緊張

2.基礎知識

 1.線程池如何創建,參數?拒絕策略?(有何差異)

 2.HashMap(1.7&1.8),重點講一下put的過程?

 3.volatile 和 CAS

 4.sychornized與lock的區別?

3.算法題

 1.leetcode原題,二叉樹層次遍歷(BFS)面試官還沒說完,我就開始回答了

給定一個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷) 

例如:給定二叉樹 [3,9,20,null,null,15,7],   

          3  

         / \  

       9  20   

           /  \   

         15   7 

   返回其自底向上的層次遍歷為:

[  

     [15,7], 

     [9,20], 

     [3] 

]

https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/

一面結束,對答:

     我:還有二面嗎?

     面試官:有,你稍等,馬上二面面試官就來了

二面:1.項目

 1.自我介紹?

 2.項目介紹?

 3.PV/UV的區別和聯繫?

2.大數據技術

 1.kafka如何acks和offset

 2.kafka如何保證精準一次語義處理?(ISR(不了解))答:不會

 3.如何保證多個模塊調用的時候確保順序沒問題?(回答不太好,隨便答的)

 4.所有的設置信息都是靜態的,如果對其進行調節的話,如何做?(zookeeper消息註冊中心)

 5.flink與spark的區別?

3.算法題

   1.SQL:班級表,統計每個班所有每個科目都及格的學生信息?

      很久沒刷sql了,還是自己太菜哈。沒寫出來對的

   2.leetcode原題,有重複數據的二分查找,最小位置

      很緊張,但是寫出來了

二面對答:

      我:不好意思面試官,我SQL很久沒寫過了,很緊張,表現不太好,這次過了嗎

     面試官:哈哈。別太緊張,過了過了,接下來等三面吧

三面:

      部門leader超級好,說話很溫柔

     1.自我介紹

大數據技術:

      1.hadoop提交任務執行過程?

      2.hadoop的map數量越多越好嗎?為啥?度如何把握(回答不太好)

      3.hbase了解嗎?有什麼特點?

      4.UV的含義?有什麼價值?

     5.flink了解多少?(TaskManger問了可多,slot,以及線程進程等)

算法題:

     1.圖論的題,大概意思是,給定一系列的數組,舉例(1,2),1訂閱2,找出被最多訂閱的人?

     答:不會。

     2.找到比「2349」大一點的重排列數據,即2394,leetcode原題

           用回溯寫的,寫完之後說了下思路

對答:

     1.能實習多久?什麼時候能來?

     2.對未來的技術發展有什麼想法?

     3.自己的個人安排等

     說了很多很多,最後說我這通過了,接下來還有一面,問:是技術面還是非技術面?答:非技術面

HR面                                                  

     常規問答,什麼時候能實習,能實習多久……結束了,接下來還有快手的面試,不太想面了,面試真的很累,主要是心態,身體上會很難受的。

      總結:這一路挺辛苦的,感謝這一路上,我堅持了一年的時間!當你看到這篇文章的時候希望你也能堅持你正在做的事,不要輕易言棄,你可以的,加油。

聲明:本文完全原創,未經本人同意禁止轉載!
        元旦最後一天,譁眾取寵,隨筆回憶敝人拙見。若有不當之處,還望閣下海涵。

相關焦點

  • 學java可以做什麼?大數據前景和就業方向又是什麼樣的呢?
    (3) Java可以用來做遊戲開發:以前諾基亞手機風靡天下的時候,上面的很多小遊戲都是用java寫的,只是現在都多去開發安卓了,電腦上的大多數也是用java來開發的,最經典的就是《我的世界》,當今世界最具影響力的遊戲英雄聯盟,吃雞就是用java寫的。
  • 西安匯傑.用友學院大數據開發課程都講什麼?
    大數據工程師是2020年最熱門的崗位之一,大數據技術人才是引領智能革命的弄潮兒,是智能時代最直接的受益者。大數據開發最核心的課程就是Hadoop框架,在學習大數據開發工程師技術之前,一般都會先學到Java基本語法和框架,這是通往大數據工程師的橋梁。
  • Java基礎學習:java中的基本數據類型
    二、案例用法 1、類型轉換 自動轉換:範圍小的數據類型可以自動轉換成範圍大的數據類型 強制轉換:把一種數據類型轉換為另外一種數據類型。 類型提升:表達式運算中有不同的數據類型,類型會自動向範圍大的提升。
  • 開發崗位這麼多,為什麼選Java?你學Java了嗎-開課吧
    零基礎學Java主流開發語言根據最新2020年軟體開發可以使用的語法是非常多,但是為什麼Java被廣泛的使用呢?其他程式語言與Java相比,Java語法相對簡單,並且是很多計算機語言的基礎。提到C++語言,很多人發現在使用過程中最容易出現的錯誤就是內存管理,而java有自動垃圾回收器,不用擔心內存。
  • 大數據開發基礎:Java基礎數據類型
    在Java基礎入門學習階段,Java基礎數據類型無疑是基礎當中的重點,掌握基礎數據類型,對於後續去理解和掌握更深入的理論,是有緊密的關聯性的。今天的大數據開發基礎分享,我們就來講講,Java八種基礎數據類型。
  • C/C++、Java、JavaScript、PHP、Python分別用來開發什麼?
    同時,Java在手機領域也有一席之地, 在普遍智能化之前, 很多手機就是以支持java應用作為賣點的,而智慧型手機爆發之後, Java手機主場變成了Android,作為安卓的標準程式語言而存。總結:Java:網頁, 企業級開發, 普通應用軟體, 遊戲後臺。
  • 【大數據】最新大數據學習路線(完整詳細版】
    大數據學習路線java(Java se,javaweb)Linux(shell,高並發架構,lucene,solr)Hadoop(Hadoop,HDFS,Mapreduce,yarn,hive,hbase,sqoop,zookeeper,flume)機器學習(R,mahout)Storm(Storm,kafka
  • Java大數據開發是做什麼的?要掌握哪些技能
    Java開發是大數據的經典崗位,行業當中存在普遍的需求,Web開發、Android開發、遊戲開發等崗位,基本上Java語言是主力隊伍。而進入大數據時代,Java又在大數據方向上有了用武之地。今天我們主要來講講Java大數據開發是做什麼的?要掌握哪些技能?
  • 大二男生斬獲4家頭部科技公司實習offer!憑啥?
    大二斬獲騰訊、螞蟻金服、字節跳動、圖森未來4個實習offer,實習月薪近萬。談及實習體驗,他形容,「大海中的潛艇,別看它在深水中,實際上,它對整個海域,乃至天上的風和雲都有關注。工作後的試錯成本太高,大學期間的實習是最好的機會。開闊的視野和足夠的信息透明有助於做出更準確的判斷、獲得更快速的成長。」
  • Java程式設計師需要什麼學歷才能找到工作?學歷低怎麼辦?
    一面: 90mins講項目講一個集合框架整體框架分Collection和Map兩大類全部講一遍,每一個接口和對應實現類,他們類各自的特點,性質,基本參數,能講多深講多深arraylist線程安全的方式hashtable和concurrenthashmap的各自特點,能講多深講多深為什麼hashtable被棄用了,cch1.7之前和1.8之後的區別鎖的分類樂觀鎖、悲觀鎖、自旋鎖、讀寫鎖、排它鎖、共享鎖、分段鎖等等各自特點,以及它們在java
  • Mob研究院:2019大學生實習市場大數據報告(附下載)
    報告下載:添加199IT官方微信【i199it】,回復關鍵詞【2019大學生實習市場大數據報告】即可
  • 大數據就業率高嗎?大數據就業情況怎麼樣
    大數據就業情況怎麼樣?這是很多想要從事大數據的人共同的問題,作為一個大數據工程師,今天向大家介紹下大數據工作的一些內容。我們從大數據工作現狀、薪資待遇、工作內容、發展前景這四部分來說明下大數據工作如何。
  • 反射——Java高級開發必須懂得
    基本的數據類型對應的類類型例如:Class c1=int.class;這就是int的類類型,Class c2=String.class;String類的類類型,Class c3=double.class;和Class c4=Double.class;是完全不同的,Class
  • 學習java的優勢是什麼?學習難度怎麼樣
    學習java成為了現在比較熱門的話題。Java是一種可以撰寫跨平臺應用軟體的面向對象的程序設計語言。Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用於PC、數據中心、遊戲控制臺、科學超級計算機、行動電話和網際網路,同時擁有全球最大的開發者專業社群。
  • 相比於Java,python到底有哪些優勢?
    可唯獨java穩如泰山,不可動搖!自然而然的就會出現python與Java的討論聲。本文的目的在於討論python和java相比到底有哪些優勢,至於缺點暫且不提! 正文 1.開發效率高
  • 北大光華女的超強面經:史上最牛「面試寶典」
    這份「面經」約三萬字。以講故事的形式講述北大畢業生黃曄3個月來參與數十家公司面試的體驗。並總結面試經驗。在「面經」中,作者從向會計師事務所投簡歷,到參與每家公司筆試、面試,從如何製作成功的簡歷,到面試時如何自我介紹、如何化妝、著裝等,都現身說法。
  • 大數據人才缺口這麼大,現在轉行大數據容易嗎?
    隨著國家信息的高速發展和人工智慧的興起,從2016年開始全國各大高校陸續開設了大數據專業,但主要還是985/211院校居多,這意味著大數據專業設立時間短而且不是所有的學校都有,直接結果就是畢業生數量不能滿足市場需求。另外大數據覆蓋範圍很廣泛,比如電商,金融,醫療,交通,農業等各行各業都有應用,所以市場缺口大,崗位需求多。
  • Java開發人員必知必會的20種常用類庫和API
    一個有經驗的Java開發人員特徵之一就是善於使用已有的輪子來造車。《Effective Java》的作者Joshua Bloch曾經說過:「建議使用現有的API來開發,而不是重複造輪子」。在本文中,我將分享一些Java開發人員應該熟悉的最有用的和必要的庫和API。順便說一句,這裡不包括框架,如Spring和Hibernate因為他們非常有名,都有特定的功能。
  • 尚學堂知識整理:Java double數據類型
    double數據類型使用64位來存儲浮點數。double值也稱為雙精度浮點數。它可以表示一個最小為4.9 x 10^-324,最大為1.7 x 10^308的數字。它可以是正的或負的。所有實數被稱為double字面量。
  • 跟我學java編程—認識java的整數類型
    Java語言中,基本的整型數據類型有byte、short、int、long四種類型,用於需要不同存儲空間的數據使用。整型有正整數和負整數之分,在Java語言中,規定整型的最高位為符號位,最高位為「0」表示正數,最高位為「1」表示負數,其它位表示數值。因此整型類型的數據能夠表示的最小值為:-2n-1 —2n-1-1(n為該類型所佔存儲空間的二進位位數)。