進行筆試之前,我們首先要了解的是,我們春招、秋招的時候,企業用的是什么平台。
因為每一個平台的代碼輸入規則不一樣。據我了解,一般企業會用到以下幾個平台:
一般來說,企業會選擇前兩個比較大的求職平台作為筆試的合作方。所以,我們基本上只需要了解前兩個平台的玩法就可以了。
至於前端開發,會有一些問答題,比如根據描述,寫一段 CSS、HTML,實現某個效果。這種題比較簡單,根據所學知識寫清楚就可以了。
這篇文章重點是前端開發中遇到編程題,解決測試用例的輸入問題。
牛客網
牛客網成立於 2014 年 9 月,產品矩陣包括 IT 題庫、在線編程練習、線上課程、交流社區、競賽平台、筆面試服務。
簡單地說,筆試面試之前,我們可以在牛客網上刷各種題,拿前端開發來說,包括 js,html,css,算法,計算機網絡,計算機基礎,甚至包括智力題,邏輯題都可以在牛客網上刷。
當我們進行筆試的時候,企業會給我們發送一個牛客網的試題鏈接,電腦會開啟攝像頭,錄制我們答題的過程,以防作弊。
牛客網還可以進行遠程視頻面試。當你看到面試官時,面試官也在看着你。當着面試官的面,手撕代碼了解一下?
除了刷題、筆試、面試,牛客網還有交流社區,上面有很多面經,甚至交友的帖子。上面的人說話好聽又搞笑,超喜歡牛客網的沙雕們,上一個炫耀帖給予大焦慮后有段子作伴,痛並快樂着。
剛開始我不知道牛客網這個神器,了解了它的功能后,找工作大那段時間,幾乎每天都會上去刷一下。
介紹了牛客網是干嘛的,那么最主要大問題是刷題大時候最需要注意的是什么呢?
答案是:輸入。
在做題之前,我們要保證寫的代碼正確讀取了測試用例的輸入。否則,即使我們的代碼是正確的,平台進行驗證的時候也會判定是錯誤的。
如上圖所示,我們打開牛客網上的一道編程題,右邊是代碼輸入模塊。可以選擇各種語言做題,前端有兩個選擇,一個是基於 V8 環境,另一個是基於 node,兩者的區別在於讀取測試的輸入規則不同。
直接上代碼:
- JavaScript (V8 6.0.0)
牛客網提供了 readline() 函數,不用填寫任何參數,每執行一次,就讀取一行。多行輸入其實就是寫多個 readline()。
【多行輸入的 圖 】
// 單行輸入
// 0 1
while(line=readline()){ // readline 得到的是字符串
let parameters = line.split(' ');
let a = parseInt(parameters[0]); // 單行第一個參數 轉化成了數字
let b = parseInt(parameters[1]); // 單行第二個參數 轉化成了數字
print(a+b);
}
// 多行輸入,且行數確定
// 2
// 0
// 1
let K = parseInt(readline()); // 讀取行數
let inputs = [];
for(let i = 0;i < K; i++){
line = readline()
inputs.push(line)
}
function func (inputs){ // 得到 inputs 后,用函數處理
console.log(results)
}
func(inputs)
// 多行輸入,但行數不確定
// 2
// 0
// 1
let A = parseInt(readline()); // 多寫一行讀取提示性輸入
let inputs = [];
while(line = readline()){
inputs.push(line)
}
console.log(inputs)
function func (inputs){ // 得到 inputs 后,用函數處理
console.logh(results)
}
func(inputs)
- JavaScript(Node 6.11.4)
// 單行輸入
// 0 1
let readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function(line){
let parameters = line.split(' ');
let a=parseInt(parameters[0]); // 單行第一個參數 轉化成了數字
let b=parseInt(parameters[1]); // 單行第二個參數 轉化成了數字
console.log(a+b);
});
// 多行輸入,且行數確定
// 2
// 0
// 1
let readline = require('readline');
rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let K = 2; // 輸入 K 行
let inputs = []; // 存儲輸入
rl.on('line', function(data) {
// 獲取輸入
inputs.push(data);
if (K == inputs.length) { //
// 處理
let result = func(inputs);
// 輸出結果
console.log(result);
// 清 0
inputs.length = 0;
}
});
function func () {} // 處理輸入的函數(算法)
// 多行輸入,不確定輸入行數
// 1
// 2
// ......
let readline = require('readline');
rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let inputs = [];
let num = 0;
rl.on('line', function(data) {
if(num == 0){
num = Number(data.trim());
} else {
inputs.push(data.trim());
if (num == inputs.length) {
// 處理
let result = func(inputs);
// 輸出結果
console.log(result);
// 清 0
inputs.length = 0; // 不可改動
num = 0; // 不可改動
}
}
});
function func () {} // 處理輸入的函數(算法)
最后,需要注意的是牛客網上的題可以由公司在題庫中選,這部分題一般不會出現多個空格或者換行符的。也可以由公司員工重新出的題,他們填寫測試用例的參數時,可能會誤操作,多打一些我們看不見的字符。** 所以,做題的時候留個心眼,數字就處理成數字,過濾字符串前后空格。**
賽碼網
賽碼網的輸入方法和牛課網類似,只不過把 readline() 這個函數,換了一個名字:read_line()。下面看 V8 環境下的基本用法,賽碼網也有 Node 環境,和牛客網的方法一致,不再贅述。
// 單行輸入
// 0 1
while(line = read_line()){
line = line.split(' ');
print(parseInt(line[0]) + parseInt(line[1])); // 輸出結果
}
// 多行,無論行數確定與否
let first_line = read_line();// 如果有多余的提示性字符,可以過濾
let inputs = [];
while(line= read_line()){
inputs.push(line);// 把后邊的每一行都當作一個字符串,作為數組的元素填入數組中,這樣就可以操作了
}
print(func(inputs));
// 多行,多個測試用例放在一起,詳細見下方給出的 輸入輸出教程 。
樣例輸入
3 1
2 3 1 // 到這里是第一組
5 4
1 2 1
3 4 0
2 5 1
3 2 1 // 到這里是第二組
let N, M;
// 每組第一行是 2 個整數,N 和 M,至於為啥用 while,因為是多組。
while ((N=readInt()) != null && (M=readInt()) != null) {
print (N + ' ' + M);
// 循環讀取 “接下來的 M 行”
for (let i=0; i<M; i++) {
let a = readInt();
let b = readInt();
let c = readInt();
// 每行是 3 個整數,a,b,c。
print(a + '' + b +' ' + c);
}
// M 行讀取完了,就又要開始下一組了,去 while 那里。
}
補充兩個賽碼網官方給出的攻略,建議仔細讀幾遍:
- 輸入輸出教程:https://discuss.acmcoder.com/topic/5d47dfa8b99ad44605a1700b
- 編程題考試須知:http://oj.acmcoder.com/ExamNotice.html
其他小平台或自建平台
其他平台相對用得不多,在做題之前要先上平台練習練習,熟悉平台的規則。
需要注意的是:檢查能否跳出做題界面,到本地編輯器做題。眾所周知,一些智能化的編輯器可以有自動代碼補充功能,大大節約了做題的時間。牛客網和賽碼網的編程題都是可以的,問答題不可以。
通用技巧
- 每次做題提前 5 分鍾准備好。為防止作弊,網站一般會要求你打開攝像頭、簽名、掃描小程序監控手機。這個步驟也會浪費一點時間。
- 仔細讀題,很多題不難,描述性的文字很長,耐心點讀完基本上就能做出來,很多人倒在了去做題的路上。
- 推薦使用 Chrome 瀏覽器作答。