Java教程

Java面试2021,【备战2020金三银四

本文主要是介绍Java面试2021,【备战2020金三银四,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

从zk获取注册地址是个集合,需要使用一定的负载算法获取其中的某一个来调用。

3.在什么样的场景下@Transactional会失效?如何解决?

答案:在spring容器中,在一个类内部A方法和B方法都加了@Transactional注解,如果A方法中直接调用B方法,则B方法的事务会失效;可以使用AopContext获取当前对象的动态代理,避免B方法事务失效的问题。

4.对服务器进行心跳检测,如果服务器在线则30s之后再次发起心跳检测,如果服务器不在线,发送短信通知并停止心跳检测,这个场景如何实现?

答案:通过定时任务线程池ScheduledExecutorService的scheduleAtFixedRate方法启动线程每隔30s ping一次服务器,启动之后scheduleAtFixedRate方法会返回当前线程的异步执行结果的引用Future,如果服务器在线,线程会每隔30s触发一次,如果服务区不在线则通过Future.cancel停止本次心跳检测。

5.MyBatis打开调试模式之后,能打印sql语句等信息,这是怎么实现的?实现过程中使用了什么设计模式?

答案:在mybatis的日志模块中,通过动态代理为jdbc的接口无侵入性的增强了日志能力,其本质是使用代理模式,其中ConnectionLogger负责打印连接信息和SQL语句,PreparedStatementLogger负责打印参数信息,ResultSetLogge负责打印数据结果信息。

6.MyBatis是如何为二级缓存动态添加日志、同步控制、阻塞、缓存淘汰策略等附加能力的?用了什么设计模式?

答案:二级缓存使用了装饰器模式为缓存能力添加附加能力的,在缓存模块中有8个装饰器,分别为缓存添加日志、序列化、同步、阻塞等等能力的装饰器,可以在运行期非常灵活的为二级缓存进行增强。

7.多线程编程对我们有什么实际意义?

答案:按照我们一般的业务实现,我们会在一个方法中调用所有相关的业务方法。这种实现带来的问题有什么?
第一,耦合,所有相关的业务方法成了一个业务流程上的必不可少的一步,前面的流程断了,后面的就没法走,整个业务就无法完成,但是有些业务方法其实并不是业务流程上必不可少的一环,是否执行,执行是否成功对业务影响并不大;第二,业务流程上有几个步骤,这个处理时间就是这几个步骤时间的相加,业务越多,步骤越多,处理时间当然就越多。那怎么解决这个问题?让这些业务并行起来而且减少相互之间的关联?当然是请出我们的线程,既可以解耦,又可以提高性能。

8.在单体应用中,使用加锁机制能解决我们所有的线程问题吗?

答案:不能,加锁有可能会造成我们的程序死锁和活锁,同时,synchronized如果加锁不正确,也不能保证数据的线程安全。

9.Netty高性能表现在哪些方面?

答案:IO 线程模型:同步非阻塞,用最少的资源做更多的事。

内存零拷贝:尽量减少不必要的内存拷贝,实现了更高效率的传输。

内存池设计:申请的内存可以重用,主要指直接内存。内部实现是用一颗二叉查找树管理内存分配情况。

串形化处理读写:避免使用锁带来的性能开销。即消息的处理尽可能在同一个线程内完成,期间不进行线程切换,这样就避免了多线程竞争和同步锁。表面上看,串行化设计似乎CPU利用率不高,并发程度不够。但是,通过调整NIO线程池的线程参数,可以同时启动多个串行化的线程并行运行,这种局部无锁化的串行线程设计相比一个队列-多个工作线程模型性能更优。

高性能序列化协议:支持 protobuf 等高性能序列化协议。

高效并发编程的体现:volatile的大量、正确使用;CAS和原子类的广泛使用;线程安全容器的使用;通过读写锁提升并发性能。

10.MyBatis是怎么通过mapper接口访问数据库?

答案:mybatis是通过sqlSession这个入口才能访问数据库;首先通过动态代理在内存中生成mapper接口的实现类,实现类中的方法要做三个翻译,第一将请求转发给sqlsession中指定的方法,第二拼接sql语句的唯一标识(namespace+id),第三传递查询参数;通过这三步翻译,基于sqlSession完成对数据库的访问。

最后

提供一下免费的Java架构学习资料给大家,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

需要的朋友可以戳这里免费领取

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
在这里插入图片描述

这篇关于Java面试2021,【备战2020金三银四的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!