自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 A.compareTo(B) 的用法

当A==B 的时候 结果为 0。当A<B 时 ,结果为-1。当A>B时,结果为1。

2023-07-26 21:27:40 881 1

原创 抽象类和接口的区别

第三:从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出的父类,然后子类继承父类,而接口是根本不知道子类的存在,方法如何实现还不确定,预先定义。抽象类可以给出一些成员的实现,而接口却不包含成员的实现,抽象类的抽象成员可以被子类部分实现,接口的成员需要实现类完全实现,一个类只能继承一个抽象类,但可以实现多个接口。第二:如果行为跨越不同类的对象,可以使用接口;对于一些相似的类对象,用继承抽象类。第一:类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象。实现接口和继承抽象类并不冲突。

2023-06-18 20:45:19 49

原创 RabbitMQ面试题

给每个消息一个唯一标识,比如我们在处理支付订单的时候,每个订单有一个唯一标识,我们进行消费的时候,要现在数据库里查询一下,如果不存在数据的话,我们再进行一个消息,如果存在,那么说明消息已经被消费过了。我们当时再用户提交订单支付的时候,用到了延迟队列,我们是再RabbitMQ中安装了一个插件,这个时候我们只需要在声明交换机的时候,指定这个就是死信交换机,然后再发送消息的时候指定超时时间就行。镜像队列结构是一主多从,所有的操作都是主节点完成的,然后同步到镜像节点,如果主节点宕机后,镜像节点会称为新的主节点。

2023-05-20 14:46:20 104 1

原创 SpringBoot

在@SpringBootApplication注解里 面有一个 @EnableAutoConfiguration 注解 里面有一个 @Import注解 里面有个AutoConfigurationImportSelector的类 ,这个类实现一个导入器接口, 返回到spring容器类中的全类名。该方法内部就是读取了该项目classpath路径下的META-INF/spring。factories 文件中的全类名。它可以理解为一个启动器,包含了一系列可以集成到应用的jar包 ,不需要到处寻找示例代码和依赖包。

2023-05-20 14:42:51 80 1

原创 微服务-面试题

他也是seata默认开启的,不需要进行额外的配置,对代码也是无侵入式的。我们只需要关心自己的业务。它是CAP理论的AP方案的扩展, 它可以通过一个软状态,达到最终一致性。AT模式牺牲了一致性,保证了可用性,不过它保证了最终一致性。我们主要用到的是seata的AT模式解决分布式事务的。使用到了redisson的分布式锁实现的。注册中心/配置中心 nacos。服务保护 sentinel。服务网关 gateway。负载均衡 Ribbon。远程调用 fegin。

2023-05-20 14:42:37 52 1

原创 Spring MVC面试题

需要用到两个注解 类上@Controlleradvice 方法上@ExceptionHandler 指定异常类。cookie的存储容量比较小,一般不超过4kb,session的存储容量更大。cookie数据存放在客户端上,session数据存放在服务端上。所以cookie的安全性也是比较低的,存在被篡改和盗取的风险。

2023-05-20 14:42:18 93 1

原创 Redis面试题

然后等待订阅结果,等待时长为锁的剩余的等待时间, 若在等待时长过了还没收到订阅结果,则取消订阅,不再重试,获取锁失败 如果在等待时长内收到了订阅结果,就可以去尝试再次获取锁,还先再去计算一遍剩余等待时间,>0则去获取 锁超时: 在锁重试过程中,如果持有锁的线程在执行任务时锁到期释放了,则会被其他线程获取到锁,造成线程不安全问题,因此需要引入看门狗机制,看门狗默认的锁过期时间为30s,当执行业务时间超过10s,则会触发一个延时任务,给锁重新赋值30s有效期;我们将数据存入到布隆过滤器中,才能判断是否存在。

2023-05-20 14:41:08 67

原创 Spring面试题

Spring容器使用了工厂模式为我们创建了所需要的对象,我们不需要自己区创建,直接使用Spring 提供的对象即可。第二,A在初始化的时候需要B对象,这个走B的创建的逻辑第三,B实例化完成,也会创建ObjectFactory对象存入三级缓存。在创建bean的时候,第一步是调用构造函数实例化bean第二步是bean的依赖注入,比如一些set方法注入,像平时开发用的。这里面就封装了bean的所有信息,比如,类的全路径,是否是延迟加载,是。第六,回到A对象初始化,因为B对象已经创建完成,则可以直接注入B,A。

2023-05-20 14:40:38 38 1

原创 Java多线程

它是构建锁或者其他同步组件的基础框架常见的实现类:1.ReentrantLock 阻塞式锁 (默认非公平锁)2.Semaphore 信号量3.CountDownLatch 倒计时锁工作机制:1.在AQS中使用到了一个volatile 修饰的 state 属性来表示资源的状态,0代表无锁, 1代表有锁2.提供了一个基于FIFO(First Input First Output)的等待队列 ,类似于Monitor的entrylist。

2023-05-20 14:39:40 72 1

原创 MySQL

数据结构为B+树,他是一个多路平衡查找树,它的每层可以有多个数据指针,指向不同的节点, 并且 在每个非叶子节点上只存储了数据指针,叶子节点存储数据指针和 数据 , 并且MySQL 在叶子节点还维护了一个双向链表来更一步的提高查询某个区间内数据的效率。我们一般采用覆盖索引和子查询来进行处理, 在确定查询页数上,通过覆盖索引来查询所需要的字段id , 之后通过子查询来过滤,只需要查询这个id列表中的数据。非聚簇索引就是数据和索引是分开存储的,叶子节点上只保留了对应的主键,一般我们自己创建的索引都是非聚簇索引。

2023-05-20 14:39:10 47 1

原创 Java集合

BIO:是同步阻塞IO,每个连接就占用一个线程.以网上一个经典的烧开水的例子,帮助理解:假设有一排水壶都在烧开水,BIO的工作模式就是让一个线程停留在一个水壶上,直到这个水壶的水烧开了,再去处理下一个水壶,实际上在线程等待水壶水烧开的这段时间,啥也没做,浪费了资源,所以BIO比较慢.LinkedList 的底层数据结构是双向链表, 它在内存中的内存地址不是连续的, 所以它在查询到的时候比较慢, 但是它可以通过头插法和尾插法进行数据的增删,所以增删比较快。Set也属于单列集合,存储的也都是一个一个的元素。

2023-05-20 14:37:54 86 1

原创 Java基础

然后,他们两个的区别在于 StringBuilder 不是线程安全的,所以它的效率要比 StringBuffer 高。多数情况下建议使用 StringBuilder 但是在应用程序要求线程安全的情况下,要使用 StringBuffer ,因为它的所有公开方法都是被 Synchronized 修饰的 而 StringBuilder 并没有。只能用来比较引用和数据类型,在 Object 中的 equlas 方法底层也是通过 ==号比较地址值, 只有当重写方法之后,才会比较内容是否一样。对于equals方法。

2023-05-20 14:36:52 39 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除