程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python 必了解面試題

編輯:Python

一:什麼是面向對象

面向對象就是把數據和數據的操作方法放在一起,作為一個相互依存的整體對象。面向對象的核心是對象.

二:面向對象五大原則

單一職責:一個類,最好只做一件事 開放封閉:實體應該是可擴展的,而不可修改的 裡氏代換:所有使用基類的地方必須能夠透明的使用其子類的對象 依賴倒置:依賴於抽象。具體而言就是高層模塊不依賴於底層模塊,二者都同依賴於抽象;抽象不依賴於具體,具體依賴於抽象。 接口隔離:使用多個小的專門的接口,而不要使用一個大的總接口

三:TCP === UDP === 需要建立連接 不需要建立連接 可靠的 不可靠的 工作效率低 工作效率更高 只支持一對一 支持一對一,一對多,多對一,多對多 占用資源多 占用資源少

?

四:線程進程協程的區別===

2,進程: 進程是程序一次動態執行的過程,是程序運行的基本單位。

2、線程 線程又叫做輕量級進程,是CPU調度的最小單位。

3、協程

協程是一種用戶態的輕量級線程,協程的調度完全由用戶控制。

五:死鎖這麼造成的 如何解決========== 兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象若無外力作用,它們都將無法推進下去。

解決=== 避免按同一順序訪問對象。 避免事務中的用戶交互。 保持事務簡短並在一個批處理中。 使用低隔離級別。 使用綁定連接。

 =========================================================================

六:什麼是裝飾器,原理應用場景及項目中哪些地用到=-

Python裝飾器就是利用了閉包的思路,目的是在不改變原函數代碼的情況下,給函數增加新的功能。

應用場景:

1.可以在外層函數加上時間計算函數,計算函數運行時間;

2.計算函數運行次數;

3.可以用在框架的路由傳參上;

4.插入日志,作為函數的運行日志;

6.緩存,實現緩存處理;

七:python的是如何做內存管理的

內存管理: 1.引用計數:賦值 計數器+1,刪除-1 2.垃圾回收:對象的引用為0,引用計數無法解決時 3.內存池機制:將不用的內存放到內存池,不反還給操作系統

八:python的高階函數有哪些,分別有什麼作用

map() Python 內置的高階函數,它接收一個函數 f 和一個 list,

reduce()接收的參數和 map()類似,一個函數 f,一個list,但行為和 map()不同,reduce()傳入的函數f必須接收兩個參數,

filter() 對每個元素進行判斷, True或 False,filter()根據判斷結果自動過濾掉不符合條件的元素,

sorted()可以對所有可迭代的對象進行排序操作

九:什麼是遞歸,哪些業務用到遞歸.=======

  1. 遞歸,就是在運行的過程中調用自己。 構成遞歸需具備的條件:

    1. 子問題須與原始問題為同樣的事,且更為簡單;

    2. 不能無限制地調用本身,須有個出口,化簡為非遞歸狀況處理。

十:global和nonlocal的作用?

global關鍵字修飾變量後標識該變量是全局變量,對該變量進行修改就是修改全局變量 nonlocal關鍵字修飾變量後標識該變量是上一級函數中的局部變量,一般在嵌套函數中使用。對該變量進行修改也會同時修改其引用的上一級函數的局部變量。

margin 外邊距 padding 內邊距 border 邊框 between 在二者之間 background 背景 width 寬 height 高 left 左 right 右 top 上 bottom 下 avatar 頭像


=========================================================================


十一:python中的魔法方法有哪些,分別代表什麼意思

_ new_:類的構造器,創建初始化後的基本實例對象

_ init_:類的數據初始化方法 ,用來給實例對象添加屬性的

? _del_:類的析構器,專門用來在實例對象銷毀前調用,釋放資源的

? call:可以將實例對象直接聲明為一個方法調用,方便調用過程,保護內部實現

十二:靜態方法類方法的區別

靜態方法: 使用裝飾器 @staticmethod,不需要參數,類對象和實例對象都可以調用

類方法: 使用裝飾器@classmethod,類對象和實例對象都能調用

十三:什麼是元類

用來創建類的類就叫元類函數type其實就是一個元類,type就是Python中用來創建所有類的元類。

十四:什麼是反射

反射指的是運行時獲取類型定義信息,也叫做自省****

在Python中,能夠通過一個對象,找出其type、class的能力***

十五:什麼是IO多路復用

  • IO 多路復用是一種同步IO模型,實現一個線程可以監視多個文件句柄;

  • 一旦某個文件句柄就緒,就能夠通知應用程序進行相應的讀寫操作;

  • 沒有文件句柄就緒就會阻塞應用程序,交出CPU。

十六:select、poll、epoll特點是什麼

select 可移植性好,對於超時值提供了更好的精度:微秒。

poll 不要求開發者計算大文件描述的大小,沒有連接數的限制,可以基於鏈表來存儲的。

epoll 支持一個進程打開大數目的socket描述符(FD) IO效率不隨FD數目增加而線性下降,加速內核與用戶空間的消息傳遞。

十七:什麼是生產者消費者模型

十八:mysql常用 的數據庫引擎

InnoDB存儲引擎,mylsam存儲引擎,memory存儲引擎 ,

十九:myISAM和Innodb的區別是什麼

InnoDB 支持事務、外鍵、行鎖 MyISAM 支持表鎖,訪問快

二十:hash索引和btree的區別

Hash索引只能用於對等比較,例如=,<=>(相當於=)操作符。由於是一次定位數據,不像BTree索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次IO訪問,所以檢索效率遠高於BTree索引

BTree索引是最常用的mysql數據庫索引算法,因為它不僅可以被用在=,>,>=,<,<=和between這些比較操作符上,而且還可以用於like操作符

二一:索引的作用, 有那些索引種類。

幫助mysql進行高效查詢的一種數據結構(有序

普通索引:僅加速查詢 唯一索引:加速查詢+列值唯一(可以有null) 主鍵索引:加速查詢+列值唯一(不可以有null)+表中只有一個 組合索引:多列值組成一個索引,專門用於組合搜索,其效率大於索引合並。 全文索引:對文本的內容進行分詞,進行搜索。

22:索引失效的原因是什麼,什麼情況下用不到索引。

在條件中有or,2,like查詢以%開頭,索引無效;4、當字段類型為字符串時,條件中數據沒有使用引號引用。

數據唯一性差的字段不要使用索引,頻繁更新的字段不要使用索引

23:什麼情況下不建議使用索引,

1,表的數據量特別小的時候,數據的差異性很小,頻繁更新的字段,當修改性能遠遠大於檢索性能時,不應該創建索引。

24:Mysql中的事務有什麼作用,事務的特性要那些。

  1. 在mysql中只有使用了innodb,才能使用事務。

  2. 事務的特性: 原子性,一致性,隔離性, 持久性

25:事務的隔離級別有那些?

(讀未提交): 最低的隔離級別,允許讀取尚未提交的數據變更,可能會導致髒讀、幻讀或不可重復讀。

(讀已提交): 允許讀取並發事務已經提交的數據,可以阻止髒讀,但是幻讀或不可重復讀仍有可能發生。

(重復讀): 對同一字段的多次讀取結果都是一致的,除非數據是被本身事務自己所修改,可以阻止髒讀和不可重復讀,但幻讀仍有可能發生。

(串行化): 最高的隔離級別,完全服從ACID的隔離級別。所有的事務依次逐個執行,這樣事務之間就完全不可能產生干擾,也就是說,該級別可以防止髒讀、不可重復讀以及幻讀

:26:Mysql中要那些瑣。

表瑣---鎖住整張表的數據。

行瑣----鎖住數據所在的行。

27:什麼是sql注入

[SQL注入],就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。

28:http 和 https的區別

端口:http 端口號是80,https 端口號是443

傳輸協議:http 是超文本傳輸協議,屬於明文傳輸;https 是安全的超文本傳輸協議,是經過 SSL 加密後的傳輸協議

29:常見的請求方式要那些。

get:請求指定頁面信息,並返回實體主體。 head:類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭。 post:向指定資源提交數據進行處理請求,數據包含在請求體中。 put:從客戶端向服務器傳送的數據取代指定的文檔的內容。

30:常見的響應碼有那些。

200,401,403,404,500

pv和uv分別是什麼

PV 訪問量, 即頁面浏覽量或點擊量,衡量網站用戶訪問的網頁數量;統計周期內用戶每打開或刷新一個頁面就記錄1次,多次打開頁面則浏覽量累計增加。

UV 獨立訪客,統計1天內訪問某站點的用戶數;訪問一台電腦客戶端為訪客。理解成訪問某網站的電腦數量。一天內相同的客戶端多次訪問計為1個訪客。

什麼是跨域,如果解決

浏覽器從一個域名的網頁去請求另一個域名的資源時,域名、端口、協議任一不同,都是跨域

利用的是 script 標簽 src 屬性請求 js 無跨域問題,但具有局限性,只能發送 get 請求

什麼是跨站攻擊

是指攻擊者利用網站程序對用戶輸入過濾不足,輸入顯示在頁面上對其他用戶造成影響的 HTML代碼 ,從而盜取用戶資料、利用用戶身份進行某種動作或者對訪問者進行病毒侵害的一種*攻擊*方式

.如何保證接口的安全

\2. 基於網關實現黑明單與白名單攔截

\4. 對一些特殊字符實現過濾 防止xss、sql注入的攻擊

\5. 使用token+圖形驗證碼方法實現防止模擬請求

cookie和session的區別

cookie的數據信息存放在客戶端浏覽器上。

session的數據信息存放在服務器上。

redis的數據類型及應用場景

字符串(String),Hash(字典),列表(List),集合(Set),有序集合(Sorted Set)。

一般常用在需要計數的場景,比如用戶的訪問次數、熱點文章的點贊轉發數量等等

什麼是雪崩

大量的key設置了相同的過期時間,導致緩存在同一時刻全部失效

什麼是擊穿

一個存在的key,在緩存過期的一刻,有大量請求

什麼是穿透

訪問一個不存在的key,緩存不起作用

redis持久化的方式

RDB 持久化機制,是對 redis 中的數據執行周期性的持久化。

AOF:機制對每條寫入命令作為日志,以 append-only 的模式寫入一個日志文件中,在 redis 重啟的時候,可以通過回放 AOF 日志中的寫入指令來重新構建整個數據集。

什麼是裝飾器,原理應用場景及項目中哪些地用到

1.裝飾器的實現是由閉包支撐的
2.裝飾器本質上是⼀個python函數,它可以在讓其他函數在不需 要做任何代碼的變動的前提下增加額外的功能;
3.裝飾器的返回值也是⼀個函數的對象
​
應用場景:
1.可以在外層函數加上時間計算函數,計算函數運行時間;
2.計算函數運行次數;
3.可以用在框架的路由傳參上;
4.插入日志,作為函數的運行日志;
5.事務處理,可以讓函數實現事務的一致性,讓函數要麼一起運行成功,要麼一起運行失敗;
6.緩存,實現緩存處理;
7.權限的校驗,在函數外層套上權限校驗的代碼,實現權限校驗;

python常用的三方模塊有哪些

redis  負責連接redis數據庫
pymysql  
pyjwt  生成和校驗jwt token
django  web開發框架
flask  web開發框架
requests   發送HTTP請求的模塊

Python內置模塊有哪些

os   操作系統庫
time  時間庫
re    正則模塊
random   隨機模塊
json   json的序列化和反序列化
hashlib   負責加密的模塊

面向對象的五大原則是什麼

單一職責:一個類,最好只做一件事
開放封閉:實體應該是可擴展的,而不可修改的
裡氏代換:所有使用基類的地方必須能夠透明的使用其子類的對象
依賴倒置:依賴於抽象。具體而言就是高層模塊不依賴於底層模塊,二者都同依賴於抽象;抽象不依賴於具體,具體依賴於抽象。
接口隔離:使用多個小的專門的接口,而不要使用一個大的總接口

tcp和udp的區別

TCPUDP需要建立連接不需要建立連接可靠的不可靠的工作效率低工作效率更高只支持一對一支持一對一,一對多,多對一,多對多占用資源多占用資源少

列舉python中的魔法方法

__str__: 管理print輸出對象的時候顯示的內容
__init__: 構造函數,對象實例化的時候調用
__del__: 析構函數,對象銷毀時調用
__call__: 把實例化對象當作方法調用時調用
__iter__: 返回迭代器本身

什麼是反射

需要執行對象裡的某個方法,或需要調用對象中的某個變量,但是由於種種原因我們無法確定這個方法或變量是否存在,這是我們需要用一個特殊的方法或機制要訪問和操作這個未知的方法或變量,這中機制就稱之為反射

說一下python中的迭代器和生成器

迭代器對象就是一個可以迭代的對象。迭代器就是負責迭代這個可迭代的對象的一種工具。提供了兩個函數,__iter__和next()
__iter__是返回迭代器本身。
next()是返回可迭代的下一個元素
​
生成器
在Python中,使用生成器可以很方便的支持迭代器協議。生成器通過生成器函數產生,生成器函數可以通過常規的def語句來定義,但是不用return返回,而是用yield一次返回一個結果,在每個結果之間掛起和繼續它們的狀態,來自動實現迭代協議。
也就是說,yield是一個語法糖,內部實現支持了迭代器協議,同時yield內部是一個狀態機,維護著掛起和繼續的狀態。

什麼是元組,和列表的區別是什麼

元組列表不可變的可變的異構數據同構數據元組靠()和,來聲明依靠[]來聲明聯系:元組和列表之間是可以相互轉換

range和xrange的區別是什麼?

range:得到的返回值是一個列表類型的
xrange:得到的返回值是一個迭代器對象
   
python3中的range,就是python2中的xrange

什麼是深淺拷貝,區別,原理及代碼實現

深拷貝:復制內存中的內容,重新開辟內存地址。原始數據發生變化,復制的數據不發生變化。copy.deepcopy()
淺拷貝:復制內存地址,原始數據發生變化,復制的數據也會跟著發生變化。copy.copy()

python的是如何做內存管理的

1. 引用計數:賦值+1,刪除-1
2. 垃圾回收:當引用計數的值為0的時候,會釋放資源。達到了垃圾回收的阈值,觸發標記-清除
3. 內存池管理:回收的內存並不會返回給操作系統,而是留在自己內存池中。

什麼是遞歸,哪些業務用到遞歸

遞歸,就是在運行的過程中調用自己。
構成遞歸需具備的條件:
1. 子問題須與原始問題為同樣的事,且更為簡單;
2. 不能無限制地調用本身,須有個出口,化簡為非遞歸狀況處理。

redis的數據類型及應用場景

string  字符串
list  列表
hash  哈希
set  集合
zset 有序集合

redis的優缺點

優點:
性能快、基於內存實現、是目前最快的key-value數據庫
可以持久化
數據類型豐富,可以滿足多種需求
支持事務
哨兵機制,可以實現分布式集群
​
缺點:
斷電可能會造成數據丟失
作為緩存的時候,容易出現緩存雪崩、擊穿、穿透

redis的內存淘汰策略有哪些

no-enviction 存儲滿數據,新加入數據直接報錯
allkeys-random 在所有key中隨機刪除一個key
allkeys-lru 在所有key中,刪除最近最少使用的key
volatile-random 在所有有過期時間的key中,隨機刪除一個
volatile-lru 在所有有過期時間的key中,刪除最近最少使用的key
volatile-ttl 在所有有過期時間的key中,刪除最近要過期的key

redis如何做內存優化

盡可能使用hash類型,盡可能的將你的數據模型抽象到一個散列表裡面,因為hash類型占用內存較少

mysql常用 的數據庫引擎

Innodb
myISAM
memory

myISAM和Innodb的區別是什麼

mysql默認存儲引擎:5.5之前:myISAM 5.5之後:Innodb

InnodbmyISAM支持事務不支持支持外鍵不支持行鎖表鎖查詢速度低查詢速度高,批量插入快不支持支持全文索引內存使用高內存使用低

hash索引和btree的區別

hash索引進行等值查詢更快(一般情況下),但是卻無法進行范圍查詢。
hash索引不支持使用索引進行排序
hash索引不支持模糊查詢以及多列索引的最左前綴匹配
hash索引任何時候都避免不了回表查詢數據
hash索引不穩定,性能不可預測

索引失效的原因有哪些,或者說什麼情況下用不到索引

1、條件中有or,即使其中有條件帶索引也不會使用;
2、對於多列索引,不使用的第一部分,則不會使用索引;
3、like查詢以%開頭,索引無效;
4、當字段類型為字符串時,條件中數據沒有使用引號引用。

什麼情況下不建議用索引

用不到的字段,不用加索引
數據量較少的表,不用加索引
表中數據變化比較頻繁,不用加索引

說一下mysql中的事務

四大特性:原子性、持久性、隔離性、一致性
隔離級別:串行化、可重復讀、讀已提交、讀未提交

事務的隔離級別有哪些

說一下mysql中的鎖

按鎖的粒度劃分:
   表級鎖,行級鎖,頁級鎖
按鎖的級別劃分:
共享鎖、排他鎖
按加鎖方式分
自動鎖、顯式鎖
按操作劃分:
DML鎖、DDL鎖
按使用方式劃分:
悲觀鎖、樂觀鎖

死鎖是如何造成的,怎麼避免

是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。
​
避免:
按同一順序訪問對象。
避免事務中的用戶交互。
保持事務簡短並在一個批處理中。
使用低隔離級別。
使用綁定連接。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved