自己总结 给初中级JAVA准备的面试题,致竞争激烈的秋招面试( 二 )


6.IO相关bio,nio区别要熟知,了解nio中的ByteBuffer,Selector,Channel可以帮助面试者度过不少难关 。几乎提到nio必定会问netty,其实我分析了一下,问这个的面试官自己也不一定会,但就是有人喜欢问,所以咱们适当应付一下就好:一个封装很好扩展很好的nio框架,常用于RPC框架之间的传输层通信 。
7.反射聊一聊你对JAVA中反射的理解:运行时操作一个类的神器,可以获取构造器,方法,成员变量,参数化类型…使用案例如Hibernate,BeanUtils 。
8.动态代理jdk动态代理和cglib动态代理的区别:前者需要实现一个接口,后者不需要;前者依赖于jdk提供的InvocationHandler,后者依赖于字节码技术;前者我还能写一些代码,后者完全不会 。大概就这些差别了 。
开源框架

自己总结 给初中级JAVA准备的面试题,致竞争激烈的秋招面试

文章插图
 
9.Tomcat我没看过源码,除了老生常谈的双亲委托类加载机制,似乎只能问一些相关参数了 。
10.Spring比较烦的一件事便是:当我还没问全:“聊一聊你对Spring的理解”这句话时,部分面试者的脸上已经浮现出了笑容,并迫不及待的回答:AOP和IOC 。这本无可厚非,但一旦这成了条件反射式的回答,便违背了面试的初衷 。
在面试中,Spring从狭义上可以被理解成Spring Framework&SpringMVC 。而广义上包含了Spring众多的开源项目,如果面试者连http://spring.io都没有访问过,私以为是不应该的扣分项 。
【自己总结 给初中级JAVA准备的面试题,致竞争激烈的秋招面试】Spring常见的问题包括:Spring Bean的scope取值,BeanFactory的地位,@Transactionl相关(传播机制和隔离级别),SpringMVC工作流程
11.SpringBootSpringBoot是当今最火的框架之一了,其starter模块自动配置的思想是面试中经常被问到的 。如spring-boot-starter-data-jpa模块会默认配置JpaTransactionManager事务管理器,而spring-boot-starter-jdbc则会默认配置DataSourceTransactionManager事务管理器,两者的差异经常被用来做对比 。@ConditionalOnMissingBean,@ConditionalOnBean等注解作用也需要被掌握 。
12.JPA&HibernateORM的思想
懒加载如何配置以及意义
级联如何配置,什么时候应该使用级联
一级缓存:Session级别的缓存
@Version的使用:数据库的乐观锁
13.数据库这里的数据库还是以传统的RDBMS为主,由于存储过程,触发器等操作一般在互联网公司禁止使用,所以基本传统数据库能问的东西也并不多 。
1.索引的分类有哪些?面试者可以尝试自己分类回答 。索引和唯一索引;聚集索引和非聚集索引;数据结构可以分为Hash和B+树索引;单列索引和联合索引 。常见的索引问题还包括(A,B,C)的联合索引,查询(B,C)时会不会走索引等一些数据库的小细节 。
2.事务ACID的描述和隔离级别 。
3.MySQL的explain查询分析也是面试的重点对象,一条分析结果的查询时间,影响行数,走了哪些索引都是分析的依据 。
4.如果面试官问到存储引擎,说实话也有点为了面试而面试的感觉,掌握基本的InnoDB和Myisam的区别即可 。
5.互联网公司可能会比较关心面试者对分库分表的掌握:mysql自带的sharding为什么一般不使用?中间件级别和驱动级别的分库分表,sharding-jdbc,cobar,mycat等开源组件的使用,分布式ID和分库键的选择也备受面试官的青睐 。
14.Redis这个的确很热,这年头不熟悉Redis真不好意思说自己是干互联网的 。
1.Redis的常用数据结构,这不用赘述了 。
2.Redis的持久化策略 。了解RDB和AOF的使用场景即可 。
3.Redis的发布订阅 。
4.列举Redis的使用场景 。这个可以自由发挥,除了主要功能缓存之外,还包括session共享,基于Redis的分布式锁,简易的消息队列等 。
5.了解Redis的集群和哨兵机制 。
6.高级话题包括:缓存雪崩,缓存失效,缓存穿透,预热等 。
15.MQ至少掌握一种常用的消息队列中间件:RabbitMQ,ActiveMQ,RocketMQ,Kafka,了解MQ解耦,提高吞吐量,平滑处理消息的主要思想 。常见的面试问题包括如下几点:
1.列举MQ在项目中的使用场景
2.消息的可靠投递 。每当要发生不可靠的操作(如RPC远程调用之前或者本地事务之中),保证消息的落地,然后同步发送 。当失败或者不知道成功失败(比如超时)时,消息状态是待发送,定时任务轮询待发送消息表,最终一定可以送达 。同时消费端保证幂等 。也有朋友告诉过我RocketMQ中事务消息的概念,不过没有深入研究 。


推荐阅读