面试专栏

目录

jvm学习计划

一个jvm专栏

自定义类加载器

maven优先原则:

maven依赖冲突处理:

动态规划

 什么是RestTemplate

nacos相关问题

nacos的作用:

SpringCloud项目中接入Nacos作为配置中心

seata分布式事务

list.clear和list=null的区别

对称加密算法和非对称加密算法的区别

MySQL的自定义查询数据,filed函数

讲一讲懒汉和饿汉模式?

讲一讲工厂模式

什么是Docker?

数据库如何加锁?

for update 和 for update nowait 的区别

什么是jwt

fegin调用失败策略

如何保证消息不被重复消费?(消息队列消费的幂等性)

MQ积压几百万条数据怎么办?

如何保证消息的高可用?

如何保证消息传输可靠性

rabbitmq

(1)生产者弄丢了数据

(2)rabbitmq弄丢了数据

(3)消费端弄丢了数据

Spring事务传播级别和事务隔离级别

rabbitMQ相关面试题

redis实现分布式锁

如何保证MySQL和redis的数据一致性?

线程间如何通信?

使用rabbitMQ实现30分钟未支付订单取消。

使用redis实现30分钟未支付ding订单取消

库存超卖

购物车实现

缓存穿透、缓存击穿、缓存雪崩区别和解决方案


 


 


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/a66d5ce49df5https://blog.csdn.net/mu399/article/details/7722810两个一起看更好dong

 什么是RestTemplate

传统情况下在java代码里访问restful服务,一般使用ApacheHttpClient。不过此种方法使用起来太过繁琐。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,主业务是用户下单,然后需要分别调用上面的两个服务,完成减库存、用户扣款和下单操作。由于两个服务是不同的服务,并且是不同的数据库,那么这就是一个典型的分布式事务场景。我们希望要么全部成功,要么全部失败。那么要完成这次分布式事务,只需要在对应方法上加个

@GlobalTransactional注解注解即可。

第一步:初始化一个全局事务的实例,该实例拥有一个唯一的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() {
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值