12 2021 档案
摘要:1.Cloneable接口的用途 Cloneable接口是一个标记型接口,内部没有方法和属性,实现该接口表示该对象能被克隆,也就是能使用Object.clone()方法。如果一个对象没实现该接口就调用clone()方法会抛出CloneNotSupportedException异常。
阅读全文
摘要:简而言之: 1.isEmpty认为空格(无论几个)都不是空。 2.isBlank认为空格、换行符(\n)、tab都是空。
阅读全文
摘要:1.命令: show status like 'Com__' 通过该命令可以知道当前数据库是以查询为主还是更新为主。如果是查询为主,就重点查询,如果增删改多就优化写入操作。 2. explain+sql语句 查询sql语句的执行过程,通过分析过程,我们可以得到的信息如下: 哪些步骤耗费的成本比较高。
阅读全文
摘要:1.行锁和表锁 主要是为了防止并发错误,根据锁粒度划分,一般分为:行锁、表锁、库锁。 1.行锁和表锁的区别: 行锁:开销大,加锁慢,会出现死锁;锁的粒度小,发生锁冲突的概率低,并发度高。 表锁:开销小,加锁快,不会出现死锁;锁的粒度大,发生锁冲突的概率大,并发性能差。 2.悲观锁和乐观锁 1.悲观锁
阅读全文
摘要:1.http和https是什么 访问一个网站需要网站的域名,在浏览器地址栏我们可以看到一串URL: URL可以分为两部分:通信协议和域名地址。 2.http协议 http是最主流的网页协议,用于在web浏览器和网站服务器之间传递消息,以明文方式发送内容,不提供任何方式的数据加密,也就是说存在很大的安
阅读全文
摘要:1.什么是自动拆装箱 自动装箱就是将java的基本类型,比如说int类型的变量转换成Integer对象,反之从引用类型转换成基本类型就是拆箱。 看一段代码以及它的输出结果: public class Test { public static void main(String[] args) { te
阅读全文
摘要:2025.6.5 PECS原则 https://www.cnblogs.com/lori/p/16145271.html T代表一种类型。 加在类上: class SuperClass{} 加在方法上: public void fromArrayToCollection(T[] a, Collect
阅读全文
摘要:java utils logging log4j2 lockback 如果使用springboot启动器,默认使用lockback作为日志框架。
阅读全文
摘要:1.有哪些配置文件? applicatin.yml或者application.properties bootstrap.yaml或者bootstrap.properties 2.两种配置文件的区别 bootstrap由父ApplicationContext加载,比application配置文件优先被
阅读全文
摘要:导入spring-boot-devtools这个jar包。
阅读全文
摘要:1.SpringApplication类作用及run()方法作用 这个SpringApplication类整合了其他框架的启动类,只要运行这一个类,所有的整合就完成了。 调用run函数,将当前启动类的字节码传入(主要目的是传入@SpringBootApplication这个注解)以及main函数的a
阅读全文
摘要:1.什么是starter 我们可以通过starter(启动器)集成其他的技术,比如说:web,Redis,mybatis等等。可以提供对应技术的开发和运行环境。 比如:pom中引入spring-boot-starter-web,就可以进行web开发。 2.starter的执行原理 springboo
阅读全文
摘要:打包运行(jar包,一个是可运行的、一个是可依赖的) maven插件直接运行 直接运行main方法
阅读全文
摘要:springboot是基于约定优于配置思想的,在我们的实际开发中,能不配置的就不配置,让我们不用不在代码中的业务逻辑和繁重的配置之间进行思维切换,大大提高了开发效率。 版本锁定:解决了maven依赖版本容易冲突的问题,集合了常用并测试过的所有版本。比如说引入一个父工程 <!--引入父工程--> <p
阅读全文
摘要:springboot是spring的子项目,其特点就是采用了约定优于配置的思想,去调了繁重的配置,提供了各种启动器,简化了流程,更容易上手。
阅读全文
摘要:首先介绍一下CAP原则: C:Consistency-数据一致性; A:Availability-服务可用性 P:Partition Tolerance-服务对网络分区故障的容错性。 这三个特性在任何系统中不可能同时满足,最多同时满足两个,其中P是必须满足的。 简单来说eureka满足AP,zook
阅读全文
摘要:技术方面对比 springcloud功能远超过dubbo,dubbo只实现了服务治理(注册与发现)。springcloud实现了很多功能,有21个子项目。 dubbo可以使用zookeeper作为注册中心,实现服务的注册与发现;springcloud不仅可以使用eureka作为注册中心,也可以使用z
阅读全文
摘要:springboot是为了解决spring配置文件混乱、冗余、难以管理的问题,简化开发流程。 springcloud主要是解决,微服务之间的协调和配置问题,以及注册与发现、负载均衡、服务保护(熔断、网关)、通信等问题。 springcloud依赖springboot来搭建微服务,springboot
阅读全文
摘要:这是一个有关微服务治理的组件,我们的微服务很多,设计的微服务的配置也很多,那么就有两个问题了: 1.能不能集中管理微服务的配置? 2.能不能实时更新微服务的配置? Config的出现就是为了解决这两个问题,它支持配置文件放在内存中(本地),也支持将配置文件放在远程GIT仓库中。
阅读全文
摘要:1.为什么需要gateway作为网关/路由 在微服务框架中,我们各个微服务都不是直接暴露给其他服务来调用的。但假如有一个用户知道了一个服务的ip:端口号:url:访问参数,就能直接访问你,再进一步,如果这个用户开始恶意访问、恶意攻击,就会摧毁咱们的微服务系统。所以需要一个网关对我们的微服务进行保护。
阅读全文
摘要:后台系统中,微服务和微服务之间的调用可以用feign组件完成。 集成了ribbon负载均衡策略(默认是开启,使用轮询机制),hystrix熔断器(默认关闭,需要通过配置文件设置开启)。 被调用的微服务需要提供一个接口,加上@FeignClient("url") 服务调用方需要在引导类上加上服务发现注
阅读全文
摘要:1.什么是熔断器?熔断器解决问题的核心思想 有的时候,可能是网络问题,可能是一些其他问题,导致代码无法运行,服务挂掉了。熔断器就是为了解决无法正常访问服务时该进行怎样的处理而设计的。 核心思想就是,如果一个服务器挂掉,那么把相关的问题局限在这个服务中,不影响其他的服务。 2.服务降级 hystrix
阅读全文
摘要:2021.12.10 Netflix发布的开源项目。给客户端提供负载均衡,也就是说它是作用在消费端的。 默认的均衡策略是轮询策略。
阅读全文
摘要:访问权限 类 包 子类 其他包 public √ √ √ √ protected √ √ √ × default √ √ × × private √ × × ×
阅读全文
摘要:1.Eureka是什么 eureka是一个注册中心,提供服务注册与发现。有两个组件:eureka服务端和eureka客户端。 eureka服务端:作为服务的注册中心,用来提供服务注册,支持集群部署。 eureka客户端:一个java客户端,将自身的服务注册到服务端,同时将服务端的信息缓存到本地,客户
阅读全文
摘要:1.springcloud是什么 是一些列框架的集合,集成springboot,提供了很多优秀的服务:服务的发现与注册、负载均衡、网关、熔断器(服务保护机制),统一配置中心等。是一个微服务治理框架。 2.springcloud的优势 1.源于spring,其质量、稳定性、持续性都很不错。 2.天然支
阅读全文
摘要:先讲一讲架构的演变 1.单体架构(集中式架构) 项目功能比较简单,一个项目就需要一个应用,里面有多个模块,所有功能部署在一起,这样的好处是部署节点的成本比较低。 缺点:耦合性太强;开发维护困难、无法水平拓展;容错性低,并发能力差。 2.垂直拆分架构 访问量变大了,单一的应用服务无法满足需求,为了应对
阅读全文
摘要:1.数据类型 在java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,引用类型保存的是引用值,也就是地址值。 2.堆和栈 栈是运行时单元,堆是存储单元。 栈解决程序的运行问题,也就是程序如何执行,或者说如何处理数据;堆解决的是数据存储问题,即数据怎么放,放在哪。 每个
阅读全文
摘要:1.业务场景如下,两个用户捞漂流瓶,那么怎么保证在并发度很高的情况下保证两个用户不会捞到同一个瓶子? 并发场景下,一定是要加锁的,但是要使锁的粒度比较小,这样的话,就可以考虑分段式锁了。 2.为什么用户数据存在MongoDB中 见随笔。 3.jvm调优语句 见随笔。 4.token是无状态的 5.场
阅读全文
摘要:概念及特点 简单来说就是每台Redis服务器上存储不同的内容,大大节约了内存。Redis-Cluster采用无中心结构特点如下: 1.所有的Redis节点彼此互联(通过PING-PONG机制)。 2.内部使用二进制协议优化传输速度和带宽。 3.一个节点的fail是通过集群中半数以上的节点都检测到失效
阅读全文
摘要:哨兵模式是干啥的? 1.监控主、从服务器是否正常工作。 2.主服务器出现故障自动将从服务器升级为主服务器。 工作方式 每个Sentinel(进程)以每秒一次的频率向整个集群中的主服务器、从服务器和其他哨兵发送PING请求。如果说一个实例在设置时间之内没有返回响应,这个实例就会被该哨兵标记为主观下线。
阅读全文
摘要:主从复制的原理 从服务器向主服务器发送SYNC(同步)请求。主服务器收到这个请求之后,(这个时候就不是单线程啦)开始生成RDB(快照文件),并且使用缓冲区记录之后所有的写操作命令。快照文件生成完毕之后,主服务器,向从服务器发送快照文件,这期间也继续记录执行过的写命令。从服务器接收快照文件完毕之后,丢
阅读全文
摘要:1.缓存和数据库的双写一致性问题 如果有缓存,那么就从缓存中完成查询操作了,所以一定要保证缓存中的数据和数据库中的数据是一致的。 解决的方案: 1.写一个接口,每次做写操作的时候,删除缓存中对应的数据。这样做耦合度高,也有可能会出现接口调用失败的情况。 2.使用消息中间件。 2.缓存的并发竞争问题
阅读全文
摘要:1.快照模式 也就是RDB,比较快,实际生产中常用,可能会有丢失的数据。 2.AOF 记录Redis执行的写命令,Redis重启后,重新执行这些命令。 优点是数据保存完整,但是速度会比较慢。 2024.6.26 1.RDB文件格式中的 check_sum字段数值用来在载入时判断文件是否损坏 2.RD
阅读全文
摘要:1.纯内存操作,如今最强的key-value数据库。支持事务化、持久化。 2.单线程操作,避免了频繁的上下文切换。此处的单线程只是指网络IO以及key-value的读写由一个线程完成。但持久化和集群支撑模块是多线程的。 3.采用了非阻塞IO多路复用机制。也就是单个线程,通过跟踪每个IO流的状态管理多
阅读全文
摘要:String:最常用的,也就是字符串。 Hash:也叫散列。 List:简单的字符串列表。 Set:无序字符串集合。 Sorted set:有序字符串集合。 2024.6.24 1.Redis中string数据类型的数据结构 string采用预分配冗余空间的方式来减少内存的频繁分配 string的数
阅读全文
摘要:首先要找到原因,是producer太多了,还是说consumer太少了。定位问题,然后看下消息的消费速度是否正常,正常的话,可以通过临时上线更多consumer解决问题。 如果consumer和queue不对等,上线了多台consumer也无法解决的话,可以 准备一个临时的topic; queue的
阅读全文
摘要:1.producer 同步的向broker发送消息,等待响应。 超时则重发,本质上是一个循环,可以设置次数。 broker提供多主模式。 2.broker 将默认的异步刷盘和集群的异步同步更改为同步刷盘,同步同步,也就是同步双写。 3.consumer 利用的是at least once特性。
阅读全文
摘要:1.相关的类 TopicPublishInfo类是用于producer端做负载均衡的关键类,producer通过这个类识别broker并选择broker。 MessageQueue类描述了单个消息队列的模型。 这个类用于管理队列属于那个topic,以及在哪个broker。 TopicRouteDat
阅读全文
摘要:所有producer的send()方法都调用了defaultMqProducer.send()方法; 这也是为什么我们需要对每个每一个producer进行配置的原因; 生产者发送时,会自动轮巡所有可以发送的broker,一条消息发送成功,下一次发送消息换另一个broker发送,使消息平均落在所有br
阅读全文
摘要:1.nameserver 可以做集群,提供轻量级的服务发现与路由。每个nameserver记录完整的路由信息,提供等效的读写服务并支持快速存储扩展。 就是一个注册中心,存储当前集群所有broker的信息、Topic和broker的对应关系。 nameserver用于存储topic、broker关系信
阅读全文
摘要:1.概述 NIO有三大核心部分:Channel(通道)、Buffer(缓冲区)、Sellector。传统的IO面向流操作,而NIO面向缓冲区操作。数据总是从缓冲区写到通道或者从通道读入缓冲区。Selector用于监听各个通道的事件。Selector监听注册到它的连接,基于回调函数获取通知。
阅读全文
摘要:1.实现 抽象类的子类用extends来继承;接口使用implements来实现。 2.构造函数 抽象类可以有构造函数;接口不能有,它只能由实现类实现。 3.main方法 抽象类可以有main方法,并且能够运行;接口不能有main方法。 4.实现数量 类可以实现很多接口;但只能集成一个抽象类 5.访
阅读全文
摘要:1.Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。 2.Bean注解告诉Spring这个方法将会返回一个对象,这个对象要注册成Spring应用上下文中的bean。通常方法体包含了最终产生bean实例的逻辑。 区别: Component通常是通过类路径扫描来自
阅读全文
摘要:B树 B树,也就是多路平衡搜索树,它类似普通的平衡二叉树,不同的是B树允许每个节点有更多的子节点,如下图: B树有以下特性: 所有的键值分布在整棵树中(索引值和具体的data都在每个节点里)。 任何一个关键字出现且只出现在一个结点中。 搜索有可能在任意一个非叶子结点结束(最好的情况就是O(1))。
阅读全文
摘要:1.二叉树 二叉树是树的一个重要类型,也是众多数据结构的基石。简单来说,每个节点最多只能有两个节点的树叫做二叉树。 2.二叉查找树 一种特殊的二叉树,特点就是左边的树节点比父节点要小,右边的比父节点要大。 极端条件下,平衡二叉树可能退化成链表。举个例子,二叉树的大部分节点都比父节点要小,如下: 3.
阅读全文
摘要:个人笔记 jwt的组成部分 1.header 令牌的类型、签名算法 2.payload 标准声明:比如过期时间 公共声明:一般放业务相关的信息,别放敏感信息 私有声明:服务提供者和消费者共同定义的声明 3.verify signature 加密后的header 加密后的payload secret
阅读全文
摘要:1.epoll多路复用模型 在epoll模型出现之前,java使用的模型有java bio模型和linux select模型。 模型如下: 当client和server传输数据时,需要client和server之间建立长连接,然后用socket.write向TCP/IP缓冲区中写入数据,client
阅读全文
摘要:在保证了rocketMQ的消息顺序性之后,还应该进行消息去重。 由于消息的重复性往往是由于网络抖动造成的,所以我们一般要在自己的业务端完成消息的去重。 一个可用的方案就是使用Redis做缓存。 具体方案如下: 1.消费端收到消息的时候,使用Redis提供的incr,以msgID作为key(保证唯一性
阅读全文
摘要:Redis分布式锁Lua脚本实现 获取锁 if (redis.call ('EXISTS',KEYS[1] == 0)) then //判断锁不存在 redis.call ('HSET',KEYS[1], ARGV[1], 1); redis.call ('EXPIRE', KEYS[1], ARG
阅读全文

浙公网安备 33010602011771号