版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yt_42370304/article/details/84036125
最近在找工作,这是一次被动的找工作,有史以来时间最长的一次.也有第一在上海这个城市换工作,大概花了将近一个半月的时间.这期间也有部分offer,但是都不是很理想.
- 猎头推荐
我发现这里的猎头推荐的比较多.猎头会打电话过来说有哪哪的职位给推荐.问了一堆的信息,简历上有的东西还要跟你确认一遍.还非要加微信.然后说有消息了再通知.就没有后续了. 这种感觉像是收集信息的.不否认也有靠谱的. - HR预约面试
HR直接打电话约面试的,说我们技术已经看了你的简历感觉挺匹配的.所以想约您面试. 在面试过程中,我感觉聊的不错,面完就直接让回来等消息.一般我都会问多久有反馈. 结果有的就直接没信了还有的个反馈没有个相关经验.
第二种最气人了. 根本没有看简历. 如果没有相关经验干嘛还让面试呢.
我觉得有些公司根本不打算招人,或是看看市场动态的,如果碰到特别优秀的兴许也会考虑. - 电话面试
人事直接预约电话面试,技术面试. 这种方式效率略高些,但是明明不是很匹配,但是还是有的公司让你去公司面试. 但是做为应聘者肯定要抱着试试看的态度啊,如果不去就失去了一个机会. 这种公司最不负责任了.
这段时间面试的公司,
爱奇艺 腾讯 万得 小红书 这类公司以网络技术为主,问的TCP. UDP的技术比较多.支持大数据量的并发.做过哪些开源软件, 分布式 数据库.
云柜 主要是C,C++. QT方面的感觉聊的不错,结果告诉不合适.
贝锐 这个做2-3层的多些,没怎么面试.就问了一下网络的东西,解释一下网络是如何发信息的. 还有嵌入式系统的启动过程. 其他就不说了.
现在总结部分公司的招聘原则和面试技术路线.
一.C++部分
- 为什么将子类析构函数定义成虚函数有什么好处?
A:防止子类的析构函数不被调用. - class与struct 区别?
A:默认访问权限不一样,class默认访问权限private. struct是public. - C++智能指针有那些?都有什么区别
A: Shared_ptr是共享型智能指针.
weak_ptr是弱指针.配合shared_ptr一起使用.
scope_ptr 是一个类似auto_ptr的智能指针,不能转让.一旦获得管理权,你将无法取回来.
unique_ptr是在C++11标准中定义的新的智能指针,同样在作用域内管理指针,也不许拷贝构造和拷贝赋值. - static的作用?
A:(1)隐藏。(static函数,static变量均可)
(2).保持变量内容的持久。(static变量中的记忆功能和全局生存期)
(3).默认初始化为0(static变量)
(4).C++中的类成员声明static(有些地方与以上作用重叠) - 拷贝构造函数作用? 如何声明?
A: (1).如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。以类String的两个对象a,b为例,假设a.m_data的内容为“hello”,b.m_data的内容为“world”。 现将a赋给b,缺省赋值函数的“位拷贝”意味着执行b.m_data = a.m_data。
这将造成三个错误:
1).是b.m_data原有的内存没被释放,造成内存泄露;
2).是b.m_data和a.m_data指向同一块内存,a或b任何一方变动都会影响另一方;
3).是在对象被析构时,m_data被释放了两次。即:当含有指针时,如果调用默认的拷贝拷贝构造函数(赋值运算符),这个时候进行的浅拷贝(赋值),或者是影子拷贝,会使2个指针指向同一个内存区域,析构的时候就会出现同一个内存资源被释放2次的错误。对象存在资源但复制过程并未复制资源的情况视为浅拷贝。
// 拷贝构造函数
String::String(const String &other)
{
// 允许操作other 的私有成员m_data
int length = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data, other.m_data);
}
// 赋值函数
String & String::operate =(const String &other)
{
// (1) 检查自赋值
if(this == &other)
return *this;
// (2) 释放原有的内存资源
delete [] m_data;
// (3)分配新的内存资源,并复制内容
int length = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data, other.m_data);
// (4)返回本对象的引用
return *this;
}
还要注意的是拷贝构造函数是构造函数,不返回值
而赋值函数需要返回一个对象自身的引用,以便赋值之后的操作 链式操作
6. C++11包括哪写?
A.
7. 虚函数的底层是如何实现的?
A. 编译器处理虚函数的方法是:为每个类对象添加一个隐藏成员,隐藏成员中保存了一个指向函数地址数组的指针,称为虚表指针(vptr),这种数组成为虚函数表(virtual function table, vtbl),即,每个类使用一个虚函数表,每个类对象用一个虚表指针。
8. SOCKET有哪写API?
A. socket, Listen. connect Accetp, recv, send.
9. 什么是菱形继承?
A. 菱形继承
假设有类B和类C,它们都继承了相同的类A。另外还有类D,类D通过多重继承机制继承了类B和类C。
如果直接继承会引发访问不明确(二义性),以及数据冗余。如果直接指定访问对象,可解决二义性,而要解决数据冗余,则要引入虚函数。
因为图表的形状类似于菱形(或者钻石),因此这个问题被形象地称为菱形问题(钻石继承问题)。
- 什么是RAII?
A: RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。
RAII 的一般做法是这样的:在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。借此,我们实际上把管理一份资源的责任托管给了一个对象。
这种做法有两大好处:
不需要显式地释放资源。
采用这种方式,对象所需的资源在其生命期内始终保持有效。 - explicit关键字的作用?
A:防止构造函数做隐式转换. - volatile 关键字的作用?
A: volatile关键字试图阻止过度优化
(1).阻止编译器为了提高速度将一个变量缓存到寄存器内而不写回.
(2).阻止编译器调整操作volatile变量的指令顺序. - 什么是左值和右值?
- 在构造函数和析构函数中调用虚函数有什么影响?
- C的struct和C++struct的区别?
A: C中的struct中只能定义基本数据类型.而C++中可以定义成员函数. - C++为什么字节对齐?
- C++ 强制类型转换有哪几个?都有什么区别?
- select poll和epoll 区别?
- epoll的实现API?
二.数据结构
- Vector和List区别?
- 为什么Vector申请内存空间是2倍?
- 链表反转?
- 如何判断链表中有环?
- Map是如何实现的?
三.网络部分
- TCP和UDP区别?
- TCP三次握手的实现?
- 为什么会有三次握手?
- TCP四次握手的实现?
- 为什么会有time_wait状态?
- 什么是快重传?
- 什么是慢启动?
- 如何用UDP协议实现可靠性?
- SSH免密原理?
四.设计模式
- 面向对象的设计原则?
- 常用的设计模式?
五.操作系统
- 如何查看打开文件标识符?
- 进程和线程间区别?
- 进程间通讯? 各有什么区别?