百度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. You (root) are not allowed to access to (crontab) because of pam configuration

    巡检发现一台Linux服务器上的作业没有如期发送邮件,登录服务器检查后发现作业并没有执行,于是检查一下crontab的设置.结果发现如下错误: [root@mylnx2 ~]# crontab -l ...

  2. MSSQL coalesce系统函数简介

    转自:http://www.maomao365.com/?p=4390 一.coalesce函数简介 coalesce 系统函数,比ISNULL更强大,更方便的系统函数,coalesce可以接收多个参 ...

  3. Java中 try--catch-- finally、throw、throws 的用法

    一.try {..} catch {..}finally {..}用法 try { 执行的代码,其中可能有异常.一旦发现异常,则立即跳到catch执行.否则不会执行catch里面的内容 } catch ...

  4. Android ConstraintLayout 布局警告

    使用 ConstraintLayout 布局出现警告: 此视图不受垂直约束.在运行时,除非添加垂直约束,否则它将跳转到左侧 解决办法: 从Android Studio v3及更高版本开始,从下拉列表中 ...

  5. Windows Server 2016-Wbadmin命令行备份域控制器

    在上一章我们讲到Windows Server 2016-图形化备份域控制器的方法,本章我们聊聊如何通过命令行Wbadmin对域控制器进行备份.在Windows Server Active Direct ...

  6. Jenkins2.32打包Unity项目的记录

    前言 使用jenkins来打包unity3d的工程. jenkins :2.50 /2.32.3(长期支持版 建议使用此版本) 操作系统:windows 7 x64 sp1 (打包安卓和win) ,m ...

  7. android调试工具adb命令大全

    转载: 一.adb介绍SDK的Tools文件夹下包含着Android模拟器操作的重要命令adb,adb的全称为(Android Debug Bridge就是调试桥的作用.通过adb我们可以在Eclip ...

  8. 4.11Python数据处理篇之Matplotlib系列(十一)---图例,网格,背景的设置

    目录 目录 前言 (一)图例legend 1.默认不带参数的图例 2.添加参数的图例 3.将图例移动到框外 (二)网格grid 1.说明 2.源代码: 3.输出效果 (三)背景axses 1.设置全局 ...

  9. June 1. 2018 Week 22nd Friday

    What makes life dreary is the want of motive. 没有了目的,生活便暗淡无光. We all have dreams about our future, we ...

  10. linux学习笔记整理(二)

    第三章 Linux基本命令操作本节所讲内容:3.1 Linux终端介绍 Shell提示符 Bash Shell基本语法3.2 基本命令的使用:ls.pwd.cd.history3.3 查看系统和BIO ...