与 30 家公司过招,得到了这章面试心法 - 算法与数据结构

  • https://mp.weixin.qq.com/s/Ml5RdaK4KMSZMctWko7wwA

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

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

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 的事务与集群。

三、考察项目经验

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

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

转载于:https://www.cnblogs.com/pegasus923/p/10400416.html

学习笔记之与 30 家公司过招,得到了这章面试心法相关推荐

  1. 与 30 家公司过招,得到了这章面试心法

    来源:开源中国 |编辑部的故事 作者介绍 笔者坐标上海,做技术开发,之前有几个月的时间,基本上都是在面试中度过的.我求职的职位是Linux 服务器开发,最倾向的职位是服务器开发主程或技术经理.在那几个 ...

  2. 裸辞4个月,面试了30家公司,终于找到了理想的工作

    点击上方"码农突围",马上关注,每天上午8:50准时推送 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点 ...

  3. 一个月内面了30家公司,薪资从18K变成28K,真行啊····

    工作3年,换了好几份工作(行业流行性大),每次工作都是裸辞.朋友都觉得不可思议.因为我一直对自己很有信心,而且特别不喜欢请假面试,对自己负责也对公司负责. 但是这次没想到市场环境非常不好,一直从春天熬 ...

  4. (史上最全面试宝典)裸辞4个月,面试了30家公司,最终收到腾讯的offer...

    前言 从春天辞职到立秋后决定入职某家工作,夏天悄悄溜走了,真的是恍如隔世.作为一个女生,连夏天的裙子都没有好好穿.辞职的日子,一个月就像一个周那么快,而且特别不期待周末,因为那是不可以面试的日子.待业 ...

  5. 裸辞4个月,面试了30家公司,终于找到了理想的工作,同时也刷了1万字的经验给你...

    作者 | 西娅zzz 从春天辞职到立秋后决定入职某家工作,夏天悄悄溜走了,真的是恍如隔世.作为一个女生,连夏天的裙子都没有好好穿. 辞职的日子,一个月就像一个周那么快,而且特别不期待周末,因为那是不可 ...

  6. 裸辞4个月,面试了30家公司,终于找到理想工作了

    上半年裁员,下半年裸辞,有不少人高呼裸辞后躺平真的好快乐!但也有很多人,裸辞后的生活五味杂陈. 面试30次终于找到心仪工作 因为工作压力大.领导PUA等各种原因,今年2月下旬我从一家互联网小厂裸辞,没 ...

  7. 2021-12-25 《聪明的投资者》学习笔记-18.对八组公司的比较

    摘自<聪明的投资者>The Intelligent Investor(第4版) 本杰明.格雷厄姆 十八章 对八组公司的比较 第1组:不动产投资信托(商铺.办公楼和工厂等)与纽约不动产公司( ...

  8. 2021-12-16 《聪明的投资者》学习笔记-13.对四家上市公司的比较--普通了解,不必强求

    摘自<聪明的投资者>The Intelligent Investor(第4版) 本杰明.格雷厄姆 第13章 对四家上市公司的比较 1-盈利能力 2-稳定性 3-增长 4-财务状况 5-股息 ...

  9. 数据治理专业认证CDMP学习笔记(思维导数据治理专业认证CDMP学习笔记(思维导图与知识点)- 第11章数据仓库和商务智能篇...

    大家好,我是独孤风,一位曾经的港口煤炭工人,目前在某国企任大数据负责人,公众号大数据流动主理人.在最近的两年的时间里,因为公司的需求,还有大数据的发展趋势所在,我开始学习数据治理的相关知识. 数据治理 ...

最新文章

  1. GitHub上开源的YOLOv5
  2. 13张图彻底搞懂分布式系统服务注册与发现原理
  3. SAP FICO AS03显示固定资产主数据
  4. web复习day03:request
  5. vue 子级拿值_vue 父组件通过$refs获取子组件的值和方法详解
  6. Python和单元测试那些事儿
  7. 签名build apk: Could not resolve all files for configuration ':app:lintClassPath' 问题
  8. sublime中编译的sass如何改变css输出风格?【这里有答案】
  9. 微信小程序中 tabbar的icon图标格式大小
  10. 从事前端多年,我是这样看待三大框架的
  11. VS 查看dll接口
  12. 【转载】DXUT进阶
  13. Mac怎么连接多个蓝牙音箱?
  14. gogs 迁移外部仓库
  15. hash算法_Hash 一致性算法的 Java 实现
  16. python win32com 字体选择_用python的win32com模块替换word中的文字搞定批量打印奖状...
  17. 【LKJ】LKJ2000型记录装置显示界面说明
  18. localhost:3000 拒绝访问解决办法
  19. 《如何克服社交焦虑》- (美)埃伦·亨德里克森著;冯晓霞译
  20. 河南自考本科英语可用计算机代替,河南自考改革:选2至3门专业课可代替英语课程...

热门文章

  1. IDEA下SpringBoot项目的引用类没问题却提示:java:找不到符号:类**位置:程序包
  2. Input框设置只能输入中文
  3. POI实现Excel导出时常用方法说明
  4. SpringBoot入门实战项目各阶段目录
  5. springboot-springmvc请求参数获取与原理【长文预警,收藏慢啃】
  6. 软考-信息系统项目管理师-项目集管理
  7. 在Flutter中更快地加载您的图像资源
  8. Flutter面试常见开发问题
  9. matlab偶极矩电场强度分布图_1.2.10 电介质在外电场下的极化、电极化强度、电极化率...
  10. html5时钟代码菜鸟课程,html5绘制时钟动画