【元戎面经】软件开发面经大集合(附25校招链接)
24届秋招一面
9.1
0.自我介绍,介绍完说今天只问基础知识
1.python生成器、修饰器
2.python多线程、协程
3.python全局变量和局部变量的区别
4.python lambda用法
5.用没用过数据库?(没有)
6.反问手撕【三数之和】,先跟面试官介绍了一下思路(双指针,分析了一下时间复杂度,然后开始写)总共半小时结束,自我介绍+基础知识大概十几分钟吧。面试官说我和这边不太匹配,建议让我投算法(没顶会我配嘛)
8.31
1. 自我介绍
2. 简单介绍一下项目, 然后面试官针对项目问了几个问题(无深挖, 可能因为我的项目是csapp实验, 太简单了没什么好问的3. 问了简单八股, 右值引用和auto, 之前看过别人面经所以答上来了
4. 算法题, 两道都是字符串相关(其实不是, 只是背景是字符串而已, 不牵扯字符串算法), 我最讨厌字符串了。。。 第一题A了, 第二题看的有点懵, 又有点紧张, 但是这个题我肯定是见过的, 但是又菜又紧张就没做出来, 样例通过12/20和大家说一下题意, 说不定大家会遇到:给一个长度为n的字符串str1(1 <= n <= 10000), 还有一个初始为空的str2, 每次你可以取出str1左端点或右端点的字符加入到str2的末尾, 问你最后能得到的字典序最小的str2。我写个O(n^2)的dp, 我觉得正解肯定也是一个这个复杂度的dp
8.29
自我介绍;
实习项目;
代码实现需求coding向上转型?
左值右值?const & 右值
析构函数为什么要加virtual关键字?
copy构造函数为什么要传引用,不传引用会怎么样?
8.28
·make_shared 好处 ·缺点
·引用哪里会用到内存
·矩阵乘法
·进程为什么采用COW
·为什么构造函数中不能为虚函数?
·为什么析构函数要虚函数?
·STL中有没有既不能移动又不能拷贝的?
·了解哪些设计模式?
·vector 2倍扩容为什么不好?
·Google Test
·LRU
8.19
- 类成员函数后加 const 和 final 关键字分别代表什么
- 如果基类析构函数没有声明为虚函数会造成什么问题
- 浅拷贝和深拷贝的区别(举例说明)
- 重写和重载的区别
- 静态库
.a
和动态库.so
的区别 - 从数据结构角度分析堆、栈、队列的区别
- map 和 unordered_map 的区别
LeetCode:
- 无序数组的中位数(类似 <数据流的中位数 No. 295>、要求
O(n)
时间复杂度、提示:快速排序) - 分割等和子集(No. 416)
8.9
10分钟项目
项目跟面试官所在的组不太匹配
做了两道题
1.求一个整数开三次方的值知道用二分 但是写的很烂
2.给一个整数 分成几个整数的和 求最大乘积找数学规律做出来了
又跟面试官一起用动态规划做了一遍
8.8
* c++有哪些特点
* stl map unordered_map
* stl vector resize-reserve
* 深浅copy
* 怎么学习c++ 读书、leetcode、源码
题目:最长有效括号
7.28
面试忘记带耳机,面试官人很好等了10分钟,全程问的时候我不打不出来的会帮我找接口。其实前面两家公司都是拿c++面试进去转go和java的,但是面试官说你肯定是一直写java,所以c++不熟悉。基本不怎么问我c++,但是我讲了工作,他说java他不是很懂不想问这方面默认我都会了(天啊才学两周)。体验感极好。
1. 自我介绍
2. 介绍一下在sxf的工作和pdd的工作
3. 你刚刚说到java在线debug,你用过的c++的在线debug工作有什么
4. 可能你对c++不熟悉,你了解c++哪些方面(多态,封装,继承,虚函数,智能指针)
5. 操作系统熟悉吗?讲讲内存管理
6. 隔离性->虚拟地址->页表->物理地址
7. 然后说了四个实验(三级页表(问了什么是一级页表),分裂全局内核页表 ,cow,lazy alloc)
8. 如果对应的虚拟地址找不到会发生什么?
9. 会发生缺页,讲了一下lazy alloc的过程实际上就是触发缺页的过程(缺页终端)
10. cow讲一下
11. 讲一下如何进入内核态
12. 手撕代码:给一个数组,找到所有的和为target的集合
7.27
1.自我介绍 聊项目
2.手撕代码
遍历一棵N个点的树,需要选一个起点,遍历整棵树,计算走的路径长度最短为多少。输入: N N-1条长度为1的边,表示为(a,b)输出: 2N<100;N<1000;N<100000;
例子: 1-2 2-3 可能的长度是2和3,所以答案是2.
思路:
在这个问题中,给定的是一棵N个节点的树,每个边的长度均为1。问题要求找到一个起点,通过这个起点遍历整棵树的路径长度最短为多少。
一棵树的遍历问题中,如果所有边的长度相等,那么遍历全树的最短路径长度就等于2*(N-1) - h,其中h是树的高度。因为在遍历过程中,每一个节点(除了根节点)都需要被访问两次(一次进,一次出),所以总路径长度至少是2*(N-1)。然后我们可以减去树的高度h,因为在从根节点到最深的叶节点这段路径中,每个节点只被访问了一次。
所以,为了得到最短的路径长度,我们需要选择一个使树高度最小的节点作为起点。这个节点就是树的中心点,也就是树的直径的两个端点。树的直径可以通过以下步骤计算:
1. 从任意一个节点开始,进行深度优先搜索(DFS),找到距离这个节点最远的节点A。2. 从节点A开始,进行深度优先搜索,找到距离节点A最远的节点B。那么,节点A到节点B的距离就是树的直径。3. 选择节点A和节点B中的任意一个作为起点,遍历整棵树,就能得到路径长度最短的结果。
这个算法的时间复杂度是O(N),因此对于N<100, N<1000, N<100000的输入,都能在可接受的时间内得到结果。
7.27
- 自我介绍
- 经纬恒润实习经历
- 对AutoSAR的了解
- DOIP诊断中相关协议的了解
- 对C++的了解
- 两道题
- C++多态,根据多态扩展出override、virtual等关键字的作用以及底层逻辑
- 三大拷贝:默认拷贝、复制拷贝、移动拷贝,并结合vector编写相关代码,产出结果
- 反问
7.26
在看到元戎秋招开了,就立马投了,不知深浅投了规划算法工程师,秒挂。
7.19通知软件工程师给面试机会约了7.26面试
一面(7.26):
属于是交叉面试,面试内容是c++的基础 和 coding
+ 常用的stl
array 和 vector 的区别、map 和 unordered_map 的区别、map set vector的区别
+ 智能指针
unique_ptr:独享所有权、是一个仅能移动的类型、析构时自动销毁,场景:为了防止内存泄漏的产物
+ 继承的概念,多态的概念
+ 构造函数、析构函数
这里没聊明白,应该按照python __del__, __init___, __str___ 等扩展开来
+ c++ 编译流程
预处理(Preprocessing) -> 编译(Compilation) -> 汇编(Assemble) -> 链接(Linking)
这部分面试前没复习到,白给了
coding:
矩阵的最大联通块问题,手撕各种方法
总结:挂的概率 > 70% C++的基础能力基本为0,coding不难,还好面试官是做算法的,没有问得那么深入,不至于太过尴尬。
7.18
1.自我介绍
2.华为HPC高性能软件迁移这个项目是什么?做了多久?
3.博客 开源
4.做题 搓生产者-消费者(五十分钟 强度主键递增 需要加强)
5.channel的哪些情况会阻塞(读阻塞 写阻塞 还有没有其他情况)? 往nil的channel读写是会阻塞还是会panic?(都是阻塞) 哪些情况会panic?
6.git命令 git rebase和git merge的区别? 你用的哪个 推荐用哪个? git cherry-pick
7.一个进程hang住了 该怎么排查问题 (1.看系统资源 2.看日志 3.ps看进程状态 4.中间件 5.调试工具 6.代码审查)
8.为什么握手是三次 挥手是四次
9.分布式系统了解吗?raft的心跳是什么?raft选举竞争问题怎么解决(心跳时间加上随机值)
10.K8S了解的多吗?安装K8S集群的时候那些镜像包是怎么安装的?
11.debug工具(可以说说pprof和trace的 忘记说了)
12.数据库如何实现事务,你如何实现事务的原子性
13.etcd知道吗?底层实现知道吗?(不知)
14.你现在在哪?了解我们公司吗?
Q & A
1.面试表现:代码能力需要加强
2.您的日常工作 你想走什么方向
7.14
40min, 以为会问些c++八股和手撕,结果全是问的项目底层...没有什么参考价值但还是记录一下,实验室项目里面用了容器,然后全程就是容器原理,容器通信原理。 开始还好,后面就开始问命名空间怎么创建,我回答clone函数中有一堆flag,选择对应命名空间的flag就可以创建一个进程,并且运行在这些命名空间中,然后接着问clone函数里是怎么实习命名空间的,这个不知道。
然后问我知不知道tun/tab,隧道大致我知道,用于容器跨主机通信的。然后问原理,大致网络原理我知道是进行二次报头封装,然后就问我怎么自己去实验这个东西,给了个通信场景让我说说怎么实现,答不出来,然后又问v2ray用过吧,这个东西让你来实现怎么实现,又答不出来,面试官挺好,还给了我台阶下,说了两个步骤,问我第三步怎么做,但我太菜了确实不知道,没有怎么去看过这个。 后面基本就是当场给我上课了,大概意思就是说不要只会用linux上的一些东西,要知道怎么去实现。后面本来还想讲讲iptables的,但看我tuntab都不会就没讲了,提前结束了,(其实iptables我还是知道一点的,但也不是很深,就没敢提)
7.14
项目(25mins)
1. 进程间通信方式
2. 说说C++多线程
3. C++异步
4. 用多线程实现处理多个文件中的数据,并求和(不会)
5. const
6. C++的数据结构有哪些
7. 手写用两个栈实现队列
7.14
●先简单问了下项目,主要还是问八股
●仔细的问了B+树/B树/红黑树/哈希表,包括怎么插入删除,什么场景下使用哪个,之后还延展到LSM tree
●智能指针了解吗?说一下weakedptr使用场景?
●说一下enable shared from this
●右值引用,move,移动构造
●tcp三次握手,accept对应三次握手中的哪次
●高性能的web服务器怎么实现的(因为简历中提了一嘴)
●io uring了解吗?说说proactor模式
然后留了30分钟写了两个题,一个LRU,一个快排求第k大的数
7.13
聊了大概十分钟实习项目,然后进入八股环节,感觉面试官特别喜欢问实际场景中的应用
- golang的channel是什么,应用场景是什么,有什么分类,底层是什么
- golang的GC了解吗,说一下
- python生成器和迭代器,平常使用的场景是什么
- 对协程的一个理解,平时使用的场景是什么
- tcp建立连接后,如果没有收到服务端的消息,客户端会做什么
- 建立TCP连接有几种状态
- 千万级大规模数据读写,从数据库,缓存,主从集群,分库分表的角度去讨论
算法题:重排链表
7.12
1、自我介绍
2、对简历上的项目进行介绍
3、C++ struct 和 class的区别
4、指针和引用的区别
5、为什么模板类写在.h中,不在.cpp中
6、一个程序怎么从文本文件编译成可执行文件
7、链接分为动态链接和静态链接。那有什么区别?
8、排错题:两道涉及类的继承编程题:n×m大小的矩阵,顺时针打印出来。
7.12
C++与C的区别
RAII机制
vector底层原理、扩容怎么实现的
了解过模版吗?模版重载与函数重载
C++11新特性用过哪些
智能指针相关
为什么使用make_shared、make_unique,而不是使用原生指针
编程题:岛屿数量、最大面积
24届秋招二面
8.30
- 实习项目
- 有没有好的方法平衡CPU性能和CR
- 场景题·webserver项目
- 什么是死锁?
- 怎么判断是死锁还是进程(线程)长时间的计算?
- std:thread 和 p_thread ?
- 内存对齐·内存对齐中,不同设备供应商提供不同的struct,不同的struct之间的彼此嵌套,如何解决这个多个struct之间的嵌套的内存对齐的问题
- void request()·int query()查询前五分钟request调用的次数·
- 难点:长度溢出,以及unordered_map
7.31
epoll和线程池是如何合作的?什么时候用epoll,什么时候用线程池
工作线程处理的是什么?
有没有可能多个线程处理同一个fd?
ONESHOT什么作用?
如果访问会发生什么?
定时器的升序链表是什么?谁来排序?
数据库连接池是什么?与RAII机制有什么关系?
发起的查询如何与连接池发生关联
拿不到连接会怎么样?
阻塞住?阻塞是如何实现的?
vector原理
vector如果放的是很复杂的对象的话,还能拷贝吗?
移动是什么
移动语义是如何实现
deque原理
能不能把vector当成deque来用
锁是如何保证线程安全的
原子操作是什么东西
锁能保证在不同的CPU看到的东西是一样的吗
内存屏障
为什么使用快速排序?相比于其他排序算法的优势在哪里?
归并排序为什么需要临时空间?有没有可能不需要?
编程题:模版类实现固定大小的队列,不能使用STL数据结构,T没有构造函数怎么办
7.28
面试官说这一面是C语言面试(从一面面试官那了解到这个组是元戎三大算法组之一的软硬件部门,所以需要有硬件背景的),全程怼着项目问,我的项目都是嵌入式相关的。问了50分钟,后来给了15分钟写一个C语言的题,双向链表,拿链表结点招结点值的,补充宏定义,没搞出来,事后一想直接强转就行……。面经后面再补充。
- 自我介绍
- 实习时用的是什么单片机(英飞凌TC397,忘记了,面试官提醒的才想起来,菜的抠脚)
- 项目1实现了哪些功能
- STM32用的是哪一款
- 用的是HAL库还是什么?开发工具是什么?
- IIC协议时序逻辑?(面百度就差点挂在这,后面又看了看,说的还挺顺利)
- 互补滤波算法是怎么实现?
- 单片机死机是如何解决的呢?
- PCB也是自己画的吗?
- 对以太网协议栈的了解
- TCP和UDP
- 计算机网络中MAC在哪一层?TCP在哪一层?
- Autosar中的分层情况?
- EthSM主要的内容
- UDPNM的主要内容
- TC397中如何定义任务,任务间隔是多少
- 单片机中,发生中断是如何找到中断函数的
- 中断函数以什么方式写入到启动文件中断向量表中
- rtos中如何定义一个任务,需要传递哪些参数(感觉面试官对这个地方也不是太了解)
- 实时操作系统和Linux的区别
- 说一下struct关键字,内存对齐和不对齐,用的是什么关键字
- static关键字的作用
- 什么是中断,单片机怎么知道发生中断的
- 写题,没写出来,面试官让我了解一下如何从结构体地址获取结构体成员
总结:除了题目没写出来(硬伤,太久不用C写题了,看到的时候一脸懵),其他答得都挺好的,写个面经求好运!
7.26
面的稀巴烂,忙着背八股了语言的基本用法忘光光,还是发发面经攒人品,希望最近投的都能约面。
- 自我介绍
- 数据库为什么要加索引,怎么设计优化索引,怎么知道数据有没有走索引,走的那个索引。
- 给出一个静态/动态变化的数组,如果需要精确查询怎么查找,如果需要范围查询怎么查找
- TCP为什么要三次握手,两次有什么问题
- TCP的拥塞控制
- 直播服务应该用TCP还是UDP
- 问kafka怎么使用的,我说只是简单使用后就没追问底层原理了
- 问返回状态码怎么包装的,单纯用http状态码还是返回具体信息,问怎么区分超时错误是网关还是后端
- gin的中间件(没答上来),跨域(没答上来)
- 问context,用context写一个超时中断(没写好)
- 用golang写一个并发打印(又没写好)
- 问了实习的一些项目
- 写一个机器复用分配的场景
面试官基本上是看你具体的能力出场景题,在能力范围内反复拷打,循循善诱,水平很高。虽然我面的很烂但体验很好
24届秋招三面
8.17
- 面试官部门介绍(车载OS组)
- 自我介绍
- 实习工作内容
- 怎么做CI
- 课题方向
- 项目内容
- TCP/UDP
- 线程进程
- unordered_map和map
- 一道Hard,设计数据结构(太菜,做了半小时,靠着面试官提示做出来了)
有一说一,元戎面试虽然难,但是面试体验一流。面试官都很友好,遇到不会的地方会一点点提示,简直都是神仙。
最后问了面试官大概什么时候出结果,说这个要问HR,看来就只能等着了。
一二三面题目总结起来就是,一面CPP,两个题,正确率比较低;二面C,双向链表问题,最关键的代码没写出来;三面CPP,设计数据结构,这个倒是做出来了,就是写的比较慢,写到最后才发现之前的代码思路错了,最后重写了一遍【哭】
24届秋招四面
8.31
- 自我介绍
- 项目介绍
- 项目的repo地址,尴尬的是我还没提过pr
- 博客还有在写吗
- 对自己的定位
- 考虑做算法开发吗
- 手撕智能指针
- 反问与被反问
- 读过的书介绍一下
- 有没有了解过openai和特斯拉现在的工作
- 团队配合,如何解决技术难题
- 平衡工作时间
- 华为也在做智能驾驶,区别
- 多久会出面试结果
23届及以前软开面经
其他岗位面经汇集
【规划算法工程师】
【slam算法工程师】
25届校招投递地址
点我,投递的同学,在下方回复:名字简称+地址方便确认是否投递成功,例如:xyz + 深圳
#元戎启行##软件开发##秋招##面经##我发现了面试通关密码#