2019秋招復習筆記--面試經歷記錄總結

2019年3月19日騰訊後臺開發一面問題待解決(QQ瀏覽器搜索部門)

1. 大家搜索引擎的QPS有多少?html

2000到10000左右java

2. 關於文字搜索的部分, Lucene是怎麼設置索引/關鍵字/類似性度量 的?node

 

4. 你作的去重、檢查有效性的工具在運行的時候監控過性能嗎?哪一種資源佔用比較多?python

 

5. 大家的搜索引擎支持圖片搜索,是怎麼作的?用了什麼算法(提取圖片特徵用了什麼算法)?linux

CNN-底層是VGG16, 以前用的是pHOG(分層梯度方向直方圖(Pyramid Histogram of Oriented Gradients,PHOG) 是一種描述空間形狀的特徵向量)git

6. 無論是圖片的特徵仍是三維模型的特徵, 大家提取了以後保存在數據庫裏面, 而後新來了一張圖片, 你也計算了它的特徵,那麼如何度量這個特徵與你數據庫中已有圖片的特徵的類似度呢?面試

答:直接使用歐式距離計算。反問: 大家的數據量大概有三百萬,你要是這麼作的話,挨個計算距離效率也過低了吧?redis

正確答案:算法

提取特徵以後,用Lire計算特徵的局部敏感HashCode(局部敏感哈希的特徵是3個字符一組,成爲一個單詞),而後HashCode採用String類型存儲。若是有了一個新的檢索項過來,先用一樣的算法計算其特徵以及局部敏感HashCode, 將其轉爲字符串。而後採起字符串匹配的方式尋找已經存儲的HashCode中的匹配項。字符串匹配程度越高的說明類似性越大,這個交給Lire來作。採用倒排索引的方式來加快檢索。數據庫裏的每一個局部敏感HashCode都看做一個個的文檔,統計全部文檔裏面的單詞,並創建單詞對應的文檔索引(倒排索引)。對於被檢索的HashCode, 也是分紅一個個單詞,去找哪些文檔裏面包含這些單詞,按包含單詞的多少返回檢索結果。sql

LSH的基本思想是:將原始數據空間中的兩個相鄰數據點經過相同的映射或投影變換(projection)後,這兩個數據點在新的數據空間中仍然相鄰的機率很大,而不相鄰的數據點被映射到同一個桶的機率很小。也就是說,若是咱們對原始數據進行一些hash映射後,咱們但願原先相鄰的兩個數據可以被hash到相同的桶內,具備相同的桶號。對原始數據集合中全部的數據都進行hash映射後,咱們就獲得了一個hash table,這些原始數據集被分散到了hash table的桶內,每一個桶會落入一些原始數據,屬於同一個桶內的數據就有很大多是相鄰的,固然也存在不相鄰的數據被hash到了同一個桶內。所以,若是咱們可以找到這樣一些hash functions,使得通過它們的哈希映射變換後,原始空間中相鄰的數據落入相同的桶內的話,那麼咱們在該數據集合中進行近鄰查找就變得容易了,咱們只須要將查詢數據進行哈希映射獲得其桶號,而後取出該桶號對應桶內的全部數據,再進行線性匹配便可查找到與查詢數據相鄰的數據。換句話說,咱們經過hash function映射變換操做,將原始數據集合分紅了多個子集合,而每一個子集合中的數據間是相鄰的且該子集合中的元素個數較小,所以將一個在超大集合內查找相鄰元素的問題轉化爲了在一個很小的集合內查找相鄰元素的問題,顯然計算量降低了不少。

參考 : https://blog.csdn.net/liuheng0111/article/details/52292457

細節:圖片提取的特徵有4096個維度, 每一個維度是一個浮點數,對於每一個維度,在不作降維處理以前, 每一個維度會對應產生3個字符長度的局部敏感HashCode, 因此一個特徵生成的局部敏感HashCode長度爲4096*3。可是HashCode做爲檢索項,若是太長了會影響檢索速度,所以做了降維處理, 去除一些冗餘的維度後,計算出來的HashCode總長在176個字符左右。

模型的方法相似。

 

7. 大家這個項目還有哪些能夠改進的地方(主鍵設置不合理, 怎麼設置)?

設置數據庫主鍵,除了用自增的序列之外,還能夠用UUID(UUID 是 通用惟一識別碼(Universally Unique Identifier))

第一期的方案是Solr + MySQL, 缺點主要是每次更新須要從新導入MySQL數據,不得不停機更新;

改用ElasticSearch, 能夠不適用數據庫,直接插入JSON格式數據創建索引。只在持久化的時候使用MySQL.

 

8.  知道網絡編程嗎?瞭解網絡IO模型嗎?講一講IO多路複用

9. redis瞭解嗎?你提到了redis的緩存替換策略, allkeys lru 替換策略中的 LRU(Least Recently Used)算法的原理是什麼? 不知道? 那若是讓你設計,應該怎麼設計?

LRU(Least recent Used)算法原理

10. 若是讓你設計一個數據庫,實現增刪該查這些功能, 有什麼注意事項?

11. 講一講多線程編程?

數據庫的知識問了不少

針對項目問了不少

必定必定必定要了解項目的全部細節!

2019年3月23日字節跳動後臺開發一面問題

HashMap的底層原理,以及如何優化HashMap的查找效率?(HashMap怎麼提升 解決Hash衝突的效率?)

MySQL數據庫的索引,爲何用B+樹不用B樹?

數據庫的隔離級別, 以及MySQL的默認隔離級別?

Redis經常使用的數據結構有哪些?(做死把redis往上寫,結果連這個都說不全,面試以前須要認真檢查簡歷上所寫的一切,保證你能回答上跟簡歷上所寫的任何一個點的中等難度左右的問題)

IO網絡模型有哪些?說一說多路複用IO?

線程和進程有哪些區別?

TCP/UDP 的區別

三次揮手、四次握手

JAVA有哪些鎖?

悲觀鎖和樂觀鎖的區別?

實現樂觀鎖的CAS方法,具體是怎麼作的?這麼作有什麼問題?

來作一個題:

給你k個有序數組,請排成一個有序數組

先答歸併,問時間複雜度。

提示能夠用堆, 再問時間複雜度, 現場編程。

 你有什麼問題問我嗎?

怎麼提升我這弱雞的代碼能力?

多練習,多寫,多總結;

怎麼讀源碼,大家工做上常常讀源碼嗎?

看你的目的,是爲了解決工做上的需求就讀某一個點; Debug源碼;

 

面試題:1,進程和線程的區別?何時用進程?何時用線程?爲何你的項目中用的是線程?爲何不用進程?若是隻有進程,對你這個項目有沒有影響?

2019年4月21日百度JAVA開發一面問題

1. String, StringBuider, StringBuffer的區別, StringBuider和StringBuffer爲何是可變的,他們哪一個是線程安全的;

2. CurrentHashMap介紹一下;ArrayList的線程安全版本是什麼瞭解過嗎?

3. Sychronized關鍵字加在類、方法和代碼塊上的區別是什麼?

4. JUC java併發包;

5. MySQL有哪些引擎,介紹一下他們的區別;介紹一下B+樹;

6. 介紹一下redis,以及爲何要用redis;

7. 你的論文是哪一個期刊?

8. 代碼題考的是二叉樹的鏡像。

9. Object類有哪些方法:

hashcode, equals, getClass, toString,wait, notify, notifyAll, finalize, clone方法

2019年4月24日騰訊正式批一面(騰訊地圖)

  • 問了一下項目,排序算法怎麼作的?
  • python的效率爲何低?

多線程

  • python的多線程瞭解嗎?(答不太瞭解,但瞭解JAVA多線程,講了一些JAVA多線程)
  • 線程之間怎麼通訊(操做系統級別的線程怎麼通訊)? 
  • 怎麼用一個進程開另外一個進程(說了fork)?

數據庫

  • MySQL的默認隔離級別?數據庫有哪些級別?
  • 怎麼修改默認隔離級別?
  • redis有哪些數據結構?redis持久化有哪些方法?redis線程怎麼作的(大概是這個意思)?

計網

  • HTTP header包含哪些內容?
  • 其中的connection字段的做用是什麼?
  • TCP三次握手、四次揮手過程、爲何是三次不是兩次,爲何等2MSL時間?
  • HTTP是哪一層的協議,TCP的擁塞控制機制是怎麼實現的?

搜索框架

  • lucene方面瞭解的多嗎?
  • elesticsearch問了一下,有哪些API?

代碼託管

  • git 兩我的的分支有衝突怎麼合併,pull和fetch方法有什麼區別?

代碼加試:

2019年4月24日騰訊正式批二面(騰訊地圖)

詳細的問了項目,三維模型檢索這塊;整個的流程是怎麼作的,去重是怎麼作的,檢索的效果怎麼樣;

論文, 論文總體是怎麼作的,論文的算法(特徵融合後的方法)放到三維模型檢索系統裏面去的效果又怎麼樣的提高;

你不是科班的,你以爲你作coding的優點和劣勢有哪些?

劣勢是沒有學過計算機的不少專業課,但劣勢能夠轉爲優點:如今有目的的去學,能理解更深;

你目前拿了哪些OFFER?

你能實習多久?

2019年4月25日快手一面

問題問的比較常規,如今記不太清了,有印象的是講了redis的兩種數據持久化的方式: RDB快照和AOF;問了JAVA線程池的核心參數, threadlocal 變量; 問了數據庫出現併發修改怎麼辦;

而後考了兩道編程題:

一、用數組實現固定容量的隊列,實現put函數和take函數

這一題在面試官的提醒下,用count記錄隊列長度的方法下,寫出了以下代碼:

View Code

兩個功能測試正常

二、尋找矩陣的最長上升路徑長度:

1 2 3 4 5 6

1 1 1 1 1 3

3 4 1 2 3 4 

最長上升路徑長度爲6

解法是枚舉每一個起點作深搜,可是遞歸出口老寫不對,截至面試結束調試的結果仍然不正確。下面的代碼有問題

View Code

 阿里巴巴本地生活一面

1. 說一下java的集合,若是想要有序的取出元素怎麼作(TreeSet)?

2. 數據庫,隔離級別,索引

3. JAVA 虛擬機, GC的過程,GC的算法有哪些。

4. 怎麼排查OOM?(ref1ref2

5. ThreadLocal的原理,ThreadLocal存的變量必定是線程隔離的嗎?

6. linux命令, 如何在日誌中定位error?

7. 算法題,給定一個數組,除了兩個數字只出現了一次, 其餘的數字都出現了兩次,請找出這兩個數字。(劍指OFFER原題)

2019.8.25騰訊地圖再面

先作5道筆試題:

1. 寫出訪問www.lbs.tencent.com 通過的信息傳輸過程;

2. 寫出線程的狀態以及各個狀態的互相轉換條件;

3. 闡述Dijstra算法並寫出代碼;

4. 股票交易,給出一段時間的股票價格,肯定最佳買入時間和最佳賣出時間,以及最大獲利

5. 財主有一根能夠折斷的金條,財主僱了長工給他幹活七天,財主用這根金條做爲長工的工資。財主必須用金條日結長工的工資。問金條最少折斷多少次,能夠知足支付的要求。

 

面試:

0. Dijstra算法有什麼缺陷不足之處?

1. 100G的硬盤上的整數型數據, 1G的內存。找出這100G數據裏面全部不重複的數據。最少須要多大的輔助內存。

解法1:位圖

int型的整數一共有232個,咱們申請232 bits, 也就是232位, 用1位表示一個數是否出現了,0表示未出現,1表示出現了。好比4出現了,咱們將這232位的第4位置爲1。10000出現了則把第10000位置爲1。這樣232 bits = 232/8 = 229B, 咱們知道210約等於1000, 230約等於109。故229 B  = 2-1 * 109 B = 2-1 * 1GB = 500MB

拓展

若是用兩位表示數出現的次數就能夠分別統計出現0次、出現1次、出現2次和出現屢次的數字。00表示未出現,01表示出現1次,10表示出現兩次,11表示兩次以上。而後掃描100億個數,查看位圖中對應的位置,若是是00,01,10,則加1變成01,10,11;若是是11,則不變。最後再掃描一遍位圖,輸出01,10對應的數。  2^32 * 2 = 8Gbits = 1GB。

那麼這樣作的狀況下怎樣找到這個數呢?我舉個例子,例如咱們此時讀入一個數是:64,64對應的所在bit位是:64*2=128,也就是說第 127 和 128 位共同
標示了它的出現狀態。其餘的以此類推。每當咱們讀出一個數,咱們就這樣去找到它對應的bit位,先讀出bit位的值,再作記錄,已是01的,再次來到,那麼
就應該修改成10。最後的咱們這樣得出結果:掃描整個位圖,若是是10的,就下標/2得出這個數。

解法2:外排序,相似mapreduce的方法

2. 布隆過濾器有什麼做用? 他有什麼缺陷?

3. 1000杯水一杯水有毒,小老鼠喝了有毒的水一週後毒發身亡。小老鼠數量不限,如何最快找出這杯有毒的水。

4. 一個形狀不規則的杯子裝5L水,一個形狀不規則杯子可裝7L水。如何量出6L的水?

5. HashMap是怎麼實現的?初始容量是多少?何時會擴容?

6. 什麼是冪等性

7. Java Web的幾大域?

8. Session與Cookie的區別;

9. TCP爲何是三次握手?什麼叫信息對等?

10. 進程間通訊的方式有哪幾種? 共享內存怎麼實現?

11. MySQL左鏈接和右鏈接有什麼區別?

12. MySQL索引失效條件有哪些?

13. 一條語句執行很慢,怎麼作MySQL查詢優化?

 

2019.09.01 阿里中臺技術一面

1. 講一下實習的項目架構

2. 多我的同時點擊下載按鈕怎麼辦?

2. CountDownLatch怎麼用的,若是latch裏面有一個線程阻塞了怎麼辦?

3. 線程池的核心參數解釋一下?

4. 線程池的拒絕策略有哪些?

5. 瞭解Java的內存模型嗎?講一下內存模型,GC?

6. 垃圾回收器CMS 和G1有什麼區別?

https://www.cnblogs.com/greatLong/articles/11450753.html

7. 傳統的IO和NIO有什麼區別?

 反思:

1. NIO 須要補

2. CMS和G1

3. 比較愛考實際場景的解決方案

2019.09.02 FreeWheel筆試

1. FreeWheel 對各地提供服務,若是客戶發現某地的服務不可用,怎麼排查和定位問題?

2. 什麼是NAT? 他是爲了解決什麼問題提出來的?

IP地址只有32位,滿打滿算只有42.9億個地址,還要去掉保留地址、組播地址,能用得只有36億左右,IPv4很早就被列強瓜分完畢,感謝有NAT這項技術苦苦支撐,咱們還能夠繼續在互聯網遨遊。
公司局域網、機構局域網、我的局域網可使用私網IPv4地址(10.0.0.0/8,172.16.0.0/12,192.168.0.0/16),而後在各個局域網的邊界WAN口使用一個或多個公網IPv4進行一對多的轉換。
若是是一對一轉換,那壓根節省不了IPv4地址空間;因此通常NAT都是一對多的,即一個公網IPv4映射多個私網IPv4,那問題來了,NAT設備如何區分不一樣的私網IPv4的host呢?
NAT使用基於session 轉換規則:
對於TCP/UDP使用
Host's私有IPV4+Port <------->NAT公網IPV4+Port
對於ICMP使用Host's 私有IPv4+session ID<----->NAT公網IPv4+session ID
規則其實很是好理解,因爲session ID在NAT設備上是獨一無二的,因此NAT能夠很容易區別局域網內部的不一樣host。
至於其它傳輸協議,NAT使用的也是相似session ID的轉換規則,即便用能夠將不一樣host 輕易分辨出來的字段作鍵值(KEY),動態建立映射表項,作雙向的地址+KEY的轉換。

3. 闡述5個HTTP的方法,並講述他們在RESTful中的...(忘了)?

經常使用的5個方法是DG3P(Delete, Get, Post, Put, Patch)

4. 簡述系統調用,什麼是系統調用?

每一個進程的虛擬地址空間能夠劃分爲兩個部分:用戶空間和內核空間。在用戶態下只能訪問用戶空間;而在覈心態下,既能夠訪問用戶空間,又能夠訪問內核空間。系統調用是在內核完成的。

6. 什麼是虛擬內存,虛擬內存有什麼做用?

從概念上來講,虛擬內存被組織成爲一個由存放在磁盤上的 N 個連續的字節大小的單元組成的數組,也就是字節數組。每一個字節都有一個惟一的虛擬地址做爲數組的索引。磁盤上活動的數組內容被緩存在主存中。在存儲器結構中,較低層次上的磁盤的數據被分割成塊,這些塊做爲和較高層次的主存之間的傳輸單元。主存做爲虛擬內存的緩存。

5. 簡述數據庫ACID的含義?

6. 一個score數據表,有學生ID, 科目, score三個字段, 輸出全部score相同的字段?

 MySQL中,查詢表(dat_bill_2018_11)中字段(product_id)值重複的記錄:

SELECT product_id, COUNT(*) AS sumCount FROM dat_bill_201811 GROUP BY product_id HAVING sumCount > 1;

說明:先用GROUP BY 對 product_id 進行分組,同時使用COUNT(*)進行統計,再用HAVING來過濾大於1的,這樣查找出來的就是重複的記錄了。

7. 編程題: 

給定一個數組[7,6,4,2,10,8], 一個整數m。把這個數組分紅m個子數組,每一個子數組統計其和。把全部子數組和的最大值做爲該分隔方案的值,輸出全部分隔方案裏面的最小值。

如[7,6,2,10,8]分隔成兩個子數組,分紅[7,6,2], [10, 8]時是全部分隔方案裏子數組和的最大值最小的方案,輸出18。

8. 算法題,抽象起來,是有一棵樹(多叉樹),而後給定這棵樹的兩個節點,找出這兩個節點的最近公共祖先。

9. 系統設計題:

1) 如何設計一個系通通計廣告播放次數;

2) 廣告播放模塊和頻次統計模塊如何通訊

3) 若是服務器在不一樣國家(如美國、歐洲),怎麼保證系統的高併發高可用。

 

面試題:

1. leetcode brick walls;

2. leetcode 410

3. 隨着系統的更新,linux的/boot空間下積攢了愈來愈多的舊的內核文件,如何刪除這些舊的內核文件?

4. 數據庫問了一些不太深的東西,redis和Mysql 的區別與聯繫。

 反思:

1. 手寫SQL沒有寫對

2. 問了下CDN網絡,不知道

3. leetcode的題不太難,但沒有提供出最有解,須要多刷題。

2019.09.11 騰訊運營管理一面

 

2019.09.11 阿里巴巴中臺交易流水二面

1. 講下Java線程池,何時會用到線程池(降一個場景)?

2. 圍繞着流量導出項目問:

1) 你的導出過程用了子線程countDownLatch, 若是有一個子線程掛了怎麼辦?

await()設定等待時間

2) 若是await超時返回了或者拋出異常了怎麼辦?怎麼排查?排查出緣由怎麼恢復?

3) 若是數據量很大,你怎麼加快導出速度?

4)給你一臺服務器,8核,最多能開幾個線程?

不知道

對於32位系統來講,沒有配置3GB用戶內存模式的狀況下,用戶地址空間可用內存是2GB-128KB,內核可用內存是2GB。開啓之後,用戶地址空間可用內存是3GB-128KB

理論上,一個用戶進程最大能夠分配的內存是2G(實際能用的大約爲1.5G),一個線程棧須要預留1M內存空間,那麼理論數據:32位電腦每一個進程最多能夠開2*1024/1=2048個線程,即2000個左右線程。線程是好東西,可是不能濫用,由於像在windows系統下,系統是搶佔式的,線程多了,系統在線程間切換也要花費很是多時間和資源。

默認狀況下,一個線程的棧要預留1M的內存空間
而一個進程中可用的內存空間只有2G,因此理論上一個進程中最多能夠開2048個線程
可是內存固然不可能徹底拿來做線程的棧,因此實際數目要比這個值要小。
你也能夠經過鏈接時修改默認棧大小,將其改的比較小,這樣就能夠多開一些線程。
如將默認棧的大小改爲512K,這樣理論上最多就能夠開4096個線程。

即便物理內存再大,一個進程中能夠起的線程總要受到2GB這個內存空間的限制。
比方說你的機器裝了64GB物理內存,但每一個進程的內存空間仍是4GB,其中用戶態可用的仍是2GB。

若是是同一臺機器內的話,能起多少線程也是受內存限制的。每一個線程對象都要站用非頁面內存,而非頁面內存也是有限的,當非頁面內存被耗盡時,也就沒法建立線程了。

若是物理內存很是大,同一臺機器內能夠跑的線程數目的限制值會愈來愈大。  

在Windows下寫個程序,一個進程Fork出2000個左右線程就會異常退出了,爲何?

這個問題的產生是由於windows32位系統,一個進程所能使用的最大虛擬內存爲2G,而一個線程的默認線程棧StackSize爲1024K(1M),這樣當線程數量逼近2000時,2000*1024K=2G(大約),內存資源就至關於耗盡。

5) 假設能開10個線程,要多少輪次才能導完1000萬條記錄?

6) 你說分庫分表,那麼一張MySQL表最多存多少數據?

6.5) 你的導出的各個小的表的數據怎麼merge的?

7) 好的給你加機器,你這個分佈式的導出系統有幾個模塊?

8) 怎麼保證導出數據的實時性?(導出的時候數據不能再寫到這個庫了,那導出期間的數據怎麼辦?)

讀寫分離,從庫導出主庫寫入,記錄導出階段的新數據

9) MySQL的事務是怎麼實現的?

反思:

1.  對遷移能力要求比較高,須要對具體場景提出相應的解決方案。須要經過多看大數據、高併發場景的設計方案來提升本身。

2. 對MySQL須要全面的學習和掌握,本次面試的MVCC, 事務的實現方法沒有很好的掌握,單表最大容量等。

 

2019.9.18 依圖兩輪面試

第一輪 

介紹項目經歷

1. 項目細節 

若是你的服務掛了怎麼還原?

若是多人同時訪問你的服務怎麼處理?

2. 計算機網絡方面的知識

tcp, udp 擁塞控制的原理,怎麼實現的

代碼題:最大連續子序列和

第二輪面試

1. 實驗室項目經歷

2. 實習項目經歷問的比較少

代碼題

字符串中迴文字符串的數目

 第三輪面試

1. 挑你以爲最有收穫的項目經歷講一講

2. 爲何你以爲第二段實習經歷更有收穫

3. 你但願你的工做環境是什麼樣的?

4. 寫個題: 反轉鏈表

5. 你對你應聘的這個崗位有什麼理解?

2019.9.19 曠視兩輪面試

第一輪面試

講項目架構。

若是你的redis分佈式鎖發生死鎖了怎麼辦?

setnx加鎖 del解鎖 expire設置超時時間 set(key, value, nx, time)可讓setnx和 設置超時時間變成原子的。

服務掛了怎麼恢復?

Java 集合類有哪些, list set map哪一個是頂層接口? set的實現有哪些? ArrayList和linkedlist的區別是什麼, 看過源碼嗎? 建議看一下源碼。

String 類哪些方法是final的? 建議看一下源碼?

線程池, 若是有新任務來了,在線程池有空餘線程的狀況下,是先進workque再出隊列去取線程池取線程, 仍是直接去線程池取線程?

http://www.javashuo.com/article/p-phymxbpm-dr.html

寫了個簡單的題:

一個鏈表 絕對值有序,請將其排序。

-1 -> 2 -> -3 -> 4 -> -5

最終輸出爲

-5 -> -3 -> -1 -> 2 -> 4

 

第二輪面試

算法題

0   1    5    6

2   4    7   12

3   8   11  13

9  10  14  15

按0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 的順序打印這個矩陣。

線程和進程的區別。

問了 卡特蘭數  n輛車進站,問有多少種出站順序

百度智能雲開發部面試

一面

1. 項目經歷

2. 查看某個磁盤下哪一個文件夾佔用比較多用什麼命令

使用df -h查看磁盤空間佔用狀況

使用sudo du -s -h /* | sort -nr命令查看目錄佔用空間

 du的功能:      `du` reports the amount of disk space used by the specified files and for each subdirectory (of directory arguments). with no arguments,`du` reports the disk space for the current directory。
  很明顯,與df不一樣,它用來查看文件或目錄所佔用的磁盤空間的大小。
  2、du經常使用的選項:
  -h:以人類可讀的方式顯示
   -a:顯示目錄佔用的磁盤空間大小,還要顯示其下目錄和文件佔用磁盤空間的大小
  -s:顯示目錄佔用的磁盤空間大小,不要顯示其下子目錄和文件佔用的磁盤空間大小
  -c:顯示幾個目錄或文件佔用的磁盤空間大小,還要統計它們的總和

3. 一個磁盤明明還有空餘但卻不能建立新文件,爲何

4. 寫個SQL語句: SQL從成績表中找出排名前三的學生信息(一個學生可能有多門課的成績)

SELECT name from a GROUP BY name ORDER BY sum(fenshu) DESC LIMIT 0,3 ;

5. 查看網絡端口用什麼命令

6. 面向對象編程的特色

7. 你怎麼理解面向接口編程

8. tcp三次握手會產生哪些數據包

9. 每一個數據包會交換哪些信息

10. 一個tcp能夠支持多少個http鏈接

11. 算法題: 對兩個有序鏈表排序

二面

1. 項目經歷

2. 算法題: 找出一個數組中第三大的數組(數組有重複數字),若是不存在第三大的數組返回-1

3. 智力題: 36匹馬, 6條跑道, 怎樣用最少的比賽次數找出跑的最快的前3匹馬

4. 聊天

度小滿面試

一面

1. 怎麼樣中斷線程

來源

http://www.javashuo.com/article/p-evhnncda-du.html

http://www.javashuo.com/article/p-qefvdcrz-dw.html

1. Thread.stop()方法

該方法已經被棄用(a.會當即中止run方法全部工做,報錯catch finnally語句,致使清理工做沒法完成; b. 會當即釋放該線程持有地全部地鎖,出現線程不一樣步的問題。)

2. 使用interrupt函數中斷線程

來源 http://www.javashuo.com/article/p-aogzwxzn-dy.html

a. 對正常運行中的線程,interrupt() 方法僅僅是在當前線程中打一箇中止的標記(Thread.interrupted()方法返回中斷標誌位的狀態而且清除中斷標誌位, Thread.IsInterrupted()方法返回中斷標誌位而且不清除中斷標誌位),並非真的中止線程,須要由目標線程自行根據標記來決定如何處理中斷;

b. 對於處在阻塞態的線程,因爲代碼阻塞沒法檢查中斷標誌位,對該線程對象調用interrupt()方法會使得其拋出一個InterruptedException。

3. 使用人爲設置的標誌位終止線程(共享變量)

在 run() 方法執行完畢後,該線程就終止了。能夠設置的一個標誌位循環檢查該標誌位來決定是否退出循環。

2. AtomicInteger怎麼保證原子性的

3. 用interrupt中斷線程有什麼很差的地方

http://www.javashuo.com/article/p-aogzwxzn-dy.html

4. GC的過程, 什麼樣的對象能夠做GC root使用?

4.1 部署JVM項目有哪些虛擬機參數能夠調?

5. HashMap 怎麼實現的

6. 若是我本身定義了一個類做爲HashMap的key應該注意些什麼(重寫HashCode), 爲何?

7. 重寫equals方法要注意些什麼

8. 一個類裏面有兩處代碼,一個方法加了方法鎖,一個代碼塊使用Object對象加了鎖。這兩個代碼都操做一個int型的變量, 怎麼保證線程安全

9. 編譯型語言和解釋型語言有什麼區別?(強類型、弱類型)

寫了兩道算法題:

a.  河灘上有兩堆石子,一堆紅色一堆藍色,怎麼把全部的紅色石子放到藍色的前面?

紅色石子設爲1, 藍色石子設爲0, 排成一列的石子中,將全部的1放到0前面。

b. 用快排寫topK

二面

說一下數據庫的鎖機制

redis做分佈式鎖是怎麼實現的

說一下死鎖

說一下GC

知道Spring 的AOP嗎?

知道 RPC嗎?

代碼題:

逆時針打印矩陣

三面:

1. 對本身前面的面試表現比較滿意的有哪些,不太滿意的有哪些?

2.  平時本身怎麼學習的? 有寫博客?博客地址發我看看。

3. 用過kafka嗎?

4. 介紹項目

猿輔導一面

1. 知道redis setnx底層的機制嗎

2. 方法區在哪, 元數據區保存的是什麼?

3. set(key, value, nx, time)有沒有其餘問題。

有。若是某些緣由致使線程B執行的很慢很慢,過了30秒都沒執行完,這時候鎖過時自動釋放,線程B獲得了鎖。隨後,線程A執行完了任務,線程A接着執行del指令來釋放鎖。但這時候線程B還沒執行完,線程A實際上刪除的是線程B加的鎖。

解決:

能夠在del釋放鎖以前作一個判斷,驗證當前的鎖是否是本身加的鎖。

至於具體的實現,能夠在加鎖的時候把當前的線程ID當作value,並在刪除以前驗證key對應的value是否是本身線程的ID。

4. 給定一個數字字符串,判斷他可能的合法的IP方案。leetcode 95

5.衛語句

http://www.javashuo.com/article/p-atckhpef-ec.html

函數中的條件邏輯令人難以看清正常的分支執行路徑。使用衛語句表現全部特殊狀況。

所謂衛語句,若是某個條件極其罕見,就應該單獨檢查該條件,並在該條件爲真時馬上從函數中返回。這樣的單獨檢查經常被稱爲「衛語句」。

6. CMS垃圾回收器垃圾回收有幾個階段?(G1有哪些階段?)

2019_09_28 猿輔導二面

0. 問了下項目經歷,你這個項目有哪些技術難點?

1. 線程池的核心參數

2. 瞭解cachedThreadPool嗎

3. Redis爲何QPS高?

4. Linux怎麼查看日誌的行數

sed -n '$=' 文件名

cat 文件名 | wc -l

wc -l 文件名

5. 軟鏈接和硬連接有什麼區別

在Linux的文件系統中,保存在磁盤分區中的文件無論是什麼類型都給它分配一個編號,稱爲索引節點號inode 。

  • 軟鏈接,其實就是新創建一個文件,這個文件就是專門用來指向別的文件的(那就和windows 下的快捷方式的那個文件有很接近的意味)。軟連接產生的是一個新的文件,但這個文件的做用就是專門指向某個文件的,刪了這個軟鏈接文件,那就等於不須要這個鏈接,和原來的存在的實體原文件沒有任何關係,但刪除原來的文件,則相應的軟鏈接不可用(cat那個軟連接文件,則提示「沒有該文件或目錄「)

  • 硬鏈接是不會創建inode的,他只是在文件原來的inode link count域再增長1而已,也所以硬連接是不能夠跨越文件系統的。相反是軟鏈接會從新創建一個inode,固然inode的結構跟其餘的不同,他只是一個指明源文件的字符串信息。一旦刪除源文件,那麼軟鏈接將變得毫無心義。而硬連接刪除的時候,系統調用會檢查inode link count的數值,若是他大於等於1,那麼inode不會被回收。所以文件的內容不會被刪除。
  • 硬連接其實是爲文件建一個別名,連接文件和原文件其實是同一個文件。能夠經過ls -i來查看一下,這兩個文件的inode號是同一個,說明它們是同一個文件;而軟連接創建的是一個指向,即連接文件內的內容是指向原文件的指針,它們是兩個文件。
  • 軟連接能夠跨文件系統,硬連接不能夠;
  • 軟連接能夠對一個不存在的文件名(filename)進行連接(固然此時若是你vi這個軟連接文件,linux會自動新建一個文件名爲filename的文件),硬連接不能夠(其文件必須存在,inode必須存在);
  • 軟連接能夠對目錄進行鏈接,硬連接不能夠。
  • 兩種連接均可以經過命令 ln 來建立。ln 默認建立的是硬連接。
  • 使用 -s 開關能夠建立軟連接。

6. 代碼題:

對stack裏面的數排序,能夠用輔助棧,不能用其餘數據結構

7.代碼題:

對鏈表的給定區間翻轉

大華一面

用過mybatis? foreach標籤有什麼用?

Java IO瞭解嗎?

HashMap key爲null會被放到哪?

單索引和聯合索引的區別?

怎麼優化一條運行的很慢的SQL語句?

爲何%like不走索引?

Sychronized 和 Lock 有什麼區別?

ConcurrentHashMap 怎麼實現線程安全的? 內部分段分了幾段?

線程有哪些狀態?

線程的這些狀態之間的轉換用什麼函數?

怎麼開啓一個新線程?

繼承Thread和實現Runnable接口有什麼區別?

ArrayList底層是怎麼實現的?

快手一面

1. 說下JVM內存模型

2. 程序計數器是怎麼工做的? 

3. CMS的幾個工做階段

4. JVM中多個線程同時申請堆上的內存,會不會出現衝突

5. Sychronized關鍵字和Lock有什麼區別?

6. ReentrenLock和Sychronized關鍵字有什麼區別?

7. 線程池的工做原理, workque的類型

8. 計算機網絡的七層模型的做用分別是什麼?

9. 寫一個最大堆

快手二面

前一面的面試官都問了你什麼?

寫一個單例模式.

相關文章
相關標籤/搜索