1. 程式人生 > >測試開發面試經驗

測試開發面試經驗

今日頭條測試開發工程師

一面、二面:

一、hashmaphashtablehashset的區別

二、hashmap基本原理

資料結構採用陣列加連結串列的結構,Hashmaphash table的。

三、怎麼讓hashmap執行緒安全

設定同步

如何執行緒安全的使用HashMap

Hashtable

ConcurrentHashMap

Synchronized Map

四、怎麼檢測死鎖

1.資源分配圖

每個程序、每個資源制定唯一編號

設定一張資源分配表,記錄各程序與佔用資源之間的關係

設定一張程序等待表,記錄各程序與要申請資源之間的關係

2.死鎖定理

3.死鎖檢測中的資料結構

五、Sleepwait的區別

1、每個物件都有一個鎖來控制同步訪問,

Synchronized關鍵字可以和物件的鎖互動,來實現同步方法或同步塊。sleep()方法正在執行的執行緒主動讓出CPU(然後CPU就可以去執行其他任務),在sleep指定時間後CPU再回到該執行緒繼續往下執行(注意:sleep方法只讓出了CPU,而並不會釋放同步資源鎖!!!)wait()方法則是指當前執行緒讓自己暫時退讓出同步資源鎖,以便其他正在等待該資源的執行緒得到該資源進而執行,只有呼叫了notify()方法,之前呼叫wait()的執行緒才會解除wait狀態,可以去參與競爭同步資源鎖,進而得到執行。(注意:notify的作用相當於叫醒睡著的人,而並不會給他分配任務,就是說notify
只是讓之前呼叫wait的執行緒有權利重新參與執行緒的排程);

2sleep()方法可以在任何地方使用;wait()方法則只能在同步方法或同步塊中使用;

3sleep()是執行緒執行緒類(Thread)的方法,呼叫會暫停此執行緒指定的時間,但監控依然保持,不會釋放物件鎖,到時間自動恢復;wait()Object的方法,呼叫會放棄物件鎖,進入等待佇列,待呼叫notify()/notifyAll()喚醒指定的執行緒或者所有執行緒,才會進入鎖池,不再次獲得物件鎖才會進入執行狀態;

六、泛型,泛型好處?這帶來了很多好處:

1,型別安全。 泛型的主要目標是提高 Java 程式的型別安全。通過知道使用泛型定義的變數的型別限制,編譯器可以在一個高得多的程度上驗證型別假設。沒有泛型,這些假設就只存在於程式設計師的頭腦中(或者如果幸運的話,還存在於程式碼註釋中)。

2,消除強制型別轉換。 泛型的一個附帶好處是,消除原始碼中的許多強制型別轉換。這使得程式碼更加可讀,並且減少了出錯機會。

3,潛在的效能收益。 泛型為較大的優化帶來可能。在泛型的初始實現中,編譯器將強制型別轉換(沒有泛型的話,程式設計師會指定這些強制型別轉換)插入生成的位元組碼中。但是更多型別資訊可用於編譯器這一事實,為未來版本的 JVM 的優化帶來可能。由於泛型的實現方式,支援泛型(幾乎)不需要 JVM 或類檔案更改。所有工作都在編譯器中完成,編譯器生成類似於沒有泛型(和強制型別轉換)時所寫的程式碼,只是更能確保型別安全而已。

 Java語言引入泛型的好處是安全簡單。泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動和隱式的,提高程式碼的重用率。

    泛型在使用中還有一些規則和限制:

    1、泛型的型別引數只能是類型別(包括自定義類),不能是簡單型別。

    2、同一種泛型可以對應多個版本(因為引數型別是不確定的),不同版本的泛型類例項是不相容的。

    3、泛型的型別引數可以有多個。

    4、泛型的引數型別可以使用extends語句,例如<T extends superclass>。習慣上成為“有界型別”。

    5、泛型的引數型別還可以是萬用字元型別。例如Class<?> classType = Class.forName(Java.lang.String);

     型還有介面、方法等等,內容很多,需要花費一番功夫才能理解掌握並熟練應用。在此給出我曾經瞭解泛型時候寫出的兩個例子(根據看的印象寫的),實現同樣的 功能,一個使用了泛型,一個沒有使用,通過對比,可以很快學會泛型的應用,學會這個基本上學會了泛型70%的內容。

七、GC什麼時候回收

八、建立執行緒兩種方式的區別

1、擴充套件Thread

2、實現Runnable介面

3.兩者區別

採用繼承Thread類方式:

1)優點:編寫簡單,如果需要訪問當前執行緒,無需使用Thread.currentThread()方法,直接使用this,即可獲得當前執行緒。

2)缺點:因為執行緒類已經繼承了Thread類,所以不能再繼承其他的父類。

採用實現Runnable介面方式:

1)優點:

執行緒類只是實現了Runable介面,還可以繼承其他的類。

可以多個執行緒共享同一個目標物件,所以非常適合多個相同執行緒來處理同一份資源的情況。

2)缺點:程式設計稍微複雜,如果需要訪問當前執行緒,必須使用Thread.currentThread()方法。

Runnable可以實現資源共享Thread不能原因:

因為一個執行緒只能啟動一次,通過Thread實現執行緒時,執行緒和執行緒所要執行的任務是捆綁在一起的。也就使得一個任務只能啟動一個執行緒,不同的執行緒執行的任務是不相同的,所以沒有必要,也不能讓兩個執行緒共享彼此任務中的資源。

一個任務可以啟動多個執行緒,通過Runnable方式實現的執行緒,實際是開闢一個執行緒,將任務傳遞進去,由此執行緒執行。可以例項化多個 Thread物件,將同一任務傳遞進去,也就是一個任務可以啟動多個執行緒來執行它。這些執行緒執行的是同一個任務,所以他們的資源是共享。

九、測試淘寶發表評價介面

十、異常的分類、sql中的異常有哪些?

一般分為Checked異常和Runtime異常,所有RuntimeException類及其子類的例項被稱為Runtime異常,不屬於該範疇的異常則被稱為CheckedException

Checked異常

只有java語言提供了Checked異常,Java認為Checked異常都是可以被處理的異常,所以Java程式必須顯示處理Checked異常。如果程式沒有處理Checked異常,該程式在編譯時就會發生錯誤無法編譯。這體現了Java的設計哲學:沒有完善錯誤處理的程式碼根本沒有機會被執行。對Checked異常處理方法有兩種

1 當前方法知道如何處理該異常,則用try...catch塊來處理該異常。

2 當前方法不知道如何處理,則在定義該方法是宣告丟擲該異常。

RuntimeException

Runtime如除數是0和陣列下標越界等,其產生頻繁,處理麻煩,若顯示申明或者捕獲將會對程式的可讀性和執行效率影響很大。所以由系統自動檢測並將它們交給預設的異常處理程式。當然如果你有處理要求也可以顯示捕獲它們。

十一、Java反射

十二、靜態程式碼塊執行幾次,為什麼

程式設計:

求陣列拼接最小數

單例模式

求前1000個醜數

美團測試開發工程師

一面:

1.測試的種類(黑盒、白盒等)

2.三次握手的原理

3.軟體的整個流程

4.你自己的專案是如何進行測試的

5.計算機網路的七層結構、每層中有什麼協議

6.手機端測試跟pc端測試有什麼區別

7.Pc端的軟體如何變成手機端的

8.Linux你會什麼指令,例如檢視。。。

9.測試的什麼(功能、效能、安全、相容、移植(可移植性的環境包括軟體環境,硬體環境和系統的組織環境,而跨平臺性更多的是指不同的作業系統。))

二面:

1.stringstringbufferstringbuilder的異同,底層實現。為什麼把string設定為final型別

2.死鎖產生的條件,寫一個死鎖程式。

3.同步sync的幾種用法,這幾種用法的不同之處。

4.聊天都是新建執行緒,會影響記憶體,怎麼處理

5.Noi

6.演算法:abc可以變成bcacab,但不可以是acb。如果給你bca你怎麼可以判斷bca可以由abc推斷出。時間複雜度更小

廣聯達

1.黑盒白盒測試的區別以及使用的方法

2.TCPUDP區別

3.測試一臺電視機

4.堆疊的區別

http://blog.csdn.net/hairetz/article/details/4141043

5.測試的流程

6.軟體開發的流程

7.軟體開發的模型

8.找規律:111211211111221312211_______

9.智力題:一根不均勻的繩子,燒完的時間是1小時。給你若干根不均勻的繩子,如何計時1小時15分。