佛渡有緣人
# 簡介
經過招聘季每個人都會有相當多的面試經歷,對我來說把這些寫出來一方面是為了學習,另外一方面也希望能夠為之后求職的同學提供一定的借鑒意義
我的筆試經歷會把主要記得的題目列出來
我的面試經歷詳細介紹了以下幾點
面試崗位
面試體驗:這個有主觀成分,但也能從我個人的側面去反映公司是如何對待招聘的,請記住“面試者也是面試官,反之亦然”
面試問題:在面試過程中被面試官提問的問題
拉勾offer工廠2017資料,是當時拉勾做的一系列沙龍活動,其中ppt提到的面試問題很有參考價值,故而放到其中
我面試的崗位主要是后臺開發和Java開發崗,有關Java的復習策略在我的一篇博客中有寫
了解單獨公司的單獨部門情況,我又拆分了一下各公司的情況,想單獨了解公司的可以去看各個公司的我個人面試情況
# 京東金融面試
面試崗位為JAVA開發實習生,一共有兩面,第一位是年長的工程師,第二位是年輕的工程師,側重角度不一樣。第一位主要了解你的整體情況和個人想法,以聊天為主。第二位問了很多細節的題目,以問答為主。下面列舉一下我遇到的問題
java設計模式有哪些,講講單例模式具體怎么寫還有具體用在哪里?裝飾者模式是什么意思?
現在有三個表
S表
C表
SC表
查找出“數學分數最高的人名”,寫個sql語句代碼,寫的時候我使用了in,然后問到in和exist的區別,哪個效率更好?SQL優化了解哪些?
springmvc路由你是怎么寫的
答:xml配置或者注解,RequstMapping
springmvc如何接受ajax數據
答:有兩個注解,一個能接收json數據,另外一個能返回json數據,好像是ResponseBody和RequestBody
前端多級級聯的select怎么寫,比如說選擇了河北省,下一級就會出現城市名
答:使用jQuery,change監聽函數里寫ajax,返回后使用append函數加入下一級標簽中
java的堆和棧怎么理解的
String a = "a",“a”存到了java的哪個區
答:靜態區
a的值是多少?
答:是“a”,因為java都是值傳遞,不是引用傳遞
"a"會被銷毀么?
答:不會,因為string的加法運算相當于新建了一個對象,所以不會銷毀
mybatis #和$區別
linux如何查看進程占用cpu和內存情況
答:top指令
linux如何部署war包?
java環境搭建都用什么指令?
dns服務器如果域名和ip不一致,訪問了該域名會發生什么?
如果路由器上路由表內沒有你要訪問的地址會發生什么?
sql優化知道什么
數據庫字符亂碼可能是哪兒的問題
nosql數據庫用過什么,為什么使用
redis用過么,怎么理解的
棧都有哪些典型用途
答:十進制轉二進制、括號匹配、二叉樹非遞歸遍歷
java虛擬機都知道什么
抽象類和接口有什么區別
重載和重寫的區別
有沒有看過框架源代碼
sql分頁查詢怎么寫
mybatis實現原理、springmvc實現原理
SQL語句exist和in的區別
還有如果簡歷里放了博客的話,人家可能會問你分享一篇你覺得你寫的不錯的博客
查找13條到23條的sql語句
答:select * from name limit 13,10
# 滴滴面試
面試崗位為后臺開發實習生,一共有兩個面試官,面試的部門為地圖開發部,主要使用語言是C++和Python,后臺使用的是flask框架,總體上問的比較籠統,問細節上的不是特別多,有一些問題也沒答上來
數據庫引擎InnoDB和MyISAM的區別
大數據方面你讀過什么書么,想做這方面的你有什么優勢
寫個二叉樹的廣度遍歷和深度遍歷
ORM的實現原理
Map Reduce的具體細節步驟
# 今日頭條面試
面試崗位為后臺開發實習生,一共有四個面試官,面試的部門為懂車帝,主要是做后臺服務的,前三個應該是技術面試,但是第三個面試特別快,前兩個面的比較久,第四個是hr面試,聊了聊今日頭條的情況,帶我參觀了下今日頭條的工作區,整體環境還蠻不錯的,據說提供一日三餐
第一面
介紹一下項目
講講區塊鏈和最近讀的論文
比如1234的下一個比他大的數是1243,再下一個是1324,如何給出下一個數找到比他大的數
二叉樹上最大值和最小值節點路徑距離是多少?
3 2 4 1 0
像上面的樹就是0和4,距離為3,其實本質就是遍歷一遍先找到最大值和最小值,然后從根路徑上進行遍歷,從兩個值路徑分開開始記錄遍歷層數,然后加起來就是距離
問問實習經歷
第二面
介紹一下項目
講講區塊鏈,對我們當前的設計產生了極大的疑問,我也沒有解釋清楚,然后被鄙視了下研究生畢業設計沒準備、研究方向不明確
問我熟悉哪門語言,我說java和python,然后問我學習過c++木有,我說本科學習過,然后就出了個strcpy庫函數的實現,說很簡單,,,結果空指針處理什么的,也沒弄清楚,最后也沒寫明白
有兩個文件a和b,找出里面相同的url,最開始我寫的是遍歷,時間復雜度是n2,然后用排序復雜度是nlogn,想起了字典樹,復雜度是nlogm,面試官說可以用hash,復雜度就到n了,整個過程也不是很順利
第三面
講講區塊鏈,又講了下我看的論文
問問你覺得你的優點是什么,缺點是什么
你覺得你是屬于更能堅持的類型還是說更喜歡接觸不同的新技術類型
除了技術外還有什么愛好
問問實習經歷
第四面hr小姐姐
問問你的學習方向,用什么語言
頭條你都了解什么
工作時間了解么
balabala,總之hr還是相對和藹可親的
面完一天后生無可戀,回來就睡,太難受了
# Redhat面試
面試崗位為JAVA的wildfly中間件開發實習生,套路和之前的不一樣,是先讓做一個工程,使用maven做一個J2EE的hello world,然后做單元測試,改了好久,直到這周才接到面試通知,本來打算直接是外國人的外語面試,但是由于經理很忙,就先由小組的中國人來面試。主要語言就是用JAVA,然后也先講清楚了要做什么,和其他的面試很不一樣,也是怕我沒想清楚,畢竟和其他的實習性質有所區別,是在做開源,而且不是做常見的web開發,而是底層中間件web服務器的實現,包括需要測試東西,其實感覺我的個人經歷和要求其實并沒有很搭配,面試官對web開發相關的也并不是很了解,更多的是希望我沉下心來讀很多的源代碼,會很枯燥。
了解java什么,lambda表達式本質是什么?
maven中之前讓你寫的phase表示什么意思?
英語自我介紹一下,你想學的是什么,不想學什么(純英語面試)?
git rebase是做什么用的?
有關注過什么開源項目?
平時用什么操作系統
之前說的工程里的有關單元測試的問題你懂了么?不應該throw異常了還能正常通過單元測試。
這只是第一次面試,還有下一次的意大利視頻面試,是和外國面試官交流,壓力很大。
# Redhat 二面
第二次面試真是姍姍來遲,其實就是過去和中國面試官和外國面試官一起聊天,問問我幾個基本的問題,并沒有技術問題,其實就是練習下英語口語,自己渣的可以,至于會不會被錄取也不知道,聽天由命吧。
# 阿里巴巴面試
面試崗位為JAVA開發實習生,今天已經不是第一次面試了,之前有一次,但是當時沒記錄,只好記錄這次的了
自我介紹
講一個項目,我說的區塊鏈,然后圍繞著區塊鏈說了一堆,比如說我沒回答上來的,有沒有做性能測試,還有orderer節點都有什么服務
最大堆概念
排序算法比較排序時間復雜度,如何查找最大的1000個數
有沒有什么排序算法能夠小于nlogn的
# 美團面試
這次面試一共有兩面,第一面比較簡單問了很多基礎問題,基本都能答上來,第二面問了很多細節問題,有很多發現自己理解不深刻,出現了問題,記錄幾個
跨域的理解,只有瀏覽器才可能存在跨域,跨域其實是在請求了某個域名的服務之后同時又去發起了其他域名的請求,所以只有瀏覽器可能存在,因為他會請求回來靜態資源后解析再次發送請求,而類似于postman就不會有這樣的問題,因為他得到的是靜態資源文本而不會再次做解析
tomcat解析sevlet發生了什么?
對于搶單場景要怎樣設置數據庫,要分開然后利用nginx根據hash去存庫,查找也是同理
JSONP如何理解,為什么沒有使用
還問了兩道算法題,但是自己寫的比較慢,而且也不敢保證正確,畢竟好久沒練了,但是題目都不難
最小堆如何做插入和刪除的
HashMap如何映射到內存里
如何評價自己在云平臺項目的表現
數據庫線程池有哪幾種
對稱密鑰和非對稱密鑰是用來解決什么問題的
# IBM電話
投遞的郵件有作用了,那邊在做區塊鏈醫療,招收實習生
是否有golang的開發經驗
fabric了解哪些
nodejs開發經驗
醫療你們這邊在做什么
# 京東金融面試
面試崗位
JAVA開發實習生
面試體驗
一共有兩面,電話面試,第一面考察區塊鏈,第二面考察java基礎,問了很久,態度很認真
面試問題
區塊鏈交易流程?
java中spring是如何理解的?
四道算法題:
第一題:一個人一次可以上一個臺階或者兩個臺階,問到第n個臺階有多少種方法?
第二題:n*m的迷宮,只能向右或者向下走,從左上角到右下角有多少條路線
第三題:100101這樣的數組,1表示有人在椅子上,0表示沒人在,找到一個沒人在的地方且距離所有人的距離之和最大
第四題:有一億個數,找到第10大的數
4. hashmap結構
5. get和post區別
# 京東金融面試
面試崗位
JAVA開發實習生
面試體驗
非常糟糕!因為之前面試過所以只面了一次,而且在此次面試中知道了京東原來打著提前批的旗號結果是實習不給校招offer,真是套路滿滿,而且按照時間到了通州的京東之后hr臨時預約邀請碼,過了半個小時才帶我上去,上去面了之后,居然又是半個小時沒有人理我了,面試場地已經沒有人了而且到了下班時間,然后給hr打電話不接發微信不回,過了十分鐘我離開京東大廈,拉黑了京東金融的hr,這次面試導致了我生平第一次拉黑別人
面試問題
java有什么更多的學習和了解,分布式?多線程?
金融系統的容錯級別很高,講了很多,balabala
# 拼多多筆試
不用多說了,四道算法題
第一題
題目描述
自動售貨機里有 N 瓶復制可樂。復制可樂非常神奇,喝了它的人會復制出一個自己來!
現在有 Alice, Bob, Cathy, Dave 四個人在排隊買復制可樂。買完的人會馬上喝掉,然后他和他的副本會重新去隊伍的最后面排隊買可樂。
問最后一個買到復制可樂的人叫什么名字?
輸入描述:
輸入僅有一行,包含一個正整數 N (1 <= N <= 1,000,000,000),表示可樂的數量。
輸出描述:
輸出喝到最后一罐復制可樂的人的名字。
示例1
輸入
8
輸出
Bob
說明:
前8個喝到可樂的人依次為:Alice, Bob, Cathy, Dave, Alice, Alice, Bob, Bob.
解題思路
代碼
import java.util.Scanner;
public class Main {
? ? public static void main(String[] args) {
? ? ? ? Scanner sc = new Scanner(System.in);
? ? ? ? String[] names = {"Alice", "Bob", "Cathy", "Dave"};
? ? ? ? while (sc.hasNext()) {
? ? ? ? ? ? long N = sc.nextLong();
? ? ? ? ? ? long i = 0;
? ? ? ? ? ? long basic = 4;
? ? ? ? ? ? while (N > basic) {
? ? ? ? ? ? ? ? N -= basic;
? ? ? ? ? ? ? ? basic *= 2;
? ? ? ? ? ? ? ? i++;
? ? ? ? ? ? }
? ? ? ? ? ? int y = (int) Math.ceil(N / Math.pow(2, i));
? ? ? ? ? ? System.out.println(names[y - 1]);
? ? ? ? }
? ? }
}
第二題
題目描述
四年一度的世界杯又來了!小多在公司內發起了一個票選最強球星的活動。共有 N 個候選球星,每位投票者需要在選票上為每位候選球星評定一個實例等級,等級由英文字母表示,'a' 級最高,'z' 級最低,共26級。
我們稱候選球星 X 強于候選球星 Y,當「 X 的評級比 Y 高」的票數高于「 Y 的評級比 X 高」的票數。若一個候選球星強于任一其他候選球星時,則稱該球星為“球王”。根據這個規則,至多只會有一個球王。需要注意的是也可能沒有球王。現在給出所有 M 張選票,請你幫小多判斷一下哪位候選球星是球王。
輸入描述:
第一行包含2個整數 N、M,分別表示候選球星數量以及選票數量。接下來有 M 行,每行是一個長度為 N 的字符串,每個字符串表示一張選票上的信息。每個字符串的第 k (0 <= k < N) 個字符,
表示這張選票對第 k 個候選球星的評級。
數據范圍:
1 <= N <= 50
1 <= M <= 50
字符串只包含小寫英文字母(a-z)。
輸出描述:
若有球王,則輸出一行僅包含一個整數 X,表示編號為 X (0 <= X < N) 的候選球星是球王;若沒有球王,則輸出一行僅包含一個整數 -1 。
示例1
輸入
4 3
acbd
bacd
bdca
輸出
0
示例2
輸入
4 1
acad
輸出
-1
解題思路
代碼
import java.util.Scanner;
public class Main {
? ? public static void main(String[] args) {
? ? ? ? Scanner sc = new Scanner(System.in);
? ? ? ? while (sc.hasNext()) {
? ? ? ? ? ? int N = sc.nextInt();
? ? ? ? ? ? int M = sc.nextInt();
? ? ? ? ? ? sc.nextLine();
? ? ? ? ? ? String[] notes = new String[M];
? ? ? ? ? ? for (int i = 0; i < M; i++) {
? ? ? ? ? ? ? ? if (sc.hasNext())
? ? ? ? ? ? ? ? ? ? notes[i] = sc.nextLine();
? ? ? ? ? ? }
? ? ? ? ? ? int[][] matrix = new int[N][N];
? ? ? ? ? ? for (int i = 0; i < M; i++) {
? ? ? ? ? ? ? ? for (int j = 0; j < N; j++) {
? ? ? ? ? ? ? ? ? ? char a = notes[i].charAt(j);
? ? ? ? ? ? ? ? ? ? for (int k = j + 1; k < N; k++) {
? ? ? ? ? ? ? ? ? ? ? ? char b = notes[i].charAt(k);
? ? ? ? ? ? ? ? ? ? ? ? if (a < b) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? matrix[j][k] += 1;
? ? ? ? ? ? ? ? ? ? ? ? } else if (b < a) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? matrix[k][j] += 1;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? boolean flag = true;
? ? ? ? ? ? for (int i = 0; i < N; i++) {
? ? ? ? ? ? ? ? flag = true;
? ? ? ? ? ? ? ? for (int j = 0; j < N; j++) {
? ? ? ? ? ? ? ? ? ? if (i == j)
? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? if (matrix[i][j] <= matrix[j][i]) {
? ? ? ? ? ? ? ? ? ? ? ? flag = false;
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(flag) {
? ? ? ? ? ? ? ? ? ? System.out.println(i);
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? if(!flag)
? ? ? ? ? ? ? ? System.out.println(-1);
? ? ? ? }
? ? }
}
第三題
題目描述
有N個貨物(0<=N<=1024),每個貨物的重量是W(100<=W<=300)。如果每輛車最多的載重為300,請問最少需要多少輛車才能運輸所有貨物。
輸入描述:
一行輸入,包含N個正整數,表示每個貨物的重量,空格分隔。
輸出描述:
一行輸出,包含一個整數,表示需要的車輛數。
輸入
130 140 150 160
輸出
2
解題思路
代碼
第四題
題目描述
A 國的手機號碼由且僅由 N 位十進制數字(0-9)組成。一個手機號碼中有至少 K 位數字相同則被定義為靚號。A 國的手機號可以有前導零,比如 000123456 是一個合法的手機號。小多想花錢將自己的手機號碼修改為一個靚號。修改號碼中的一個數字需要花費的金額為新數字與舊數字之間的差值。
比如將 1 修改為 6 或 6 修改為 1 都需要花 5 塊錢。給出小多現在的手機號碼,問將其修改成一個靚號,最少需要多少錢?
輸入描述:
第一行包含2個整數 N、K,分別表示手機號碼數字個數以及靚號至少有 K 個數字相同。第二行包含 N 個字符,每個字符都是一個數字('0'-'9'),數字之間沒有任何其他空白符。表示小多的手機號碼。
數據范圍:
2 <= K <= N <= 10000
輸出描述:
第一行包含一個整數,表示修改成一個靚號,最少需要的金額。第二行包含 N 個數字字符,表示最少花費修改的新手機號。若有多個靚號花費都最少,則輸出字典序最小的靚號。
示例1
輸入
6 5
787585
輸出
4
777577
說明:
花費為4的方案有兩種:777577與777775,前者字典序更小。
解題思路
代碼
# 阿里巴巴菜鳥網絡面試
面試崗位
菜鳥網絡的JAVA開發崗
面試體驗
工作內容為Java后臺的業務開發,還有一部分C++工作,聊了大概1個小時,發現自己還是有很多基本的問題沒搞清楚,有很多收獲
面試問題
malloc的時候操作系統是如何分配內存的
http://taobao.com整個的請求過程,互聯網協議入門(一)
比特幣的交易過程,多久確認:10分鐘
Fabric使用CA的目的
TreeMap的結構
Promise和異步的區別
REST和其他的區別
fabric0.6和1.0的區別
# 阿里巴巴阿里健康面試
面試崗位
阿里健康的JAVA開發崗
面試體驗
又發現了很多技術盲點,整體感覺良好
面試問題
Fabric在哪里做的共識,如何解決雙花問題和節點偽造問題的,比如說A給B轉賬5元,給C同志1元勞務費,但是該節點作弊了怎么辦?
拜占庭算法的理解?
TCP協議擁塞是怎么解決的?
JAVA虛擬機的理解?
JAVA線程池的參數都有什么?
有序鏈表和二叉搜索樹在查找和插入上時間復雜度的區別?了解過紅黑樹么,在插入上有什么優化?
介紹下你覺得你做的比較好的項目,解決了哪些技術難點?
# 騰訊面試
面試崗位
前端開發
面試體驗
首先很奇怪不知道為什么會被分到前端開發去,因為我并沒有投遞這個崗位,可能是放到簡歷池被面試官挑選的,前端我并沒有準備太多所以回答的并不好,這里提醒面試者把求職意向寫好,面試官很認真,自己答得不好,涼了
面試問題
為什么你們選擇vue
window下都有什么對象
XSS的理解和如何解決
前端工程化用了什么
部署環境下如何調試
瀏覽器如何用js判斷腳本
遇到問題時怎么查資料去解決問題
# 中國銀聯筆試
題目都是和考公務員的題目很像,包括選擇題、邏輯題等,反而技術題目很少
# 中國銀聯面試
面試崗位
應用開發(偏核心系統智能運營)
面試體驗
面試的時候發現人家都是穿正裝來的,尷尬,都沒準備衣服,得虧換了個襯衫,要不然太尷尬,整體面試安排和互聯網公司大不相同
面試問題
第一面是群面,給了一道題,金融相關的,沒人看過資料后做一分鐘發言,然后集體討論15分鐘,最后由一個人總結3分鐘,群面其實還是蠻有套路的,如果自身能力不足不要沖前,主要是關注問題本身,關注討論時間,把這兩個做好基本就能通過面試
第二面是技術面,整體沒問太多就問了問項目,然后問了問DevOps,問我是否接受調劑,有運維的工作可能會被調劑,我就堅持說更希望開發,也能接受調劑
# 猿輔導面試
面試崗位
后臺開發
面試體驗
整體體驗很好,早上去面試還準備了零食,面試官給人的感覺很舒服,尤其是第二面的時候,感覺確實在了解你整個人的技術水平和項目經歷,而不是很多面試官就著自己懂得問題去問,或者就問自己準備好的問題,被尊重的感覺油然而生
面試問題
第一面問了幾個問題,然后主要是做算法題
servelet生命周期
java多線程共享變量怎么處理
鏈表刪除倒數第n個數
給一個無序int棧,要求只能用棧這種結構來給棧中的int降序排序:再加一個棧就行了,用來存結果,再用給的棧做臨時存儲就可以
第二面問了項目的問題,然后做了一道算法題
ringbuffer實現put和get,注意處理滿和空的情況:滿和空要加個isFull或isEmpty來處理,記得最后處理這兩個值
# 網易互聯網筆試
崗位投遞的是杭州研究院,先要經過筆試的洗禮,筆試的內容分為選擇題40分,簡答題20分和編程題60分,選擇題和簡答題記不太住了,主要寫寫編程題吧
小易覺得高數課太無聊了,決定睡覺。不過他對課上的一些內容挺感興趣,所以希望你在老師講到有趣的部分的時候叫醒他一下。你知道了小易對一堂課每分鐘知識點的感興趣程度,并以分數量化,以及他在這堂課上每分鐘是否會睡著,你可以叫醒他一次,這會使得他在接下來的k分鐘內保持清醒。你需要選擇一種方案最大化小易這堂課聽到的知識點分值。
輸入描述:
第一行 n, k (1 <= n, k <= 10^5),表示這堂課持續多少分鐘,以及叫醒小易一次使他能夠保持清醒的時間。
第二行 n 個數,a1, a2, ... , an(1 <= ai <= 10^4)表示小易對每分鐘知識點的感興趣評分。
第三行 n 個數,t1, t2, ... , tn表示每分鐘小易是否清醒,1表示清醒。
輸出描述:
小易這堂課聽到的知識點的最大興趣值
示例1
輸入
6 3
1 3 5 2 5 4
1 1 0 1 0 0
輸出
16
又到了豐收的季節,恰逢小易去牛牛的果園里游玩。牛牛常說他對整個果園的每個地方都了如指掌,小易不太相信,所以他想考考牛牛。在果園里有N堆蘋果,每堆蘋果的數量為ai,小易希望知道從左往右數第x個蘋果是屬于哪一堆的。牛牛覺得這個問題太簡單,所以希望你來替他回答。
輸入描述:
第一行一個數n(1 <= n <= 10^5)。
第二行n個數ai(1 <= ai <= 1000),表示從左往右數第i堆有多少蘋果
第三行一個數m(1 <= m <= 10^5),表示有m次詢問。
第四行m個數qi,表示小易希望知道第qi個蘋果屬于哪一堆。
輸出描述:
m行,第i行輸出第qi個蘋果屬于哪一堆。
示例1
輸入
5
2 7 3 4 9
3
1 25 11
輸出
1
5
3
這題和leetcode 47比較像,就是n個a和m個z字母序排列,找到第k個排列數
示例
輸入
2 2 6
輸出
zzaa
2個a和2個z排列,aazz,azaz,azza,zaaz,zaza,zzaa,第6個排列數就是zzaa
# 阿里健康第二次面試
面試崗位
阿里健康的JAVA開發崗
面試體驗
這次打電話又面試了很久,問了很多經典的問題,但很多又記得很模糊了,尷尬,本來都準備過的,可以答得很流利的
面試問題
一個數組中有正數和負數,找出來和最大的子數組
16瓶水中有1瓶水有毒,小白鼠喝了有毒的水1個小時后會死,一個小白鼠可以喝多瓶水,一瓶水也可以被多個小白鼠喝,現在給1個小時時間,最少需要幾只小白鼠能夠判斷出來14瓶水是無毒的?
java虛擬機垃圾回收機制
事務隔離級別有什么?
concurrentHashMap實現原理?原來使用的什么鎖?CAS具體如何實現的?
Fabric的共識機制
kafka不是共識機制么?
一個文本有很多單詞,找出來其中詞頻最大的k個單詞?如果內存讀一次裝不下怎么辦?
HashMap擴容是怎么實現的?多線程同時put會存在什么問題?
單例怎么寫,懶漢和餓漢哪個更適合多線程?
線程池的參數都有什么?
最近在看什么書?
比特幣的共識機制?
# 百度面試
面試崗位
搜索部
面試體驗
后來了解到是做離線的搜索構建,也就是倒排索引,主要寫C++,去了現場我就經歷了一次面試,就回了,感覺沒戲,人家對我并不感興趣,因為我主要準備的Java,不過面試官態度很和藹一直在微笑
面試問題
TCP擁塞如何做控制?
進程間通信的方式有哪些?
哪些排序是不穩定的?快選堆希
C++中的vector是如何實現的?
阻塞IO,非阻塞IO,同步IO,異步IO的區別?
事務的特性?
TCP怎么做連接的?三次握手
wait_timeout怎么看?show global variables like 'wait_timeout',這個是mysql的配置數據庫連接超時的參數,文章
反轉字符串
合并兩個有序鏈表
找出數組中最長的遞增數組
進程,線程和協程的區別
# Indeed的筆試
Indeed實在太誘人了,但是做了四道算法題之后發現太難了,果然這樣的公司搶手,算法題難度也非常大,好好刷題了要
# 騰訊筆試
今天做了騰訊的筆試,題目如下
1.判斷正整數是否是對稱數,如3,123,121,12321。不能把整數轉為字符串來判斷。//返回 1:對稱,0:不對稱
int reverse( int value){
? ? int res = 0;
? ? while (value){
? ? ? ? res = res * 10 + value % 10;
? ? ? ? value /= 10;
? ? }
? ? return res;
}
int ismirror( int value ) {
? ? if(value == reverse(value)){
? ? ? ? return 1;
? ? }else{
? ? ? ? return 0;
? ? }
}
2.有一個鏈表,反轉鏈表中第m到第n個元素。1 <=m <=n <= 鏈表長度
例子 1->2->3->4->5->6->null, m=2, n=4,反轉后1->4->3->2->5->6->null
struct LinkNode {
? int value;
? struct LinkNode * next;
};
LinkNode * reconstruct(LinkNode * head, int m, int n) {
? ? ListNode *res = new ListNode();
? ? res->next = head;
? ? ListNode *tmp = res;
? ? for(int i=0;i<m-1;i++){
? ? ? ? tmp = tmp->next;
? ? }
? ? ListNode *p = tmp->next;
? ? for(int i=0;i<n-m;i++){
? ? ? ? ListNode *t = p->next;
? ? ? ? p->next = t->next;
? ? ? ? t->next = tmp->next;
? ? ? ? tmp->next = t;
? ? }
? ? return res->next;
}
3.有一個二叉樹,每個節點的值是一個整數。寫一個函數,判斷這顆樹中是否存在從根到葉子節點的一個路徑,這個路徑上所有節點之和為某一個值。存在返回1,否則返回0。
struct TreeNode {
? int value;
? struct TreeNode * left, * right;
};
int haspath( struct TreeNode * root, int value ) {
? ? if (root == NULL) {
? ? ? ? return 0;
? ? }
? ? if (root->left == NULL && root->right == NULL && value - root->val == 0) {
? ? ? ? return 1;
? ? }
? ? return haspath(root->left, value - root->val) || haspath(root->right, value - root->val);
}
4.實現x^n次方,時間復雜度要O(logN)
double pow(double x, int n)
{
? ? Double res = 1;
? ? if(n == 0)
? ? ? return res;
? ? int tmp = n;
? ? while(tmp != 0)
? ? {
? ? ? ? if((tmp & 0x1) != 0)
? ? ? ? ? res *= x;
? ? ? ? x *= x;
? ? ? ? tmp /= 2;
? ? }
? ? return res;
}
# 網易互聯網面試
面試崗位
杭州研究院
面試體驗
這次面試可以說是我面試體驗目前為止倒數top的,首先最重要的是這次面試沒通過,其次要去杭州只報銷去的路費,相當于自己要花將近700元在回來的路上,最關鍵的是第二面的面試官整體上不愿意和我交流,甚至連我的項目和研究經歷都沒問,只讓我自己講講,經常面試到我回答完問題就不說話,好像不知道面試我什么一樣,上來問我家在哪兒將來打算去哪兒工作,總體來講面試官給我的感覺是,最開始就沒想讓我通過的心態去面試的,個人覺得作為技術面試官,這樣的表現是非常不合格的,也讓我對網易互聯網的印象大打折扣
面試問題
第一面
AOP的實現機制
實現四個單例模式
共識機制的了解
分布式數據庫是否使用過
緩存可能會出現什么問題
使用了Spring的什么特性
數據庫sharding如何做,其實就是垂直切分和水平切分。。。
tcp的三次握手和四次揮手
B+樹和B樹的區別
二叉樹和紅黑樹的區別
ThreadLocal作用,為什么要使用
第二面
10個商品的秒殺系統設計
如何解決緩存穿透,緩存雪崩等問題
講講jvm
如果發生了頻繁的fullGC要怎么查找問題
# 騰訊面試
面試崗位
WXG事業部后臺開發
面試體驗
面試官非常nice,之前的筆試也是他通知我做的,還加了我的好友,每次面試前都會提前通知我一下,人也很和氣,面試的時候全部的問題都是針對我的個人項目,問的非常詳細,每個都是,并沒有問一些基礎語法或者一些基本課程的理解,雖然在實現的細節點上并沒有特別考察我,但是從整體的項目上考察了我的理解和是否真的做了那么多,感覺還是很受尊重的,因為其他面試能聊兩個項目也就最多了
面試問題
全部是關于項目上的,就不列出來了
# 阿里健康第三次面試
面試崗位
Java開發工程師
面試體驗
阿里的面試整體感覺都蠻好的,這次面試官也很不錯
面試問題
如果給你之前實習的mentor提意見的話,你會提出什么?
在做項目中的技術難點有哪些?有什么收獲?
一個對象里面存了開始時間和結束時間,現在有M個對象,求出一個沒有交集的對象的集合
# 阿里健康第四次面試
面試崗位
Java開發工程師
面試體驗
這次是到阿里健康里面去面試,面試官應該是級別較高的人,總體體驗還是很好的
面試問題
聊實驗室的方向和做的項目
說一件你最得意的事兒,最失敗的事兒和最出格的事兒
說一件你一直在堅持的事情
有幾百億個數字找出其中的中位數
# 騰訊筆試
//請在1小時內完成以下4道題目,完成后請在題板發送消息。
//答案直接寫在此題板上,面試官可以實時看到。
//====
1.有一個二叉樹,每個節點的值是一個整數。寫一個函數,判斷這顆樹中是否存在從根到葉子節點的一個路徑,這個路徑上所有節點之和為某一個值。存在返回1,否則返回0。
struct TreeNode {
? int value;
? struct TreeNode * left, * right;
};
函數定義如下int haspath( struct TreeNode * root, int value )
int haspath( struct TreeNode * root, int value){
? ? if(root == NULL){
? ? ? ? return 0;
? ? }
? ? if(root->left == NULL && root->right == NULL && value-root->value==0){
? ? ? ? return 1;
? ? }
? ? return haspath(root->left,value - root->value) || hashpath(root->right,value - root->value);
}
對于給定二叉樹BT,其定義如下:struct BT{ struct BT *left, *right; struct BT *next, *prev; int value; };
為方便中序遍歷,現要求實現一個函數,使*prev, *next分別指向其中序遍歷的前一個節點及后一個節點。
函數定義如下:void BuildInorderThreadedBT(BT *root)
void Inorder(BT *root, vector<BT*>& res){
? ? if(root){
? ? ? ? Inorder(root->left,res);
? ? ? ? res.push_back(root);
? ? ? ? Inorder(root->right,res);
? ? }
}
void BuildInorderThreadedBT(BT *root){
? ? vector<BT*> res;
? ? Inorder(root,res);
? ? int count = res.size();
? ? cout << count <<endl;
? ? if(count<=1)
? ? ? ? return;
? ? res[0]->next = res[1];
? ? for (int i = 1; i < count-1;i++)
? ? {
? ? ? ? res[i]->prev = res[i-1];
? ? ? ? res[i]->next = res[i+1];
? ? }
? ? res[count-1]->prev = res[count-2];
}
3.某一個大文件被拆成了N個小文件,每個小文件編號從0至N-1,相應大小分別記為S(i)。給定磁盤空間為C,試實現一個函數從N個文件中連續選出若干個文件拷貝到磁盤中,使得磁盤剩余空間最小。
函數定義如下:
int MaximumCopy(std::vector s, size_t C, size_t &start_index, size_t &end_index);
函數返回值為剩余空間,如無解返回-1。
其中start_index, end_index為文件的編號。
如N=5,S = {1, 2, 3, 5, 4},C = 7
結果為p = 0, q = 2, return = 1
int MaximumCopy(std::vector<size_t> s, size_t C, size_t &start_index, size_t &end_index){
? ? int count = s.size();
? ? size_t min = C;
? ? size_t tmp_start_index = 0;
? ? size_t tmp_end_index = 0;
? ? size_t sum = s[0];
? ? while(tmp_start_index<count){
? ? ? ? if(C - sum < 0){
? ? ? ? ? ? sum -= s[tmp_start_index];
? ? ? ? ? ? tmp_start_index++;
? ? ? ? ? ? if(tmp_start_index > tmp_end_index)
? ? ? ? ? ? ? ? tmp_end_index = tmp_start_index;
? ? ? ? }
? ? ? ? else if(C - sum < min){
? ? ? ? ? ? min = C - sum;
? ? ? ? ? ? start_index = tmp_start_index;
? ? ? ? ? ? end_index = tmp_end_index;
? ? ? ? ? ? tmp_end_index++;
? ? ? ? ? ? sum += s[tmp_end_index];
? ? ? ? }
? ? ? ? else{
? ? ? ? ? ? tmp_end_index++;
? ? ? ? ? ? sum += s[tmp_end_index];
? ? ? ? }
? ? }
? ? return min==C?-1:min;
}
4.公司減員增效,希望得到最大的收益(在收益相同的情況下,取裁員人數最小的
方案)。假設有n個員工,每個員工的收益為cost[i]( cost>0說明為收益為正,
cost<0為收益為負)。員工關系有m條,m[i]={ x,y}表示x是y的上級,如果員工的
所屬的上級被拆掉,那么員工也要被拆掉?,F假設員工只屬于一個上級,求解裁員
后公司的最終收益值result,裁員員工id列表fire_list?
struct Relation{
int x;
int y;
};
struct Tree{
? ? int up; //上級
? ? int *down; //下級
}
Tree* createTree(const Relation* m, int m_size){
? ? for(int i=0;i<m_size;i++){
? ? ? ? //構建森林,可以考慮并查集
? ? }
}
void preOrder(Tree **root, int& result, int* fire_list){
? ? for(int i=0;i<root.size();i++){
? ? ? ? if(root[i]){
? ? ? ? ? ? //計算所有鏈上的最大和且和大于0
? ? ? ? ? ? res = cal();
? ? ? ? ? ? sum = calSum();
? ? ? ? ? ? //保存結果
? ? ? ? ? ? fire_list.push_back(res);
? ? ? ? ? ? result += sum;
? ? ? ? }
? ? }
}
void caiyuan(const int* cost,int cost_size, const Relation* m, int m_size,int& result, int* fire_list, int& fire_size){
? ? //構建森林,每棵樹是多叉樹
? ? Tree **root = createTree(m, m_size);
? ? //分別對每棵樹進行深度遍歷,遍歷每條鏈表上從頭開始的最大和且和大于0,如果每條都小于0那么整個樹就都放棄掉
? ? preOrder(root, result, fire_list);
}
# 完美世界面試
面試崗位
Java開發工程師
面試體驗
整個過程從上午10點開始一直到下午5點,上午介紹了完美世界的情況,下午面試,等了好久只面了一面,問的問題都非常細,感覺自己表現并不好
面試問題
基本collection類中包含哪些
hashmap如何判斷key值重復
線程池的實現,offer和take
Spring到controller前的過程
sql語句實現
# 拼多多面試
面試崗位
Java開發工程師
面試體驗
一共有兩面,加上一面hr,面試官都很隨和,整體面試感覺還不錯
面試問題
第一面
java的直接內存講講?
java類的加載過程
講講抽象工廠
Node.js了解什么
第二面
中間人攻擊講講
https是怎么做的
linux內存管理
IoC注入過程,父類怎么辦
hr面
拼多多加班很多能接受么?
你對于北方和南方會怎么考慮?
# 美團點評面試
面試崗位
后臺開發工程師
面試體驗
只有一面,感覺面試官對于我并不感興趣,整體技術也偏C++,面試官人很隨和,但是問題描述不清楚,耽誤了一些時間,而且感覺導致他對我評價變低
面試問題
有一堆IP地址范圍,查找某個IP地址屬于哪個IP地址范圍
網絡字節序大小端,如何用代碼判斷是否為大小端
TCP四次揮手,TIME_WAIT,CLOSE_WAIT的理解
哲學家就餐問題如何解決?
以 2018.08.28 為時間節點,我要開始好好找工作了?。?!
# 阿里飛豬
面試崗位
JAVA開發工程師
面試體驗
面試官電話來的很晚,基本是要睡覺了,可以感覺出來阿里的工作不輕松呀
面試問題
class存在哪兒,jvm結構
stringbuffer和stringbuilder的區別
# 騰訊筆試面試
面試崗位
后臺開發工程師
面試體驗
這次面試又發來了三道題,然后電話問了問項目,最后一道題還是好難啊
面試問題
注:進階部分不一定要實現。
為了提高效率,可以在個人本地電腦的編譯器上驗證代碼,并把解題代碼和驗證代碼都貼上來。
1.對于一棵滿二叉排序樹深度為K,節點數為 2^K - 1 ;節點值為 1至 (2^K-1)。
給出K和任意三個節點的值,輸出包含該三個節點的最小子樹的根節點值
樣例輸入:4 10 15 13
樣例輸出:12
#include <string.h>
#include <errno.h>
#include <math.h>
#include <iostream>
using namespace std;
int main()
{
? ? freopen("/Users/guanpengchn/Code/test/c/data.txt","r",stdin);
? ? int K;
? ? while(cin>>K){
? ? ? ? int sum = (1<<K) - 1;
? ? ? ? int node[3];
? ? ? ? int link[100];
? ? ? ? int res=0;
? ? ? ? for(int i=0;i<3;i++){
? ? ? ? ? ? cin>>node[i];
? ? ? ? ? ? int root = (sum + 1)/2;
? ? ? ? ? ? int k = K-1;
? ? ? ? ? ? if(i==0){
? ? ? ? ? ? ? ? for(int j=0;j<K;j++){
? ? ? ? ? ? ? ? ? ? link[j]=root;
? ? ? ? ? ? ? ? ? ? if(root>node[i]){
? ? ? ? ? ? ? ? ? ? ? ? root -= 1<< (k-1);
? ? ? ? ? ? ? ? ? ? }else if(root < node[i]){
? ? ? ? ? ? ? ? ? ? ? ? root += 1<< (k-1);
? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? k--;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? for(int j=0;j<K;j++){
? ? ? ? ? ? ? ? ? ? if(link[j]==root && link[j]!=res){
? ? ? ? ? ? ? ? ? ? ? ? res=link[j];
? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? if(root>node[i]){
? ? ? ? ? ? ? ? ? ? ? ? root -= 1<< (k-1);
? ? ? ? ? ? ? ? ? ? }else if(root < node[i]){
? ? ? ? ? ? ? ? ? ? ? ? root += 1<< (k-1);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? k--;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? cout<<res<<endl;
? ? }
? ? return 0;
}
2.回形矩陣是由1開始的自然數順時針排列成的一個n*n矩陣,n為奇數.
1? 2? 3? 4? 5
16? 17? 18? 19? 6
15? 24? 25? 20? 7
14? 23? 22? 21? 8
13? 12? 11? 10? 9
要求打印出它的一個子矩陣(m*m),例如在n=5的矩陣里面以起始點 xy( 2,2 ) 打印m = 2的正方形,則輸出:
17,18
24,25
進階:是否可以應對超大規模的情況,例如n > 10000000,m<100的場景
#include <string.h>
#include <errno.h>
#include <math.h>
#include <iostream>
using namespace std;
int main()
{
? ? freopen("/Users/guanpengchn/Code/test/c/data2.txt","r",stdin);
? ? int n,x,y,m;
? ? while(cin>>n>>x>>y>>m){
? ? ? ? int index, i, j;
? ? ? ? int matrix[100][100];
? ? ? ? for(int i=0;i<100;i++){
? ? ? ? ? ? memset(matrix[i],0,100*sizeof(int));
? ? ? ? }
? ? ? ? i = j = 0;
? ? ? ? index = 1;
? ? ? ? while(index <= n*n){
? ? ? ? ? ? while(matrix[i][j] == 0 && j < n)
? ? ? ? ? ? ? ? matrix[i][j ++] = index ++;
? ? ? ? ? ? j --;
? ? ? ? ? ? i ++;
? ? ? ? ? ? while(matrix[i][j] == 0 && i < n)
? ? ? ? ? ? ? ? matrix[i++][j] = index ++;
? ? ? ? ? ? i --;
? ? ? ? ? ? j --;
? ? ? ? ? ? while(matrix[i][j] == 0 && j >= 0)
? ? ? ? ? ? ? ? matrix[i][j --] = index ++;
? ? ? ? ? ? j ++;
? ? ? ? ? ? i --;
? ? ? ? ? ? while(matrix[i][j] == 0 && i >= 0)
? ? ? ? ? ? ? ? matrix[i --][j] = index ++;
? ? ? ? ? ? i ++;
? ? ? ? ? ? j ++;
? ? ? ? }
? ? ? ? for(i=x-1; i<x-1+m; i++){
? ? ? ? ? ? for(j=y-1; j<y-1+m; j++){
? ? ? ? ? ? ? ? cout<<matrix[i][j]<<' ';
? ? ? ? ? ? }
? ? ? ? ? ? cout<<endl;
? ? ? ? }
? ? }
? ? return 0;
}
3。一個頁面有兩個廣告位,現有四個廣告需要展示,實現一個算法輸出需要展示的兩個廣告
要求:
a.輸出的兩個廣告不能相同;
b.多次調用輸出的四個廣告的概率為:1:2:3:4 (4個廣告用整形1-4來表示)
c.進階:是否存在通用解,n個廣告,概率為p1:p2:...:pn
#include <string.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include<vector>
using namespace std;
int gen(int n) {? // 在 [1, n] 區間等概率的選個 1 個隨機數
? ? int res = 0;
? ? for(int i = 1; i <= n; i++) {
? ? ? ? if((rand() % i + 1) == i) {? // 產生一個 [1, i] 區間的隨機數
? ? ? ? ? ? res = i;
? ? ? ? }
? ? }
? ? return res;
}
int sum[4]={0};
vector<int> save;
vector<int> a;
void solve() {? // num: 廣告數
? ? int len = a.size();
? ? int pos1;
? ? int pos2;
? ? if(!save.empty()){
? ? ? ? pos1 = save.back();
? ? ? ? pos2 = gen(len);
? ? }else{
? ? ? ? pos1 = gen(len);
? ? ? ? pos2 = gen(len);
? ? ? ? if(a[pos1 - 1] == a[pos2 - 1])
? ? ? ? ? ? save.push_back(pos1);
? ? }
? ? while(a[pos1 - 1] == a[pos2 - 1]){
? ? ? ? save.push_back(pos2);
? ? ? ? pos2 = gen(len);
? ? }
? ? if(!save.empty())
? ? ? ? save.pop_back();
? ? sum[a[pos1 - 1]-1]++;
? ? sum[a[pos2 - 1]-1]++;
? ? cout << a[pos1 - 1] << ", " << a[pos2 - 1] << endl;
}
int main() {
? ? for(int i = 1; i <= 4; i++) {
? ? ? ? for(int j = 0; j < i; j++)
? ? ? ? ? ? a.push_back(i);
? ? }
? ? srand((unsigned)time(0));
? ? for(int i = 0; i < 10000; i++)
? ? ? ? solve();
? ? for(int i=0;i<4;i++){
? ? ? ? cout<<sum[i]<<' ';
? ? }
}
# 阿里飛豬
面試崗位
JAVA開發工程師
面試體驗
面試官中午打的電話,簡單問了問項目,可能是希望我去實習,這樣穩妥一點
# 阿里飛豬
面試崗位
JAVA開發工程師
面試體驗
HR姐姐打電話過來問我的情況,整個過程沒有壓力面,感覺還是挺開心
面試問題
為什么會選擇阿里巴巴?
平時有什么愛好?
想在哪個城市工作?
在項目中收獲是什么?協作中出現過什么問題么?
未來的規劃是什么?
# 快手
面試崗位
JAVA開發工程師
面試體驗
現場面試,結果還是只有一面,估計懸啦,和面試官討論了很久算法題,過程就是我先去做然后面試官不斷提示,到最后優化的地方自己思路還是卡住了
面試問題
給出二叉樹的節點數,構造一顆二叉樹,要求樹中所有節點要么有兩個子節點,要么沒有子節點,把所有這樣的樹存到一個List中
給出一個鏈表,鏈表中有val,next和random,其中random指針會隨機指向任意一個鏈表中的節點,問如何拷貝這樣一個鏈表
synchronized了解么,和可重入鎖的區別是什么?synchronized底層是怎么實現的?鎖的種類有什么?
# 微策略
面試崗位
開發工程師
面試體驗
我參加的是微策略的提前批沙龍,感覺做的很好,第一天是企業介紹和群體面試,玩了很多游戲,第二天是正式的面試,有兩輪技術面和一輪final面試,如果面試的不好可能一輪就結束了,微策略公司讓我覺得比較好的地方在于地處杭州,生活壓力相對會小,同時保持了外企不加班的風格,還有就是作為美國的企業杭州是第二大開發總部,會有很多技術性的工作,和一些外企只把測試和技術支持放到國內是有區別的,感謝提供了兩天的酒店住宿和往返路費報銷,面試題目不可透漏,希望有更多同學去體驗~~
# 智者四?!?/b>
筆試崗位
后臺開發工程師
筆試題目
5道選擇題,3道簡答題和3道算法題,整體難度不大
# 圖森未來
面試崗位
全棧開發工程師
面試體驗
第一面主要是面了兩道算法題,第二道題沒想清楚,第二面是從項目和工程的角度來面試的,主要看我的知識面和能力吧,總體體驗還挺好的,也是第一次面試全棧開發的崗位,和面試官討論了一下如何理解全棧工程師的,為什么圖森會有這樣的崗位招聘
面試題目
給出一個只包含abc的字符串,找出其中按照abc三個字母順序可以匹配的子序列數量,比如abcc可以匹配2個abc
給出一個樹,每條路徑都是1的權重,遍歷完成樹上所有節點后最小要走的路徑是多少
如何理解全棧,對于50,50的現象
HTTP狀態碼都有什么
如果不使用鎖如何既保障性能又保障準確性
如果只有5分鐘,數據庫會過來100萬訪問量,怎么處理
# 騰訊
面試崗位
后臺開發工程師
面試體驗
沒想到之前騰訊的面試進度變成GM/面委會之后果真回退成復試了,,,這還能回退,這次還是復試,加上這次已經四次了,這次沒有做題問了很多C++的知識,被問的很暈
面試題目
講項目
雙向鏈表如何轉二叉搜索樹
C++多態底層是怎么實現的
sleep能到微妙級么,為什么
MySQL都有什么引擎,區別是什么?
MySQL主從是如何同步的
new是函數么,可以被重載么
linux為什么要分內核態和用戶態
IPC通信方式,哪種系統資源消耗最少
有三個桶,分別能裝10升,7升,3升油,現在10升的桶裝滿,怎么能倒出來兩個5升油
# 宜信
面試崗位
后臺開發工程師
面試體驗
一共兩面,第一面面試不太好,很久不刷算法題了,很常見的題被問得很蒙,第二面問了很多簡單的算法題,整體回答的還可以
面試題目
求二叉樹中兩個節點的最近公共祖先節點
用HashMap和ArrayList設計一個Set,要求實現add,delete,random函數
# 網易游戲雷火
筆試崗位
平臺研發工程師
筆試體驗
其他的筆試沒怎么寫過體驗,網易游戲的體驗感還挺強,因為要去現場筆試,人挨著人,每一列都是不同的崗位,卷子也不一樣,確實沒辦法抄襲,我去的那場卷子發的比較慢,定的是14:00-17:00筆試,但是卷子發了有半個小時,不過時間也向后延長了,題目是前60道題為不定項選擇和填空,一道題一分,只要不是標準答案就沒有分,2道簡單題各8分,2道編程題各12分,總分100分
筆試題目
前60道都是大學考試里的那種題目,沒有復習的話很雜很難做
簡答題1:有A,B,C,D四個獎,每個觀眾可以抽獎三次,以抽到的最大獎為結果,從大到小為ABCD,要求最后抽到獎的概率為a%,b%,c%,d%,寫一下如何實現
簡單題2:給出一個數獨,要求寫一下如何將空位填滿
編程題1:有a-j的布爾變量
(1) 要求實現輸入一個公式字符串,其中包含& | ! ( )這五個符號,同時輸入a-j的布爾值數組,輸出公式的計算結果,例如:輸入字符串 a&(b|!c) 和數組 [true,false,true] 輸出false
(2) 請統計有多少個個變量改變了bool值同時對整個公式沒影響
編程題2:給出一個數組,代表高度,求出來水坑的空間大小
# 網易游戲雷火
面試崗位
平臺研發工程師
面試體驗
電話面試,面試官非常隨和,而且經常笑意滿滿,讓我感覺通不過電話打得也挺開心的,哈哈,問了很多工程上的問題,基礎的內容并沒有特別多
面試題目
如何設計登錄功能
如果傳輸json如何讓服務端知道
MySQL的聯合索引,如何查看執行流程調優
了解node和typescript么
redis有哪些數據結構,可以用在哪些場景下
# 字節跳動
筆試崗位
后臺開發工程師
筆試體驗
題目挺難的,5道題只AC了2道,估計夠嗆有面試機會
# 網易游戲雷火
面試崗位
平臺研發工程師
面試體驗
面試的部門主要是寫nodejs的,問的問題也基本都和js有關系,沒有問算法題,主要是在討論js,看我js的水平,然而我并沒有準備,所以很多答的并不理想和準確
面試問題
如果讓你自己實現vue-router怎么做
Promise知道么,如何保證3個Promise按順序調用
解構是什么意思,對數組和對象解構的區別
CORS如何讓客戶端在發送的時候攜帶cookie
如何避免跨腳本攻擊
# 圖森未來
面試崗位
全棧開發工程師
面試體驗
在線寫了兩道算法題,第一個題很常規,第二個題就被難住了,然后問了問個人意愿想學什么包括想在哪兒工作
面試問題
第一題
給出一個只有正數的數組,和目標值target,找到大于target的連續子數組最小和
//a[] 34 564 -7 23 76 -565 324 768 23 67
//target = 234
//l,r sum = a[l] + ..+a[r] >= x && minSum
int query(int a[], int x){
? ? if(a.length==0){
? ? ? ? return 0;
? ? }
? ? int minSum=0;
? ? int tmpSum=a[0];
? ? int front=0;
? ? int end=0;
? ? boolean flag=true;
? ? while(end<a.length){
? ? ? ? if((tmpSum<minSum||flag) && tmpSum>=x){
? ? ? ? ? ? flag=false;
? ? ? ? ? ? minSum = tmpSum;
? ? ? ? ? ? front++;
? ? ? ? ? ? if(front>end){
? ? ? ? ? ? ? ? end++;
? ? ? ? ? ? }
? ? ? ? ? ? tmpSum -= a[front-1];
? ? ? ? }else{
? ? ? ? ? ? end++;
? ? ? ? ? ? tmpsum += a[end];
? ? ? ? }
? ? }
? ? return minSum;
}
第二題
如果數組中存在負數呢?
構建二叉搜索樹,每個節點上都是從頭開始的子數組和,再遍歷數組,去加搜索樹上的值,找到符合條件的值,遍歷時間要nlogn
# 圖森未來
面試崗位
全棧開發工程師
面試體驗
主要問了問整體情況,還有一些知識點,講了很多關于工作的內容
# 字節跳動
面試崗位
后臺開發工程師
面試體驗
一共三輪面試,考察的問題并不是很難,每輪都有code,難度不大,但是對code的檢查都很仔細
面試問題
反轉鏈表
兩個棧實現隊列的push,pop和count功能
給出一個數組如 5,0,3,7,0,0,1 從0號下標位置出發,數組中的數表示能走到后面的最多位置,問走到最后一個位置最少需要幾步
給出一個字符串,其中的字母在a-zA-Z范圍內,找出字符串在a-zA-Z范圍內沒出現過的字母
上一題變形,如果現在數字的范圍是0-2^32,給出一個300G的文件,里面每行都是一個數,內存只有1G,如何找到在數字范圍內,沒出現過的數
有一份兒日志文件,每行都是一個日期,有序排列,請找出20:00-22:00的日志行
redis的基本數據結構有哪些?如何備份?
數據庫引擎有哪些?區別是什么?
講一下三次握手和四次揮手,寫一下SYN和ACK的值
進程間通信機制有哪些
Http協議有哪些狀態碼,跨域是怎么實現的
秋招投的基本都是Java研發崗,分享一下自己的復習策略
# 初級策略:看面經和刷題
如果是面試java開發的話,推薦JavaGuide這個倉庫,里面覆蓋的還比較全面
# 高級策略:看書和讀源碼
其實最開始我是拒絕看書的,因為覺得太慢,而且可能記不住,所以我使用了初級策略,但是在面試過程中有幾件事情讓我發現了秋招僅僅依靠面經是無法拿到大廠offer的
問題如下:
面試中讓我實現HashMap的put函數偽代碼,實現ThreadPoolExecutor的offer和take函數偽代碼
大小端是什么樣的,如何寫代碼判斷,網絡字節序c++和java會存在大小端轉換問題么?
你對jvm看起來很了解,那雙親委派模型知道么?
Spring的啟動過程是怎么樣的,用到了哪些類?
遇到大量wait_time狀態怎么處理?
分析下上面幾個問題,可以得到下面幾個結論:
我面的都是java和后臺研發的崗位,但是不可避免的會碰到c++的面試官問c++相關的面試問題,尤其是網絡編程上;
java面試如果僅僅看面經的話,遇到源碼和更深入一層的問題基本顧及不到,而恰恰現在大廠的面試官都會去深入一步詢問。
所以只看面經很容易被識別出來,然后被面試官吊打,我只舉了面試過程中遇到的5個較深入的問題,還有更多的問題我沒列出來,而且可以認為有幾個問題沒答出來,就少了幾個offer,今年的面試已經很難有問題不會可以給offer的空間了。
基于上述結論我推薦幾本我看過的書,都是豆瓣評分很高很經典的書籍,分別用于補充不同的部分,所有的書籍均可下載,該推薦基于已經學過Java有一定編程能力的同志。
程序媛:整理的Java基礎、Web前后端、各種框架、數據庫及IT行業等類型電子書籍?zhuanlan.zhihu.com
# Java研發書籍:
推薦閱讀順序:
Java高并發程序設計 -> JDK -> 深入理解Java虛擬機 -> MySQL必知必會 -> Redis開發與運維 -> TCP/IP編程 -> 圖解HTTP -> Head First 設計模式 -> Java 8實戰 -> 大型網站技術架構 -> 高性能MySQL -> 其他
書籍詳情:
JDK的collection,map,concurrent包必看
Java高并發程序設計:必看,面試中高并發幾乎是必問的點,如果沒有系統的看過高并發程序如何寫,類庫如何用很容易被問暈
深入理解Java虛擬機:必看,經典中的經典,所有jvm和jmm相關的問題和知識都在這里有答案
MySQL必知必會:必看,內容為sql語句的基本使用,建議配合??途W的數據庫實戰編程來復習
Redis開發與運維:必看,主要內容為Redis的使用和特點,講解了Redis都有哪些可用的內容
TCP/IP編程:必看,書中雖然都是C++,但基本覆蓋了網絡編程能遇到的問題,包括IO使用,網絡字節序等
圖解HTTP:必看,書很短一天就能看完,能很快的掌握http協議中的字段和含義,面試中也經常被問到
Head First 設計模式:選看,講java設計模式的,其中單例模式的四種實現被問得最多
Java 8實戰:選看,非常有價值的書籍,Java 8的新特性使得Java函數式編程成為了可能
大型網站技術架構:必看,面試中常常會遇到秒殺系統設計一類的問題,這時候需要有對分布式系統演化的理解
高性能MySQL:選看,內容為mysql的實現原理和性能優化,在面試中經常會被問到,讀這本書會有更深刻的理解
其他:還有很多進階的書籍,比如Spring揭秘、Netty權威指南、Redis設計與實現等,這些都可以后續再看
如果你現在只是正在入門Java或者即將學習Java,可以加我的Java討論學習交流裙
----686827638
附贈覆蓋了用Java,前端,知Python等,最新Java精講視頻,PDF書籍教程,面試題,學習手冊
建議:學一個工具的時候,需要準備兩本書,第一本書是講如何使用的,第二本書是講內部原理的,建議先將第一本書看個大概,再去開始做項目,一邊做一邊鞏固,同時開始學習實現原理。
如果大家在入門學習Java的過程當中有遇見任何關于學習,行業方面的問題,都可以申請加入我的Java技術自學交流小組請點擊【這里獲取】,有任何不懂的大家都可以隨時來交流,千萬不要選擇一個人孤軍奮戰,只有不斷交流的碰撞,我們才能發現問題的根本