看板 Soft_Job 關於我們 聯絡資訊
雖然經歷一波不景氣的光景,不過公司軟體業務也的確發生人力不足的現象, 需要補充新血以免日後軟體問題導致出貨延遲。敝公司軟體部門乃是使用C / C++與MFC搭配開發Windows Application。功能大多圍繞在公司出品的IC相關 應用上。 以上是前因,因為公司不大,基於老闆先存活再談永續經營理念...當然是要找 即戰力囉。不過大家內心也有數,要找到100%相關工作經驗的即戰力機率是 微乎其微。心中把標準稍稍放低,只要懂C / C++,不用我來教變數宣告、指 標、函數宣告...等等就謝天謝地了。Windows Programming只要懂得Message Routing, Procress / Thread等一點點粗淺的觀念即可。MFC當然是用過就可 以了。 基於以上原則,履歷千挑萬選,剛畢業的不能挑,公司小沒完善的教育訓練, 不應該叫人跳進來這個火坑誤人子弟嘛^_^ 沒寫過C / C++的一堆MIS或ERP相關 經驗的也不敢叫,雖然Java, C#和C++有九成像,但是我們用的MFC和J2EE還有 .Net也差異太大了,還是不敢叫。於是乎挑出了幾個有在大廠(有上市上櫃就算) 寫過一些測試程式或產測程式,有兩三年經驗的人來面試看看。 面試不外乎先問問對方經歷,寫過哪些東西,用什麼工具、遭遇過的困難等等。 然後介紹一下自己公司的職位需要的技能和工作內容等等。到這裡為止都還OK, 面試者都能洋洋灑灑的應對。然後就是在下最重視的重頭戲了,專業評估。 Q: 下面這段程式有沒有什麼問題? void fun(int* ptr) { ptr = new int[2]; } int main() { int *ptr = NULL; fun(ptr); ptr[1] = 1; ptr[2] = 2; printf("%d %d", ptr[1], ptr[2]); return 0; } 這個程式很短也沒啥實際功能,我覺得不是很好的範例程式,不過面試時間不長, 要盡量了解一下對方的C語言底子,所以只好把一堆錯誤都塞進一個程式裡。 不過重點是,這程式可是編譯得過呢~(因為有人回答他語法錯誤) 我期待中的粗淺的Programmer起碼會看出「有使用new配置記憶體,卻沒delete釋放」 「C語言是zero base陣列宣告大小為2的不能索引到[2]」,我想有點程度的應該還能回答 C語言都是傳值呼叫,所以配置好的指標空間無法回傳。 我還想看得出錯誤的人還可以討論怎麼修改會比較好... 以上預想的劇本都沒出現過,回答有: A1:這程式會編譯不過吧,那是指標不能用ptr[1]。 A2:這程式沒有錯。 A3:......(沉默無言) 我真的不相信這一題這麼難,所以我引導一下。 提示:你覺得new之後要做什麼? A1:沒用過new。 A2:不知道。 A3:new是什麼指令? 我暈,好吧他們可能是沒寫過C++,所以我換一個問法。 Q:你有用過malloc和free嗎? A1:沒有。 A2:......(無言) A3:不熟 好吧,或許你們都用C++ Builder或.Net,有好用的data structure class可以用, 所以我改問... Q:當有不定資料長度的資料要儲存時,你會使用什麼方法。 A:不定長度? Q 補充道:就是一開始不知道需要多大空間,要動態配置的啊。 A:不是寫程式時就知道大小了嗎? Q又補充道:很多狀況要等執行時期,資料讀入或使用者輸入後才知道會有幾筆資料啊。 這些是編譯時期不會知道的啊。 A:不會啊,都可以知道啊。 同上題,另一位回答道。 A:方法? Q補充道:對,就是你會用哪一種資料結構或者是哪些現成的Class? A:用陣列啊。 Q可是陣列不能動態大小耶。 A:是喔?......(沉默) Q:你都宣告一個很大的陣列來存放嗎? A:這也是個方法啦......(已經恍神中) 面試到此已經快要升天了,針對一位強調自己會C++和物件導向的人再問道。 Q:Class宣告中,你是如何決定成員的存取等級? A:存取等級? Q:就是 public, protected和private那三個啊,你宣告的變數或函式要放在哪一段裡面? A:喔,那個喔。那些比較理論的東西,我比較沒在注意(心虛中) Q:小姐,這些不是理論,這是物件導向最基本的精神-封裝。 A:喔~那個喔,我都是改人家程式的,都是放在public。 Q:所以你都不知道為甚麼要放在public嗎? A:恩......(無言) 另一位面試者,強調用MFC寫過Windows Application,所以問道。 Q:你知道Windows Message的架構嗎? A:不知道(這個倒爽快) Q:你知道Procress和Thread的差異嗎? A:...(沉默是金) Q:在Windows裡面,不同Procress間要如何溝通?(我承認我蠢,連上一題都無法 回答的人,我還找死問這題!) A:阿!我有寫過,用CreatThread...... Q:那是Thread,Thread和Process共用資料段,不需要啥特別的方法溝通。 A:喔~(沉默) 以上是我要求太高的面試心得,現在我考慮拿C / C++語言教材的前三章習題, 來當作相關工作經驗三年,資訊系畢業的應徵者試題。 PS:面試者皆有相關C / C++程式開發經驗兩年以上,資訊科系畢業。 目前薪資在40k~50k之間的「即戰力」人才。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.243.230.145
StubbornLin:科科 不意外 06/01 14:42
※ 編輯: xsion 來自: 210.243.230.145 (06/01 14:50)
ykjiang:所以我一直覺得年資這種東西根本就... 唉 06/01 14:53
GregHowe:其實我慶幸轉戰到linux後....對這些東西的印象特別深 06/01 15:02
GregHowe:該程式段如果用gcc編譯, error message恐怕是new這個字 06/01 15:05
GregHowe:不過不會動態宣告真的是太扯了, 都用array硬幹很難以想像 06/01 15:07
GregHowe:Process和Thread的差異, 在OS課本應該會有詳細的描述 06/01 15:15
GregHowe:但真正要了解其中的道理....唯有寫過這樣的程式才會體會 06/01 15:18
iincho:這個Linux有什麼關係~_~? 換了平台豬不會變牛啊... 06/01 15:23
GregHowe:資料庫我不熟, 我寫過的是影像, 和一些通訊 06/01 15:24
GregHowe:malloc和free這些東西對我來說再熟悉不過.... 06/01 15:25
GregHowe:尤其是自定資料結構, 更需要這種方式來和系統要記憶體 06/01 15:27
iincho:不...你講的東西和gcc/Linux基本上是沒關係的.. 06/01 15:28
GregHowe:我並不是說換了平台的關係....而是說在這樣的環境下 06/01 15:29
GregHowe:我不得不驅使自己面對這樣的問題.... 06/01 15:30
xsion:裡面和OS有關的問題大概就是跨Process的溝通方式吧 06/01 15:30
xsion:其他的是和作業系統平台無關的基礎知識 06/01 15:30
iincho:IPC每個平台都有, Process/Thread也不見得每個OS都一樣... 06/01 15:30
xsion:因為我覺得底子好,學啥平台都只是時間問題 06/01 15:30
iincho:嚴格來講幾乎都是平台無關的問題吧...XD 06/01 15:31
kerickuo:在我還沒有面試過人前,這些問題我覺得回答不出來的人大 06/01 15:32
kerickuo:學大概都在混,面試過人後,我發現回答不出來是常態... 06/01 15:33
iincho:我比較意外的是開50K找不到人..:p 06/01 15:34
kerickuo:所以到後來我篩應徵者學歷>>>經歷,要不然面試很浪費時間 06/01 15:35
kerickuo:看起來不是沒有人應徵啊 XD 而是來應徵的... 06/01 15:36
xsion:其實我本想po徵才文 不過依照版規已經有三篇了 所以改po心得 06/01 15:38
xsion:其實我找人沒有預定預算,只要能用,都會開到合理的範圍 06/01 15:40
GregHowe:學歷>>經歷這樣篩選方式, 倒不如透過原po的方式出考題 06/01 15:40
xsion:問題就在於[堪用]的都很難...... 06/01 15:40
GregHowe:不會寫程式而很會考試的還是大有人在.... 06/01 15:41
kerickuo:我是說浪費時間啊,照原Po這樣出考題,篩到堪用的機會已 06/01 15:41
iincho:小公司的話,沒名氣人家也不知道你薪水開的高, 所以不會想去 06/01 15:42
kerickuo:經不大,基礎知識如果有機會夠,出些問題抓個能力程度, 06/01 15:42
iincho:你要找的人大部分都在硬體廠, 少部分在一線的軟體公司... 06/01 15:42
kerickuo:就大概面試個幾個人就有機會抓到可以用的,比起一直花時 06/01 15:43
kerickuo:間面試,至少我不用因為要面試拖累了我手上的進度... 06/01 15:43
xsion:沒錯 小公司面試國立高材生最後常常也是白忙一場 跑了老半 06/01 15:44
xsion:的ofer最後人家還是會選擇大廠 06/01 15:44
xsion:所以我不吝於給私大或科大的人機會 想說其中應該也會有強者 06/01 15:45
iincho:錢加下去就有了...XD, 不過一般老闆不會這樣幹就是... 06/01 15:46
kerickuo:反正小公司學歷太好的不會來,挑中間學歷的機會會比較高 06/01 15:51
GregHowe:不會浪費時間啊....看考題會不會寫....不會就打發走 06/01 15:51
kerickuo:然後問些基礎知識,還ok的就收了,沒有什麼選擇權。 06/01 15:52
GregHowe:或者直接看有沒有作品....會浪費時間嗎? 06/01 15:52
kerickuo:光是打發人走都很浪費時間啊 XD 06/01 15:52
GregHowe:說的也是....總是要些客套話.... 06/01 15:53
kerickuo:面試個五六個人,一個下午可能就沒了... 06/01 15:54
GregHowe:我真佩服小m的面試,都約晚上,一次一個人就兩個多小時.... 06/01 15:56
xsion:對啊 不說些客套話 怕人家上科技版黑特公司咧 06/01 15:56
Huangs:寫得還滿傳神的~ 06/01 15:56
GregHowe:基本上....裡面的科技版的精華區資料還蠻有參考價值的 XD 06/01 16:02
xsion:其實我也不怕人家知道題庫啊 臨時抱佛腳的人還是會一問就倒 06/01 16:05
ykjiang:小 m 面試人的確很有耐心,這點不得不推 06/01 16:52
avhacker:原 po 該不會以為這段 code 只有沒 delete 這個問題吧? 06/01 17:06
avhacker:main 中的 ptr 從頭到尾都是 NULL, 沒變過 06/01 17:07
adrianc:樓上... 06/01 17:13
iincho:科..有人提到盲點了...XD 06/01 17:14
aacs0130:蠻多公司都有c/c++語言考卷的..有做功課應該都可以答出一 06/01 17:14
iincho:這告訴我們出程式考題的時候不管怎樣都要跑一遍.... 06/01 17:14
aacs0130:些...ptr[2]這個bug答不出來就太超過了 06/01 17:15
aacs0130:原PO有提到傳值呼叫的問題..這個code能編譯..不能執行 06/01 17:17
xsion:請問iincho大,盲點是...? 06/01 17:25
dreamcwli:fun() 根本沒辦法配置記憶體給 main() 裡的 ptr 吧 = =" 06/01 17:44
xsion:給樓上大大,這點內文有提到,C語言都是傳值呼叫那行 06/01 17:49
xsion:這一點就是留伏筆希望面試者回答要怎麼改的啊 06/01 17:50
xsion:用double pointer, return value或整乾脆在main new都可以 06/01 17:51
avhacker:漏看了,我看到你寫"我期待...沒delete釋放" 就跳過了 XD 06/01 17:52
iincho:xsion: 沒啦, 我看錯了 不好意思... 06/01 17:56
onear:這些題目的確不難,這樣就有50k,真好.. 06/01 19:55
peacecorner:哪間公司阿 可以說嗎 我也想去面試看看 06/01 20:05
psliurt: 那間公司阿 可以說嗎 我也想去面試看看 月薪40K就好 06/01 20:27
achii:小公司還挑咧 06/01 20:40
sougly:你那些問題我大概都會耶 但我年資 = 0 = = 06/01 20:42
littlebau:所以就說阿貓阿狗現在都在當程式設計師了 ..正常啦 06/01 21:02
littlebau:老實說 你的題目我也不會 我只會改BIOS code。 06/01 21:03
littlebau:跟用C語言寫簡單測試tool跟小工具。我自認我是阿貓阿狗 06/01 21:03
littlebau:型的工程師,而且像我這種的很多。遇到我這種的 不要 06/01 21:04
littlebau:錄取就對了,因為後面還有很多高手 06/01 21:04
littlebau:就算是一個大一 大二的學生應該都會 都可以樂勝在職的 06/01 21:05
leicheong:其實寫.NET而依賴auto cleanup所以從來不dereference的 06/01 21:25
leicheong:人也不少... 尤其是寫script/VB轉寫.NET的人... (默) 06/01 21:26
iincho:gc不是錯, 是用的人的問題-_-;;; 06/01 21:28
leicheong:我說的是auto cleanup (指執行點離開區段後會自動把區段 06/01 21:32
leicheong:中宣告的變數設定為「可以被GC回收」的功能), 和GC沒有 06/01 21:33
leicheong:直接關係... 06/01 21:33
leicheong:有這壞習慣的人在.NET中使用部份COM+元件時, 很容易出現 06/01 21:35
leicheong:memory leak... 06/01 21:35
iincho:姆...我不大同意這種因為原來寫A所以寫B的時候就會YY講法.. 06/01 21:40
iincho:實際狀況是不管他原來是寫什麼寫B的時候都會發生YY的狀況XD 06/01 21:41
leicheong:我說的這問題在寫VBA/VBscript時是沒問題的, 甚至可以說 06/01 21:42
leicheong:是常見的寫法. 習慣的這樣的構想方式的人在寫其他語言 06/01 21:43
leicheong:的程式時也常看到會被忽略而不自覺. 這是思考慣性的問題 06/01 21:45
leicheong:另外說明一下, 思考慣性本身不是壞事. 用熟悉的思考習慣 06/01 21:47
leicheong:編寫程式後, 當bug出現時你就可以根據經驗由過往最常 06/01 21:48
leicheong:發現的錯處開始除錯. 這樣能大大的縮短預計的除錯時間. 06/01 21:49
leicheong:還有用戶回報錯誤時不改那裡, 心中也可以有大概印象... 06/01 21:51
Zbank:不意外 大多都是改程式 06/01 23:02
uefang:C語言不能用new 06/01 23:22
zeebra:vb.net 宣告陣列[2] 其實宣告了[0] [1] [2] 語言混著用 06/01 23:33
zeebra:常常到後面就錯亂了~~@#$#︿%&* 06/01 23:34
xsion:to Zbank:我知道,所以我很體貼的改問對方malloc了 06/01 23:35
leicheong:VB/VB.NET用陣列通常都是用迴圈到.Length或UBound()吧.. 06/01 23:43
leicheong:不知道最大的index是多少並不奇怪... 06/01 23:44
final01:這三小 明明就編不過 C/C++混著寫 你們工程師都這樣幹嘛? 06/01 23:44
leicheong:然後寫VB而想直接過渡到.NET的人, 甚至開始值也用 06/01 23:45
leicheong:LBound()來決定... :P 06/01 23:46
xsion:To fina101:C是C++的子集,本來就可以混著寫... 06/01 23:47
xsion:更甚者寫C++不用C語法,根本寫不下去啊。 06/01 23:47
swindler:這種Code 在ㄧ些編譯器是會過的 我試過 06/01 23:47
swindler:通常在NEW完是要再CHECK記憶体位址 這種情況常看新人發生 06/01 23:56
final01:恩~SORRY 我耍笨了 這可以過 我剛忘了include 06/01 23:59
swindler:DEBUG 抓半天 有的新人連ERROR MESSAGE都看不懂 06/02 00:00
juriolegend:有的是if/else一大堆在一個函式,都不會抽象化的 06/02 00:08
y2k27:這種東西不熟也不會死 寫個測試code跑跑看就知道 06/02 01:13
y2k27:學問這麼多 不常用總是會忘 底子好能夠快速想起就OK 06/02 01:13
arenda:指標亂寫電腦會當掉 考這個是正確的 06/02 13:29
arenda:C/C++可以混著寫 用extern "C" 06/02 13:30
arenda:如果要使用純c檔的話.... 06/02 13:30
Linvail:這種要求 台清交剛畢業就能勝任了... 06/02 21:46
avhacker:樓上可能不知道台清交也有廢物 06/03 00:13
Linvail:我知道啦 推文沒辦法寫那麼多 只要稍微挑過應該不少都行吧 06/03 19:10
※ 編輯: xsion 來自: 114.44.220.37 (02/20 23:17)
kaibaseto:有準備國考的人應該都可以回答得出來 05/04 16:17