Python面试常用二十题总结
1.請(qǐng)至少用一種方法下面字符串的反轉(zhuǎn)?
1).A[::-1]
2).交換前后字母的位置
t = list(A)
l = len(t)
for i, j inzip(range(l - 1, 0, -1), range(l // 2)):
??????? t[i], t[j] = t[j], t[i]
return"".join(t)
3). 遞歸的方式, 每次輸出一個(gè)字符
defstring_reverse3(string):?
??? if len(string) <= 1:?
??????? return string?
??? return string_reverse3(string[1:]) +string[0]
2.請(qǐng)手寫(xiě)一個(gè)lambda函數(shù)
Sum = Lambda a,b:a+b
3.請(qǐng)手寫(xiě)一個(gè)函數(shù),用來(lái)取出1—100(均包含)中9的倍數(shù)或者有數(shù)字9的所有整數(shù)
For I inxrange(1,101):
?????? If i%9 == 0 or “9” in str(I):
???????????? Print i
4.? Python里面如何實(shí)現(xiàn)tuple和list的轉(zhuǎn)換
直接用tuple和list函數(shù)
5.? Python里面match()和search()的區(qū)別?
re模塊中match(pattern,string[,flags]),檢查string的開(kāi)頭是否與pattern匹配。
re模塊中research(pattern,string[,flags]),在string搜索pattern的第一個(gè)匹配值。
6.請(qǐng)用至少一種方法刪除下面list里面的重復(fù)元素
1).A=list(set(A))
2).A =[1,2,3,4,5,1,5]
List = []
for i in A:
??? if I not in List:
??? ?????? List.append(i)
print List
?
7.請(qǐng)簡(jiǎn)述python中單例模式的特點(diǎn),并手寫(xiě)一個(gè)單例模式?
單例模式的要點(diǎn)有三個(gè);一是某個(gè)類(lèi)只能有一個(gè)實(shí)例;二是它必須自行創(chuàng)建這個(gè)實(shí)例;三是它必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。
classSingleton(object):
__instance=None
def__init__(self):
?????? pass
def__new__(cls,*args,**kwd):
?????? if Singleton.__instance is None:
???????????? Singleton.__instance=object.__new__(cls,*args,**kwd)
?????? return Singleton.__instance
8.請(qǐng)簡(jiǎn)述值傳遞和引用傳遞的區(qū)別?
值傳遞僅僅傳遞的是值
引用傳遞,傳遞的是內(nèi)存地址,修改后會(huì)改變內(nèi)存地址對(duì)應(yīng)儲(chǔ)存的值。
9.請(qǐng)手寫(xiě)一個(gè)匹配ip的正則表達(dá)式?
^(?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5])|(?:[1-9][0-9])|(?:[0-9]))$
^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$'
10.mysql數(shù)據(jù)庫(kù)的優(yōu)化?
1. 優(yōu)化索引、SQL 語(yǔ)句、分析慢查詢(xún);
2. 設(shè)計(jì)表的時(shí)候嚴(yán)格根據(jù)數(shù)據(jù)庫(kù)的設(shè)計(jì)范式來(lái)設(shè)計(jì)數(shù)據(jù)庫(kù);
3. 使用緩存,把經(jīng)常訪(fǎng)問(wèn)到的數(shù)據(jù)而且不需要經(jīng)常變化的數(shù)據(jù)放在緩存中,能節(jié)約磁盤(pán)IO;
4. 優(yōu)化硬件;采用SSD,使用磁盤(pán)隊(duì)列技術(shù)(RAID0,RAID1,RDID5)等;
5. 采用MySQL 內(nèi)部自帶的表分區(qū)技術(shù),把數(shù)據(jù)分層不同的文件,能夠提高磁盤(pán)的讀取效率;
6. 垂直分表;把一些不經(jīng)常讀的數(shù)據(jù)放在一張表里,節(jié)約磁盤(pán)I/O;
7. 主從分離讀寫(xiě);采用主從復(fù)制把數(shù)據(jù)庫(kù)的讀操作和寫(xiě)入操作分離開(kāi)來(lái);
8. 分庫(kù)分表分機(jī)器(數(shù)據(jù)量特別大),主要的的原理就是數(shù)據(jù)路由;
9. 選擇合適的表引擎,參數(shù)上的優(yōu)化;
10. 進(jìn)行架構(gòu)級(jí)別的緩存,靜態(tài)化和分布式;
11. 不采用全文索引;
12. 采用更快的存儲(chǔ)方式,例如NoSQL存儲(chǔ)經(jīng)常訪(fǎng)問(wèn)的數(shù)
?
11.進(jìn)程間通信(IPC)有那些方式?
1.??? 管道(Pipe):管道可用于具有親緣關(guān)系進(jìn)程間的通信,允許一個(gè)進(jìn)程和另一個(gè)與它有共同祖先的進(jìn)程之間進(jìn)行通信。
2.??? 命名管道(named pipe):命名管道克服了管道沒(méi)有名字的限制,因此,除具有管道所具有的功能外,它還允許無(wú)親緣關(guān)系進(jìn)程間的通信。命名管道在文件系統(tǒng)中有對(duì)應(yīng)的文件名。命名管道通過(guò)命令mkfifo或系統(tǒng)調(diào)用mkfifo來(lái)創(chuàng)建。
3.??? 信號(hào)(Signal):信號(hào)是比較復(fù)雜的通信方式,用于通知接受進(jìn)程有某種事件發(fā)生,除了用于進(jìn)程間通信外,進(jìn)程還可以發(fā)送信號(hào)給進(jìn)程本身;linux除了支持Unix早期信號(hào)語(yǔ)義函數(shù)sigal外,還支持語(yǔ)義符合Posix.1標(biāo)準(zhǔn)的信號(hào)函數(shù)sigaction(實(shí)際上,該函數(shù)是基于BSD的,BSD為了實(shí)現(xiàn)可靠信號(hào)機(jī)制,又能夠統(tǒng)一對(duì)外接口,用sigaction函數(shù)重新實(shí)現(xiàn)了signal函數(shù))。
4.??? 消息(Message)隊(duì)列:消息隊(duì)列是消息的鏈接表,包括Posix消息隊(duì)列system V消息隊(duì)列。有足夠權(quán)限的進(jìn)程可以向隊(duì)列中添加消息,被賦予讀權(quán)限的進(jìn)程則可以讀走隊(duì)列中的消息。消息隊(duì)列克服了信號(hào)承載信息量少,管道只能承載無(wú)格式字節(jié)流以及緩沖區(qū)大小受限等缺
5.??? 共享內(nèi)存:使得多個(gè)進(jìn)程可以訪(fǎng)問(wèn)同一塊內(nèi)存空間,是最快的可用IPC形式。是針對(duì)其他通信機(jī)制運(yùn)行效率較低而設(shè)計(jì)的。往往與其它通信機(jī)制,如信號(hào)量結(jié)合使用,來(lái)達(dá)到進(jìn)程間的同步及互斥。
6.??? 內(nèi)存映射(mapped memory):內(nèi)存映射允許任何多個(gè)進(jìn)程間通信,每一個(gè)使用該機(jī)制的進(jìn)程通過(guò)把一個(gè)共享的文件映射到自己的進(jìn)程地址空間來(lái)實(shí)現(xiàn)它。
7.??? 信號(hào)量(semaphore):主要作為進(jìn)程間以及同一進(jìn)程不同線(xiàn)程之間的同步手段。
8.??? 套接口(Socket):更為一般的進(jìn)程間通信機(jī)制,可用于不同機(jī)器之間的進(jìn)程間通信。起初是由Unix系統(tǒng)的BSD分支開(kāi)發(fā)出來(lái)的,但現(xiàn)在一般可以移植到其它類(lèi)Unix系統(tǒng)上:Linux和System V的變種都支持套接字
?
12.簡(jiǎn)述這兩個(gè)參數(shù)是什么意思:*args,**kwargs?我們?yōu)槭裁匆褂盟鼈?#xff1f;
*args 當(dāng)我們不知道要有多少個(gè)參數(shù)傳給函數(shù),或者我們想把一個(gè)列表或者tuple存起來(lái)以后傳給函數(shù)。
**kwargs當(dāng)我們不知道有多少個(gè)關(guān)鍵字參數(shù)要傳給函數(shù),或者我們想把字典存起來(lái)以后傳給函數(shù)
13.談?wù)勀銓?duì)python多線(xiàn)程的理解?
在Python多線(xiàn)程下,每個(gè)線(xiàn)程的執(zhí)行方式:
1、獲取GIL
2、執(zhí)行代碼直到sleep或者是python虛擬機(jī)將其掛起。
3、釋放GIL
1、CPU密集型代碼(各種循環(huán)處理、計(jì)數(shù)等等),在這種情況下,由于計(jì)算工作多,ticks計(jì)數(shù)很快就會(huì)達(dá)到閾值,然后觸發(fā)GIL的釋放與再競(jìng)爭(zhēng)(多個(gè)線(xiàn)程來(lái)回切換當(dāng)然是需要消耗資源的),所以python下的多線(xiàn)程對(duì)CPU密集型代碼并不友好。???????
2、IO密集型代碼(文件處理、網(wǎng)絡(luò)爬蟲(chóng)等),多線(xiàn)程能夠有效提升效率(單線(xiàn)程下有IO操作會(huì)進(jìn)行IO等待,造成不必要的時(shí)間浪費(fèi),而開(kāi)啟多線(xiàn)程能在線(xiàn)程A等待時(shí),自動(dòng)切換到線(xiàn)程B,可以不浪費(fèi)CPU的資源,從而能提升程序執(zhí)行效率)。所以python的多線(xiàn)程對(duì)IO密集型代碼比較友好。
而在python3.x中,GIL不使用ticks計(jì)數(shù),改為使用計(jì)時(shí)器(執(zhí)行時(shí)間達(dá)到閾值后,當(dāng)前線(xiàn)程釋放GIL),這樣對(duì)CPU密集型程序更加友好,但依然沒(méi)有解決GIL導(dǎo)致的同一時(shí)間只能執(zhí)行一個(gè)線(xiàn)程的問(wèn)題,所以效率依然不盡如人意。??????? ?????????????????????????
多核多線(xiàn)程比單核多線(xiàn)程更差,原因是單核下多線(xiàn)程,每次釋放GIL,喚醒的那個(gè)線(xiàn)程都能獲取到GIL鎖,所以能夠無(wú)縫執(zhí)行,但多核下,CPU0釋放GIL后,其他CPU上的線(xiàn)程都會(huì)進(jìn)行競(jìng)爭(zhēng),但GIL可能會(huì)馬上又被CPU0拿到,導(dǎo)致其他幾個(gè)CPU上被喚醒后的線(xiàn)程會(huì)醒著等待到切換時(shí)間后又進(jìn)入待調(diào)度狀態(tài),這樣會(huì)造成線(xiàn)程顛簸(thrashing),導(dǎo)致效率更低。
14.redis中的事務(wù)和mysql中的事務(wù)有什么區(qū)別?
1、Redis中的事務(wù)(transaction)是一組命令的集合。事務(wù)同命令一樣都是Redis最小的執(zhí)行單位,一個(gè)事務(wù)中的命令要么都執(zhí)行,要么都不執(zhí)行。Redis事務(wù)的實(shí)現(xiàn)需要用到?MULTI?和?EXEC?兩個(gè)命令,事務(wù)開(kāi)始的時(shí)候先向Redis服務(wù)器發(fā)送?MULTI?命令,然后依次發(fā)送需要在本次事務(wù)中處理的命令,最后再發(fā)送?EXEC?命令表示事務(wù)命令結(jié)束。
2、mysql的事務(wù)特性,要求這組操作,要不全都成功,要不全都失敗,這樣就避免了某個(gè)操作成功某個(gè)操作失敗。利于數(shù)據(jù)的安全
15.請(qǐng)簡(jiǎn)述什么是三次握手和四次揮手?為什么要這樣?
建立連接的過(guò)程是利用客戶(hù)服務(wù)器模式,假設(shè)主機(jī)A為客戶(hù)端,主機(jī)B為服務(wù)器端。
(1)TCP的三次握手過(guò)程:主機(jī)A向B發(fā)送連接請(qǐng)求;主機(jī)B對(duì)收到的主機(jī)A的報(bào)文段進(jìn)行確認(rèn);主機(jī)A再次對(duì)主機(jī)B的確認(rèn)進(jìn)行確認(rèn)。
(2)采用三次握手是為了防止失效的連接請(qǐng)求報(bào)文段突然又傳送到主機(jī)B,因而產(chǎn)生錯(cuò)誤。失效的連接請(qǐng)求報(bào)文段是指:主機(jī)A發(fā)出的連接請(qǐng)求沒(méi)有收到主機(jī)B的確認(rèn),于是經(jīng)過(guò)一段時(shí)間后,主機(jī)A又重新向主機(jī)B發(fā)送連接請(qǐng)求,且建立成功,順序完成數(shù)據(jù)傳輸。考慮這樣一種特殊情況,主機(jī)A第一次發(fā)送的連接請(qǐng)求并沒(méi)有丟失,而是因?yàn)榫W(wǎng)絡(luò)節(jié)點(diǎn)導(dǎo)致延遲達(dá)到主機(jī)B,主機(jī)B以為是主機(jī)A又發(fā)起的新連接,于是主機(jī)B同意連接,并向主機(jī)A發(fā)回確認(rèn),但是此時(shí)主機(jī)A根本不會(huì)理會(huì),主機(jī)B就一直在等待主機(jī)A發(fā)送數(shù)據(jù),導(dǎo)致主機(jī)B的資源浪費(fèi)。
(3)采用兩次握手不行,原因就是上面說(shuō)的失效的連接請(qǐng)求的特殊情況,因此采用三次握手剛剛好,兩次可能出現(xiàn)失效,四次甚至更多次則沒(méi)必要,反而復(fù)雜了。
四次揮手:
先由客戶(hù)端向服務(wù)器端發(fā)送一個(gè)FIN,請(qǐng)求關(guān)閉數(shù)據(jù)傳輸。
當(dāng)服務(wù)器接收到客戶(hù)端的FIN時(shí),向客戶(hù)端發(fā)送一個(gè)ACK,其中ack的值等于FIN+SEQ
然后服務(wù)器向客戶(hù)端發(fā)送一個(gè)FIN,告訴客戶(hù)端應(yīng)用程序關(guān)閉。
當(dāng)客戶(hù)端收到服務(wù)器端的FIN是,回復(fù)一個(gè)ACK給服務(wù)器端。其中ack的值等于FIN+SEQ
為什么要4次揮手?
確保數(shù)據(jù)能夠完成傳輸
16.python是如何進(jìn)行內(nèi)存管理的?
一、垃圾回收:python不像C++,Java等語(yǔ)言一樣,他們可以不用事先聲明變量類(lèi)型而直接對(duì)變量進(jìn)行賦值。對(duì)Python語(yǔ)言來(lái)講,對(duì)象的類(lèi)型和內(nèi)存都是在運(yùn)行時(shí)確定的。這也是為什么我們稱(chēng)Python語(yǔ)言為動(dòng)態(tài)類(lèi)型的原因(這里我們把動(dòng)態(tài)類(lèi)型可以簡(jiǎn)單的歸結(jié)為對(duì)變量?jī)?nèi)存地址的分配是在運(yùn)行時(shí)自動(dòng)判斷變量類(lèi)型并對(duì)變量進(jìn)行賦值)。
二、引用計(jì)數(shù):Python采用了類(lèi)似Windows內(nèi)核對(duì)象一樣的方式來(lái)對(duì)內(nèi)存進(jìn)行管理。每一個(gè)對(duì)象,都維護(hù)這一個(gè)對(duì)指向該對(duì)對(duì)象的引用的計(jì)數(shù)。當(dāng)變量被綁定在一個(gè)對(duì)象上的時(shí)候,該變量的引用計(jì)數(shù)就是1,(還有另外一些情況也會(huì)導(dǎo)致變量引用計(jì)數(shù)的增加),系統(tǒng)會(huì)自動(dòng)維護(hù)這些標(biāo)簽,并定時(shí)掃描,當(dāng)某標(biāo)簽的引用計(jì)數(shù)變?yōu)?/span>0的時(shí)候,該對(duì)就會(huì)被回收。
三、內(nèi)存池機(jī)制Python的內(nèi)存機(jī)制以金字塔行,-1,-2層主要有操作系統(tǒng)進(jìn)行操作,
第0層是C中的malloc,free等內(nèi)存分配和釋放函數(shù)進(jìn)行操作;
第1層和第2層是內(nèi)存池,有Python的接口函數(shù)PyMem_Malloc函數(shù)實(shí)現(xiàn),當(dāng)對(duì)象小于256K時(shí)有該層直接分配內(nèi)存;
第3層是最上層,也就是我們對(duì)Python對(duì)象的直接操作;
在 C 中如果頻繁的調(diào)用 malloc 與 free 時(shí),是會(huì)產(chǎn)生性能問(wèn)題的.再加上頻繁的分配與釋放小塊的內(nèi)存會(huì)產(chǎn)生內(nèi)存碎片. Python 在這里主要干的工作有:
如果請(qǐng)求分配的內(nèi)存在1~256字節(jié)之間就使用自己的內(nèi)存管理系統(tǒng),否則直接使用 malloc.
這里還是會(huì)調(diào)用 malloc 分配內(nèi)存,但每次會(huì)分配一塊大小為256k的大塊內(nèi)存.
經(jīng)由內(nèi)存池登記的內(nèi)存到最后還是會(huì)回收到內(nèi)存池,并不會(huì)調(diào)用 C 的 free 釋放掉.以便下次使用.對(duì)于簡(jiǎn)單的Python對(duì)象,例如數(shù)值、字符串,元組(tuple不允許被更改)采用的是復(fù)制的方式(深拷貝?),也就是說(shuō)當(dāng)將另一個(gè)變量B賦值給變量A時(shí),雖然A和B的內(nèi)存空間仍然相同,但當(dāng)A的值發(fā)生變化時(shí),會(huì)重新給A分配空間,A和B的地址變得不再相同
17.談?wù)勀銓?duì)線(xiàn)程安全的理解?
線(xiàn)程安全是在多線(xiàn)程的環(huán)境下,能夠保證多個(gè)線(xiàn)程同時(shí)執(zhí)行時(shí)程序依舊運(yùn)行正確, 而且要保證對(duì)于共享的數(shù)據(jù)可以由多個(gè)線(xiàn)程存取,但是同一時(shí)刻只能有一個(gè)線(xiàn)程進(jìn)行存取。多線(xiàn)程環(huán)境下解決資源競(jìng)爭(zhēng)問(wèn)題的辦法是加鎖來(lái)保證存取操作的唯一性。
18.事務(wù)的特性?
1、原子性(Atomicity):事務(wù)中的全部操作在數(shù)據(jù)庫(kù)中是不可分割的,要么全部完成,要么均不執(zhí)行。
2、一致性(Consistency):幾個(gè)并行執(zhí)行的事務(wù),其執(zhí)行結(jié)果必須與按某一順序串行執(zhí)行的結(jié)果相一致。
3、隔離性(Isolation):事務(wù)的執(zhí)行不受其他事務(wù)的干擾,事務(wù)執(zhí)行的中間結(jié)果對(duì)其他事務(wù)必須是透明的。
4、持久性(Durability):對(duì)于任意已提交事務(wù),系統(tǒng)必須保證該事務(wù)對(duì)數(shù)據(jù)庫(kù)的改變不被丟失,即使數(shù)據(jù)庫(kù)出現(xiàn)故障
18.什么是阻塞,什么是非阻塞?
阻塞調(diào)用是指調(diào)用結(jié)果返回之前,當(dāng)前線(xiàn)程會(huì)被掛起。函數(shù)只有在得到結(jié)果之后才會(huì)返回。有人也許會(huì)把阻塞調(diào)用和同步調(diào)用等同起來(lái),實(shí)際上他是不同的。對(duì)于同步調(diào)用來(lái)說(shuō),很多時(shí)候當(dāng)前線(xiàn)程還是激活的,只是從邏輯上當(dāng)前函數(shù)沒(méi)有返回而已。例如,我們?cè)?/span>CSocket中調(diào)用Receive函數(shù),如果緩沖區(qū)中沒(méi)有數(shù)據(jù),這個(gè)函數(shù)就會(huì)一直等待,直到有數(shù)據(jù)才返回。而此時(shí),當(dāng)前線(xiàn)程還會(huì)繼續(xù)處理各種各樣的消息。如果主窗口和調(diào)用函數(shù)在同一個(gè)線(xiàn)程中,除非你在特殊的界面操作函數(shù)中調(diào)用,其實(shí)主界面還是應(yīng)該可以刷新。socket接收數(shù)據(jù)的另外一個(gè)函數(shù)recv則是一個(gè)阻塞調(diào)用的例子。當(dāng)socket工作在阻塞模式的時(shí)候,如果沒(méi)有數(shù)據(jù)的情況下調(diào)用該函數(shù),則當(dāng)前線(xiàn)程就會(huì)被掛起,直到有數(shù)據(jù)為止。
非阻塞和阻塞的概念相對(duì)應(yīng),指在不能立刻得到結(jié)果之前,該函數(shù)不會(huì)阻塞當(dāng)前線(xiàn)程,而會(huì)立刻返回。
對(duì)象的阻塞模式和阻塞函數(shù)調(diào)用。對(duì)象是否處于阻塞模式和函數(shù)是不是阻塞調(diào)用有很強(qiáng)的相關(guān)性,但是并不是一一對(duì)應(yīng)的。阻塞對(duì)象上可以有非阻塞的調(diào)用方式,我們可以通過(guò)一定的API去輪詢(xún)狀態(tài),在適當(dāng)?shù)臅r(shí)候調(diào)用阻塞函數(shù),就可以避免阻塞。而對(duì)于非阻塞對(duì)象,調(diào)用特殊的函數(shù)也可以進(jìn)入阻塞調(diào)用。函數(shù)select就是這樣的一個(gè)例子。
19.父子進(jìn)程間有哪些異同,是否共享數(shù)據(jù)?(共享哪些數(shù)據(jù)?)
子進(jìn)程會(huì)復(fù)制父進(jìn)程所有可寫(xiě)的資源,包括:
堆、棧、數(shù)據(jù)段、未初始化數(shù)據(jù)段、打開(kāi)的文件描述符、信號(hào)安裝過(guò)的 handler、共享庫(kù)、ipc(共享內(nèi)存、消息隊(duì)列、信號(hào)量)。注意未決信號(hào)不會(huì)繼承過(guò)來(lái), 新進(jìn)程會(huì)重置它的未決信號(hào)鏈;
子進(jìn)程和父進(jìn)程共享:
所有只讀的資源都不用復(fù)制, 父子進(jìn)程共享, 包括正文段和字符串常量
子進(jìn)程不會(huì)從父進(jìn)程繼承:
進(jìn)程 id、各種鎖(內(nèi)存鎖、文件鎖)、定時(shí)器、未決信號(hào)
20.Mysql的常用引擎及選擇?
常用:InnoDB MyISAM
一、 InnoDB 支持事務(wù),MyISAM 不支持,這一點(diǎn)是非常之重要。事務(wù)是一種高級(jí)的處理方式,如在一些列增刪改中只要哪個(gè)出錯(cuò)還可以回滾還原,而 MyISAM就不可以了;
二、MyISAM 適合查詢(xún)以及插入為主的應(yīng)用,InnoDB適合頻繁修改以及涉及到安全性較高的應(yīng)用;
三、InnoDB 支持外鍵,MyISAM 不支持;
四、MyISAM 是默認(rèn)引擎,InnoDB需要指定;
五、InnoDB 不支持 FULLTEXT 類(lèi)型的索引;
六、InnoDB 中不保存表的行數(shù),如select count(*) from table 時(shí),InnoDB;需要掃描一遍整個(gè)表來(lái)計(jì)算有多少行,但是 MyISAM 只要簡(jiǎn)單的讀出保存好的行數(shù)即可。注意的是,當(dāng) count(*)語(yǔ)句包含 where 條件時(shí) MyISAM 也需要掃描整個(gè)表;
七、對(duì)于自增長(zhǎng)的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中可以和其他字段一起建立聯(lián)合索引;
八、清空整個(gè)表時(shí),InnoDB是一行一行的刪除,效率非常慢。MyISAM則會(huì)重
建表;
九、InnoDB 支持行鎖(某些情況下還是鎖整表,如update table set a=1 where user like '%lee%'
總結(jié)
以上是生活随笔為你收集整理的Python面试常用二十题总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: flutter 图解_【Flutter
- 下一篇: python简单实践作业答案_pytho