Java面试题总结(乱序版,Java高并发编程详解深入理解pdf

private int id;

private String name;

private int age;

}


<bean id="CustomerBean" class="com.Customer">

	<property name="person">

		<bean class="com.person">

			<property name="id" value=1 />

			<property name="name" value="素小暖" />

			<property name="age" value=18 />

		</bean>

	</property>

</bean>

```



 九、Spring 框架中的单例 Beans 是线程安全的么?

-------------------------------



Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Spring bean并没有可变的状态,所以在某种程度上说Spring的单例bean时线程安全的。如果你的bean有多种状态的话,比如view model,就需要自行保证线程安全啦。



最浅显的解决办法就是将多态bean的作用域由singleton变更为prototype。



十、如何集成 Spring Boot 和 ActiveMQ?

------------------------------



ActiveMQ简介,了解就好,继承暂不做解释了。



MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目。



(1)特点: 



*   支持多种语言编写客户端 

*   对spring的支持,很容易和spring整合 

*   支持多种传输协议:TCP,SSL,NIO,UDP等 

*   支持AJAX 



(2)消息形式: 



*   点对点(queue) 

*   一对多(topic) 



十一、如何使用 Spring Boot 实现分页和排序?

----------------------------



使用Spring Data Jpa可以实现将可分页的传递给存储库方法。



十二、hibernate 实体类可以被定义为 final 吗?

-------------------------------



可以将hibernate的实体类定义为final,但这种做法不好。



因为hibernate会使用代理模式在延迟关联的情况下提高性能,如果你把实体类定义成final类之后,因为Java不允许对final类进行扩展,所以hibernate就无法再使用代理了,如此一来就限制了使用可以提升性能的手段。



不过,如果你的持久化类实现了一个接口,而且在该接口中声明了所有定义于实体类中的所有public的方法的话,就能避免出现前面所说的不利后果。



十三、mybatis 有哪些执行器(Executor)?

----------------------------



1、mybatis有三种基本的Executor执行器:



(1)、SimpleExecutor



每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。



(2)、PauseExecutor



执行update或select,以sql做为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而且放置于Map内,供下一次使用。简言之,就是重复使用Statement对象。



(3)、BatchExecutor



执行update,将所有sql通过addBatch()都添加到批处理中,等待统一执行executeBatch(),它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理。与JDBC批处理相同。



2、作用范围:



Executor的这些特点,都严格限制在SqlSession生命周期范围内。



3、Mybatis中如何指定使用哪一种Executor执行器?



在mybatis的配置文件中,可以指定默认的ExecutorType执行器类型,也可以手动给DefaultSqlSessionFactory的创建SqlSession的方法传递ExecutorType类型参数。



十四、char 和 varchar 的区别是什么?

-------------------------



1.  char的长度是固定的,varchar的长度的可变的;

2.  char的效率比varchar的效率高;

3.  char占用空间比varchar大,char在查询时需要使用trim;



十五、float 和 double 的区别是什么?

-------------------------



1、float 和 double 的区别是什么?



(1)内存中占有的字节数不同



单精度浮点数在内存中占有4个字节;



双精度浮点数在内存中占有8个字节;



(2)有效数字位数不同



单精度浮点数有效数字8位;



双精度浮点数有效数字16位;



(3)数值取值范围不同



单精度浮点数的表示范围:-3.40E+38~3.40E+38



双精度浮点数的表示范围:-1.79E+308~-1.79E+308



(4)在程序中处理速度不同



一般来说,CPU处理单精度浮点数的速度比双精度浮点数的速度快



如果不声明,默认小数是double类型,如果想用float,要进行强转;



2、例如



float f = 1.3;会编译报错,正确的写法是float f = (float)1.3;或者float a = 1.3f;(f或F都可以不区分大小写)



3、注意



float是八位有效数字,第七位会四舍五入;



4、面试题



(1)java中3\*0.1==0.3将会返回什么?true还是false?



答:返回false,因为浮点数不能完全精确的表示出来,一般会损失精度;



(2)java中float f = 3.4;是否正确?



答:不正确。因为3.4是双精度浮点数,将双精度赋给单精度属于向下转型,会造成精度损失,因此需要强制类型转换float=(float)3.4;或者写成float f = 3.4f;



十六、Redis,什么是缓存穿透?怎么解决?

----------------------



1、缓存穿透



一般的缓存系统,都是按照key去缓存查询,如果不存在对用的value,就应该去后端系统查找(比如DB数据库)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。



2、怎么解决?



*   对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert之后清理缓存。  

     

*   对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该Bitmap过滤。



3、缓存雪崩



当缓存服务器重启或者大量缓存集中在某一时间段失效,这样在失效的时候,会给后端系统带来很大的压力,导致系统崩溃。



4、如何解决?



*   在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其它线程等待;

*   做二级缓存;

*   不同的key,设置不同的过期时间,让缓存失效的时间尽量均匀;



十七、说一下 jvm 有哪些垃圾回收器?

--------------------



[说一下 jvm 有哪些垃圾回收器?](

)



前一篇:[Java面试题总结(乱序版,2020-08-31)](

)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值