測試工程師面試經常遇到的問題總結

Linux命令相關

1. 文件個數查找: find  -type f -print|wc -l ;
    查找某個文件: find /xxx/xx -name "filename";
2.  文件行數查看:
 2.1查看文件前5行:head -5 /xxx/xx/filename;
 2.2查看文件後幾行:tail -5 /xx/xx/filename;
 2.3查看新加入到文件中的內容:tail -f /xx/xx/filename;

3.查找系統內匹配某個字符的文件信息(例如tomcat):
   ps -ef | grep tomcat

4.查詢當前所在的路徑 :pwd     
5.強制終止進程命令: kill -9 pid (終止number=pid號的進程)
6.顯示當前登錄用戶名:whoami或者id -un
7.顯示用戶使用過的命令: history
8.查看磁盤空間使用情況 :df -hl
9.在file.txt中搜索包含有”hello”的行並計算其行數。 grep "hello" file.txt|wc -l
10:字符分隔 awk: 
awk 用來從文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F, '{print $1 "," $3 }'這裏我們使用,作爲字段分割符,同時打印第一個和第三個字段。如果該文件內容如下: Adam Bor, 34, IndiaKerry Miller, 22, USA命令輸出結果爲:Adam Bor, IndiaKerry Miller, USA 

windows命令相關
查看某個端口被哪個進程佔用,並殺掉進程
查看:netstat -ano //得到所有端口使用情況,可獲得被佔用端口的pid
查看端口號:netstat -ano | findstr "80" //查看21號端口被佔用情況
測試工程師面試經常遇到的問題總結
查看具體進程使用:tasklist | findstr "2804" //查看任務列表中pid對應的進程名稱
測試工程師面試經常遇到的問題總結
**


網絡相關

3.1http和https的區別

HTTP 的 URL 以 http:// 開頭,而 HTTPS 的 URL 以 https:// 開頭
HTTP 是不安全的,而 HTTPS 是安全的
HTTP 標準端口是 80 ,而 HTTPS 的標準端口是 443
在 OSI 網絡模型中,HTTP 工作於應用層,而 HTTPS 工作在傳輸層
HTTP 無需加密,而 HTTPS 對傳輸的數據進行加密
HTTP 無需證書,而 HTTPS 需要認證證書

HTTP工作原理:

瀏覽器打開一個 TCP 連接
瀏覽器發送 HTTP 請求到服務器端
服務器發送 HTTP 迴應信息到瀏覽器
TCP 連接關閉

SSL的原理:

驗證服務器端
允許客戶端和服務器端選擇加密算法和密碼,確保雙方都支持
驗證客戶端(可選)
使用公鑰加密技術來生成共享加密數據
創建一個加密的 SSL 連接
基於該 SSL 連接傳遞 HTTP 請求

3.2 cookie和session的區別
通俗的將,Cookie是訪問某些網站以後在本地存儲的一些網站相關的信息,下次再訪問的時候減少一些步驟。另外一個更準確的說法是:Cookies是服務器在本地機器上存儲的小段文本並隨每一個請求發送至同一個服務器,是一種在客戶端保持狀態的方案。

Cookie的主要內容包括:名字,值,過期時間,路徑和域,可通過抓包工具查看

Session是存在服務器的一種用來存放用戶數據的類HashTable結構。

當瀏覽器 第一次發送請求時,服務器自動生成了一個HashTable和一個Session ID用來唯一標識這個HashTable,並將其通過響應發送到瀏覽器。當瀏覽器第二次發送請求,會將前一次服務器響應中的Session ID放在請求中一併發送到服務器上,服務器從請求中提取出Session ID,並和保存的所有Session ID進行對比,找到這個用戶對應的HashTable。一般這個值會有一個時間限制,超時後毀掉這個值,默認是20分鐘。

Session的實現方式和Cookie有一定關係。session id存在Cookie中,然後每次訪問的時候將Session id帶過去就可以識別了
很容易看出來最明顯的不同是一個在客戶端一個在服務端。因爲Cookie存在客戶端所以用戶可以看見,所以也可以編輯僞造,不是十分安全。

3.3 post和get的區別
GET在瀏覽器回退時是無害的,而POST會再次提交請求。
GET產生的URL地址可以被Bookmark,而POST不可以。
GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
GET請求只能進行url編碼,而POST支持多種編碼方式。
GET請求參數會被完整保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留。
GET請求在URL中傳送的參數是有長度限制的,而POST沒有。
對參數的數據類型,GET只接受ASCII字符,而POST沒有限制。
GET比POST更不安全,因爲參數直接暴露在URL上,所以不適合用來傳遞敏感信息。
GET參數通過URL傳遞,而POST放在Request body中。


算髮相關
冒泡法排序

package testdemo;

import java.awt.List;
import java.util.ArrayList;
import java.util.Arrays;

public class Testjisuan {
        @SuppressWarnings("unchecked")
        public static void main(String[] args){
          //冒泡法排序,將數組從小到大排列輸出
         int[] at= new int[]{4,3,5,78,3,7,13,56};
         int len=at.length;
         System.out.println("數組的長度爲:"+len);
         //String aString =  Arrays.sort(at);
         System.out.println("數組使用Arrays類的從小到大排序爲:"+Arrays.toString(at));

         int tmp=0;
         for(int i=0;i<len-1;i++)
         {
             for(int j=i+1;j<len;j++){
                 if(at[i]>at[j])
                 {
                     tmp =at[i];
                     at[i]=at[j];
                     at[j]=tmp;
                 }
             }
         }
         //輸出數組
         System.out.println("該數組從小到大排列順序爲:"+Arrays.toString(at));

       }
}

字符串逆序輸出

package test;

import java.util.ArrayList;
import java.util.Arrays;

public class teststr {
    public static void main(String[] args) {
        String st="hello,word!";
        int len =st.length();
        ArrayList newstr= new ArrayList();
        for(int j= len-1;j>=0;j--){
            newstr.add(st.charAt(j));
        }

        System.out.println("改字符串從尾到頭輸入顯示爲:");
        for(int k=0;k<len;k++)
        System.out.print(newstr.get(k));
        }
    }

輸出結果

測試工程師面試經常遇到的問題總結


約瑟夫環

package testdemo;

import java.util.ArrayList;
import java.util.Scanner;

import com.melloware.jintellitype.Main;

public class YoSess {

    @SuppressWarnings({ "rawtypes", "resource" })
    public static  void main(String[] args){
        //生成約瑟夫環的數組
        ArrayList ls= new ArrayList();
        //從鍵盤獲得輸入值
        Scanner  sc1= new Scanner(System.in);
        int total=sc1.nextInt();
        int out = sc1.nextInt();
        //往數組中初始化值
        for(int i=0;i<total;i++){
            ls.add(i+1);
        }
        //
        int i=-1;
        int cut=0;
        System.out.println("出局的數據順序爲:");
        while(ls.size()!=0){//當數組中還有數據時,從頭開始往後數
            ++i;
            if(i==ls.size()){//當數到頭時,又從頭開始數
            i=0;    
            }
            ++cut; 
            if(cut==out){ //當數到需要出局的數據時做處理
                System.out.print(ls.get(i)+",");
                ls.remove(i);
                cut=0;
                i--;
                }
            }

    }   

    }

輸出:
測試工程師面試經常遇到的問題總結

快速排序

package com.quicksort;  

import java.util.Arrays;  

public class QuickSort {  
    public static void main(String[] args) {  
        int[] a = {1, 2, 4, 5, 7, 4, 5 ,3 ,9 ,0};  
        System.out.println(Arrays.toString(a));  
        quickSort(a);  
        System.out.println(Arrays.toString(a));  
    }  

    public static void quickSort(int[] a) {  
        if(a.length>0) {  
            quickSort(a, 0 , a.length-1);  
        }  
    }  

    private static void quickSort(int[] a, int low, int high) {  
        //1,找到遞歸算法的出口  
        if( low > high) {  
            return;  
        }  
        //2, 存  
        int i = low;  
        int j = high;  
        //3,key  
        int key = a[ low ];  
        //4,完成一趟排序  
        while( i< j) {  
            //4.1 ,從右往左找到第一個小於key的數  
            while(i<j && a[j] > key){  
                j--;  
            }  
            // 4.2 從左往右找到第一個大於key的數  
            while( i<j && a[i] <= key) {  
                i++;  
            }  
            //4.3 交換  
            if(i<j) {  
                int p = a[i];  
                a[i] = a[j];  
                a[j] = p;  
            }  
        }  
        // 4.4,調整key的位置  
        int p = a[i];  
        a[i] = a[low];  
        a[low] = p;  
        //5, 對key左邊的數快排  
        quickSort(a, low, i-1 );  
        //6, 對key右邊的數快排  
        quickSort(a, i+1, high);  
    }  
}

後續還會追加,也歡迎大家講遇到的面試題回覆下,我來總結查找答案**

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章