< 返回技术文档列表

JAVA中高级的面试题有哪些

发布时间:2021-11-07 03:16:24⊙投诉举报

本篇内容介绍了“JAVA中高级的面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

什么是悲观锁,乐观锁。 他们有什么区别?

悲观锁: 认为一定会有资源的竞争的情况出现。因此对资源进行加锁,
只有持有锁的访问者才可以对其进行访问,
否则就需要等待资源锁的释放,获取到锁才可以对资源进行访问。

乐观锁:并发访问资源,不会产生冲突,产生数据不一致的情况。
不需要对其加锁,判断当版本号匹配才可以对其进行修改。

区别: 悲观锁对资源进行加锁,性能低下,可能会出现死锁。
乐观锁:性能高效,但是当版本号不匹配的时候,需要重试	
		
		
		
		
		
		
什么是sql注入?如何防范sql注入?

非法的恶意的SQL命加入到请求参数里面,最终让数据库执行恶意的SQL命令

		
预防: 
1 。程序过滤恶意SQL命令。转义特殊字符		
2. 不要动态拼接SQL,PreparedStatement采用参数化赋值
3.  配置应用的数据库权限
		
		
		
		
	https://blog.csdn.net/qq_41685990/article/details/89316575	
	https://www.cnblogs.com/lansetuerqi/p/12807891.html
spring的事务传播行为有哪些?
		
	
1. 当前如果没有事务,则创建一个事务。 propagation_required 

2. 当前如果不存在事务,则抛出异常  .  propagation_mandatory

3. 当然如果不存在事务,则不使用事务。如果存在则使用当前事务 propagation_supports


4. 如果存在事务,则挂起当前事务,创建一个新的事务  propagation_required_new 

5.  以非事务运行,如果当前事务存在,则挂起当前事务  propagation_not_supported 

6. 以非事务运行,如果当前存在事务,则抛出异常     propagation_never

7. 如果当前事务存在,新建一个新的嵌套事务运行 。当前不存在事务,则创建一个事务   propagation_nested



假设一个接口的DB操作包含写日志和业务处理,如何让写日志一定会成功。

代码逻辑: 先执行写日志,再执行业务处理。
接口开启事务propagation_required ,接口里面的 写日志使用propagation_required_new 
这样 当写日志异常,执行业务处理也不会执行。
当执行业务处理异常回滚,那么 写日志因为是在一个新的事务里面将不受影响因此写日志成功






https://www.jianshu.com/p/8f576982f574
https://blog.csdn.net/wangpeifeng669/article/details/26403119
“组合优先于继承“,这种描述是否正确,请给出自己的分析?

不正确。看业务需求!具体情况具体分析。

组合灵活,易于扩展。如果业务复杂,多变,
比如 根据不同条件进行各种不一样的处理 或者业务模型多种多样,那么就使用组合。
否则随意组合,会导致过度设计,增加程序复杂度。


继承适用于父类改动少,子类依赖于父类的属性或者方法,子类自身属性少或者不需要扩展的情况






使用Redis时,如何保证数据的一致性,请给出自己的分析?

1. 如果并发不高的情况下,就使用先删除缓存再删除数据库数据。
相对于先删除数据库数据,再删除缓存来说出现数据不一致的问题大大减低。
先删除数据库的话,如果删除缓存失败,那么数据就是错误的。
如果先删除缓存的话,那么下次查询就可以去查询数据库获取最新的数据。


2. 高并发的情况下:
通常的解决方案是,如果我们需要使用一个线程安全队列来缓存更新或删除的数据,
当 A 操作变更数据时,会先删除一个缓存数据,
此时通过线程安全的方式将缓存数据放入到队列中,
并通过一个线程进行数据库的数据删除操作。
当有另一个查询请求 B 进来时,如果发现缓存中没有该值,
则会先去队列中查看该数据是否正在被更新或删除,
如果队列中有该数据,则阻塞等待,直到 A 操作数据库成功之后,
唤醒该阻塞线程,再去数据库中查询该数据。
但其实这种实现也存在很多缺陷,
例如,可能存在读请求被长时间阻塞,高并发时低吞吐量等问题。

如果数据更新比较频繁且对数据有一定的一致性要求,通常不建议使用缓存。
	
		
		
		
常见算法以及: 算法的 复杂度 https://www.cnblogs.com/zwtgyh/p/10631760.html		


mysql 的 三种 log 的作用 : https://blog.csdn.net/lhanson/article/details/82752883


https://www.jb51.net/article/69676.htm
mysql 索引类型: 普通索引,唯一索引 , 全文索引(MyISAM支持), 主键索引,联合索引 

索引方法: hash, btree 


https://blog.csdn.net/weixin_33686714/article/details/91894377
mysql  执行计划type类型: https://www.jianshu.com/p/b5c01bd4a306

type 访问类型,表示找到所查询数据的方法,该属性的常见值如下,性能从好到差:

NULL:无需访问表或者索引,比如获取一个索引列的最大值或最小值。
system/const:当查询最多匹配一行时,常出现于where条件是=的情况。system是const的一种特殊情况,既表本身只有一行数据的情况。

eq_ref:多表关联查询时,根据唯一非空索引进行查询的情况。
ref:多表查询时,根据非唯一非空索引进行查询的情况。

range:在一个索引上进行范围查找。
index:遍历索引树查询,通常发生在查询结果只包含索引字段时。
ALL:全表扫描,没有任何索引可以使用时。这是最差的情况,应该避免。




spring IOC与AOP 的原理:

https://www.jianshu.com/p/78ba8bafb90a



描述你对微服务架构的理解:





openFeign 与 RestTemplate 的区别 ?




微服务的 gateWay 网关如何 修改 响应内容? 




redis 常见数据结构,  hashmap 的使用场景 ? 




微服务的 服务注册中心的 命名空间 是什么 ?




微服务 配置信息的 热加载 更新配置 ? 





准备SQL 题 (牛客网上面有) :
比如  组织表如果 递归查询 子组织信息 等。 即 查询出来所有的组织树信息
https://www.cnblogs.com/chywx/p/9420726.html
https://blog.csdn.net/qq_34120430/article/details/84969235
1、 如果在组织表中间一个字段维护当前组织的所有父级信息那么将会非常省事
2、 或者建立一张组织的父子关系表或者视图!关联查询即可
3、 否则就是建立对应的函数了
4、 一般组织表都会记录其所有父级的数据,比如 tree_code 以逗号分隔存储其所以的父ID
就可以 使用联合查询来达到效果了
SELECT sf1.org_name, sf1.tree_code from sso_framework sf1
where sf1.id=27
UNION 
SELECT sf2.org_name, sf2.tree_code from sso_framework sf2
where sf2.tree_code like '%,27,%'
UNION 
SELECT sf2.org_name, sf2.tree_code from sso_framework sf2
where sf2.tree_code like '27,%'
UNION 
SELECT sf2.org_name, sf2.tree_code from sso_framework sf2
where sf2.tree_code like '%,27'












常规的java 题目也是需要准备的(牛客网上面有) , 熟悉 java的 基础类比如 list ,hashmap 等信息 :






kafka 是什么? 和其他MQ的区别



多线程: 多线程的参数 , 举例说一下 使用到的场景




分布式事务 比如 MQ如何实现 , setea , tcc  等





什么是同步锁? 什么是偏向锁, 还有哪些锁? 等



spring boot 常用注解 有哪些?

“JAVA中高级的面试题有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注血鸟云网站,小编将为大家输出更多高质量的实用文章!


/template/Home/Zkeys/PC/Static