新鮮出爐!騰訊、百度、阿里等2019年最新面試題匯總(含部分答案解析)


​2019年最新的阿里、騰訊、百度、美團、頭條等大廠技術面試題目近日被匯總整理,專家出題人分析匯總以及答案也在逐步補全中。目前該項目在GitHub上已獲得超22580個Star,內容分為阿里篇、華為篇、百度篇、騰訊篇、美團篇、頭條篇、滴滴篇、京東篇、MySQL篇、Redis篇、MongDB篇、ZooKeeper篇、Nginx篇、算法篇、內存篇、CPU篇、磁盤篇、網絡通信篇、安全篇、並發篇。不多說了,來一起看看吧。(文末附有免費領取方式

 

 

阿里篇

 

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

出題人阿里巴巴出題專家:昀龍/阿里雲彈性人工智能負責人
參考答案下面是其中一種寫法,也可以有不同的寫法,比如遞歸等。供參考。

typedef struct node{    int           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<<"\t";        tmp=tmp->next;    }}

 

1.1.2 已知sqrt(2)約等於1.414,要求不用數學庫,求sqrt(2)精確到小數點后10位

 

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

 

參考答案

 

 * 考察點

 

1、基礎算法的靈活應用能力(二分法學過數據結構的同學都知道,但不一定往這個方向考慮;如果學過數值計算的同學,應該還要能想到牛頓迭代法並解釋清楚)

 

2、退出條件設計

 

* 解決辦法

1. 已知sqrt(2)約等於 1.414,那么就可以在(1.4,1.5)區間做二分

查找,如:a)high=>1.5 b) low=>1.4 c) mid => (high+low)/2=1.45 d) 1.45*1.45>2 ?high=>1.45 : low => 1.45 e) 循環到 c)

2. 退出條件

a) 前后兩次的差值的絕對值<=0.0000000001, 則可退出

 

const double EPSINON = 0.0000000001;double sqrt2(){ double low = 1.4, high = 1.5; double mid = (low + high) / 2; while (high - low > EPSINON){ if (mid*mid > 2){ high = mid; } else{ low = mid; } mid = (high + low) / 2; } return mid;}

1.1.3 給定一個二叉搜索樹(BST),找到樹中第 K 小的節點

 

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

 

參考答案

 

* 考察點

 

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

2、遞歸使用

* 示例
 5 / \ 3 6 / \ 2 4 / 1

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

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

/** * 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);    }}

 

1.1.4 LRU緩存機制

 

1.1.5 關於epoll和select的區別,以下哪些說法是正確的

 

1.1.6 從innodb的索引結構分析,為什么索引的 key 長度不能太長

 

1.1.7 MySQL的數據如何恢復到任意時間點?

……

 

華為篇

 

2.1.0 static有什么用途?(請至少說明兩種)

 

2.1.1 引用與指針有什么區別?

 

2.1.2 描述實時系統的基本特性

 

……

 

百度篇

 

3.1.0 在函數內定義一個字符數組,用gets函數輸入字符串的時候,如果輸入越界,為什么程序會崩潰?

3.1.1 C++中引用與指針的區別

3.1.2 C/C++程序的內存分區

……

 

  • 騰訊篇 
  • 美團篇
  • 頭條篇
  • 滴滴篇
  • 京東篇
  • MySQL
  • Redis
  • MongDB
  • Zookeeper
  • Nginx
  • 算法篇
  • 內存篇
  • cpu
  • 磁盤篇
  • 網絡通信篇
  • 安全篇
  • 並發篇

 

 

免費領取java進階資料和最新面試題目及解析

請添加博主微信

 

變強沒有捷徑,唯有不斷學習。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM