考出面試者基本功的 10 個簡單程式設計題
昨天在朋友圈感慨了一下被面試的小朋友,會拉控制元件,會做應用,但是基本功差,還要價高,結果引來了 60多條評論。朋友們大都是感慨行業浮躁、人傻錢多,也有朋友問到,什麼樣的程式設計題能考察程式設計師的基本功呢?本文就奉上 10個筆者常用來考察面試者的程式設計題。
由於我們不是大公司,也不是搞演算法研究,所以一般不會特意出一些演算法題來為難面試者,但是由於要從事程式設計開發工作,基本的程式設計素養絕對是要的,否則這樣的面試者不會有太大的成長空間,面對比較棘手的工作也解決不好。
一、給一個數 N,判定這個數是否是素數。
1、先讓面試者說素數的定義,如果不知道可以提示素數的定義
2、最差的面試者,會沒有思路,這是很可怕的,大學第一學期學完,應該學會這個題
3、一般的面試者,能比較費勁地寫出正確的程式,但是可能存在邊界、標記等問題。
4、寫出程式出來,可以進一步問,優化的空間,在哪裡,所謂優化,無非就是時間和空間複雜度。
5、只有少數的面試者,能進行幾輪優化
6、有訓練的面試者可能知道一些特定的高效方法
二、給一個數 N,把 2 到 N 之間的素數輸出出來
1、這個題比上面這個難度加大了一層
2、可以限定,不讓其使用子函式,增加邏輯上的複雜度
3、其他的,同樣一層層考優化的方法
三、寫出三角狀的 9*9 乘法表
1、這個題目面向基礎比較差的面試者
2、最差的面試者,也會說沒有思路,在學校會寫,現在忘記了
3、比較一般的能寫出來,更進行一步的,可以讓其用幾種迴圈來寫,寫倒三角
4、如果都沒有問題,迴圈思維邏輯值得肯定
四、用遞迴編寫求和或者求階乘的函式
1、可以先讓其不用遞迴寫一遍
2、再讓其遞迴實現
3、最差的面試者同樣無法下手
4、接下來可以探討遞迴的一些優劣之處,在哪些常見演算法中用到了遞迴
5、也可以問問1024的階乘有多少個零這種的問題。
五、將字串反轉,比如 “abcdefg” 轉化為 “gfedcba”
1、如果面試者使用 C 語言效果最佳
2、可以進一步考察這種形式的反轉演算法, www.ucai.cn => cn.ucai.www
六、求出 IPV4 IP地址所對應的整數,比如 192.168.199.1 對應整數
3194598946
1、可以先讓其求字串所對應的整數這個簡單演算法
2、如果面試者使用 C 語言效果最佳
七、使用最高效的演算法,將一堆100以內的數排序,不能使用排序的庫函式
1、不允許使用現成的各種排序演算法
2、要求一遍遍歷完成即實現排序
3、也可以問:如何對n個數進行排序,要求時間複雜度O(n),空間複雜度O(1)
八、有上千萬個1000萬以內的資料,請排除掉重複的數
1、可以轉化為找出重複的數
2、要求空間最省
3、要求一次遍歷完成整個查詢
4、延伸:如果用 Shell 命令實現怎麼辦?
九、如果從1000萬行左右的檔案中,隨機地取出 10萬行左右的樣本資料
1、要求一遍檔案掃描完成資料獲取
2、空間最省,將結果輸出在另外一個檔案中
3、可以要求寫出完整程式,包括 fopen 的使用等
十、字串庫函式的相關實現思路
1、檢測一個字串是否包含在另一個字串中
2、實現 trim 函式、strlen 函式
3、複雜一些的:求出給定字串中最長的迴文字元的長度以及把它們給輸出來。
以上 10個程式設計題,隨便選出一個或者幾個題,請面試者來現場編寫程式,然後在點評程式的過程中,步步延展,可以相對準確地看出這個人的基本程式設計素養,建議所有的程式設計師面試,都應該有這個環節,否則的話,你招來的可能是一個花架子。而面試者也可以使用這些題目評估一下自己的能力,是否在面對的時候,真正做到胸有成竹。如果你無從下手,這就意味著你該通過一些手段來加強訓練了。優才網一直強調的是,正像技術支撐起一個產品的高度的,你的基本功,也支撐起你職業的高度