天天看點

幾道面試題及擴充

幾道面試題及擴充

問題1:軟體壓力測試&軟體性能測試

     ——出自【北方微電子面試題】。和技術面試官聊項目的時候,面試官問:“你們項目測試的階段有沒有做過壓力測試?”,我的反應當時有點愣了,知道這是一個專業術語,但确切的含義不清楚,應該是軟體的最大的承載量,然後雲雲……

      軟體壓力測試和軟體性能測試的差別是在于他們不同的測試目的。

 軟體壓力測試是為了發現系統能支援的最大負載,他的前提是要求系統性能處在可以接受的範圍内,比如經正常定的頁面3秒鐘内響應; 是以一句話概括就是:在性能可以接受的前提下,測試系統可以支援的最大負載。

 軟體性能測試是為了檢查系統的反映,運作速度等性能名額,他的前提是要求在一定負載下,如檢查一個網站在100人同時線上的情況下的性能名額,每個使用者是否都還可以正常的完成操作等。 概括就是:在不同負載下(負載一定)時,通過一些系統參數(如反應時間等)檢查系統的運作情況;比如我們說某個網站的性能差,嚴格上應該說‘在N人同時線上情況下,這個站點性能很差)

 總之,就像一個方程式:綜合性能=壓力數*性能指數,綜合性能是固定的。

軟體壓力測試是為了得到性能指數最小時候(可以接受的最小指數)最大的壓力數;軟體性能測試是為了得到壓力數确定下的性能指數。

問題2:軟體架構

       ——出自【天津三星電子面試題】,和技術官介紹項目的時候,技術官問道“談談你們項目的軟體架構?”,當時是在問道面向對象知識的時候提到了,我回答了架構+子產品組成的東西。

       其實詳細解讀軟體架構是一個很深的概念,衆說紛纭,大家可以關注《**軟體架構師**》的書,這裡引了一個老外的解讀:在“軟體構架簡介”中,DavidGArlan和 Mary Shaw認為軟體構架是有關如下問題的設計層次:“在計算的算法和資料結構之外,設計并确定系統整體結構成為了新的問題。結構問題包括總體組織結構和全局控制結構;通信、同步和資料通路的協定;設計元素的功能配置設定;實體分布;設計元素的組成;定标與性能;備選設計的選擇。”

       其實我個人了解的網絡協定的OSI參考模型由底層à高層:實體層、鍊路層、網絡層、傳輸層、會話層、表示層、應用層,及其擴充内容就是網絡協定基本的架構。

       以此推斷,可以展開項目問題的回答:“我們軟體系統的設計分為UI(界面)層、對象層、通信層。其中:

      1,UI(界面)層負責顯示系統參數、性能名額等;

      2,對象層負責處理、模拟鍊路之間讀取資訊,資訊分類、排程等,一方面負責處理來自通信層的實際socket或RTI通信的資料,另一方面負責将處理的結果互動給UI(界面)層;

      3,通信層隻負責通信。

      這樣一方面便于程式的擴充,可以通過不同的類來實作,一部分的更新隻需要修改對應的類即可;另一方面程式的結構會非常清晰,便于後續的調試、維護工作。

     然後,可以介紹每一層具體有哪些子產品……”。

問題3:域名解析

      ——出自【青島百靈科技】

      域名雖然便于人們記憶,但機器之間隻認IP位址,它們之間的轉換工作稱為域名解析。

域名解析需要由專門的域名解析伺服器來完成,DNS(DNS是計算機域名系統 (DomainName System 或Domain Name Service) 的縮寫,它是由解析器以及域名伺服器組成的。)就是進行域名解析的伺服器。DNS命名用于Internet的TCP/IP網絡中,通過使用者友好的名稱查找計算機和服務。當使用者在應用程式中輸入 DNS 名稱時,DNS 服務可以将此名稱解析為與之相關的其他資訊,如 IP 位址。因為,你在上網時輸入的網址,是通過域名解析系統解析找到了相對應的IP位址,這樣才能上網。其實,域名的最終指向是IP。

        域名伺服器是指儲存有該網絡中所有主機的域名和對應IP位址,并具有将域名轉換為IP位址功能的伺服器。[1] 其中域名必須對應一個IP位址,而IP位址不一定隻對應一個域名。域名系統采用類似目錄樹的等級結構。域名伺服器為客戶機/伺服器模式中的伺服器方,它主要有兩種形式:主伺服器和轉發伺服器。在Internet上域名與IP位址之間是一對一(或者多對一)的,也可采用DNS輪詢實作一對多。

      下面的www.dlut.edu.cn就對應IP位址202.118.66.66。

幾道面試題及擴充

問題4:段錯誤

        ——出自【某通信公司】

        所謂的段錯誤就是指通路的記憶體超出了系統所給這個程式的記憶體空間。一旦一個程式發生了越界通路,cpu就會産生相應的保護,于是segmentation fault(段錯誤)就出現。

段錯誤應該就是通路了不可通路的記憶體,這個記憶體區要麼是不存在的,要麼是受到系統保護的,還有可能是缺少檔案或者檔案損壞。

       段錯誤的常見形式

      在程式設計中以下幾類做法容易導緻段錯誤,基本是是錯誤地使用指針引起的。

     1)通路系統資料區,尤其是往系統保護的記憶體位址寫資料最常見就是給一個指針以0位址。

     2)記憶體越界(數組越界,變量類型不一緻等):通路到不屬于你的記憶體區域。

     解決方法:我們在用C/C++語言寫程式的時候,記憶體管理的絕大部分工作都是需要我們來做的。實際上,記憶體管理是一個比較繁瑣的工作,無論你多高明,經驗多豐富,難免會在此處犯些小錯誤,而通常這些錯誤又是那麼的淺顯而易于消除。但是手工“除蟲”(debug),往往是效率低下且讓人厭煩的。

     下面将顯示以下的一個存在段錯誤的程式:

幾道面試題及擴充

     作為一個熟練的C/C++程式員,以上代碼的bug應該是很清楚的,因為它嘗試操作位址為0的記憶體區域,而這個記憶體區域通常是不可通路的禁區,當然就會出錯了。

幾種典型的段錯誤

1.

幾道面試題及擴充

     被裝載時,系統把“hello world” 連同其它的字元串和const型資料放入到記憶體的隻讀區。執行時,一個變量s被設為指向該字元串的位置,當再試圖向該位置寫時,就會産生段錯誤。

2,

幾道面試題及擴充

     因為該代碼隻建立了一個空指針,并沒有指向一個具體空間,當指派時,産生段錯誤。

3,

幾道面試題及擴充

 無限遞歸,這會導緻棧溢出,也會産生段錯誤。

繼續閱讀