面试,是以聊天的方式,聊的技术:
他问起了cpu是如何限制资源的的?
我说:是用了cgroup
他又问:cgroup是如何限制的?
我说:这个,我真不清楚了。
他又问:如果是一个进程,你又如何进行限制?
我说:那我不清楚,我只是用在虚拟化上。
他说:哦,问完了系统,那我再问问语言吧?
他说:c语言当中static,都是怎么用的?
我说了其基本的用法,他又说函数那一个,在用的时候,用什么注意.
我想了想说:函数那一个,就是函数只能限定在当前文件中可用。
他问:局部变量不会释放,局部变量,是怎么回收的?
我说:这个,我没想过
他说:因为局部变量存在栈里,栈指针变化了,其空间就被其它指针使用了。
我说:哦
这些题目,平常光是使用的话,很难答得那么深入:
1、关于进程还有cgroup是如何限制的?
cgroup是如何限制的,其实就是在申请资源时,通过回调函数进行了资源限制,超过了限制就直接报错,进程也是这个道理实现的。
2、关于c语言的局部变量的回收
这个问题问得有些奇怪,有些人让蒙的感觉,栈空间,其实非常简单,怎么回收的,其实,就是说明栈空间是怎么放入的,怎么弹出的:
这个图说得非常明白,栈顶指针变化了,其空间就被其它栈指针用了,或者又被这个栈指针分配了新的数据,说明这个栈的运行过程,其实就可以了。
再扩充一下栈的一些知识
对每个程序来说,栈能使用的内存是有限的,一般是 1M~8M,这在编译时就已经决定了,程序运行期间不能再改变。如果程序使用的栈内存超出最大值,就会发生栈溢出(Stack Overflow)错误。
一个程序可以包含多个线程,每个线程都有自己的栈,严格来说,栈的最大值是针对线程来说的,而不是针对程序。
其实这点很有意思,也很关键,这意味着多线程的程序的局部变量都有独立的栈空间,你不用担心,多线程中的局部变量冲突的问题,它们都是线程安全的。
栈内存的大小和编译器有关,编译器会为栈内存指定一个最大值,在 VC/VS 下,默认是 1M,在 C-Free 下,默认是 2M,在 Linux GCC 下,默认是 8M。
基础架构-高级C语言开发工程师 25-35K·15薪
项目介绍
负责公司基础架构底层开发,包括但不限于:1、提升服务器转发性能和链接数的DPDK开发;2、虚拟化平台网卡优化;3、虚拟化云盘开发;4、nginx module开发;5、DNS开发等
岗位职责
1、负责公司基础架构关键系统的设计和开发(网络平台,云平台)
2、设计并开发相关的网络组件,协同网络、运维等部门提升公司网络基础架构的性能
3、跟踪项目开发进度,协调相关同事保证项目进度,并对出现的问题进行攻关解决
任职资格
1、统招本科及以上学历,计算机相关专业,4年以上经验
2、擅长C/C++至少一门语言开发与调试,有过较大规模的项目经验
3、基础知识扎实,对常用数据结构、操作系统原理、TCP/IP协议栈有较深入的理解
4、熟悉linux开发环境,能够使用Linux系统工具完成日常工作
5、有很强的分析问题和解决问题的能力,有强烈的责任心
6、有网络、存储、DPDK、虚拟化、内核等相关经验优先,参与过开源项目或编程竞赛优先、熟悉多个技术领域优先
公司介绍
搜狗是中国互联网领先的搜索、输入法、浏览器和其它互联网产品及服务提供商。从2004年8月搜狐公司推出全球首个第三代互动式中文搜索引擎——搜狗搜索以来,历经十载,搜狗搜索已发展成为PC端搜索三强之一,移动搜索排名第二。根据艾瑞咨询2015年8月数据,搜狗PC用户规模达5.21亿
评论留言