2019年秋招提前批面筋

综述

本人非科班生,本科普通二本院校、硕士西安某末流985,本硕专业都是电子与通信工程,基本做的东西离不开单片机、DSP、FPGA、STM32,先前完全没有接触过网络、数据结构算法等。研二上学期想往互联网转,所以自学了一年计算机专业的知识,也面了一些互联网大厂,积累了一些经验。本人仅仅参加了提前批获得offer也都一般般,因为学校三方发得比较早,并且华为给的薪资还不错,就提前结束了秋招。就面试一个月期间,认真总结了各个大厂面试要点,并做了相关的总结。如果对于一个非科班自学计算机的人想去BAT,应该具备以下能力:

  • 1、语言能力:对于C++后台开发
    起码对于C++以及C语言要比较熟悉,这里推荐的书籍包括以下:C程序设计语言(第2版_新版)、C和指针、C陷阱与缺陷、C专家编程、C Primer Plus第6版 中文版、C++Primer、Effective C++中文版(第三版)、More Effective C++中文版、深度探索C++对象模型、STL源码剖析。前面基本C语言吃透了,看C++对象模型以及STL源码应该比较清晰,必须深入STL内部,分析其内存模型、对象模型以及模板编程一些要点。
  • 2、Linux基本操作能力
    最好的方法就是按照虚拟机,然后在Linux上面写代码,熟悉Linux常用的指令。推荐书籍:Linux命令行大全、快乐的 Linux 命令行、鸟哥私房菜
  • 3、熟悉网络的能力
    起码清楚的连接TCP三次握手、四次挥手等内部细节过程,了解TCP和UDP的区别,了解HTTP协议。推荐书籍:TCP-IP详解卷一:协议、图解HTTP
  • 4、熟悉操作系统的能力
    现代操作系统(第三版)中文版(选取重点的章节看)、程序员的自我修养—链接、装载与库、深入理解计算机系统(原书第2版)_CSAPP(没学过嵌入式的,得好好看看这本书,从最底层理解程序如何运行)
  • 5、
  • 6、
  • 7、
  • 8、自己总结过一篇超过10万字的面试总结,包含上述提到的各部分面试考点,希望对各位有所帮助。面试总结

1、腾讯校招实习生内推面试(4.24)

一面:人生第一次面试献给了腾讯。超级紧张。

  • 1、STL内存分配原理?是如何组织的?
  • 2、你知道sbrk和brk的区别吗?calloc、malloc、realloc的区别?
  • 3、TCP/IP为什么是三次握手?TIME_WAIT状态有啥作用?一般哪一端处于这个状态?服务器端可以吗?如果可以,那么一个IP重复,产生很多TIME_WAIT状态会如何?
  • 4、Linux5个IO模型,阻塞与非阻塞的区别,非阻塞调用,数据没来函数返回错误码是什么?用什么函数将非阻塞修改成阻塞?,文件描述符是什么东西,有什么作用?
  • 5、说说nginx的重定向与反向代理
  • 6、智力题目:有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层?

这是第一次面试,并且是第一次提前批电话面试,连TIME_WAIT的作用都回答不全,当然失败告终。后面腾讯实习生招聘也来了西安现场面试,自己也过去了,人超级多,当然面试全程问项目,问智力题,问数据库,无赖没对应项目,没学过数据库,数据结构也很水,当然失败告终。后续加紧时间自己学了一些东西。

OPPO提前批面试(7月18号):

一面:

  • 1、自我介绍
  • 2、挑个你最拿手的项目介绍
    介绍了自己写的简单网络库,顺便说了下Redis和Libevent,中途问了具体写了哪些模块,如何调试,定位Bug(我的回答是valgrind+gdb+strace),什么是单元测试,花费了较长的时间。(中间扯了挺长时间的项目)
  • 4、单例模式需要注意什么?
  • 5、做了一个卷子,10到选择题,2道编程题,任选一道,题目都不难,但是需要很快做完。
  • 6、问了一道智力题目,小白鼠试毒药问题。这时候面试官去改卷子。改完问你思路。
  • 7、算法题目,如何快速求第K大的数,不考虑空间复杂度,类似于TOP K的问题。但是提示下,才想到利用快排。

二面:

全程聊项目,就问项目,然后问得比较宽泛,感觉面试官也不懂细节之处,自己一个人在那里说,他就好好好的,很像华为的面试,然后聊完出来就挂了。不知道为何。全程我一个人给他讲,画,感觉不错吧,可是出来就挂了。

CVTE提前批面试(7月18号33分钟):

一面

  • 1、介绍你的项目(自学过程及其经历)
  • 2、shared_ptr、unique_ptr、weak_ptr的应用场景
  • 3、多态
  • 4、重载(怎么重载,传参一样函数返回不一样可以重载吗)和重写区别
  • 5、C++要引用C函数如何做?不用extren可以不?
  • 6、struct和class的区别,struct可以被继承吗?
  • 7、中途又问了一个项目
  • 8、有什么问题要问?

产品线是啥,中途面试管说了,C++语音基础比较薄弱,但是对技术比较热情。面试极差,先前看了,但是没有总结。然后下定决定好好总结属于自己的一份面试题库。

阿里内推面试(8月17号):

一面:

  • 1、malloc和new的区别,分配一个int *a数组,delete a和delete a[]区别?
  • 2、多态的实现原理?
  • 3、智能指针的应用场景?
  • 4、内存泄漏,通常怎么做?
  • 5、vector和list的区别,map迭代器是否失效的问题?
  • 6、虚继承的实现原理?
  • 7、右值引用左值引用和std::move的作用?
  • 8、了解c++11的std::forward吗?
  • 9、std::lock怎么实现?讲了RALL手法实现锁。
  • 10、了解数据库吗?
  • 11、今天时间有限,就到这里了吧,要是有电脑怎么可以做几个题目。

(33分钟,果然4天之后约了继续面试,同一个面试官继续面试58分钟)
四天后…………

二面:

(8月21号)你好,前几天面试,感觉你C++基础知识还可以,电脑准备好没,我们接着面试吧(55分钟)。

  • 1、C++11中move有啥用?内部是如何实现的?
    move是用来实现对象内部快速转移的,move返回的是右值引用,只有对象重载了右值引用也就是转移运算符和转移赋值运算符,那么就可以在不必拷贝对象而转移对象内部的变量,实现高效的移动。
    可以对C++内部类型进行move不?
    内部类型没有重载转移运算符,使用move应该就是直接赋值了。这个问题不清楚,没见过。
  • 2、HTTP协议头部有哪些字段说说其中的含义是什么?
    头部有对方浏览器、操作系统类型、报文时间,主体报文长度字段,连接类型是短连接还是长连接字段也就是keepalive。
    那了解HTTPS吗?
    不了解。
  • 3、例如我有一个HTTP请求,没有到达对方服务器,返回的是报文不可达,那你怎么可以解决这个问题,有什么思路?
    可以使用tracerout跟踪HTTP请求,然后查看其到达的路由器有哪些,然后看报文最后到达哪个路由器就失败了。
    直接tracerout域名吗?
    哦, 不对,不对。得先知道IP地址。
    那说说tracerout的原理是什么吗?
    通过设定报文的生命周期,从1、2、3等等,设为1,那么经过一个路由器就会返回ICMP信息,然后设为返回经过的第二个路由器信息,这样可以跟踪到报文经过的路由器信息。
  • 4、TCP是如何确保早发但是延迟到的报文是有序的?
    采用滑动窗口,应答机制。(回答不好)
  • 5、C++内存泄漏很容易,你一般通过什么工具检测,有没有尝试自己写个东西去检测?
    没有尝试写过,一般使用vargrind检测,一般都可以检测出来。
    那你了解vargrind原理吗?
    不了解。
  • 6、因为不是科班,然后让我简单介绍了自己从什么时候开始学习这些知识,以及学习了哪些,怎么学习的?
  • 7、Linux为什么要弄个虚拟内存?
    为了让每个进程看似有独立的大的内存空间,并且都不互相干扰,可以很方便的编写程序。
  • 8、对数据库了解多少,有没有一些具体项目中用过数据库?
    学习了MySQL必知必会,看了InnoDB内部一些原理,具体还没有用到项目中,打算最后将数据库结合到自己的简单Web服务器上面。
  • 9、如果一条SQL查询很慢,你觉得可以怎么优化?
    可以看慢查询日志,或者通过expalian获取SQL语句内部查询表的过程以及是否用过索引等一些信息
    那怎么样可能导致查询变慢呢?
    例如联合了许多表,但是又没有建立好的索引,或者索引使用不正确。
    你刚刚说到慢查询日志,那多慢才会生成慢查询日志了?
    具体时间不记得了,但是可以设置。
  • 10、那你觉得建立索引应该满足什么条件?
    某列数据区分度不够大,例如男女这种建立索引也没用;并且建立索引应该在已有的索引上面建立联合索引,这样之前的索引也可以用,联合索引也可以用。
    那使用索引应该注意什么?
    最左前缀原则(举了个例子)以及索引不能运算、like首部不能使用通配符等。
  • 11、TopK问题?
    最小堆或者快排切分解决。
  • 12、二叉树的翻转,知道自己算法很差。
    说得比较乱,还让我捋捋思路。阿里面试官真的好。
  • 13、讲将自己在学校里觉得做的还可以的项目以及中间的难点?
  • 14、你实习在那边主要做了什么?
  • 15、打开钉钉,给你发个题目吧,我远程监控你的电脑,你可以随便打开个IDE,写个unique_ptr类,实现一些基本功能就可以。
  • 16、写完了没有,写完了发给我钉钉上。
  • 17、有什么问题想问的?
    唉,这场相比于第一场,问的问题更加灵活了,感觉面试官就是想起什么问什么,很专业,应该没有什么题库之类的,阿里的面试就是这么牛。 唉,肯定凉了,秋招再投吧。

三面(8月29 26分钟):主要围绕项目以及一些开放性的话题聊聊

  • 1、你的Web服务器架构是什么?
    多进程,主从模式。
  • 2、在用之前参考了哪些架构,多进程模型有什么优点?
    说了下Nginx、Redis、Memcached。然后说了下多进程和多线程的区别以及优缺点吧。
  • 3、看过Nignx没有?
    看过淘宝写的Tenginx书籍,然后说了下架构。
  • 4、现在都流行分布式,了解一些分布式的技术吗?
    说了下一致性hash的实现以及其原理。
  • 5、我们这边主要做消息中间件,了解消息中间件吗?RPC
    不是很了解,但是知道有些消息队列使用Redis来做的。
  • 6、为什么选择学习服务器端编程,以后非要从事服务器开发吗?
    找个方向学习,具体以后做什么还是工作决定,因为反正过去也是学习。学校培养的就是学习能力。
  • 7、大概你的情况了解了,有什么问题想问的?
    请问您可以评价下嘛?
    你对服务器开发的多进程和多线程有自己的理解,但是可能不是科班生,然后自己做东西,时间不足可能实践也没有那么多。
    这如果过了下一轮属于什么面试?
    下一轮应该就是HR面试了,HR最近有点忙估计得到下周给你电话了。

网易游戏内推面试

一面(8月21号56分钟):

网易游戏笔试4道编程题目,就做对了一道半。第二题就是杭州网易游戏电话过了,但是没有接过,意味就没有机会了,结果一周之后,广州的HR打电话,约了8月21号中午11点半准时面试。
到了8月21号11点20,广州的网易游戏打电话来了,说了下,自己呆的地方信号不好,可以5分钟后再打过来吗?5分钟跑下楼,找个个桌子,迅速拿出纸和笔准备面试。几分钟后打开了。
你好,请问是某某同学吗?我们是网易游戏的工程师,今天的面试官有两个人(两个人…唉,好吧)。

  • 1、好吧,那我们开始来个数学题目,7点55分时针和分针的夹角是多少?
    天啦,思考了几分钟,竟然没想出来,妈呀。估计当时听到两个人就震惊了。暖场题目结束。好吧,你这道题目时间已经过来,今天面试不问项目,就问基础时候,来电C++语法吧。
  • 2、程序的内存布局?
    从低地址到高地址依次是代码段、数据段、BSS段、堆、栈、环境变量部分、保留给内核的部分。
    那静态变量存储在哪个段?
    初始化的在数据段,未初始化的在BSS段。
    还有哪些在数据段?
    初始化的全局变量。
    那他和静态变量有啥区别?
    静态变量作为局部的时候,仅仅初始化一次,并且只能在其作用域内访问。全局的可以在当前文件中其定义的开始以后,全部可以访问。
    非静态的局部变量为什么要存储在栈中?
    因为对于函数的调用,都会生成栈帧,而这个栈的创建的编译器自动帮助我们的,并且栈的内存空间是可以重复利用的,在函数调用开始创建栈帧,函数退出栈帧就销毁了,局部变量也就销毁了。
  • 3、C++有那几种全(传)参数(广东话真难懂,几个地方,另外一个人说是几种传参数)
    传值、传引用、传指针。
    那么这都有什么区别?
    传值,栈上拷贝对象;引用不会拷贝,指针也不会拷贝;引用和指针区别babalalabl。
    那什么情况下要传引用呢?
    当被调用函数需要修改调用函数某个对象的时候,而又不想拷贝对象,那么就可以传引用。
  • 4、struct和class有什么区别?
    一个默认是全局,一个默认是私有。其他都一样。(后面查了看了,好像struct不知道模板,这道题目还得看看)。
    类的三个特性是什么? struct也可以class的三大特性吗?
    继承、多态、重载。可以
    那多态的原理说下?
    虚函数、虚表、重写。
  • 5、m个数组求前k大,TopK可以有几种做法?
    最小堆。
    好 ,那这个时间复杂度是多少?
    说得不好最后在面试官友好的提醒下说了是mlogk。
    还有啥方法?
    快排切分的思路。
    那快排和堆排序稳定吗?
    不稳定。
  • 6、私有IP地址的范围是什么?
    直接说,这个真的不记得了,但是我调试自己服务器的时候通常用的是127.0.0.1
  • 7、TCP如何确保报文发送过来是正确的?
    三次握手、超时重传、慢启动、拥塞控制等。
    不是这个,我问的是如何确保报文内部的数据是正确的?(大写的尴尬)
    哦,那使用CRC校验实现,发送直接校验,收到校验,然后比较校验值是不是一样的。
  • 8、说说TCP四次断开,服务器和客户端的每个状态迁移?
    balalalal。
    说说timewait作用?
    两个作用,1和2.
    假如我服务器发送了FIN,客户端响应了ACK,这是我服务器端还在写这个sockt,会怎么办?
    应该是写返回错误,然后再errno里面会设置对应的错误码。
    那错误码是什么?
    这个不记得,错误码的英文含义应该是提示连接已经断开,你就不要往里面写了。
  • 9、TCP协议内部有几种定时器?
    超时重传定时器,还有三个,唉不记得了,不好意思哈。
    那你的Web服务器里面肯定需要用到定时器,说说你是怎么处理的?
    通过最小堆维护定时器事件,在epoll_wait之前,取出堆中最近的时间作为其第4个参数,等返回之后,比较最小堆与当前的时间,确定定时器事件是否到达了。
  • 9、你的web服务器是多进程还是多线程模型?
    多线程的,主负责accept,然后将收到的fd轮询发给work线程,最后由work线程处理这条连接。
    那你了解多进程的模型吗,这种模型也很多啊,例如Nignx?
    Nignx了解一点,很牛逼的Web服务器,后面向学习。
    那Nignx模型,怎么做到主和从的,例如主进程accpet,怎么把这个fd传递给子进程。(这个问题比较难)
    可以利用管道,把接收到的fd传过去。
    那两个独立的进程相同的fd是不是难道代表一样的含义吗?你觉得这样可以吗?
    这个确实有点蒙蔽,回答不太清楚。后来查看Nignx是在listen之后,才fork子进程的,这样每个子进程都继承了Listenfd,然后每个子进程都可以竞争的accpet。
    可以说说管道吗?
    管道分为匿名和有名。区别在于是否仅仅支持在具有亲属关系的进程之间通信。
    那你说说匿名管道具体应该如何使用?
    主进程初始化管道,产生两个读写fd,fork子进程,继承这两个fd。管道是半双工的,例如1给2写,就关闭1的读,2的写,然后就可以单向1写到2了。
  • 10、标准输出、输入、错误的fd是什么,同时多个进程写会发生什么?
    0、1、2,同时多个多可以写,但是输出可能会竞争,顺序混乱了。
  • 11、哪些指令可以查看文件内容?
    more、less、cat
    要查询末尾几行怎么办?
    tail
  • 12、如何查找处于进程状态的套接字?
    netstat –atl | grep ….
  • 13、怎么杀死进程?
    ps –elf kill -9 pid
  • 14、如何查看当前目录占用的大小?
    df和du一个是查找总内存,一个是查询当前目录,具体其中哪个查询当前目录,暂时不记得了。
  • 15、服务器不停写一个日志,例如已经写了1G了,那我在外部删除这个日志文件会发生什么?
    文件系统会重新生成一个同名的日志文件,然后从头开始写。(这个真的不知道。)
    你确定可以重头开始写吗?那加入重头开始写,那先前的1G内存是释放了,还是没有释放?
    真是不好意思,这个真的没有看过,不清楚。
    你看过文件系统没?(这才是重点,想问我看过文件系统没有)
    没有,真不好意思。
    好吧,今天面试就到这里了,你有什么问题想问我们?
    您可以说说对我的评价吗?因为这些都是自学的,以后学习可以朝哪些方向继续下去。
    第一个问题:面试结果3到5天内给通知,我们现在不方便告诉,毕竟后面还有一些人,我们需要比较斟酌。
    第二个问题:我觉得你自己这样学习还可以。
    好,今天那就这样吧。
    总结:网易游戏,面试多而细。凉凉送给了自己。

二面(8月29号下午三点56分钟):

我靠,记不清楚了,明天回忆回忆。

腾讯SNG内推面试

一面视频面试(8月21号10.30 40分钟):

  • 1、自我介绍
  • 2、写个strcpy函数
    写了个库函数内部的实现,然后说了一些内存重叠的两种情况,如果发生了内存重叠需要从后开始拷贝等。
  • 3、写一个“abcd,efgh,hijk …”反转为“dcba,hgfe,kjih”函数
    很快写完了,然后简单的解释了下。
  • 4、写一个epoll边沿出发读取socket套接字的函数
    写的比较快,主要在于一次性读完,然后处理ewouldblock和返回0的情况,写完之后,简单的解释了下。
  • 5、讲讲top输出的含义
    说了下top就想windows的任务管理器,将进程按照占用ram排序,并给用户看,具体内部的一些参数暂时还不清楚,就知道可以显示进程占用CPU的程度等信息,非常全面。
  • 6、awk使用过了没?
    使用过了,例如我输出过netstat中的某一列等。
  • 7、讲讲TCP三次握手
    讲了三次握手,顺带讲了为什么2次和4次不行的情况。
  • 8、有什么问题想问的?
    是不是看着不是科班生,然后一些C++的基础知识都没有问,然后啥时候可以出结果?
    结果我们还得商量下等等吧。(反正这个面试官面试的时候心不在焉感觉不负责的样子,让我很不爽,面试的时候我在说,他还在和别人讨论问题。)

二面电话面试(1个小时):

刚刚抱怨完,就电话来了,约了下午3点复试。这次复试就完全问项目细节了,还挑剔了许多其他的地方。

  • 1、自我介绍
  • 2、你的Web服务器为什么并发只能到1000?测试环境是什么样的?
    说了下机器的配置,然后说了下是如何测试的。等等一些细节,最后说了下,可能内存不足的情况,说了好久。
    你如何优化或者通过什么工具优化?
    说了下strace看系统api调用时间。top命令查看服务器占用内存等。唉这里感觉应该说看日志等信息的。
    你知道一个socket连接占用多少内存吗?
    这个问题真的不清楚,说了下socket一个连接是通过四元组维持的,每个socket占用内存具体多少不清楚,但是TCP肯定会为连接分配缓冲区等。
  • 3、说说一致性hash?
    A:原理和实现讲了半天,我觉得应该已经讲明白了,他还是始终问为什么一致性Q:hash可以实现负载均衡?
    A:通过hash函数hash到hash环上,hash函数越好,那么负载均衡的能力也就越好,非常依赖于hash函数的选择。然后说如果可以画图那就好了。
    Q:那你也要表达清楚啊,别紧张了,说得紧紧巴巴的
    A:第一次面试腾讯,超级紧张啊。
  • 4、给我讲讲智能指针吧
    讲了三大智能指针的引用场景,以及可能出现的问题。中间又被提及不要紧张,唉唉唉。
    Q:使用share_ptr就一定可以避免内存泄露嘛?
    A:不一定,如果一个对象被两个智能指针管理,那么会产生两个引用计数区域,因此一个智能对象析构,将是否对象内存,而另外一个还指向释放的内存,当其析构,则会释放已经释放的内存,产生不可预期的问题。
    Q:为什么会产生两个引用计数区域?
    A:解释了下shared_ptr内部的具体实现。
  • 5、我看你做的都是基础平台开发,你讲讲你的职业规划
    技术专家或管理层次。
    Q:你现在做的这些可能以后工作了都不会用到,你以后想从事业务开发,还是基础平台开发?就算从事基础平台开发,也不会涉及socket套接字的基本使用。
    A:现在处于学生阶段只是找一个点去学习,因为没有业务开发的环境,所以只有学习这些基础知识,并且基础知识好了以后业务开发遇到问题就会比别人看得更透明。
    Q:我只是现在纠正下你的思想,以后工作了可能技术对于业务而已就显得不那么重要了,更重要的时候对业务的理解以及整体架构的理解。
    A:这个因为没有做较多的业务,理解没那么透,但是一个时期一个理解嘛,随着时间的推移,理解也在动态的变化,估计到了那个时候就可以理解,谢谢您的提醒。
    Q:说说你的缺点吧
    A:1、2
  • 6、给我讲讲同步和异步?
    同步:调用阻塞指导数据到来等。
    异步:如IO复用是异步,信号驱动式IO是异步,调用完后立即返回,然后数据到来,内核通过信号通知。
    Q:你说说操作系统异步是如何实现的?
    A:(这个有点蒙蔽),接着讲刚刚刚的信号驱动式IO,然后问了下,是不是异步实现的一种方式,面试官也没有回答,这个问题就跳过去了。
  • 7、讲讲实习做了啥吧?
  • 8、有什么想问的?
    大概多久可以到下一轮面试?
    A:起码得3到5个工作日吧。唉,估计凉凉了,等等等等………面试官一会说紧张,说说不流畅,唉唉唉唉,心烦。
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有时需要偏执狂

请我喝咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值