面试一直是程序员跳槽时期非常热门的话题,虽然现在已经过了金三银四跳槽的旺季,但正值毕业季,下一轮金九银十也不远了,而当跳槽季的时候你再看这篇文章可能已经晚了,过冬的粮食永远不是冬天准备的,而是秋收的时候。
简历是你进入面试的敲门砖,也是留给意向公司的第一印象,所以这个很重要,必须在这上面做足了文章,一份优秀的面试简历是整个面试成败的重中之重,我们会详细分析如何准备简历才能保证简历不被刷掉。
简历通常有这几部分构成:
今天这里重点讲一下专业技能、工作经历跟项目经历。
对于程序员的专业技能其实就是技术栈,对于自己的技术栈如何描述是个很难的问题,比如什么算是精通?什么算是了解?什么是熟悉?
关于对技术技能的描述有很多种,有五种的也有三种的,而且每个人对词汇的理解都不一样,我结合相关专家的理解和自己的理解来简单阐述下描述词汇的区别,我们这里只讲三种的了解、熟悉、精通。
我们就以Vue这个框架为例,如果你可以用vue写一些简单的页面,单独完成某几个页面的开发,但是无法脱离公司脚手架工作,也无法独立从0完成一个有一定复杂度的项目,只能称之为了解。
如果你有大量运用vue的经验,有从0独立完成一定复杂度项目的能力,可以完全脱离脚手架进行开发,且对vue的原理有一定的了解,可以称之为熟悉。
如果你用vue完成过复杂度很高的项目,而且非常熟悉vue的原理,是vue源码的主要贡献者,亦或者根据vue源码进行过魔改(比如mpvue),你可以称得上精通。
那么有两个坑是候选人经常犯的,『杂』和『精』,这种两个坑大量集中在应届生和刚毕业每两年的新手身上,其主要特点是『急于表现自我』、『对技术深度与广度出现无知而导致的过度自信』。
首先说说杂,比如你要应聘一个Java后端,老老实实把自己的java技术栈写好就行了,强调一下自己擅长什么即可,最好专精某领域比如『高并发』、『高可用』等等,这个时候一些简历非要给自己加戏,自己会的不会的一股脑往上堆,什么逆向、密码学、图形、驱动、AI都要体现出来,越杂越好,这种简历给人的印象就是个什么都不懂的半吊子。
再说说精,一个刚毕业的应届生,出来简历就各种精通,精通Java、精通Java虚拟机、精通spring全家桶、精通kafka等等,请放心,这种简历是不会没头没脑投过来了,这种在大学里就精通各种的天才早被他的各种学长介绍进了大厂或者外企做某某Star重点培养了,往往看到的这种也是半吊子。
给大家一个技术栈模板:
这样写的后果就在于让面试官一眼就看出你是个吹牛的半吊子,那些各种精通的全才在业界早就出名了,根本不可能还在投简历。
工作经历本身不用花太多笔墨去写,面试官主要想看的就是每段工作经历的持续时间、在不同公司担任的职责如何、是否有大厂的工作经验等等。
那么什么简历在这里给面试官减分呢?
所以,如果你有频繁跳槽的经历怎么办?在本公司老老实实等到满一年再跳槽。
如果常年初级岗怎么办?想办法晋升或者参与一些业界知名项目,再或者写一个有一定复杂度的私人项目。
如果有末流公司经历怎么办?如果是很久以前的末流公司经验可以直接不写,也没人在乎你很早之前的工作经历,如果你现在就在末流公司,赶紧想办法跳槽,去不了大厂,去非知名的互联网公司也算是胜利大逃亡了。
不建议任何形式的简历造假,如果去一些大厂,分分钟背调出来,与其简历造假,不如现在就行动起来,比如从现在到年底跳槽季,深度参与一个知名开源项目或者做一个有一定复杂度的私人项目绰绰有余,除非996.
项目经历不管对于社招还是校招都是重中之重,很多时候成败就在于项目经历这块,一个普通本科可以通过优秀的项目经历逆袭985,一个小厂的员工也可以获得大厂的面试机会。
但是必须要说一下项目经历的编写很讲究,这是为后面面试部分铺路的绝佳机会,也是直接让你的简历扑街的重点沦陷区域。
先说容易让简历扑街的几个坑位。
项目经历流水账写法是绝大多数简历的通病,通篇下来就讲了一件事『我干了啥』。
大部分简历却是这样的:
用Vue、Vuex、Vue-router、axios等技术开发电商网站的前端部分,主要负责首页、店铺详情、商品详情、商品列表、订单详情、订单中心等相关页面的开发工作,与设计师与后端配合,可要高度还原设计稿。
这个描述有什么问题?
其实看似也没啥问题,但是这种流水账写法太多了,完全无法突出自己的优势展现自己的能力。
项目经历是考察重点,面试官想知道候选人在一次项目经历中扮演的角色、负责的模块、碰到的问题、解决的思路、达成的效果以及最后的总结与沉淀。
而上面的描述只显示了『我干了啥』,所以这种项目描述几乎是没意义的,因为对于面试官而言他看不到有效信息,没有有效信息的项目描述基本就没价值了,如果这个时候你还没有大厂经历或者名校背书,基本上也就凉了。
堆积项目这种现象往往出现在没有什么优秀项目经历的简历身上,候选人企图以数量优势掩盖质量的劣势,其实往往适得其反,项目经历的一栏最好放2-3个项目,非常优秀的项目可能放一个就足够了,举个极端例子如果有一天尤雨溪写简历,其实只需要在项目经历那些一行『Vue.js作者』就行了,当然,他并不需要投简历。
有一些项目切忌放上去:
如果只放两个项目,最好的搭配是一个公司内部挑大梁的项目和一个社区内的开源项目,后者之所以可以占据一席之地,是因为通过你的开源项目,面试官可以通过commit完整看到你的创造过程,比如工程化建设、commit规范、代码规范、协作方式、代码能力、沟通能力等等,这甚至比面试都有用,没有比开源项目更能展示你综合素质的东西了。
一个项目做没做过只要是有经验的面试官一问便知,如果你真的靠假项目忽悠过了面试,那这个公司八成也有问题,人才把关不过硬,你可以想象你的队友都是什么水平,在这种公司大成长价值也不大。
好,如果你说实在没项目可写了,我只能造假了,那么你应该想一下这多层追问。
比如你说你优化了一个前端项目的首屏性能,降低了白屏时间,那么面试官对这个性能优化问题会进行深挖,来考察候选人的实际水平:
面试官多层追问的逻辑是这样的:
了解背景 -> 了解方案 -> 深挖方案 -> 模拟场景
首先得了解你性能优化的指标如何,接着需要了解你是这么测试的指标、再怎么进行针对性优化的,再接着提出一些其它解决方案考察你对优化场景的知识储备和方案决策能力,最后再模拟一个其它的业务场景,来考察你的技能迁移能力,看看是否是对某块领域有一定的了解,而不是只针对某个项目。
如果要真的在面试现场对答如流,那么一定是在某一块领域有一定知识储备的人,不是随随便便搞个项目就能蒙混过关的。
合格的项目经历必须要有以下几点:
如果你不怕字太多,还可以选择性加入解决方案、选型思路等等,但是由于篇幅限制和为面试铺垫就不太建议写得太多。
项目概述的目的是让面试官理解项目,不是每个人面试官都做过你的那种项目,所以需一个简述方便面试官理解。
个人职责就是告诉面试官你在本项目中扮演的角色,是领导者?主导者?还是跟随者,你负责了哪些模块,承担了多大的工作量,以此来评估你在团队中的作用。
项目难点的目的在于让面试官看到你碰到的技术难题,方便后续面试对项目进行一系列讨论。
工作成果就很明显了,面试官需要看到你在做了上述工作到底达成了什么成绩,这个时候最好以数据说话,比如访问量、白屏时间等等。
这个时候也切忌展开长篇大论,把技术细节一个个写上去,甚至还写了心路历程的都是大忌,一方面篇幅太大会造成视觉混乱,另一方面面试官想看到的是『简』历,不是技术总结,面试官要面对上百份简历没那么时间来看你长篇大论,长篇大论大可以在面试中展开。
最好的方法就是一行文字简单得说清楚即可,反正项目面的时候一定会问到,到时候好好把你准备的内容讲给面试官,掌握面试的主动权就是从项目经历这一栏中开始。
还在找工作的小伙伴,莫慌!我这里整理了一套超全的面试资料:1592道大厂Java真题+4份超过万字的面试解析。大致内容包括了:Java 集合、JVM、多线程、并发编程、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat等技术栈,现在分享给你们,希望对你们有帮助。
1、什么是面向对象?
2、JDK JRE JVM
3、==和equals比较
4、hashCode与equals
5、final
6、String、StringBuffer、StringBuilder
7、重载和重写的区别
8、接口和抽象类的区别
9、List和Set的区别
10、ArrayList和LinkedList区别
11、HashMap和HashTable有什么区别?其底层实现是什么?
12、ConcurrentHashMap原理,jdk7和jdk8版本的区别?
13、什么是字节码?采用字节码的好处是什么?
14、Java中的异常体系
15、Java类加载器
16、双亲委托模型
17、GC如何判断对象可以被回收
1、线程的生命周期?线程有几种状态
2、sleep()、wait()、join()、yield()的区别
3、对线程安全的理解
4、Thread、Runable的区别
5、对守护线程的理解
6、ThreadLocal的原理和使用场景
7、ThreadLocal内存泄露原因,如何避免
8、并发、并行、串行的区别
9、并发的三大特性
10、volatile
11、为什么用线程池?解释下线程池参数?
12、简述线程池处理流程
13、线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?
14、线程池中线程复用原理
1、如何实现一个IOC容器
2、spring是什么?
3、谈谈你对AOP的理解
4、谈谈你对IOC的理解
5、BeanFactory和ApplicationContext有什么区别?
6、描述一下Spring Bean的生命周期?
7、解释下Spring支持的几种bean的作用域。
8、Spring框架中的单例Bean是线程安全的么?
9、Spring 框架中都用到了哪些设计模式?
10、Spring事务的实现方式和原理以及隔离级别?
11、spring事务传播机制
12、spring事务什么时候会失效?
13、什么是bean的自动装配,有哪些方式?
1、Spring Boot、Spring MVC 和 Spring 有什么区别
2、SpringMVC 工作流程
3、Spring MVC的主要组件?
4、Spring Boot 自动配置原理?
5、如何理解 Spring Boot 中的 Starter
6、什么是嵌入式服务器?为什么要使用嵌入式服务器?
7、mybatis的优缺点
8、MyBatis 与Hibernate 有哪些不同?
9、#{}和${}的区别是什么?
10、简述 Mybatis 的插件运行原理,如何编写一个插件。
1、索引的基本原理
2、mysql聚簇和非聚簇索引的区别
3、mysql索引的数据结构,各自优劣
4、索引设计的原则?
5、什么是最左前缀原则?什么是最左匹配原则
6、锁的类型有哪些
7、InnoDB存储引擎的锁的算法
8、关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过?
9、事务的基本特性和隔离级别
10、ACID靠什么保证的?
11、什么是MVCC
12、分表后非sharding_key的查询怎么处理,分表后的排序?
13、mysql主从同步原理
14、简述MyISAM和InnoDB的区别
15、简述mysql中索引类型及对数据库的性能的影响
16、mysql执行计划怎么看
1、RDB 和 AOF 机制
2、Redis的过期键的删除策略
3、Redis线程模型、单线程快的原因
4、简述Redis事务实现
5、redis集群方案
6、redis 主从复制的核心原理
7、缓存雪崩、缓存穿透、缓存击穿
1、CAP理论,BASE理论
2、负载均衡算法、类型
3、分布式架构下,Session 共享有什么方案
4、简述你对RPC、RMI的理解
5、分布式id生成方案
6、分布式锁解决方案
7、分布式事务解决方案
8、如何实现接口的幂等性
9、简述ZAB 协议
10、简述zk的命名服务、配置管理、集群管理
11、讲下Zookeeper watch机制
12、zk和eureka的区别
13、Spring Cloud和Dubbo的区别
14、什么是Hystrix?简述实现机制
15、springcloud核心组件及其作用
16、Dubbo 的整体架构设计及分层
1、简述RabbitMQ的架构设计
2、RabbitMQ如何确保消息发送 ?消息接收?
3、RabbitMQ事务消息
4、RabbitMQ死信队列、延时队列
5、RabbitMQ镜像队列机制
6、简述kafka架构设计
7、kafka怎么处理消息顺序、重复发送、重复消费、消息丢失
8、Kafka在什么情况下会出现消息丢失及解决方案?
9、Kafka是pull?push?优劣势分析
10、Kafka中zk的作用
11、简述kafka的rebalance机制
12、Kafka的性能好在什么地方
由于篇幅有限,这里只展示部分内容,所有的资料大家自行扫二维码领取!