1. 程式人生 > >筆試面試題總結(一)--- 軟體開發

筆試面試題總結(一)--- 軟體開發

1.Huffman編碼中的貪心策略,該部分所需要的計算時間。

首先,要理解Huffman編碼中那部分用到了貪心演算法,貪心的策略,這樣才能求所需的計算時間。

哈夫曼編碼演算法:每次將集合中兩個權值最小的二叉樹合併成一棵新二叉樹,n-1次合併後,成為最終的一棵哈夫曼樹。這既是貪心法的思想:從某一個最初狀態出發,根據當前的區域性最優策略,以滿足約束方程為條件,以使目標函式最快(或最慢)為原則,在候選集合中進行一系列的選擇,以便儘快構成問題的可行解。

每次求得兩個權值最小的兩個值,用的演算法,網上搜的基本上都是用的堆排序,那麼時間複雜度就是O(nlogn).

構造哈夫曼編碼

哈夫曼提出構造最優字首碼的貪心演算法,由此產生的編碼方案稱為哈夫曼編碼。

哈夫曼演算法以自底向上的方式構造表示最優字首碼的二叉樹T

演算法以|C|個葉結點開始,執行|C|-1次的“合併”運算後產生最終所要求的樹T。 

以f為鍵值的優先佇列Q用在貪心選擇時有效地確定演算法當前要合併的2棵具有最小頻率的樹。一旦2棵具有最小頻率的樹合併後,產生一棵新的樹,其頻率為合併的2棵樹的頻率之和,並將新樹插入優先佇列Q。經過n-1次的合併後,優先佇列中只剩下一棵樹,即所要求的樹T。

演算法huffmanTree用最小堆實現優先佇列Q。初始化優先佇列需要O(n)計算時間,由於最小堆的removeMin和put運算均需O(logn)時間,n-1次的合併總共需要O(nlogn)計算時間。因此,關於n個字元的哈夫曼演算法的計算時間為O(nlogn) 。

2.連通圖、連通分量、強連通圖、弱連通圖

 連通圖:在無向圖中,若從頂點v1到頂點v2有路徑, 則稱頂點v1與v2是連通的。如果圖中任意一對頂點都是連通的,則稱此圖是連通圖。

強連通和弱連通的概念只在有向圖中存在。

強連通圖:在有向圖中,若對於每一對頂點v1和v2, 都存在一條從v1到v2和從v2到v1的路徑,則稱此圖是強連通圖。

強連通圖只有一個強連通分量,即是其自身;非強連通的有向圖有多個強連分量。

單向連通圖:如果有向圖中,對於任意節點v1和v2,至少存在從v1到v2和從v2到v1的路徑中的一條,則原圖為單向連通圖。

弱連通圖:有向圖的所有的有向邊替換為無向邊,所得到的圖稱為原圖的基圖。如果一個

有向圖的基圖是連通圖,則有向圖是弱連通圖

3.一個關於陣列與指標的題目

自己有些模糊,因此程式又實現了一下。

問題:定義陣列和指標如下 char a[5]={'g','t','r','w','u'};   char *p=a;,如下關於對陣列元素的操作是否正確:a[p-a].      printf("%c",a[p-a]); 程式輸出:g。即可以正確訪問。

4.關於switch語句中default語句所放位置的問題。

  switch中的default,一般用在最後,表示非以上的任何情況下而發生的情況,我們一般習慣在他的後面加上個break。但是,如果default不是在最後,  switch還是最後執行default語句,如果default後面帶有break,那麼程式就會正常跳出switch,否則,程式會繼續向後執行switch語句!也就是說,不管default放在什麼位置,它總是在最後一個處理,然後繼續向下處理!所以,最後的處理辦法,避免出現以外結果的最好辦法就是每一個case以及default語句都要加一個break!

5. 作業系統的使用者態和核心態

在CPU的所有指令中,有一些指令是非常危險的,如果錯用,將導致整個系統崩潰。比如:清記憶體、設定時鐘等。如果所有的程式都能使用這些指令,那麼你的系統一天宕機n回就不足為奇了。所以,CPU將指令分為特權指令和非特權指令,對於那些危險的指令,只允許作業系統及其相關模組使用,普通的應用程式只能使用那些不會造成災難的指令。Intel的CPU將特權級別分為4個級別:RING0,RING1,RING2,RING3。

 linux的核心是一個有機的整體。每一個使用者程序執行時都好像有一份核心的拷貝,每當使用者程序使用系統呼叫時,都自動地將執行模式從使用者級轉為核心級,此時程序在核心的地址空間中執行。

當一個任務(程序)執行系統呼叫而陷入核心程式碼中執行時,我們就稱程序處於核心執行態(或簡稱為核心態)。此時處理器處於特權級最高的(0級)核心程式碼中執行。當程序處於核心態時,執行的核心程式碼會使用當前程序的核心棧。每個程序都有自己的核心棧。在處理器的儲存保護中,核心態,或者特權態(與之相對應的是使用者態),是作業系統核心所執行的模式。執行在該模式的程式碼,可以無限制地對系統儲存、外部裝置進行訪問。

當程序在執行使用者自己的程式碼時,則稱其處於使用者執行態(使用者態)。即此時處理器在特權級最低的(3級)使用者程式碼中執行。當正在執行使用者程式而突然被中斷程式中斷時,此時使用者程式也可以象徵性地稱為處於程序的核心態。因為中斷處理程式將使用當前程序的核心棧。這與處於核心態的程序的狀態有些類似。

 處理器總處於以下狀態中的一種:

1、核心態,運行於程序上下文,核心代表程序運行於核心空間;

2、核心態,運行於中斷上下文,核心代表硬體運行於核心空間;

3、使用者態,運行於使用者空間。

從使用者空間到核心空間有三種觸發手段:

 (1).使用者空間的應用程式,通過系統呼叫,進入核心空間。這個時候使用者空間的程序要傳遞很多變數、引數的值給核心,核心態執行的時候也要儲存使用者程序的一些暫存器值、變數等。所謂的“程序上下文”,可以看作是使用者程序傳遞給核心的這些引數以及核心要儲存的那一整套的變數和暫存器值和當時的環境等。

 (2).硬體通過觸發訊號,導致核心呼叫中斷處理程式,進入核心空間。這個過程中,硬體的一些變數和引數也要傳遞給核心,核心通過這些引數進行中斷處理。所謂的“中斷上下文”,其實也可以看作就是硬體傳遞過來的這些引數和核心需要儲存的一些其他環境(主要是當前被打斷執行的程序環境)。

 (3).異常  當CPU在執行執行在使用者態下的程式時,發生了某些事先不可知的異常,這時會觸發由當前執行程序切換到處理此異常的核心相關程式中,也就轉到了核心態,比如缺頁異常。

6. 搶佔式核心和非搶佔式核心的區別

核心搶佔(可搶佔式核心):即當程序位於核心空間時,有一個更高優先順序的任務出現時,如果當前核心允許搶佔,則可以將當前任務掛起,執行優先順序更高的程序。非搶佔式核心:高優先順序的程序不能中止正在核心中執行的低優先順序的程序而搶佔CPU執行。程序一旦處於核心態(例如使用者程序執行系統呼叫),則除非程序自願放棄CPU,否則該程序將一直執行下去,直至完成或退出核心。

7. 指標函式和函式指標

指標函式是指帶指標的函式,即本質是一個函式。函式返回型別是某一型別的指標

函式指標是指向函式的指標變數,即本質是一個指標變數。

參考文章:

[1].貪心演算法          

[2].連通圖

相關推薦

筆試試題總結--- 軟體開發

1.Huffman編碼中的貪心策略,該部分所需要的計算時間。 首先,要理解Huffman編碼中那部分用到了貪心演算法,貪心的策略,這樣才能求所需的計算時間。 哈夫曼編碼演算法:每次將集合中兩個權值最小

筆試試題總結---軟體開發

1.PreparedStatement與Statement (1)PreparedStatement介面繼承Statement, PreparedStatement 例項包含已編譯的 SQL 語句,所以其執行速度要快於 Statement 物件。 (2)作為 Statem

java經典試題總結

Java經典面試題總結繼續更新,有需要的小夥伴可以路過不要錯過了!看上一篇面試題總結的反響還是很不錯的,就繼續更新了,也非常感謝各位小夥伴的持續關注…… 這次更偏基礎一些! 1、String 和StringBuffer 的區別? 答:JAVA 平臺提供了兩個類:String 和StringBuffer,

試題總結、TCP協議

宣告:本文主要探討當TCP協議出現在面試筆試場合可能會涉及的問題,每一個知識點討論力求簡潔,便於記憶,但討論深度有限,如要深入研究可點選參考連結,希望對正在找工作的同學有點幫助。 一、TCP協議簡介 一般問到TCP協議的時候 最常見的是TCP連線建立和斷開的過程,也就是三次握手和四次揮手,兩

超詳細的Java試題總結之Java基礎知識篇

福利:看本文之前,推薦給大家一個阿里雲雙11活動,真的非常非常非常推薦,對於新人福利,阿里雲這次真的是下血本了,建議阿里雲新人一定一定一定不要錯過。如果覺得這單純是廣告的話(阿里雲肯找我做廣告就好了,嘿嘿),你可以直接跳過看正文。 阿里雲雙11最新活動(僅限阿

初級程式設計師試題總結

本人將這幾天面試的題目總結一些,如果出現錯誤請指正,謝謝。 1,談一談spring。 答:spring是為java程式開發提供的綜合性的基礎java開發平臺,它提供了從表現層SpringMVC到業務層Spring再到持久層springData的一套完整的解決

STL筆試試題總結乾貨

STL筆試面試題總結 一.STL有哪些元件? STL提供六大元件彼此此可以組合套用: 1、容器 容器就是各種資料結構,我就不多說,看看下面這張圖回憶一下就好了,從實現角度看,STL容器是一種class template。 2、演算法 各種常見演算法,如sort,s

2018年iOS試題總結

設計模式是什麼? 你知道哪些設計模式,並簡要敘述?設計模式是一種編碼經驗,就是用比較成熟的邏輯去處理某一種型別的事情。 1). MVC模式:Model View Control,把模型 檢視 控制器 層

linux運維工程師試題總結

1為什麼要有swap分割槽?工作原理是什麼?  Linux核心為了提高讀寫效率與速度,會將檔案在記憶體中進行快取,這部分記憶體就是Cache Memory(快取記憶體)。即使你的程式執行結束後,Cache Memory也不會自動釋放。這就會導致你在Linux系統中程式頻繁讀

PHP試題集錦

day clu 數據庫緩存 優勢 腳本 源代碼 任務 頁面 文件 1、用PHP打印出前一天的時間格式是2017-5-10 22:21:21(2分) Answer: $a = date("Y-m-d H:i:s", strtotime("-1 day")); pr

試題18:在O(1)時間刪除鏈表結點

else mil ptr font 復雜度 節點 else if 開始 nes // 面試題18(一):在O(1)時間刪除鏈表結點 // 題目:給定單向鏈表的頭指針和一個結點指針,定義一個函數在O(1)時間刪除該 // 結點。鏈表結點與函數的定義如下: // struct

java經典試題總結

上一次更新的java面試題,很多小夥伴反應很簡單,其實上一期更新的就是更偏基礎的面試題,但這並不意味著,面試就這麼簡單,在java的學習中,有從Java基礎、框架、設計模式等等都是重點學習的點。在本文的面試題分享中,我們循序漸進,儘量挑一些重點的內容來分享! 1、當一個物件被當作引數傳遞到一個方法後,此方法

Java經典試題總結

本期的java面試題是偏向資料庫方面的,對相關技術知識匱乏的,或者對這方面不大自信的同學,面試之前可以參考一下這套題,這只是節選,試運營一下,如果不能滿足你們的需求,可以直接評論留言! 1、檢視的優缺點答:優點: 1)對資料庫的訪問,因為檢視可以有選擇性的選取資料庫裡的一部分。 2 )使用者通過簡單的查詢可

機器學習試題總結

原文連結: https://blog.csdn.net/sinat_35512245/article/details/78796328 1.請簡要介紹下SVM。 SVM,全稱是support vector machine,中文名叫支援向量機。SVM是一個面向資料的分類演算法,它的目標是為確定一個

超詳細的Java試題總結之Java基礎知識篇

多執行緒和Java虛擬機器 建立執行緒有幾種不同的方式?你喜歡哪一種?為什麼? 繼承Thread類 實現Runnable介面 應用程式可以使用Executor框架來建立執行緒池 實現Callable介面。 我更喜歡實現Runnable介面這種方法,當然這也是現

超詳細的Java試題總結之Java集合篇常見問題

List,Set,Map三者的區別及總結 List:對付順序的好幫手 List介面儲存一組不唯一(可以有多個元素引用相同的物件),有序的物件 Set:注重獨一無二的性質 不允許重複的集合。不會有多個元素引用相同的物件。 Map:用Key來搜尋的專家 使用鍵值對儲存。M

網路安全、Web安全、滲透測試之筆經總結

轉載地址:https://www.cnblogs.com/christychang/p/6041012.html   本篇文章總結涉及以下幾個方面: 對稱加密非對稱加密? 什麼是同源策略? cookie存在哪裡?可以開啟嗎 xss如何盜取cookie? tcp、udp的區別及tcp三次

java試題集錦

  第一,談談final, finally, finalize的區別。 最常被問到。 final:可以修飾非抽象類和非抽象類成員方法和變數     final類不能被繼承,沒有子類,final類中的方法預設是final     被宣告為final的變數必須在申明

試題55:二叉樹的深度

一、題目 輸入一棵二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 二、關鍵 三、解釋 四、程式碼 #include <cstdio> #include "..\Utilities\

試題58:翻轉單詞順序簡單

一、題目 輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。為簡單起見,標點符號和普通字母一樣處理。例如輸入字串"I am a student. ",則輸出"student. a am I"。 二、關鍵 1.反轉兩次。第一次:“.tneduts a ma