字节跳动测开面经,听他讲完,紧张得汗流了一背

在今年秋招这么严峻的情况下,我的一个朋友居然免笔试直接进入字节面试环节,收到面试邀请的当晚,他兴奋了一晚上没睡着!

前言

 

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

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

内容,就直接开始问我问题了。

 

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

1.全局变量

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

2.extern “C”

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

3.static关键字的作用

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

static修饰不同对象时的作用:

局部变量:

局部变量就是在函数内定义的变量,普通的局部变量,生存周期是随着函数的结束而结束,每次函数重新执行,局部变量都是新的值,不会保留上次的值。当用static修饰后,局部变量的生存周期就是当程序结束才会结束。再次调用函数时,用static修饰的变量会保留上一次的值。

应用:在函数内,我们想保留某些变量上一次的值,就可以用static去修饰该变量。比如:想统计该函数被执行的次数时,就可以定义被static修饰的int型变量,每执行一次该变量就++。

总结:用static修饰的局部变量,改变了生存周期,但是没有改变其作用域。改变其生存周期的原因是被static修饰的局部变量被存放在.bss段或者.data段,而普通的局部变量是存放在栈上的。

全局变量:

全局变量用static修饰改变了作用域,没有改变生存周期。普通的全局变量是可以被其他的.c文件引用的,一旦被static修饰,就只能被定义该全局变量的.c文件引用,使得该全局变量的作用范围减小。

作用:当一个全局变量不想被其他.c文件引用时,可以用static修饰,这样其他的文件就不能通过extern的方式去访问,这样主要是为了数据安全。

总结:改变其作用域,没有改变生存周期。

函数:

函数用static修饰,改变了作用域。普通的函数是可以通过头文件声名的方式被其他文件调用,被static修饰后就只能在本文件里被调用,这样是为了数据的安全。

作用:有些函数并不想对外提供,只需要在本文件里调用,这时候就可以用static去修饰。

总结:改变了作用域,没有改变其生存周期。

 

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

继承

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

虚函数

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

 

七层模型与五层模型

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

tcp与udp

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

TCP与UDP基本区别:

1.基于连接与无连接

2.TCP要求系统资源较多,UDP较少;

3.UDP程序结构较简单

4.流模式(TCP)与数据报模式(UDP);

5.TCP保证数据正确性,UDP可能丢包

6.TCP保证数据顺序,UDP不保证

具体编程时的区别:

1.socket()的参数不同

2.UDP Server不需要调用listen和accept

3.UDP收发数据用sendto/recvfrom函数

4.TCP:地址信息在connect/accept时确定

5.UDP:在sendto/recvfrom函数中每次均需指定地址信息

6.UDP:shutdown函数无效

基于上述不同,UDP和TCP编程步骤也有些不同

TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。

 

进程

讲了一下进程和程序的区别,PCB,进程的调度算法的名字,上下文切换。

进程间通信

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

 

​常见测试方法

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

黑盒测试与白盒测试

说了一下两者的定义

 

​ 有两个没有刻度的杯子,一个水龙头,一个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的

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

我直接蒙了。

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

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

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

所以说,铁子们,简历一定要海投,万一馅饼真砸到你身上呢!!!

剑指offer一定要全部过一遍,最好每一题都知道最优解!!!

多看面经总是有好处的!!!

经过这次面试,我发现得自己把知识点串起来讲一遍,不然面试时脑瓜子嗡嗡的!!!

面试时可以适当的引导面试官,让他问你你想让他问的,亲测,真的好用!!!

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

字节测开面经滴滴

猜你喜欢

转载自blog.csdn.net/Androidyuexia/article/details/132545535