非科班双非渣本C++秋招总结

背景简介

广州双非渣本,非科班,电子信息工程
今年二月份开始觉悟,认真走C++学习路线,学到六月份,陆续投了几家公司(实习),广州趣炫、4399、CVTE,最终选择了CVTE的暑假实习offer,点赞CVTE的实习待遇,薪酬高福利好,实际工作体验也不错。

收获总结

1、CVTE C++后端开发
2、中国电信——亿迅 C++后端开发
3、网易互娱 引擎技术支持
4、YY直播 Go后端开发

C++面经

C++基础

1)多态、虚函数相关
C++多态的实现机制
静态多态:重载函数
编译器根据函数名、参数类型以及个数来判断重载函数
动态多态:可以用基类指针指向派生类对象,执行虚函数时根据动态类型确定调用哪一个函数。虚函数表
在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据所指对象的实际类型来
调用相应的函数,如果对象类型是派生类,就调用派生类的函数,如果对象类型是基类,就调用基类的函数

虚函数表
虚函数表类似一个指针数组,虚函数表存储虚函数的地址,即虚函数表的元素是指向类成员函数的指针
如果派生类没有重写函数,那么派生类的虚指针指向基类的虚函数表
否则建立一张连续地址的新表

虚函数表在哪里建立的?栈还是堆
虚函数表不在堆或者栈,而是存放在只读数据段,即常量区

虚函数表内部结构是什么
内部是相应虚函数的地址

2)引用和指针的区别:
引用是对象的别名,不占内存空间,指针占空间
引用声明时必须初始化并且不能改变所指向的对象,指针可以后来初始化并且可以改变所指向的对象
引用和指针的使用场景:
引用常作为函数的参数以及返回类型,因指针有可能为空,但引用一定存在对象

3)shared_prt相关,是线程安全的吗?可以指向数组吗?
是智能指针,其本身的引用计数是线程安全的,但是多个线程对所指对象进行读写需要加锁。
肯定可以指向数组,需要自己定义删除器,可用lambda
访问需要用get成员函数进行指针操作,没有重载下标运算符

4)static的作用:
1、用于对其他文件进行“隐藏”的作用,被声明为static的变量或函数只会执行内部链接,导出符号表没有static的变量或函数
2、如果实在函数内进行声明,能使变量常驻内存并且默认初始化为0,存放于全局数据区
3、修饰成员,能够使类的所有对象共享一个实例,不影响类的大小,可以用域运算符进行访问

5)编译相关
C/C++ 文件到可执行文件:
预处理、编译、汇编、链接
1、预处理:进行宏定义、头文件的替换、处理条件预编译
2、编译:1.词法分析 2.语法分析 3.语义分析 (优化)4.产生相应的汇编代码文件
3、汇编:将汇编代码文件翻译为机器语言、填充符号表,包含未解决符号表、导出符号表、地址重定向表
4、链接:对地址进行重定向,根据未解决符号表,遍历其他导出符号表对相应的符号表填充地址(连接),然后生成可执行文件

6)malloc内存分配原理:
申请的内存小于128K:
调用brk(),虚拟内存的_edata指针向前推进,此时没有实际分配物理内存,当对此内存写入数据时,产生缺页中断,系统正式为其分配物理内存
大于128K:
调用mmap(),在文件映射区(未初始化区)分配虚拟内存,可以单独释放

7)std::move函数
std::move,可以避免不必要的拷贝操作。std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。
是一个函数模板,通过传入T&& 利用引用折叠维持传入参数的左值/右值属性,然后调用remove_reference模板类,获取原本的类型,然后通过强制转换static_cast返回右值类型

template <typename T>
typename remove_reference<T>::type&& move(T&& t)
{
    return static_cast<typename remove_reference<T>::type&&>(t);
}

8)const、static关键字,分别存放在哪里
const 修饰的量确切说叫只读量,不是常量。const volatile修饰的变量可以通过指针修改变量
const 修饰指针分为顶层与底层
const 修饰返回类型时,返回的值不能作为左值
const 修饰成员函数,不能与static一并使用
可能在栈区,可能在全局区,看作用域以及有没有static修饰了,如果没有对其取地址的话,也可能被编译器优化为字面常量。
static变量在全局数据区

9)shareed_ptr已经这么成熟了,为什么还用weak_ptr 提醒 -> 循环引用
weak_ptr可以解决shared_ptr循环引用问题,导致内存泄漏问题
shared_ptrA指向的class A中有shared_ptr指向class B
shared_ptrB指向的class B中有shared_ptr指向class A
那么离开作用域的时候,因为类中有shared_ptr互相指向,导致引用计数不为0,不会自动析构A与B,造成内存泄漏
而如果类中使用weak_ptr则不会导致引用计数不为0,避免了内存泄漏


11.29 23:30夜深了,先写那么多,有兴趣了解更多的同学积极留言大家互相学习讨论~


11.30 16:20更新
简单说一下网易互娱引擎技术工程师的面经吧,总共有三个技术面,第三个技术面是技术总监面。
第一个技术面,有两个面试官,第一个面试官重点在基础知识,第二个面试官关注项目并且根据项目来进行场景设计。重点关注游戏引擎的简单理解、有无游戏引擎的使用经历,简单了解游戏开发的一个流程。然后是C++基础、计网、操作系统、数据结构。C++基础问了引用和指针的区别、C++是否强类型语言、union、如何判断计算机是几位的等等,计网问了TCP、UDP的区别,操作系统就是进程线程以及协程,内存管理(栈空间、堆空间的分配以及回收,操作系统如何管理堆空间)我个人理解是基于虚拟内存空间,每个进程都视作占有整个用户物理内存空间,然后每个进程都有虚拟内存空间管理的一个指针数组,每个数组位置对应指针是从1个页面到10个页面的一个大小的控制信息(伙伴算法),操作系统收到malloc等分配内存的指令后根据该进程的PCB(进程控制块)中的虚拟空间分配信息以及伙伴算法的分配方法来分配空间,这里的分配空间实际上是在其进程页表处建立一个页表映射项,并没有真正分配物理空间,而当访问该页发现还未分配物理空间则触发缺页中断,如果物理内存满了则根据页表置换算法(最佳置换算法、先进先出算法、最近最久未使用算法、时钟置换算法等)来进行物理内存的置换等等。。。
然后第二个面试官根据我的tinyWebserver项目问了一个场景设计题目,设计一个服务器,如何限制一个用户一小时内只能调用2000次接口,如何阻止用户在短时间内多次(恶意)调用接口等等。。。(认真吃透webserver的设计可以轻松回答)最后问了到算法,数组中一个数出现一次,其他数出现两次,如何找出这个数,给出三种方法分别说出时间复杂度以及空间复杂度。
暂时先写这么多吧,感兴趣的同学积极留言,大家互相学习讨论~

#秋招##C/C++##广州视源电子科技股份有限公司##网易互娱##YY直播##C++工程师#
全部评论
想问一下楼主的学习路线
2 回复
分享
发布于 2021-12-30 22:34
问的全是八股嘛
1 回复
分享
发布于 2021-12-15 16:41
联想
校招火热招聘中
官网直投
项目是怎么弄的呀,跟学校老师做的吗
1 回复
分享
发布于 2021-12-27 19:15
感谢!求更计网和OS呀😍😍
1 回复
分享
发布于 2021-12-30 15:53
C++也有八股文嘛?我以为就只有java有😂。
1 回复
分享
发布于 2022-03-17 09:57
我的天,这是实习生的要求?好难呀,就算是八股背了也要理解几天吧😞
3 回复
分享
发布于 2021-12-28 17:58
追更~球球了,再更一点吧
2 回复
分享
发布于 2022-01-18 17:26
不是我说,一般的科班出身面对这些题目也要花很多时间去准备吧,看得出大佬是真学到了
1 回复
分享
发布于 2022-03-10 22:08
没有问数据库吗?
点赞 回复
分享
发布于 2021-12-29 21:55
大佬你是真的从2月份开始学,之前一点基础都没有的吗😂😂
点赞 回复
分享
发布于 2022-01-02 00:04
如何限制一个用户一小时内只能调用2000次接口,如何阻止用户在短时间内多次(恶意)调用接口这些场景设计题 , 大佬你怎么答得呀
点赞 回复
分享
发布于 2022-01-04 23:27
太强了,2月学能学成这样,牛逼plus,求求更下学习路线
点赞 回复
分享
发布于 2022-02-19 20:50
大佬,能更一篇学习路线吗。同是双非,一点点C基础,感觉很迷茫。
点赞 回复
分享
发布于 2022-03-10 22:03
enen
点赞 回复
分享
发布于 2022-03-10 22:25
接好运,明天也是引擎技术支持一面,心态崩了
点赞 回复
分享
发布于 2022-03-17 04:09
电信给了多少啊
点赞 回复
分享
发布于 2022-03-20 19:57
兄弟cvte薪资,氛围如何
点赞 回复
分享
发布于 2022-03-27 14:49

相关推荐

78 462 评论
分享
牛客网
牛客企业服务