附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全:

书单导航页(点击右侧 极客侠栈 即可打开个人博客):极客侠栈
①【Java】学习之路吐血整理技术书从入门到进阶最全50+本(珍藏版)
②【算法数据结构+acm】从入门到进阶吐血整理书单50+本(珍藏版)
③【数据库】从入门到进阶必读18本技术书籍网盘吐血整理网盘(珍藏版)
④【Web前端】从HTML到JS到AJAX到HTTP从框架到全栈帮你走更少弯路(珍藏版)   
⑤【python】书最全已整理好(从入门到进阶)(珍藏版)

⑥【机器学习】+python整理技术书(从入门到进阶已经整理好)(珍藏版)
⑦【C语言】推荐书籍从入门到进阶带你走上大牛之路(珍藏版)
⑧【安卓】入门到进阶推荐书籍整理pdf书单整理(珍藏版)

⑨【架构师】之路史诗级必读书单吐血整理四个维度系列80+本书(珍藏版)

⑩【C++】吐血整理推荐书单从入门到进阶成神之路100+本(珍藏)

【ios】IOS书单从入门到进阶吐血整理(珍藏版)

-------------------------------------------------------------------------------------------------------------------------------------------

笔者坐标上海,做技术开发,之前有几个月的时间,基本上都是在面试中度过的。我求职的职位是 Linux 服务器开发,最倾向的职位是服务器开发主程或技术经理。在那几个月的求职过程中,我面试了 30+ 家公司,包括腾讯、百度、阿里的蚂蚁金服和国际支付宝部门、饿了么、爱奇艺、360、携程网、京东、华为、bilibili 与 UCLOUD 等。在这个过程中,思考了一些面试相关的问题,总结出这篇文章,希望给读者一些启发。

总结下来,技术面试大致有三种情形,下边一一来讲讲。

一、考察数据结构和算法为主

IT 公司一般都会考察数据结构和算法能力,其中以百度与爱奇艺等为代表,面试官一般是先简单地了解你之前的工作经历和项目经验,然后就直接出算法和数据结构的题目,具体涉及到以下内容:

  • 快速排序。考察的地方包括算法步骤、平均算法复杂度、最好和最坏的情形,有人说校招要把算法写出来,我这里是社招,所以一般描述一下算法过程即可。
  • 二分查找法。一般面试官会要求面试者把算法写出来,或者先结合一个具体场景来提问,需要你联想到要使用该算法,比如求一个数的平方根,接着要你把它具体实现。
  • 链表。常见的面试题有要求你写出从一个链表中删除一个节点的算法、单链表倒转、两个链表找相交的部分等,一般需要完全无误地写出来。
  • 实现一些基础的函数。例如 strcpy、memcpy、memmov 与 atoi 这些函数,面试官会要求你用自己的理解和思路去实现。同样,这些一般也需要完全无误地写出来,并且要保证高效,比如你的实现中有动态分配堆内存,那么这道题目就算答错。

链表和实现基础函数的关键点一般在于考察你的代码风格、对边界条件的处理,比如判断指针是否为空,千万不要故意不考虑这种情形,即使你知道也不行,只要你不写,一般面试官就认为你的思路不周详,容错率低;再比如,单链表的倒转,最后的返回值肯定是倒转后的链表头结点,这样才能引用一个链表,这些都是面试官想考虑的重点。

  • 哈希表。对哈希表的细节要求很高,比如哈希表的冲突检测、哈希函数常用实现、算法复杂度;比如百度二面就让我写一个哈希表插入元素算法,元素类型是任意类型。
  • AVL 树与 B 树。考察概念与细节,比如会问 MySQL 数据库索引的实现原理,基本上就等于在问你 B 树。
  • 红黑树。这个基本上是必问的数据结构,包括红黑树的概念、平均算法复杂度、最好最坏情况下的算法复杂度、左右旋转与颜色变换。面试官常见的套路有:你熟悉 C++ 的 stl 吗?你说熟悉,ok,stl 的 map 用过吧?用过,ok,那 map 是如何实现的?红黑树,ok,那什么是红黑树?这样提问,红黑树就开始了。Java 的也类似。

二、考察操作系统原理等基础技术

这一种以饿了么、bilibli、喜马拉雅、360 与携程等为代表,主要兼顾算法与数据结构,但重点放在其它开发技术,比如操作系统原理、网络协议细节与具体的开发库源码等内容。

基础的 C++ 问题

以 C++ 语言为例,这一类常见的问题有:

  • C++ 的继承体系中 virtual 关键字的作用,如继承关系中析构函数为什么要申明成 virtual 函数,如果不申明为 virtual 会有什么影响、再涉及到父子类时构造与析构函数的执行顺序、多重继承时类的成员列表在地址空间的排列;
  • static 关键字的作用,static_cast、reinterpret_cast 与 dynamic_cast 等几个转换符的使用场景;
  • 问得最多的就是虚表的布局,尤其是菱形继承,即 B 和 C 继承 A,D 继承 B 和 C,每个对象的空间结构分布,比如问 D 有几份虚表,D 中 B 和 C 的成员空间排布。

另外,如果你应聘的职位使用 C++ 开发,很多公司会问你一些 C++ 11 的东西,或者问 boost 库,基本上都一样。这个你用过就用过,没有用过就说没用过不要装 X,常见的 C++ 11 需要掌握的一些技术库我也列举一下吧:

  • auto 关键字
  • for-each 循环
  • 右值及移动构造函数
  • std::forward、std::move
  • stl 容器新增的 emplace_back() 方法、std::thread 库、std::chrono 库
  • 智能指针系列 std::shared_ptr、std::unique_ptr、std::weak_ptr,智能指针的实现原理一定要知道,最好是自己实现过
  • 线程库 std::thread
  • 线程同步技术库 std::mutex、std::condition_variable、std::lock_guard 等
  • lamda 表达式(Java 中现在也常常考察 lamda 表达式的作用)
  • std::bind、std::function 库

网络通信问题

考察对网络协议的理解和掌握程序,比如 TCP/IP 协议栈的层级关系,三次握手和四次挥手的细节,注意我说的是细节,比如 CLOSE_WAIT 和 TIME_WAIT 状态。bilibili 问了这样一个问题,你可以感受一下:

A 与 B 建立了正常连接后,从未相互发过数据,这个时候 B 突然机器重启,问 A 此时处于 TCP 什么状态?如何消除服务器程序中的这个状态?

再罗列其它一些常见问题:

  • 万得问过流量拥塞和控制机制
  • 腾讯问过 TCP 和 IP 包头常见字段有哪些
  • 东方财富网问了阻塞和非阻塞 socket 在 send、recv 函数上的行为表现
  • 异步 connect 函数的写法
  • select 函数的用法
  • epoll 与 select 的区别,基本上只要问到 epoll,必问 epoll 的水平模式和边缘模式的区别
  • 一些 socket 选项的用法,nagle、keepalive、linger 等选项的区别
  • TCP 与 UDP 的区别和适用场景
  • 通信协议如何设计避免粘包
  • HTTP 协议的 get 和 post 方法的区别,问得比较深的会让你画出 HTTP 协议的格式
  • 可能会问到 Windows 完成端口模型(IOCP)

总之,网络通信问题能搞得多清楚就搞多清楚,最起码把 TCP 应用层各种 socket API 的用法细节搞清楚。

操作系统原理

上海黄金交易所和喜马拉雅听书都问了 Linux 下 elf 文件的节结构,映射到进程地址空间后,分别对应哪些段。相关的问题还有全局变量、静态存储在进程地址空间的哪里。饿了么二面问了操作系统的保护模式实模式、中断向量表、Linux 下的 CAS。Linux 系统下可能还会问什么是 daemon 进程,如何产生 daemo 进程,什么是僵尸进程,僵尸进程如何产生和消除。

堆和栈的区别,栈的结构、栈的细节一点要搞得特别清楚,因为一些对技术要求比较高的公司会问得比较深入,例如京东的一面是让我先写一个从 1 加到 100 的求和函数,然后让我写出这个函数的汇编代码,Java 开发的同学可能会让你试着去写一点 JVM 的指令。如果你对栈的结构,如函数参数入栈顺序、函数局部变量在栈中的布局、栈帧指针和栈顶指针位置不熟悉的话,这题目就无法答对了。

栈的问题,可能会以常见的函数调用方式来提问,常见的有 __cdecl、__stdcall、__thiscall、__fastcall 的区别,比如像 printf 这样具有不定参数的函数为什么不能使用 __stdcall。

此外还有进程和线程的联系与区别,问得最多的就是线程之间的一些同步技术,如互斥体、信号量、条件变量等,Windows 上还有事件、临界区等,这类问题还可以引申为什么是死锁、如何避免死锁。这些东西你必须熟悉到具体的 API 函数使用的层面上来。这是实际开发工作中编码最常用的东西,如果你连这个都不能熟练使用,那么你多半不是一个合格的开发者。

进程之间通信的常用技术也需要掌握,Linux 常用的通信方式有共享内存、匿名和具名管道、socket、消息队列等等,管道和 socket 是两个必须深入掌握的考察点。

使用过的开源技术

考察使用过的开源技术,比如 Redis 与 MySQL 等项目。开源技术的使用一般不做硬性要求,但是这里必须强调一下 Redis,熟练使用 Redis 甚至研究过 Redis 源码,现在一般是对做后台开发的技术硬性要求。

基于 Redis 的面试题既可以聊算法与数据结构,也可以聊网络框架等东西。我面试的公司中基本上百分之九十以上都问到了 Redis,只是深浅不一而已,比如喜马拉雅问了 Redis 的数据存储结构、rehash,bilibili 问了 Redis 的事务与集群。

三、考察项目经验

只问一些做过的业务或者项目经验,这类公司他们招人其实对技术要求不高,除非是资深及主管级开发。只要你过往的项目与当前应聘职位匹配,可以过来直接上手干活就可以了,当然薪资也就不会给很多。比如游戏公司会关心你是否有某某类型的游戏开发经验、股票类公司会关心你是否有过证券或者交易系统的开发经验等。

业务开发哪里都能找到,真正重视技术的公司,应该是广大做技术尤其是初中级开发的朋友更为关注的。

不靠谱型公司

面试过程中,其实还会发现一些不靠谱的公司,我遇到的大致有四类:

装 X 忽悠型公司

面试过程冗长繁琐,我面试的有一家公司就是这个样子,先是一轮长长的电话面试,然后是五轮技术面试,前三轮是刷 leetcode 上的原题,然后后几轮面试官从基本的操作系统中断、GDT、LDT、分表分页机制问到上层高并发海量数据的架构。从外太空聊到内子宫,最后问具体职位做什么时,要么遮遮掩掩要么原型毕露,或者讨论薪资时,要么面露难色要么各种画饼,但是实际就给不了多少薪水的。

佛性公司

全程面试官面带微笑,问的问题你回答之后面试官也表示很赞同,但最后你就是没通过。我猜测要么公司不是很缺人,想观望一下是否有合适的人才,要么招聘信息上开的薪资给不到。

老奶奶裹脚布型公司

其特点是面试周期长,往往第一轮面试通知你过了,让你回去等上十天半个月后,给你打电话通知你来第二轮面试。面试要求穿正装,带好各种证件,面试前必须先查验你的身份证、学历证学位证,甚至是四六级考试证等等,麻烦至极。即使你一路过关斩将过了终面,薪资也给不了多少。大家都是要养家糊口的,都是忙着找工作,谁有时间和你耗上十天半个月呢?

不尊重人的公司

我这里说的不尊重人,不是指的是面试过程中对你人身攻击,而是不根据你的工作年限和经验随意安排面试官。举个例子,比如你工作十年,你去面试一个技术总监的职位,对方公司安排一个工作不满两年的部门职员作为面试官,这个面试官如果是走过场可以理解,但是非要和你纠结一个如二进制位移、现代编译器要不要在子类析构函数前加 virtual 关键字这些技术细节就没必要了。还有一类就是故意问一些刁钻的问题,或者全场都心不在焉、玩手机、漫不经心的面试官,比如问你 TCP 协议头有多少个字段,每个字段是干啥的。遇到这一类面试官我的经验就是要么婉拒,要么直接怼回去。

技术之外的关注点

除了技术上的东西,面试中还有其它方面需要思考,这些东西有时候可能比你直接面试通过一家公司还重要,因为其中有一些是关系到你整个职业发展的:

第一,如果你的工作年限不长,尤其是渴望在技术方面有一定的造诣,那么你首先考虑的应该是新的单位是否有利于你技术上的成长,而不是把眼光放在三五千的工资差距上。另一方面,如果想转行的同学,比如从客户端转服务器,从 C++ 转 Java,那么不要因为薪资突然变低而拒绝这种阵痛,要把目光放长远一点。

第二,一些公司虽然招聘信息上写了最多能给到多少多少,但实际上即使你全程面试下来都很完美,可能最终也会因为在招聘信息范围内提出的薪资要求“太高”而不被录取。

第三,一些根本不想去的公司,如果你有时间的话,去面试积累下经验也不是什么坏事。

第四,面试的时候,同时也是你在考察面试官,一般面试官问你的问题,你能回答出来的在百分之八十左右,这样的公司可以考虑去入职,你进去的话可能才会在技术上有一些提升。如果你全场秒杀面试官的题目,那么一旦你入职,你的技术天花板可能也就在那里了。

第五,面试的时候聊清楚你将来的职位内容,避免进去客串一些不想做的工作。

第六,遇到不会的面试题,不要直接就否定自己,可以尝试着去和面试官沟通一下,或者要求给点提示或者思路。

第七,不要轻视笔试中的一些数学智力题目,认真作答,试问算法不也是数学智力题吗?

第八,自信一点,每个人的经历和经验都是独一无二的,面试的时候,一些特定领域的问题,回答不出来也不要太在意。

上边这些就是我经过与 30+ 家公司过招,引发的关于面试的思考,希望对阅读的朋友有所帮助。

大神面试心法教你沉着应对大小公司的笔试面试相关推荐

  1. Interview:算法岗位面试—11.06早上上海某智能驾驶科技公司(创业)笔试+面试之手撕代码、项目考察、比赛考察、图像算法的考察等

    Interview:算法岗位面试-11.06早上上海某智能驾驶科技公司(创业)笔试+面试之手撕代码.项目考察.比赛考察.图像算法的考察等 导读:该公司是在同济某次大型招聘会上投的,当时和HR聊了半个多 ...

  2. 吴恩达等ML大神对话:如何用机器学习应对气候变化 | NeurIPS 2019

    2019-12-17 12:05:38 十三 发自 凹非寺  量子位 编译 | 公众号 QbitAI 机器学习该如何加入应对气候变化这场硬仗? 在今年的NeurIPS会议上,机器学习大神们聚集在一起, ...

  3. 一文讲透『大神修炼心法』!35岁让自己过的越来越好!

    Cocos 的老铁,如果你这几天没有被麒麟子给卷到?那说明你还没有真正进入 Cocos 圈子里来.为什么这么说呢?看下面. 3月1号 23:57 | 2800+字 麒麟子全方位解读 Cocos Cyb ...

  4. 记阿里巴巴的一次面试,教你怎样应对到来的“金三银四

    在网上看到阿里在招人,便投了一份简历,应聘职位是高级测试开发,因为我学历是大专,投完后当时没报什么希望,也没放心上.首先结果是华丽丽的没通过,下面是详细过程. 电面篇 一天下午正在工作,突然接到电话, ...

  5. 香港大学计算机硕士一定要面试吗,大干货!!!香港硕士有哪些专业需要笔试面试...

    和其它英联邦地区比,香港硕士申请复杂程度更高,除了香港地区不同专业在申请时间.流程及录取要求方面的复杂信息外,很多专业在录取时都有面试笔试也是很重要的原因. 很多同学在收到面试笔试后也都会担心自己表现 ...

  6. 怎样将flac格式转换成mp3格式?大神这招教你搞定

    对于一些音乐发烧友来说,flac无损格式音频无疑是最好的选择,可以有些事就是天意,当我们在一些设备上添加进去flac格式音频之后,却发现不支持flac格式,那么这时候该怎么办呢,许多人会选择将flac ...

  7. c语言获取栈可用大小,[求助]求教各位大神如何获得C语言函数体的大小?

    2012-2-21 16:34 以下是小弟自己用VC写的线程注入代码. 程序前边都没有问题. 问题在CreateRemoteThread函数调用后,目标进程会崩溃. 我想可能是我写入目标进程的代码不对 ...

  8. 【校招笔试】22届秋招各公司校招笔试面试汇总(不断更新)

    文章目录 一.笔试 二.面试 三.相关题 一.笔试   [校招笔试]大华 - 软件岗   [校招笔试]诺瓦 - 嵌入式岗   [校招笔试]网易 - 测试岗   [校招笔试]爱奇艺 - 软件岗   [校 ...

  9. 产品大神有张小龙,为什么运营少有大神?

    在互联网产品领域,我们经常会说到缔造微信的张小龙,称之为产品大神,也会经常谈起孕育贴吧的俞军.打造QQ的马化腾,也会对雷军.周鸿祎.傅盛等优秀产品的CEO在一些产品上的洞见津津乐道. 但当我们回头看运 ...

  10. 世界顶级AI大神综述深度学习

    http://blog.itpub.net/29829936/viewspace-2600395/ 论文基本信息 文章名称:Deep learning 作者:Yann LeCun, Yoshua Be ...

最新文章

  1. 【bzoj1444】[Jsoi2009]有趣的游戏 AC自动机+矩阵乘法
  2. 计算机基础知识第四章测试,计算机基础知识测试题第四章
  3. 一份字节跳动面试官给你的Java技术面试指南,彻底帮你搞懂
  4. Linux组管理和权限管理
  5. 大数据+社会化协同 菜鸟不菜成老师
  6. 七十一、Springboot整合MyBatis(注解版)
  7. 解决IntelliJ IDEA报错Failed to read candidate component class: file [ ]; nested exception is org.
  8. 2021年上海高考成绩分数排名查询,2021年上海高考成绩排名及一分一段表
  9. 计算机专业基础 -- 数据结构入门与算法基础知识
  10. APP性能测试之monkey
  11. 布行管理软件,布行软件有什么用?
  12. 阿里云ECS服务器修复漏洞
  13. caffe版本-车型检测-A Large-Scale Car Dataset for Fine-Grained Categorization and Verification
  14. 头条号优化 如何提高头条文章阅读量
  15. 【代码审计】那些代码审计的思路.md
  16. linux shell用户,Linux 系统 利用shell脚本获取所有用户
  17. Unity 多机器的视频不卡帧同步
  18. C++推箱子小游戏(源码)
  19. java 口袋算法_口袋算法,pocket algorithm,音标,读音,翻译,英文例句,英语词典
  20. php 手机摄像头,手机摄像头大光圈有什么作用

热门文章

  1. 51Talk-Level 7 Unit 2 L4
  2. [BZOJ5109][LOJ #6252][P4061][CodePlus 2017 11月赛]大吉大利,今晚吃鸡!(最短路+拓扑排序+传递闭包+map+bitset(hash+压位))...
  3. 苹果手机在升级系统时一直显示无服务器,苹果手机一直显示检测更新,怎么办?...
  4. 三星s8文档有html,别找了 你想知道的三星S8一切都在这里
  5. 阿里云服务器 —— linux是什么样子的呢(适合新手,建议收藏!)
  6. latex图片及其标题居右
  7. Java将正整数转换为负数,将负整数转换为正数
  8. JavaEE Day14 ServletHTTPRequest
  9. 单路视频编码器怎么使用
  10. Docker数据卷映射