平安科技Python面試題分析

Steven最近在考慮換工作,突然接到了平安的面試邀請,也沒怎麼特別的準備就跑過去面試了,結果聊了一個小時之後被無情刷掉,不過還是想把這次的一些考點放在這裏供大家以後參考。btw:面試我的竟然是個妹子,剛開始進來的時候我還以爲先是HR面,結果人家一開始問技術問題,肅然起敬。

先是問道:

1.Python裏面的數據類型有哪些?

分析:其實這個問題並不難,除了基礎的int/float/bool/字符串/None之外就是Python特有的字典/列表/元組/set 類型

2.然後面試官接着問:那麼你能告訴我list和set的區別嗎?

分析:這個問題問的比較細,因爲平時沒有用到set類型,所以當時回答不上來,事後我去網上查了一些,其實也很簡單,list是有序的數組,可以有重複的數據,可以通過下標來訪問,但是set是無序的,但是數據不允許重複,不可通過下標來訪問,另外一點set語句執行效率更高。我們可以做一個測試:

python -m timeit -n 1000 "[x for x in range(1000) if x in range(500,1500)]"

輸出結果如下:

可以清晰的看到:執行1000次循環足足花了18s的時間

再用set來測試一下:

python -m timeit -n 1000 "set(range(1000)).intersection(range(500,1500))"

set語句幾乎是在我敲下回車鍵之後瞬間執行完的。所以他們的效率不可同日而語。

 

當時因爲不清楚set類型的區別,所以我說的是List和dict的區別,list佔用空間小,但是插入和查詢數據更慢,然後面試官緊追不捨,爲什麼dict的效率更高一些呢,又把我問懵了,後來我查了一些,其實是因爲dict 是參考的hashmap的方式,時間複雜度O1,但是list的複雜度是On,自然dict的查詢和插入效率更高。

3.因爲我的簡歷上寫着用過Selenium和BeautifulSoup,面試官問道:那你知道這兩個的區別嗎?

說真的,這個是之前上數據分析課的時候老師講過,我真的忘了,具體的大家感興趣的話可以自行搜狗,我這裏就不誤導大家了。

part II 開始寫幾個程序吧

4.給出幾個數字0,1,1,2,3,5,8 ,寫一個函數來輸出第n個數字。

分析:這個很明顯的是求Fibbonacci數列的,直接寫:

def fib(n):
    if n ==0:
        return 0
    elif n==1:
        return 1
    else:
        return fib(n-2) + fib(n-1)

5.請寫一個裝飾器

分析:裝飾器是Python比較高級一點的特性,是通過閉包的方式來實現的,主要是防止重複修改代碼。

def login(fn):
    def inner():
        username = raw_input('請輸入用戶名:')
        pwd = raw_input('請輸入密碼:')
        if username == 'admin' and pwd == '123456':
            fn()
        else:
            print('登陸失敗,請重試')
    return inner

@login
def delete():
    print("刪除中,請稍後")

delete()

6.給出一個list,請根據list裏面字典的值進行排序。

分析:這個考察的是我們對於基礎的數據類型的使用,做法也有很多種,但是當時有限的時間內,我沒有足夠的時間思考,所以給出的答案應該是錯誤的。後面研究之後 發現了一個可以很好解決這個問題的解法。

 

a= [{'a':1},{'b':3},{'c':2}]
c = {}
for l in a:
    c.update(l)
c2 = sorted(c.items(),key=lambda x:x[1])

7.list列表去重的問題:

給定一個列表['a','a','b','b','c'],請給出去除重複值之後的列表

分析:前面也提到之前因爲是沒有接觸過set的,所以這裏面有個最簡單的set解決方式,我不知道,於是只能通過for循環的方式來解決問題,但是面試官顯然對我當時的解法不滿意。

解答:

lis1 = ['a','a','b','b','c']

s = set(lis1)

lis2 = list(s)

解法二:我們可以藉助字典的方式來解決:

d1 = dict.fromkeys(lis1)

lis2 = list(d1)

代碼的問題到這裏就結束了,感覺做的面試官不算太滿意

part III、聊項目

基於我之前的項目,面試官問我做的項目裏面設計了哪些表,js用的怎麼樣,Ajax在這個項目裏面用到沒有,其實Ajax之前開發web項目用過,但是後來不熟悉了,所以這個項目沒用到。

最後聊到的一個項目裏面她問到這個項目裏面用到哪些服務,我說了Mysql、Redis、RabbitMQ,最後一個問題是這些服務之間用的什麼協議呢?  我說是HTTP協議,她說不對,我有點懵,這個我真沒關注到,後來查了一下是說,RabbitMQ和其他系統通訊用的比較多的是STOMP/AMQP1.0等等。

後面就是讓我問她有沒有什麼問題,面試就這樣結束了,持續了將近一個小時。但是因爲敗在了一些細節上,所以總結出來的是什麼呢?越是大公司會越是注重基礎,所以大家在平常的工作和學習中一定要注意基礎知識的積累,及時查漏補缺。這樣才能在機會到來的時候一躍而起。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章