一、and或orpython
v= 1 and 3 and 2 print(v) 2 v= 1 and 3 and 0 print(v) 0 v = 1 or 2 or 0 print(v) 1 v = 1 and 2 or 0 print(v) 2
Python中的and從左到右計算表達式,若全部的值均爲真,則返回最後一個值,若存在假,返回第一個假值mysql
or也是從左到右計算表達式,返回第一個爲真的值web
二、GIL鎖ajax
全局解釋器鎖,同一時刻只能有一個線程訪問CPU,鎖的是線程,線程自己能夠在同一時間使用多個CPU,Cpython解釋器防止在解釋代碼的過程當中產生數據不安全問題。sql
三、is和==的區別數據庫
Python中包含三個基本元素:ID(身份標識),type(數據類型),value(值)編程
其中ID用來惟一標識一個對象,type標識對象類型,value標識對象的一個值json
is判斷的是a對象是否就是b對象,是經過ID來判斷跨域
==判斷的是a對象的值是否和b對象的值相等,是經過value來判斷,,因此is
就是判斷兩個對象的id是否相同, 而 ==
判斷的則是內容是否相同。數組
四、 Python中的可變對象和不可變對象
不可變對象:對象所指向的內存中的值不能被改變,當改變這個變量的時候,原來指向的內存中的值不變,變量再也不指向原來的值,而是開闢一塊新的內存,變量指向新的內存。
通俗來說變量值改變,id值也改變,例如:
a = 'hello' print(id(a)) a = a+'hi' print(id(a)) 1579546360552 1579547940488
數值類型int 、float、 字符串str 、元祖tuple、boole 都是不可變對象
可變對象:對象指向的內存中的值會改變,當更改這個變量的時候,仍是指向原來內存中的值,而且在原來的內存值進行原地修改,並無開闢新的內存。
dic = { 'name':'alex', 'age':18 } print(id(dic)) dic['hobby']='lanqiu ' print(id(dic)) 1579542439176 1579542439176
列表list、集合set、字典dict都是可變對象
五、osi七層協議複習總結
六、TCP與UDP的複習總結
TCP:傳輸控制協議,是一種面向鏈接的、可靠地字節流服務,當客戶端與服務端交換數據時,首先要創建起一個TCP連接,以後才傳輸數據,TCP提供超市重傳,丟棄重複數據,檢查數據,流量控制等功能。保證數據從一段傳到另外一端。
UDP:用戶數據包協議,是一個簡單的面向數據包的傳輸層協議,盡最大努力交付報文。傳輸速度比較快,容易丟包。
七、阻塞IO,非阻塞IO
IO的操做分爲兩步,等待數據準備和將數據從操做系統內核拷貝至內存,阻塞IO是指一直等待數據準備好拿到數據。非阻塞IO是指當用戶進程發出read操做時,若是kernel中的數據尚未準備好,那麼它並不會block用戶進程,而是馬上返回一個error。從用戶進程角度講 ,它發起一個read操做後,並不須要等待,而是立刻就獲得了一個結果。用戶進程判斷結果是一個error時,它就知道數據尚未準備好,因而它能夠再次發送read操做。一旦kernel中的數據準備好了,而且又再次收到了用戶進程的system call,那麼它立刻就將數據拷貝到了用戶內存,而後返回。
八、同步和異步
所謂同步就是一個任務的完成須要依賴另一個任務時,只有等待被依賴的任務完成後,依賴的任務才能算完成,這是一種可靠的任務序列
。要麼成功都成功,失敗都失敗,兩個任務的狀態能夠保持一致。
所謂異步是不須要等待被依賴的任務完成,只是通知被依賴的任務要完成什麼工做,依賴的任務也當即執行,只要本身完成了整個任務就算完成了
。至於被依賴的任務最終是否真正完成,依賴它的任務沒法肯定,因此它是不可靠的任務序列
。
九、一行代碼實現九九乘法表
for i in range(1,10): for j in range(1,i+1): print('{}*{}={}'.format(j,i,i*j) ,end=' ') print('\n',end='')
ret ='\n'.join([ ' '.join(['{}*{}={}'.format(y,x,x*y) for y in range(1,x+1) ]) for x in range(1,10) ]) print(ret)
十、類的繼承
十一、*args和**kwargs
*args能夠傳遞任意數量的的位置參數,以元組的形式存儲
**kwargs能夠傳遞任意數量的關鍵字參數,以字典的形式存儲
*args和**kwargs能夠同時定義在函數中,但必須*args放在**kwargs前面
def foo(*args,**kwargs): print('*args',*args,) print('args',args) print('kwargs',kwargs) foo(1,x=1,**{'name':'dog'}) 結果 *args 1 args (1,) kwargs {'x': 1, 'name': 'dog'}
12 、lambda函數
lambda函數比較方便,匿名函數,通常用來給filter,map這樣的函數式編程服務,做爲回調函數傳遞給某些應用,好比消息處理
1三、裝飾器
def outer(func,*args): def inner(*args): print('先洗蘋果') ret = func() print('吃完了') return ret return inner @outer def eat(): print('吃蘋果') eat()
裝飾器的本質:裝飾器 = 高階函數 + 函數嵌套 + 閉包
高階函數:把函數當作參數傳給另一個函數,返回值中包含函數。
裝飾器的功能:就是在不改變原函數的調用方式的狀況下,在這個函數的先後加上擴展功能
1四、做用域
一、做用域即範圍:全局範圍(內置名稱空間和全局名稱空間屬於該範圍):全局存活,全局有效 局部範圍(局部名稱空間屬於該範圍):臨時存活,局部有效
二、做用域關係是在函數定義階段就已經固定的,與函數調用的位置無關
三、查看做用域 :globals()全局變量,locals()局部變量
當 Python 遇到一個變量的話他會按照這樣的順序進行搜索:
本地做用域(Local)→當前做用域被嵌入的本地做用域(Enclosing locals)→全局/模塊做用域(Global)→內置做用域(Built-in)
1五、閉包函數
定義:若是在一個內部函數裏,對在外部做用域(但不是在全局做用域)的變量進行引用,那麼內部函數就被認爲是閉包
建立一個閉包必須知足如下幾點:
def foo(): name = 'foo' def inner(): print(name) return inner ret = foo() ret()
1六、cookies和session的區別
cookie的由來 :因爲http請求是沒有狀態的,每次請求都是獨立的。
什麼是cookie:就是服務端設置而後保存在瀏覽器上的字符串、鍵值對
服務端控制着響應,在想盈利可讓瀏覽器在本地保存cookie鍵值對,下一次請求時攜帶這個cookie值。
cookie的應用:一、登陸,七天免登陸。二、記錄用戶瀏覽器習慣。3.簡單的投票限制。
session是保存在字典裏的鍵值對,必須依賴於cookie。
優點,相對於cookie安全,存數據多,可是佔用資源。
1七、Django中的MTV分別表明什麼:
M表明什麼model(模型):負責業務對象和數據對象
T表明Template(模板):負責如何把頁面展現給用戶
V表明Views(視圖):負責業務邏輯,並在適當的時候調用model和template
1八、什麼是同源策略
同源策略是一種約定,它是瀏覽器最核心也是最基本的安全功能,若是缺乏同源策略,則瀏覽器的正常功能都會受到影響,能夠說web是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現。
所謂同源是指,域名,協議,端口相同。
1九、jsonp
jsonp是json用來跨域的一個東西,原理是經過script標籤的跨域特性來繞過同源策略
jsonp必定是GET請求
20、ajax經常使用的參數
URL:發送請求的地址
data:發送到服務器的數據,當前ajax請求要攜帶的數據,是一個json的object對象,ajax方法就會默認地把它編碼成某種格式
processdata:生命當前data數據是否進行轉碼或者預處理,默認爲True
contentType:默認值「application/x-www-form-urlencoded」,發送請求至服務器時內容編碼類型,用來指明當前請求的數據編碼格式,若是想以其餘方式提交數據,即向服務器發送一個json字符串traditional:通常默認爲True,通常是咱們的data數據有數組時會用到 :data:{a:22,b:33,c:["x","y"]},traditional爲false會對數據進行深層次迭代;
2一、csrf
{% csrf_token %}
Django中內置了一個專門處理csrf問題的中間件
一、在render返回頁面的時候,在頁面塞了一個隱藏的input標籤,
二、在提交post數據的時候,進行校驗,若是校驗不經過就拒絕此次請求。
2二、數據庫mysql知識點
mysql是基於一個socket編寫的C/S架構的軟件
視圖:用戶建立的一張虛擬表,用戶只須要使用其名稱便可獲取結果,只能夠作查詢用。
觸發器:對某張表進行增刪改查時,對操做先後自定義操做。
存儲過程:爲了完成特定功能的sql語句集,進過編譯後存儲在數據庫中,用戶經過制定存儲過程的名字並制定參數來調用存儲過程。
存儲過程的優勢:
a、用於替代程序寫sql語句,實現程序與sql的解耦
b、基於網絡傳輸,傳別名的數據量小,而直接傳sql的數據量大
事務:事務用於將某些操做的多個SQL做爲原子性操做,一旦有某一個出現錯誤,便可回滾到原來的狀態,從而保證數據庫數據的完整性
mysql的數據基本類型:
a、數值類型:整數類型,浮點型,位類型,
b、日期類型
c、字符串類型:char類型(固定長度),varchar類型(可變長度)
d、枚舉類型(enum)和集合類型(set)
枚舉類型(enum):單選,只能在給定的範圍選一個值
集合類型(set) :多選,在給定的範圍內選一個或者一個以上的值
2二、生成器、迭代器和可迭代對象區別和應用?
生成器:1. 列表生成式的[ ]改成( ) 2. 函數中包含yield 3.生成器能夠節省內存 4.生成器就是迭代器的一種
迭代器:可迭代對象執行obj.__iter__()獲得的結果就是迭代器對象
爲什麼要有迭代器?
對於序列類型:字符串、列表、元組,咱們可使用索引的方式迭代取出其包含的元素。但對於字典、集合、文件等類型是沒有索引的,若還想取出其內部包含的元素,則必須找出一種不依賴於索引的迭代方式,這就是迭代器
可迭代對象:可迭代對象指的是內置有__iter__方法的對象
23、with 上下文機制原理?
上下文管理器是能夠在with語句中使用,擁有__enter__和__exit__方法的對象。
# coding:utf-8 class Foo(): def __enter__(self): print('開始了') def __exit__(self, exc_type, exc_val, exc_tb): print('結束了') obj = Foo() with obj: print('我在中間')
24、staticmethod、classmethod,property
@property屬性方法,僅有一個self參數,調用時不用加()。
@classmethod把一個方法變成類方法,不須要依託任何對象,當一個方法只使用了累的靜態方法是,就給這個方法加上,默認傳cls參數
@staticmethod在徹底面向對象的過程當中,若是一個函數既和對象沒有關係,也和類沒有關係,那麼就用@staticmethod,將這個函數變成一個靜態方法。類方法和靜態方法都是類調用,類方法有一個默認參數cls,表明這個類,靜態方法沒有默認參數,就像函數同樣。
class Foo(): @classmethod def eat(cls): print('吃屎') @property def play(self): print('打籃球') @staticmethod def get(): print('name is dog') Foo.eat() Foo.get() obj = Foo() obj.play