关于面试的思考
作者:互联网
19年准备面试的时候的一些思考,虽然现在看来也不算全面,但也能说明当时的思考方式
如果我作为一个面试官,从面试官的角度出发,对于一个技术人员我会考查什么能力?
三个层次
- 能否完成工作(及格 B)
- 能否更好地完成工作(良好 A)
- 能否提高当前业务上限(优秀 S)
能否完成工作
招人的目的是干活,所以一个最基本的原则是这个人能够正常完成日常工作,那么能正常完成工作都需要些什么能力呢,个人总结如下:
- 技术栈匹配
- 良好的沟通能力,避免无效沟通,例如x-y问题
- 良好的工作习惯,也就是效率,不能偷懒
技术栈匹配
需要熟练使用各项工具,能够运用各种工具快速且正确地完成日常需求,对于java人员来说,需要能够熟练使用的工具有:
- 基础工具类,例如git,maven等
- java 的各项基础技能,例如io(字节,字符,File类)、集合类、线程、线程池、原子类、锁(AQS)
- 开发企业级java项目必备的Spring framework,Spring-boot
- 必要的mysql技能,以及至少一个同数据库交互的orm框架,例如mybatis
- 同分布式服务相关的RPC框架,分库分表中间件,限流降级中间件、缓存、消息队列、zookeeper
- 如果是web开发的话,还得会springMVC,tomcat等
能否更好地完成工作
更好地完成工作是指在完成工作的过程中或者是在开始工作前就能够洞悉到自己写的代码未来可能产生的影响,例如代码上线之后对机器性能的影响,对上下游业务调用qps的影响,以及在某些场景下可能出现的bug,例如并发场景下的死锁,db的慢sql等,同时当问题发生时需要能够快速地识别问题点,并且给出合理的解决方案。
那么按照上述的要求,我梳理了以下几点能力:
- 对自己所使用的工具原理以及常见的坑得有一定的了解,例如:
- tomcat的运作方式,线程池大小默认是多少
- spring是怎么实现DI和AOP的,生命周期是什么样的,有循环依赖怎么办
- mybatis是怎么封装并调用JDBC的,如何避免SQL注入
- RPC服务是如何实现远程调用的,服务发现怎么做,负载均衡怎么做,网络通信如何实现,通信协议如何定义
- MQ的实现原理又是什么,能否顺序消费,能否保证消息不丢失,如何保证高吞吐量
- 缓存方面,redis的原理是什么,为什么会很快,能否持久化,如何持久化
- zk方面,zk如何保证数据一致性,选举算法是什么
- mysql方面,sql的执行过程,acid,事务隔离,sql优化等,如果是分布式的场景还要明白主从同步的原理,以及分库分表的常用策略等
- 关于限流降级框架,要明白是如何限流以及如何降级,降级后如何恢复等
- 对基础知识要有一定的掌握,例如:
- 操作系统的一些基础知识,如何判断当前机器的负载,以及当发生内存泄漏时如何判断是哪个进程出现了内存泄漏,如何定位具体是什么原因导致的内存泄漏等
- 网络部分的知识,4层7层,如何做负载均衡,以及tcp/ip协议簇等
- 对常用的设计模式和架构知识有一定的了解,例如
- 模板、装饰、代理、责任链等
- DDD 相关的思想
- 编码规范等
能否提高当前业务上限
这一点自己也没能做到,所以就提一些想象中应该有的能力:
- 前沿知识的掌握,或者全栈知识的掌握,掌握前沿知识可以利用技术发展大幅提供生产效率,并且能够从技术发展趋势来影响未来业务发展的能力,给业务反馈,用技术反哺业务
- 强悍的逻辑思维能力,能够在短时间把一个很复杂的业务链路梳理清楚,并分析出其中的可优化点
标签:例如,完成,如何,工作,面试,能否,关于,思考,限流 来源: https://blog.csdn.net/kep159/article/details/115414904