考試結束,班級平均分只拿到了年級第二,班主任於是問道:大家都知道世界第一高峰珠穆朗瑪峰,有人知道世界第二高峰是什麼嗎?正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」
秒針本來寫差不多了,結果沒保存,重寫了一遍,各位記得點根辣條給我吃~安慰一下我這受傷的心靈~
秒針可能大多數人沒有聽過這家公司,秒針是一家廣告投放的公司,在這方面這個領域可以說是一家壟斷性的公司,據hr和我介紹他們說有其它競爭性的公司要不被秒針收購了要不就是競爭不過,那麼什麼是廣告投放的公司,就是比如說廣告商想讓公司A去投放給用戶,公司A說我投放給了100w用戶,那麼廣告商怎麼知道公司A就真的投放了100W用戶。秒針就是一家第三方公司,用來分析這100W用戶到底有多少水分。
秒針筆試由於我沒有參加提起批,參加的秋招,得參加筆試。秒針的筆試是現場筆試,卷子有好幾頁,題目非常多,答題時間只有兩個小時。一開始是4道計算題,比如說數學中的組合運算和概率計算,還有就是計算完全二叉樹中有多少個節點,另外一道我忘記了。除了計算題,然後接下來題目都是手寫代碼的題,可能有8道左右記不清了,大多數是《劍指offer》的,我記得有合併有序鍊表,二叉中兩個節點計算最小公共祖先(這道題秒針筆試面試都喜歡考),求數組中最大的連續和(這道題秒針也喜歡考),對於一個字符串計算它的全排列的下一個顯示什麼(abc下一個就是acb),其它題目有點忘了,大體都是《劍指offer》難度,或者低於劍指offer難度的題。
秒針一面秒針一面是在一家咖啡館,面試我應該是第一批,這個感覺是按照筆試成績來排的,秒針一面我是被兩個面試官狂轟濫炸,感覺他們兩個人一人準備了一個小本本,每個小本本上面應該有題目,就是從小本本上面不停地問我。
自我介紹
答:自我介紹是面試中唯一的自己主動介紹自己的環節,一定要好好把握好,你數據結構學的號可以手撕一個紅黑樹你就說我數據結構掌握地很好,反正就是要把自己的優勢凸顯出來,比如我是保研的以及對於java的知識較熟悉,我介紹完自己的本科經歷以後,我就說我是保送到本校繼續讀研究生,然後最末尾會加上自己熟悉java,然後面試官就會問java的一些東西;
項目介紹及其亮點
答:這個我以及用的我的這篇文章的項目亮點來介紹可以作為你面試的項目亮點的文章,不來看看嗎?
看你項目中用的python比較多啊?
答:額,我趕快說本科用的多一些,研究生的項目都是java寫的,希望把這個話題跳過去。
看你項目中有寫過爬蟲,爬蟲遇到過什麼問題嗎?
答:(1)說了遇到登錄問題,需要登錄的,然後我說一種解決方法是使用谷歌瀏覽器檢查然後先登錄,然後觀察傳輸的數據包,然後構造這些傳輸的數據包;另一種解決方法是使用webdriver+phantomjs去模擬瀏覽器的操作,完全模擬像人一樣的操作;(2) 遇到需要動態加載的問題,一種是觀察js請求,模擬這個js請求過程,另一種解決方法就是就是webdriver+phantomjs;(3)基於用戶行為,當一個ip短期內大量訪問,會限制這個ip,這個時候才有代理池,如果這個ip無法訪問,那麼就切換一個ip;
用沒用過開源的爬蟲框架?
答:我說用過scrapy,這裡大家一定要對說出來的東西有了解,要不然就別說,因為面試官一般會繼續提問。
果然問我scrapy中,url去重是如何做的?
答:集合有去重的作用是。對於每一個url的請求,調度器都會根據請求的相關信息加密得到一個指紋信息,並且將指紋信息和set()集合中得指紋信息進行比對,如果set()集合中已經存在這個數據,就不在將這個Request放入隊列中。如果set()集合中沒有,就將這個Request對象放入隊列中,等待被調度。
問我scrapy的整體架構?
答:這個有點忘了,沒記全,大體說了下載器用來下載url,調度器用來決定將這個請求壓入到隊列中,還有爬蟲了,分析某一個特定的網站,制定特定的規則,把網站爬取下來。這個我剛才在網上搜了下,還有挺多的。
然後問我了解其它的開源爬蟲不?
答:不了解,然後就問我java基礎知識了。
問我java程序的初始順序有哪些規則?
答: 1.靜態對象優先於非靜態對象初始化;2.父類優先於子類進行初始化;3.按照成員變量的定義順序進行初始化4.靜態變量》靜態的語句塊》靜態方法》語句塊(構造方法)執行的順序。
問我看過《java編程思想》沒,裡面有很多java與C++的對比,知道幾個?
答:Java 沒有指針,只有引用,而 C++ 具有和 C 一樣的指針。Java 支持自動垃圾回收,jvm虛擬機,而 C++ 需要手動回收。Java 不支持多重繼承,只能通過實現多個接口來達到相同目的,而 C++ 支持多重繼承。Java 不支持操作符重載,雖然可以對兩個 String 對象支持加法運算,但是這是語言內置支持的操作,不屬於操作符重載,而 C++ 可以。還說了一個java中所有的對象都繼承自Object,C++不是。java是int,long,char等數據類型不同平臺都是固定的,C++不是,java具有很好的平臺移植性。
抽象類和接口的區別說下?
答: 1,抽象類裡可以有構造方法,而接口內不能有構造方法。
2,抽象類中可以有普通成員變量,而接口中不能有普通成員變量。
3,抽象類中可以包含非抽象的普通方法,而接口中所有的方法必須是抽象的,不能有非抽象的普通方法。
4,抽象類中的抽象方法的訪問類型可以是public ,protected和private,但接口中的抽象方法只能是public類型的,並且默認即為public abstract類型。
5,抽象類中可以包含靜態方法,接口內不能包含靜態方法。
6,抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是public static類型,並且默認為public static final類型。
7,一個類可以實現多個接口,但只能繼承一個抽象類。這裡我有一個記憶方法,大體是這樣子的,按照變量(普通變量,靜態成員變量),方法(分為普通方法,靜態方法),修飾詞,這三個方面去聯想。
java創建對象有哪些方法?
答:這個只能靠背,使用new,clone方法,反序列化,反射
由於我提及了克隆,問我深拷貝和淺拷貝有啥區別?
答:淺拷貝:被複製對象的所有變量都含有與原來的對象相同的值,而所有的對其他對象的引用仍然指向原來的對象。換言之,淺拷貝僅僅複製所拷貝的對象,而不複製它所引用的對象。深拷貝:對基本數據類型進行值傳遞,對引用數據類型,創建一個新的對象,並複製其內容,此為深拷貝。
來寫個二分查找
答:這個二分查找很簡單,就是看這篇文章RNG輸了,但我們不能輸,記得把mid寫成(right-left)/2 + left就好,不要溢出。
寫完以後,接著讓我寫了一道劍指offer的題目。
答:題目連結:https://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=13&tqId=11183&tPage=2&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking
以下是我但那個是寫的代碼,幾乎完全一樣,大體思路就是用一個tempmax代表前面的連續數字的最大和,如果這個最大和是正的,那麼加上數組的當前數字,那麼這個連續的和是變大的,這個就是有可能的潛在的最大和。
這個代碼當時寫完,面試官沒看懂,覺得我是錯的,然後我舉了一個數組的例子,他們竟然還覺得是錯的,說我舉的例子太特殊,然後他們自己寫了一個例子,手動跑我的代碼,最後他說哎呀,這個寫法巧啊,然後和我說了抱歉,哈哈,這個時候大家覺得自己代碼沒問題,一定要穩住,別自亂陣腳
1public class Solution {
2 public int FindGreatestSumOfSubArray(int[] array) {
3 if(array.length == 0)
4 return 0;
5 int Max = Integer.MIN_VALUE;
6 int tempmax = array[0];
7 for(int i=1;i<array.length;i++)
8 {
9 if(array[i] + tempmax > array[i])
10 {
11 tempmax = array[i] + tempmax;
12 }else{
13 tempmax = array[i];
14 }
15 if(tempmax > Max)
16 Max = tempmax;
17 }
18 return Max;
19 }
20}
問了我如何讀取文件,打開一個txt?
答:我寫了下面的代碼,然後照著說了一下。沒完全寫出來。。。尷尬
1String pathname = "input.txt";
2File filename = new File(pathname);
3InputStreamReader reader = new InputStreamReader(
4 new FileInputStream(filename));
5BufferedReader br = new BufferedReader(reader);
問我裡面那個是字節流,哪個是字符流?
答:FileInputStream是字節流,剩餘的兩個Reader都是字符流。
問我字節流和字符流的區別?
答: 字節流處理字節和字節數或者二進位對象,字符流處理字符,字符數或者字符串。
資料庫了解嗎,說一下索引的分為哪幾類?
答:分為聚集索引和非聚集索引,非聚集索引又有唯一索引,普通索引,主鍵索引,和全文索引。
問我什麼是聚集索引?
答: 聚集索引是數據行的物理順序與列值(一般是主鍵的那一列)的邏輯順序相同,也就是說索引中的順序也就是在內存中順序。
資料庫中如何建立索引?
答: 這個雖然沒用過,但是我背下來了,alter table 表的名字 add index (列的名字)
問我limit 查詢太慢如何優化?
答:我說採用order by ,子查詢優化(使用嵌套的查詢)
讓我寫一個子查詢優化
答:這裡有點忘了,說忘記了,尷尬。網上搜了一下是這樣的。
1select * from Member where MemberID >= (select MemberID from Member limit 100000,1) limit 100
問我http請求報文的組成?
答:請求行,請求頭部,空行,和請求body。這裡就是背。
問我post和get的區別?
答:這裡區別挺多的,我只答出來get是冪等的,post不是冪等的(這個冪等和非冪等很重要,需要知道啥意思)冪等就是前後兩次請求的結果是相同的。get請求不安全,post安全。
說一下TCP的擁塞控制?
答:這個的話我是把下面這個圖大體畫了出來,結合著圖進行了講解。說了慢開始的指數增長,擁塞避免的線性增長,以及如果發生擁塞,那麼最初的TCP版本是降為0,從0繼續開始慢開始,現在的TCP版本是從閾值開始。
寫到這裡又想起了一個問題,讓我畫一下異常體系圖。
答:這個我只畫出來一兩個分支,感覺答的不太好,如果能把下圖都畫出來,就完美了。
反正感覺就是一頓問,沒有停歇,中途還給我低了一杯水,問了很多問題,秒針的一面是我面了這麼多家時間最長的,感覺有1個多小時,問的知識面很多,因為他們準備了一個小本本,感覺上面應該很多題,最後到了時間他們就說到這裡吧。然後由於項目很急,秒針的二面面試官沒有在現場,約好了晚上5點進行面試,然後當時下午還有一個茄子快傳的面試本來以為5點可以結束,結果沒有結束,最後5點我和面試官說時間不方便,可以7點面試嗎,調到7點面試。
秒針二面電話時長大約是半個小時,有很多東西我忘記了,想起多少說多少哈。
自我介紹
項目介紹亮點介紹
又是問我爬蟲scrapy,問我除了scrapy對分布式爬蟲了解嗎?
答:我說不是很了解。
額,那你項目中的爬蟲是用到什麼?
答: 我說的是我自己手寫的,就一個簡單的下載網頁,然後分析網頁結構,提取裡面的內容。
行吧,因為我們公司一般業務場景都是高並發的,考考你大數據的題目,要給一個很大的文件(不能全部放內存,很大)按行來排序和去重,怎麼辦?
答:大數據的題目思想一般都是分而治之,先打大文件分詞大小均勻的若干個小文件,然後對小文件排好序,最後再Merge所有的小文件,在Merge的過程中去掉重複的內容,merge的話就是歸併排序的思想,可以在合併的過程中如果發現相同,那麼不存到文件中。
中途有秒針hr給我打電話,約我hr面試,額,他以為我是5點面試的,額,當時我很納悶,這二面都沒完,就約我hr面試,給我一種被欽定的感覺,我和二面面試管說了hr給我打電話,二面面試官說我和它說一聲。
那如果在上面的題目基礎上,如果不是排序,只是去重,有什麼好的方法?
答:對文件的每一行計算hash值,按照hash值把該行內容放到某個小文件中,假設需要分詞1000個小文件,則可以按照(hash % 1000)來分發文件內容,然後這樣就被分配到一個個小的文件,然後再這些小的文件中再去去重。
有些忘了,還記得一個是堆的建堆過程的時間複雜度?
答:說了O(n),說了一下,這個建堆的過程,然後說明這個過程就是O(n)
hr面我基本求生欲特別高,當時因為聽說秒針包吃包住還不加班,我感覺是網際網路的天堂,非常想去。大體復刻了我在茄子快傳hr面前的表現。
問我手裡面有什麼offer,我對其他offer閉口不提,只說我有華為去哪兒,然後我沒等他繼續發問,我接著補充道,這兩家公司都不太想去。然後他問我為啥不想去,我說華為本身不是一家網際網路公司,而且聽說華為進去以後可能幹的活可能和你的offer錄取的職位不一樣,所以華為不想去,去哪兒我說給的薪資太少,也不想去。
他問我有女朋友嗎,我說沒有,問我家是哪的,我說山西,然後我接著補充道想離家近一些,這樣可以常回家看看,畢竟父母越來越老了。然後他問我對薪資滿意嗎,我說滿意。
最後他問完我了,問我有什麼想問的,接下來開始了我的表演。
我說如果面試通過,什麼時候可以拿到offer,想趕快拿到offer,然後籤約,不準備再繼續找了,暑假由於找工作也沒回家,想籤完工作去回家,想家了。
hr聽完我這一席話,說我很真誠,(⊙o⊙)…,然後說一周之內會給通知,然後接晚上。
作者喬戈裡親歷2019秋招,哈工大計算機本碩,百度準入職java工程師,歡迎大家關注我的微信公眾號:程式設計師喬戈裡,公眾號有3T編程資源,以及我和我朋友(準入職百度C++工程師)在秋招期間整理的近200M的面試必考的java與C++面經,並有每天一道leetcode打卡群與技術交流群,歡迎關注。