總結(三)----2020上


一、百度

1.自我介紹

2.技能提問:

  • awk sed命令,文件處理,日志過濾相關,如t.txt 統計文件中hello出現的次數,txt文件的總行數

    grep -o hello t.txt | wc -l    //單詞出現次數

    cat logfile.txt | wc -l    //行數

  • python數據類型有哪些,列表元素增刪,request模塊介紹

    number(數字)、string(字符串)、Boolean(布爾值)、None(空值)、list(列表)、tuple(元組)、dict(字典)、set(集合)

      append(1)    //列表末尾添加一個元素

    extend([2,3,4])    //列表末尾添加多個元素

    insert(1,value)    //  在下標出添加一個元素

    remove(2)    //刪除單個元素,刪除首個符合條件的元素,按值刪除

    pop(1)    //刪除單個或多個元素,按位刪除(根據索引刪除)

    del list(1)    //它是根據索引(元素所在位置)來刪除

  • C/C++什么是多態,深拷貝淺拷貝的了解並實現一個例子

    定義:多態的定義簡單來說就是使一條語句有多種狀態。

    實現方式:多態的實現方式分為三塊:重載、重寫、重定義。

      重載是在同一作用域內(不管是模塊內還是類內,只要是在同一作用域內),具有相同函數名,不同的形參個數或者形參類型。返回值可以相同也可以不同(在函數名、形參個數、形參類型都相同而返回值類型不同的情況下無法構成重載,編譯器報錯。

      重寫是在不同作用域內(一個在父類一個在子類),函數名、形參個數、形參類型、返回值類型都相同並且父類中帶有virtual關鍵字(換言之子類中帶不帶virtual都沒有關系)。

      重定義是在不同作用域內的(一個在父類一個在子類),只要函數名相同,且不構成重寫,均稱之為重定義

  • 網絡七層協議,tcp建立連接、斷開連接過程及處於那一層,http處於那一層

    tcp:傳輸層

    http:應用層,

    IP:網絡層。

 

 

 

  • http和https區別,get和posts區別,put和post區別

    HTTP特點

    無狀態:協議對客戶端沒有狀態存儲,對事物處理沒有“記憶”能力,比如訪問一個網站需要反復進行登錄操作
    無連接:HTTP/1.1之前,由於無狀態特點,每次請求需要通過TCP三次握手四次揮手,和服務器重新建立連接。比如某個客戶機在短時間多次請求同一個資源,服務器並不能區別是否已經響應過用戶的請求,所以每次需要重新響應請求,需要耗費不必要的時間和流量。
    基於請求和響應:基本的特性,由客戶端發起請求,服務端響應
    簡單快速、靈活
    通信使用明文、請求和響應不會對通信方進行確認、無法保護數據的完整性

    HTTPS特點

    基於HTTP協議,通過SSL或TLS提供加密處理數據、驗證對方身份以及數據完整性保護

      內容加密:采用混合加密技術,中間者無法直接查看明文內容

      驗證身份:通過證書認證客戶端訪問的是自己的服務器

      保護數據完整性:防止傳輸的內容被中間人冒充或者篡改

   HTTPS和HTTP的區別主要如下:

    1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。

    2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。

    3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。

    4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

  get和post區別:

  1、GET請求參數直接拼接在url后面例如:url?params1=value1&param2=value2,POST請求的參數則是放到body體
  2、瀏覽器會自動緩存GET請求,而POST不會自動緩存,除非手動設置
  3、GET 請求在瀏覽器中可回退,而POST會再次請求
  4、GET請求時只能通過url編碼,而POST則可以支持多種編碼格式
  5、GET的請求參數可以被完整保存到歷史記錄中,而POST不會被保留
  6、GET產生的url可以被bookmark,而POST不可以
  7、GET可接受的參數類型為ASCII字符,而POST沒有限制
  8、GET在ulr中傳送的參數有長度限制, 而POST沒有限制
  真正的區別:
  GET請求只會產生一個TCP包,也就是說瀏覽器會把所有的請求數據(header和data)一起發出去,服務器響應200時成功
  POST 請求“可能” 會產生兩個TCP包,第一次瀏覽器會先發送header,服務器響應100后,再次發送data
  也就是說GET只需一次就將貨物送到,而POST 會先告訴服務器我要發送數據,然后再把數據送過去,所以在調用時間上POST要稍微慢一點

  udp和tcp區別:

  1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接  

  2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付

  3、TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的

    UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)

  4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信

  5、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節

  6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道

  7、UDP具有較好的實時性,工作效率比TCP高,適用於對高速傳輸和實時性有較高的通信或廣播通信。

  • 瀏覽器發起一個請求到獲取頁面信息經歷了那些過程

    1、首先,在瀏覽器地址欄中輸入url

    2、瀏覽器先查看瀏覽器緩存-系統緩存-路由器緩存,如果緩存中有,會直接在屏幕中顯示頁面內容。若沒有,則跳到第三步操作。

    3、在發送http請求前,需要域名解析(DNS解析),解析獲取相應的IP地址。

    4、瀏覽器向服務器發起tcp連接,與瀏覽器建立tcp三次握手。

    5、握手成功后,瀏覽器向服務器發送http請求,請求數據包。

    6、服務器處理收到的請求,將數據返回至瀏覽器

    7、瀏覽器收到HTTP響應

    8、讀取頁面內容,瀏覽器渲染,解析html源碼

    9、生成Dom樹、解析css樣式、js交互

    10、客戶端和服務器交互

    11、ajax查詢

    其中,步驟2的具體過程是:

    瀏覽器緩存:瀏覽器會記錄DNS一段時間,因此,只是第一個地方解析DNS請求;
    操作系統緩存:如果在瀏覽器緩存中不包含這個記錄,則會使系統調用操作系統,獲取操作系統的記錄(保存最近的DNS查詢緩存);
    路由器緩存:如果上述兩個步驟均不能成功獲取DNS記錄,繼續搜索路由器緩存;
    ISP緩存:若上述均失敗,繼續向ISP搜索。

  • 售貨機的測試case

  • 登錄頁面(用戶名和密碼輸入框及登錄按鈕)

  • 項目測試流程

3.代碼:

  • 快排

  • 鏈表逆序返回一個數組

  • 青蛙跳台階問題(斐波那契數列)

二、滴滴

  1. 一面:

    技能:講解測試的后端項目,講解開發的工具

         簡單聯表查詢sql

    代碼:手寫二分查找並設計用例

  2.二面:

    講解工具

    穩定性測試怎么測,如果上線后發現流量扛不住怎么辦

 

三、愛奇藝

1、技能:自動化測試相關、工作中那些是可以自動化提效的

    code review中發現了那些常見問題

2.非技術類問題:

  • 每份工作,工作內容,具體復制,個人亮點(對業務的理解能力和掌握能力),改進點,最終收益狀況,舉實際例子和數據

  • 離職原因

  • 個人優勢、劣勢,近期規划

  • 工作傾向:技術、業務

  • 舉例說清楚工作內容,另外在這個例子中最好有后續提效的點(可以是別人做的),怎么考慮的,具體怎么落地的,最終效果怎么樣

  • 效果切記可以量化,量化的值怎么來的

  • 業務特點(邏輯復雜,流程分支太多),結果,架構,難點,提效

 

四、西瓜

1.一面

  • 網絡協議

  • 長連接短連接(分別是什么,適用於什么場景)

    HTTP協議長連接和短連接本質上是TCP的長連接和短連接。

    短連接

    連接->傳輸數據->關閉連接
    比如HTTP是無狀態的的短鏈接,瀏覽器和服務器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。
    具體就是 瀏覽器client發起並建立TCP連接 -> client發送HttpRequest報文 -> server接收到報文->server handle並發送HttpResponse報文給前端,發送完畢之后立即調用socket.close方法->client接收response報文->client最終會收到server端斷開TCP連接的信號->client 端斷開TCP連接,具體就是調用close方法。

    也可以這樣說:短連接是指SOCKET連接后,發送接收完數據后馬上斷開連接。
    因為連接后接收了數據就斷開了,所以每次數據接受處理不會有聯系。 這也是HTTP協議無狀態的原因之一。

    長連接
    連接->傳輸數據->保持連接 -> 傳輸數據-> ...........->直到一方關閉連接,多是客戶端關閉連接。
    長連接指建立SOCKET連接后不管是否使用都保持連接,但安全性較差。

    

    如果業務來往比較頻繁,則選擇長連接。

    如果server要主動給client發數據,則選擇長連接。

 

什么是長連接、短連接?

在HTTP/1.0中默認使用短連接。也就是說,客戶端和服務器每進行一次HTTP操作,就建立一次連接,任務結束就中斷連接。當客戶端瀏覽器訪問的某個HTML或其他類型的Web頁中包含有其他的Web資源(如JavaScript文件、圖像文件、CSS文件等),每遇到這樣一個Web資源,瀏覽器就會重新建立一個HTTP會話。

而從HTTP/1.1起,默認使用長連接,用以保持連接特性。使用長連接的HTTP協議,會在響應頭加入這行代碼:

Connection:keep-alive 

在使用長連接的情況下,當一個網頁打開完成后,客戶端和服務器之間用於傳輸HTTP數據的TCP連接不會關閉,客戶端再次訪問這個服務器時,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。實現長連接需要客戶端和服務端都支持長連接。

HTTP協議的長連接和短連接,實質上是TCP協議的長連接和短連接。

  

  • http及https區別,前端輸入一個url界面沒有響應怎么排查這個問題,測試流程,驗收測試在那個階段、

  • 黑盒白盒區別,白盒測試方法,

  • 編程題(輸出數組中出現次數最多且值最大的數字),

  • 寫常用sql,hive跟mysql區別

    Hive采用了類SQL的查詢語言HQL(hive query language)。除了HQL之外,其余無任何相似的地方。Hive是為了數據倉庫設計的。

    存儲位置:Hive在Hadoop上;Mysql將數據存儲在設備或本地系統中;
    數據更新:Hive不支持數據的改寫和添加,是在加載的時候就已經確定好了;數據庫可以CRUD;
    索引:Hive無索引,每次掃描所有數據,底層是MR,並行計算,適用於大數據量;MySQL有索引,適合在線查詢數據;
    執行:Hive底層是MarReduce;MySQL底層是執行引擎;
    可擴展性:Hive:大數據量,慢慢擴去吧;MySQL:相對就很少了

  • 頭條的消息系統(評論、點贊、消息提醒等)怎么設計測試用例(從前后端分別考慮)

  • DNS工作原理

    DNS是應用層協議,事實上他是為其他應用層協議工作的,包括不限於HTTP和SMTP以及FTP,用於將用戶提供的主機名解析為IP地址。

    具體過程如下:
    ①用戶主機上運行着DNS的客戶端,就是我們的PC機或者手機客戶端運行着DNS客戶端了。
    ②瀏覽器將接收到的url中抽取出域名字段,就是訪問的主機名,比如http://www.baidu.com/,並將這個主機名傳送給DNS應用的客戶端。
    ③DNS客戶機端向DNS服務器端發送一份查詢報文,報文中包含着要訪問的主機名字段(中間包括一些列緩存查詢以及分布式DNS集群的工作)。
    ④該DNS客戶機最終會收到一份回答報文,其中包含有該主機名對應的IP地址。
    ⑤一旦該瀏覽器收到來自DNS的IP地址,就可以向該IP地址定位的HTTP服務器發起TCP連接。

  • 平時涉及哪些測試方法

2.二面

  • java多態、

  • 多線程安全問題

    什么是線程安全問題?簡單的說,當多個線程在共享同一個變量,做讀寫的時候,會由於其他線程的干擾,導致數據誤差,就會出現線程安全問題。

     使用多線程同步(synchronized)或者加鎖lock

    為什么這兩種方法可以解決線程的安全問題?

    當把可能發生沖突的代碼包裹在synchronized或者lock里面后,同一時刻只會有一個線程執行該段代碼,其他線程必須等該線程執行完畢釋放鎖以后,才能去搶鎖,獲得鎖以后,才擁有執行權,這樣就解決的數據的沖突,實現了線程的安全。

  • codeReview發現的典型問題、

  • 一張表里某個字段升級后需要測試哪些,

數據庫測試點

 

1. 頁面提交成功時檢查數據是否正確地保存在數據庫中

 

2. 檢查不接受空值的列值

 

3. 數據應根據表設計被存儲在單個或多個表中

 

4. 索引名稱應按照標准如IND_ <表名> _ < 列名>

 

5. 表應該有主鍵

 

6. 應對表中的列給出相應的描述信息(除了諸如創建時間、創建人等審計列)

 

7. 應該為每個數據庫的添加/更新操作添加日志

 

8. 應該為需要的表創建索引

 

9. 檢查是否只有操作完全成功后才將數據提交到數據庫中

 

10. 一旦事務失敗數據應該回滾

 

11. 數據庫名稱應按照應用程序類型命名,即測試,UAT,沙箱,現場 (盡管這不是一個標准,但對數據庫維護是很有幫助的)

 

12. 數據庫邏輯名稱應根據數據庫名稱命名(這不是標准但又有利於數據庫維護)

 

13. 存儲過程不應該以前綴“sp_”命名

 

14. 檢查表審計列的值 (如創建日期、創建人、更新日期、更新者、已刪除、刪除日期、刪除者等等) 填充正確

 

15. 檢查輸入數據保存時是否未被截斷,在頁面中顯示的字段長度和數據庫的字段長度應該是相同的

 

16. 檢查包含最小、最大和浮點的數值字段

 

17. 檢查數值字段含有負值(接受和拒絕兩種情況)

 

18. 檢查單選按鈕和下拉列表正確地保存在數據庫中

 

19. 檢查數據庫字段設計的數據類型和數據長度是否正確

 

20. 檢查所有的表約束條件如主鍵、外鍵等是否正確實現

 

21. 測試存儲過程和觸發器的樣本輸入數據

 

22. 輸入數據的首尾空格應在數據保存到數據庫之前被自動隱去

 

23. 主鍵列不允許為NULL值

 

  • 視頻如何測試、

 

功能測試

    • 視頻資源可以正常獲取,不管是服務器返回還是后台添加等
    • 視頻的封面圖、頁面UI等正常
    • 若一個視頻中涉及到上一個視頻、下一個視頻時點擊后都能正常切換到相應的視頻,且視頻正常播放
    • 音量大小(如靜音模式下播放時無聲音)
    • 視頻最大化、最小化(如切換到最大化時視頻全屏播放)
    • 播放列表的播放順序,單循環,多循環,順序播放,隨機播放(還需要考慮下視頻若是后台上傳的,若在后台將某視頻進行增加,刪除,修改操作,驗證視頻播放是否正常)
    • 其他邏輯:
    1. 點擊視頻時,視頻正常播放;再次點擊時暫停播放資源;
    2. 播放視頻時應用切換到后台---切換到后台后暫停播放,再次進入應用為暫停狀態;
    3. 播放時殺掉程序進程---視頻播放結束,不保留觀看進度,再次進入到該視頻,從頭播放
    4. 播放視頻A時切換到視頻列表下的視頻B----播放視頻B;從進度B開始播放
    5. 播放視頻A時切換到其他項目下的視頻C---播放視頻C;再次切換到視頻A時從頭播放
    6. 播放時上下滾動頁面---視頻播放器位置恆定,滾動不影響播放

兼容性測試

    • 平台兼容性:如Android、IOS
    • 系統兼容性:Android4.4-8.0;IOS8.0-12;謹記哦(低版本的機型問題還是蠻多的,如IOS8系統播放器問題較多,測試要引起注意) 
    • 播放器是否與其他類型播放器兼容(需要考慮播放過程中是否和音頻等相沖突)

  網絡測試

    • 網絡切換測試:WiFi-移動網;移動網-WiFi;WiFi-無網;無網-WiFi;無網-移動網
    • 弱網測試:弱網情況下,視頻播放是否有卡頓、黑屏、閃退等情況
    • 無網進入時是否有提示info;
    • 移動網進行播放時是否有非WiFi彈框提示;
    • 播放過程中斷網時,播放完已加載的部分后停止播放且有相應提示;
    • 播放過程中切換網絡時有相應提示
    • 踩過的坑:Android7.1.2版本切換4G網絡查看視頻時,出現黑屏,卡死,崩潰等情況
    • 異常測試

  半屏/全屏切換測試

    • 視頻右下角全屏按鈕,點擊全屏橫屏播放視頻;
    • 點擊收起按鈕,全屏收起回到當前頁半屏播放
    • 兩者切換播放回到當前頁面時,頁面展示正常(IOSXX項目曾出現頁面導航錯亂的問題)

  橫豎屏切換測試

    • 旋轉模式打開后,驗證頁面及視頻播放是否正常;
    • 橫屏模式下播放完視頻,自動切換回豎屏模式;

  視頻中斷測試

    • 播放中快進/后退進度,能正常播放本地資源,快進不卡頓,無延遲;
    • 播放中切換到后台,切換到后台后暫停播放,再次進入視頻為暫停狀態;
    • 視頻播放時殺掉進程,則視頻播放結束(是否保留觀看進度具體看產品需求);

  視頻易用性測試

    • 界面是否方便,整潔(如視頻封面圖,片頭,片尾,視頻圖像等各個界面)
    • 快捷鍵是否正確
    • 菜單是否正確
    • 圖像是否清楚(在標清、高清,超清等模式下切換時視頻播放正常,無卡頓黑屏閃退等問題,在切換過程中是否有加載loading的提示)
    • 拖拽滾動條(拖、拽功能用起來是否友好)
    • 是否具備播放記憶功能(即播放進度是否有記錄)
    • 能否自動保存以前的播放列表

 

 

  • 工作中怎么合理安排工作內容、

  • 個人優勢、

  • 單例有幾種實現方式

  餓漢式2種(靜態常量餓漢式、靜態代碼塊餓漢式)

  懶漢式3種(線程不安全懶漢式、線程安全懶漢式、同步代碼塊懶漢式)

  還有3種(雙重檢查、靜態內部類、枚舉方式)

  • 寫sql(如何統計某張表里每個小時(存的年月日時分秒格式)的數據量)、

 

SELECT DATE_FORMAT(TimeStart, '%Y-%m-%d %H:00:00') AS time, COUNT(*) AS num
FROM track
WHERE Flag = 0 AND Duration >= 300
GROUP BY time
ORDER BY time;

 

SELECT HOUR(e.time) as Hour,count(*) as Count 
FROM error_log e 
WHERE e.date = '2017-09-02' 
GROUP BY HOUR(e.time) ORDER BY Hour(e.time);

 

  • 算法題(找到字符串中第一個非重復的字符)、

  • 測試工作中用到什么輔助性的工具、

  • 最近面了哪些公司,為什么離職、對哪些公司比較有意向

  • 介紹整體項目背景及項目做的事請及測試內容及測試形式,工作中的痛點是怎么推進的。

3、西瓜三面:

自己的優勢跟不足

白盒自動化測試用例的積累

開發跟測試時間的比例

工作方法是不是適合快速的迭代

發現的比較經典的問題

介紹一下項目跟具體負責的部分

介紹一下自動化方面做的比較好的

可能白盒的測試方法並不適用於移動端?

最近面了哪些公司,哪些公司是比較意向

離職原因

為什么考慮字節

五、美團

1、自我介紹,大概介紹項目

2、sql:輸出某個字段下值出席次數超過三次的值

   1、SELECT business_unit_code from t_replenish_config GROUP BY business_unit_code  HAVING count( 1)>3;

   2、SELECT business_unit_code from (

     SELECT business_unit_code,count(1) as sum from t_replenish_config GROUP BY business_unit_code) a 

     where a.sum>3

3、算法題:[2,3,5,6,7,3,5,3,9]輸出3的位置,但不能順序遍歷

4、多線程實現方式

  實現Runnable接口、繼承Thread類、實現Callable接口並通過FutureTask包裝、匿名內部類、Lambda表達式、線程池、定時器、

5、性能測試除了關注並發,還需要關注什么指標

  前端主要關注點是:

  • 響應時間:用戶從客戶端發出請求,並得到響應,以及展示出來的整個過程的時間。
  • 加載速度:通俗的理解為頁面內容顯示的快慢。
  • 電量:APP的耗電量。
  • 流量:APP所消耗的流量

  后端主要關注的是:

  • 響應時間:接口從請求到響應、返回的時間。
  • 並發用戶數:同一時間點請求服務器的用戶數,支持的最大並發數。
  • 內存占用:APP的內存開銷。
  • 吞吐量(TPS):Transaction Per Second, 每秒事務數。在沒有遇到性能瓶頸時:TPS=並發用戶數*事務數/響應時間。
  • 錯誤率:失敗的事務數/事務總數。
  • 資源使用率:CPU占用率、內存使用率、磁盤I/O、網絡I/O。

6、測試在除了測試環節以外的流程中的角色,prd評審時提出了哪些問題

7、百度搜索功能測試

8、采購系統在整個供應鏈上的作用,介紹一下系統背景及平時的測試策略,跟各系統的交互,如果依賴數據沒准備好怎么測試

9、linux命令:輸出一個文件中包含abc的總行數    grep 'abc' a.txt ,寫的這個,只是打印明細,沒有統計總數

  find access_log.20160423.txt | xargs cat | grep .*helloworld.*|wc -l    //統計含"helloworld"字符串的總行數

       或者:grep -o aaa file | wc -l

10、接口測試入參校驗

 

1. 段值為空

 

2. 字段值為“”

 

3. 字段值為null

 

4. 身份證號碼全為數字(目前身份證號碼好像都是18位的)----參數符合身份證規則

 

5. 身份證號碼中包含字母(據說是大寫字母,不知道小寫字母的有沒有)---參數符合身份證規則

 

6. 交易金額:0、整數、一位小數、兩位小數、一個較大的數(可能會觸發風控限額等)---參數符合常識+編程語言的數據類型

 

7. 注意接口字段的單位(接口單位和DB落庫單位不一致時,要注意對應關系;上下游聯調要注意接口字段單位的轉換,我們系統用忽、上游系統可能用分、銀行可能用元)

 

8. 證件不只有身份證一種,還有護照、港澳通行證等。

 

9. 如果是前端頁面輸入的字段,輸入空格、特殊字符的概率等。

 

10. 有關聯關系的字段要進行相關校驗。比如身份證號碼、證件類型、戶名之間的關系

 

 

六、字節

1、一面

  • 編程:給你n,輸出一個n*n的二維數組,要求斜着填充

  • 給編輯-->草稿-->機器審核-->人工審核-->通過/不通過,設計用例 畫狀態機

  • 項目流程

  • 工具實現

  • hashmap有了解嗎

  • 印象深的bug,解決方案是什么

  • 是否做過后端自動化,成果是什么

  • 系統結構

2、二面

  • 編程:字符串是不是ip地址的判斷並設計用例

  • docker

  • Jenkins

  • hashmap

  • 職業規划

  • 對公司使用的環境治理工具的實現原理是否清楚

3、三面

  • java內存,垃圾回收

  • @override注解含義

    表示子類重寫了父類的方法

  • 印刻最深刻的事情(難點+突破)

 

七、字節

1、設計共享單車系統

2、單例模式應用場景

    1).外部資源:每台計算機有若干個打印機,但只能有一個PrinterSpooler,以避免兩個打印作業同時輸出到打印機。內部資源:大多數軟件都有一個(或多個)屬性文件存放系統配置,這樣的系統應該有一個對象管理這些屬性文件 
    2). Windows的Task Manager(任務管理器)就是很典型的單例模式(這個很熟悉吧),想想看,是不是呢,你能打開兩個windows task manager嗎? 不信你自己試試看哦~ 
    3). windows的Recycle Bin(回收站)也是典型的單例應用。在整個系統運行過程中,回收站一直維護着僅有的一個實例。 
    4). 網站的計數器,一般也是采用單例模式實現,否則難以同步。 
    5). 應用程序的日志應用,一般都何用單例模式實現,這一般是由於共享的日志文件一直處於打開狀態,因為只能有一個實例去操作,否則內容不好追加。 
    6). Web應用的配置對象的讀取,一般也應用單例模式,這個是由於配置文件是共享的資源。 
    7). 數據庫連接池的設計一般也是采用單例模式,因為數據庫連接是一種數據庫資源。數據庫軟件系統中使用數據庫連接池,主要是節省打開或者關閉數據庫連接所引起的效率損耗,這種效率上的損耗還是非常昂貴的,因為何用單例模式來維護,就可以大大降低這種損耗。 
    8). 多線程的線程池的設計一般也是采用單例模式,這是由於線程池要方便對池中的線程進行控制。 
    9). 操作系統的文件系統,也是大的單例模式實現的具體例子,一個操作系統只能有一個文件系統。

 

3、shell中source和sh的區別

  •    source FileName    作用:在當前bash環境下讀取並執行FileName中的命令。該filename文件可以無"執行權限"    注:該命令通常用命令“.”來替代。

    通常用於重新執行剛修改的初始化文檔。

  • sh FileName  / bash FileName

         作用:在當前bash環境下讀取並執行FileName中的命令。該filename文件可以無"執行權限"

         注:兩者在執行文件時的不同,是分別用自己的shell來跑文件。

  • 主要區別,source是在當前的shell下運行文件內容,而sh或bash或其他shell+腳本文件,是在新的shell中執行。
  • source一般用於執行一些配置文件,比如.bashrc等

 

4、tcp3次握手,4次揮手

 

第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。

 

第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

 

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。

 

 1)客戶端進程發出連接釋放報文,並且停止發送數據。釋放數據報文首部,FIN=1,其序列號為seq=u(等於前面已經傳送過來的數據的最后一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號。

2)服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,並且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處於半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。

3)客戶端收到服務器的確認請求后,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最后的數據)。

4)服務器將最后的數據發送完畢后,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由於在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號為seq=w,此時,服務器就進入了LAST-ACK(最后確認)狀態,等待客戶端的確認。

5)客戶端收到服務器的連接釋放報文后,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP連接還沒有釋放,必須經過2∗∗MSL(最長報文段壽命)的時間后,當客戶端撤銷相應的TCB后,才進入CLOSED狀態。

6)服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB后,就結束了這次的TCP連接。可以看到,服務器結束TCP連接的時間要比客戶端早一些。

 

5、算法:數組中超過一半的數字,模擬撲克牌洗牌

6、數據庫join 有什么區別

7、表name、subject、score找出兩種成績大於80的點

8、判斷兩個表相交的相交點

9、get和post區別,http和https區別

10、算法:一個人只能跳1,2,3級,跳100級有多少種方法

11、假設抖音發生卡頓,P98 p50發生變化,怎么分析問題,

12、shell 逐行讀取文件,  查看某個進程

while read line
do
echo $line
done  < filename

13、設計前端自動化平台,怎么設計

14、離職原因

15、兼容性測試

16、內存崩潰和內存泄露

  • 內存溢出 OOM:指你的應用的內存已經不能滿足正常使用了,堆棧已經達到系統設置的最大值,進而導致崩潰,這是一種結果描述。
  • 內存泄漏(Memory Leak):指你的應用使用資源之后沒有及時釋放,導致應用內存中持有了不需要的資源,這是一種狀態描述。你向系統申請分配內存進行使用(new),可是使用完了以后卻不歸還(delete),結果你申請到的那塊內存你自己也不能再訪問(也許你把它的地址給弄丟了),而系統也不能再次將它分配給需要的程序。
    通常都是由於內存泄露導致堆棧內存不斷增大,從而引發內存溢出。 從用戶使用程序的角度來看,內存泄漏本身不會產生什么危害,作為一般的用戶,根本感覺不到內存泄漏的存在。真正有危害的是內存泄漏的堆積,這會最終消耗盡系統所有的內存。
  • 1、內存泄漏memory leak :是指程序在申請內存后,無法釋放已申請的內存空間,一次內存泄漏似乎不會有大的影響,但內存泄漏堆積后的后果就是內存溢出。 
    2、內存溢出 out of memory :指程序申請內存時,沒有足夠的內存供申請者使用,或者說,給了你一塊存儲int類型數據的存儲空間,但是你卻存儲long類型的數據,那么結果就是內存不夠用,此時就會報錯OOM,即所謂的內存溢出

   3、二者的關系:內存泄漏的堆積最終會導致內存溢出內存溢出就是你要的內存空間超過了系統實際分配給你的空間,此時系統相當於沒法滿足你的需求,就會報內存溢出的錯誤。

  內存溢出原因: 
  1.內存中加載的數據量過於龐大,如一次從數據庫取出過多數據; 
  2.集合類中有對對象的引用,使用完后未清空,使得JVM不能回收; 
  3.代碼中存在死循環或循環產生過多重復的對象實體; 
  4.使用的第三方軟件中的BUG; 
  5.啟動參數內存值設定的過小

 

17、什么操作會導致內存泄漏

  1. setTimeout 的第一個參數使用字符串而非函數的話,會引發內存泄露

 

  2. 全局變量

 

  3. 閉包

 

  4. dom清空或刪除時,事件未清除導致的內存泄漏

 

  5. 控制台日志

 

  6. 循環

八、滴滴

1.一面

sql 成績倒序輸出

linux  查看文件前十行,后十行,第十行

滴滴打車流程,測試時間10天,如何分配

印象比較深的項目

自動化怎么做的,有什么難點

2.二面

前端頁面空白,如何排查問題

  1. 打開控制台查看靜態資源是否加載失敗(資源加載順序也需關注下)

  2. 打開控制台查看請求是否異常(網絡狀況也需關注下)

linux 查看服務器端口、查看服務是否運行、怎么看docker中服務是否運行 

git 合並分支到主干

get可以提交表單嗎,get post區別

https://www.cnblogs.com/chy8/p/10397226.html

dns原理,server存儲在哪里

python list和tumple區別

  • list是一種有序的集合,可以隨時添加和刪除其中的元素
  • tuple是一種有序列表,它和list非常相似,

    tuples具有immutable的屬性,意味着tuples內的元素一旦建立就無法更改、刪除、排序,然而我們還是可以向list和tuples添加數據的。

  • 由於tuples的操作擁有更小的size,也就意味着tuples在操作時相比list更快,當數據足夠大的時候tuples的數據操作性能更優
  • 由上述可知,tuples是immutable,list是mutable的,所以我們可以將tuples用作dictionary的key,但是list不可以

   因為tuples不可變,所以代碼更安全。如果可能,能用tuple代替list就盡量用tuple。

 

python 自帶http庫

tcp第二次握手,傳的什么值

mysql默認引擎是什么

host unavailable 是什么問題,怎么排查

 九、字節

一面:

1.sql

2.接口,插入數據庫,一條新增一條修改,設計測試用例

3.linux:一條命令殺死8080端口進程

sudo kill -9 $(lsof -i:端口號 -t)    #-t 只輸出 PID
sudo fuser -k -n tcp 80

 

4.python裝飾器

5.字符串M、charN,判斷字符串是否包含N,包含的N可以是亂序的,但是中間不能有間隔

 二面:

1.編程題:輸入list,tumple,string,int,等等類型的參數,將所有的value為int的改成string

2.項目應用

3.接口做過diff嗎?接口測試造數據?

 

十、快手

  • 一面

   1、python os和sys區別

  2、編程 

  •  二面

  1、編程 編程 比較app版本大小

  

十一、高德

A、一面

1、python3和python2的區別,print為什么要改成3的風格為什么?

2、python 列表和元組的區別

3、python list 的append和extend區別

4、python多線程實現方式,最基礎的實現方式模塊是什么?

5、python常用的模塊都有那些?

#os模塊就是對操作系統進行操作,使用該模塊必須先導入模塊:
import os

 #getcwd() 獲取當前工作目錄(當前工作目錄默認都是當前文件所在的文件夾)

 #chdir()改變當前工作目錄

  • sys 模塊
  • os模塊是與操作系統交互的一個接口
  • sys模塊用於提供對python解釋器的相關操作。
  • time模塊
  • datetime模塊

  • hashlib加密

  • logging模塊簡介

  • random

  • json&pickle

6、閉包有了解嗎?

7、python內存泄漏的原因?
  

自定義函數一定要有return,即使不需要也要加上,否則在此函數運行完畢后,不會自動清理內存,造成內存泄漏!

什么是內存泄露?

內存泄露是那些使用過后,應該被清理卻沒有被清理的內存一直占據着系統資源,通過長時間的累積導致系統崩潰。

Python的垃圾回收機制

1、引用計數

原理:當一個對象的引用被創建或者復制時,對象的引用計數+1,當一個對象的引用被銷毀時,對象的引用計數-1,當對象的引用計數變為0時,就意味着已經沒有再被使用了,可以將其內存釋放掉。

優點:引用計數的優點是實時性,任何對象只要沒有被引用就會被釋放。

缺點:1.維護引用計數需要額外的操作,花費時間和空間。2.引用計數無法解決循環引用問題,當兩個對象互相引用對方時,每個對象的計數都不是0,這些對象永遠不會被引用計數機制回收。

2、標記-清除

標記清除只關注那些可能會產生循環引用的對象,一般都是容器對象,比如列表、字典、類等等。

過程:

1.當觸發標記清除機制時,首先將所有對象及引用計數復制出一份副本,對副本進行以下操作

2.假設AB互相引用對方,遍歷每個對象,如A,如果A中引用了B,則先將B的引用計數-1,然后去看B,如果B引用了A,則將A的引用計數也-1,這樣就將對象的真實有效引用數暴露了出來。

3.遍歷完成后,如果有效引用為0則說明需要回收。

缺點:效率低

3.分代回收

分代回收是用空間換時間,認為如果一個對象存活的時間越長越有可能不是垃圾,把那些在第一次垃圾回收后沒有被清除的對象放入二代,減少標記清除檢查的次數。一共分為三代。

 


8、python gc的原理?

9、編程題:一個log文件,有日志請求的信息 格式2020-01-01 13:00:11  http://www.baidu.com/adblllll.....

      統計每個自然小時段內,請求次數最多的域名和其次數

10、用例設計:程序根據兩個數加和並輸出,設計用例

11、接口性能測試有了解嗎?有關注什么?怎么判斷是否符合預期結果

12、OSI協議都有那些層,那些協議都在哪一層?

 

 

應用層:TELNET、FTP、TFTP、SMTP、SNMP、HTTP、BOOTP、DHCP、DNS(注:DNS使用的傳輸協議既可為TCP又可為UDP)

表示層: 文本:ASCII,EBCDIC 圖形:TIFF,JPEG,GIF,PICT 聲音:MIDI,MPEG,QUICKTIME

會話層:Socket、NFS、SQL、RPC 、X-WINDOWS、ASP(APPTALK會話協議)、SCP

傳輸層:TCP、UDP、SPX

網絡層:IP、IPX、ICMP、RIP、OSPF(Open Shortest Path First開放式最短路徑優先)

數據鏈路層:SDLC、HDLC、PPP、STP(Spanning Tree Protocol)、幀中繼

物理層:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45

 

13、http和https區別

14、一條http請求有那些重要組成部分

15、常見http響應碼,403 404 405有了解嗎

403 Forbidden 對被請求頁面的訪問被禁止。
404 Not Found 服務器無法找到被請求的頁面。
405 Method Not Allowed 請求中指定的方法不被允許。
500 Internal Server Error 請求未完成。服務器遇到不可預知的情況。
501 Not Implemented 請求未完成。服務器不支持所請求的功能。
502 Bad Gateway 請求未完成。服務器從上游服務器收到一個無效的響應。
504 Gateway Timeout 網關超時。

16、linux

       查詢系統有幾個核,系統物理信息

查看當前操作系統內核信息
$ uname -a
查看CPU是幾核
$ cat /proc/cpuinfo |grep "cores"|uniq

linux命令:cat /proc/cpuinfo    #用命令判斷幾個物理CPU,幾個核等:

       查進程號

       看盤用了多少,看當前目錄使用情況

df查看的是整個系統的空間使用情況,du查看的是目錄和文件夾的使用情況
#查看當前目錄磁盤使用情況:
df -h
#查看當前目錄每個文件夾的情況:
du --max-depth=1 -h 
du -sh : #查看當前目錄總共占的容量。而不單獨列出各子項占用的容量 
du -lh --max-depth=1 : #查看當前目錄下一級子文件和子目錄占用的磁盤容量。

 

17、離職原因

 二、二面

1、怎么測試接口

2、接口性能怎么測試,造成接口性能問題的原因有哪些?

3、安全測試有哪些

4、請求www.taobao.com,都發生了什么?

5、請求后,圖片資源是怎么加載的,圖片地址不同,怎么確定要加載的是這個圖片?

6、http端口是什么,為什么要有不同的端口

7、兩個人請求同一個服務器的同一個端口,服務器怎么區分?怎么知道分別的請求的數據是對應的人的數據

8、tcp三次握手過程

9、tcp位於什么層

10、為什么說http是無狀態的,tcp是有連接的

11、客戶端性能怎么做的,怎么判斷是否符合測試標准,都有哪些問題會消耗性能?

12、做的平台起到了什么作用

13、離職原因

    

 


免責聲明!

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



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