免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2263 | 回复: 1
打印 上一主题 下一主题

[C] 笔试题,请大牛指点~ [复制链接]

招聘 : 前端开发
论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-08-08 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-26 13:24 |只看该作者 |倒序浏览
系统编程部分:
第一题

程序的启动和运行过程依赖一些配置,比如对于一个web服务端程序,程序启动的时候需要知道它listen哪些端口,客户connect过来的时候是否针对特定的User-agent做相应操作。配置项以name = value的形式定义,自定义值由配置文件提供,程序启动时从中读取文件内容并保存在一定的数据结构中。假设配置项有bool、string和int三种类型。

示例配置文件内容如下:
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5

1)请编写一个标准正式(不能包含伪C代码)的配置项模块的头文件,至少涵盖初始化、读取写入和销毁函数的声明(考察API的设计)。
2)你打算用何种数据结构保存所有配置项并提供查询和修改操作,为什么?
3)假设struct config_item结构体定义了一个配置项(上文所述的三种类型),请给出你的结构体定义(考察C语言的掌握程度)。
4)如果配置项模块的读取、写入函数需要做到线程安全,请简述你的做法。
5)假设配置项的读取频度要远远大于写入,你打算如何优化多线程下的该模块性能?

第二题

程序的运行离不开日志(这里指用于排查程序Bug或记录流程的日志,非数据库或文件系统的日志)。假设你已经知道文件IO可能会阻塞,如fsync/fdatasync函数。请问:
1)对于单线程程序(程序本身不能包括背景线程,即父进程fork生成当前程序后再无clone系统调用发生),你打算如何优化日志模块的性能,以减少甚至消除刷新日志到硬盘时阻塞带来的副作用?
2)你怎么看待LInux上的异步IO(AIO)?
3)如果缓冲区内的日志内容不及时刷新(fsync)到硬盘,程序coredump时可能会丢失最近的日志。你怎么看待和处理这个问题?
4)每条日志消息都会带有级别,比如Error/Warning等。如果让你设计,你打算设计哪几个日志级别,每个日志级别记录何种消息?请给出思考过程。
5)现需要设计并实现多线程程序下的日志模块,请给出你的实现思路(可画图)。尽量利用多线程的优势。【加分选答】如何做到正确启动(初始化函数正确返回)和退出(日志模块初始化时申请的资源全部释放)?提示:资源不仅仅有内存。
6)假定程序调用exit函数后希望日志模块能正常退出(或者说日志模块结束),你打算如何实现?【加分选答】如何是的C++ RAII实现,调用exit函数有哪些需要额外注意的问题?

网络编程部分

1)TCP服务端支持的最大并发数实际和理论上分别为多少?
2)相比accept,为什么Linux要提供accept4?基于同样的原因,Linux上有哪些相似的系统调用或Glibc封装。
3)不处理accept的EMFILE错误可能会导致什么问题?你打算如何处理该错误?
4)谈谈你在TCP分包方面的经验或想法。
5)在内核中TCP有心跳相关的配置和功能,这对应用层而言是透明的。那么应用层的心跳还有必要吗,为什么?

编程题(二选一)

1)使用Pthread实现一个模拟生产者消费问题的程序。要求代码可编译执行。实现语言C、C++(涵盖C++14)任选。
2)如有其它更能代表水平的Linux C或Linux C++代码,可不用编写上题,给出代码即可。

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
2 [报告]
发表于 2015-05-26 13:30 |只看该作者
4)如果配置项模块的读取、写入函数需要做到线程安全,请简述你的做法。
5)假设配置项的读取频度要远远大于写入,你打算如何优化多线程下的该模块性能?


4:枷锁
5:读写锁
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP