大华(华飞智能)嵌入式软件工程师面经
1. 自我介绍
2. 你刚刚在自我介绍中提到你对于网络编程和环境编程比较了解,能说说你指的网络编程是什么吗?
回答:socket编程,自己也做过一些小实验,实现了B/S通信。
3. 具体讲一讲socket编程的步骤。
我是从客户端讲到服务端的,因为我面的是应用层,他对这个问得比较细。
4. 你刚刚讲的是一个客户端和一个服务端的连接,有考虑过多个客户端和一个服务端连接的情况吗?
我回答了多进程的实现方式,没有问select和epoll,但还是建议大家还是去看看epoll和select,因为我面的华飞智能,他们主要是多线程和多进程开发比较多。
5. 你有了解过多线程的开发吗?
我只是了解多线程的开发,但没有了解过怎么实现,但我认为,多线程和多进程的实现是类似的
6. 那你说说多线程的开发?
首先调用pthread_creat()的时候传入一个函数名,在线程成功创建之后会执行这个函数。可以在函数中实现我们想要并发执行的功能。
7. 在多进程和多线程编程中,一般用哪些方式来控制进程和线程对资源的访问。
一般常用互斥锁,自旋锁和信号量(其实还有条件变量等其他方式)
8. 你使用过什么方式呢?
我使用过信号量,信号量相当于一个计数器,有进程访问的时候计数器减一,当进程访问完毕之后计数器加一。
9. 在你使用多进程编程的时候,一般用什么方式创建进程呢?fork()还是vfork()?
这里我回答的fork()函数,vfork()没用过,不敢讲,然后问我fork()返回0的时候是哪个进程,这个肯定是子进程。
Fork()的返回值是返回子进程的进程号,因为子进程刚创建他没有孩子,所以返回0;
10. 你对C++有了解吗?
有了解过C++的智能指针和面向对象的一些特性,但没做过实际的项目,平时用C用得比较多。
11. 你有了解过内存分配吗?说一下堆和栈分别储存哪些数据。
讲真的,我见过问堆和栈的区别的,也见过问代码中的全局变量和局部变量以及静态变量存储区域的,第一次遇到这么问的。
我回答的是,栈主要可以存储局部变量,函数参数。堆应该是可以存储任何数据的,堆空间是程序员申请的,想往里面存储什么都可以,但是用完之后需要释放空间,当然C++智能指针不用释放,它会自动释放。
12.最后反问阶段
我就像往常一样,问面试官对新人的培养啥的,公司晋升制度之类的,说实话,我想不出来其他问题。
#浙江大华嵌入式面经##面经##浙江大华技术股份有限公司##校招##嵌入式工程师#