![]()
八股文学习网站:https://interviewguide.cn 这是阿秀的第「517」篇原创
大家好,我是阿秀。
其实在上个月,大名鼎鼎的"窑鸡厂",也就是深信服就已经开奖了,不过今年深信服貌似跟往年相比,在校招阶段有了三个变化:
1、更偏爱线下面试了
这个其实很好理解,不只是深信服,在以前分享的携程今年校招的文章中也提到过携程今年也更偏爱线下面试了,原因同这篇文章中的一样:携程线下面试,一天走完流程!
此外,线下面试也比线上面试简单一些,面对面的沟通交流,流程也走得更快,如果是线上面试快则两三周,慢则一两月是常有的事。
但线下面试一般一天就能搞定全部流程,从一面到HR面全部搞完,甚至offer都可能当天发放给你了。
所以如果各位有遇到能够线下面试的公司,真可以去试试,流程快、面试难度更低一些,自然拿到offer的机会也会更大一些。
2、后端开发并入AI开发
现在搞开发的都要懂点AI,Cursor有多好用,只有亲生体验过才知道这玩意儿有多逆天
。
今年深信服的后端开发岗位被并入AI开发工程师了,可能这部分人入职后会从事AI应用的相关研究?
如果是这样的话,其实还是好事,能够跟当下最流行的方向沾点关系,后面换工作跳槽吹牛皮的时候也好吹一些~
3、薪资更高了
根据牛客网以及OfferShow爆料,貌似今年深信服的AI开发工程师薪资比普通的开发岗薪资更高一些:
-
一本,25k x 12 - 16 -
211硕,SP,30k x 12 -16 -
双非硕,SSP,32k x 12 - 16
就是这个年终数不定,可能0个月即12薪,也可能4个月即16薪,如果是16薪的话,总包则基本上可以达到45-50W了,这个数相当可观了,给钱相当大方。
至于算法岗,那就更高了,深信服今年的算法岗本科SSP月薪 30K 到 45K,硕士SSP 35K 到 50K,给的确实够多,但算法门槛也更高,这里只能酸溜溜的羡慕一下了
~
深信服作为安全领域一哥,其主要技术栈是C/C++,不过貌似有小道消息说其部分业务岗也在转Golang,真实性暂时未得到证实,有深信服的老哥站出来说说嘛?
深信服一面一般都是考察基础为主,很少会问到很难的问题,基本都是C/C++、操作系统、计算机网络、算法,也很少涉及到Redis这些。这里分享一篇深信服一面面经,各位可以看下难度如何?
C++
1、介绍C++面向对象的三大特性
三大特性:继承、封装和多态
(1)继承:让某种类型对象获得另一个类型对象的属性和方法。它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展
(2)封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏,例如:将公共的数据或方法使用public修饰,而不希望被访问的数据或方法采用private修饰。
(3)多态:同一事物表现出不同事物的能力,即向不同对象发送同一消息,不同的对象在接收时会产生不同的行为(重载实现编译时多态,虚函数实现运行时多态)。
2、C++ 11有哪些新特性?
-
nullptr替代 NULL -
引入了 auto 和 decltype 这两个关键字实现了类型推导 -
基于范围的 for 循环for(auto& i : res){} -
类和结构体的中初始化列表 -
Lambda 表达式(匿名函数) -
std::forward_list(单向链表) -
右值引用和move语义
3、hashtable中解决冲突有哪些方法?
线性探测
使用hash函数计算出的位置如果已经有元素占用了,则向后依次寻找,找到表尾则回到表头,直到找到一个空位
开链
每个表格维护一个list,如果hash函数计算出的格子相同,则按顺序存在这个list中
再散列
发生冲突时使用另一种hash函数再计算一个地址,直到不冲突
二次探测
使用hash函数计算出的位置如果已经有元素占用了,按照、、…的步长依次寻找,如果步长是随机数序列,则称之为伪随机探测
4、下面这两个哪个是指针数组和数组指针?
int *p[10]
int (*p)[10]
int *p[10]表示指针数组,强调数组概念,是一个数组变量,数组大小为10,数组内每个元素都是指向int类型的指针变量。
int (*p)[10]表示数组指针,强调是指针,只有一个变量,是指针类型,不过指向的是一个int类型的数组,这个数组大小是10。
操作系统
5、堆和栈的区别
|
|
|
|
|---|---|---|
| 管理方式 |
|
|
| 内存管理机制 |
|
|
| 空间大小 |
|
|
| 碎片问题 |
|
|
| 生长方向 |
|
|
| 分配方式 |
|
|
| 分配效率 |
|
|
6、大小端存储是什么意思?如何区分?
大端存储:字数据的高字节存储在低地址中;小端存储:字数据的低字节存储在低地址中
例如:32bit的数字0x12345678
所以在Socket编程中,往往需要将操作系统所用的小端存储的IP地址转换为大端存储,这样才能进行网络传输
小端模式中的存储方式为:

大端模式中的存储方式为:

了解了大小端存储的方式,如何在代码中进行判断呢?下面介绍两种判断方式:
方式一:使用强制类型转换
#include <iostream>
using namespace std;
int main()
{
int a = 0x1234;
//由于int和char的长度不同,借助int型转换成char型,只会留下低地址的部分
char c = (char)(a);
if (c == 0x12)
cout << "big endian" << endl;
else if(c == 0x34)
cout << "little endian" << endl;
}
方式二:巧用union联合体
#include <iostream>
using namespace std;
//union联合体的重叠式存储,endian联合体占用内存的空间为每个成员字节长度的最大值
union endian
{
int a;
char ch;
};
int main()
{
endian value;
value.a = 0x1234;
//a和ch共用4字节的内存空间
if (value.ch == 0x12)
cout << "big endian"<<endl;
elseif (value.ch == 0x34)
cout << "little endian"<<endl;
}
计算机网络
7、TCP是如何保证可靠传输的?
-
确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就会重传。 -
数据校验:TCP报文头有校验和,用于校验报文是否损坏。 -
数据合理分片和排序:tcp会按最大传输单元(MTU)合理分片,接收方会缓存未按序到达的数据,重新排序后交给应用层。而UDP:IP数据报大于1500字节,大于MTU。这个时候发送方的IP层就需要分片,把数据报分成若干片,是的每一片都小于MTU。而接收方IP层则需要进行数据报的重组。由于UDP的特性,某一片数据丢失时,接收方便无法重组数据报,导致丢弃整个UDP数据报。 -
流量控制:当接收方来不及处理发送方的数据,能通过滑动窗口,提示发送方降低发送的速率,防止包丢失。 -
拥塞控制:当网络拥塞时,通过拥塞窗口,减少数据的发送,防止包丢失。
8、Cookies和Session分别存放在哪里?
cookie:存放在客户端,session:存放在服务端。Session存储的数据比较安全
SQL
9、一个班级成绩表,将sex为male何female的区分开来,你会怎么写SQL?
SELECT sex, COUNT(*) as total_students, AVG(score) as average_score
FROM grades
WHERE sex IN ('male', 'female')
GROUP BY sex;
手撕算法
力扣原题:判断链表是否有环
好文推荐
你好,我是阿秀,普通学校毕业,校招时拿到字节跳动SP、百度、华为、农业银行等6个互联网中大厂offer,这是我在校期间的编程学习之路,点击蓝字即可查看我是如何自学技术以应对第二年的校招的全过程。
毕业后我先于抖音部门担任全栈开发工程师,目前在上海某外企带领团队继续从事全栈开发,负责的项目已经顺利盈利300w+。在研三那年就组建了一个阿秀的学习圈,持续分享校招/社招跳槽找工作的经验,目前已经累计服务22、23、24、25、26届同学,共计超过 4400 +人,欢迎点此🔗加入我们,一群人才能走的更远、更稳、更顺。

