当前位置: 首页 > 面试经验 >

分享中望软件 C/C++ 开发面经

优质
小牛编辑
104浏览
2023-03-28

分享中望软件 C/C++ 开发面经

可能有的内容答得不完善不正确,请大家注意甄别。

一面(9.15 45min)
1.    自我介绍,项目经历偏通信,研究方向?为什么希望做软件?(面试官问得比我写得更尖锐。我是无线网络和通信方向的学硕,日常学习和研究以实验+发论文为主,所以面试官问我为什么平时做通信,想做软件开发。第一个问题就让我感觉不太舒服,各位的研究方向五花八门,上来就 PUA 项目。简历和自我介绍了双 985 七年科班软件工程,不找软件难道去卖煎饼果子?)
2.    对我们公司了解吗?CAD 用过吗?猜测一下我们的 CAD 软件产品使用了什么技术。(面试前特意去了解了一下他们公司,中国图形建模龙头企业,简单吹捧了一下。没用过。全程尬聊,说了说 C++ 客户端开发可能用到的计数,还有图形渲染技术)
3.    哪个项目用到比较深的技术,接触设计模式了吗?(没有什么比较深的技术,说了多线程并发)
4.    还了解什么设计模式?
5.    智能指针?使用的时候要注意什么?(四种智能指针 auto_ptr(已弃用),unique_ptr,shared_ptr,weak_ptr,早期的 auto_ptr 和之后的 unique_ptr 是为了实现对某一堆中对象的唯一管理,但当移交管理的时候 auto_ptr 采取的是拷贝语义,unique_ptr 采用的是移动语义,使得后者通用性更好;shared_ptr 采取引用计数思路管理对象生命周期,当多一个指向该对象的 shared_ptr,引用计数加一,相反减一,引用计数为 0 时,释放被指向的内存空间;weak_ptr 是为了解决 shared_ptr 强指向可能出现的循环引用导致的内存泄漏,和当被指向的对象被释放产生的悬垂指针。使用时需要注意尽量不要直接使用智能指针的裸指针;在初始化只能指针的使用尽量使用 make_shared 和 make_unique 方法,一来可以加快初始化只能指针的速度(少编译一次),二来可以避免因赋值初始化操作执行一半造成的内存泄漏;使用 shared_ptr 要注意是否会产生循环引用。
7.    weak_ptr 除了你说的这两个作用(避免循环引用和悬垂指针)还有什么用途?weak_ptr 可以放在 STL 容器中吗?(不会)
8.    make_shared 和 make_unique 都是哪个版本的 C++ 引入的?(make_shared 是 C++ 11;make_unique 是 C++ 14)
9.    右值引用,作用?(右值引用是 C++ 11 引入的特性,为了解决拷贝语义带来的对对象传递带来的开销(以值传递的方式返回某一个对象,在 vs 编译器中需要调用一次拷贝构造函数,用临时变量保存返回出来的对象的值,然后再把这个对象的值的临时变量拷贝给弹栈后的父域函数中的接收该函数返回值的对象变量中,因为无法管理右值的生命周期导致的无用开销),用右值引用可以延长右值的生命周期,用移动语义解决值传递问题,可以避免无用的拷贝开销)
10   除了这个左右还有什么作用呢?(不会)
11.  进程、线程间通信及同步的方法有什么?(进程通信:匿名管道,有名管道,消息队列,共享内存,信号量,信号,套接字;线程通信:共享进程的全局变量,信号量,消息传递(OC 中的 GCD 等);进程同步:信号量,管程,消息传递;线程同步:信号量,互斥锁,条件变量等)
12   进程间通信最快的是什么?(共享内存)第二快的呢?(不会)
13.  锁了解哪些(按加锁策略分:乐观锁:假定在访问过程中不会发生修改,访问后再判断版本号,查看是否在访问期间修改了(Git,共享文档常用;效率高,但对高并发效果差)、悲观锁:认为访问过程中会被修改,所以访问前就加锁(读写锁就是一类悲观锁);按等待方式分:阻塞锁(阻塞未能获取到资源的进程,不再分配时间片,资源被释放时唤醒该进程,有上下文切换开销,适合大尺度时间调度)、自旋锁(让进程忙等,继续分配时间片,无上下文切换,但因为分配时间片忙等有开销,适合小尺度时间调度);按加锁意图分:读锁(共享锁,S锁):加读锁的资源还可以被想加读锁的进程获取,不能被想加写锁的进程获取、写锁(独占锁,X锁):加写锁):加写锁的资源不能被想加读锁的进程获取,也不能被想加写锁的进程获取;数据库中的锁(库级锁、表级锁(表结构锁,读写意向锁,表读写锁)、行级锁(行锁(读写锁),记录锁(读写锁),间隙锁(GAP 锁:锁区间、插入意向锁;锁点)):为实现数据库系统的隔离性)
10.  C++ 11 thread 库中的 join 和 detach 的区别(join 是让父线程运行到 childthread.join() 处时,等待子线程的结束,并回收子线程资源,可以保证父线程不会在子线程结束之间结束;detach 是让该子线程与其父线程拆离父子关系,使子线程变成守护线程,与程序的主线程拥有相同的生命周期,结束时原子线程自己回收资源)
11.  职业规划和对加班的想法

二面(10.16 约面,已拒)

面试体验不是很良好,面试官考察很深入,对校招面试者要求很高,需要具有入职就能工作的能力。

 类似资料: