百度软件开发实习生c++方向面经(一面)
百度2017实习生软件开发(cpp方向)
首先说一下岗位。分为软件开发,开发测试,前端,机器学习数据挖掘,移动开发,据我观察,报的人数来看,软件开发最多,移动开发和开发测试较少。百度前台还准备了吃的喝的,真的是白吃白喝,但是哪里有心情,第一次还是有些紧张。面试地点应该是百度的一餐厅吧,进去后我就惊呆了,没见过大场面啊,人真多。里边全是一对一的,每个面试官都标配mac,真心羡慕。
上来先自我介绍,面试官大概先看了一眼简历,了解了我是非计算机专业的后就问我擅长哪个方面,然后就开干C++,很奇怪为甚么没问我STL的内容和数据库,之后C++完了就问了一些数据结构和算法的问题,问我了不了解操作系统,我就很实在的讲只了解一点点,然后就是计算机网络,再然后就是对linux C熟不熟悉,常用的一些命令。最后又看我简历,指出来简历的问题,真心挺好,问我写的那几个破比赛的情况,接着就完了。搞了一个多小时,问的我都懵逼了,可能面试官觉得我欠缺的知识挺多的吧,虽然让写的几个程序也绊绊磕磕的写出来了,也没有拿得出手的项目做支撑,所以直接就让我走了。
具体问题:
- 面向对象的几个特性?
封装、继承、多态
- 写一个继承的例子?
比如:类B继承类A,(我就简单写了写,还把继承的符号写错了,当时有点紧张)
- Public和private的区别以及派生类的访问权限问题
- 多态是怎么实现的?(我说通过虚函数)
- 接着在上边的例子里写一个虚函数
- 基类和派生类中的虚函数的重写(覆盖问题)
- 重载和重写的区别?
- 实现Swap(a,b)对不同类型数据都能处理的话,除了重载,还有哪种方式?(我说函数模板)
- 函数模板写出来实现一下上边的问题
- 实现Swap(a,b),如果不用第三个变量temp的话怎么实现?(记得看过,当时懵逼想不起来了,也没想着分析分析就说不会了,感觉不应该这样)
- 纯虚函数怎么定义的
- 包含纯虚函数的类是什么情况?(抽象类)
- 抽象类的用法
- 命名空间是怎么回事?有什么作用
- 函数指针和指针函数是什么?
- 指针常量和常量指针的区别(我当时弄混了,一时懵逼,面试官给我讲清楚了)
- 栈区和堆区的问题 以及内存泄漏问题
- 数组和链表的区别,访问和删除、插入的复杂度及为什么(这个我挺明白,但是没表述清楚,他又给我讲了一遍)
- 二叉树的几种遍历方式?
- 层序遍历是怎么实现的,是dfs还是bfs?
- 写一下二叉树中序遍历的代码,提示我说要自己定义节点(我问了可以写递归么,他说可以),问复杂度,我说不知道啊。
- 知道平衡二叉树吗,怎么定义的。
- 二分查找写代码(我当时忘了写查不到的情况,真尴尬)我写的版本有一个移位,然后他就问为啥移位(编程一定注意细节,说写的这编译肯定出问题啊)
- 了解哪些排序算法,写一个吧,我说几个,然后说能写冒泡么,后来他又想了想说就说思路吧,我就讲了冒泡的思路,又问复杂度是多少,怎么算的。
- 快排写代码,我说要写么?,然后他就说讲讲思路吧,我就大致讲了讲,问平均复杂度,最好的复杂度,最坏的复杂度
- 插入排序的思路
- 问我这些基本的算法自己有没有实现过
- 聊简历上写的本科时的项目和比赛,怎么实现的,技术难点,什么平台,数学建模里边主要负责啥(这些都和软件开发没啥关系)
- 说奖学金挺多,看来学习一定很好(我说很渣)
- 看我研究生课程有数据挖掘和神经网络,问我为啥没去报机器学习岗
- 问我的优势是啥,对于软件研发这个岗位来说,我说就C++吧,他说这掌握的还不够呐。
- 自学能力怎么样?数学怎么样?
- 问我了解操作系统么,我说就一点点。问并发和并行是啥?(我直接按自己理解说了其实不懂,然后他就跟我讲了一通)
- 进程和线程的区别
- 进程间通信的几种方式?(我没答全),然后问我管道是全双工的么?,线程间内存是共享的吗?再问其他的了,我就直接表示不会了。(操作系统确实是软肋)
- Osi七层模型(差一个忘了),然后五层的那个。
- 应用层的有哪些协议:我说http,ftp,telnet,smtp(没说DNS)
- 然后问我DNS是啥(现在想想都是套路啊,当时没反应过来)
- http和https的区别,ssl底层实现了解么,加密算法了解么
- TCP协议和UDP协议
- 画出tcp/ip建立连接和断开连接的示意图,(我就画了个建立连接的,四次挥手忘了),还问我服务器端最开始要怎么做?(好像是保持监听转态)
- IP地址中子网掩码的作用,IP地址分为哪几部分
- IP地址分为几类
- 熟悉linux C么,(不熟悉)
- 熟悉的Linux 命令,mkdir, ls, rm, chomd,是啥意思,awk, grep(刚看了就忘了)
- 宿主目录(直接懵逼),根目录下,怎么查找一个文件
- 了解设计模式么,我说就知道一个模式(观察者模式),没敢说单例模式,怕他让写单例模式的代码,这个单例模式还不是很熟悉。让我画出观察者模式的示意图,我说了个依赖关系,其实也是自己没理解到位,他就揪着 依赖 不放了,跟我使劲讲清楚了,还画图,我只能连连点头。
- 应该还有没想起来的。待更新、、、、
- 补充几个常考的算法题(写代码):二分查找及其变种,循环数组查找、快排变种、归并排序、后缀表达式、hashmap、LRU
教训总结:
- 基础知识掌握的不够细致,关键细节搞不清楚。
- 操作系统和linux,设计模式不会是硬伤
- 简历写的有问题
- 没有说服力的项目支撑
- 编程细节问题。
- 面试太套路,多总结,面经很有用,问的知识都是很基础的。
- 期间有时候太着急完成回答,没有认真想清楚,一定想清楚再回答。
百度软件开发实习生c++方向面经(一面)的更多相关文章
- 2017年末大总结(by一个软件开发实习生)
时间本是一条连续不断的河流,我们却生造出了一些有头有尾的节点,不知道是不是为了增加一点仪式感呢. 今年最大的变化就是学会了java并找到一份了实习,很幸运能进入这个行业,做一份热爱的工作.从开始自学编 ...
- R型思维模式对软件开发的影响(草稿)
The pragmatic programmers 一直在工作之余读些书,之前主要是纯英文版的计算机相关的算法,编译器,数学等,想通过读这些书来提高自己每日工作效能,结果收效甚微.一是,因为纯英文的书 ...
- atitit.提升软件开发效率大的总结O5
atitit.提升软件开发效率大的总结O5 #---平台化.组件化 1 #--cbb公用模块的建设 1 #---内部最佳流程方法跟实践的总结 2 #---内部知识体系的建设 2 #---问题Qa库的建 ...
- 精《记叙“tom”4年的软件开发之旅》
1.引言 本篇文章是记叙tom四年的软件开发从业经历,虽然他资历不长,况且本身也是个菜鸟,但他也曾有过荣誉.迷茫.困惑与选择,在这里他希望通过自己所经历过的事情分享给大家,给那些真正热爱软件开发的同学 ...
- AI如何驱动软件开发?华为云DevCloud 权威专家邀你探讨
近期,国际著名咨询公司Gartner 在一份研究报告中将 "AI-Driven Development" 列为 2019 年的 Top 10 Strategic Technolog ...
- nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞
第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...
- Atitit.软件开发的三层结构isv金字塔模型
Atitit.软件开发的三层结构isv金字塔模型 第一层,Implements 层,着重与功能的实现.. 第二次,spec层,理论层,设计规范,接口,等.流程.方法论 顶层,val层,价值观层,原则, ...
- 软件开发学习笔记 <一> UML
UML http://www.uml-diagrams.org http://www.umlchina.com/index.htm 统一建模语言(UML)始于1997年的一个OMG(对象管理组织)标准 ...
- 敏捷软件开发vs传统软件开发
摘要 本文介绍了传统软件开发(着重介绍了传统软件开发中常用的瀑布模型)和敏捷软件开发,以及敏捷开发和传统开发的对比. 一.传统软件开发 比较常用的几种传统软件开发方法:瀑布式开发.迭代式开发.螺旋开发 ...
随机推荐
- servlet请求和响应的过程
1.加载 Servlet类被加载到Java虚拟机中,并且实例化.在这个过程中,web容器(例如tomcat)会调用Servlet类的公开无参构造函数,产生一个Servlet类的实例对象.默认情况下Se ...
- java验证码的制作和验证
验证码作用: 没有验证码登陆,黑客会更加容易破解你的账号,通过组合码刷机等黑客技术来破取你的密码,有了验证码相当于加了一层很厚的屏障,安全系数很高. 验证码是一种区分用户是计算机和人的公共全自动程序. ...
- java学习(权限修饰符)
Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符.使用对象:类. ...
- Windows 命令行
1.d: 进入d盘 2.dir(directory) 显示当前文件夹下的所有内容 3.md (make directory) +文件夹名 在当前文件夹下创建文件夹 4.rd (remove ...
- Spring的AOP开发入门,Spring整合Junit单元测试(基于ASpectJ的XML方式)
参考自 https://www.cnblogs.com/ltfxy/p/9882430.html 创建web项目,引入jar包 除了基本的6个Spring开发的jar包外,还要引入aop开发相关的四个 ...
- python 协程、I/O模型
一.引子 (超哥协程) 并发本质:保存状态+切换 cpu正在运行一个任务,转而执行另一个任务的情概况:1.是该任务发生了阻塞:2.该任务计算的时间过长或有一个优先级更高的程序替代了它. 协程本质上就是 ...
- 基于Django rest framework 和Vue实现简单的在线教育平台
一.基于api前端显示课程详细信息 1.调整Course.vue模块 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2 ...
- UVA10570-Meeting with Aliens(枚举)
Problem UVA1616-Caravan Robbers Accept: 531 Submit: 2490Time Limit: 3000 mSec Problem Description I ...
- go struct{}的几种特殊用法
参考:https://blog.csdn.net/kturing/article/details/80557280 1.声明为声明为map[string]struct{} 由于struct{}是空,不 ...
- web3js learning
使用console.log(web3.version.api);来查看了web3的版本是0.20.1, 参考文档在:https://github.com/ethereum/wiki/wiki/Java ...