美文网首页
2015-9-20 百度一面

2015-9-20 百度一面

作者: Alphy | 来源:发表于2015-09-23 11:01 被阅读230次

    百度一面(八十分钟)

    面软件研发工程师。

    自我介绍后,面试官开始问我项目。大概流程是:从项目到数据结构,到内存管理,再到提升程序效率的技术。期间穿插了很多知识点。数据结构相关:链表,红黑树,哈希表等。内存管理相关:STL allocator 模型,new 和 malloc 的区别,重载 operator new,placement new 等。提升效率相关:缓式评估和超急评估等。

    面试官问了自定义 lib 后名字冲突的问题。聊了一下名字空间和 extern C 关键字。

    面试官问了多线程访问文件的问题。我问他能不能理解成读者写者问题,他说所有线程对共享文件都是只读的。我说父子线程会共享文件描述符中的“文件当前的访问位置”,各个线程需要维护自己的文件标志。

    面试官问了一个大文件排序问题,我说是不是可以理解为海量数据的排序,他说可以。我就简单说了一下外排。

    个人感觉以上部分是答的比较好的。

    接下来,面试官问了 C 语言平台移植需要注意的细节,以及当程序出现“不确定性 bug”时应该如何处理。这两个问题答的不好。第一个问题没有回答出来,他提示了一下 32 位和 64 位机上,寻址空间不一样,我就顺着说指针长度不同会导致程序出问题。第二个问题,我说能不能输出程序日志,他说实际应用时中间变量可能难以输出且无法分析;我说能不能分模块调试,他说程序是串行的各个模块没法分开,而且可能存在多个模块都有 bug 的情况;我实在答不出来,他把问题换成了“你推断一下可能会出现什么问题”,我说 C 中容易出现指针访问越界及指针悬空的问题。

    接下来是写程序。先是一道拷贝字符串的问题:给定一个字符指针,返回一个拷贝过值的新指针。先和面试官聊思路,之后写代码。完后面试官看代码,指出了两个问题:第一,没有判断 malloc 函数十分执行成功;第二,对新申请到的地址没有做清零处理(比如,定义变量,最好写成 int a=0; 而不是 int a;)。当时面试时没什么感觉,事后回想起来确实不应该犯这种错误,心有点虚。事实上,这种问题很有可能是致命的,所以今后一定要谨慎再谨慎。

    第二题,是一道读写文件的题:给定一个值 N。从一个 M 行的文件(M 未知)中取出 M/N 行(只要求取出行的总数为 M/N 行即可),存入文件 test 中。将剩余行存入 train_1,train_2,...train_k 中,其中,第 train_i 个文件中的行数需为 (M/N )*i。刚看到题时有点懵,接着在纸上举了几个例子,研究了一下,弄明白了解决方案。把思路说了一下,开始写代码。期间也有遇到不少细节问题,基本上都是一边探讨一边写,花了不少时间。

    最后闲聊了一会儿,面试官问了我就业地点选择、职业规划以及岗位选择的问题。因为面试时间过长,所以省去了面试者提问这一环节。


    我的感受:

    1.可能是因为正好面试官也是做 C 的,所以他的大部分问题,我都能够说出来。师兄送过我一句话,“适合自己的才是最好的”,所有事情都一样。

    2.简历上写了“期望工作地点:北京”,面试官后来有和我聊这个话题。事实上,简历中的每一个词语都有可能成为面试官的发问点。

    3.这次面试时间确实太长了,但面试官还是很礼貌地陪我聊了很久。很谢谢他对我的尊重。其实目前我所遇到的每个面试官都挺客气的,只需放松心态即可。

    相关文章

      网友评论

          本文标题:2015-9-20 百度一面

          本文链接:https://www.haomeiwen.com/subject/ocvicttx.html