Java面试总结

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?

  • 上界通配符和下界通配符的作用?为什么要用呢?

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!!!

 

你可能感兴趣的:(面试,面试)