哈, 贴个技术类的面试题

中山野鬼 发布于 2014/04/06 08:28
阅读 2K+
收藏 21

为了招人,先折腾点基础面试题,也就20题,其实非常简单,也很基础。给这里的小朋友看看,你们在学校学习,或许可以帮你们,带着问题去学习。有些问题和c语言有关,不过对其他语言没价值的很少。都是基本功。别说整天想学什么c#,java ,甚至hadoop。比如指令流水线的概念搞不清楚,为什么这样可以提高效率,你怎么可能搞清楚代码片之间的关联依赖,代码片搞不清楚之间的关联依赖关系,你去hadoop?如同拿着核弹当板砖使。c语言中,对结构化函数的基本概念,对程序的编译、运行机制的基本概念都不懂,你能真把java这个面向对象语言学好?两字,扯淡。

小朋友不要整天想着新鲜的名词,shit很新鲜的时候,闻起来一定比风干的更臭。新鲜的就一定好?基础不扎实,就算你哪天真称了程序员了,也是个天真的程序员,哈,最终也是没长进,无论你用什么语言。哈。

问:源代码、程序、执行进程的区别和联系?

问:指令流水线是指什么?为什么会出现?

问:编译、链接的区别和联系?

问:分页、分段的目的是什么?

问:操作系统最主要的作用是什么?或为什么会出现操作系统?

问:进程与线程的区别是什么?

问:一个应用存在两个进程,一个是服务进程,一个是客户请求进程,如果该应用不是网络应用系统,那么和网络应用系统最大的差异在哪?

问:网络应用系统为什么需要网络通讯协议?

问:异步和同步的区别是什么?堵塞这个概念和异步有关还是同步有关?

以下问题的背景为c语言设计。

问:是否可以对每个存储对象提取地址?一个存储对象中存放的是地址,我们称这个存储对象的空间类型为指针,指针有什么用(为什么需要指针)?

问:溢出是什么?产生溢出的直接原因是什么?

问:c语言的编译单位是什么?这样处理有什么优势?

问:为什么存在头文件,一个独立的头文件是否可以编译?

问:for语句中包含(a;b;c),三个部分。他们执行的顺序是什么?哪一个仅执行一次。

问:是否任意的for语句和until所描述的算法均可使用while实现,如果不行,请给出举例。

问:请用goto和if语句,模拟for,while,until三种语句,注意标号准确?

问:如果一个程序出现bug,在可获得到的最快的硬件设备上执行,需要经过10个小时后,才出现死机,请给出一个合理的debug方法。

问:如果一个程序未优化时(debug模式编译或o0编译)执行正常,优化后(release模式编译)执行错误,这个错误通常是算法逻辑错误,还是代码组织错误?如何对该错误进行查找定位。

问:版本控制器有什么作用?

问:假设c语言采用32位编译,整型最大有效存储单元为32位,请写出250位带符号整型的加法与乘法实现函数?要求所有低位在前,高位在后。


加载中
1
若水尘埃
若水尘埃

编译、链接的区别和联系?

虽然,我答得出来,但是谁面java问我这个,我打谁!

0
景愿
景愿

可以参考参考,下次招新人问问

0
把妹达人老张
把妹达人老张

搞java的我,大部分回答不上来。

0
_Color
_Color

操作系统基本没问题,c语言少部分……

0
Grrrr
Grrrr

堵塞这个概念和异步有关还是同步有关?

这个问题很阴险啊。不过出的很不错哦。

0
雨翔河
雨翔河

只能答上一半。

0
巴顿
巴顿

建议大家回复的时候,如果想回答哪一题就按如下格式:

1:题目

回答:


这样,可以让大家都学习下,多谢各位啦

0
修改登录密码
修改登录密码

这两个问题我比较赶兴趣 

问:如果一个程序出现bug,在可获得到的最快的硬件设备上执行,需要经过10个小时后,才出现死机,请给出一个合理的debug方法。

回答: 我没有什么特别系统的办法,一般是dump内核,找到出错的位置,回溯到可能的错误代码,至少也要找出出错的条件,下次可以尽快地创造条件快速重现错误。

不知道大家如何调试这类问题?

问:如果一个程序未优化时(debug模式编译或o0编译)执行正常,优化后(release模式编译)执行错误,这个错误通常是算法逻辑错误,还是代码组织错误?如何对该错误进行查找定位。

答: 不好太绝对的说是谁的问题。 有时候是优化中出现的问题,可能是代码本身有错误(比如忘记声明volitile),也可能是优化后特定的任务/线程推进顺序导致错误(这一般是软件结构设计的错误),也可能是编译器本身的bug。  如果找不出代码的问题,就只有反汇编了

修改登录密码
修改登录密码
其他题目对于科班毕业生来说都不是问题
0
修改登录密码
修改登录密码

这样的题目,适合考察从事底层工作的码农。对于做应用层(搞数据库  web  分布式)的,去折腾流水线 反汇编意义不大

0
中山野鬼
中山野鬼

引用来自“eel”的评论


这两个问题我比较赶兴趣 

问:如果一个程序出现bug,在可获得到的最快的硬件设备上执行,需要经过10个小时后,才出现死机,请给出一个合理的debug方法。

回答: 我没有什么特别系统的办法,一般是dump内核,找到出错的位置,回溯到可能的错误代码,至少也要找出出错的条件,下次可以尽快地创造条件快速重现错误。

不知道大家如何调试这类问题?

问:如果一个程序未优化时(debug模式编译或o0编译)执行正常,优化后(release模式编译)执行错误,这个错误通常是算法逻辑错误,还是代码组织错误?如何对该错误进行查找定位。

答: 不好太绝对的说是谁的问题。 有时候是优化中出现的问题,可能是代码本身有错误(比如忘记声明volitile),也可能是优化后特定的任务/线程推进顺序导致错误(这一般是软件结构设计的错误),也可能是编译器本身的bug。  如果找不出代码的问题,就只有反汇编了


哈,第一个问题,实实在在的遇到过,不过没10个小时那么多,半个小时,而且是arm板上,使用片内dsp时出现的。实际问题比我的提问更复杂些,如果采用最大优化,有问题,不采用最大优化,o2就没问题,不是编译器的错,不是逻辑的错,而是芯片本身主频上去后,部分指令之间的衔接跟不上,是芯片工艺的错,哈。本身该芯片也没量产在完善。这个问题主要难度在于代码片的定位。和dump内核差不多,主要是先通过函数输入输出接口把关键数据导出,然后做分析。分析无非是和正确无误的代码得到的数据输入与数据做分析。以确定错误代码片的位置。其实这个题目主要的意义在于,小朋友谁和我扯ide,请谁走人。。。

hawkyoung
hawkyoung
回复 @eel : 我觉得这两个问题有一定联系,例如以前遇见过那个程序跑了几个生产者消费者线程,跑几个小时没问题,一长时间压力测试就挂,打桩不打桩挂的时间也有区别(桩留着那是打补丁可不行啊,哈哈哈)。无奈水平有限看不出哪里线程同步上出了问题,后来把几个线程内部都很粗暴的加了大随机延时,一个小时就碰在一起了。也算个土办法。Debug行Release不行有时也是指针乱飘的问题,碰巧Debug可以而已。
ruki
ruki
或者用gcc clang 的AddressSanitizer 编译去检测下内存或者堆栈溢出 在开发的时候 debug模式下多做些assert 也能够提早发现一些bug 避免等上一天才重现 或者替换成带各种内存检测功能的 libc库 这是提早重现bug的一种办法 反正方法很多 针对具体问题 灵活应用 就行了
ruki
ruki
如果是崩溃了 能挂gdb当然是最省事了 如果不行尽可能去获取 core dump 然后用 addr2line 或者ida反下 去定大概的代码位置 如果运行异常 或者没法获取core dump 试着加些打印 来定位 但是这样有时反而会影响bug的重现 或者用gcc clang的
Brin想写程序
Brin想写程序
回复 @eel : 把桩留在里面,OK,问题解决~
云松
云松
回复 @eel : 这是薛定谔的 bug,bug处于有和没有的叠加状态 哈哈
下一页
返回顶部
顶部