03.04 這400道面試題,決定了你去BAT還是TMD

阿里、騰訊、百度等大廠面試都考核哪些技術點?

關於MySQL、Redis面試官一般都會問什麼?

肖戰227事件,為什麼知乎會崩?如何解決?

金三銀四來了!小編再次彙總了各一線互聯網企業,阿里、騰訊、百度、美團、等等大廠最新技術面試題目,專家出題人分享彙總以及答案也在逐步補全中。內容分為阿里篇、華為篇、百度篇、騰訊篇、美團篇、頭條篇、滴滴篇、京東篇、MySQL篇、Redis篇、MongDB篇、ZooKeeper篇、Nginx篇、算法篇、內存篇、CPU篇、磁盤篇、網絡通信篇、安全篇、併發篇。

這400道面試題,決定了你去BAT還是TMD

不多說了,來一起看看吧。(文末附有免費領取方式)

這400道面試題,決定了你去BAT還是TMD

阿里篇(共計27題)

  • 1.1.1 如何實現一個高效的單向鏈表逆序輸出?

出題人:阿里巴巴出題專家:昀龍/阿里雲彈性人工智能負責人

參考答案:下面是其中一種寫法,也可以有不同的寫法,比如遞歸等。供參考。

<code>typedef struct node{
in data;
struct node* next;
node(int d):data(d), next(NULL){}
}node;

void reverse(node* head)
{
if(NULL == head || NULL == head->next){
return;
}

node* prev=NULL;
node* pcur=head->next;
node* next;

while(pcur!=NULL){
if(pcur->next==NULL){
pcur->next=prev;
break;
}
next=pcur->next;
pcur->next=prev;
prev=pcur;

pcur=next;
}

head->next=pcur;
node*tmp=head->next;
while(tmp!=NULL){
cout<<tmp->data< tmp=tmp->next;
}
}
/<tmp->/<code>
  • 1.1.2 已知sqrt(2)約等於1.414,要求不用數學庫,求sqrt(2)精確到小數點後10位
  • 1.1.3 給定一個二叉搜索樹(BST),找到樹中第 K 小的節點

出題人:阿里巴巴出題專家:文景/阿里雲 CDN 資深技術專家

參考答案:

  • 考察點

1、基礎數據結構的理解和編碼能力

2、遞歸使用

  • 示例
<code>       5
/ \\
3 6
/ \\
2 4
/
1
/<code>

說明:保證輸入的 K 滿足 1<=K<=(節點數目)

樹相關的題目,第一眼就想到遞歸求解,左右子樹分別遍歷。聯想到二叉搜索樹的性質,root 大於左子樹,小於右子樹,如果左子樹的節點數目等於 K-1,那麼 root 就是結果,否則如果左子樹節點數目小於 K-1,那麼結果必然在右子樹,否則就在左子樹。因此在搜索的時候同時返回節點數目,跟 K 做對比,就能得出結果了。

<code>/**
* Definition for a binary tree node.
**/

public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}

class Solution {
private class ResultType {

boolean found; // 是否找到

int val; // 節點數目
ResultType(boolean found, int val) {
this.found = found;
this.val = val;
}
}

public int kthSmallest(TreeNode root, int k) {
return kthSmallestHelper(root, k).val;
}

private ResultType kthSmallestHelper(TreeNode root, int k) {
if (root == null) {
return new ResultType(false, 0);

}

ResultType left = kthSmallestHelper(root.left, k);

// 左子樹找到,直接返回
if (left.found) {
return new ResultType(true, left.val);
}

// 左子樹的節點數目 = K-1,結果為 root 的值
if (k - left.val == 1) {
return new ResultType(true, root.val);
}

// 右子樹尋找
ResultType right = kthSmallestHelper(root.right, k - left.val - 1);
if (right.found) {
return new ResultType(true, right.val);
}

// 沒找到,返回節點總數
return new ResultType(false, left.val + 1 + right.val);
}
}
/<code>
  • 1.1.4 LRU緩存機制

題目:LRU 緩存機制設計和實現一個 LRU(最近最少使用)緩存數據結構,使它應該支持以下操作:get 和 put。get(key) - 如果 key 存在於緩存中,則獲取 key 的 value(總是正數),否則返回 -1。put(key,value) - 如果 key 不存在,請設置或插入 value。當緩存達到其容量時,它應該在插入新項目之前使最近最少使用的項目作廢。

  • 1.1.5 關於epoll和select的區別,以下哪些說法是正確的(多選)

A. epoll 和 select 都是 I/O 多路複用的技術,都可以實現同時監聽多個 I/O 事件的狀態。

B. epoll 相比 select 效率更高,主要是基於其操作系統支持的I/O事件通知機制,而 select 是基於輪詢機制。

C. epoll 支持水平觸發和邊沿觸發兩種模式。

D. select 能並行支持 I/O 比較小,且無法修改。

出題人:阿里巴巴出題專家:寈峰/阿里技術專家

參考答案:A,B,C

【延伸】那在高併發的訪問下,epoll使用那一種觸發方式要高效些?當使用邊緣觸發的時候要注意些什麼東西?

  • 1.1.6 從innodb的索引結構分析,為什麼索引的 key 長度不能太長
  • 1.1.7 MySQL的數據如何恢復到任意時間點?
  • .....

華為篇(共計50題)

  • 2.1.0 static有什麼用途?(請至少說明兩種)
  • 2.1.1 引用與指針有什麼區別?
  • 2.1.2 描述實時系統的基本特性
  • ……
    百度篇(共計48題)
  • 3.1.0 在函數內定義一個字符數組,用gets函數輸入字符串的時候,如果輸入越界,為什麼程序會崩潰?
  • 3.1.1 C++中引用與指針的區別
  • 3.1.2 C/C++程序的內存分區
  • ……

騰訊篇(共計82題)

Java基礎

  • 4.1.0 JAVA中的幾種基本數據類型是什麼,各自佔用多少字節。
  • 4.1.1 String類能被繼承嗎,為什麼。
  • 4.1.2 String,Stringbuffer,StringBuilder的區別。
  • 4.1.3 ArrayList和LinkedList有什麼區別。

JVM

  • 4.4.2 什麼情況下會發生棧內存溢出。
  • 4.4.3 JVM的內存結構,Eden和Survivor比例。
  • 4.4.4 JVM內存為什麼要分成新生代,老年代,持久代。新生代中為什麼要分為Eden和Survivor。

開源框架

  • 4.5.5 簡單講講tomcat結構,以及其類加載器流程,線程模型等。
  • 4.5.6 tomcat如何調優,涉及哪些參數 。
  • 4.5.7 ……

美團篇(共計40題)

  • 5.1.0 java虛擬機內存模型
  • 5.1.1 內存溢出一般發生在哪個區?永久代會不會導致內存溢出?
  • 5.1.2 動態加載類的框架了解哪些?
  • 5.1.3 ……

頭條篇(共計37題)

  • 6.1.0 5個人去一個海島尋寶,最後一共找到了100枚金幣。他們約定了一個分配方案。
  • 6.1.1 給你一個有序整數數組,數組中的數可以是正數、負數、零,請實現一個函數,這個函數返回一個整數:返回這個數組所有數的平方值中有多少種不同的取值。
  • 6.1.2 一個環有10個節點,編號0-9。從0點出發,走N步又能回到0點,共有多少種走法?
  • 6.1.3 ……

滴滴篇(共計12題)

  • 7.1.0 B+樹、B-樹的區別?
  • 7.1.1 數據庫隔離級別,幻讀和不可重複讀的區別?
  • 7.1.2 有hell, well, hello, world等字符串組,現在問能否拼接成helloworld,代碼實現。
  • 7.1.3 ……

京東篇(共計13題)

  • 8.1.0 一般sql注入怎麼發現觸點的,從源碼闡述sqlmap如何測試注入點的。
  • 8.1.1 masscan掃描端口時靠什麼檢測,為什麼這麼快? 請詳述.
  • 8.1.2 你寫過哪些小工具,你為你使用過的工具做過什麼修改.
  • 8.1.3 ……

MySQL篇(共計9題)

  • 9.1.0 主鍵 超鍵 候選鍵 外鍵
  • 9.1.1 數據庫事務的四個特性及含義
  • 9.1.2 視圖的作用,視圖可以更改麼?
  • 9.1.3 ……

Redis篇(共計10題)

  • 10.1.0 使用Redis有哪些好處?

參考答案

(1) 速度快,因為數據存在內存中,類似於HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1)

(2) 支持豐富數據類型,支持string,list,set,sorted set,hash

(3) 支持事務,操作都是原子性,所謂的原子性就是對數據的更改要麼全部執行,要麼全部不執行

(4) 豐富的特性:可用於緩存,消息,按key設置過期時間,過期後將會自動刪除

  • 10.1.1 redis相比memcached有哪些優勢?
  • 10.1.2 redis常見性能問題和解決方案
  • 10.1.3 MySQL裡有2000w數據,redis中只存20w的數據,如何保證redis中的數據都是熱點數據
  • ……

MongDB篇(共計47題)

  • 11.1.0 什麼是MongoDB?
  • 11.1.1 MongoDB是由哪種語言寫的?
  • 11.1.2 MongoDB的優勢有哪些?
  • 11.1.3 ……

Zookeeper篇(共計19題)

  • 12.1.0 zookeeper是什麼?
  • 12.1.1 zookeeper提供了什麼?
  • 12.1.2 zookeeper文件系統
  • 12.1.3 ……

Nginx篇(共計20題)

  • 13.1.0 請解釋一下什麼是Nginx?
  • 13.1.1 請列舉Nginx的一些特性?
  • 13.1.2 請列舉Nginx和Apache 之間的不同點?
  • 13.1.3 ……

(以下內容持續補全中……)

  • 算法篇
  • 內存篇
  • cpu篇
  • 磁盤篇
  • 網絡通信篇
  • 安全篇
  • 併發篇
這400道面試題,決定了你去BAT還是TMD

java構架進階資料


這400道面試題,決定了你去BAT還是TMD

面試專題

最新整理的面試題資料,需要的靚仔(靚女)轉發此文章+私信“BATJ面試”即可免費下載!


分享到:


相關文章: