面试问题总结---嵌入式部分和项目部分

1、本栏用来记录社招找工作过程中的内容,包括基础知识学习以及面试问题的记录等,以便于后续个人回顾学习; 暂时只有2023年3月份,第一次社招找工作的过程;

2、个人经历: 研究生期间课题是SLAM在无人机上的应用,有接触SLAM、Linux、ROS、C/C++、DJI OSDK等;
3、参加工作后(2021-2023年)岗位是嵌入式软件开发,主要是服务器开发,Linux、C/C++、网络编程、docker容器、CMake、makefile、Shell脚本、JSON等。

4、求职岗位是嵌入式软件开发、C/C++开发、自动驾驶岗位开发等。

在这里插入图片描述

文章目录

一、嵌入式部分

1 解决崩溃的问题?具体说下

①算法引擎通过backtrace堆栈信息和具体日志去排查。(去经验案例里看下backtrace是怎么实现的)

1.1 因为有加密所有无法挂gdb,那算法库加密是怎么加密的?

1.2 自己的程序,除了看backtrace,还能怎么查?

用gdb排查
用gdb排查程序崩溃问题:

  • 方法1:运行程序,单步调试
    gdb 程序;b+行号设置断点;run 运行;n单步运行;bt查看堆栈信息;print查看某一变量的值
  • 方法2:调试core文件
ulimit -c unlimited //解开core文件大小限制
ulimit -d unlimited	//解开数据段长度限制
./gdb test core//用gdb调试test的core文件
bt//查看具体的出错位置,堆栈信息
问题1:如何确认哪个程序产生的core
	file core可以输出是由哪个程序生成的core
问题2:如何检车生成core文件的选项是否打开
	ulimit -a
问题3:如何永久开启core文件生成
	/etc/profile 文件中设置ulimit
问题4:修改core文件的文件名称以及加入pid号
	core_pattern和core_uses_pid
问题5:程序产生core的原因
	1 内存访问越界
	2 多线程读写的数据未加锁保护。
	3 非法指针
		空指针、野指针、
	4 堆栈溢出
		使用大的局部变量(因为局部变量都分配在栈上),这样容易造成堆栈溢出

2 tcpdump、vailgrind、gdb具体怎么用的?

总结一下tcpdump、vailgrind、gdb具体是怎么取查内存泄漏和崩溃的
tcpdump、vailgrind、gdb具体怎么用的
1、tcpdump:对网络上传输的数据包进行捕获的抓包工具;配合wireshark工具进行使用。

tcpdump  -i  bond0//监听指定网卡bond0的所有传输数据包

2、vailgrind

valgrind --tool=memcheck --log-file=log.txt --leak-check=yes  ./test

查看日志中的HEAP SUMMARY;堆栈摘要、小结;排查有没有内存申请后没有释放

3、gdb:
用gdb排查程序崩溃问题:

  • 方法1:运行程序,单步调试
    gdb 程序;b+行号设置断点;run 运行;n单步运行;bt查看堆栈信息;print查看某一变量的值
  • 方法2:调试core文件
ulimit -c unlimited //解开core文件大小限制
ulimit -d unlimited	//解开数据段长度限制
./gdb test core//用gdb调试test的core文件
bt//查看具体的出错位置,堆栈信息
  • 问题1:如何确认哪个程序产生的core
    file core可以输出是由哪个程序生成的core
  • 问题2:如何检车生成core文件的选项是否打开
    ulimit -a
  • 问题3:如何永久开启core文件生成
    /etc/profile 文件中设置ulimit
  • 问题4:修改core文件的文件名称以及加入pid号
    core_pattern和core_uses_pid
  • 问题5:程序产生core的原因
    1 内存访问越界
    2 多线程读写的数据未加锁保护。
    3 非法指针
    空指针、野指针、
    4 堆栈溢出
    使用大的局部变量(因为局部变量都分配在栈上),这样容易造成堆栈溢出

3 有用gdb去分析过coredump的文件嘛?

调试core文件
	ulimit -c unlimited //解开core文件大小限制
	ulimit -d unlimited	//解开数据段长度限制
	./gdb test core//用gdb调试test的core文件
	bt//查看具体的出错位置,堆栈信息
	问题1:如何确认哪个程序产生的core
		file core可以输出是由哪个程序生成的core
	问题2:如何检车生成core文件的选项是否打开
		ulimit -a
	问题3:如何永久开启core文件生成
		/etc/profile 文件中设置ulimit
	问题4:修改core文件的文件名称以及加入pid号
		core_pattern和core_uses_pid
	问题5:程序产生core的原因
		1 内存访问越界
		2 多线程读写的数据未加锁保护。
		3 非法指针
			空指针、野指针、
		4 堆栈溢出
			使用大的局部变量(因为局部变量都分配在栈上),这样容易造成堆栈溢出	

4 tcpdump是用来分析什么的?

网络抓包工具,HTTP的数据包,查看登录的用户名、密码、网址、正在浏览的网站内容,或任何其他信息

5 内存泄漏问题怎么排查?

用vailgrind,以及加打印排查代码逻辑

6 堆栈溢出问题怎么排查?

	也就是排查程序异常崩溃的问题;
	原因:空指针、野指针、内存拷贝访问越界、OOM

7 死锁问题怎么排查的?

	参考https://blog.51cto.com/xiaohaiwa/5681338
gdb -p PID;(或者进入gdb,然后attach PID)
info thread;//打印所有线程信息,从里面找到__lll_lock_wait ()的线程;假设是2和3
thread 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘凉~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值