浙江大华嵌入式端经验分享(上)

发布时间:浏览:30

大家好,今天小编来为大家解答以下的问题,关于浙江大华嵌入式端经验分享(上),这个很多人还不知道,现在让我们一起来看看吧!

Non-static var: 1Non-static var: 1Non-static var: 1Static var: 1Static var: 2Static var: 3 分析:这个例子说明,每次调用nonStaticVarFunction函数时,没有用static修饰的局部变量var会被重新初始化为0,然后加1 并打印,因此输出始终为1。第一次调用staticVarFunction 函数时,静态修饰的局部变量staticVar 被初始化为0。后续每次调用该函数都会保留上次调用结束时的值并继续增加,因此输出不断增加。这说明了static` 修饰符对局部变量生命周期的影响,允许变量在函数调用之间维护状态。

2、select的作用是什么,它和epoll的区别?

选择功能原理:

1、文件描述符数量:单个进程监控的文件描述符数量有上限(通常由FD_SETSIZE宏定义,常为1024)。

2、处理机制及效率:Select采用轮询的方式扫描文件描述符。由于需要遍历所有文件描述符fd),文件描述符越多,效率越低。

4、触发方式:select的触发方式为水平触发。如果应用程序没有完成对一个就绪文件描述符的IO操作,那么后续每次调用select仍然会通知进程这些文件描述符。

优势:

1. Select 具有良好的可移植性,几乎所有系统都支持。

2. 可选择的监听时间超时具有更好的准确性,可以精确到微妙。

缺点:

1、监控的文件描述符数量上限为1024,不能根据用户需求更改。

3、当文件描述符数量较多时,轮询处理方式效率较低。

epoll的原理及优点:

1、处理效率更高:epoll可以调用epoll_wait不断轮询就绪链表。期间可能会出现多次睡眠和唤醒交替,但是当设备就绪时,会调用回调函数,将就绪的fd放入就绪链表中,并唤醒设备。休眠在epoll_wait中的进程。 select需要遍历整个fd集合,而epoll只需要判断就绪链表是否为空,节省了大量的CPU时间。这就是回调机制带来的性能提升。

2、节省成本:select每次调用需要将fd集合从用户态复制到内核态一次,并将current挂在设备等待队列中一次,而epoll只需要复制一次,将current挂在等待队列中。它只挂起一次(在epoll_wait开始时,注意这里的等待队列不是设备等待队列,而是epoll内部定义的等待队列),这样就节省了很多开销。

3、map与set了解么,有什么区别

map和set是C++标准库(STL)中两个重要的容器类型,它们的底层实现都是红黑树。

地图原理:

1.Map是一个存储键值对的关联容器,其中每个键都是唯一的,并且每个键都映射到一个值。映射允许根据键快速检索、删除或修改相应的值。

设置原则:

1. Set也是一个关联容器,但它只存储唯一的键(或元素)。不存在“价值”的概念,每个元素都是独一无二的。 Set主要用于快速检查集合中是否存在某个元素。

两者的区别:

1、存储内容:map存储键值对,每个键映射到一个具体的值,而set只存储值(或元素),不与任何值关联。

2、用途:map支持下标操作,但set不支持下标操作。如果需要建立一个元素到另一个元素的映射关系,应该使用map;如果只需要维护一个元素集合来快速检查某个元素是否存在,那么使用set比较合适

4、GDB调试的基本操作,以及如何去追踪变量、查看堆栈信息

编译程序以便于调试

gcc -g program.c -o 程序启动GDB

gdb程序GDB的基本操作

1.使用run运行程序

(gdb) run2,设置断点

(gdb) break main # 在main 函数开头设置断点(gdb) break file.c:10 # 在file.c 第10 行设置断点3. 继续执行(当程序停在断点处时,使用continue命令继续执行

(gdb) continue4、单步执行(使用step执行下一行代码)

(gdb)step5、检查变量值(使用print命令检查变量值)

(gdb) 打印变量名6,退出GDB

(gdb)退出7。设置条件断点(如果想在变量到达特定值时停止程序,可以设置条件断点)

(gdb)break file.c:20 ifvariableName==value8,跟踪变量、观察点(GDB的watch命令可以设置观察点,当变量值改变时程序会自动停止

(gdb) watchvariableName9、查看堆栈信息(backtrace命令查看当前调用堆栈)

(gdb) 回溯

(gdb) backtrace fullbacktrace full不仅显示函数调用顺序,还显示每个堆栈中局部变量和参数的值

(gdb)第2帧使用frame命令切换到特定的堆栈帧并查看该特定堆栈帧的上下文的变量值和状态。上述命令切换到堆栈帧2,并且可以在该堆栈帧的上下文中执行该命令。例如查看变量等。

例子:

#includevoid print_hello(int times) { for (int i=0; i times; i++) { printf('你好,世界!\n'); } }}void test() { char *ptr=NULL; *ptr=10; //故意造成段错误}int main() { print_hello(3);测试(); return 0;} 在这个程序中,测试函数会导致段错误。您可以编译该程序并使用GDB 对其进行调试。当你的程序崩溃时,你可以使用backtrace 命令来查看导致错误的函数调用顺序。

通过查看堆栈信息,可以更容易地找到程序出错的地方以及程序执行的路径。

常用的GDB调试命令

gcc -g test.c -o test #编译程序,方便调试gdb test #启动调试帮助#查看命令帮助,具体命令查询,在gdb中输入help+命令,简写hrun #重新开始运行文件,简写rstart #单步执行,运行程序,停在第一个执行语句list #查看原代码(list-n,查看从第n行开始的代码。1ist+函数名:查看具体函数),简写1set #Set变量的值next #单步调试((按进程处理,函数直接执行),缩写nstep #单步调试(一步步跳转到自定义函数内部执行),缩写sbacktrace #查看堆栈函数调用的框架和层次关系,简写btframe #切换函数的栈帧,简写finfo #查看函数内部局部变量的值,简写ifish #结束当前函数,返回函数调用点continue #继续运行,简写cprint #打印值和地址,简写pquit #退出gdb,简写qbreak+num #在第num 行设置断点,简写bininfo Breakpoints #查看当前设置的所有断点delete Breakpoints num #删除num 断点,简写为ddisplay #跟踪并查看具体变量值undisplay #取消对观察变量的跟踪watch #设置观察点的变量发生修改时,打印并显示i watch #显示观察点启用断点#启用断点禁用断点#禁用断点set fo11ow-fork-mode child #Makefile 项目管理: 选择跟踪父子进程(fork())

用户评论

别留遗憾

求分享下面试流程啊!听闻做嵌入式很看重实际操作能力,准备了几个项目想问问有没有什么需要特别注意的地方?

    有13位网友表示赞同!

秒淘你心窝

终于看到了大华的面试体验,之前一直听说他们对技术要求很高,看来是真不是传言。希望将来有机会去考察一下他们的公司文化!

    有19位网友表示赞同!

浮殇年华

嵌入式这块我也在准备,这段时间一直在刷算法,感觉还是太理论了点,实际操作能力确实需要加强。这个面经分享的几个重点很有帮助!

    有10位网友表示赞同!

凉城°

说真的,面试题难不难还看人吧,我觉得题目难度和我的理解水平有很大关系。如果对嵌入式系统框架理解深,应该能顺利答下来吧?

    有8位网友表示赞同!

余温散尽ぺ

做嵌入式确实需要基础很扎实,建议大家多关注一些开源项目和资料,积累一下实践经验!面试题的深度我也蛮感兴趣的,希望能再分享详细点!

    有14位网友表示赞同!

一生荒唐

看了眼面试环节,感觉偏重于实际应用场景,更重要的是如何运用所学知识解决问题。看来大华真的很重视工程经验吧!

    有9位网友表示赞同!

眉黛如画

这段时间在学习STM32啊,也想去嵌入式方向发展,感觉这个分享很有用,能给我一些参考,说不定等我有机会也去大华面试一下呢!

    有18位网友表示赞同!

青衫故人

嵌入式的岗位要求确实很高,很多公司都比较看重实际项目经验,我的实习项目还比较小,会不会不太合适?

    有12位网友表示赞同!

花菲

感觉面经描述的这几个技术点都很常见,对嵌入式领域来说基础程度应该不算高。大家平时练习的时候应该多关注一些实际应用的场景!

    有17位网友表示赞同!

軨倾词

"深入理解ARM指令集" 这块我有点懵,感觉需要好好学习一下啊,建议分享一下相关的资料和学习路径吧!

    有9位网友表示赞同!

泪湿青衫

看到这篇文章觉得大华这家公司很有文化!面试流程比较全面,也强调了团队合作精神,希望能有更多的招聘信息分享!

    有6位网友表示赞同!

我家的爱豆是怪比i

如果能了解一下他们公司的薪资福利待遇情况就好了!毕竟对于找工作来说薪资也是一个很重要的因素啊。希望以后有机会再看到关于大华的一些更详细的介绍!

    有11位网友表示赞同!

愁杀

说实话我觉得这篇文章里面是几个关键词就比较模糊,比如 "考察实战能力" 实际是什么样的场景?如果能提供更多具体细节或者案例,对我们理解要更有帮助!

    有14位网友表示赞同!

ˉ夨落旳尐孩。

嵌入式领域真的是高手云集啊!看到你们分享的面经体验,感觉自己离目标还差很多,一定要加油提升自己的技能水平才能应对这些高标准的招聘要求!

    有12位网友表示赞同!

放肆丶小侽人

"深入理解ARM指令集" 这点确实是考察重点啊!我之前也关注过这方面的内容,感觉理解的不够深刻。希望能够找一些更系统的资料来学习!

    有7位网友表示赞同!

晨与橙与城

这个面经分享真的很有参考价值,特别是对于像我一样正在备战嵌入式面试的同学来说,非常及时帮助我调整学习方向! 希望未来的内容可以分享更多关于大华公司的薪资待遇和发展空间吧!

    有17位网友表示赞同!

青山暮雪

感觉大华这家公司的技术选型比较前沿,在实际项目中可能会有更高挑战性。对追求技术提升的我来说,这无疑是一个很好的学习机会!

    有16位网友表示赞同!

你的眸中有星辰

希望这位博主可以分享更多关于大华公司的文化和氛围内容,比如工作节奏、团队合作方式等,这样能更全面地了解这家公司!

    有11位网友表示赞同!

热点资讯