8.24 百度面試記錄

zhuhui132發表於2020-08-24

刪除連結串列中倒數第 k 個節點

// 1 2 3 4 6      2  => 1 2 3 6
public void getKNode(ListNode head,int k){
    ListNode slow = head, fast= head;
    while(k>0 && fast!= null ) {
        fast= fast.next;
        k--;
    }
    if (slow !=null &&  fast!= null ){
        fast=fast.next;
        slow=slow.next;
    }
    slow.next=slow.next.next;
        return ;
}

陣列裡重複次數最多的值

public int returnMost(int[] arr){
        if (arr == null || arr.length == 0) return 0;
        int Max = 0;
        int result = 0;
        HashMap<Integer,Integer> map = new HashMap<>();
        for (int i : arr) {
             //map.get(i) == null?map.put(i, 1): map.put(i, map.get(i) + 1);
            if (map.get(i) == null ){
                map.put(i,1);
            }
            else {
                map.put(i,map.get(i)+1);
            }
            if (map.get(i) >= Max) {
                Max = map.get(i);
                result = i;
            }
        }
        System.out.println(result);
        return result;
    }

sql 查詢太慢,怎麼最佳化

https://tech.meituan.com/2014/06/30/mysql-index.html

完整的 http 請求

過程

• 域名解析
• 發起 TCP3 次握手
• 建立 TCP 連線後發起 http 請求
• 伺服器響應請求,返回結果
• 瀏覽器得到 html 標籤程式碼
• 瀏覽器解析 html 程式碼中的資源,例如 js,css,img 等
• 瀏覽器對頁面進行渲染並呈現給使用者

為什麼 tcp 需要第三次握手

謝希仁版《計算機網路》中的例子是這樣的,“已失效的連線請求報文段” 的產生在這樣一種情況下:client 發出的第一個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達 server。本來這是一個早已失效的報文段。但 server 收到此失效的連線請求報文段後,就誤認為是 client 再次發出的一個新的連線請求。於是就向 client 發出確認報文段,同意建立連線。假設不採用 “三次握手”,那麼只要 server 發出確認,新的連線就建立了。由於現在 client 並沒有發出建立連線的請求,因此不會理睬 server 的確認,也不會向 server 傳送資料。但 server 卻以為新的運輸連線已經建立,並一直等待 client 發來資料。這樣,server 的很多資源就白白浪費掉了。採用 “三次握手” 的辦法可以防止上述現象發生。例如剛才那種情況,client 不會向 server 的確認發出確認。server 由於收不到確認,就知道 client 並沒有要求建立連線。”。主要目的防止 server 端一直等待,浪費資源。

登入頁面測試

1、功能測試 (Function test)
• 輸入正確的使用者名稱和密碼,點選提交按鈕,驗證是否能正確登入。
• 輸入錯誤的使用者名稱或者密碼, 驗證登入會失敗,並且提示相應的錯誤資訊。
• 登入成功後能否能否跳轉到正確的頁面
• 使用者名稱和密碼,如果太短或者太長,應該怎麼處理
• 使用者名稱和密碼,中有特殊字元,和其他非英文的情況
• 記住使用者名稱的功能
• 登陸失敗後,不能記錄密碼的功能
• 使用者名稱和密碼前後有空格的處理
• 密碼是否以星號顯示
2、介面測試 (UI Test)
• 佈局是否合理,2 個 testbox 和一個按鈕是否對齊
• testbox 和按鈕的長度,高度是否複合要求
• 介面是否好看
• 圖片,顏色,字型,超連結,是否都顯示正確
3、效能測試 (performance test)
• 開啟登入頁面,需要幾秒
• 輸入正確的使用者名稱和密碼後,登入成功跳轉到新頁面,不超過 5 秒
• 能支援多少個使用者同時登陸
4、安全性測試 (Security test)
• 登入成功後生成的 Cookie,是否是 httponly (否則容易被指令碼盜取)
• 使用者名稱和密碼是否透過加密的方式,傳送給 Web 伺服器
• 使用者名稱和密碼的驗證,應該是用伺服器端驗證, 而不能單單是在客戶端用 javascript 驗證
• 使用者名稱和密碼的輸入框,應該遮蔽 SQL 注入攻擊
• 使用者名稱和密碼的的輸入框,應該禁止輸入指令碼(防止 XSS 攻擊)
• 錯誤登陸的次數限制(防止暴力破解)
5、可用性測試 (Usability Test)
• 是否可以全用鍵盤操作,是否有快捷鍵
• 輸入使用者名稱,密碼後按回車,是否可以登陸
6、相容性測試(Compatibility Test)
• 主流的瀏覽器下能否顯示正常已經功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)
• 不同的平臺是否能正常工作,比如 Windows, Mac
• 移動裝置上是否正常工作,比如 Iphone, Andriod
• 不同的解析度
• 不同的瀏覽器大小(瀏覽器最大化, 和非最大化)

索引的原理

什麼是索引
優點與缺點
原理
想要理解索引原理必須清楚一種資料結構「平衡樹」(非二叉),也就是 b tree 或者 b+ tree,重要的事情說三遍:“平衡樹,平衡樹,平衡樹”。當然, 有的資料庫也使用雜湊桶作用索引的資料結構 , 然而, 主流的 RDBMS 都是把平衡樹當做資料表預設的索引資料結構的。

linux--

列印第二列

awk '{print $2}' test.file
# awk -F ":" '{print $2}' test2.txt  : f 分割
cut -d " " -f 2 test1.txt
# cut -d ":" -f 2 test2.txt 
sed "s/^[^ ]* \([^ ]*\) [^ ]* [^ ]*/\1/g" test1.txt 
# sed "s/^[^:]*:\([^:]*\):[^:]*:[^:]*/\1/g" test2.txt

埠衝突

檢視 9000 這個埠是否被使用

netstat -lnt | grep 9000 
# # 根據埠檢視程序資訊
  lsof -i : 9000
#  結束佔用埠的程序:killall 程序名
#  雖然我們不建議用這種本末倒置的方法來解決衝突問題,
#但某些情況下還是可以直接結束掉佔用程序的
#(比如重啟Apache時程序沒有完全退出,導致重啟失敗)

自動化測試的價值

(1)你怎麼做的自動化
(2)什麼樣的介面級別加入自動化
(3)自動化使用 場景,收益

效能測試

(1)關注於哪些指標
(2)怎麼調優?

多型

(1)什麼是多型
(2)好處
https://www.cnblogs.com/chenssy/p/3372798.html

相關文章