在今年春招这么严峻的情况下,我的一个朋友居然免笔试直接进入字节面试环节,收到面试邀请的当晚,他兴奋了一晚上没睡着!
巴拉巴拉一大堆有的没的,说说自己在学校写了啥代码、获得了啥奖、有没有得过奖学金之类的,
可能是我没有项目、比赛的奖项也不是ACM那种含金量高的,所以面试官就没有问我关于简历的
内容,就直接开始问我问题了。
?
?
当时脑抽,只记起来extern C,还是第一个问题,面试官就一脸茫然。
全局变量在外部使用声明时,extern关键词是必须的,如果变量无extern修饰且没有显式的初始化,同样成为变量的定义,因此此时必须加extern,而编译器在此标记存储空间在执行时加载如内存并初始化为0。
extern “C” 既可以修饰一句 C++ 代码,也可以修饰一段 C++ 代码,它的功能是让编译器以处理 C 语言代码的方式来处理修饰的 C++ 代码。
面试的时候只讲了个大概,很多细节当时脑袋瓜子嗡嗡的没说出来。
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则常被用于让广播和细节控制交给应用的通信传输。
?
添加图片注释,不超过 140 字(可选)
进程
讲了一下进程和程序的区别,PCB,进程的调度算法的名字,上下文切换。
进程间通信
只讲了匿名管道相关,然后列举了其他通信的名字如消息队列。
?常见测试方法
经典黑盒白盒、单元、集成、系统
黑盒测试与白盒测试
说了一下两者的定义
?
添加图片注释,不超过 140 字(可选)
? 有两个没有刻度的杯子,一个水龙头,一个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一定要全部过一遍,最好每一题都知道最优解!!!
多看面经总是有好处的!!!
经过这次面试,我发现得自己把知识点串起来讲一遍,不然面试时脑瓜子嗡嗡的!!!
面试时可以适当的引导面试官,让他问你你想让他问的,亲测,真的好用!!!
但愿能过(满怀希望,虽然不大),过了我能开心的睡不着的!