看完助你拿Offer
Editor's Note
本文来自读者投稿!希望对要大家有帮助,同时也欢迎各位投稿。丰厚奖励哦!
The following article is from bestsort的秘密基地 Author bestsort
2.24, 我获得了我春招开始投递简历以来的第一个 Offer
先说一下故事背景~
笔者21届双非二本本科, 在校期间参与过 ACM 但是成绩较差:省赛银,区域赛当炮灰(简历没写),B组C/C++蓝桥国二(因为竞赛成绩差所以就只有用蓝桥充数了~其实大厂一般不会看蓝桥成绩的),去年9-11月花两个月时间写了个Demo(只写了一半不到吧,因为有很多功能其实都没写,这个在项目README里能看到)。
到目前为止已经面试的有京东(上周末一面结束)、阿里(提前批CBU二面刚面完,ICBU一面凉)、字节(一面凉,这是第一次参加的面试,体验极差~)
这里我试着总结一下我自己在面试过程中所遇见的问题和思考吧
如果需要进入CVTE(目前我只拿到了这个Offer,所以只能用这个举例,而且我是实习,校招这种会更难一点点)这样的公司的话大致需要以下几点(下面列出的大概有六分之一我面试的时候也不会~)
原始知识积累
这里指的原始知识是一些常见的概念。比如我要应聘web后端研发,那么需要知道的应该有以下知识:
MySQL(事务、索引、存储引擎) Java基础(常用的集合类、JVM、Java基础语法、并发编程) 常用的中间件(Redis) 计算机网络(TCP/IP、HTTP等) 一点点项目经验
以上所有点,都基本需要保证自己能够针对某一点不间断的描述20分钟左右干货(比如MySQL的事务就可以算做一点)。这里总结一下上面知识问的比较高频的部分
MySQL
事务 事务特性(ACID) 事务的隔离级别(读未提交、读已提交、不可重复读、序列化) 分别能解决哪些问题(脏读、不可重复读、幻读丢失修改) MVCC(多版本并发控制) 事务的回滚( undo
、redo
日志)索引 索引有哪几种 索引的底层实现,b+树和红黑树的比较、和b树的比较 索引失效 索引优化策略 explain
慢查询优化存储引擎 MyISAM 和 InnoDB 的区别 两者之间索引结构的区别 各自的使用场景 锁(共享锁、排他锁、行锁、表锁、间隙锁) SQL语句(常见聚类函数的使用、表连接查询)
Java基础
集合类 HashMap 和 ConcurrentHashMap(基本上是场场必问,需要了解源码) ArrayList、LinkedList、TreeMap、LinkedHashMap、HashSet等需要了解底层数据结构和各容器之间的优劣势 HashMap 和 ConcurrentHashMap在JDK不同版本的改动以及原因(JDK1.7、JDK1.8) 常见基础(这个很多,可以参考其他面经,我这里只提几个比较经典的) String为什么不可变 String、StringBuilder、StringBuffer的对比 接口和抽象类的区别 单例模式(几种实现方式的区别最好具体了解下,因为从这里可以问到JVM中的内存结构和JVM对于多线程的一些处理策略) JVM(较重要) 类加载机制 常见GC算法 JVM内存模型 JVM运行时内存区域 常见垃圾收集器(主要是CMS、G1,知道ZGC并且能说出原理是加分项) 常见的启动参数 JVM内存溢出的分析过程 锁(主要是 synchrized
、volatile
这两个关键字在JVM中执行的行为)并发编程 创建线程的几种方式 线程池原理以及参数含义 死锁产生条件以及解决策略 J.U.C下部分类源码阅读 Lock接口下实现的锁和 synchrized
关键字的比较, 还有各自的优缺点AQS(抽象队列同步器)
Redis(一般是结合项目问)
常见用途 底层数据结构(SDS、字典、跳跃表、链表、压缩数组、整数列表这几个都需要了解) RDB 和 AOF 两种不同备份方式的比较以及优缺点(从各自原理、性能、稳定性答) 跳表和红黑树之间的比较(从插入效率、实现方式、内存消耗以及特殊条件查询几方面进行比较) SDS和原始字符串的比较(从缓冲区溢出、扩容方面答) 字典和HashMap的比较(扩容方式、扩容大小)
计算机网络
TCP(需要深入了解) TCP头部(大概知道头部能够传递哪些信息,常用的部分需要记住占据了多少bit) 三次握手四次挥手(具体到两端之间的状态) 每一次握手挥手失败的处理 拥塞控制(慢开始,快重传、拥塞避免、快恢复) 流量控制(零窗口的含义、接受窗口的协商) Nagle(糊涂窗口综合症) 常见的攻击(SYN泛洪攻击、DDoS) HTTP Get 和 Post 的比较 Session 和 Cookie 的比较 常用的 HTTP 头部 常用的 HTTP 状态码 HTTP1.0、1.1、2.0三个版本各自的特性 HTTPS中的SSL握手过程 常见的攻击(CSRF、XSS)
简历
首先简历是非常非常重要的,作为技术岗, 简历上跟技术无关的东西要一笔带过, 同时不推荐写学生会相关经历, 因为面试过程中有一面是你入职后的直属leader担任面试官,而且对学生会经历不看好的比看好的人多。简历中可多列举技术点,比如写了熟悉Java基础,最好写上能够证明的东西,比如熟悉Spring框架,曾深入剖析过Spring-Core源码
这样子。不要干瘪瘪的只写个熟悉MySQL
上,这样会让面试官很难发挥,只能天南海北的问。如果撞到你会的点上最好,如果没撞上亏的是自己。我这里也可以给大家做简历参考,信得过我的话可以把简历发送至me@bestsort.show
,当然我也只是根据我的经验提出相应的建议,不一定全部正确。
有个人博客且内容比较充实的的可以将博客地址放在明显位置,加分的~
交流
在面试过程中,很重要的一点就是和面试官的交流了,如何去把一个事物在几乎没有准备的情况下清晰地描述出来(描述的时候不支支吾吾,一句话内不要大量出现然后
、就是
、emmm
这样的词汇), 如果碰见不会的,千万千万不要口胡, 技术面的面试官一般来说只要问了你这个问题,就说明他是知道答案的,随意信口开河的话给人的观感很差。要知道每一轮面试表现都会记录,Offer的发放是根据几轮面试情况综合考评的。如果不清楚这一方面的知识的话,直接给面试官说明即可
项目
项目是非常重要的,我在投递阿里提前批的时候面试官就建议我们:项目经验哪怕是拿课设改改都行,千万别空着,包括打ACM的同学也是。 当然,项目最好不是Demo、不是商城/秒杀。商城、秒杀可能是很多人都会跟着视频做的一个项目,但是面试官见过的肯定比你多的多,如果你是面试官,遇到了一群抄一样答案的你会怎么办?而且个人商城、秒杀这一类项目有一个巨大的缺点:没法落地。没法落地就代表这个项目没经过实际环境的考验,而没落地的项目对大厂而言其实本质上和Demo没太大区别,都是Demo,为啥不做一个其他比较稀有的东西呢?自己凭能力去写一个简陋的web server,绝对能秒杀商城、秒杀这一类。
如果有项目的话,面试官一般都会结合项目问问题,一般比较常问的有
项目的架构(总览全局的能力) 项目中遇到的困难(考察技术水平和实践能力) 项目中对于某些问题的想法(考察思考问题的方式以及是否全面) 某些实际问题的分析(最常见的就是项目中遇见的OOM怎么去排查)
武汉加油!中国加油!