天天看點

總結(三)----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:網絡層。

總結(三)----2020上
  • 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連接配接後不管是否使用都保持連接配接,但安全性較差。

    

總結(三)----2020上

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

    如果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協定都有那些層,那些協定都在哪一層?

總結(三)----2020上

應用層: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、離職原因