Django、Python知識點總結

一、django

1、中間件

中間件一般做認證或批量請求處理,django中的中間件,其實是一個類,在請求和結束后,django會根據自己的規則在合適的時機執行中間件中相應的方法,
如請求過來 執行process_request, view,process_response方法

2、Django、Tornado、Flask各自的優勢

Django:Django無socket,django的目的是簡便,快速開發,并遵循MVC設計,多個組件可以很方便的以“插件”形式服務于整個框架,
django有許多功能強大的第三方插件。django具有很強的可擴展性。
Tornado:它是非阻塞式服務器,而且速度相當快,得力于其 非阻塞的方式和對epoll的運用,Future對象,缺點:沒有session,需要自定制
Flask:是一個微型的web框架,配合SQLALchemy來使用,jinja2模板, werkzeug接口

3、 django版本,Python版本,linux版本

django:1.11
Python:3.5
linulx:6.8

4、django的template的注釋是什么樣子的

單行:{#注釋#}
多行注釋:{%comment%}

5、django怎么弄并發的

nginx+uwsig為django提供高并發,nginx的并發能力超過,單臺并發能力過完,在純靜態的web服務中更是突出其優越的地方,由于底層使用epoll異步IO模型進行處理。

6、tornodo的ioloop知道是什么嗎?

事件循環

7、select_related和prefetch_related,Q和F

select_related:一對多使用,查詢主動做連表
prefetch_related:多對多或者一對多的時候使用,不做連表,做多次查詢
Q:用于構造復雜查詢條件
F:更新時用于獲取原來的值,專門取對象中某一列進行操作

8、什么是ORM?

ORM,即Object-Relational Mapping(對象關系映射),它的作用是在關系型數據庫和業務實體對象之間做一個映射
ORM優缺點:
優點:擺脫復雜的SQL操作,適應快速開發,讓數據結果變得簡單,數據庫遷移成本更低
缺點:性能較差,不適用于大型應用,復雜的SQL操作還需要通過SQL語句實現

9、CORS跨域資源共享

首先會發送"預檢"opption",請求,如果"預檢"成功,則發送真實數據。

10、Django的Form主要具有以下功能?

生成HTMl標簽,驗證用戶數據 is_vaild,HTML Form提交保留上次提交數據,初始化頁面顯示內容

11、CBV和FBV

CBV在指定的類上面加上裝飾器或在此方法上面添加裝飾器 @method_decorator,并繼承view

12、cookie及session

cookie:是保留在客戶端上面的一組鍵值對,cookie不是很安全,別人可以分析存放在本地的cookie
session:是保存在服務器上面的一組鍵值對,依賴與cookie,安全指數比cookie高

13、django的請求生命周期

請求來了先到uwsgi,把請求做一部分分裝給django框架,然后經過所有的中間件,路由,視圖,視圖處理再返回給中間件,中間件在返回給uwsgi,在返回給用戶。

14、uwsgi和wsgi

wsgi:是web服務器網關接口,是pyhton應用程序或框架和web服務器之間的一種接口,其廣泛使用的是django框架。
uwsgi:是一個web服務器,它實現了wsgi協議,Nginx中HttpUwsgiModule的作用是與Uwsgi服務器進行交換

15、解釋下django - debug -toolbar的使用

使用django開發站點時,可以使用django-debug-toolbar來進行調試,在settings.py中添加 'debug—toolbar.midleware.Debug ToolbarMiddleware'到項目的MIDDLEWARE_CLASSES內。

二、Python部分

1、 _new_._init_區別,如何實現單例模式,有什么優點

_new_是一個靜態方法,_init_是一個實例方法
_new_返回一個創建的實例,_init_什么都不返回
_new_返回一個cls的實例時后面的_init_才能被調用
當創建一個新實例時調用_new_,初始化一個實例時調用_init_

2、深淺拷貝

淺拷貝只是增加了一個指針指向一個存在的地址,而深拷貝是增加一個指針并且開辟了新的內存,這個增加的指針指向這個新的內存,
采用淺拷貝的情況,釋放內存,會釋放同一內存,深拷貝就不會出現釋放同一內存的錯誤

3、HTTP/IP相關協議,分別位于哪層

http協議是超文本傳輸協議,http協議是基于TCP/IP通信協議來傳遞數據
http協議工作與c/s架構上,瀏覽器作為http的客戶端通過URL向http服務端即web服務器發送所用請求。web服務器收到所有請求后,向客戶端發送響應信息,
http特點是短連接,無狀態

地址欄鍵輸入URL,按下回車之后經歷了什么?
1.瀏覽器向DNS服務器請求解析該URL中的域名所對應的IP地址
2.解析出IP地址后,根據IP地址和默認端口80,和服務器建立TCP連接
3.瀏覽器發出讀取文件的http請求,該請求報文作為TCP三次握手的第三個報文的數據發送給服務器
4.服務器對瀏覽器請求做出響應,并把對應的html文件發送給瀏覽器
5.釋放TCP連接
6.瀏覽器將該HMTL渲染并顯示內容

4、TCP/UDP區別

TCP協議是面向連接,保證高可靠性(數據無丟失,數據無失序,數據無錯誤,數據無重復達到)傳輸層協議
UDP:數據丟失,無秩序的傳輸層協議(qq基于udp協議)

5、webscoket

websocket是基于http協議的,可持續化連接
輪詢:瀏覽器每隔幾秒就發送一次請求,詢問服務器是否有新消息
長輪詢:客戶端發起連接后,如果沒有消息,就一直不返回response給客戶端,直到有消息返回,返回完之后,客戶端再次發起連接

6、RabbitMQ:

服務器端有Erlang語言來編寫,支持多種客戶端,只會ajax,用于分布式系統中存儲轉發消息,在易用性、擴展性、高可用性的方面不俗。
connection是RabbitMQ的socket連接,它封裝了socket部分相關協議邏輯
connectionFactroy為connection的制造工廠
channel是我們與RabbitMQ打交道的最重要的一個接口,大部分的業務操作是在chaanel這個接口中完成,包括定義Queue、定義Exchange、
綁定Queue與Exchange,發布消息等

7、裝飾器

調用裝飾器其實是一個閉包函數,為其他函數添加附加功能,不修改被修改的源代碼和不修改被修飾的方式,裝飾器的返回值也是一個函數對象。
比如:插入日志、性能測試、事物處理、緩存、權限驗證等,有了裝飾器,就可以抽離出大量與函數功能本身無關的雷同代碼并繼續重用。

8、閉包

1.必須有一個內嵌函數
2.內嵌函數必須引用外部函數的變量(該函數包含對外作用域而不是全局作用域名字的引用)
3.外部函數的返回值必須是內嵌函數

9、迭代器與生成器

迭代可迭代對象對應iter(方法)和迭代器對應next(方法)的一個過程
生成器:包括含有yield這個關鍵字,生成器也是迭代器,調動next把函數變成迭代器。

10、classmethod,staticmethod,property

類方法:將類的函數轉換成類方法,函數上裝飾@classmethod會將函數的自動傳值參數改成cls
靜態方法:此方法相當于給類擴展一個功能,將類內的函數實例化,給類或對象使用,此時類內的函數就是普通函數,不管是類還是實例化的對象都可以使用
實例化:類的實例化就會產生一個實例(對象),可以理解為類()把虛擬的東西實例化,得到具體存在的值

11、常用的狀態碼

200--服務器成功返回網頁
204--請求收到,但返回信息為空
304--客戶端已經執行了GET,但文件未變化
400--錯誤請求,如語法錯誤
403--無權限訪問
404--請求的頁面不存在
500--服務器產生內部錯誤

?12、多進程,多線程,協程,GIL

GIL:全局解釋器鎖,是鎖在cpython解釋器上,導致同一時刻,同一進程只能有一個線程被執行
多進程:多進程模塊multiprocessing來實現,cpu密集型,IO計算型可以用多進程
多線程:多線程模塊threading來實現,IO密集型,多線程可以提高效率
協程:依賴于geenlet,對于多線程應用。cpu通過切片的方式來切換線程間的執行,遇到IO操作自動切換,線程切換時需要耗時,
而協成好處沒有切換的消耗,沒有鎖定概念。
進程:是資源管理單位,進行是相互獨立的,實現并發和并發
線程:是最小的執行單位,線程的出現為了降低上下文切換的消耗,提供系統的并發性

13、IO多路復用/異步非阻塞

IO多路復用:通過一種機制,可以監聽多個描述符 select/poll/epoll
select:連接數受限,查找配對速度慢,數據由內核拷貝到用戶態
poll:改善了連接數,但是還是查找配對速度慢,數據由內核拷貝到用戶態
epoll:epoll是linux下多路復用IO接口,是select/poll的增強版,它能顯著提高程序在大量并發連接中只有少量活躍的情況下的系統CPU利用率
異步非阻塞:異步體現在回調上,回調就是有消息返回時告知一聲兒進程進行處理。非阻塞就是不等待,不需要進程等待下去,
繼續執行其他操作,不管其他進程的狀態。

14、PEP8規范,規范的好處是什么?

1.縮進:4個空實現縮進,盡量不使用Tab
2.行:沒行最大長度不超過79,換行可以使用反斜杠
3.命名規范:
4.注釋規范:

15、range-and-xrange

都在循環時使用,xrange內存性能更好,xrange用法與range完全相同,range一個生成list對象,xrange是生成器

16、with上下文機制原理

_enter_和_exit_,上下文管理協議,即with語句,為了讓一個對象兼容with語句,必須在這個對象類中聲明enterexit方法,
使用with語句的目的就是把代碼塊放入with中執行,with結束后,自動完成清理工作,無須收到干預

17、經典類、新式類

經典類遵循:深度優先,python2中
新式類遵循:廣度優先,Python3中

18、有沒有一個工具可以幫助查找Python的bug和進行靜態的代碼分析?

PyChecker是一個Python代碼的靜態分析工具,它可以幫助查找Python代碼的bug,會對代碼的復雜度和格式提出警告,
Pylint是另外一個工具可以進行codingstandard檢查

19、 Python是如何進行內存管理的

1.對象引用計數:
引用計數增加的情況:
來保持追蹤內存中的對象,所有對象都用引用計數,一個對象分配一個新名稱
將其放入一個容器中(列表,字典,元祖)
引用計數減少的情況:
使用del語句對對象別名顯示的銷毀
引用超出作用域或被重新賦值
sys.getrefcount()函數可以獲得對象的當前引用計數

2.標記-清除機制

3.分代技術

20、什么是python?使用python有什么好處?

python是一種編程語言,它有對象、模塊、線程、異常處理和自動內存管理。它簡潔,簡單、方便、容易擴展、有許多自帶的數據結果,而且它開源

21、什么是pickling和unpickling?

Pickle模塊讀入任何python對象,將它們轉換成字符串,然后使用dump函數將其轉儲到一個文件中——這個過程叫做pickling
反之從存儲的字符串文件中提取原始python對象的過程,叫做unpickling

22、python是如何被解釋的?

Python是一種解釋性語言,它的源代碼可以直接運行,Python解釋器會將源代碼轉換成中間語言,之后再翻譯成機器碼再執行

23、數組和元祖之間的區別是什么?

數組和元祖之間的區別:數組內容可以被修改,而元祖內容是只讀的,不可被修改的,另外元祖可以被哈希,比如作為字典的key

24、參數按值傳遞和引用傳遞是怎么實現的?

python中的一切都是類,所有的變量都是一個對象的引用。引用的值是由函數確定的,因此無法被改變,但是如果一個對象是可以被修改的,你可以改動對象

25、Python都有哪些自帶的數據結構?

Python自帶的數據結構分為可變和不可變的:可變的有:數組、集合、字典,不可變的是:字符串、元祖、整數

26、什么是python的命名空間?

在python中,所有的名字都存在于一個空間中,它們在改空間中存在和被操作——這就是命名空間,它就好像一個盒子,在每個變量名字都對應裝著一個對象,
當查詢變量的時候,會從該盒子里面尋找相應的對象

27、python中的unittest是什么?

在python中,unittest是python中的單元測試框架,它擁有支持共享搭建、自動測試、在測試中暫停代碼、將不同測試迭代成一組

28、*args與**kwargs

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

29、在Python中什么是slicing?

slicing是一種在有序的對象類型中(數組、元祖、字符串)節選某一段的語法

30、中的docstring是什么?

Python中文檔字符串被稱為docstring,它在Python中的作用是為函數、模塊和類注釋生成文檔

31、os與sys區別:

os是模塊負責程序與操作系統的交互,提供了訪問操作系統底層的接口
sys模塊是負責程序與python解釋器的交互,提供了一系列的函數和變量,用于操控Python時運行的環境

32、實現一個單例模式

_new_()在 _init_()之前被調用,用于生成實例對象。利用這個方法和類的屬性的特點可以實現設計模式的單例模式。
單例模式是指創建唯一對象,單例模式設計的類只能實例,實例化1個對象

 class Singleton(object):
       __instance=None
       def __init__(self):
           pass
       def __new__(cls, *args, **kwargs):
           if Singleton.__instance is None:
               Singleton.__instance=object.__new__(cls,*args,**kwargs)
           return Singleton.__instance
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容

  • Django 準備 “虛擬環境為什么需要虛擬環境:到目前位置,我們所有的第三方包安裝都是直接通過 pip inst...
    33jubi閱讀 1,334評論 0 5
  • Python語言特性 1 Python的函數參數傳遞 看兩個如下例子,分析運行結果: 代碼一: a = 1 def...
    伊森H閱讀 3,076評論 0 15
  • 一、Python簡介和環境搭建以及pip的安裝 4課時實驗課主要內容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,777評論 0 10
  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 3,016評論 1 3
  • 你只需要過好自己的生活,確保自己每天有進步就可以了,你最大的敵人不是別人,而是自己。 -1- 最近身邊一朋友向我吐...
    子豪同學c閱讀 1,041評論 1 2