LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 13463|回复: 43

最近出的两道嵌入式软件工程师面试题,答对者甚少啊!

[复制链接]
发表于 2008-9-29 16:14:42 | 显示全部楼层 |阅读模式
最近刚刚升任嵌入式软件研发主管,急需招兵买马。
自己出了下面两道面试题,17个应聘者中,有5个是做Windows软件出身的,4个做嵌入式软件出身,3个应届大学本科毕业生,余下的是应届硕士毕业生竟无一人完全答对:

1、LINUX下的Socket套接字和Windows下的WinSock有什么共同点?请从C/C++语言开发的角度描述,至少说出两点共同点。(10分,说得好的每点加5分,没有上限。精通SOCK编程者破格录用。)

本题的目的就是考考应试者的SOCK功底,以及应用能力。答案可谓是五花八门,但是答对的少得可怜。其实答案很多,也很好回答。可见面试者功底确实一般,对SOCK编程只是一知半解。更有甚者,把TCP/IP的原理搬出来讲了一大堆,却无一条符合要求。

参考答案:
第1题,答中一个得5分,答出其它正确答案的,也得5分。
a)都基于TCP/IP协议,都提供了面向连接的TCP SOCK和无连接的UDP SOCK。
b)都是一个sock结构体。
c)都是使用sock文件句柄进行访问。
d)都具有缓冲机制。

2、请编写一个标准Shell脚本testd,实现如下功能:
A、在Linux操作系统启动的时候,自动加载/mnt/test/test程序。
B、当test异常退出之后,自动重新启动。
C、当test程序重启次数超过100次,自动复位操作系统。
假设你所拥有的资源:
A、目标机器是一台具有标准shell的嵌入式计算机,CPU为ARM7 56MB,内存16MB,软件环境基于Linux2.6.11和BusyBox1.2构建。
B、当前已有11个用户进程在运行,占用了大部分的CPU时间和内存,你可使用的内存只有2MB左右,CPU时间由系统分派。
(本题满分20分,程序15分,注释5分。程序不能运行的0分,能够运行但有BUG的10分,能够正确无误的运行的15分。清楚编写注释的5分。)

本题是考查LINUX和嵌入式编程功底的,写出程序来的不少,但是95%以上的人竟无视我假设的资源,不知道在重启test程序的时候需要加上一个适当的掩饰时间,以便资源紧张的操作系统有时间回收资源。85%的人不知道写完testd之后,要在init里边加载这个脚本,才能实现启动时自动加载的功能。有人甚至在脚本开头使用bash作为脚本解析器,我已经清清楚楚说明了用“标准shell”!用sh不就完了吗?是习惯作祟吗?

参考答案:
########################################
#testd is a daemon script to start an watch the program test
########################################
#!/bin/sh

#load *.so that may need
if [ -r /sbin/ldconfig ]; then
    ldconfig
fi

#add the libs PATH that may need
export LD_LIBRARY_PATH="/lib"

#count is the counter of test started times
count=0

#main loop
while [ 1 ] ;do
        #add execute property for /mnt/test/test
        chmod +x /mnt/test/test
        #start test
        /mnt/test/test
        #the running times counter
        let count=count+1
        echo "test running times is $count"
        #Is test running too many times?
        if [ "$count" -gt 100 ]; then
                echo "Will reboot because of test running too many times"
                reboot
        fi
        #wait for test stoping...
        sleep 3
done
#########################################


面试来面试去,一个个吹水的挺强,但是面对苛刻资源条件编程的能力极其有限。幸好这两道题的分值不是很高,要不然大多数人恐怕要拿及格都难啊!

跟经理商量了很久,挑来挑去挑了两个沟通能力比较强,各方面也比较均衡的留用,一个是本科应届毕业生,一个嵌软出身的。

接下来的一年,我还是乖乖自己培养一两个自己想用的人吧!
发表于 2008-9-30 20:17:32 | 显示全部楼层
寒一个!
我的专业也是嵌入式软件,对楼主的问题也是一知半解。还得努力阿!
回复 支持 反对

使用道具 举报

发表于 2008-10-1 22:07:48 | 显示全部楼层
第二题:
LZ用的全是root用户吗?
非root能用吗?
回复 支持 反对

使用道具 举报

发表于 2008-10-1 22:08:50 | 显示全部楼层
第一题,我认为第一点和四点很重要.
回复 支持 反对

使用道具 举报

发表于 2008-10-2 07:49:51 | 显示全部楼层
"当test异常退出之后,自动重新启动"

楼主的答案好像并没有对是否异常退出作出判断哦, 如果test是正常退出上面的程序也会累计和重启哦。使用 $?在作/mnt/test/test的退出状态判断?

本人能力有限,有错请指正.
回复 支持 反对

使用道具 举报

发表于 2008-10-18 20:04:17 | 显示全部楼层
可能是吹水的,也有可能只是大家的工作经历不一样,有些答案需要有相关经验才能答的出来的。
回复 支持 反对

使用道具 举报

发表于 2008-10-19 10:34:19 | 显示全部楼层
SOCKET的答案,全都不是答案,阿门~~~

讲出这些123和编程没有什么关系。和编程有关系的是
Windows下的SOCKET TMD就是个OVERLAP模型,同步模型JB难用。用起来很不爽,完毕
回复 支持 反对

使用道具 举报

发表于 2008-10-30 20:19:51 | 显示全部楼层
嵌入式完全不懂。。。
socket完全不懂。。。
不过,如何判断一个程序(/mnt/test/test)是正常退出还是异常退出?
估计若是在嵌入式环境下,一个程序的退出/终止都应当被认为是异常的。。。
回复 支持 反对

使用道具 举报

发表于 2008-11-1 03:50:28 | 显示全部楼层
嵌入式系统并不代表只有一个程序或一个功能在运行。
择录自wikipedia.org
"An embedded system is a special-purpose computer system designed to perform one or a few dedicated functions"


例如你的路由器应该也算是有一个嵌入式系统的. 假设你的路由有内置FTP服务器,而你想关闭这个功能,那这个FTP的脚本就需要正常退出,而不能算错误退出,否则系统会自动重启ftp服务,那你的结果就是你关闭不了ftp功能。

一个好的程序员在编程时都应该遵守一些良好的编程习惯,一般情况下程序正常退出,它的退出状态应该是‘0’, 而当数字大于0通常是错误代码,代表程序出错了。
当然不遵守这些习惯的人也大有人在.

这只是一个例子。
回复 支持 反对

使用道具 举报

发表于 2008-11-2 07:39:38 | 显示全部楼层
面试的成功:
平时项目经验的积累+类似应试教育的集中密集型考试培训
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表