Re: [閒聊] interview 心得
※ 引述《l42857 (~.~)》之銘言:
: <恕刪>
: 個人認為
: 收一個程式設計人員, 最重要是要看他是"怎麼在coding"的.
: 最好的方式, 就是出一些題目.
: 讓應試者直接在一台可上網的電腦, 直接寫三~四小時的程式.
: 電腦要裝上影像測錄軟體.
: 寫完考官先上機驗收, 測試結果, 及應試者溝通能力是否合格.
我覺得直接寫三、四小時確實是太長了
我們通常是一個人分配到45分鐘左右
舉一個前一陣子我在用(不需要背名詞,紙上也可以寫)的具體例子好了
目的: 瞭解在multi-thread上的能力
語言: 任何語言,不需要build,pseudo code也可以。用我不會的語言要教我一下。
題目: 請設計一個程序或機制,不論被叫幾次,裡面的內容只能被執行一次
Code:
void func()
{
printf("Hi.\n"); // This line can be executed only once!
}
void a()
{
func();
}
void main()
{
func();
a();
func();
}
Output:
只有一行"Hi."
請問要如何改?
知道答案的,請慢一點再公開~~ XD
如果寫出來了,我會慢慢加條件 (然後會被版主踢到C_AND_CPP版 XD)
只要天天有在寫程式,不需要準備,也不需要背東西就可以來寫這題目
面試需要準備是一件很奇怪的事情
公司應該要設計好題目,讓應徵者不需要"準備"才對
我總是覺得這樣才會貼近他平日的實力,而不是準備好的實力...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.234.114.205
※ 文章網址: http://www.ptt.cc/bbs/Soft_Job/M.1406963436.A.E77.html
推
08/02 15:15, , 1F
08/02 15:15, 1F
那請問你會怎麼implement這功能呢?
或著也可以去看source code,如果能花幾分鐘解釋清楚,他們那樣做的原因
我也會認為你很厲害~~
※ 編輯: uid88 (98.234.114.205), 08/02/2014 15:31:02
→
08/02 15:35, , 2F
08/02 15:35, 2F
→
08/02 15:37, , 3F
08/02 15:37, 3F
推
08/02 15:39, , 4F
08/02 15:39, 4F
→
08/02 15:40, , 5F
08/02 15:40, 5F
拿零分其實很難的~ 弄個bool來判斷有沒有執行過也不錯啊
要加在哪裡? 這樣做會有什麼問題?
推
08/02 15:43, , 6F
08/02 15:43, 6F
嗯,要怎麼加?
→
08/02 15:44, , 7F
08/02 15:44, 7F
謝謝分享,這個好笑 XD
→
08/02 15:55, , 8F
08/02 15:55, 8F
→
08/02 16:04, , 9F
08/02 16:04, 9F
謝謝特地還寫code!
很好,既然用了lock,要不要想一下通常lock比較會搞出什麼問題?
推
08/02 16:22, , 10F
08/02 16:22, 10F
→
08/02 16:22, , 11F
08/02 16:22, 11F
會用也很好啊,你已經知道了他的精神。
有機會想想看你自己的話會怎麼做? 看可以做到什麼程度
→
08/02 16:30, , 12F
08/02 16:30, 12F
喔~busy-waiting這個名詞都出來了,有加分喔(因為用得很對; 雖然我不喜歡背名詞)
事實上有比這個busy-waiting還嚴重的問題: deadlock(有lock嘛,就有可能會dead)
在類似mutex lock功能之中,有沒有不會deadlock而在這裡可以用的東西?
→
08/02 16:45, , 13F
08/02 16:45, 13F
→
08/02 16:45, , 14F
08/02 16:45, 14F
→
08/02 16:46, , 15F
08/02 16:46, 15F
很多系統都有提供interlocked exchange的功能
即使是在多核心多工的狀況下,也保證某一變數只會有一個人動它
這功能只做上面這件事,不會佔住資源,所以不會deadlock
→
08/02 16:53, , 16F
08/02 16:53, 16F
找到的這一篇不錯喔~
如果能看完看懂,我也會覺得你很強
接下來用它的精神,看看你自己的implementation可以做到什麼程度
推
08/02 17:05, , 17F
08/02 17:05, 17F
快要笑不動了... (真正面試時千萬不要用...) XD
※ 編輯: uid88 (98.234.114.205), 08/02/2014 17:16:08
接下來就要加一個條件: 第二次以後叫的要等第一次執行完才能回去
這也算是很合裡的要求,如果第二次以後的太早回去
等於說一次都沒做完就繼續接下來的事... 不太對
所以要建立一個等待的機制...
現在有等,如果也有前面提的mutex lock,形成deadlock的條件已經到齊:
假設printf所代表的功能裡需要一個資源A,第二次叫的傢伙又不幸先拿了A才叫func
就形成了"拿著A的等lock,拿著lock的等A"的deadlock
用interlocked exchange的好處就是可以避掉這種潛在的問題
整理一下
這問題回答程度可以總結為:
1. 用變數去記錄有沒有執行過
2. 用global變數
3. 用程序裡static變數
4. 考慮multi-thread的情形
用mutex, semaphore, critical section或是interlocked exchange都可以
5. interlocked exchange最合適的原因
6. 第二次以後叫的要等第一次執行完才能回去
7. 建構成可以泛用的機制
通常我會期待大學出來的到2
研究所到3,還要瞭解一些4
做過幾年的到5
資深的要能在邏輯上嚴謹的做好6,7也要有一些概念
※ 編輯: uid88 (98.234.114.205), 08/02/2014 17:45:17
→
08/02 18:07, , 18F
08/02 18:07, 18F
推
08/02 18:26, , 19F
08/02 18:26, 19F
在學校是學了很多,如果這是問答式的題目的話,上完課確實可以回答
可是實際上要熟悉它,寫進程式裡面,我估計需要一些實作的經驗
→
08/02 18:27, , 20F
08/02 18:27, 20F
→
08/02 18:27, , 21F
08/02 18:27, 21F
→
08/02 18:55, , 22F
08/02 18:55, 22F
用系統的服務就好
→
08/02 19:43, , 23F
08/02 19:43, 23F
確實是。可是題目會慢慢加一些條件,看回答的人能做到多深
→
08/02 21:19, , 24F
08/02 21:19, 24F
→
08/02 22:08, , 25F
08/02 22:08, 25F
推
08/02 22:25, , 26F
08/02 22:25, 26F
對的
→
08/03 17:57, , 27F
08/03 17:57, 27F
※ 編輯: uid88 (17.244.72.246), 08/06/2014 07:20:18
討論串 (同標題文章)
Soft_Job 近期熱門文章
PTT職涯區 即時熱門文章