日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

千萬(wàn)不要錯(cuò)過(guò)這幾道Python面試題,Python面試題No16

系統(tǒng) 1765 0

第1題: python下 多線程 的限制以及 多進(jìn)程 中傳遞參數(shù)的方式?

python多線程有個(gè)全局解釋器鎖(global interpreter lock),簡(jiǎn)稱GIL,這個(gè)GIL并不是python的特性,他是只在Cpython解釋器里引入的一個(gè)概念,而在其他的語(yǔ)言編寫的解釋器里就沒(méi)有這個(gè)GIL例如:Jython。

這個(gè)鎖的意思是任一時(shí)間只能有一個(gè)線程運(yùn)用解釋器,跟單cpu跑多個(gè)程序一個(gè)意思,我們都是輪著用的,這叫“并發(fā)”,不是“并行”。

為什么會(huì)有GIL?

多核CPU的出現(xiàn),充分利用多核,采用多線程編程慢慢普及,難點(diǎn)就是線程之間數(shù)據(jù)的一致性和狀態(tài)同步

說(shuō)到GIL解釋器鎖,我們?nèi)菀紫氲皆诙嗑€程中共享全局變量的時(shí)候會(huì)有線程對(duì)全局變量進(jìn)行的資源競(jìng)爭(zhēng),會(huì)對(duì)全局變量的修改產(chǎn)生不是我們想要的結(jié)果,而那個(gè)時(shí)候我們用到的是python中線程模塊里面的互斥鎖,哪樣的話每次對(duì)全局變量進(jìn)行操作的時(shí)候,只有一個(gè)線程能夠拿到這個(gè)全局變量;看下面的代碼:

          
            import threading
global_num = 0


def test1():
    global global_num
    for i in range(1000000):
        global_num += 1

    print("test1", global_num)


def test2():
    global global_num
    for i in range(1000000):
        global_num += 1

    print("test2", global_num)

t1 = threading.Thread(target=test1)
t2 = threading.Thread(target=test2)
t1.start()
t2.start()

          
        

接下來(lái)加入互斥鎖

          
            import threading
import time
global_num = 0

lock = threading.Lock()

def test1():
    global global_num
    lock.acquire()
    for i in range(1000000):
        global_num += 1
    lock.release()
    print("test1", global_num)


def test2():
    global global_num
    lock.acquire()
    for i in range(1000000):
        global_num += 1
    lock.release()
    print("test2", global_num)

t1 = threading.Thread(target=test1)
t2 = threading.Thread(target=test2)
start_time = time.time()

t1.start()
t2.start()

          
        

哪些情況適合用多線程呢:

只要在進(jìn)行耗時(shí)的IO操作的時(shí)候,能釋放GIL,所以只要在IO密集型的代碼里,用多線程就很合適

哪些情況適合用多進(jìn)程呢:

用于計(jì)算密集型,比如計(jì)算某一個(gè)文件夾的大小

多進(jìn)程間同享數(shù)據(jù)

多進(jìn)程間同享數(shù)據(jù),能夠運(yùn)用multiprocession.Value和multiprocessing.Array

第2題:解釋一下python的and-or語(yǔ)法

bool and a or b

相當(dāng)于bool? a: b

          
            >>> a = "first"
>>> b = "second"
>>> 1 and a or b  # 輸出內(nèi)容為 'first'
>>> 0 and a or b  # 輸出內(nèi)容為 'second'
          
        

上述內(nèi)容你應(yīng)該可以理解,但是還存在一個(gè)問(wèn)題,請(qǐng)看下面的代碼

          
            >>> a = ""
>>> b = "second"
>>> 1 and a or b # 輸出內(nèi)容為 'second'

          
        

因?yàn)?a 是一個(gè)空串,空串在一個(gè)布爾環(huán)境中被Python看成假值,這個(gè)表達(dá)式將“失敗”,且返回 b 的值。
如果你不將它想象成象 bool ? a : b 一樣的語(yǔ)法,而把它看成純粹的布爾邏輯,這樣的話就會(huì)得到正確的理解。
1 是真,a 是假,所以 1 and a 是假。假 or b 是b。

應(yīng)該將 and-or 技巧封裝成一個(gè)函數(shù):

          
            def choose(bool, a, b):
    return (bool and [a] or [b])[0]
          
        

因?yàn)?[a] 是一個(gè)非空列表,它永遠(yuǎn)不會(huì)為假。甚至 a 是 0 或 ” 或其它假值,列表[a]為真,因?yàn)樗幸粋€(gè)元素。

第3題: 請(qǐng)至少列舉5個(gè) PEP8 規(guī)范?

PEP8 規(guī)范 官方文檔:https://www.python.org/dev/peps/pep-0008/
PEP8中文翻譯:http://www.cnblogs.com/ajianbeyourself/p/4377933.html

這個(gè)在于平時(shí)的積累的了

  • 縮進(jìn)。4個(gè)空格的縮進(jìn)(編輯器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
  • 每行最大長(zhǎng)度79,換行可以使用反斜杠,最好使用圓括號(hào)。換行點(diǎn)要在操作符的后邊敲回車。
  • 類和top-level函數(shù)定義之間空兩行;類中的方法定義之間空一行;函數(shù)內(nèi)邏輯無(wú)關(guān)段落之間空一行;其他地方盡量不要再空行。
  • 塊注釋,在一段代碼前增加的注釋。在‘#’后加一空格。段落之間以只有‘#’的行間隔
  • 各種右括號(hào)前不要加空格。
  • 逗號(hào)、冒號(hào)、分號(hào)前不要加空格。
  • 函數(shù)的左括號(hào)前不要加空格。
  • 序列的左括號(hào)前不要加空格。
  • 操作符左右各加一個(gè)空格,不要為了對(duì)齊增加空格。
  • 函數(shù)默認(rèn)參數(shù)使用的賦值符左右省略空格。
  • 不要將多句語(yǔ)句寫在同一行,盡管使用‘;’允許。
    i- f/for/while語(yǔ)句中,即使執(zhí)行語(yǔ)句只有一句,也必須另起一行。
  • 類的方法第一個(gè)參數(shù)必須是self,而靜態(tài)方法第一個(gè)參數(shù)必須是cls。

第4題: HTTPS和HTTP的區(qū)別:

  • https協(xié)議要申請(qǐng)證書到ca,需要一定經(jīng)濟(jì)成本
  • http是明文傳輸,https是加密的安全傳輸
  • 連接的端口不一樣,http是80,https是443
  • http連接很簡(jiǎn)單,沒(méi)有狀態(tài);https是ssl加密的傳輸,身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,相對(duì)http傳輸比較安全。

還有很多,自己去整理一下吧

第5題:簡(jiǎn)述Django的orm

ORM,全拼Object-Relation Mapping,意為對(duì)象-關(guān)系映射

實(shí)現(xiàn)了數(shù)據(jù)模型與數(shù)據(jù)庫(kù)的解耦,通過(guò)簡(jiǎn)單的配置就可以輕松更換數(shù)據(jù)庫(kù),而不需要修改代碼只需要面向?qū)ο缶幊?
ORM操作本質(zhì)上會(huì)根據(jù)對(duì)接的數(shù)據(jù)庫(kù)引擎,翻譯成對(duì)應(yīng)的sql語(yǔ)句,
所有使用Django開發(fā)的項(xiàng)目無(wú)需關(guān)心程序底層使用的是MySql、Oracle、SQLite....,如果數(shù)據(jù)庫(kù)遷移,只需要更換Django的數(shù)據(jù)庫(kù)引擎即可。

第6題:關(guān)注題,最近在公號(hào)更新一個(gè)神奇的系列入門文章

她專科學(xué)歷
27歲從零開始學(xué)習(xí)c,c++,python編程語(yǔ)言
29歲編寫百例教程
30歲掌握10種編程語(yǔ)言,
用自學(xué)的經(jīng)歷告訴你,學(xué)編程就找夢(mèng)想橡皮擦

歡迎關(guān)注她的公眾號(hào),搜索— 非本科程序員

序號(hào) 文章
Python面試題No1 Python基礎(chǔ)面試,看這篇文章畫重點(diǎn)吧
Python面試題No2 Python面試快問(wèn)快答,理論要的就是速度與精準(zhǔn)
Python面試題No3 學(xué)習(xí)Python一年,基礎(chǔ)忘記了,看看面試題回憶回議
Python面試題No4 去面試Python工程師,這幾個(gè)基礎(chǔ)問(wèn)題一定要能回答
Python面試題No5 2019年,Python工程師必考的6個(gè)面試題
Python面試題No6 昨天去面試,這5個(gè)Python面試題都被考到了
Python面試題No7 周三面試Python開發(fā),這幾道Python面試題差點(diǎn)答錯(cuò),Python面試題No7
Python面試題No8 面試Python工程師,這幾道編碼題有必要背背
Python面試題No9 又面試了Python爬蟲工程師,碰到這么幾道面試題
Python面試題No10 朋友去面試Python工程師,又帶回來(lái)幾道基礎(chǔ)題
Python面試題No11 剛畢業(yè)去面試Python工程師,這幾道題太難了
Python面試題No12 五一4天就背這些Python面試題了
Python面試題No13 大意了,這幾道Python面試題沒(méi)有答對(duì)
Python面試題No14 明天找python工作,看看這幾道Python面試題吧
Python面試題No15 這幾道Python面試題,穩(wěn)準(zhǔn)狠

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 万盛区| 壤塘县| 日土县| 丹江口市| 论坛| 封开县| 荥阳市| 东安县| 西乌珠穆沁旗| 广水市| 鄂托克旗| 涞水县| 雅安市| 灵山县| 凌海市| 宁蒗| 东兰县| 四川省| 晋中市| 江西省| 嘉黎县| 陇西县| 郁南县| 中江县| 泽普县| 广灵县| 德安县| 万盛区| 盐城市| 南阳市| 慈利县| 福建省| 莱西市| 松阳县| 五原县| 博野县| 阳谷县| 南昌市| 湟源县| 绍兴市| 格尔木市|