牛客网最全在线笔试、编程攻略(建议收藏)

程序源代码

共 3429字,需浏览 7分钟

 ·

2020-09-15 05:34


来源:牛客网

整理:大数据肌肉猿



一、常见问题


设备问题


问: 浏览器使用问题?

答:浏览器推荐使用最新版本的Chrome或者火狐浏览器,如果某一浏览器出现问题可以换个浏览器重新打开页面。


问: 摄像头如何调成前置?

答:进入答题页面前,可以在笔试调试设备页面可以直接切换摄像头;

笔试过程中如果需要切换摄像头,可以先进入调试设备页面

(exam.nowcoder.com/test/video),切换好摄像头后,结束调试,返回笔试答题页面,刷新页面即可,可能会造成离开一次页面。


 

问: 摄像头出错?

答:请确认你的摄像头连接正常,并且浏览器没有禁用(地址栏旁边有个摄像头图标上面有小叉就是禁用了)。笔试前可以打开

exam.nowcoder.com/test/video可以去这个页面检查设备。


问: 拍照失败怎么办?

答:拍照上传失败,请检查浏览器有没有adblock adguard等这种广告屏蔽插件,如有请关闭后重试,笔试前最好禁用所有浏览器插件和无关的应用程序。


问:小程序扫码异常(部分企业的笔试不会开启该功能)

答:请按以下步骤检查:

1.手机是否已联网

2.微信更新至最新版


问:答题时提示手机异常   (部分企业的笔试不会开启该功能)

答:请确保手机网络连接正常,使用最新版微信APP,手机需要一直保持在小程序页面保持常亮(不要锁屏),建议笔试插上手机电源,防止手机意外关机

笔试前可以打开nowcoder.com/cts/mini/test测试手机小程序,测试时间为3分钟,测试过程中出现手机异常,可以在本帖下面留下手机型号。



答题相关

 

问:只收到笔试短信通知,没有邮件通知,无法获取笔试链接怎么办?

答:请前往投递简历使用的邮箱垃圾箱查看,如果仍不能找到,就关注公众号:牛客招聘助手  ,绑定收到短信通知的手机号码查询。




问:打开笔试链接提示“不符合本场考试资格”,应该怎么处理?

答:请确认你是否拷贝了完整的笔试链接(含16位ID)并粘贴至浏览器地址栏。


问:没有收到邮件通知,怎么办?

答:如果你收到短信通知,但没有收到邮件通知,无法获取笔试链接,你可以关注微信公众号“牛客招聘助手”,绑定你收到短信的手机,查询笔试链接。


问:确认个人信息时,发现个人信息有误?

答:应企业要求,部分个人信息考生不能修改,请通过信息下方“点此反馈”入口,更正你的个人信息;如果可以修改,直接修改即可。


问: 笔试答题(非编程题)可以离开页面?

答: 不同公司的要求不一样,请仔细阅读考试须知,如要求不能离开页面,笔试过程请务必不要跳出页面,跳出页面会做作弊标记的哦。


 

问:问答题可以上传图片吗?

答: 问答题支持使用手机扫码上传图片,也支持本地上传。

   
 


 

问:回答了的题目可以再次查看吗?

答: 试卷中的题目分为多个目录,每个目录的题目提交后,就不能再次进入该目录;如果该目录未提交,你可以通过点击答题卡切换到该目录的其他题目。


   

问:笔试未结束,关闭了答题页面,可以继续答题吗?

答: 笔试中途因误操作关闭答题页面,如果在考试时间内,你可以重新复制笔试链接,打开页面继续笔试。


   

问:笔试过程中发现题目问题或者其他系统使用问题,怎么办?

答:你可以通过右侧底部的在线咨询小窗选择问题类型后发消息咨询。


 

编程题相关


问: 编程题可以离开页面,进行本地调试吗?

答: 不同公司的要求不一样,请仔细阅读考试须知,点击进入编程题时也会有弹窗提示,请注意是否支持本地IDE,不支持时,请务必不要跳出页面,跳出页面会做作弊标记的哦。


问: 在线编程题是否可以使用本地IDE编辑和调试代码?

答: 部分企业会严格考察考生编辑代码的能力,会禁止考生离开编程题答题页面,不能使用本地IDE调试代码,你可以通过代码框上方的自测功能进行调试;允许使用本地IDE的笔试,可以使用本地IDE调试代码。


问:为什么我本地通过了,但是线上提交说没通过所有测试用例?

答:牛客网的每个编程题都有10-50组测试数据,你的代码在本机可以通过仅仅是通过了样例数据,可能存在边界条件考虑不周导致更多的测试数据没有通过,所以会返回答案错误。


问: 编程题的输入输出怎么写?

答:编程题分两种考核方式:

核心代码模式:只需要实现函数核心功能并返回结果,无须处理输入输出;

ACM模式:按照题目输入输出说明和例题给出的输入输出规范处理输入输出,不同的语言有不同的输入输出规范。


问: 没有通过所有测试用例是答案错了还是复杂度不对?

答:如果只提示没有通过所有的测试用例,那就不是超时的问题也不是编译的问题,仅仅是测试用例有部分没有通过,可能是代码考虑不够全面。



问: 编程题怎么算分?

答:题目会按照case通过比例给分,可以多次提交,不同考试会有不同计分规则,分为按照所有提交的最高分计分(如果多次提交的最高分一致,以最后一次最高分提交得分)、按照最后一次提交的最高分得分。


问:在线编程题支持哪些语言进行编译?

答:牛客在线编程题目前支持C++11、C++14、Java、C、Python、Python3、pypy2、pypy3、C#、PHP、JavaScript、R、Go、Ruby、Swift、ObjC、Pascal、Sql、TCL、matlab、bash等  语言,不同企业可能会对编程语言有限制要求,请仔细阅读笔试邮件通知,邮件中会有编程题语言的相关说明。


问:编程题代码直接输入到代码框就完成了吗?

答:编辑好代码后,一定要点击 保存并提交 !!!

根据不同计分模式会有所不同,如果试卷设置是按照所有提交的最高分计分,系统会在提交该模块时帮你自动提交一次;如果  试卷设置  是按照最后一次提交计分,系统不会帮着提交,总之:一定要点击 保存并提交 !!!



其他问题


问:考试过程中可以短暂离开吗?比如上厕所

答:可以,请快去快回!


问: 为什么我没有切页面弹窗说我跳出了?

答:请关闭所有可能屏幕提示的软件,包括QQ、OUTLOOK、杀毒软件等,只要屏幕失焦都算成是退出,如下图所示弹窗,均为跳出页面。

问:笔试时网络不好,页面加载慢,怎么办?

答:你可以将网络切换为手机热点,完成笔试。


重要提示:请在收到考试通知时,仔细阅读通知邮件中的注意事项,每次笔试的要求可能不一样。



二、编程判题规则


1. 判题系统的编译器信息

C/C++:clang++ 3.9 -std=c++14 -O -Wsign-compare -Wc++11-extensions

JAVA:javac 1.8 -encoding=utf-8

Python: python 2.7.3

Python3: python 3.2.3

C#: mcs 4.0.1

Go: go 1.8.3


2. 判题系统的输入输出


2.1对于<剑指Offer>这种有函数定义的题目,你只要完成函数,返回相关的值就可以,不需要处理任何输入输出,不要在函数里输出任何东西。


2.2 对于传统ACM的OJ模式题目,你的程序需要stdin(标准输入)读取输入,然后stdout(标准输出)来打印结果,举个例子,你可以使用c语言的scanf或者c++的cin来读取输入,然后使用c语言的printf或者c++的cout来输出结果。代码禁止读取和写入任何文件,否则判题系统将会返回运行错误。OJ一次处理多个case,所以代码需要循环处理,一般通过while循环来出来多个case。


以下是A+B题目的样例代码:

计算a+b的和:
每行包含两个整数a和b对于每行输入对应输出一行a和b的和输入1 5输出6



C64位输出请用printf("%lld") 

1

2

3

4

5

6

7

#include

intmain() {

   inta,b;

   while(scanf("%d %d",&a, &b) != EOF)//注意while处理多个case

       printf("%d\n",a+b);

   return0;

}


C++64位输出请用printf("%lld")

1

2

3

4

5

6

7

#include

using namespace std;

intmain() {

   inta,b;

   while(cin >> a >> b)//注意while处理多个case

       cout << a+b << endl;

}


JAVA,  注意类名必须为Main, 不要有任何package xxx信息

注意hasNext和hasNextLine的区别,详细见  

https://www.nowcoder.com/discuss/8050>

1

2

3

4

5

6

7

8

9

10

11

12

importjava.util.Scanner;

publicclassMain {

   publicstaticvoidmain(String[] args) {

       Scanner in =newScanner(System.in);

       while(in.hasNextInt()) {

     //注意while处理多个case             

            inta = in.nextInt();

           intb = in.nextInt();

           System.out.println(a + b);

       }

   }

}


C#

1

2

3

4

5

6

7

8

9

publicclassProgram {

  publicstaticvoidMain() {

   string line;

   while((line = System.Console.ReadLine ()) !=null) {//注意while处理多个case

     string[] tokens = line.Split();

     System.Console.WriteLine(int.Parse(tokens[0]) +int.Parse(tokens[1]));

   }

  }

}


Python

1

2

3

4

5

6

7

8

9

10

importsys

try:

    whileTrue:

        line = sys.stdin.readline().strip()

        ifline =='':

            break

        lines = line.split()

        printint(lines[0]) +int(lines[1])

except:

    pass


Python3

1

2

3

4

importsys 

forlineinsys.stdin:

   a=line.split()

   print(int(a[0])+int(a[1]))


JavaScript(V8)

1

2

3

4

5

6

while(line=readline()){

   varlines = line.split(' ');

   vara = parseInt(lines[0]);

   varb = parseInt(lines[1]);

   print(a+b);

}


JavaScript(Node)

var readline = require('readline');const rl = readline.createInterface({        input: process.stdin,        output: process.stdout});rl.on('line', function(line){   var tokens = line.split(' ');    console.log(parseInt(tokens[0]) + parseInt(tokens[1]));});

R语言

1

2

3

4

5

6

7

8

9

10

11

lines=readLines("stdin")

for(l in lines){

       if(l ==""){

               break;

       }

       ll = strsplit(l," ")[[1]]

       a=ll[1];

       b=ll[2];

       cat(as.numeric(a)+as.numeric(b));

       cat('\n');

}


matlab

1

2

3

4

5

6

7

8

try

    while 1

        line = input('''s');

        lines = strsplit(line);

        printf("%d\n", str2num(lines{1}) + str2num(lines{2}));

    end

catch

end


3. 判题系统状态

等待评测: 评测系统还没有评测到这个提交,请稍候  
正在评测: 评测系统正在评测,稍候会有结果  
编译错误:您提交的代码无法完成编译,点击“编译错误”可以看到编译器输出的错误信息  
答案正确: 恭喜!您通过了这道题   
运行错误: 您提交的程序在运行时发生错误,可能是空指针

部分正确: 您的代码只通过了部分测试点,继续努力! 
格式错误: 您的程序输出的格式不符合要求(比如空格和换行与要求不一致)  
答案错误: 您的程序未能对评测系统的数据返回正确的结果  
运行超时: 您的程序未能在规定时间内运行结束  
内存超限: 您的程序使用了超过限制的内存  
异常退出: 您的程序运行时发生了错误  
返回非零: 您的程序结束时返回值非 0,如果使用 C 或 C++ 语言要保证 int main 函数最终 return 0  
浮点错误: 您的程序运行时发生浮点错误,比如遇到了除以 0 的情况  
段错误 : 您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起  
多种错误: 您的程序对不同的测试点出现不同的错误  
内部错误:   请仔细检查你的代码是否有未考虑到的异常情况,例如非法调用、代码不符合规范等。



三、那些年我在牛客踩过的坑


循环输入输出处理常见问题

1、为什么需要循环输入输出:通常来说OJ对于每道题里面有.in和.out文件,分别表示测试数据的输入和输出。如果某些编程题的所有数据都只做在一个.in和一个.out中,这样就会变成多组测试了,所以需要提交的代码中循环处理。


2、处理方法:其实这个问题可以避免,就是编程题后台每个样例做一组对应的.in和.out文件,这样就变成单组测试,代码就不需要循环处理,但是平时练习的题目质量不一,这个问题都会出现。

代码里面循环处理了即使是单组测试也会完全没问题,所以为了偷懒,可以全写成循环处理。


3、还有一个坑:如果测试数据是多组的,但是恰巧你代码里面需要些标记数组,map,set等,在循环内一定记得清空,不然可能会产生前面的测试样例影响了后续数据的答案。



对于各种语言的一些基本知识

1、出题人通常会使用C/C++编写标程,数据也是由标程制造的,所以使用跟出题人一样的语言会比较稳妥


2、C/C++效率比较高,通常来说一般OJ对于一道题目的时限限制会区分C/C++和其他语言,通常处理方式是假设C/C++时限是1s,其他语言就会给2倍时限,甚至更多。


3、关于cin cout和scanf printf。做题的时候尽量使用scanf printf。下面告诉一个小常识,不要惊讶:在数据量比较大的情况下cin cout比scanf printf慢挺多。一旦遇到大数据量,光是读入就有可能跪掉。你或许可以使用std::ios::sync_with_stdio(false); 这条语句关掉scanf和cin的同步,加快效率。但是即使这样cin还要慢,而且一旦使用了这条语句,scanf和cin混用可能就会造成一些奇怪的错误


4、Java相关:Java整体效率大概比C/C++慢2倍以上,但是Java写编程题也没什么问题,主要就是处理好各种输入输出的情况。


5、python等等其他语言, 做编程题首先要自己在平台上多练习不同的数据格式的读取方法,还有就是效率可能偏低,另外有些语言封装的功能太丰富了,以至于代码里各种函数完成的最终代码,笔试官或者面试官对于算法的考察并不想看到这样的code。


6、开辟数组空间最好根据题目的数据范围要求来,这里可能会造成runtime error,如果代码中递归的深度太深也可能爆栈空间导致 runtime error。



关于输出格式

格式问题经常令人抓狂,其实主要都有几个常见的坑

1、行末空格:比如我输出需要打印多个数需要使用空格分隔的时候,我们循环使用printf("%d ",x);这种会很方便,但是这样会导致行末多一个空格,后台系统会严格比对你的输出和.out文件,这样也会被判错误


2、换行问题,对于每个样例,建议输出完全之后都换行一下。对于一些题目,可能就是不换行就导致了后面输入数据错位,那就肯定不可能过了。



关于时间复杂度分析:

通常来说一般的系统1s能跑的算法量级是不足1e8的,所以做题的时候评估算法效率很重要,直接判断你的做法能否通过,当然这是以C/C++为标准的,其他语言自己乘个时间倍数。


举个例子,比如题目n = 1e5,那么我就可以很敏感的知道我的算法需要一个 O(n) 或者 O(nlogn)。平方复杂度直接超时!


最后关于 "我本地能通过,交上去就是不对"

这个问题很蠢!通不过就是有一些问题。一个是要累积经验,分析到底可能出现的问题在哪里。另外不要使用一些奇怪的函数和行为。之前有见过有人使用了windows和linux平台那个功能的函数名都不一样的奇葩函数,所以要使用标准的跨平台的库函数。各个语言一般平台都会告诉你每种语言给的编译器版本,这个环境信息也是很重要的。






推荐阅读



外企面试,哪有你想象的那么难!
精心整理的ebay大数据面试题(全)
秋招失利,如何把握春招?(大四、研三)
秋招失利,如何把握春招?(大四、研三)
我是锦锋,谈谈拿到66个大数据校招offer的经历
从简历被拒到收割今日头条offer,我花了一年时间
阿里技术面全A,终面却被产品经理拉下马,我不服
安心实习 or 全心秋招 ?(附实习跑路路线及秋招攻略)
我面试了100多家公司,总结了全网最详细的在线面试经验



扫描下方二维码
添加好友,备注【交流群
拉你到学习路线和资源丰富的交流群
浏览 72
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报