網易雲音樂測開面試題整理


一、自我介紹

二、關於操作系統的一個問題,沒看過,所以不記得了

三、說說對測試開發的理解

四、線程和進程的區別

  • 進程是執行着的應用程序,而線程是進程內部的一個執行序列。一個進程可以有多個線程,線程又叫做輕量級進程
  • 線程的划分小於進程,線程隸屬於某個進程。進程是程序的一種動態形式,是CPU、內存等資源占用的基本單位,而線程是不能占有這些資源的。
  • 進程之間相互獨立,通信比較困難,而線程之間共享一塊內存區域,通信比較方便。進程在執行的過程中,包含比較固定的入口、執行順序、出口,而線程的這些過程會被應用程序所控制

五、線程的鎖有哪幾種方式

  • 同步代碼塊

          synchronized(對象) { 需要被同步的代碼; }

          這里的鎖對象可以是任意對象。

  • 同步方法:把同步加在方法上。這里的鎖對象是this
  • 靜態同步方法:把同步加在方法上。

六、線程的狀態

1、新建( new ):新創建了一個線程對象。

2、可運行( runnable ):線程對象創建后,其他線程(比如 main 線程)調用了該對象的 start ()方法。該狀態的線程位於可運行線程池中,等待被線程調度選中,獲取 cpu 的使用權 。

3、運行( running ):可運行狀態( runnable )的線程獲得了cpu 時間片( timeslice ),執行程序代碼。

4、阻塞( block ):阻塞狀態是指線程因為某種原因放棄了cpu 使用權,也即讓出了cpu timeslice ,暫時停止運行。直到線程進入可運行( runnable )狀態,才有機會再次獲得cpu timeslice轉到運行( running )狀態。

阻塞的情況分三種:

(1)、等待阻塞:運行( running )的線程執行o . wait ()方法,JVM 會把該線程放入等待隊列( waitting queue )中。

(2)、同步阻塞:運行( running )的線程在獲取對象的同步鎖時,若該同步鎖 被別的線程占用,則JVM會把該線程放入鎖池( lock pool )中。

(3)、其他阻塞: 運行( running )的線程執行Thread . sleep ( long ms )或t . join ()方法,或者發出了I / O 請求時,JVM 會把該線程置為阻塞狀態。當sleep ()狀態超時、join ()等待線程終止或者超時、或者I / O處理完畢時,線程重新轉入可運行( runnable )狀態。

5、死亡( dead ):線程run ()、main () 方法執行結束,或者因異常退出了run ()方法,則該線程結束生命周期。死亡的線程不可再次復生

 

七、MySQL相關

1、建三張表

手機表,手機ID,型號,廠商,損壞

借用人表,借用人ID,名稱,所屬項目

手機借用人關系表,手機ID,借用人ID,借用時間,狀態(歸還,使用),所屬項目

2、從表中查出某條數據

從手機借用人關系表中查出用戶A在使用中的手機

八、手寫代碼

1、輸入一個字符串,找出第一第二個重復的字符

package cn.itcast_01;
/*
 * created by yinqanne in 2018/8/30
 */
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;

/*
 * 輸入一個字符串,找出第一第二個重復的字符
 * 輸入例子1:abcadfscdd
 * 輸出例子1:a b
 */
public class Test5 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String string = sc.nextLine();
        int len = string.length();
        if(string==null || len < 2){
            System.out.println("輸入錯誤,請輸入字符長度大於1的字符串");
            return;
        }
        HashMap<String, Integer> map = new HashMap<>();

        int count = 0;
        for(int i = 0; i < len; i++){
            String s = String.valueOf(string.charAt(i));
            if(map.containsKey(s)){
                map.put(s, map.get(s)+1);
            }else{
                map.put(s, 1);
            }
        }
        Set<String> keyset = map.keySet();
        count = 0;
        for(String s: keyset ){
            if(map.get(s) > 1 && count < 2){
                System.out.println(s);
                count++;
            }else{
                return;
            }
        }
    }
}

 2、針對以上代碼寫一個測試用例


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM