百度2017实习生软件开发(cpp方向)

首先说一下岗位。分为软件开发,开发测试,前端,机器学习数据挖掘,移动开发,据我观察,报的人数来看,软件开发最多,移动开发和开发测试较少。百度前台还准备了吃的喝的,真的是白吃白喝,但是哪里有心情,第一次还是有些紧张。面试地点应该是百度的一餐厅吧,进去后我就惊呆了,没见过大场面啊,人真多。里边全是一对一的,每个面试官都标配mac,真心羡慕。

上来先自我介绍,面试官大概先看了一眼简历,了解了我是非计算机专业的后就问我擅长哪个方面,然后就开干C++,很奇怪为甚么没问我STL的内容和数据库,之后C++完了就问了一些数据结构和算法的问题,问我了不了解操作系统,我就很实在的讲只了解一点点,然后就是计算机网络,再然后就是对linux C熟不熟悉,常用的一些命令。最后又看我简历,指出来简历的问题,真心挺好,问我写的那几个破比赛的情况,接着就完了。搞了一个多小时,问的我都懵逼了,可能面试官觉得我欠缺的知识挺多的吧,虽然让写的几个程序也绊绊磕磕的写出来了,也没有拿得出手的项目做支撑,所以直接就让我走了。

具体问题:

  1. 面向对象的几个特性?

封装、继承、多态

  1. 写一个继承的例子?

比如:类B继承类A,(我就简单写了写,还把继承的符号写错了,当时有点紧张)

  1. Public和private的区别以及派生类的访问权限问题
  2. 多态是怎么实现的?(我说通过虚函数)
  3. 接着在上边的例子里写一个虚函数
  4. 基类和派生类中的虚函数的重写(覆盖问题)
  5. 重载和重写的区别?
  6. 实现Swap(a,b)对不同类型数据都能处理的话,除了重载,还有哪种方式?(我说函数模板)
  7. 函数模板写出来实现一下上边的问题
  8. 实现Swap(a,b),如果不用第三个变量temp的话怎么实现?(记得看过,当时懵逼想不起来了,也没想着分析分析就说不会了,感觉不应该这样)
  9. 纯虚函数怎么定义的
  10. 包含纯虚函数的类是什么情况?(抽象类)
  11. 抽象类的用法
  12. 命名空间是怎么回事?有什么作用
  13. 函数指针和指针函数是什么?
  14. 指针常量和常量指针的区别(我当时弄混了,一时懵逼,面试官给我讲清楚了)
  15. 栈区和堆区的问题  以及内存泄漏问题
  16. 数组和链表的区别,访问和删除、插入的复杂度及为什么(这个我挺明白,但是没表述清楚,他又给我讲了一遍)
  17. 二叉树的几种遍历方式?
  18. 层序遍历是怎么实现的,是dfs还是bfs?
  19. 写一下二叉树中序遍历的代码,提示我说要自己定义节点(我问了可以写递归么,他说可以),问复杂度,我说不知道啊。
  20. 知道平衡二叉树吗,怎么定义的。
  21. 二分查找写代码(我当时忘了写查不到的情况,真尴尬)我写的版本有一个移位,然后他就问为啥移位(编程一定注意细节,说写的这编译肯定出问题啊)
  22. 了解哪些排序算法,写一个吧,我说几个,然后说能写冒泡么,后来他又想了想说就说思路吧,我就讲了冒泡的思路,又问复杂度是多少,怎么算的。
  23. 快排写代码,我说要写么?,然后他就说讲讲思路吧,我就大致讲了讲,问平均复杂度,最好的复杂度,最坏的复杂度
  24. 插入排序的思路
  25. 问我这些基本的算法自己有没有实现过
  26. 聊简历上写的本科时的项目和比赛,怎么实现的,技术难点,什么平台,数学建模里边主要负责啥(这些都和软件开发没啥关系)
  27. 说奖学金挺多,看来学习一定很好(我说很渣)
  28. 看我研究生课程有数据挖掘和神经网络,问我为啥没去报机器学习岗
  29. 问我的优势是啥,对于软件研发这个岗位来说,我说就C++吧,他说这掌握的还不够呐。
  30. 自学能力怎么样?数学怎么样?
  31. 问我了解操作系统么,我说就一点点。问并发和并行是啥?(我直接按自己理解说了其实不懂,然后他就跟我讲了一通)
  32. 进程和线程的区别
  33. 进程间通信的几种方式?(我没答全),然后问我管道是全双工的么?,线程间内存是共享的吗?再问其他的了,我就直接表示不会了。(操作系统确实是软肋)
  34. Osi七层模型(差一个忘了),然后五层的那个。
  35. 应用层的有哪些协议:我说http,ftp,telnet,smtp(没说DNS)
  36. 然后问我DNS是啥(现在想想都是套路啊,当时没反应过来)
  37. http和https的区别,ssl底层实现了解么,加密算法了解么
  38. TCP协议和UDP协议
  39. 画出tcp/ip建立连接和断开连接的示意图,(我就画了个建立连接的,四次挥手忘了),还问我服务器端最开始要怎么做?(好像是保持监听转态)
  40. IP地址中子网掩码的作用,IP地址分为哪几部分
  41. IP地址分为几类
  42. 熟悉linux C么,(不熟悉)
  43. 熟悉的Linux 命令,mkdir, ls, rm, chomd,是啥意思,awk, grep(刚看了就忘了)
  44. 宿主目录(直接懵逼),根目录下,怎么查找一个文件
  45. 了解设计模式么,我说就知道一个模式(观察者模式),没敢说单例模式,怕他让写单例模式的代码,这个单例模式还不是很熟悉。让我画出观察者模式的示意图,我说了个依赖关系,其实也是自己没理解到位,他就揪着 依赖 不放了,跟我使劲讲清楚了,还画图,我只能连连点头。
  46. 应该还有没想起来的。待更新、、、、
  47. 补充几个常考的算法题(写代码):二分查找及其变种,循环数组查找、快排变种、归并排序、后缀表达式、hashmap、LRU

教训总结:

  1. 基础知识掌握的不够细致,关键细节搞不清楚。
  2. 操作系统和linux,设计模式不会是硬伤
  3. 简历写的有问题
  4. 没有说服力的项目支撑
  5. 编程细节问题。
  6. 面试太套路,多总结,面经很有用,问的知识都是很基础的。
  7. 期间有时候太着急完成回答,没有认真想清楚,一定想清楚再回答。

百度软件开发实习生c++方向面经(一面)的更多相关文章

  1. 2017年末大总结(by一个软件开发实习生)

    时间本是一条连续不断的河流,我们却生造出了一些有头有尾的节点,不知道是不是为了增加一点仪式感呢. 今年最大的变化就是学会了java并找到一份了实习,很幸运能进入这个行业,做一份热爱的工作.从开始自学编 ...

  2. R型思维模式对软件开发的影响(草稿)

    The pragmatic programmers 一直在工作之余读些书,之前主要是纯英文版的计算机相关的算法,编译器,数学等,想通过读这些书来提高自己每日工作效能,结果收效甚微.一是,因为纯英文的书 ...

  3. atitit.提升软件开发效率大的总结O5

    atitit.提升软件开发效率大的总结O5 #---平台化.组件化 1 #--cbb公用模块的建设 1 #---内部最佳流程方法跟实践的总结 2 #---内部知识体系的建设 2 #---问题Qa库的建 ...

  4. 精《记叙“tom”4年的软件开发之旅》

    1.引言 本篇文章是记叙tom四年的软件开发从业经历,虽然他资历不长,况且本身也是个菜鸟,但他也曾有过荣誉.迷茫.困惑与选择,在这里他希望通过自己所经历过的事情分享给大家,给那些真正热爱软件开发的同学 ...

  5. AI如何驱动软件开发?华为云DevCloud 权威专家邀你探讨

    近期,国际著名咨询公司Gartner 在一份研究报告中将 "AI-Driven Development" 列为 2019 年的 Top 10 Strategic Technolog ...

  6. nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞

    第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...

  7. Atitit.软件开发的三层结构isv金字塔模型

    Atitit.软件开发的三层结构isv金字塔模型 第一层,Implements 层,着重与功能的实现.. 第二次,spec层,理论层,设计规范,接口,等.流程.方法论 顶层,val层,价值观层,原则, ...

  8. 软件开发学习笔记 <一> UML

    UML http://www.uml-diagrams.org http://www.umlchina.com/index.htm 统一建模语言(UML)始于1997年的一个OMG(对象管理组织)标准 ...

  9. 敏捷软件开发vs传统软件开发

    摘要 本文介绍了传统软件开发(着重介绍了传统软件开发中常用的瀑布模型)和敏捷软件开发,以及敏捷开发和传统开发的对比. 一.传统软件开发 比较常用的几种传统软件开发方法:瀑布式开发.迭代式开发.螺旋开发 ...

随机推荐

  1. [20190401]关于semtimedop函数调用.txt

    [20190401]关于semtimedop函数调用.txt --//上个星期测试,链接http://blog.itpub.net/267265/viewspace-2639675/--//关于sql ...

  2. [20190213]学习bbed-恢复删除的数据.txt

    [20190213]学习bbed-恢复删除的数据.txt --//以前也做过类似测试,当时在用bbed做verify时错误都不处理,当时的想法就是能读出就ok了.--//而且当时也做成功,纯粹是依葫芦 ...

  3. postgresql自定义类型并返回数组

    转自 https://blog.csdn.net/victor_ww/article/details/44415895 create type custom_data_type as ( id int ...

  4. python爬虫工程师各个阶段需要掌握的技能和知识介绍

    本文主要介绍,想做一个python爬虫工程师,或者也可以说是,如何从零开始,从初级到高级,一步一步,需要掌握哪些知识和技能. 初级爬虫工程师: Web前端的知识:HTML, CSS, JavaScri ...

  5. java 一个实例

     this 代替

  6. 将web项目部署到阿里云服务器上

    一.用eclipse将写好的项目打成war包 1.右键点击项目,选择Export 选择打包之后的路径,点击Finsh. 2.购买阿里云服务器 按下图选择 3.设置云服务器防火墙 4.远程连接云服务器 ...

  7. VueJs入门(一)

    VueJs学习笔记:基本概念及简单demo Vue官方介绍:简单小巧的核心,渐进式技术栈,足以应付任何规模的应用. 简单小巧指的是vue.js压缩后仅有17KB,量轻.渐进式指的是我们学习和使用vue ...

  8. Eclipse修改Maven仓库配置

    修改Apache-Maven\conf下的settings.xml文件 <?xml version="1.0" encoding="UTF-8"?> ...

  9. Spring的AOP基于AspectJ的注解方式开发3

    上上偏博客介绍了@Aspect,@Before 上篇博客介绍了spring的AOP开发的注解通知类型:@Before,@AfterThrowing,@After,@AfterReturning,@Ar ...

  10. 忽略Git钩子

    https://blog.csdn.net/alps1992/article/details/80464700 pre-commit GIT_DIR/hooks/pre-commit 这个钩子被 gi ...