軟體/韌體工程師面試重點與考題- 程式語言(C/C++/C#/JAVA),資料結構,演算法,以及OS作業系統..等題目(筆試考題)

目錄:
面試須知與應答技巧
資料結構 / 變數儲存與記憶體 / multi-thread執行緒在Linux/Windows
基本演算法
轉自ptt: [重要] 發文前務必閱讀:C/C++常見問題十三誡
擬真試題1/擬真試題2/擬真試題3/擬真試題4
直接列出考古題1(精華完整48題含解答)
直接列出考古題2(精華完整34題含解答)
深度討論考古題1(DEMO完整10題含解答) 選擇使用C,C++,C#或JAVA
深度討論考古題2(DEMO完整10題含解答) 選擇使用C,C++,C#或JAVA

面試須知與應答技巧:

1. 電話面試

一開始的電話面試很重要, 關係到能否爭取到實際見面面試的唯一機會!

筆記分享於2017/1/1起轉型成部分不對外開放。
閱讀請繳交1,500元,您就會收到授權一年的邀請函

匯款帳號: 台新銀行 內湖分行
銀行代碼:812 帳號:20481000205406
站長信箱:eeepage@gmail.com
匯款後,請來信告知您的帳號後三碼與您Facebook ID或 Gmail帳號,易春木會寄出邀請函,並且開啟權限。

2. 現場面試

主要順序為行為面試, 然後技術面試, 最後是問答時間

行為面試:
1.基本服裝儀容與態度:只要乾淨整齊不要太花俏, 態度誠懇即可。留意表達的內容是有自信的有條理的, 注意回答方式不要只說「我會努力學習」作應答, 試圖站在企業方立場是要找人來解決問題而非要花錢找人供其學習.

2.自我介紹:了解工作動機及個人重視的事項和生涯規劃,例如:「為何會想要來應徵這個工作?」、「為何對這個職位有興趣?」、「最喜歡什麼性質的工作呢?而哪些工作是比較不喜歡的?」、「為何想要投入這個產業及其將來的抱負?」……

技術面試:
1.情境反應題與專業技術題: 在面對這些題目時,解題過程是重於得到標準答案的。面試官是藉由問題來考驗求職者的思維邏輯,所以如何完整呈現自己的解題過程是一大重點。

2.軟體工程師專業技術請詳閱本文接下來的內容
(重點: 清楚的演算法與程式知識, 解決方案的清晰思考, 時間與空間效率, IT產業的知識)

問答時間:
1.重視團隊合作及變通能力:例如,面試者認為自己以往最得意的遭遇以及最不得意的遭遇為何?
2.舉出自己的優缺點:能依據企業文化和職務需求來提出自己的優點將是關鍵,此外表達自己會如何調整個人缺點也是很重要的。
3.未來五年的職涯規劃:只講出目標當然是不夠的,更要提出自己會如何達成它的具體作法,才能讓面試官看出你會以什麼行動來替公司貢獻。
4.為什麼要錄用你: 建議大家要保持自信地再陳述一次自己的優點,並更加把它和職務需求作結合來發揮。
5.請問你還有什麼問題:可盡量提出與公司、職務相關的問題,展現自己的企圖心與事前準備的程度。

資料結構

  • Linked List:
    連結串列(Linked List)是串列(List)的一種,是一種常見的資料結構,利用這個資料結構也能進一步實作出其他的資料結構,例如堆疊(Stack)和佇列(Queue)等。
    特性是能夠不使用連續的記憶體空間的情況下,能夠保有並使用一份連續的資料;相對來看,陣列則需要使用連續的記憶體空間。
  • stack:
    是一種後進先出(Last-In-First-Out, LIFO)的排程,而在此資料結構中至少會實作兩個操作:
    push:將資料放入堆疊頂端 / pop:取出堆疊頂端之資料
    在實作上一般可以使用陣列或連結串列(LinkedList)兩種方式來實作
  • Queue:
    佇列(Queue) 是一種先進先出(First-In-First-Out, FIFO)的排程,而在此資料結構中至少會實作兩個操作:
    enqueue:將資料放入佇列尾端。(註:C++中用push、Java用offer、也有add等不同的用字)
    dequeue:取出佇列前端之資料。(註:C++中用pop、Java用poll、也有remove等不同的用字)
    在實作上一般使用連結串列(LinkedList)來實作,使用陣列同樣可以達成,但較為複雜
  • Tree:
    樹(Tree)是一種常見的資料結構,他是一種階層式(Hierarchical)的資料集合, 實作上可以用連結串列完成

關於變數儲存與記憶體:

變數使用:

  • Local 變數
    一般區域變數均被宣告在某區段之內,事實上區域變數是用 stack 或 heap 方式 佔用記憶體空間
  • static 變數
    static變數的宣告方式,也是一種區域變數的宣告方式它和區域變數最大的不同在於存在 global區,static變數不會在程式執行完這個區段後,將記憶體回收。
  • Global 外在變數
    外在變數是指定義於程式外部的變數存在 global區,當一個變數被定義為外在變數後,其他所有的函式或區段皆可使用此變數。

記憶體儲存變數分區:

變數會佔用記憶體,記憶體分為三個部份來存這些變數,分別是global、stack與heap。

筆記分享於2017/1/1起轉型成部分不對外開放。
閱讀請繳交1,500元,您就會收到授權一年的邀請函

匯款帳號: 台新銀行 內湖分行
銀行代碼:812 帳號:20481000205406
站長信箱:eeepage@gmail.com
匯款後,請來信告知您的帳號後三碼與您Facebook ID或 Gmail帳號,易春木會寄出邀請函,並且開啟權限。

關於 multi-thread 執行緒 在Linux/Windows

Linux thread

Linux thread特點:

  • 可直接執行sleep()等系統呼叫,而不會影響其他threads
  • threads其實是共用記憶體空間等資源的processes,因此可以使用kill命令,送訊號或殺掉thread

clone()主要用途: create a child process
產生child process

clone()與fork()不同,clone()允許child process 與parent process 共用部分execution context, 例如: memory space, the table of file descriptors, and the table of signal handlers.

  • When the child process is created with clone, it executes the function application fn(arg). (This differs from fork(2).)
  • The fn argument is a pointer to a function that is called by the child process at the beginning of its execution.
  • The arg argument is passed to the fn function.
  • The child_stack argument specifies the location of the stack used by the child process.
  • 不相容於其他Unix系統,clone()為Linux特有
  • Linux沒有另外定義thread: Linux的threads (例如: POSIX threads),其實是利用clone()產生的child processes
  • sleep()系統呼叫: 會使得該process睡覺,所有thread因此全部睡覺。若只是要讓某一thread睡覺,必須設計另一系統呼叫,例如: pthread_delay()

pthread_create()主要用途: create a new thread

執行thread.c
>> gcc –o thread thread.c –lpthread
>> ./thread
seed: 91821

[C++ 範例代碼] 在Windows 下撰寫簡單 Thread 程式

(參考出處)
前言 :最近遇到一些跨平台的程序,本想自己封裝windows下的CreateThread和linux下的pthread,後來發現Linux社區早就提供了windows下的pthread庫,和linux下一模一樣 :
windows下的pthread庫叫做:pthreads-win32,官方網站是:http://sourceware.org/pthreads-win32/,官方FTP是:
ftp://sources.redhat.com/pub/pthreads-win32/。

考慮FTP裡面的內容比較亂,部分已經編譯的庫有問題。我下載了一個看起來比較新的庫,結果弄了半天不能鏈接。建議大家下載:
ftp://sources.redhat.com/pub/pthreads-win32/pthreads-w32-2-7-0-release.exe 這個自解壓文件,壓縮包裡的pthreads.2目錄是源碼,Pre-built.2目錄是編譯所需的頭文件和庫文件。

範例程式 :
* thread_sample.h 代碼 :

* thread_sample.cpp 代碼 :

執行結果 :

Print Message: Thread1
Print Message: Thread2
Thread1 return 0
Thread2 return 0

 

30 thoughts on “軟體/韌體工程師面試重點與考題- 程式語言(C/C++/C#/JAVA),資料結構,演算法,以及OS作業系統..等題目(筆試考題)

  1. 昭哥

    發現一個小bug
    7.write a function that can calculate 1*2+2*3+…..+(n-1)*n
    int nc(int n)
    {
    int sum = 0;
    for(int i = 2; i <= n; i++){
    sum = sum + n*(n-1); <= 這裡錯了 是 sum = sum + i*(i-1); 才對
    }
    return sum;
    }

  2. R.C.

    板主您好,對於這題的解答請問是否應修正為以下這樣,如有錯誤,請不吝賜教:

    1.2 32-bit machine用C語言對位址 0x00005000 的第三個bit設成0,第五個bit設成1。
    #define BIT3 (0x0004)
    #define BIT5 (0x0010)

    unsigned int a=0x00005000;
    void clear_bit3(void) { a &= ~BIT3;}
    void set_bit5(void) { a |= BIT5;}

  3. 1

    在第三題時做strcmp函式那題中,如果兩個參數char a[] 和 b[] 是使用如下宣告: char a[4] = “1234”,這樣的話就不一定會有’\0’在array的最後面,請問這樣的話該如何處理?

    1. 易春木 Post author

      本題是要比較字串, 所以基本上字串結尾必須要有一個「\0」字元作為結尾
      如果不是字串的話, 則不適用strcmp

      若要比較array不是比較字串的話, 也就是說沒有「\0」字元作為結尾
      改寫為

      但其實已經偏離題目的基本設定, 共勉之

  4. Pingback: 工作面試心得(QNAP、緯穎、正文、 工研院、啟碁、全景、智易、CHTTL) – Cinnating

  5. 易春木 Post author

    感謝C大支持, 已發送邀請函!
    感謝R大支持, 已發送邀請函!
    感謝P大支持, 已發送邀請函!
    感謝S大支持, 已發送邀請函!
    感謝B大支持, 已發送邀請函!
    感謝1大支持, 已發送邀請函!
    感謝S大支持, 已發送邀請函!
    感謝C大支持, 已發送邀請函!
    感謝V大支持, 已發送邀請函!
    感謝C大支持, 已發送邀請函!
    感謝D大支持, 已發送邀請函!
    感謝P大支持, 已發送邀請函!
    感謝L大支持, 已發送邀請函!
    感謝F大支持, 已發送邀請函!
    感謝P大支持, 已發送邀請函!

    謝謝熱烈支持, 小編會持續加入更多程式設計的面試重點! 祝大家求職順利!!

發表迴響

Copy Protected by Chetan's WP-Copyprotect.