0. 废话
三年对于一个程序员来说,真的是一个黄金时间段,有技术,有项目经验,正值年轻力壮的时候。可惜我的找工作之路却异常艰难。原因我总结了两点:
①出自外包
②太菜,无敌菜,超级菜
希望大家慎入外包,不一定所有的外包都不好,但是外包真的不稳定,另一方面掌握不到核心技术。
1. 面试官考察的点
-
基础知识
-
业务场景处理能力
-
项目管理能力
-
思维逻辑能力
2. 基础知识
2.1 JavaSE部分
-
String,StringBuilder和StringBuffer的异同?String为什么设置为Final?
-
HashMap和Hashtable的区别
-
HashMap和ConcurrentHashMap的区别,为什么说HashMap不安全?
-
Hashmap的put过程?为什么支持key和value为null?如何解决hash冲突?
-
Synchronized和Volitale的区别,最好能说说Synchronized的原理
-
线程同步的几种方式?详细说说ReentrantLock,AQS的原理
-
序列化的意义?transient的作用?
-
线程池的几个重要参数?线程池的原理?实际项目中有用到线程池么?参数如何设置的?拒绝策略有几种?
-
JDK1.8的新特性?Stream的操作了解么?工作窃取模式是什么?Optional的好处?Lambda?
-
反射中ClassforName和ClassLoader的区别?
-
BIO和NIO的原理?Java实现NIO的API?
-
<? extends T>上界通配符和<? super T>下界通配符的作用?为什么要用呢?
2.2 Spring
-
SpringIoc的原理,用到的设计模式
-
SpringAop的原理,用到的设计模式
-
Spring Bean的生命周期?
-
如何在Bean初始化完成后,可以实现自己的业务逻辑?
-
Spring底层的数据结构
-
SpringMVC的访问流程
-
@Requestbody和@RequestParam的异同
-
@Autowired和@Resource的区别
-
Spring事务的隔离级别?Spring事务的传播行为?
-
如何实现自定义拦截器
-
Restful的优势?
2.3 SpringBoot
-
SpringBootApplication注解由哪些组成,各代表什么含义
-
如何写一个Starter
2.4 SpringCloud
-
SpringCloud Eureke的原理?
-
Ribbon和Feign如何配置,Feign的超时时间和Ribbon以及Hystrix的配置的关系?
2.5 数据库(MySql/MongoDB/Elasticsearch)
-
Left Join、Inner Join、Right Join的区别
-
数据库常用的函数
-
Mysql的InnoDB和MyIsam的区别?
-
SQL语句如何优化?
-
索引的分类?为什么创建索引?哪些字段适合创建索引?哪些不适合?什么情况下索引失效?
-
在命中多个索引的情况下,优化器如何决定选择哪个索引?
-
如何分析SQL语句的性能?Explain的关键字段?如何查看慢查询SQL?
-
数据库事物的特性?数据库隔离级别?Mysql乐观锁和悲观锁的实现方式?
-
ElasticSearch如何实现分词?如何实现AND,OR,LIKE的?如何实现Mysql和ESS?
-
Mysql如何主从复制?分库分表?
-
如何从Mysql中查询出来100w条数据
2.6 Redis
-
Redis如何持久化
-
Redis的数据结构有几种?各种操作的命令是什么?
-
Redis缓存击穿如何解决?如何解决超过过期时间但是事务未结束?
-
Redis如何在Linux上部署?Redis-Sentinel实现原理?
-
如何保证在Redis中的数据都是热点数据?
-
Redis事务的相关指令?含义?
2.7 消息中间件
-
ActiveMQ如何保证持久化?
-
消息的发送有几种模式?
2.8 分布式事务
-
CAP理论
-
Base理论
-
实际项目中用到的分布式事务?
2.9 JVM
-
JVM的内存模型
-
垃圾回收算法?
-
常用的垃圾回收器?G1和ZGC有了解么?垃圾回收的过程?
-
常用的查看GC的命令?经常设置的参数是多少?默认值是多少?
-
OOM应该如何分析?如何定位到具体的代码?
2.10 Docker&Linux
-
Docker两个容器之间如何连接?如何通讯?
-
如何查看CPU状态、磁盘、进程状态?日志如何查询某一部分?
2.11 其他
-
需求分析文档应该如何书写?
-
概要设计文档应该如何书写?
-
UML图的作用,用例图?类图的关系有几种?
3. 业务场景处理能力
-
订单,库存,支付微服务?如何保证库存?如何保证订单和支付的状态一致性?
-
微信红包功能如何实现?
-
如果系统出现了一个非常难以复现的BUG,如何处理?
-
如果某个功能实现需要其他的组配合,但是别人不配合怎么办?
4. 项目管理能力?
-
如何规划项目?
-
项目需求变更如何处理?
5. 思维逻辑能力
-
如何向盲人描述太阳的颜色?
-
64匹马,8个赛道找出跑的最快的四匹马?
自己的一点规划:
往往在一个地方呆的久了,超过3-5年,要评估一下自己是不是还适应这个社会?看到很多将近30岁的程序员,面试机会少,自己的技术栈太窄,真的是非常难。我发现在一个环境中,不论多久都不要忘记提升自己,时代在发展,想想看,5年前的技术还适应现在的状况么!加油!Fighting!!!