面试一般控制在30-60分钟。考察技术、稳定性、抗压力、沟通、是否能融入团队、学习接受新事物、逻辑思维能力等方面。并能初步判断候选人的基本性格。
一、 开场
一般来说,在面试开始时先对自己(面试官)做个简要介绍。缓和开场气氛。
二、 面试
1、 技术
让候选人做个简单自我介绍,了解基础背景,根据需要延伸下交流,比如大学的专业情况,对专业的认识,学了哪些课程,学习情况,对自己的工作是否有帮助等。
接下来开始技术方面的沟通,最好准备从初级、中级、高级、资深、架构一系列层级的备选问题。可以从简单的问题入手,一直延伸到符合候选人级别的深度或者更高的深度。例如,从java中的集合开始,有哪些集合(初级),哪些同步/异步、线程安全,分别对应什么样的数据结构(中级),hashmap的底层实现,源码分析,concurrenthashmap底层实现(高级)。可以基于项目经验考察一部分技术,再考察一部分之外的。借此了解候选人学习能力、是否愿意接受新知识愿意改变。
2、 项目经验
基于项目经验,挑选最近的几个项目来了解候选人实际在项目中发挥的作用。什么职责,负责具体哪些事项,解决了哪些问题(技术或者非技术)。
项目中实际遇到哪些困难,怎么解决的
项目中做得最成功最自豪的事
通过项目学到了哪些新知识新技能
是否独立解决过问题,是否有压力,如何排解压力(抗压力)
3、 非工作方面(学习、自我学习)
平时关注哪些信息
最近在看哪些书,看过什么书
4、 工作经历
前几家公司的情况,在公司的定位
辞职原因
和同事的相处交流怎样,如何融入一个新团队
选择新公司的理由
找工作更看重哪些方面(薪资、个人发展、技术提升)
个人的职业发展规划、人生规划(稳定性)
对行业的了解(稳定性)
期望在本公司工作多久(稳定性)
家庭状况(稳定性)
对加班的看法
多久能来上班
5、 候选人提问题
最后留5分钟左右给候选人提问题,并介绍下公司、项目、业务、所用技术栈等
三、 能力分级
初级:java基础概念(三大特征、构造函数、重载、重写、封装、继承、多态、接口)、关键字、基本数据类型、String、集合,了解常用的框架spring系列、mybatis、hebinate、Struts等。能按文档实现增删改查等需求
中级:数据结构(堆、栈、队列、数组、树、图等)、算法(查询、插入、删除操作等每个数据结构的性能,排序算法),以上掌握大部分知识并能在实际中使用,例如项目中哪些场景用到过arraylist、linkedlist或者其他的数据结构或者算法。掌握spring系列、mybatis等框架的核心原理,及实现细节。常见的组件redis、Dubbo、Kafka、zookeeper等的了解掌握程度。垃圾回收机制。多线程、线程池的使用,如何保证线程安全、volatile、Java锁机制。类装载机制。反射机制。常用的设计模式(单例、工厂等)。能承担简单模块的设计实现,会考虑性能等。
高级:独立解决工作中的实际问题。JVM及调优。掌握各种常用框架,组件。线程。NIO。掌握大部分的设计模式并可以在实际中使用。掌握分布式技术。掌握单点登录、缓存、消息、负载均衡等解决方案。可以解决性能优化(java、数据库脚本)问题。