目录
for update 和 for update nowait 的区别
jvm学习计划
一个jvm专栏
https://zhuanlan.zhihu.com/p/34426768https://zhuanlan.zhihu.com/p/34426768
自定义类加载器
http://blog.csdn.net/qq_36071795/article/details/83715456
maven优先原则:
- maven依赖最短路径优先原则:
一个项目Demo依赖了两个jar包,其中A-B-C-X(1.0) , A-D-X(2.0)。由于X(2.0)路径最短,所以项目使用的是X(2.0)。
- pom文件中申明顺序优先
如果A-B-X(1.0) ,A-C-X(2.0) 这样的路径长度一样怎么办呢?这样的情况下,maven会根据pom文件声明的顺序加载,如果先声明了B,后声明了C,那就最后的依赖就会是X(1.0)。
-
覆写优先
子pom内声明的优先于父pom中的依赖。
maven依赖冲突处理:
第一声明优先原则
路径近者优先原则
排除原则:比如配置slf4j,它会同时下载log4j相关的jar,但版本又不够新,这时可以排除它们
版本锁定:。在dependencyManagement元素中声明所依赖的jar包的版本号等信息,那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,然后使用它指定的版本号
动态规划
背包问题讲解:https://www.jianshu.com/p/a66d5ce49df5,https://blog.csdn.net/mu399/article/details/7722810两个一起看更好dong
什么是RestTemplate
传统情况下在java代码里访问restful服务,一般使用Apache
的HttpClient
。不过此种方法使用起来太过繁琐。spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate
。
使用restTemplate
访问restful接口非常的简单粗暴无脑。(url, requestMap, ResponseBean.class)
这三个参数分别代表 请求地址、请求参数、HTTP响应转换被转换成的对象类型。
RestTemplate方法的名称遵循命名约定,第一部分指出正在调用什么HTTP方法,第二部分指示返回的内容。本例中调用了restTemplate.postForObject
方法,post
指调用了HTTP的post方法,Object
指将HTTP响应转换为您选择的对象类型。
nacos相关问题
nacos的作用:
Nacos从官方的介绍上看,就像是SpringCloud中Eureka+Config+Bus+Git+MQ的一个结合体
1.服务的注册,发现和健康检测,类似有eureka,Nacos支持基于DNS和基于RPC的服务发现,服务端可以通过SDK或者Api进行服务注册,相应的服务消费者可以使用DNS或者Http查找的方式获取服务列表。Nacos同时提供对服务的实时健康检查,阻止想不健康的主机或服务发送请求,与Eureka类似Nacos也有友好的控制台界面。
相关组件对比https://blog.csdn.net/fly910905/article/details/100023415
2.动态配置服务 类似javaconfig ,接触过SpringCloud应该对config有所了解,那么配置中心也就很好理解,Nacos支持动态的配置管理,将服务的配置信息分环境分类别外部管理,并且支持热更新。不过与Config不同,Nacos的配置信息存储与数据库中,支持配置信息的监听和版本回滚。
相关组件对比https://lixinkuan.blog.csdn.net/article/details/108616975
3.动态DNS服务
支持权重路由,更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。不过这个特性目前版本还不支持
4.服务及元数据管理
Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。
SpringCloud项目中接入Nacos作为配置中心
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
seata分布式事务
seata是阿里开源的一个分布式事务框架,能够让大家在操作分布式事务时,像操作本地事务一样简单。一个注解搞定分布式事务。譬如你有两个微服务,一个是库存模块StorageService,一个是订单模块OrderService,主业务是用户下单,然后需要分别调用上面的两个服务,完成减库存、用户扣款和下单操作。由于两个服务是不同的服务,并且是不同的数据库,那么这就是一个典型的分布式事务场景。我们希望要么全部成功,要么全部失败。那么要完成这次分布式事务,只需要在对应方法上加个
第一步:初始化一个全局事务的实例,该实例拥有一个唯一的id,称之为XID,这个XID会在整个分布式事务的各个服务间流转。作为这一次分布式事务的唯一标识。
第二步:开启全局事务,设置超时时间等属性,以避免拿不到锁时,无限的等待。
第三步:执行逻辑,(具体的各个服务,执行各自的本地事务)。如果任何一个服务的本地事务出现异常,则进入回滚全局事务。如果回滚成功,就抛出那个本地事务失败的异常。如果回滚全局事务失败,则抛出异常原因。
第四步:标记该次全局事务状态为完成,通知各单体服务该次事务已经完成,请继续下一步。各单体服务收到该请求后,会立刻返回成功,然后异步删除之前本地事务前保存的回滚信息。
list.clear和list=null的区别
list.clear不会回收list对象,list=nullhui'会回收。
对称加密算法和非对称加密算法的区别
对称加密只有一对密匙,即加密和解密公用一个密匙,
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息
MySQL的自定义查询数据,filed函数
讲一讲懒汉和饿汉模式?
https://zhuanlan.zhihu.com/p/33102022,这个讲的很好。
https://www.cnblogs.com/zumengjie/p/12198758.html,双检锁,枚举,内部类的优劣
package Singleton;
public class LazySingleton {
//懒汉式单例模式 比较懒,在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢 这
//种synchronized关键字的做法是很最简单的,但是性能较差,对象的创建实际只有一次,剩下的其实都是获
//取,但是却要在获取时也要同步。
private static LazySingleton intance = null;//静态私用成员,没有初始化
private LazySingleton(){ //私有构造函数 }
public static synchronized LazySingleton getInstance() //静态,同步,公开访问点
{
if(intance == null){
intance = new LazySingleton();
}
return intance;
}
}
/*懒汉式-双检查锁
将synchronized转移到方法中,假如有10条线程进入方法内,如果判断==null,也只能有一个线程进入同步代码块,进入代码块后再次判断是否==null第一个线程会将对象实例化。而后来的9条线程判断!=null就不会再次创建。第二次再来10条线程,则第一个if判断都不会通过,所以不会进入synchronized代码块也不会造成线程串行。大大的解决的性能问题。*/
public class LazySingleton {
private String name = "张三";
private LazySingleton () {
}
private static LazySingleton computer = null;
public static LazySingleton getInstance() {