面試總結(一)

2021-10-04 16:22:10 字數 4329 閱讀 6558

原理:閉包。

所謂閉包就是在乙個內部函式裡,對外部作用域變數(但不是全域性作用域)的變數進行引用。這樣內部函式就會被認為是閉包(closure)

1.簡單裝飾器

def

my_logging

(func)

:def

(*args,

**kwargs)

:print

("{} is running"

.format

(func.__name__)

)return func(

*args,

**kwargs)

deffoo

(x, y)

:print

("this is foo function"

)return x + y

foo = my_logging(foo)

foo()或者

@my_logging

deffoo()

:print

("this is foo function"

)"""

result:

foo is running

this is foo function

"""

2.帶引數的裝飾器

此時需要三層的裝飾器,乙個傳裝飾器的引數,乙個傳裝飾的函式,乙個傳函式的引數

def

my_logging_level

(level)

:def

decorator

(func)

:def

(*args,

**kwargs)

:if level ==

'info'

:print

('level is info'

)else

:print

('level is other levels'

)return func(

*args,

**kwargs)

return decorator

@my_logging_level(

'info'

)def

a_foo

(name=

"foo"):

print

("{} is running"

.format

(name)

)a_foo(

)"""

result:

level is info

foo is running

"""

3.類裝飾器

類裝飾器主要依靠類的__call__方法

class

mylogging

:def

__init__

(self, func)

: self._func= func

def__call__

(self,

*args,

**kwargs)

:print

("class decorator starting."

) a = self._func(

*args,

**kwargs)

print

("class decorator end."

)return a

@mylogging

defc_foo

(name=

"foo"):

print

("{} is running"

.format

(name)

)c_foo(

)"""

result:

class decorator starting.

foo is running

class decorator end.

"""

實現的方式:yield

四個特性(acid):

原子性(atomicity)**:**操作這些指令時,要麼全部執行成功,要麼全部不執行。只要其中乙個指令執行失敗,所有的指令都執行失敗,資料進行回滾,回到執行指令前的資料狀態。

一致性(consistency)**:**事務的執行使資料從乙個狀態轉換為另乙個狀態,但是對於整個資料的完整性保持穩定。

隔離性(isolation)**:**隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每乙個使用者開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離。即要達到這麼一種效果:對於任意兩個併發的事務t1和t2,在事務t1看來,t2要麼在t1開始之前就已經結束,要麼在t1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。

永續性(durability)**:**當事務正確完成後,它對於資料的改變是永久性的。

資料庫事務的隔離級別

事務的隔離級別有4種,由低到高分別為read uncommittedread committedrepeatable readserializable。而且,在事務的併發操作中可能會出現髒讀不可重複讀幻讀

詳細參考

a,b 兩個欄位的索引支援b,a查詢麼

兩個或更多個列上的索引被稱作聯合索引,聯合索引又叫復合索引。對於復合索引:mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index (a,b,c). 可以支援a | a,b| a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 .當最左側欄位是常量引用時,索引就十分有效。

什麼情況下使用索引

為了快速查詢匹配where條件的行。

為了從考慮的條件中消除行。

如果表有乙個multiple-column索引,任何乙個索引的最左字首可以通過使用優化器來查詢行。

查詢中與其它表關聯的字,字段常常建立了外來鍵關係

查詢中統計或分組統計的字段

索引注意事項

1,建立索引

對於查詢佔主要的應用來說,索引顯得尤為重要。很多時候效能問題很簡單的就是因為我們忘了新增索引而造成的,或者說沒有新增更為有效的索引導致。如果不加

索引的話,那麼查詢任何哪怕只是一條特定的資料都會進行一次全表掃瞄,如果一張表的資料量很大而符合條件的結果又很少,那麼不加索引會引起致命的效能下降。但是也不是什麼情況都非得建索引不可,比如性別可能就只有兩個值,建索引不僅沒什麼優勢,還會影響到更新速度,這被稱為過度索引。

2,復合索引

比如有一條語句是這樣的:select * from users where area=』beijing』 and age=22;

如果我們是在area和age上分別建立單個索引的話,由於mysql查詢每次只能使用乙個索引,所以雖然這樣已經相對不做索引時全表掃瞄提高了很多效率,但是如果在area、age兩列上建立復合索引的話將帶來更高的效率。如果我們建立了(area, age,salary)的復合索引,那麼其實相當於建立了(area,age,salary)、(area,age)、(area)三個索引,這被稱為最佳左字首特性。

因此我們在建立復合索引時應該將最常用作限制條件的列放在最左邊,依次遞減。

3,索引不會包含有null值的列

只要列中包含有null值都將不會被包含在索引中,復合索引中只要有一列含有null值,那麼這一列對於此復合索引就是無效的。所以我們在資料庫設計時不要讓字段的預設值為null。

4,使用短索引

對串列進行索引,如果可能應該指定乙個字首長度。例如,如果有乙個char(255)的 列,如果在前10 個或20 個字元內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和i/o操作。

5,排序的索引問題

mysql查詢只使用乙個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列建立復合索引。

6,like語句操作

一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是乙個問題。like 「%aaa%」 不會使用索引,而like 「aaa%」可以使用索引。

7,不要在列上進行運算

8,不使用not in操作

not in操作不會使用索引將進行全表掃瞄。not in可以用not exists代替

詳見

面試總結(一)

又到了一年一度的就業高峰期,作為應屆畢業生中的一員,我也同樣為了自己的工作而奔波,經過乙個多星期的努力,拿下了四五家offer,最後選擇了一家自己比較滿意的公司 下面對求職當中遇到的一些問題進行下總結。一 簡歷準備 乙份好的簡歷是你個人的敲門磚,現在找工作基本上都是通過網上投遞你的簡歷,然後等待公司...

面試總結 一

記錄 2017年8月11日模擬面試問題及答案,許多自己答得很模糊,再次總結語言。面試總結 二 回答基於jdk1.8,低版本部分答案不適用 1.equals和 區別?答 在基礎資料型別中比較其大小,引用型別比較記憶體位址。equals在不重寫的情況下與 相同,重寫後是按照其本身方法內部規則進行判斷。任...

面試總結 (一)

單引號和雙引號的區別 單引號不解析 雙引號解析 在某些特定情況下,單引號效率要比雙引號高 xml和json的區別 js的五種資料型別,並說明原始資料型別和引用資料型別的區別 js的基本資料型別 number string boolean null和undefined 區別 說明myisam和inno...