Linux 应用层开发,面试一般会问哪些问题?

2018-09-15 15:10:10 +08:00
 lolcat

楼主前段时间报了培训班学了嵌入式开发.

我知道有很多人对培训班出来的有很大意见,比如伪造简历,吹得天花乱坠却连计算机基础知识都不知道,我在培训班里看到有些同学学的非常差和老师叫我们包装简历时也能感受到这种行为对这个行业的破坏.但我大学专业就是计算机科学与技术,虽然有些科目没怎么学,但自己感兴趣的科目还是学的非常好的,而且我工作后就一直从事 linux 方面的工作,c 基础也非常好.我写简历就是实话实说,有什么写什么.

linux 应用层开发的面试,面试官一般会问哪些具体的问题?会问我一些函数的各个参数吗?有些函数的参数我记不住了,但原理清楚,参数必须看手册和笔记我才能想起来.

我以前没什么开发的项目经验,不过 shell 脚本和 c 的小程序第一份工作时也经常写,我自己写了两个应用层的程序,一个用高级 io+多线程实现的数据处理程序,另外一个用了很多零零碎碎的知识做了一个和同学开玩笑的程序,不知道能不能写到简历上,两个程序的代码如下: https://github.com/owlli/epoll_pthread https://github.com/owlli/trick

4096 次点击
所在节点    程序员
29 条回复
lovefantasy
2018-09-15 15:27:36 +08:00
我觉得不行
AngelCriss
2018-09-15 15:29:54 +08:00
看了下你那个 server.c,既然用了事件循环,为啥还要为每一个连接新开一个线程?
inoki
2018-09-15 15:30:02 +08:00
算法+数据结构
AngelCriss
2018-09-15 15:31:07 +08:00
@lovefantasy 我也觉得不行。。
lolcat
2018-09-15 15:40:01 +08:00
@lovefantasy 能给出一点求职建议吗?谢谢.
lolcat
2018-09-15 15:45:45 +08:00
@AngelCriss 让新线程处理客户端发送过来的数据啊,我这里的处理方法只是把数据打印出来,如果其他处理方法,可能会处理很久,我不能让进程一直阻塞在那啊
AngelCriss
2018-09-15 16:04:57 +08:00
@lolcat
如果你的任务不是 CPU 密集的,比如死循环,就没有必要这么做。
你可以把这些连接设置成非阻塞的加到事件循环里面,每个链接绑定一个回调,如果只是 ping/pong 这种,每次可读或可写的时候就执行这个回调就行了,如果有上下文,还需要和这个连接绑定。
这是一个很基础很常见的模型。
lolcat
2018-09-15 17:58:36 +08:00
@AngelCriss 假如我需要把接受到的数据存到数据库,数据库非常慢,插入一次数据要 1 秒,如果不用多线程,我那 1 秒不就阻塞了吗?
xeaglex
2018-09-15 18:16:30 +08:00
楼主,他说的是非阻塞模型,实现原理上也是利用多线程,但效率比你的高。
lolcat
2018-09-15 18:30:00 +08:00
@xeaglex 还是不太理解
@AngelCriss 说的模式,我也是用的非阻塞模型啊,能详细介绍下吗?我的是一旦 bind 的 socket 可读,就取出连接队列里的 socket 并加入 epoll 监视队列,如果是新建的 socket 可读,就新建新线程从这个 socket 里读数据
qwertyssp
2018-09-15 18:40:36 +08:00
啥也不会问,就问以前做过什么
meik2333
2018-09-15 18:49:16 +08:00
读写的事件也可以扔 epoll 跑的,读写事件是交给内核处理的,这些时间程序是可以利用起来的。
AngelCriss
2018-09-15 18:59:14 +08:00
@lolcat 刚好之前有写过个,你可以看看
https://isliberty.me/tmp/tmp.txt
xvrzhao
2018-09-15 19:47:02 +08:00
@lolcat 可以参考一下 libuv 的设计,https://libuv.org
lolcat
2018-09-15 23:46:19 +08:00
@AngelCriss 非常感谢.但是我 c++语法不是太懂,不过还是把程序大致架构看懂了.你是将新建的 socket 放到线程里用 epoll 监控吗?我是把新建的 socket 添加到进程的 epoll 队列里监控,这应该是我俩程序最大的不同吧?
你的程序倒数 17 行,应该可以不用 for 循环吧?因为 epoll 默认工作在 lt 模式,在 lt 模式下,只要监控的文件描述符为可读,epoll_wait 就会一直触发.
lolcat
2018-09-15 23:47:50 +08:00
@meik2333 你说的是将 accept 后得到的 socket 放进程里用 epoll 监视吗?
AngelCriss
2018-09-16 00:01:41 +08:00
@lolcat 不好意思,你这 3 个问号的回答都是否定的。
回到正题,这个帖子的回答就是 3 楼说的。另外,楼主可能需要系统的学习下网络编程,而不是只知道系统调用怎么用就行。
lolcat
2018-09-16 00:11:51 +08:00
@AngelCriss 请问能简单介绍下你是如何监视 accept 后得到的套接字吗?我非常想把自己写的程序优化下,谢谢.
jedihy
2018-09-16 00:35:08 +08:00
@lolcat 可读就把这个 buffer 读了直到返回 ewouldblock,再加入 epoll
jedihy
2018-09-16 00:36:22 +08:00
@lolcat 回错楼了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/489618

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX