如何考察一个人的技术水平

面试时,除了候选人技术水平不行,候选人技术水平还不错的选项之外,有一大部分是介于两者之间,有的能答上来,有的则答不上来。

怎么才能正确预估一个人的技术水平呢?

原则是面试题不能太偏,最好都是一些必备的内容,一位的追求新技术,高层框架往往不能静下心来思考自己在做什么。

基础内容之外,增加一些扩展的内容,查看候选人知识的广度。

Java基础

面试的目的不是为了看候选人懂多少技术,最基础的东西,往往反映的就是一个人学习的态度,是否沉得下心来,在平时工作之余了解下自己为什么这样写?

基础好的人,才能更容易应对上层复杂难题。

  • 集合:Arrays.asList。List.subList。HashMap实现原理,ConcurrentHashMap实现原理
  • 多线程:线程池执行原理,volatile和synchronized。线程的状态切换,线程池中工具类
  • 额外:java正则,加密模块,反射
  • 常见排序算法,之间的区别

JVM

Java进阶部分内容,高级开发必备知识,如果连JVM都不了解,那么开发时确实学习主动性不够。

  • 类的加载机制 :加载、链接(验证、准备、解析)初始化、使用、卸载。类加载器分类及其应用程序类加载器、自定义加载器。
  • jvm内存结构:程序计数器、堆、虚拟机栈、本地方法栈、方法区(Java8已移除)、元空间(Java8新增)的作用及基本原理
  • GC算法: 垃圾回收。对象存活判断
  • GC分析 :命令调优 JVM内存参数设置及调优

存储

MySQL

  • 理解至少两种数据库引擎(Inndb/Mysiam)的差异性
  • 熟悉索引的内部数据结构,熟悉常见的索引方式(Btree,hash),和索引类型(unique,full text,normal)
  • 会使用explain分析SQL语句,会优化SQL语句
  • 熟悉一种NOSQL,知道内部实现原理(内部数据结构,在算法优化,内部机制)
  • 掌握分布式数据库的知识,分表,分库,分区,分布式事务等,可以学习一个数据库中间件(TDDL/COBAR)熟悉高并发、大数据情况下的数据库开发。

Redis

  • Redis支持的数据类型,使用过这些数据类型做过什么
  • redis的数据淘汰策略
  • Redis的持久化机制,AOF及RDB
  • Redis哨兵原理
  • 缓存穿透,缓存雪崩及如何处理

框架

  • 认真看过SSM框架中的那部分知识点,能不能说下其中的内容?
  • IOC和AOP,AOP实现原理?
  • 事务实现原理? 涉及到那些关键的类
  • 自定义Spring Boot starter
  • MVC请求流程

分布式

  • 分布式系统包含那些组件,常见的组件替换关系,用过那些组件
  • 常见的分布式协议
  • 如何自己设计一个RPC框架

额外

  • 测试框架
  • 高并发框架
  • 平时是如何解决问题的?
  • 平时是如何学习的?

最后

这上面问完,估计也有一个小时了,多听,多去分析对方说了什么,而不是对方不知道那些东西。目的是为了挑选一个合适的人,而不是其它。

推荐阅读更多精彩内容