1.python基礎html
1.Python和Java、PHP、C、C#、C++等其餘語言的對比?前端
答:vue
2.簡述解釋型和編譯型編程語言?python
答:解釋型語言,在運行時才進行翻譯,每條語句都是執行時才進行翻譯,效率比較低;mysql
編譯型語言,執行前需將高級語言編譯成機器語言,翻譯只作一次,執行效率較高;ios
3.位和字節的關係?web
答:位,數據傳輸單位;字節,數據存儲單位;ajax
4.b、B、KB、MB、GB 的關係?redis
答:B->GB爲1024關係;1B=8bitsql
5.經過代碼實現以下轉換:
二進制轉換成十進制:v = 「0b1111011」
int("0b1111011",base=2)
十進制轉換成二進制:v = 18
bin(18)
八進制轉換成十進制:v = 「011」
int("011",base=8)
十進制轉換成八進制:v = 30
oct(30)
十六進制轉換成十進制:v = 「0x12」
int("0x12",base=16)
十進制轉換成十六進制:v = 87 hex(87)
6.請編寫一個函數實現將IP地址轉換成一個整數。
7.python遞歸的最大層數?
答:由sys.setrecursionlimit()設置;
8.求結果:
v1 = 1 or 3
1
v2 = 1 and 3
3
v3 = 0 and 2 and 1 0
v4 = 0 and 2 or 1 1
v5 = 0 and 2 or 1 or 4 1
v6 = 0 or Flase and 1 False
9.ascii、unicode、utf-八、gbk 區別?
答:ascii ,美國製定了一套字符編碼,對英文字符與二進制之間作了聯繫,這被稱爲ASCII碼;
unicode,全部符號的編碼;
utf-8,它是一種變長編碼,可使用1-4個字節表示一個符號,根據不一樣的符號來變化字節長度;
gbk,GB2312的擴展,徹底兼容GB2312;
10.字節碼和機器碼的區別?
答:機器碼,名機器語言指令,有時也被稱爲原生碼(Native Code),是電腦的CPU可直接解讀的數據。
字節碼(Bytecode)是一種包含執行程序、由一序列 op 代碼/數據對 組成的二進制文件。
11.三元運算規則以及應用場景?
答:在賦值變量的時候,能夠直接加判斷,而後賦值
12.列舉 Python2和Python3的區別?
答:
13.用一行代碼實現數值交換:
a = 1
b = 2
答:a,b = b,a
14.Python3和Python2中 int 和 long的區別?
答:3中沒有long
15.xrange和range的區別?
答:xrange返回的是一個生成器對象;
16.文件操做時:xreadlines和readlines的區別?
17.列舉布爾值爲False的常見值?
答:None,False,全部爲0的數,「」,[],(),{};
18.字符串、列表、元組、字典每一個經常使用的5個方法?
答:字符串,strip、lstrip、rstrip、count、center、find、index、replace、capitalize、startwith、endwith、split、rsplite、join
列表,append、insert、extend、pop、del、reverse、sort、len、max、min、count、index、sorted、insert
字典,get、pop、len、del
19.lambda表達式格式以及應用場景?
答:lambda argument_list:expression
filter、sorted、map、reduce、做爲參數傳入
20.pass的做用?
答:做爲空語句,保持程序結構的完整性,不作任何事情,通常用於作佔位語句
21.*arg和**kwarg做用?
答:python的兩個可變參數,*arg表明多個無名參數,類型未tuple,**kwargs表示關鍵字參數,爲dict使用時須要將*rag放置在**kwargs以前,不然會報錯;
22. is和==的區別
答:is判斷id是否相同,==判斷值是否相同
23.簡述Python的深淺拷貝以及應用場景?
答:淺拷貝是隻僅僅拷貝數據集合的第一層數據,深拷貝指的是拷貝數據集合的全部層。因此對於只有一層的數據幾個來講深淺拷貝的意義是同樣的,如字典、元祖、集合、列表等。對於數字和字符串而言,無心義,因其永遠指向一個內存地址。
24.Python的垃圾回收機制?
25.Python的可變類型和不可變類型
答:可變類型,列表、字典、可變集合;不可變類型,數字、字符串、元組、不可變集合
26.求結果:
v = dict.fromkeys(['k1','k2'],[]) v[‘k1’].append(666) print(v) v[‘k1’] = 777 print(v)
答:{「K1」:[666],"K2":[666]} {「K1」:777,"K2":[666]}
27.求結果
def num(): return [lambda x:i*x for i in range(4)] print([m(2) for m in num()])
答:[6,6,6,6]
28.列舉常見的內置函數?
答:map、reduce、filter、sort
29.filter、map、reduce的做用?
答:filter,篩選;map,生成新序列;reduce,累加;
30.一行代碼實現9*9乘法表
答:
print('\n'.join(['\t'.join(["%2s*%2s=%2s"%(j,i,i*j) for j in range(1,i+1)]) for i in range(1,10)]))
31.如何安裝第三方模塊?以及用過哪些第三方模塊?
答:①pip install model_name;②python setup.py insyall;
32.至少列舉8個經常使用模塊都有那些?
33.re的match和search區別?
答:match只檢測開頭,search檢測整個字符串;
34.什麼是正則的貪婪匹配?
答:貪婪匹配,趨向於最大長度;非貪婪匹配,匹配到結果就好,就少得匹配字符;
35.求結果: a. [ i % 2 for i in range(10) ] b. ( i % 2 for i in range(10) )
答:[0,1,0,1,0,1,0,1,0,1],(0,1)
36.求結果: a. 1 or 2 b. 1 and 2 c. 1 < (2==2) d. 1 < 2 == 2
答:1,2,False,True
37.def func(a,b=[]) 這種寫法有什麼坑?
答:函數的第二個默認參數是一個list,當第一次執行的時候實例化了一個list,第二次執行仍是用第一次執行的時候實例化的地址存儲,因此三次執行的結果就是 [1, 1, 1] ,想每次執行只輸出[1] ,默認參數應該設置爲None。
38.如何實現 「1,2,3」 變成 [‘1’,’2’,’3’] ?
答:split
39.如何實現[‘1’,’2’,’3’]變成[1,2,3] ?
答:eval([‘1’,’2’,’3’])
40.比較: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的區別?
41.如何用一行代碼生成[1,4,9,16,25,36,49,64,81,100] ?
答:
[x*x for x in range(1,11)]
42.一行代碼實現刪除列表中重複的值 ?
set(list)
43.如何在函數中設置一個全局變量 ?
答:global
44.logging模塊的做用?以及應用場景?
45.請用代碼簡答實現stack ;
答:
calss Stack(object): def __init__(self): self.stack = [] def push(seld,value): self.stack.append(value) def pop(self): if self.stack: self.stack.pop() else: raise LookupError("stack is empty!") def is_empty(self): return bool(self,stack) def top(self): return self.stack[-1]
46.經常使用字符串格式化哪幾種?
答:①%s;②%(first)s;③format;
47.簡述 生成器、迭代器、可迭代對象 以及應用場景?
答:生成器,函數體中有yield關鍵字的函數;
迭代器,一個能夠記住遍歷位置的對象;__iter__()返回一個特殊地迭代器對象,__next__()返回下一個迭代器對象
48.用Python實現一個二分查找的函數。
答:
data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35] def binary_search(dataset,find_num): if len(dataset) > 1: mid = int(len(dataset) / 2) if dataset[mid] == find_num: # find it print("找到數字", dataset[mid]) elif dataset[mid] > find_num: # 找的數在mid左面 print("\033[31;1m找的數在mid[%s]左面\033[0m" % dataset[mid]) return binary_search(dataset[0:mid], find_num) else: # 找的數在mid右面 print("\033[32;1m找的數在mid[%s]右面\033[0m" % dataset[mid]) return binary_search(dataset[mid + 1:], find_num) else: if dataset[0] == find_num: # find it print("找到數字啦", dataset[0]) else: print("沒的分了,要找的數字[%s]不在列表裏" % find_num) binary_search(data,20)
49.談談你對閉包的理解?
答:在一個外函數中定義了一個內函數,內函數裏運用了外函數的臨時變量,而且外函數的返回值是內函數的引用。這樣就構成了一個閉包。
50.os和sys模塊的做用?
答:os,提供一種方便的使用操做系統的函數的方法;
sys,可供解釋器使用或維護的變量和解釋器進行交互的函數;
51.如何生成一個隨機數?
答:使用random函數;
55.如何使用python刪除一個文件?
答:os模塊,os.remove,os.removedirs(path),os.rmdir(path)
56.談談你對面向對象的理解?
答:所謂的面向對象就是將咱們的程序模塊化,對象化,把具體事物的特性屬性和經過這些屬性來實現一些動做的具體方法放到一個類裏面,這就是封裝。封裝是咱們所說的面相對象編程的特徵之一。除此以外還有繼承和多態。
57.談談你對面向對象的理解?
58.Python面向對象中的繼承有什麼特色?
答:建造系統中的類,避免重複操做;新類是基於已經存在的類,這樣能夠提高代碼的複用程度
59.面向對象深度優先和廣度優先是什麼?
答:
60.面向對象中super的做用?
答:用於調用父類的一個方法
61.是否使用過functools中的函數?其做用是什麼?
答:用於高階函數,指那些做用於函數或者返回其餘函數的函數。一般狀況下,只要是能夠被當作函數調用的對象就是這個模塊的目標。
62.列舉面向對象中帶爽下劃線的特殊方法,如:__new__、__init__
63.如何判斷是函數仍是方法?
答:函數,函數是封裝了一些獨立的功能,能夠直接調用,python內置了許多函數,同時能夠自建函數來使用。
方法:方法和函數相似,一樣封裝了獨立的功能,可是方法是須要經過對象來調用的,表示針對這個對象要作的操做,使用時採用點方法。
64.靜態方法和類方法區別?
答:均可以經過實例或者類調用,不過實例方法經過類調用時須要傳遞實例的引用;
65.列舉面向對象中的特殊成員以及應用場景
答:__doc__描述類的信息
__call__對象後面加括號,觸發執行
__dict__查看類或對象的全部成員
__str__打印對象時,默認輸出該方法的返回值
__getitem__,__setitem__,__delitem__用於索引操做,如字典,分別表示獲取,設置,刪除數據
__new__,__metaclass__
66.一、二、三、四、5 能組成多少個互不相同且無重複的三位數
答:
67.什麼是反射?以及應用場景?
答:核心本質其實就是利用字符串的形式去對象(模塊)中操做(查找/獲取/刪除/添加)成員,一種基於字符串的事件驅動
68.metaclass做用?以及應用場景?
答:MetaClass是用來建立類的,就比如類是用來建立對象的。若是說類是對象的模板,那麼metaclass就是類的模板。
直接將須要的屬性所有做爲新組合類的成員列出來;
分別將各個獨立的屬性集定義成單個的類,而後經過在組合類添加每一個屬性類的實例(instance)的方式來引用各個屬性類中定義的屬性;
69.用盡可能多的方法實現單例模式。
答:
#模塊單例 #fool.py class Singleton(object): def foo(self): pass singleton = Singleton() #foo.py from fool import singleton
#靜態變量方法 class Singleton(object): def __new__(cls,a): if not hasattr(cls."_instance"): cls._instance =object.__new__(cls) return cls._instance def __init__(self,a): self.a=a def aa(self): print(a) a=Singleton("a")
class Singleton1(type): def __init__(self, *args, **kwargs): self.__instance = None super(Singleton1,self).__init__(*args, **kwargs) def __call__(self, *args, **kwargs): if self.__instance is None: self.__instance = super(Singleton1,self).__call__(*args, **kwargs) return self.__instance class Singleton2(type): _inst = {} def __call__(cls, *args, **kwargs): print(cls) if cls not in cls._inst: cls._inst[cls] = super(Singleton2, cls).__call__(*args) return cls._inst[cls] class C(metaclass=Singleton1): pass
def singleton(cls, *args, **kw): instance = {} def _singleton(args): if cls not in instance: instance[cls] = cls(*args, **kw) return instance[cls] return _singleton @singleton class A: pass
70.裝飾器的寫法以及應用場景。
答:python裝飾器本質上就是一個函數,它可讓其餘函數在不須要作任何代碼變更的前提下增長額外的功能,裝飾器的返回值也是一個函數對象(函數的指針)
①受權;②日誌;③帶參數的裝飾器;④在函數中嵌入裝飾器;⑤裝飾器類
71.異常處理寫法以及如何主動跑出異常(應用場景)
答:
try: pass except Exception as e: print(str(e)) else: pass finally: pass #主動拋出異常 raise TypeError("error!")
72.什麼是面向對象的mro
答:方法解析順序
經典類(calssic class),深度優先遍歷當用super調用父類的方法時,會按照__mro__屬性中的元素順序去挨個查找方法。咱們能夠經過「類名.__mro__」或「類名.mro()」來查看上面代碼中D類的__mro__屬性值:
73.isinstance做用以及應用場景?
答:來判斷一個對象是不是一個已知的類型;
判斷object是否與第二個參數的類型相同
74.寫代碼並實現:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would
have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1]
75.json序列化時,能夠處理的數據類型有哪些?如何定製支持datetime類型?
答: string、int、list、tuple、dict、bool、null
定製支持datetime類型
76.json序列化時,默認遇到中文會轉換成unicode,若是想要保留中文怎麼辦?
答:
import json a=json.dumps({"ddf":"你好"},ensure_ascii=False) print(a) #{"ddf": "你好"}
77.什麼是斷言?應用場景?
答:是用來檢查一個條件,若是它爲真,就不作任何事。若是它爲假,則會拋出AssertError而且包含錯誤信息。例如:
防護型的編程
運行時檢查程序邏輯
檢查約定
程序常量
檢查文檔
78.有用過with statement嗎?它的好處是什麼?
答:語句的做用是經過某種方式簡化異常處理,它是所謂的上下文管理器的一種
79.使用代碼實現查看列舉目錄下的全部文件。
80.簡述 yield和yield from關鍵字。
答:yield from generator 。實際上就是返回另一個生成器
yield 生成器
2.網絡編程和併發
1.簡述 OSI 七層協議。
答:物理層,數據鏈接層,網絡層,傳輸層,會話層,表示層,應用層
2.什麼是C/S和B/S架構?
答:C/S是客戶端和服務器端結構;B/S是瀏覽器和服務器結構;
3.簡述 三次握手、四次揮手的流程。
答:三次握手,①鏈接開始時,鏈接創建發送SYN包到服務器,並進入SYN_SENT狀態,等待服務器確認;SYN:同步序列號編號;②服務器收到SYN包,並確認SYN,同時發送本身的一個SYN包,即SYN+ACK包,此事服務器進入SYN_RECV狀態;③客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK,此包發送完畢,客戶端與服務器同時進入ESTABLISHED狀態,完成三次握手;
四次握手
4.什麼是arp協議?
答:地址解析協議,使用ARP協議可實現經過IP地址得到對應主機的物理地址(MAC地址)。
5.TCP和UDP的區別?
答:
一、TCP面向鏈接(如打電話要先撥號創建鏈接);UDP是無鏈接的,即發送數據以前不須要創建鏈接
二、TCP提供可靠的服務。也就是說,經過TCP鏈接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付
三、TCP面向字節流,其實是TCP把數據當作一連串無結構的字節流;UDP是面向報文的
UDP沒有擁塞控制,所以網絡出現擁塞不會使源主機的發送速率下降(對實時應用頗有用,如IP電話,實時視頻會議等)
四、每一條TCP鏈接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通訊
五、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節
六、TCP的邏輯通訊信道是全雙工的可靠信道,UDP則是不可靠信道
6.什麼是局域網和廣域網?
答:局域網和廣域網是按規模大小而劃分的兩種計算機網絡。範圍在幾公里之內的計算機網絡統稱爲局域網;而鏈接的範圍超過10公里的,則稱爲廣域網,因特網(Intenet)就是目前最大的廣域網。
7.爲什麼基於tcp協議的通訊比基於udp協議的通訊更可靠?
8.什麼是socket?簡述基於tcp協議的套接字通訊流程。
9.什麼是粘包? socket 中形成粘包的緣由是什麼? 哪些狀況會發生粘包現象?
10.IO多路複用的做用?
11.什麼是防火牆以及做用?
12.select、poll、epoll 模型的區別?
13.簡述 進程、線程、協程的區別 以及應用場景?
14.GIL鎖是什麼鬼?
15.Python中如何使用線程池和進程池?
16.threading.local的做用?
17.進程之間如何進行通訊?
18.什麼是併發和並行?
19.進程鎖和線程鎖的做用?
20.解釋什麼是異步非阻塞?
21.路由器和交換機的區別?
22.什麼是域名解析?
23.如何修改本地hosts文件?
24.生產者消費者模型應用場景及優點?
25.什麼是cdn?
26.LVS是什麼及做用?
27.Nginx是什麼及做用?
28.keepalived是什麼及做用?
29.haproxy是什麼以及做用?
30.什麼是負載均衡
31.什麼是rpc及應用場景?
32.簡述 asynio模塊的做用和應用場景。
33.簡述 gevent模塊的做用和應用場景。
34.twisted框架的使用和應用?
3.數據庫和緩存
1.列舉常見的關係型數據庫和非關係型都有那些?
答:關係型,Oracle、DB二、Microsoft SQL Server、Microsoft Access、MySQL
非關係型,NoSql、Cloudant、MongoDb、redis、HBase
2.MySQL常見數據庫引擎及比較?
答:
3.簡述數據三大範式?
答:①當關系模式R的全部屬性都不能在分解爲更基本的數據單位時,稱R是知足第一範式的,簡記爲1NF。知足第一範式是關係模式規範化的最低要
②若是關係模式R知足第一範式,而且R得全部非主屬性都徹底依賴於R的每個候選關鍵屬性,稱R知足第二範式,簡記爲2NF。
③設R是一個知足第一範式條件的關係模式,X是R的任意屬性集,若是X非傳遞依賴於R的任意一個候選關鍵字,稱R知足第三範式,簡記爲3NF.
4.什麼是事務?MySQL如何支持事務?
答:事務是由一步或幾步數據庫操做序列組成邏輯齒形單元,這系列妖魔所有執行,要麼所有放棄執行。具備原子性,一致性,隔離性,持續性。
①begin,rollback,commit來實現;②直接使用set來改變mysql的自動提交模式;
5.簡述數據庫設計中一對多和多對多的應用場景?
答:一對一,外鍵關聯、主鍵關聯;
多對多,通常採用中間表的方式處理,將多對多表轉化爲兩個一對多;
6.如何基於數據庫實現商城商品計數器?
答:
create table product (id primary key auto_increment, pname varchar(64), pcount int);
7.常見SQL(必備)
詳見武沛齊博客:https://www.cnblogs.com/wupeiqi/articles/5729934.html
8.簡述觸發器、函數、視圖、存儲過程?
9.MySQL索引種類
普通索引:這是最基本的索引,它沒有任何限制,好比上文中爲title字段建立的索引就是一個普通索引,MyIASM中默認的BTREE類型的索引,也是咱們大多數狀況下用到的索引。
–直接建立索引 CREATE INDEX index_name ON table(column(length)) –修改表結構的方式添加索引 ALTER TABLE table_name ADD INDEX index_name ON (column(length)) –建立表的時候同時建立索引 CREATE TABLE `table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL , `time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`), INDEX index_name (title(length)) ) –刪除索引 DROP INDEX index_name ON table
惟一索引:與普通索引相似,不一樣的就是:索引列的值必須惟一,但容許有空值(注意和主鍵不一樣)。若是是組合索引,則列值的組合必須惟一,建立方法和普通索引相似
–建立惟一索引 CREATE UNIQUE INDEX indexName ON table(column(length)) –修改表結構 ALTER TABLE table_name ADD UNIQUE indexName ON (column(length)) –建立表的時候直接指定 CREATE TABLE `table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL , `time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`), UNIQUE indexName (title(length)) );
全文索引:MySQL從3.23.23版開始支持全文索引和全文檢索,FULLTEXT索引僅可用於 MyISAM 表;他們能夠從CHAR、VARCHAR或TEXT列中做爲CREATE TABLE語句的一部分被建立,或是隨後使用ALTER TABLE 或CREATE INDEX被添加。////對於較大的數據集,將你的資料輸入一個沒有FULLTEXT索引的表中,而後建立索引,其速度比把資料輸入現有FULLTEXT索引的速度更爲快。不過切記對於大容量的數據表,生成全文索引是一個很是消耗時間很是消耗硬盤空間的作法。
–建立表的適合添加全文索引 CREATE TABLE `table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL , `time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`), FULLTEXT (content) ); –修改表結構添加全文索引 ALTER TABLE article ADD FULLTEXT index_content(content) –直接建立索引 CREATE FULLTEXT INDEX index_content ON article(content)
組合索引(最左前綴):平時用的SQL查詢語句通常都有比較多的限制條件,因此爲了進一步榨取MySQL的效率,就要考慮創建組合索引。
–使用到上面的索引 SELECT * FROM article WHREE title='測試' AND time=1234567890; SELECT * FROM article WHREE utitle='測試'; –不使用上面的索引 SELECT * FROM article WHREE time=1234567890;
10.索引在什麼狀況下遵循最左前綴的規則?
11.主鍵和外鍵的區別?
答:主鍵,惟一標識一條記錄,不能有重複的,不容許爲空
外鍵,表的外鍵是另外一表的主鍵, 外鍵能夠有重複的, 能夠是空值
12.MySQL常見的函數?
答:字符串函數,數字函數,日期函數,高級函數
13.列舉 建立索引可是沒法命中索引的8種狀況。
答:①若是條件中有or,即便其中有條件帶索引也不會使用;②對於多列索引,不是使用的第一部分(第一個),則不會使用索引;③like查詢是以%開頭;④若是列類型是字符串,那必定要在條件中將數據使用引號引用起來,不然不使用索引;⑤若是mysql估計使用全表掃描要比使用索引快,則不使用索引;
14.如何開啓慢日誌查詢?
答:開啓慢查詢日誌,可讓MySQL記錄下查詢超過指定時間的語句,經過定位分析性能的瓶頸,才能更好的優化數據庫系統的性能。
#查看慢查詢相關參數 show variables like 'slow_query%'; show variables like 'long_query_time'; #設置,臨時生效 set global slow_query_log='ON'; set global slow_query_log_file='/var/lib/mysql/test-10-226-slow.log'; set global long_query_time=1; #設置,永久生效 #編輯配置文件/etc/my.cnf加入以下內容 [mysqld] slow_query_log = ON slow_query_log_file = /var/lib/mysql/test-10-226-slow.log long_query_time = 1
15.數據庫導入導出命令(結構+數據)?
答:
16.數據庫優化方案?
答:
17.char和varchar的區別?
答:char的長度是不可變的;varchar的長度是可變的
18.簡述MySQL的執行計劃?
答:
19.在對name作了惟一索引前提下,簡述如下區別:
select * from tb where name = ‘Oldboy-Wupeiqi’
select * from tb where name = ‘Oldboy-Wupeiqi’ limit 1
答:切片的做用類似,沒有步進參數
20.1000w條數據,使用limit offset 分頁時,爲何越日後翻越慢?如何解決?
答:當一個數據庫表過於龐大,LIMIT offset, length中的offset值過大,則SQL查詢語句會很是緩慢
子查詢優化法;倒排表優化法;反向查找優化法;limit限制優化法;只查索引法
21.什麼是索引合併?
答:索引合併是把幾個索引的範圍掃描合併成一個索引;索引合併的時候,會對索引進行並集,交集或者先交集再並集操做,以便合併成一個索引;這些須要合併的索引只能是一個表的。不能對多表進行索引合併。
22.什麼是覆蓋索引?
答:若是索引的葉子節點包含了要查詢的數據,那麼就不用回表查詢了,也就是說這種索引包含(亦稱覆蓋)全部須要查詢的字段的值,咱們稱這種索引爲覆蓋索引。
23.簡述數據庫讀寫分離?
答:讓主數據庫處理事務性查詢,而從數據庫處理SELECT查詢。數據庫複製被用來把事務性查詢致使的變動同步到集羣中的從數據庫
24.簡述數據庫分庫分表?(水平、垂直)
答:
25.redis和memcached比較?
26.redis中數據庫默認是多少個db 及做用?
27.python操做redis的模塊?
28.若是redis中的某個列表中的數據量很是大,若是實現循環顯示每個值?
29.redis如何實現主從複製?以及數據同步機制?
30.redis中的sentinel的做用?
31.如何實現redis集羣?
32.redis中默認有多少個哈希槽?
33.簡述redis的有哪幾種持久化策略及比較?
34.列舉redis支持的過時策略。
35.MySQL 裏有 2000w 數據,redis 中只存 20w 的數據,如何保證 redis 中都是熱點數據?
36.寫代碼,基於redis的列表實現 先進先出、後進先出隊列、優先級隊列。
37.如何基於redis實現消息隊列?
38.如何基於redis實現發佈和訂閱?以及發佈訂閱和消息隊列的區別?
39.什麼是codis及做用?
40.什麼是twemproxy及做用?
41.寫代碼實現redis事務操做。
42.redis中的watch的命令的做用?
43.基於redis如何實現商城商品數量計數器?
44.簡述redis分佈式鎖和redlock的實現機制。
45.什麼是一致性哈希?Python中是否有相應模塊?
46.如何高效的找到redis中全部以oldboy開頭的key?
4.前端、框架和其餘
1.談談你對http協議的認識。
答:因特網上應用最普遍的一種網絡協議,基於TCP、IP通信協議來傳輸數據;
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請求中常見的請求方式?
答:GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE
16.列舉Http請求中的狀態碼?
答:200-請求成功;301 - 資源被永久轉移到其餘URL;404 - 請求的資源不存在;500 - 內部服務器錯誤
17.列舉Http請求中常見的請求頭?
答:Allow,Date,Location
18.看圖寫結果:
答:李傑
19.看圖寫結果:
答:武沛齊
20.看圖寫結果:
答:老男孩
21.看圖寫結果:
22.看圖寫結果:
23.看圖寫結果:
24.django、flask、tornado框架的比較?
25.什麼是wsgi?
答:一種描述web server與web appliaction的通信的規範
26.django請求的生命週期?
答:wsgi - 中間件 - 路由系統 - 視圖函數 - (ORM,Template,渲染)
27.列舉django的內置組件?
答:admin,model,form
28.列舉django中間件的5個方法?以及django中間件的應用場景?
答:Process Request:請求進來時,權限認證;
process view:路由匹配以後,可以獲得的視圖;
process exception:異常時執行;
process template responseprocess:模板渲染時執行
process response:請求有響應時執行
29.簡述什麼是FBV和CBV?
答:FBV,基於函數的視圖;CBV,基於類的視圖;
30.django的request對象是在何時建立的?
答:請求走到WSGIHandler類的時候,執行cell方法,將environ封裝成request
31.如何給CBV的程序添加裝飾器?
答:
from django.utils.decorators import method_decorator 1、給方法加: @method_decorator(check_login) def post(self, request): ... 2、給dispatch加: @method_decorator(check_login) def dispatch(self, request, *args, **kwargs): ... 3、給類加: @method_decorator(check_login, name="get") @method_decorator(check_login, name="post") class HomeView(View): ...
32.列舉django orm 中全部的方法(QuerySet對象的全部方法)
答:all(),filter(**kwargs),get(**kwargs),exclude(**kwargs),order_by(*field),reverse(),count(),first()
33.only和defer的區別?
答:only("id"),取的對象只有id,defer則除了id都有
34.select_related和prefetch_related的區別?
答:
前提:有外鍵存在時,能夠很好的減小數據庫請求的次數,提升性能
select_related經過多表join關聯查詢,一次性得到全部數據,只執行一次SQL查詢
prefetch_related分別查詢每一個表,而後根據它們之間的關係進行處理,執行兩次查詢
35.filter和exclude的區別?
答:二者取到的值都是QuerySet對象,filter選擇知足條件的,exclude:排除知足條件的.
36.列舉django orm中三種能寫sql語句的方法。
答:
1.使用execute執行自定義的SQL 直接執行SQL語句(相似於pymysql的用法) # 更高靈活度的方式執行原生SQL語句 from django.db import connection cursor = connection.cursor() cursor.execute("SELECT DATE_FORMAT(create_time, '%Y-%m') FROM blog_article;") ret = cursor.fetchall() print(ret) 2.使用extra方法 :queryset.extra(select={"key": "原生的SQL語句"}) 3.使用raw方法 1.執行原始sql並返回模型 2.依賴model多用於查詢
37.django orm 中如何設置讀寫分離?
答:
38.F和Q的做用?
答:Q查詢——對對象的複雜查詢;F查詢——專門取對象中某列值的操做;
39.values和values_list的區別?
答:values方法能夠獲取number字段的字典列表;values_list能夠獲取number的元組列表
40.如何使用django orm批量建立數據?
答:批量插入數據的時候,首先要建立一個對象的列表,而後調用bulk_create方法,一次將列表中的數據插入到數據庫中。
product_list_to_insert = list() for x in range(10): product_list_to_insert.append(Product(name='product name ' + str(x), price=x)) Product.objects.bulk_create(product_list_to_insert)
41.django的Form和ModeForm的做用?
答:form,①生成頁面可用的HTML標籤;②對用戶提交的數據進行校驗;③保留上次輸入的內容;
ModelForm,Django 提供一個輔助類來讓咱們能夠從Django 的模型建立Form
42.django的Form組件中,若是字段中包含choices參數,請使用兩種方式實現數據源實時更新。
答:
def__init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["city"].widget.choices = models.City.objects.all().values_list("id", "name") authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all())//多選
43.django的Model中的ForeignKey字段中的on_delete參數有什麼做用?
答:
44.django中csrf的實現機制?
答:
45.django如何實現websocket?
答:
django實現websocket官方推薦你們使用channels。channels經過升級http協議 升級到websocket協議。保證明時通信。也就是說,咱們徹底能夠用channels實現咱們的即時通信。而不是使用長輪詢和計時器方式來保證僞實時通信。他經過改造django框架,使django既支持http協議又支持websocket協議。
46.基於django使用ajax發送post請求時,均可以使用哪一種方法攜帶csrf token?
答:
後端將csrftoken傳到前端,發送post請求時攜帶這個值發送
data: { csrfmiddlewaretoken: '{{ csrf_token }}' },
獲取form中隱藏標籤的csrftoken值,加入到請求數據中傳給後端
data: { csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val() },
cookie中存在csrftoken,將csrftoken值放到請求頭中
headers:{ "X-CSRFtoken":$.cookie("csrftoken")}
47.django中如何實現orm表中添加數據時建立一條日誌記錄。
48.django緩存如何設置?
答:
# 全站緩存 MIDDLEWARE_CLASSES = ( ‘django.middleware.cache.UpdateCacheMiddleware’, #第一 'django.middleware.common.CommonMiddleware', ‘django.middleware.cache.FetchFromCacheMiddleware’, #最後 ) # 視圖緩存 from django.views.decorators.cache import cache_page import time @cache_page(15) #超時時間爲15秒 def index(request): t=time.time() #獲取當前時間 return render(request,"index.html",locals()) # 模板緩存 {% load cache %} <h3 style="color: green">不緩存:-----{{ t }}</h3> {% cache 2 'name' %} # 存的key <h3>緩存:-----:{{ t }}</h3> {% endcache %}
49.django的緩存能使用redis嗎?若是能夠的話,如何配置?
答:
#1.安裝 pip install django-redis #2.在stting中配置CACHES,能夠設置多個緩存,根據名字使用 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100} # "PASSWORD": "密碼", } } }, #另添加緩存 "JERD": { } #3.根據名字去鏈接池中獲取鏈接 from django_redis import get_redis_connection conn = get_redis_connection("default")
50.django路由系統中name的做用?
答:
51.django的模板中filter和simple_tag的區別?
答:
# 自定義filter:{{ 參數1|filter函數名:參數2 }} # 1.能夠與if標籤來連用 # 2.自定義時須要寫兩個形參 # simple_tag:{% simple_tag函數名 參數1 參數2 %} # 1.能夠傳多個參數,沒有限制 # 2.不能與if標籤來連用
filter,能夠與if標籤來連用,自定義是須要寫兩個形參;simple_tags,能夠傳多個參數沒有限制,不能與if連用;
52.django-debug-toolbar的做用?
答:1.是django的第三方工具包,給django擴展了調試功能
#包括查看sql語句,db查詢次數,request,headers等
53.django中如何實現單元測試?
答:
54.解釋orm中 db first 和 code first的含義?
#數據持久化的方式: #db first基於已存在的數據庫,生成模型 #code first基於已存在的模型,生成數據庫庫
55.django中如何根據數據庫表生成model中的類?
答:
#1.在settings中設置要鏈接的數據庫 #2.生成model模型文件 #python manage.py inspectdb #3.模型文件導入到models中 # python manage.py inspectdb > app/models.py
56.使用orm和原生sql的優缺點?
答:
#1.orm的開發速度快,操做簡單。使開發更加對象化 #執行速度慢。處理多表聯查等複雜操做時,ORM的語法會變得複雜 #2.sql開發速度慢,執行速度快。性能強
57.簡述MVC和MTV
答:
58.django的contenttype組件的做用?
答:
#這個組件保存了項目中全部app和model的對應關係,每當咱們建立了新的model並執行數據庫遷移後,ContentType表中就會自動新增一條記錄 #當一張表和多個表FK關聯,而且多個FK中只能選擇其中一個或其中n個時,能夠利用contenttypes
59.談談你對restfull 規範的認識?
60.接口的冪等性是什麼意思?
61.什麼是RPC?
62.Http和Https的區別?
63.爲何要使用django rest framework框架?
64.django rest framework框架中都有那些組件?
答:
#1.序列化組件:serializers 對queryset序列化以及對請求數據格式校驗 #2.路由組件routers 進行路由分發 #3.視圖組件ModelViewSet 幫助開發者提供了一些類,並在類中提供了多個方法 #4.認證組件 寫一個類並註冊到認證類(authentication_classes),在類的的authticate方法中編寫認證邏 #5.權限組件 寫一個類並註冊到權限類(permission_classes),在類的的has_permission方法中編寫認證邏輯。 #6.頻率限制 寫一個類並註冊到頻率類(throttle_classes),在類的的allow_request/wait 方法中編寫認證邏輯 #7.解析器 選擇對數據解析的類,在解析器類中註冊(parser_classes) #8.渲染器 定義數據如何渲染到到頁面上,在渲染器類中註冊(renderer_classes) #9.分頁 對獲取到的數據進行分頁處理, pagination_class #10.版本 版本控制用來在不一樣的客戶端使用不一樣的行爲 #在url中設置version參數,用戶請求時候傳入參數。在request.version中獲取版本,根據版本不一樣 作不一樣處理
65.django rest framework框架中的視圖均可以繼承哪些類?
答:
#class View(object): #class APIView(View): 封裝了view,而且從新封裝了request,初始化了各類組件 #class GenericAPIView(views.APIView): #1.增長了一些屬性和方法,如get_queryset,get_serializer #class GenericViewSet(ViewSetMixin, generics.GenericAPIView) #父類ViewSetMixin 重寫了as_view,返回return csrf_exempt(view) #並從新設置請求方式與執行函數的關係 #class ModelViewSet(mixins.CreateModelMixin, # mixins.RetrieveModelMixin, # mixins.UpdateModelMixin, # mixins.DestroyModelMixin, # mixins.ListModelMixin, # GenericViewSet):pass #繼承了mixins下的一些類,封裝了list,create,update等方法 #和GenericViewSet
66.簡述 django rest framework框架的認證流程。
答:
#1.用戶請求走進來後,走APIView,初始化了默認的認證方法 #2.走到APIView的dispatch方法,initial方法調用了request.user #3.若是咱們配置了認證類,走咱們本身認證類中的authentication方法
67.django rest framework如何實現的用戶訪問頻率控制?
答:
#使用IP/用戶帳號做爲鍵,每次的訪問時間戳做爲值,構造一個字典形式的數據,存起來,每次訪問時對時間戳列表的元素進行判斷, #把超時的刪掉,再計算列表剩餘的元素數就能作到頻率限制了 #匿名用戶:使用IP控制,可是沒法徹底控制,由於用戶能夠換代理IP登陸用戶:使用帳號控制,可是若是有不少帳號,也沒法限制