騰訊的python面試題?坐标:深圳面試公司:騰訊 Python 一面,今天小編就來聊一聊關于騰訊的python面試題?接下來我們就一起去研究一下吧!
坐标:深圳
面試公司:騰訊 Python 一面
沒有問項目也沒有問之前的工作經曆,估計看一下簡曆就了解個大概了,就是一頓面問題,語速也是很快,不過問題問得非常清楚,如果你解釋的不對,他會做補充。總體感受不錯,總結一下面試題吧。
面試内容
1,平時都用哪些語言?
答:平時用 C 多一點,Python 也了解,但不是很深入,基本上都是直接調的函數和相應的庫,并沒有研究它底部到底是怎麼實現的,意思就是沒看過
Python 源碼,你就問我 C 吧。(果然他開始問 C ,所以他這樣問肯定是想問你最擅長的語言)
2,你有用過 STL , boost 這些庫嗎?
答:用過 STL,最近在看侯X老師的 STL 源碼剖析。
3,STL 都有哪幾個組成部分?
答:容器,适配器,叠代器,算法,然後就知道還有一個,現在想想肯定是由于當時有點緊張,就沒答出來,還是看過源碼的人呢,這都答不出來,丢人,他還給提示說加括号那個,我竟然說是運算符重載,(我以為是()重載,這和 STL 有什麼關系,這都能說出來。。。),他最後說還有仿函數,心想這個和括号有什麼關系,後來想想确實是有關系,一般用到仿函數的時候都會在後面加個括号,表示這是一個匿名對象,這樣進行使用,看來應了那句話:了解不行,知道也不行,必須形成條件反射才行。
4,問我 STL 你都有用過哪些容器?
答:很随意地說用過 array,vector(這個用的比較多),set,map,hash_map,hash_set,然後他似乎聽得出來了,然後就問我 STL 裡面就直接叫 hash_map 嗎?哈哈,此刻确定他在聽我講話,然後立即改口說,不是,叫 unordered_map,unordered_set。
5,set 底層是怎麼實現的 ?
答:用紅黑樹來實現的,我以為他會問我具體的紅黑樹知識,比如插入,删除,調整,結果啥都沒問,就直接過了。吓了一身汗。。。
6,unordered_map 的底部是怎麼實現的?
答:用 hash_table 來實現的 。
7,查找的時間複雜度是多少?
答:定位一個槽 是 O(1),如果定位一個元素,用外部拉鍊法的話,平均查找長度是鍊表的長度的一半,時間複雜度為 O(n)。
8,估計是聽到外部拉鍊法,就直接問有沒有其他的處理沖突的方式?
答:二次尋址法,雙散列法
9,如果我要實現一個hash_map,鍵為 字符串(string),那該如何設計?
答:我說:直接把對應的鍵值對存到每個槽對應鍊表節點中就行了,他說:我不是這個意思,就是你定位槽的時候不是需要取模運算嗎,那 string 怎麼取模呢?我說:需要把這個字符串轉換為對應的Hash Code,然後說 STL 中是這樣實現的,就是直接用 i * 5 j 這個公式直接求該字符串的 hashCode 值【注:看源碼還是有用的】。
10,他說用 C 内存洩漏這個問題還挺麻煩的,如果你的程序發生了内存洩漏,你怎麼才能檢測到是在哪發生了内存洩漏了呢?
答:可以用内存洩漏的分析工具來分析,他問:比如哪些工具?答:其實我是忘記了,記得嵌入式 Linux 課有一個實驗讓用 這個工具,而且也看到過相應的博客,所以 Val ...g...,我說忘記怎麼讀了,他知道我了解這個工具,就直接告訴我了,叫 Valgrind。當然還有其它很多,答什麼都可以的。他問:還有什麼其它辦法嘛?确實想不起來了,他作罷。
11,然後好像沒什麼可問的了,就直接跳轉到操作系統了,然後問你會 linux 系統的使用嗎?
答:會一些基本命令,他問:比如都會哪些命令?答:ls ,cp,mv,cd 等等這些基本命令,他也就沒再問下去了。
12,現在說 系統是 64 位 還是 32 位是什麼意思?
答:是說 cpu 每次可以處理的數據位數,應該沒啥毛病啊,莫不是 地址線是 64 條 ,還是數據線是 64 條???應該是回答的不好,他也就直接就沒再問了。
13,問 32 位系統下一個進程可分配的最大内存空間是多少?
答:這道題直接回答不上來,我記得内存最大的是 4G,其中内核地址是最高的 1G 空間,其它的 3G 都是用戶态空間,這一個進程能分配多大還真是不知道,莫不是可以全用???然後覺得操作系統部分的内容掌握得不太好。。主要是整天用 windows ,要是用 Linux 應該知道吧。。
然後轉到計算機網絡部分
14,你知道 UDP 和 TCP 有哪些不同嘛?
答:最主要的不同就是 TCP 是可靠傳輸,UDP 是不可靠傳輸,TCP需要建立連接,UDP 不需要,TCP 有擁塞控制,UDP 沒有。
15,因為話多,因為多說了一句:TCP 用來保證可靠傳輸的方法 UDP 都沒有,因為 UDP 是不可靠傳輸,然後他就問,都有哪些手段保證 TCP 可靠傳輸?
答:滑動窗口進行流量控制,超時重傳,ack 确認等。然後他就沒再問了。
轉到數據庫部分
16,你有用過哪些數據庫?
答:Mysql 用的比較多一些。
17,如果我有一個表比較大,我現在執行了一個 select 語句,發現運行得特别慢,我該怎麼解決?
答:這主要看這張表具體有多大,如果很大,有幾億行的話,那麼就需要考慮分表的問題,如果不是很大,不至于分表,那麼可以考慮是不是需要建索引,他問:還有别的辦法嗎?答:也許是你的select 語句寫的不合适,他問:我沒聽懂,什麼是不合适?答:也可能是索引已經建好了,可是你的 select 語句沒用到索引,或者是沒有索引。
問:如何知道自己的 sql 語句有沒有索引?
答:在自己的 sql 語句前面加 explain 就可以看到 sql 語句的具體執行過程。
18,你平時都是怎麼調試程序的?
答:我主要是用 VS 寫代碼,所以用斷點調試用的比較多,也會用到 print 進行打印信息來調試。他問:如果用 print 的話,那信息走得太快了,一閃而過怎麼辦?我說可以加斷點或者加延遲函數可以看到,現在想一下,VS 裡面最後不是一般加 system("pause"),就可以停住了嘛,dev 什麼也不用加就自己停住了啊,怎麼會看不到 打印出來的信息呢???不知道他想問啥。。
19,我寫了一個程序,發現 cup 的負載量達到了 100%,我程序中可能出現了一個死循環,我該怎麼找到這個死循環出現的地方呢?
答:可以用二分查找的,定位出現死循環的地方,或者通過加斷點的方式來進行查找死循環。他問:那找找也很慢啊,還有其他的方式嘛?我實在想不到了,他就此作罷。
20,現在我有 10000 個數,我想找到最大的 100個,怎麼找呢?(實用算法課 PPT 上的原例)
答:可以用堆來做,問:怎麼做?答:先建立一個100個元素的小根堆,然後遍曆後面剩餘的元素,如果比堆頂的元素小,則直接跳過,如果比堆頂的元素大,則和當前堆頂元素進行交換,然後調整堆,最後剩餘的堆中的元素就是前100大的元素。
21,(坑人的來了)問你這個時間複雜度是多少?
答:建隊時間是 O(Nlog2N)[注:STL 中做了優化,可以達到在線性時間内完成建堆],然後對後面的元素進行遍曆,然後不斷調整堆,需要O(Nlog2N) 的時間複雜度。這不是原理嘛,但是他說那和快排的時間複雜度是一樣的話,為什麼不用快排呢?然後我就卡在這了。。。我答:可能是時間複雜度的常數項不一樣。他說:遍曆後面的N個元素是少不了的,O(N) 是少不了的,那個 O(log2N) 怎麼來的,我說每次調整堆都需要 O(log2N) 的時間複雜度啊,但是如果比堆頂元素小的話,直接跳過,就不用調整了。但是快排需要對所有元素進行排序。他說:時間複雜度就得考慮最壞情況下,最後實在不知道問題出在哪了???就此作罷,他說:你時間複雜度回答的不對。(回答不對直接告訴你,這個還挺人性化的)
22,然後就問你家是哪的?願意來深圳不?
答:你說該怎麼回答,肯定是願意啦。
23,然後問我有什麼問題?
答:随便問了,比如主要做什麼工作?接觸什麼知識,做的工作能不能直接感受到?等等。。
注:面試官說會把我的簡曆給他們的 leader ,估計二面在等我,希望不要挂了呀。。。
-END-
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!