天天看點

11道進階軟體測試面試題,你知道多少答案

11道進階軟體測試面試題,你知道多少答案?

1、清單和元組的差別

答:清單是動态的,長度可變,可以随意地增删改元素。清單的存儲空間略大于元組,性能略遜于元組。元組是靜态的,長度大小固定,不可以對元組元素進行增删改操作。元組對于清單更加輕量級,性能稍優。

2、字典的原理

答:python中的字典底層依靠哈希表(hash table)實作, 使用開放尋址法解決沖突。哈希表是key-value類型的資料結構, 可以了解為一個鍵值需要按照一定規則存放的數組, 而哈希函數就是這個規則。

字典本質上是一個散清單(總有空白元素的數組, python至少保證1/3的數組是空的), 字典中的每個鍵都占用一個單元。

一個單元分為兩部分, 分别是對鍵的引用和對值的引用, 使用hash函數獲得鍵的散列值, 散列值對數組長度取餘, 取得的值就是存放位置的索引。

哈希沖突(數組的索引相同), 使用開放尋址法解決。

這也是python中要求字典的key必須可hash的原因。數組中1/3的位置為空, 增加元素可能會導緻擴容, 引發新的散列沖突, 導緻新的散清單中鍵的次序發生變化, 這也是字典周遊時不能添加和删除的原因字典在記憶體中開銷很大, 實際上是以空間換時間。

3、說一下hash算法與哈希沖突

答:雜湊演算法:根據設定的哈希函數H(key)和處理沖突方法将一組關鍵字映象到一個有限的位址區間上的算法。也稱為雜湊演算法、雜湊算法。

哈希表:資料經過雜湊演算法之後得到的集合。這樣關鍵字和資料在集合中的位置存在一定的關系,可以根據這種關系快速查詢。非哈希表:與哈希表相對應,集合中的 資料和其存放位置沒任何關聯關系的集合。由此可見,雜湊演算法是一種特殊的算法,能将任意資料散列後映射到有限的空間上,通常計算機軟體中用作快速查找或加密使用。

哈希沖突:由于雜湊演算法被計算的資料是無限的,而計算後的結果範圍有限,是以總會存在不同的資料經過計算後得到的值相同,這就是哈希沖突。

4、怎麼解決哈希沖突

答:解決哈希沖突的方法一般有:開放定址法、鍊位址法(拉鍊法)、再哈希法、建立公共溢出區等方法。

5、說下python的記憶體管理和垃圾回收機制

答:python的記憶體管理機制有三種:引用計數、垃圾回收、記憶體池。

引用計數:引用計數是一種非常高效的記憶體管理手段,當一個pyhton對象被引用時其引用計數增加1,當其不再被引用時引用計數減1,當引用計數等于0的時候,對象就被删除了

垃圾回收:引用計數、标記清除、分代回收記憶體池:Python提供了對記憶體的垃圾收集機制,但是它将不用的記憶體放到記憶體池而不是傳回給作業系統。

Python中所有小于256個位元組的對象都使用pymalloc實作的配置設定器,而大的對象則使用系統的 malloc。

另外Python對象,如整數,浮點數和List,都有其獨立的私有記憶體池,對象間不共享他們的記憶體池。

也就是說如果你配置設定又釋放了大量的整數,用于緩存這些整數的記憶體就不能再配置設定給浮點數。

6、記憶體過大時你有什麼調優手段

答:1.手動垃圾回收 2.避免循環引用(手動解循環引用和使用弱引用)3.調高垃圾回收門檻值

7、請簡述下python的拷貝

答:1.指派: 隻是複制了新對象的引用,不會開辟新的記憶體空間。

2.淺拷貝: 建立新對象,其内容是原對象的引用。淺拷貝有三種形式:切片操作,工廠函數,copy子產品中的copy函數。如:lst = [1,2,3,[4,5]]切片操作:lst1 = lst[:] 或者 lst1 = [each for each in lst] 要注意:list1=lst 和list1=lst[:]的差別工廠函數:lst1 = list(lst)copy函數:lst1 = copy.copy(lst)淺拷貝之是以稱為淺拷貝,是它僅僅隻拷貝了一層,在lst中有一個嵌套的list[4,5],如果我們修改了它,情況就不一樣了。

3.深拷貝:隻有一種形式,copy子產品中的deepcopy函數。和淺拷貝對應,深拷貝拷貝了對象的所有元素,包括多層嵌套的元素。深拷貝出來的對象是一個全新的對象,不再與原來的對象有任何關聯。#說明如下:#1.外層添加元素時, 淺拷貝c不會随原清單a變化而變化;内層list添加元素時,淺拷貝c才會變化。#2.無論原清單a如何變化,深拷貝d都保持不變。#3.指派對象随着原清單一起變化

8、請講一下協程的原理

答:運用協程機制最典型的場景就是異步IO。所謂異步,是指一段程式在執行完成前有能力“暫停”,讓其他程式段執行。

從文法上來看,協程和生成器類似,都是定義體中包含yield關鍵字的函數,是以總體上在協程中把yield看做是控制流程的方式。

協程是一個特殊的生成器,yield有傳回值>生成器,yield沒有>協程(沒傳回值就是協程)

9、sql的多表聯查方式

答:内連接配接:JOIN / INNER JOIN、不等連接配接:ON 子句中使用了不等于運算符、自連接配接:一張表連接配接自身、左(外)連接配接:LEFT JOIN / LEFT OUTER JOIN、右(外)連接配接:RIGHT JOIN / RIGHT OUTER JOIN、全(外)連接配接:FULL JOIN / FULL OUTER JOIN、交叉連接配接:CROSS JOIN (可用","代替)、UNION 、UNION ALL操作符用于合并兩個或多個 SELECT 語句的結果集。

10、資料庫的存儲過程

答:一組為了完成特定功能的SQL語句集(或者自定義資料庫操作指令集), 根據傳入的參數(也可以沒有),

通過簡單的調用, 完成比單個SQL語句更複雜的功能, 存儲在資料庫伺服器端,隻需要編譯過一次之後再次使用都不需要再進行編譯:主要對存儲的過程進行控制。

11、資料庫的存儲過程與事務的異同 

答:事務是保證多個SQL語句的原子型的,也就是要麼一起完成,要麼一起不完成存儲過程是把一批SQL語句預編譯後放在伺服器上,然後可以遠端調用。

同時需要更多軟體測試的視訊,以及工具,面試真題等等資料的朋友,可以關注公衆号:IT網際網路二狗子!

11道進階軟體測試面試題,你知道多少答案
下一篇: Code Craft