百度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. Java笔记----字节流与字符的常见类型

    字节流: InputStream   |-- FileInputStream (基本文件流)   |-- BufferedInputStream   |-- DataInputStream |-- O ...

  2. Vue2 学习笔记3

    文中例子代码请参考github 定义Vue组件 什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组 ...

  3. visual studio 启动无法打开IIS express

    删除 解决方案下的vs文件夹之后重新生成

  4. python3使用selenium + Chrome基础操作代码

    selenium是Python的第三方库,使用前需要安装.但是如果你使用的是anaconda,就可以省略这个步骤,为啥?自带,任性. 安装命令: pip install selenium (一)使用s ...

  5. array_walk函数与call_user_func_array函数

    一, php手册的解释: call_user_func_array - 调用回调函数,并把一个数组参数作为回调函数的参数  说明: mixed  call_user_func_array  ( cal ...

  6. Vue学习之路6-条件渲染

    条件指令 所谓条件指令是指满足某个条件时执行哪部分代码,不满足条件时执行哪部分条件代码.vue条件指令有v-if,v-else-if,v-else三个,v-if条件渲染用来指示元素是否移除或者插入,根 ...

  7. [福大软工] Z班 团队作业——随堂小测(同学录) 作业成绩

    团队作业--随堂小测(同学录) 作业链接 http://www.cnblogs.com/easteast/p/7763645.html 作业情况 本次作业从原先预计的3小时,有些组打了鸡血连续肝了4. ...

  8. TCP Health Checks

    This chapter describes how to configure health checks for TCP. Introduction NGINX and NGINX Plus can ...

  9. JavaScript getFullYear() 方法

    JavaScript Date 对象 定义和用法 getFullYear() 方法可返回一个表示年份的 4 位数字. 语法 dateObject.getFullYear() 返回值 当 dateObj ...

  10. 如何在tomcat前部署一个nginx

    在tomcat应用已经发布后,如何在tomcat前部署一个nginx,可以正常访问jsp,静态资源(html,css,js) 这里tomcat的端口号是8888 upstream morris { s ...