【字节跳动实习面经(测试开发岗 一面)四个字:破涕为笑】

字节跳动实习面经(测试开发岗 一面)

至于在今年秋招那么严峻的情况下,我一个双非本科还能免笔试直接进入面试环节,我其实也是糊里糊涂的。故事是这么来的,小明在BOSS直聘上投简历,然后一个陌生的HR找到了小明,问小明对对测试开发岗有兴趣吗,小明一看,毕竟是字节啊!果断将自己的简历发了过去。晚上就惊喜的收到了字节面试邀请的电话和邮件,开心了一晚上没睡着!

一.自我介绍

巴拉巴拉一大堆有的没的,说说自己在学校写了啥代码、获得了啥奖、有没有得过奖学金之类的,

可能是我没有项目、比赛的奖项也不是ACM那种含金量高的,所以面试官就没有问我关于简历的内容,

就直接开始问我问题了。

二、C语言

当时脑抽,只记起来extern C,还是第一个问题,面试官就一脸茫然。

extern关键字的作用

全局变量

全局变量在外部使用声明时,extern关键词是必须的,如果变量无extern修饰且没有显式的初始化,同样成为变量的定义,因此此时必须加extern,而编译器在此标记存储空间在执行时加载如内存并初始化为0。

extern “C”

extern “C” 既可以修饰一句 C++ 代码,也可以修饰一段 C++ 代码,它的功能是让编译器以处理 C 语言代码的方式来处理修饰的 C++ 代码。

static关键字的作用

面试的时候只讲了个大概,很多细节当时脑袋瓜子嗡嗡的没说出来。

静态全局变量

静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。

静态全局变量不能被其它文件所用;

其它文件中可以定义相同名字的变量,不会发生冲突;

静态局部变量

该变量在全局数据区分配内存;

静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;

静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;

它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。

静态函数

静态函数不能被其它文件所用;

其它文件中可以定义相同名字的函数,不会发生冲突;

静态成员变量

静态数据成员和普通数据成员一样遵从public,protected,private访问规则;

因为静态数据成员在全局数据区分配内存,属于本类的所有对象共享,所以,它不属于特定的类对象,在没有产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它;

静态成员函数

出现在类体外的函数定义不能指定关键字static;

静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;

非静态成员函数可以任意地访问静态成员函数和静态数据成员;

静态成员函数不能访问非静态成员函数和非静态数据成员;

由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;

三、C++

他居然没问智能指针、右值引用、对象

继承

讲了一下继承的public、proteed、private、多继承、菱形继承

虚函数

从虚函数扯到了多态的定义,再到多态的动静态,再到虚表。

四、计算机网络:

七层模型与五层模型

直接口述了一下七层模型的内容,最顶上的一层的名字一时没想起来。

tcp与udp

其实他问的是tcp/ip协议是什么,然后恰好我中午看了tcp和udp的区别,我就和面试管说我知道这个,然后他就让我答了一下好,还是说了4到5点内容的。

三次握手

直接说的没学,所以就跳过了

http协议

同上。

五、操作系统:

进程

讲了一下进程和程序的区别,PCB(pcb里进程的状态当时忘记讲了,面试结束了才想起来),进程的调度算法的名字,上下文切换。

进程间通信

恰好学到了匿名管道,就只讲了匿名管道相关,然后列举了其他通信的名字如消息队列。

线程

直接说的没学,所以就跳过了

六、数据库

讲了一下学了select、insert、delete,但他对这些好像并不感兴趣。

索引

直接说的没学,所以就跳过了

七、场景:如何给登录界面设计测试用例

面试前几天才看了这个,但紧张的让我忘了,只讲出来测试结果正确相关。

八、测开方向

常见测试方法

经典黑盒白盒、单元、集成、系统

黑盒测试与白盒测试

说了一下两者的定义,还好中午看了点,但没完全记住

单元测试、集成测试、系统测试

简单说了下我自己根据字面意思的理解

用上述测试方法给上述场景设计测试用例

用那个场景举了一些例子,大概率等同于瞎编,毕竟没接触过

九、思考题(经典中的经典)

有两个没有刻度的杯子,一个水龙头,一个5L,一个6L,问怎么得到3L

很久之前看过,但忘了,好歹面试时想出来了。

我是这么说的:

先给5L的杯子装满,然后倒入6L,两个杯子同时放水,这样5L里就有1L,再把6L倒空,在同时放水,6L就有4L,

再把5倒空,同时放水,5L里就有2L,再把6L倒空,同时放水,这样当5L满时,6L里就恰好3L。

我以为我答的很不错,面试官来了句只有一个水龙头,你再好好想想。

然后我脑子又抽了,说把5L杯子放到6L里,当6L满把5L拿出来,重复三次,一听完,面试官就笑了,委婉的说了一下(真实意思:你脑洞真够大的)。

面试结束我才反应过来,什么同时放水,改一下放水顺序不就OK了吗,整个面试,我最大的遗憾!!!

十、算法题

剑指 Offer II 119. 最长连续序列

当时的思路是直接sort()然后遍历记录len然后更新max,就直接写了,毕竟之前没做过

面试官:当前算法的时间复杂度是多少呢

我:忽略排序的话是O(N),

面试官:那到底是多少

我:O(N*LOG N)+ O(N),然后取最大

面试官:有没有O(N)的算法呢?

想了一下没出来

面试官:优化时间复杂度的方法有哪些

我:减少循环次数和层数

面试官:其实还有空间换时间

我:对对对。

面试官:你在想一想

其实我想到了哈希,去找-1的和+1的

他又问:什么可以减少比较次数

我直接蒙了。

最后哈希没搞出来,面试就结束了

十一、提问环节

我问了下base,然后交流了下家里蹲大学的学习心得。[笑哭]

十二、总结

这次面试简直就像天上掉馅饼一般,虽然我可能并没有把握住

这次面试可以说是我的第一次正式面试,面了一小时十五分钟,就当涨经验了。

  1. 所以说,铁子们,简历一定要海投,万一馅饼真砸到你身上呢!!!
  2. 剑指offer一定要全部过一遍,最好每一题都知道最优解!!!
  3. 多看面经总是有好处的!!!
  4. 经过这次面试,我发现得自己把知识点串起来讲一遍,不然面试时脑瓜子嗡嗡的!!!
  5. 面试时可以适当的引导面试官,让他问你你想让他问的,亲测,真的好用!!!

但愿能过(满怀希望,虽然不大),过了我能开心的睡不着的!

你可能感兴趣的:(面经,面试,测试用例,c++)