秋招总结
[TOC]
前言
2021届秋招基本结束,谨以此文做一下梳理与沉淀。
仅限技术栈为后台开发。
2020-11-27 By SeaSon
秋招结果
个人情况本科、硕士都是双非一本,坐标北京,论学校和学历的话并不占优势,实习的时候基本身边都是北邮、北交及以上的同届同学。但是也希望和我一样的学校并不出彩的同学不要放弃,付出总会得到回报的。
有过三家大厂实习:滴滴(Java)、字节(Golang)、阿里(大数据),技术栈不算窄。在实验室也是团队负责人,带过项目。
总的来说,有优势也有劣势,这次整理一是沉淀一下秋招的收获,二是分享给大家,如果可以给大家带来一些帮助,也是我心中所愿。
秋招offer主要集中在互联网公司:阿里SP、腾讯SP、快手SSP、美团SP、京东SP、滴滴、小米。
国企银行部分也有一定的收获,但是相比互联网的结果,不算成功。总的来讲国企银行更看重综合实力,技术能力只是评估指标之一,学历与院校水平占据更多的主导地位。
面试情况总结
语言
互联网公司校招对语言没有硬性要求,如果语言对口,会针对语言进行一些基础知识的测试。但是如果语言不对口,不会因此直接拒绝,会从其他方面进行更全面的综合基础测评。
Java类较多的公司:阿里、美团、京东、快手、小米
Java类较少的公司:腾讯(基本无Java,主要C++/Golang/Python)、滴滴(主要Golang/php)、百度(主要C++/php)、字节跳动(主要Golang、Python)
计算机基础
计算机基础是面试中的重点,能让面试官了解到你对整个计算机体系的了解程度,尤其面试非语言对口的公司与部门时,如果计算机基础不过关可能会被直接淘汰。
数据结构与算法
数据结构是重中之重。基础数据结构需要深刻掌握,并且拥有代码实现能力;部分高级数据结构需要有一点的了解与理解。
- 基础数据结构:顺序表(数组)、链表(单向、双向、循环等各种)、栈、队列、树(以二叉树为基础)、图(主要是一些关于图的搜素算法)、哈希表、堆等。
- 高级数据结构:红黑树、线段树、跳表、前缀树、并查集等。
算法。算法与数据结构应一起学习,要可以在算法中熟练运用各种数据结构。国内互联网算法面试普遍不是很难(但是笔试难度有些大厂很难)。基本上属于LeetCode中中等或简单级别的题目。下面针对公司说明一下。
- 字节跳动:字节对算法要求较高,笔试难度很大,面试难度一般讲也超过大厂平均水平。进入字节需要对算法有较深刻的理解。秋招因为个人原因没有参加字节的面试,但是拿过字节的暑期实习offer,结合其他同学面试反馈看:
- 面试要求手撸代码,不接受口嗨。
- 题目对面试者有较深的考察,通常需要掌握高级数据结构。
- 阿里巴巴:阿里笔试算法2道题,难度较高,但是笔试不好不代表没有面试机会。面试中个别部门要求手撕(如阿里云),大部分部门视频面试无代码窗口,接受口嗨。面试中算法难度中等,但是个人经验,阿里面试中不是非常注重算法能力,甚至没有算法题。
- 腾讯:腾讯笔试题目较多,难度较高。面试中对算法依然有较高要求,我当时是现场面试,要求纸上手撕代码,要求代码完整性,难度中等。
- 京东:京东今年大部分部门采取电话面试,但是有的回合会进行电话+在线编程界面的形式,对算法考量程度中等,难度不高,中低水平,题目很多集中在《剑指Offer》中。
- 其他:其他几家大厂基本都采用牛客的在线面试程序,每回合基本都有算法涉及,但是难度均不太高,题目大部分集中在《剑指Offer》中。
计算机网络
计算机网络。互联网面试中,计网的参与度同样很高,软件开发部分主要集中在整体网络体系、应用层、传输层层面,很少下探到底层,不过有个别现象,比如京东二面中被问到了载波监听与多路访问。最基础的常备知识点如下:
- 5层、4层、7层网络体系结构。
- 一次www.baidu.com的浏览器检索,发生了什么。
- http与https
- http1.0/1.1/2.0区别
- tcp与udp
- 三次握手、四次挥手
- 滑动窗口、拥塞控制、快速重传等
操作系统
操作系统。在面试中操作系统的问题不算多,因为这门课下探的话深度太深,面试官也不好尝试,甚至有的面试官也不太熟。一些常备问题有了解就好,多看些面经,当然如果可以深入,你讲出来就是你的亮点。举个例子,进程和线程的区别中,大家都会提到一条线程切换比进程切换要快,但是如果可以讲出为什么快,进程切换做了什么,线程做了什么那自然是加分项了。最基础的常备知识点:
- 进程和线程的区别
- 几种IO模型
- select、poll、epoll
- 进程、线程的几种状态;状态转换等
- PV操作
- 进程通信的方式
- 分段分页
计算机组成原理
计算机组成原理。这门知识很贴近硬件,面试中单独提问的基本很少,如果时间有限可以战略性放弃。但是有时间如果可以补充的话为最好,其中一些底层运算机制能帮助梳理整体计算机体系,并且涉及到的汇编语言、机器指令也可以很有效的帮助理解高级语言。
数据库原理
互联网面试中,对数据库的考察偏重实际应用,很少涉及到书本上的数据库原理层面(如关系代数等知识),但是一些常见问题,如三大范式,依然在考察之中。
关系型数据库,选择一种深入了解即可,推荐MySQL。要对存储引擎、事务控制、索引优化等知识的原理和使用都深入了解。并且需要拥有一定的SQL能力,面试会出现很多场景SQL题与索引优化题。问题举例:
- MySQL中都有哪些存储引擎,有什么区别。
- ACID代表什么,脏读、幻读、不可重复读是什么,如何解决。
- 索引有哪些种,什么区别。索引结构有哪些,如何实现,什么区别。
语言框架
其实每个大厂都会有一套或者多套自己的生态环境,入职后都需要进行再学习。但是针对你选择的面向对象语言,要对语言生态有一定的了解,常用的开源框架核心功能的使用与原理都在大厂的考察范围内。
我的主语言是Java,所以这里说一些Java需要掌握的框架。
Spring
Spring已经不再是一个框架,而是一个生态了。Spring旗下的各种框架需要有一定的了解和研究,如:Spring、SpringBoot、SpringMVC等。问题举例:
- Spring的IOC和AOP
- SpringBoot是如何实现自动配置的
- SpringMVC的请求流程
MyBatis或Hibernate
做Java开发的同学必不可少需要涉及至少一种持久层框架。总的来讲,目前MyBatis用的比较多,但是擅长Hibernate也是可以的。这块知识其实面试中不会很多,但是偶尔也会提到一两句,普遍偏应用方向,原理层面也会有部分涉及,所以复习程度要自行斟酌。
中间件与分布式
这部分知识不是必须的,应届生在学校中往往没有实际应用场景,所以可能会欠缺这方面知识,这个时候实习就显得很重要了。这部分知识往往是提升面试面评的最佳之选,上述的内容可能你掌握不牢便属于不合格范畴,是合格与不合格之间的评判标尺。而这部分内容便是合格与优秀之间的评判标尺。当然,这方面复习要根据时间、基础等条件斟酌决定。
Redis
Redis基本已经成为基础必备知识,Redis的常用方向、数据结构(分为表层数据结构和底层数据结构)、分布式部署模型、缓存相关的内容、分布式锁等。
RPC
RPC框架有很多,想进入大厂甚至想取得大厂SP的话,至少对一种RPC框架(如Dubbo、Thrift等)有一定了解,并且要对微服务的架构有一定的认识。并且要对一些数据传输的底层协议、注册中心监控中心的原理、负载均衡算法等有一定了解。
面试题目类型
面试中面试官所问的问题有几类,可以对这些类问题加以区分,针对性复习。
- 基础知识类:这种问题一般是结构化的,答案基本固定。答出正确答案是基本及格的,有条理的表达给面试官是优秀的。
- 算法编程类:考验代码基本功,通常需要电脑上编写、纸上手写、口述思路等。
- 算法题目:例如写一个快速排序。
- 设计类编程题目:例如写一个DCL的单例模式。
- SQL类:给你几个表,做一个统计分析。
- 开放性题目:这类题目因人而异,有的同学认为最难,有时一句话都说不出。但是有的人认为最简单,能滔滔不绝。这种题同样也是区分度很大的题型,可以划分出及格和优秀。如果不擅长这类题型需要自我进行训练,多看面经,总结自己的回答策略,其实无非那几种。举例:
- 如果让你设计一个qps 10w级别,数据量日均1000w的秒杀系统,你如何设计?
- 现在有一个系统是单机部署,现在突然访问高峰期,需要提高性能,你如何操作与设计?
- 线上服务非常卡顿,用户请求响应超过预期,你觉得是什么原因,如何定位,如何解决?
写在最后
受疫情影响,今年的秋招是相对较难的,hc的紧缩伴随着难度的提升都让人很头疼。互联网秋招基本结束,也正是因为今年视频面试的形式导致很多offer聚集在同一个人手里,所以补录和春招势必会空出名额。祝大家都可以找到心仪的工作。
欢迎指正交流。
有疑问加站长微信联系(非本文作者)