一、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語句,必須在這個對象類中聲明enter和exit方法,
使用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