pyntho經典面試題

来源:https://www.cnblogs.com/xiaozhangpython/archive/2019/01/18/10289334.html
-Advertisement-
Play Games

Python基礎篇 1:為什麼學習Python 2:通過什麼途徑學習Python 3:談談對Python和其他語言的區別 Python的優勢: 4:簡述解釋型和編譯型編程語言 5:Python的解釋器種類以及相關特點? 6:位和位元組的關係 7:b、B、KB、MB、GB的關係 8:PE8規範 9:通過 ...


  • Python基礎篇
    • 1:為什麼學習Python
    • 2:通過什麼途徑學習Python
    • 3:談談對Python和其他語言的區別
    • Python的優勢:
    • 4:簡述解釋型和編譯型編程語言
    • 5:Python的解釋器種類以及相關特點?
    • 6:位和位元組的關係
    • 7:b、B、KB、MB、GB的關係
    • 8:PE8規範
    • 9:通過代碼實現如下轉換(進位之間轉換)
    • 10:請編寫一個函數實現將IP地址轉換成一個整數
    • 11、python遞歸的最大層數?998
    • 12:求結果(and or or)
    • 運算符
    • 13 :ascii、unicode、utf-8、gbk 區別
    • 14:位元組碼和機器碼的區別
    • 15:三元運算寫法和應用場景?
    • 16:Python3和Python2的區別?
    • 17:用一行代碼實現數值交換
    • 18:Python3和Python2中int和long區別
    • 19:xrange和range的區別
    • 20:文件操作時:xreadlines和readlines的區別?
    • 21: 列列舉布爾值為False的常見值?
    • 22. 字元串、列表、元組、字典每個常用的5個方法?
    • 23、 lambda表達式格式以及應用場景?
    • 24. pass的作用
    • 25. *arg和**kwarg作用
    • 26. is和==的區別
    • 27:談談Python的深淺拷貝?以及實現方法和應用場景。
    • 28. Python垃圾回收機制?
    • 29. Python的可變類型和不可變類型?
    • 30、求結果
    • 31、求結果
    • 32、列舉常見的內置函數
    • abs()
    • map
    • filter
    • map與filter總結
    • isinstance\type
    • zip 拉鏈函數
    • 33. filter、map、reduce的作用?
    • 內置函數:map、reduce、filter的用法和區別
    • 34、 一行代碼實現9*9乘法表
    • 35. 如何安裝第三方模塊?以及用過哪些第三方模塊?
    • 36、 常用模塊都有那些?
    • 37. re的match和search區別?
    • 38. 什麽是正則的貪婪匹配?
    • 39. 求結果:
    • 40. 求結果:
    •  41、def func(a,b=[]) 這種寫法有什什麽坑?
    • 42、如何實現 “1,2,3” 變成 [‘1’,’2’,’3’]
    • 43. 如何實現[‘1’,’2’,’3’]變成[1,2,3]
    • 44. a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的區別?
    • 45. 如何用一行代碼生成[1,4,9,16,25,36,49,64,81,100]
    • 46. 一行代碼實現刪除列表中重覆的值
    • 47. 如何在函數中設置一個全局變數
    • 48. logging模塊的作用?以及應用場景?
    • 49. 請用代碼簡答實現stack
    • 50. 常用字元串格式化哪幾種?
    • 51. 簡述 生成器、迭代器、可迭代對象 以及應用場景?
    • 迭代器
    • 生成器
    • 可迭代對象
    • 裝飾器
    •  52. 用Python實現一個二分查找的函數。
    • 53. 談談你對閉包的理解?
    • 54. os和sys模塊的作用?
    • 55. 如何生成一個隨機數?
    • 56. 如何使用python刪除一個文件?
    • 57. 談談你對面向對象的理解
    • 58. Python面向對象中的繼承有什麼特點
    • 59. 面向對象深度優先和廣度優先是什麼?
    • 60. 面向對象中super的作用?
    • 61. 是否使用過functools中的函數?其作用是什麼?
    • 62. 列舉面向對象中帶雙下劃線的特殊方法,如:__new__、__init__
    • 63. 如何判斷是函數還是方法?
    • 64. 靜態方法和類方法區別?
    • 65. 列舉面向對象中的特殊成員以及應用場景
    • 66. 1、2、3、4、5 能組成多少個互不相同且無重覆的三位數
    • 67. 什麼是反射?以及應⽤用場景?
    • 68. metaclass作用?以及應用場景?
    • 69. 用儘量多的方法實現單例模式。
    • 70. 裝飾器器的寫法以及應用場景。
    • 71. 異常處理寫法以及如何主動跑出異常(應用場景)
    • 72、什麼是面向對象的mro
    • 73. isinstance作用以及應用場景?
    • 74. 寫代碼並實現
    • 75. json序列化時,可以處理的數據類型有哪些?如何定製支持datetime類型?
    • 76. json序列化時,預設遇到中文會轉換成unicode,如果想要保留中文怎麼辦?
    • 77. 什麼是斷言?應用場景?
    • 78. 有用過with statement嗎?它的好處是什麼?
    • 79. 使用代碼實現查看列舉目錄下的所有文件。
    • 80. 簡述 yield和yield from關鍵字
  • 第二部分 網路編程和併發
    • 81. 簡述 OSI 七層協議。
    • 82. 什麼是C/S和B/S架構?
    • 83. 簡述 三次握手、四次揮手的流程。
    • 84. TCP和UDP的區別?
    • 85. 為何基於tcp協議的通信比基於udp協議的通信更可靠?
    • 86. 什麼是socket?簡述基於tcp協議的套接字通信流程。
    • 87. 什麼是粘包? socket 中造成粘包的原因是什什麽? 哪些情況會發生粘包現象?
    • 88. IO多路復的作用?
    • 89.select、poll、epoll 模型的區別?(屬於多路復用IO的模型)
    • 90. 什麼是防火牆以及作用?
    • 91. 簡述 進程、線程、協程的區別 以及應用場景?
    • 92. GIL鎖是什麼?
    • 93. Python中如何使用線程池和進程池?
    • 94. threading.local的作用?
    • 95. 進程之間如何進行通信?
    • 96. 什麼是併發和並行?
    • 97. 進程鎖和線程鎖的作用?
    • 98. 解釋什麼是非同步非阻塞?
    • 99. 路由器和交換機的區別
    • 100.什麼是功能變數名稱解析?
    • 101.如何修改本地hosts件?
    • 102.生產者消費者模型應用場景及優勢?
    • 103.什麼是cdn?
    • 104.LVS是什麼及作用?
    • 105.Nginx是什麼及作用?
    • 106.keepalived是什麼及作用?
    • 107.haproxy是什麼以及作用?
  • 資料庫和緩存(46題)
    • 113.列舉常見的關係型資料庫和非關係型都有那些?
    • 114.MySQL常見資料庫引擎及比較?
    • 115.簡述資料庫三大範式?
    • 116、什麼是事務?MySQL如何支持事務?
    • 117.簡述資料庫設計中一對多和多對多的應用場景?
    • 118.如何基於資料庫實現商城商品計數器?
    • 119.常見SQL(必備)
    • 120.簡述觸發器、函數、視圖、存儲過程?
    • 121.MySQL索引種類
    • 122.索引在什麼情況下遵循最左首碼的規則?
    • 123.主鍵和外鍵的區別?
    • 124.MySQL常見的函數?
    • 125.列舉 創建索引但是無法命中索引的8種情況。
    • 126.如何開啟慢日誌查詢?
    • 127.資料庫導入導出命令(結構+數據)?
    • 128.資料庫優化方案?
    • 129.char和varchar的區別?
    • 130.簡述MySQL的執行計劃?
    • 131.在對name做了唯一索引前提下,簡述以下區別:
    
    • 132.1000w條數據,使用limit offset 分頁時,為什麼越往後翻越慢?如何解決?
    • 133.什麼是索引合併?
    • 134.什麼是覆蓋索引?
    • 135.簡述資料庫讀寫分離?
    • 136.簡述資料庫分庫分表?(水平、垂直)
    • 137.redis和memcached比較?
    • 138.redis中資料庫預設是多少個db 及作用?
    • 139.python操作redis的模塊?
    • 140.如果redis中的某個列表中的數據量非常大,如果實現迴圈顯示每一個值?
    • 141.redis如何實現主從複製?以及數據同步機制?
    • 142.redis中的sentinel的作用?
    • 143.如何實現redis集群?
    • 144.redis中預設有多少個哈希槽?
    • 145.簡述redis的有哪幾種持久化策略及比較?
    • 146.列舉redis支持的過期策略。
    • 147.MySQL 里有 2000w 數據,redis 中只存 20w 的數據,如何保證 redis 中都是熱點數據? 
    • 148.寫代碼,基於redis的列表實現 先進先出、後進先出隊列、優先順序隊列。
    • 149.如何基於redis實現消息隊列?
    • 150.如何基於redis實現發佈和訂閱?以及發佈訂閱和消息隊列的區別?
    • 151.什麼是codis及作用?
    • 152.什麼是twemproxy及作用?
    • 153.寫代碼實現redis事務操作。
    • 154.redis中的watch的命令的作用?
    • 155.基於redis如何實現商城商品數量計數器?
    • 156.簡述redis分散式鎖和redlock的實現機制。
    • 157.什麼是一致性哈希?Python中是否有相應模塊?
    • 158.如何高效的找到redis中所有以aaa開頭的key?
  • 第四部分 前端、框架和其他(155題)
    • 1.談談你對http協議的認識。
    • 2.談談你對websocket協議的認識。
    •  3.什麼是magic string ?
    • 4.如何創建響應式佈局?
    • 5.你曾經使用過哪些前端框架?
    • 6.什麼是ajax請求?並使用jQuery和XMLHttpRequest對象實現一個ajax請求。
    • 7.如何在前端實現輪訓?
    • 8.如何在前端實現長輪訓?
    • 9.vuex的作用?
    • 10.vue中的路由的攔截器的作用?
    • 11.axios的作用?
    • 12.列舉vue的常見指令。
    • 13.簡述jsonp及實現原理?
    • 14.什麼是cors ?
    • 15.列舉Http請求中常見的請求方式?
    • 16.列舉Http請求中的狀態碼?
    • 17.列舉Http請求中常見的請求頭?
    • 18.看圖寫結果(js):
    • 看圖寫結果(js):
    • 看圖寫結果:(js)
    • 看圖寫結果:(js)
    • 看圖寫結果:(js)
    • 看圖寫結果:(js)
    • 19.django、flask、tornado框架的比較?
    • 20.什麼是wsgi?
    • 21.django請求的生命周期?
    • 22.列舉django的內置組件?
    • 23.列舉django中間件的5個方法?以及django中間件的應用場景?
    • 24.簡述什麼是FBV和CBV?
    • 25.FBV與CBV的區別
    • 26.django的request對象是在什麼時候創建的?
    • 27.如何給CBV的程式添加裝飾器?
    • 28.列舉django orm 中所有的方法(QuerySet對象的所有方法)
    • 29.only和defer的區別?
    • 30.select_related和prefetch_related的區別?
    • 31.filter和exclude的區別?
    • 32.列舉django orm中三種能寫sql語句的方法。
    • 33.django orm 中如何設置讀寫分離?
    • 34.F和Q的作用?
    • 35.values和values_list的區別?
    • 36.如何使用django orm批量創建數據?
    • 37.django的Form和ModeForm的作用?
    • 38.django的Form組件中,如果欄位中包含choices參數,請使用兩種方式實現數據源實時更新。
    • 39.django的Model中的ForeignKey欄位中的on_delete參數有什麼作用?
    • 40.django中csrf的實現機制?
    • 41.django如何實現websocket?
    • 42.基於django使用ajax發送post請求時,都可以使用哪種方法攜帶csrf token?
    • 43.django中如何實現orm表中添加數據時創建一條日誌記錄。
    • 44.django緩存如何設置?
    • 45.django的緩存能使用redis嗎?如果可以的話,如何配置?
    • 46.django路由系統中name的作用?
    • 47.django的模板中filter和simple_tag的區別?
    • 48.django-debug-toolbar的作用?
    • 49.django中如何實現單元測試?
    • 50.解釋orm中 db first 和 code first的含義?
    • 51.django中如何根據資料庫表生成model中的類?
    • 52.使用orm和原生sql的優缺點?
    • 53.簡述MVC和MTV
    • 54.django的contenttype組件的作用?
    • 55.談談你對restfull 規範的認識?
    • 56.介面的冪等性是什麼意思?
    • 57.什麼是RPC?
    • 58.Http和Https的區別?
    • 59.為什麼要使用django rest framework框架?
    • 60.django rest framework框架中都有那些組件?
    • 61.django rest framework框架中的視圖都可以繼承哪些類
    • 62.簡述 django rest framework框架的認證流程。
    • 63.django rest framework如何實現的用戶訪問頻率控制? 
    • 64.Flask框架的優勢?
    • 65.Flask框架依賴組件
    • 66.Flask藍圖的作用
    • 67.列舉使用的Flask第三方組件?
    • 68.簡述Flask上下文管理流程?
    • 69.Flask中的g的作用?
    • Flask中上下文管理主要涉及到了那些相關的類?並描述類主要作用?
    • 為什麼要Flask把Local對象中的的值stack 維護成一個列表?
    • Flask中多app應用是怎麼完成?
    • 在Flask中實現WebSocket需要什麼組件?
    • wtforms組件的作用?
    • Flask框架預設session處理機制?
    • 解釋Flask框架中的Local對象和threading.local對象的區別?
    • Flask中 blinker 是什麼?
    • SQLAlchemy中的 session和scoped_session 的區別?
    • SQLAlchemy如何執行原生SQL?
    • ORM的實現原理?
    • DBUtils模塊的作用?
    • SQLAchemy中如何為表設置引擎和字元編碼?
    • SQLAchemy中如何設置聯合唯一索引?
    • 簡述Tornado框架的特點。
    • 簡述Tornado框架中Future對象的作用?
    • Tornado框架中如何編寫WebSocket程式?
    • Tornado中靜態文件是如何處理的?
如:
    • Tornado操作MySQL使用的模塊?
    • Tornado操作redis使用的模塊?
    • 簡述Tornado框架的適用場景?
    • git常見命令作用:
    • 簡述以下git中stash命令作用以及相關其他命令。
    • git 中 merge 和 rebase命令 的區別。
    • 公司如何基於git做的協同開發?
    • 如何基於git實現代碼review?
    • git如何實現v1.0 、v2.0 等版本的管理?
    • 什麼是gitlab
    • github和gitlab的區別?
    • 如何為github上牛逼的開源項目貢獻代碼?
    • git中 .gitignore文件的作用
    • 什麼是敏捷開發?
    • 簡述 jenkins 工具的作用?
    • 公司如何實現代碼發佈?
    • 簡述 RabbitMQ、Kafka、ZeroMQ的區別?
    • RabbitMQ如何在消費者獲取任務後未處理完前就掛掉時,保證數據不丟失?
    • RabbitMQ如何對消息做持久化?
    • RabbitMQ如何控制消息被消費的順序?
    • 以下RabbitMQ的exchange type分別代表什麼意思?如:fanout、direct、topic。
    • 簡述 celery 是什麼以及應用場景?
    • 簡述celery運行機制。
    • celery如何實現定時任務?
    • 簡述 celery多任務結構目錄
    • celery中裝飾器 @app.task 和 @shared_task的區別?
    • 簡述 requests模塊的作用及基本使用?
    • 簡述 beautifulsoup模塊的作用及基本使用?
    • 簡述 seleninu模塊的作用及基本使用?
    • scrapy框架中各組件的工作流程?
    • 在scrapy框架中如何設置代理(兩種方法)?
    • scrapy框架中如何實現大文件的下載?
    • scrapy中如何實現限速?
    • scrapy中如何實現暫停爬蟲?
    • scrapy中如何進行自定製命令?
    • scrapy中如何實現的記錄爬蟲的深度?
    • scrapy中的pipelines工作原理?
    • scrapy的pipelines如何丟棄一個item對象?
    • 簡述scrapy中爬蟲中間件和下載中間件的作用?1
    • scrapy-redis組件的作用?
    • scrapy-redis組件中如何實現的任務的去重?
    • scrapy-redis的調度器如何實現任務的深度優先和廣度優先?....
    • 簡述 vitualenv 及應用場景?
    • 簡述 pipreqs 及應用場景?
    • 在Python中使用過什麼代碼檢查工具?
    • 簡述 saltstack、ansible、fabric、puppet工具的作用?
    • B Tree和B+ Tree的區別?
    • 請列舉常見排序並通過代碼實現任意三種。
    •  請列舉常見查找並通過代碼實現任意三種。
    • 請列舉你熟悉的設計模式?
    • 有沒有刷過leetcode?
    • 列舉熟悉的的Linux命令。
    • 公司線上伺服器是什麼系統?
    • 解釋 PV、UV 的含義?
    • 解釋 QPS的含義?
    • uwsgi和wsgi的區別?
    • supervisor的作用?
    • 什麼是反向代理?
    • 簡述SSH的整個過程。
    • 有問題都去那些找解決方案?
    • 是否有關註什麼技術類的公眾號?
    • 最近在研究什麼新技術?
    • 是否瞭解過領域驅動模型?
  •  
  • 二進位與十進位之間的轉換
    • 整數部分

 

正文

回到頂部

Python基礎篇

1:為什麼學習Python

家裡有在這個IT圈子裡面,也想讓我接觸這個圈子,然後給我建議學的Python,
然後自己通過百度和向有學過Python的同學瞭解了Python,Python這門語言,入門比較簡單,
它簡單易學,生態圈比較強大,涉及的地方比較多,特別是在人工智慧,和數據分析這方面。在未來我覺得是往自動化,
人工智慧這方面發展的,所以學習了Python

2:通過什麼途徑學習Python

剛開始接觸Python的時候,到網上裡面跟著視頻學基礎,再後來網上到看技術貼,然後看到有人推薦廖雪峰的Python教程,
練項目到GitHub上面找一些小項目學習。

3:談談對Python和其他語言的區別

複製代碼 複製代碼 複製代碼
Python屬於解釋型語言,當程式運行時,是一行一行的解釋,並運行,所以調式代碼很方便,開發效率高,
還有龜叔給Python定位是任其自由發展、優雅、明確、簡單,所以在每個領域都有建樹,所有它有著非常強大的第三方庫,
特點:
語法簡潔優美,功能強大,標準庫與第三方庫都非常強大,而且應用領域也非常廣
可移植性,可擴展性,可嵌入性
缺點:
  運行速度慢,

- 解釋型 - python/php - 編譯型 - c/java/c# - Python弱類型
複製代碼 複製代碼 複製代碼

 (1)與java相比:在很多方面,Python比Java要簡單,比如java中所有變數必須聲明才能使用,而Python不需要聲明,用少量的代碼構建出很多功能;(高效的高級數據結構)

(2)與php相比:python標準包直接提供了工具,並且相對於PHP代碼更易於維護;

(3)Python與c相比:

Python 和 C Python這門語言是由C開發而來

  對於使用:Python的類庫齊全並且使用簡潔,如果要實現同樣的功能,Python 10行代碼可以解決,C可能就需要100行甚至更多.
  對於速度:Python的運行速度相較與C,絕逼是慢了

Python的優勢:

1、Python 易於學習;

2、用少量的代碼構建出很多功能;(高效的高級數據結構)

3、Python 擁有最成熟的程式包資源庫之一;

4、Python完全支持面向對象;

5、Python 是跨平臺且開源的。

6、動態類型:

4:簡述解釋型和編譯型編程語言

解釋型:就是邊解釋邊執行(Python,php)
編譯型:編譯後再執行(c、java、c#)

5:Python的解釋器種類以及相關特點?

複製代碼 複製代碼 複製代碼 CPython

是官方版本的解釋器:CPython。是使用C語言開發的,所以叫CPython。在命令行下運行python就是啟動CPython解釋器。
CPython是使用最廣的Python解釋器。教程的所有代碼也都在CPython下執行。

IPython
IPython是基於CPython之上的一個互動式解釋器,也就是說,IPython只是在交互方式上有所增強,但是執行Python代碼的功能和CPython是完全一樣的。CPython用>>>作為提示符,而IPython用In [序號]:作為提示符。 複製代碼 複製代碼 複製代碼 複製代碼 複製代碼 複製代碼
PyPy

由Python寫的解釋器,它的執行速度是最快。PyPy採用JIT技術,對Python代碼進行動態編譯(註意不是解釋),
絕大部分Python代碼都可以在PyPy下運行,但是PyPy和CPython有一些是不同的,這就導致相同的Python代碼在兩種解釋器下執行可能會有不同的結果。

Jython
Jython是運行在Java平臺上的Python解釋器,可以直接把Python代碼編譯成Java位元組碼執行。

IronPython
IronPython和Jython類似,只不過IronPython是運行在.Net平臺上的Python解釋器,可以直接把Python代碼編譯成.Net的位元組碼。

小結:
  Python的解釋器很多,但使用最廣泛的還是CPython。如果要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是通過網路調用來交互,確保各程式之間的獨立性。

複製代碼 複製代碼 複製代碼

6:位和位元組的關係

1位元組 = 8 位
位(bit),數據存儲是以“位元組”(Byte)為單位,數據傳輸是以大多是以“位”(bit,又名“比特”)為單位,
一個位就代表一個0或1(即一個二進位),二進位是構成存儲器的最小單位,每8個位(bit,簡寫為b)組成一個位元組(Byte,簡寫為B),
位元組是最小一級的信息單位

7:b、B、KB、MB、GB的關係

b --->位(bit)    

B --->位元組      一個位元組等於8位

1B = 8 bit

1kb = 1024 B

1 MB = 1024 KB

1 GB = 1024 MB

8:PE8規範

複製代碼 複製代碼 複製代碼
1、使用4個空格而不是tab鍵進行縮進。
2、每行長度不能超過79
3、使用空行來間隔函數和類,以及函數內部的大塊代碼
4、必要時候,在每一行下寫註釋
5、使用文檔註釋,寫出函數註釋
6、在操作符和逗號之後使用空格,但是不要在括弧內部使用
7、命名類和函數的時候使用一致的方式,比如使用CamelCase來命名類,
           使用lower_case_with_underscores來命名函數和方法
8、在類中總是使用self來作為預設
 9、儘量不要使用魔法方法
10、預設使用UTF-8,甚至ASCII作為編碼方式
11、換行可以使用反斜杠,最好使用圓括弧。
12、不要在一句import中多個庫,
空格的使用
  1. 各種右括弧前不要加空格。
  2. 逗號、冒號、分號前不要加空格。
  3. 函數的左括弧前不要加空格。如Func(1)
  4. 序列的左括弧前不要加空格。如list[2]
  5. 操作符左右各加一個空格,不要為了對齊增加空格
  6. 函數預設參數使用的賦值符左右省略空格
  7. 不要將多句語句寫在同一行,儘管使用‘;’允許
  8. if/for/while語句中,即使執行語句只有一句,也必須另起一行
 函數命名使用全部小寫的方式,常量命名使用大寫,類屬性(方法和變數)使用小寫
類的命名首字母大寫
複製代碼 複製代碼 複製代碼

9:通過代碼實現如下轉換(進位之間轉換)

複製代碼 複製代碼 複製代碼
# 二進位轉換成十進位-->int
v = "0b1111011"
b = int(v,2)
print(b)  # 123


# 十進位轉換成二進位--->bin
v2 = 18
print(bin(int(v2)))
# 0b10010

# 八進位轉換成十進位
v3 = "011"
print(int(v3))
# 11

# 十進位轉換成八進位:---> oct
v4 = 30
print(oct(int(v4)))
# 0o36

# 十六進位轉換成十進位:
v5 = "0x12"
print(int(v5,16))
# 18

# 十進位轉換成十六進位:---> hex
v6 = 87
print(hex(int(v6)))
# 0x57
複製代碼 複製代碼 複製代碼

10:請編寫一個函數實現將IP地址轉換成一個整數

複製代碼 複製代碼 複製代碼
請編寫一個函數實現將IP地址轉換成一個整數。
如 10.3.9.12 轉換規則為:
        10            00001010

         3            00000011

         9            00001001

        12            00001100

再將以上二進位拼接起來計算十進位結果:00001010 00000011 00001001 00001100 = ?


def v1(addr):
    # 取每個數
    id = [int(x) for x in addr.split(".")]
    print(id)
    return sum(id[i] << [24, 16, 8, 0][i] for i in range(4))

print(v1("127.0.0.1"))

# [127, 0, 0, 1]
# 2130706433
複製代碼 複製代碼 複製代碼

------------------------------------------------

11、python遞歸的最大層數?998

12:求結果(and or or)

複製代碼 複製代碼 複製代碼
1. 求結果:1 or 3
print(1 or 3)  # 1

2. 求結果:1 and 3
print(1 and 3)  # 3

3. 求結果:0 and 2 and 1
print(0 and 2 and 1)  # 0

4. 求結果:0 and 2 or 1
print(0 and 2 or 1)  # 1

5. 求結果:0 and 2 or 1 or 4
print(0 and 2 or 1 or 4)  # 1

6. 求結果:0 or Flase and 1
print(0 or False and 1)  # Flase

總結:
  # x or y 如果 x為真,則值為x,   否則為y
  # x and y 如果 x 為真,則值為 y,否則為 x
複製代碼 複製代碼 複製代碼

運算符

1. 求結果:2 & 5

print(2 & 5)  # 10 & 101 => 000 => 0

2. 求結果:2 ^ 5

print(2 ^ 5)  # 10 ^ 101 => 111 => 1*2**0+1*2**1+1*2**2=1+2+4=7

13 :ascii、unicode、utf-8、gbk 區別

複製代碼 複製代碼 複製代碼
python2內容進行編碼(預設ascii),而python3對內容進行編碼的預設為utf-8。
ascii   最多只能用8位來表示(一個位元組),即:2**8 = 256,所以,ASCII碼最多只能表示 256 個符號。
unicode  萬國碼,任何一個字元==兩個位元組
utf-8     萬國碼的升級版  一個中文字元==三個位元組   英文是一個位元組  歐洲的是 2個位元組
gbk       國內版本  一個中文字元==2個位元組   英文是一個位元組
gbk 轉 utf-8  需通過媒介 unicode
複製代碼 複製代碼 複製代碼

14:位元組碼和機器碼的區別

機器碼,學名機器語言指令,有時也被稱為原生碼,是電腦的CPU可直接解讀的數據。

位元組碼是一種中間狀態(中間碼)的二進位代碼(文件)。需要直譯器轉譯後才能成為機器碼。

複製代碼 複製代碼 複製代碼
什麼是機器碼

機器碼(machine code),學名機器語言指令,有時也被稱為原生碼(Native Code),是電腦的CPU可直接解讀的數據。
通常意義上來理解的話,機器碼就是電腦可以直接執行,並且執行速度最快的代碼。

總結:機器碼是電腦CPU直接讀取運行的機器指令,運行速度最快,但是非常晦澀難懂,也比較難編寫 什麼是位元組碼 位元組碼(Bytecode)是一種包含執行程式、由一序列 op 代碼/數據對 組成的二進位文件。
位元組碼是一種中間碼,它比機器碼更抽象,需要直譯器轉譯後才能成為機器碼的中間代碼。 總結:位元組碼是一種中間狀態(中間碼)的二進位代碼(文件)。需要直譯器轉譯後才能成為機器碼。
複製代碼 複製代碼 複製代碼

-----------

複製代碼 複製代碼 複製代碼
#is  比較的是記憶體地址
#== 比較的是值
# int     具有範圍:-5---256
#對於int 小數據池
 範圍:-5----256 創建的相間的數字,都指向同一個記憶體地址

#對於字元串 (面試)
1、小數據池 如果有空格,那指向兩個記憶體地址,
2、長度不能超過 20
3、不能用特殊字元

i = 'a'*20
j = 'a'*20
print(i is j)   # True

i = "a"*21
j = "a"*21
print(i is j)   # False

關於編碼所占位元組
unicode: 所有字元(無論英文、中文等)   1個字元:2個位元組
gbk:一個字元,英文1個位元組,中文兩個位元組
utf-8:英文1個位元組、 歐洲:2個位元組, 亞洲:3個位元組


在utf-8中,一個中文字元占用3個位元組
在gbk中一個漢字占用2個位元組
黎詩 = utf-8(6位元組)=48
黎詩 = gbk(4位元組)=32

位元組和位的關係。
  #一個位元組(byte) = 8 位(bit)
  # 位為最小的單位

簡述變數命名規範
  #1、以字母,數字,下劃線任由結合
  #2、不能以命名太長,不使用拼音,中文
  #3、不能以數字開頭
  #4、不能用關鍵詞

複製代碼 複製代碼 複製代碼

15:三元運算寫法和應用場景?

複製代碼 複製代碼 複製代碼
應用場景:簡化if語句
# 關於三元運算 # 結果+ if + 條件 + else + 結果 result='gt' if 1>3 else 'lt' print(result) # lt # 理解:如果條件為真,把if前面的值賦值給變數,否則把else後面的值賦值給變數。 lambda 表達式 temp = lambda x,y:x+y print(temp(4,10)) # 14 可替代: def foo(x,y): return x+y print(foo(4,10)) # 14
複製代碼 複製代碼 複製代碼

16:Python3和Python2的區別?

複製代碼 複製代碼 複製代碼
1:列印時,py2需要可以不需要加括弧,py3 需要
python 2 :print ('lili')   ,   print 'lili'
python 3 : print ('lili')   
python3 必須加括弧

exec語句被python3廢棄,統一使用exec函數

2:內涵
Python2:1,臃腫,源碼的重覆量很多。
             2,語法不清晰,摻雜著C,php,Java,的一些陋習。
Python3:幾乎是重構後的源碼,規範,清晰,優美。

3、輸出中文的區別
python2:要輸出中文 需加 # -*- encoding:utf-8 -*-
Python3 : 直接搞

4:input不同
python2 :raw_input
python3 :input 統一使用input函數

5:指定位元組
python2在編譯安裝時,可以通過參數-----enable-unicode=ucs2 或-----enable-unicode=ucs4分別用於指定使用2個位元組、4個位元組表示一個unicode;
python3無法進行選擇,預設使用 ucs4
查看當前python中表示unicode字元串時占用的空間:

impor sys
print(sys.maxunicode)
#如果值是65535,則表示使用usc2標準,即:2個位元組表示
#如果值是1114111,則表示使用usc4標準,即:4個位元組表示

6:
py2:xrange
    range
py3:range  統一使用range,Python3中range的機制也進行修改並提高了大數據集生成效率

7:在包的知識點里
包:一群模塊文件的集合 + __init__
區別:py2 : 必須有__init__
   py3:不是必須的了

8:不相等操作符"<>"被Python3廢棄,統一使用"!="

9:long整數類型被Python3廢棄,統一使用int

10:迭代器iterator的next()函數被Python3廢棄,統一使用next(iterator)

11:異常StandardError 被Python3廢棄,統一使用Exception

12:字典變數的has_key函數被Python廢棄,統一使用in關鍵詞

13:file函數被Python3廢棄,統一使用open來處理文件,可以通過io.IOBase檢查文件類型
複製代碼 複製代碼 複製代碼

17:用一行代碼實現數值交換

a = 1 
b = 2

a, b = b, a

18:Python3和Python2中int和long區別

在python3里,只有一種整數類型int,大多數情況下,和python2中的長整型類似。

19:xrange和range的區別

都在迴圈時使用,xrange記憶體性能更好,xrange用法與range完全相同,range一個生成list對象,xrange是生成器

要生成很大的數字序列的時候,用xrange會比range性能優很多,因為不需要一上來就開闢一塊很大的記憶體空間。

在python2中:

range([start,] stop[, step]),根據start與stop指定的範圍以及step設定的步長,生成一個序列

例子

xrange用法與range完全相同,所不同的是生成的不是一個數組,而是一個生成器。

例子

由上面的示例可以知道:要生成很大的數字序列的時候,用xrange會比range性能優很多,因為不需要一上來就開闢一塊很大的記憶體空間,這兩個基本上都是在迴圈的時候用。

在 Python 3 中,range() 是像 xrange() 那樣實現,xrange()被拋棄。

20:文件操作時:xreadlines和readlines的區別?

readlines     返回一個列表

xreadlines   返回一個生成器

21: 列列舉布爾值為False的常見值?

0,“”,{},[],(),set()
0 Flask 負數 不成立的表達式  None 等

22. 字元串、列表、元組、字典每個常用的5個方法?

複製代碼 複製代碼 複製代碼
字元串:
字元串用單引號(')或雙引號(")括起來,不可變 1,find通過元素找索引,可切片,找不到返回-1 2,index,找不到報錯。 3,split 由字元串分割成列表,預設按空格。 4,captalize 首字母大寫,其他字母小寫。 5,upper 全大寫。 6,lower 全小寫。 7,title,每個單詞的首字母大寫。 8,startswith 判斷以什麼為開頭,可以切片,整體概念。 9,endswith 判斷以什麼為結尾,可以切片,整體概念。 10,format格式化輸出
#format的三種玩法 格式化輸出
res='{} {} {}'.format('egon',18,'male') ==> egon 18 male
res='{1} {0} {1}'.format('egon',18,'male') ==> 18 egon 18
res='{name} {age} {sex}'.format(sex='male',name='egon',age=18)
11,strip 預設去掉兩側空格,有條件, 12,lstrip,rstrip 14,center 居中,預設空格。 
15,count查找元素的個數,可以切片,若沒有返回0
16,expandtabs 將一個tab鍵變成8個空格,如果tab前面的字元長度不足8個,則補全8個,
17,replace(old,new,次數)
18,isdigit 字元串由字母或數字組成 isalpha, 字元串只由字母組成 isalnum 字元串只由數字組成
19,swapcase 大小寫翻轉
20,for i in 可迭代對象。
字典:
1無序(不能索引)2:數據關聯性強3:鍵值對,鍵值對。唯一一個映射數據類型。 #字典的鍵必須是可哈希的 不可變類型。 在同一個字典中,鍵(key)必須是唯一的。

列表是有序的對象集合,字典是無序的對象集合。兩者之間的區別在於:字典當中的元素是通過鍵來存取的,而不是通過偏移存取 key: 輸出所有的鍵 clear:清空 dic:刪除的鍵如果沒有則報錯 pop:鍵值對刪,有返回,沒有原來的鍵會報錯(自行設置返回鍵就不會報錯) popitem:隨機刪鍵值對 del:刪除的鍵如果沒有則報錯 改 update 查 用get時。不會報錯# 沒有可以返回設定的返回值 註意: 1、字典是一種映射類型,它的元素是鍵值對。 2、字典的關鍵字必須為不可變類型,且不能重覆。 3、創建空字典使用 { }。 列表:
索引,切片,加,乘,檢查成員。 增加:有三種, append:在後面添加。 Insert按照索引添加, expend:迭代著添加。 list.extend(seq) - 在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表) pop 刪除 (pop 有返回值) remove 可以按照元素去刪 clear 清空列表 del 1、可以按照索引去刪除 2、切片 3、步長(隔著刪) 改 1、索引 2、切片:先刪除,再迭代著添加 list.count(obj) - 統計某個元素在列表中出現的次數 list.index(obj) - 從列表中找出某個值第一個匹配項的索引位置 list.reverse() - 反向列表中元素 list.sort([func]) - 對原列表進行排序 註意: 1、List寫在方括弧之間,元素用逗號隔開。 2、和字元串一樣,list可以被索引和切片。 3、List可以使用+操作符進行拼接。 4、List中的元素是可以改變的。 元組:
()元組的元素不能修改 1、cmp(tuple1, tuple2):比較兩個元組元素。 2、len(tuple):計算元組元素個數。 3、max(tuple):返回元組中元素最大值。 4、min(tuple):返回元組中元素最小值。 5、tuple(seq):將列表轉換為元組。 註意 1、與字元串一樣,元組的元素不能修改。 2、元組也可以被索引和切片,方法一樣。 3、註意構造包含0或1個元素的元組的特殊語法規則。 4、元組也可以使用+操作符進行拼接。 Set(集合)
:集合(set)是一個無序不重覆元素的序列。 可以使用大括弧 { } 或者 set() 函數創建集合,註意:創建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典。
複製代碼 複製代碼 複製代碼

23、 lambda表達式格式以及應用場景?

複製代碼 複製代碼 複製代碼
匿名函數:為瞭解決那些功能很簡單的需求而設計的一句話函數
函數名 = lambda 參數 :返回值

#參數可以有多個,用逗號隔開
#匿名函數不管邏輯多複雜,只能寫一行,且邏輯執行結束後的內容就是返回值
#返回值和正常的函數一樣可以是任意數據類型

lambda 表達式
temp = lambda x,y:x+y
print(temp(4,10))   # 14

可替代:
def foo(x,y):
    return x+y
print(foo(4,10))    # 14
複製代碼 複製代碼 複製代碼

24. pass的作用

pass是空語句,是為了保持程式結構的完整性。pass 不做任何事情,一般用做占位語句。

25. *arg和**kwarg作用

 *args代表位置參數,它會接收任意多個參數並把這些參數作為元祖傳遞給函數。
**kwargs代表的關鍵字參數,返回的是字典,位置參數一定要放在關鍵字前面

26. is和==的區別

複製代碼 複製代碼 複製代碼
a = 'lishi'
str1 = "li"
str2 = "shi"
str3 = str1 + str2
print("a == str3",a == str3)
print("a is str3",a is str3)
print("id(a)",id(a))
print("id(str3)",id(str3))
# a == str3 True    ==  ---> 只需要內容相等
# a is str3 False   is  ---> 只需要記憶體地址相等
# id(a) 38565848
# id(str3) 39110280
複製代碼 複製代碼 複製代碼
is 比較的是兩個實例對象是不是完全相同,它們是不是同一個對象,占用的記憶體地址是否相同。

== 比較的是兩個對象的內容是否相等,即記憶體地址可以不一樣,內容一樣就可以了。預設會調用對象的 __eq__()方法。

27:談談Python的深淺拷貝?以及實現方法和應用場景。

淺拷貝只是增加了一個指針指向一個存在的地址,

而深拷貝是增加一個指針並且開闢了新的記憶體,這個增加的指針指向這個新的記憶體,
採用淺拷貝的情況,釋放記憶體,會釋放同一記憶體,深拷貝就不會出現釋放同一記憶體的錯誤

一層的情況:

複製代碼 複製代碼 複製代碼
import copy
 
# 淺拷貝
li1 = [1, 2, 3]
li2 = li1.copy()
li1.append(4)
print(li1, li2)  # [1, 2, 3, 4] [1, 2, 3]
 
# 深拷貝
li1 = [1, 2, 3]
li2 = copy.deepcopy(li1)
li1.append(4)
print(li1, li2)  # [1, 2, 3, 4] [1, 2, 3]
複製代碼 複製代碼 複製代碼

多層的情況:

複製代碼 複製代碼 複製代碼
import copy
 
# 淺拷貝 指向共有的地址
li1 = [1, 2, 3,[4,5],6]
li2 = li1.copy()
li1[3].append(7)
print(li1, li2)  # [1, 2, 3, [4, 5, 7], 6] [1, 2, 3, [4, 5, 7], 6]
 
# 深拷貝 重指向
li1 = [1, 2, 3,[4,5],6]
li2 = copy.deepcopy(li1)
li1[3].append(7)
print(li1, li2)  # [1, 2, 3, [4, 5, 7], 6] [1, 2, 3, [4, 5], 6]
複製代碼 複製代碼 複製代碼

28. Python垃圾回收機制?

引用計數

標記清除

分代回收

29. Python的可變類型和不可變類型?

可變數據類型:列表、字典、可變集合

不可變數據類型:數字、字元串、元組、不可變集合

30、求結果

def multipliers():
    return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])
複製代碼 複製代碼 複製代碼
def a():
    return [lambda x:i*x for i in range(4)]
b=a()   #返回個列表函數
# b[2](1)

print(b[1](1))
# print(type(b),b)
print([m(1) for m in a()])
print([i*i for i in [1,2,3]])
[3, 3, 3, 3]
[1, 4, 9]


'''
def multipliers():
    return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])
#解釋:
  函數返回值為一個列表表達式,經過4次迴圈結果為包含四個lambda函數的列表,
由於函數未被調用,迴圈中的i值未被寫入函數,經過多次替代,迴圈結束後i值為3,
故結果為:6,6,6,6



func=lambda x:x+1
print(func(1))
#2
print(func(2))
#3

#以上lambda等同於以下函數
def func(x):
    return(x+1)
'''
複製代碼 複製代碼 複製代碼
請修改multipliers的定義來產生期望的結果(0,2,4,6)。
def multipliers():
    return (lambda x:i*x for i in range(4))         #返回一個生成器表達式
print([m(2) for m in multipliers()])
複製代碼 複製代碼 複製代碼
-面試題2:
現有兩個元組(('a'),('b')),(('c'),('d')),請使用python中匿名函數生成列表[{'a':'c'},{'b':'d'}] #匿名函數形式: l1=(('a'),('b')) l2=(('c'),('d')) ret=map(lambda n:{n[0]:n[1]},zip(l1,l2)) print(list(ret)) #列表表達式形式: l1=(('a'),('b')) l2=(('c'),('d')) print([{n[0]:n[1]} for n in zip(l1,l2)])
複製代碼 複製代碼 複製代碼

31、求結果

複製代碼
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • operator 是 C++ 的(運算符的)重載操作符。用作擴展運算符的功能。 它和運算符一起使用,表示一個運算符函數,理解時應將 【operator+運算符】 整體上視為一個函數名。 要註意的是:一方面要使運算符的使用方法與其原來一致,另一方面擴展其功能只能通過函數的方式(c++中,“功能”都是由 ...
  • 本系列來自《編寫高質量代碼 改善python程式的91個建議》的讀書筆記整理。python編程規範系列--建議08~18 ...
  • 什麼是策略模式 策略是我們在處理問題是所採用的步驟方法。如我要過年回家,方式有飛機、火車,汽車等,這幾種方式就是策略。 再比如我們商城要搞一個活動,給用戶生成一批優惠券,5折,7折,免單等,這些方法也是策略。 一個策略模式的例子: 模擬一個銷售給客戶報價的業務場景。我們銷售人員對不同的客戶制定不同的 ...
  • 正所謂“授人以魚不如授人以漁”,你們想要的Java學習資料來啦!不管你是學生,還是已經步入職場的同行,希望你們都要珍惜眼前的學習機會,奮鬥沒有終點,知識永不過時。 關註底下的公眾號,獲取百度網盤提取碼即可下載! 1. Java編程思想電子書 鏈接:https://pan.baidu.com/s/1p ...
  • 如何在PHP文件查詢出來的數據賦值給前端頁面展示出來? 例如: PHP文件:agency.php 前端模版:edit_face.htm 或者: 輸出變數:{dede:global.變數名} ...
  • import pandas as pd import numpy as np import names ''' 寫在前面的話: 1、series與array類型的不同之處為series有索引,而另一個沒有;series中的數據必須是一維的,而array類型不一定 2、可以把series看成一個定長的... ...
  • 1.自定義實現replace方法 Python replace() 方法把字元串中的 old(舊字元串) 替換成 neange(新字元串),如果指定第三個參數max,則替換不超過 max 次。考慮old與nein的長度不一樣的情況,如old = 'is';new = 'was' 思路: 1.先找出字 ...
  • 前言 寫了兩年多的博客了,我想整理我的博客,問題是,得一個個打開,之後複製粘貼,嫌這樣太麻煩,於是便找到了博客園的備份功能。 但是這個備份功能下載下來的只是一個xml文件,我想把每一篇博文都轉為一個md文件,於是便有了這個Java小工具。 工具下載 "BlogBackupTool" 使用說明 從博客 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...