阿里技術面試題彙總,“跳槽”就靠它了(文中附答案)


阿里技術面試題彙總,“跳槽”就靠它了(文中附答案)


以下為整理的2019阿里技術面試題及部分答案,詳細答案可在文末獲取!

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

部分參考答案

<code>typedefstructnode

{

intdata;

structnode*next;

node(intd):data(d),next(NULL){}

}node;

/<code>
阿里技術面試題彙總,“跳槽”就靠它了(文中附答案)

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

考察點

1. 基礎算法的靈活應用能力(二分法學過數據結構的同學都知道,

但不一定往這個方向考慮;如果學過數值計算的同學,應該還要

能想到牛頓迭代法並解釋清楚)

2. 退出條件設計


部分參考答案

已知 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)

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

考察點

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

2. 遞歸使用

部分參考答案

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

· LRU 緩存機制。

部分參考答案

《 Python 版本 》

<code>class LRUCache(object):

def __init__(self, capacity):

"""

:type capacity: int

"""

self.cache = {}

self.keys = []

self.capacity = capacity/<code> 
阿里技術面試題彙總,“跳槽”就靠它了(文中附答案)

· 關於 epoll 和 select 的區別,哪些說法是正確的?(多選)

參考答案

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

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

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

· 從 innodb 的索引結構分析,為什麼索引的 key 長度不能太長?

參考答案

key 太長會導致一個頁當中能夠存放的 key 的數目變少,間接導致索引樹的頁數目變多,索引層次增加,從而影響整體查詢變更的效率。

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

參考答案

恢復到任意時間點以定時的做全量備份,以及備份增量的 binlog 日誌為前提。恢復到任意時間點首先將全量備份恢復之後,再此基礎上回放增加的 binlog 直至指定的時間點。

· NFS 和 SMB 是最常見的兩種 NAS(Network Attached Storage)協議,當把一個文件系統同時通過 NFS 和 SMB 協議共享給多個主機訪問時,以下哪些說法是錯誤的:(多選)

參考答案

A. 不可能有這樣的操作,即把一個文件系統同時通過 NFS 和 SMB協議共享給多個主機訪問。

B. 主機 a 的用戶通過NFS 協議創建的文件或者目錄,另一個主機 b的用戶不能通過 SMB 協議將其刪除;

C. 在同一個目錄下,主機 a 通過 NFS 協議看到文件 file.txt,主機b 通過 SMB 協議也看到文件 file.txt,那麼它們是同一個文件。

· 輸入 ping IP 後敲回車,發包前會發生什麼?

參考答案

首先根據目的IP和路由表決定走哪個網卡,再根據網卡的子網掩碼地址判斷目的IP是否在子網內。如果不在則會通過arp緩存查詢IP的網卡地址,不存在的話會通過廣播詢問目的IP的mac地址,得到後就開始發包了,同時mac地址也會被arp緩存起來。

· 請解釋下為什麼鹿晗發佈戀情的時候,微博系統會崩潰,如何解決?

參考答案

A. 獲取微博通過 pull 方式還是 push 方式

B. 發佈微博的頻率要遠小於閱讀微博

C. 流量明星的發微博,和普通博主要區分對待,比如在 sharding

的時候,也要考慮這個因素

· 現有一批郵件需要發送給訂閱顧客,且有一個集群(集群的節點數不定,會動態擴容縮容)來負責具體的郵件發送任務,如何讓系統儘快地完成發送?請詳述技術方案!

參考答案

A. 藉助消息中間件,通過發佈者訂閱者模式來進行任務分配

B. master-slave 部署,由 master 來分配任務

C. 不借助任何中間件,且所有節點均等。通過數據庫的 update

returning,從而實現節點之間任務的互斥

· 有一批氣象觀測站,現需要獲取這些站點的觀測數據,並存儲到 Hive 中。但是氣象局只提供了 api 查詢,每次只能查詢單個觀測點。那麼如果能夠方便快速地獲取到所有的觀測點的數據?

參考答案

A. 通過 shell 或 python 等調用 api,結果先暫存本地,最後將本地文件上傳到 Hive 中。

B. 通過 datax 的 httpReader 和 hdfsWriter 插件,從而獲取所需的數據。

C. 比較理想的回答,是在計算引擎的 UDF 中調用查詢 api,執行UDF 的查詢結果存儲到對應的表中。一方面,不需要同步任務的導出導入;另一方面,計算引擎的分佈式框架天生提供了分佈式、容錯、併發等特性。

· 如何實現兩金額數據相加(最多小數點兩位)?

部分參考答案

其實問題並不難,就是考察候選人對 JavaScript 數據運算上的認知以及考慮問題的縝密程度,有很多坑,可以用在筆試題,如果用在面試,回答過程中還可以隨機加入有很多計算機基礎的延伸。

由於文章字數有限,將全部的面試題及答案以網盤的形式分享給大家哦

資源獲取方式

關注公號【程序員生活志】回覆關鍵詞“阿里” 立即免費獲取


分享到:


相關文章: