千萬不要錯過這幾道Python面試題,Python面試題No16

      網友投稿 686 2025-04-02

      第1題: python下多線程的限制以及多進程中傳遞參數的方式?

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

      這個鎖的意思是任一時間只能有一個線程運用解釋器,跟單cpu跑多個程序一個意思,我們都是輪著用的,這叫“并發”,不是“并行”。

      為什么會有GIL?

      多核CPU的出現,充分利用多核,采用多線程編程慢慢普及,難點就是線程之間數據的一致性和狀態同步

      說到GIL解釋器鎖,我們容易想到在多線程中共享全局變量的時候會有線程對全局變量進行的資源競爭,會對全局變量的修改產生不是我們想要的結果,而那個時候我們用到的是python中線程模塊里面的互斥鎖,哪樣的話每次對全局變量進行操作的時候,只有一個線程能夠拿到這個全局變量;看下面的代碼:

      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()

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      接下來加入互斥鎖

      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()

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

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

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

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

      用于計算密集型,比如計算某一個文件夾的大小

      多進程間同享數據

      多進程間同享數據,能夠運用multiprocession.Value和multiprocessing.Array

      第2題:解釋一下python的and-or語法

      bool and a or b

      相當于bool? a: b

      >>> a = "first" >>> b = "second" >>> 1 and a or b # 輸出內容為 'first' >>> 0 and a or b # 輸出內容為 'second'

      1

      2

      3

      4

      上述內容你應該可以理解,但是還存在一個問題,請看下面的代碼

      >>> a = "" >>> b = "second" >>> 1 and a or b # 輸出內容為 'second'

      1

      2

      3

      4

      因為 a 是一個空串,空串在一個布爾環境中被Python看成假值,這個表達式將“失敗”,且返回 b 的值。

      如果你不將它想象成象 bool ? a : b 一樣的語法,而把它看成純粹的布爾邏輯,這樣的話就會得到正確的理解。

      1 是真,a 是假,所以 1 and a 是假。假 or b 是b。

      應該將 and-or 技巧封裝成一個函數:

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

      1

      2

      因為 [a] 是一個非空列表,它永遠不會為假。甚至 a 是 0 或 ” 或其它假值,列表[a]為真,因為它有一個元素。

      第3題: 請至少列舉5個 PEP8 規范?

      PEP8 規范 官方文檔:https://www.python.org/dev/peps/pep-0008/

      PEP8中文翻譯:http://www.cnblogs.com/ajianbeyourself/p/4377933.html

      這個在于平時的積累的了

      縮進。4個空格的縮進(編輯器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。

      每行最大長度79,換行可以使用反斜杠,最好使用圓括號。換行點要在操作符的后邊敲回車。

      類和top-level函數定義之間空兩行;類中的方法定義之間空一行;函數內邏輯無關段落之間空一行;其他地方盡量不要再空行。

      塊注釋,在一段代碼前增加的注釋。在‘#’后加一空格。段落之間以只有‘#’的行間隔

      各種右括號前不要加空格。

      逗號、冒號、分號前不要加空格。

      函數的左括號前不要加空格。

      序列的左括號前不要加空格。

      操作符左右各加一個空格,不要為了對齊增加空格。

      函數默認參數使用的賦值符左右省略空格。

      不要將多句語句寫在同一行,盡管使用‘;’允許。

      i- f/for/while語句中,即使執行語句只有一句,也必須另起一行。

      類的方法第一個參數必須是self,而靜態方法第一個參數必須是cls。

      第4題: HTTPS和HTTP的區別:

      https協議要申請證書到ca,需要一定經濟成本

      千萬不要錯過這幾道Python面試題,Python面試題No16

      http是明文傳輸,https是加密的安全傳輸

      連接的端口不一樣,http是80,https是443

      http連接很簡單,沒有狀態;https是ssl加密的傳輸,身份認證的網絡協議,相對http傳輸比較安全。

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

      第5題:簡述Django的orm

      ORM,全拼Object-Relation Mapping,意為對象-關系映射

      實現了數據模型與數據庫的解耦,通過簡單的配置就可以輕松更換數據庫,而不需要修改代碼只需要面向對象編程

      ORM操作本質上會根據對接的數據庫引擎,翻譯成對應的sql語句,

      所有使用Django開發的項目無需關心程序底層使用的是MySql、Oracle、SQLite…,如果數據庫遷移,只需要更換Django的數據庫引擎即可。

      第6題:關注題,最近在公號更新一個神奇的系列入門文章

      她專科學歷

      27歲從零開始學習c,c++,python編程語言

      29歲編寫百例教程

      30歲掌握10種編程語言,

      用自學的經歷告訴你,學編程就找夢想橡皮擦

      Python 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:怎么在幾萬人里找到人名(只有人名怎么找人)
      下一篇:wps怎么建立工作表格(如何建立wps表格)
      相關文章
      国产亚洲精品美女久久久| 国产青草亚洲香蕉精品久久| 亚洲熟伦熟女新五十路熟妇| 亚洲精品中文字幕无码A片老| 久久亚洲国产精品成人AV秋霞| 亚洲av无码乱码国产精品| 国产精品亚洲片在线| 中文字幕亚洲无线码| 亚洲高清无码在线观看| 亚洲va中文字幕无码| 亚洲午夜福利精品久久| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 亚洲av一综合av一区| 午夜影视日本亚洲欧洲精品一区| 亚洲AV永久无码精品一百度影院| 久久精品国产精品亚洲色婷婷| 亚洲2022国产成人精品无码区 | 亚洲狠狠婷婷综合久久蜜芽| 亚洲精品无码国产片| 亚洲av永久中文无码精品综合 | 国产亚洲Av综合人人澡精品| 亚洲国产高清在线一区二区三区| 国产成人精品亚洲精品| 亚洲欭美日韩颜射在线二| 亚洲国产成人片在线观看 | 亚洲人成电影网站免费| 亚洲AV成人精品日韩一区| 亚洲AV无码成H人在线观看| 久久久久亚洲AV成人网人人网站 | 亚洲熟妇av午夜无码不卡| 亚洲精品久久无码av片俺去也 | 久久久久久亚洲Av无码精品专口| 亚洲综合男人的天堂色婷婷| 亚洲午夜电影一区二区三区| 亚洲一级特黄特黄的大片 | 亚洲视频一区调教| 亚洲大尺码专区影院| 亚洲午夜福利在线视频| 国产亚洲精品欧洲在线观看| 亚洲五月综合缴情在线观看| 亚洲人成在线观看|