自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 消息队列和Kafka

2.消息队列中间件:存储消息的组件(软件),如Kafka、RabbitMQ、ActiveMQ、RocketMQ、ZeroMQ。ZooKeeper:管理和协调broker,存储了Kafka的元数据(topic、partition、consumer)发布订阅模式:每个消息可以有多个订阅者(消费者),发布者和订阅者有时间上的依赖性。replication:副本,将数据复制多个副本,分布在多个broker上。点对点模式:每个消息只有一个消费者,被消费后,消息就存在了。offset:偏移量,记录着要消息消费的进度,

2024-02-01 01:07:26 496

原创 消息队列和Kafka

Replication副本,防止某个broker宕机,为partition创建多个副本,保存数据,一个broker的副本放在不同的broker中。特点:低耦合,响应时间快,异步削峰限流(在不繁忙的时间段处理再处理任务),系统结构弹性大,易于扩展。定义:多个事务访问同一资源,对已有的资源不释放,相互锁定对方的资源,造成的死循环。消息队列是存储在内存中。- Broker:Kafka集群中的单个服务器节点,负责数据存储和处理。broker是kafka服务器的一个实例,kafka是broker的集群。

2024-01-29 22:59:32 484

原创 数据结构和线程池

new ThreadPoolExecutor.AbortPolicy() 中断策略,线程池处理不过来时,启动策略,抛出异常(Java.util.concurrent.RejectedException)CopyONWriteArrayList:(以空间换时间)在写操作时,会复制一份数据数组,加锁,写操作完成后,指针指向新数组;HashMap:线程不安全,并发时,报错 java.util.ConcurrentModificationException。

2024-01-27 23:36:02 573

原创 Spring Cloud组件

4.7区域敏感策略:根据服务所在区域的性能和服务的可用性来选择服务实例,在没有区域的环境下,该策略和轮询策略类似。2.3负载均衡 loadbalancer(已封装好,默认轮循访问,可通过配置权重改变微服务的访问量)4.5重试策略:采用轮询策略,在规定的请求时间内,重复请求服务,超时,则返回null。4.6可用性敏感策略:先过滤掉非健康的服务,然后选择最小连接数服务。4.2权重策略:将权重配置在提供者上,权重越大,请求响应越快。存放经常需要变更的数据,方便统一管理,如:服务器密钥。

2024-01-26 23:32:36 251

原创 事务和AOP

因为默认使用的是同一个事务,可以给AOP新建一个事务 @Transactional(Propagation = Propagation.REQUIRES_NEW ),这样 即使运行时出错,也能抛出异常、记录错误日志、回滚数据库数据。REQUIRES_NEW(当前有事务,就挂起,重新创建一个,没有事务,也新建一个)也可以设置,在切面类中加 @Order(1),数字越小,优先级越高。REQUIRED(支持当前事务,有事务就加入,没有就新建事务)SUPPORTS(当前有事务,就用,没有,就不用)

2024-01-26 00:08:31 212

原创 多线程和锁

多个线程申请锁,某个线程得到锁之后,在对象监视器上留下记录,等到该线程执行完,要释放锁时,清除在对象监视器上留下的记录,然后释放锁。两个以上的线程会造成虚假唤醒,即没有使用notify(),线程自己苏醒自动执行任务,使用While循环解决。8.锁膨胀机制(jdk1.6引入,目的:如果只有一个线程,则没有锁的竞争,不需要加锁、解锁,节约操作时间)WAITING:等待,执行了wait(),需要被notify()或notifyAll()唤醒。偏向锁:只有一个线程,并且是同一线程申请锁。

2024-01-25 09:24:59 339

原创 Conditional注解

为Bean的装载操作提供一个判断条件,满足条件后,Spring才会把Bean装载到容器里面,而这个条件是可以自定义的(实现condition接口,重写matches方法)3.5 Z-Set,有序的字符串集合,每个元素关联一个分数,分数可以重复,元素不能重复,用于排行榜、带权重的任务队列、范围查询。3.1 String,可存储任何数据,一个值最大能存储512MB,如图片和序列化的对象,用于缓存、计数器、分布式锁等;3.3 List,双向链表,可在头部和尾部插入和删除元素,用于消息队列、任务队列、实时排行;

2024-01-22 23:16:56 382

原创 mysql事务日志和MVCC

以上四个值和具体的当前(当前行)数据事务id进行比较,根据它们的大小干系对情况判断。Undolog日志的主要作用保证rolleback回滚操作的安全性。最终的目的是未来保证当前的readview这个事务在读取数据时的。1.mysql的redolog日志和undolog日志的作用?M_ids访问当前数据资源的所有未提交的事务集合,活跃事务id。redolog日志的主要作用保证commit行为的安全性。trx_id当前生成Readview的这个事务的id。将修改的数据的旧值在修改时进行记录。

2024-01-21 23:08:30 594

原创 MySQL的MVCC

事务B(id:200)第一次查询时,会将隐藏字段trx_id(已提交事务A 的id)和min_trx_id进行比较,trx_id(100) 小于min_trx_id(200),则B可以查询到A的数据18;当事务B第二次查询时,但200<300<301,说明事务C是和事务B在同一时间段执行的,B就不能读到C的数据,通过 undo log版本链,此时读到的数据还是之前的18;1.creator_trx_id: 创建ReadView的事务的id。trx_id:事务对数据改动时,事务将id赋值给trx_id。

2024-01-20 00:02:01 691

原创 Mysql Explain各字段说明

filtered:最后查询出来的数据占所有服务器端(server)检查行数(rows)的百分比,值越大越好。Range:范围索引扫描,比全表扫描要好,因为它只需要开始于索引的某一点,而结束于另一点。equ_ref:使用了连接(join)查询,并且连接条件是通过唯一索引进行的等值比较。Using filesort:在对查询结果中的记录进行排序时,是可以使用索引的。ref:表示使用了非唯一索引进行的等值比较,可能返回多个匹配的行。rows:查询操作在执行时可能会扫描的行数,是个估计值,越小越好。

2024-01-18 23:10:00 506

原创 支付功能的实现

1.3完成后结果异步回调 重定向商户的同时,支付宝服务根据异步回调url调用商户接口,将支付结果通知给商户 商户服务如果没有部署,可以使用内网穿透工具调用到商户回调接口。2.2结果回调通知接口 支付宝服务调用我们系统回调接口 修改支付信息(接口系统) 修改订单状态(订单服务) 修改商品库存和销量(商品服务) 保存交易日志(接口系统)1.1 表单跳转 前端点击提交支付,请求后端支付接口 支付接口通过阿里api生成表单信息返回给前端页面。先引入支付宝的sdk,引入到pay微服务模块。2.整合支付宝sdk,

2024-01-17 23:07:38 3347

原创 结算功能和鉴权传递

2.5在拦截器中从被访问的request中提取token,放入向购物车请求的request中。1.3订单服务通过feign请求选中购物车接口,将结果封装成orderitem(订单详情)2.1结算功能通过openFeign调用cart购物车列表,传递鉴权结果。1.5结算页面axios异步请求用户地址接口(异步渲染)2.2在order的openFeign中加入拦截器。1.6结算界面展示订单详情、用户地址、总金额。2.6购物车的用户拦截器自动获取用户信息。1.1用户点击结算按钮(同步渲染)

2024-01-16 23:46:01 314

原创 微服务网关的鉴权功能

b将拦截器注册到请求链中(WebMvcConfigurer)C openFeign阻塞线程,网关非阻塞线程,所以改成。通过请求request中携带的token获取用户信息。将鉴权结果放入header,在微服务中通过拦截器记录。B 注入user服务,@lazy注解解决循环依赖。1 网关如何整合openFeign完成统一鉴权。E 在接口中通过本地线程获得user鉴权结果。2 微服务如何整合拦截器记录鉴权结果。A 引入openFeign的依赖。C 获取header中的用户信息。D 将用户信息存入本地线程。

2024-01-15 22:12:25 526

原创 SpringCloud和SBA

D loadbalencer,openFeign可以通过注册中心获得微服务的访问地址。C 注册中心nacos,注册记录微服务ip和端口信息,统一管理和调用。2. 如何配置sba服务,如何在服务宕机时发送警告邮件?A邮箱中开启首发邮件服务,smtp,pop3。B 配置中心nacos,提供远程配置文件。D sba微服务中配置邮箱服务相关信息。F sentinel,哨兵,流量控制。A 在微服务中引入sba客户端依赖。D 整合注册中心,配置nacos。C sba中引入email依赖。2.2整合sba的客户端。

2024-01-13 22:18:48 401

原创 熔断机制、SBA和Nginx

1.熔断处理:工作原理:统计服务调用的慢调用,异常数,异常比例,超过阈值时,就会发生熔断,截断访问该服务的一切请求连接状态机的3个状态:1.closed:关闭状态,断路器放行所有请求2.open:打开状态,断路器发生熔断3.half-open:半开状态,会放行一次请求3.1请求成功:回到closed状态3.2请求失败:回到open状态4.断路器熔断判断策略:慢调用、异常数、异常比例。

2024-01-11 23:49:38 1004

原创 分布式系统网关和sentinel

2.linux版:docker run -d -p 8858:8858 --name sentinel -dashboard bladex/sentinel-dashboard。流控模式(在配置文件中加入 :spring.cloud.sentinel.web-context-unify=false(用于忽略mvc的资源路径整合))1.windows版:在sentinel的jar包文件夹中,打开cmd界面,java -jar + jar包名 --server.port=8858。

2024-01-10 22:50:55 603

原创 nacos和openFeign

2.2.5 在启动类中开启@EnableFeignClients(basePackages=“com.atguigu.spzx.cloud.order.feign“)2.2.4在控制层或业务层注入openFeign,通过openFeign远程调用微服务,可以配置超时时间和重试次数。1.1注册中心作用:记录了微服务的地址和端口号,让微服务之间可以通过注册中心相互访问。1.3.3配置文件配置注册中心的端口号,注册名。1.nacos作为注册中心和配置中心的用法?2.1配置中心:用法跟注册中心类似。

2024-01-09 23:42:46 431

原创 aop和事务

方法3:让日志aop重新开启一个事务,@Transactional(propagation = Propagation.REQUIRES_NEW)方法1:可以改变aop优先级(@Order),默认事务优先级较高,后执行,事务aop包括日志aop,事务先回滚,然后记录在日志中。方法2:让内层的日志aop抛出异常,事务感知后就会回滚,但日志记录也会回滚,不会记录任何信息。这样就有两个事务,方法出错后,事务回滚,但日志的事务不受影响,可以记录信息。(3)实现增强方法(环绕通知)(2)启动类加扫描注解。

2024-01-08 23:28:01 303

原创 死锁和调度算法

2.请求和保持:一个进程因请求资源而阻塞时,不会释放已有的资源。3.不可剥夺:进程已有的资源在使用完之前,不能进入其他进程。死亡:线程的main(),run()执行结束,或异常而退出。同步阻塞:线程获取synchronized同步锁失败。4.循环等待:多个进程形成首尾相连等待资源的情况。死锁是多个线程争夺资源而相互等待,线程无法推进。其他阻塞:调用了sleep()或join()等待阻塞:运行的线程执行了wait()方法。1.互斥条件:一个资源只能被一个进程使用。就绪:调用线程的start()方法。

2024-01-06 22:41:19 319

原创 Java基础题

equals相同,则hashcode一定相同,说明两个比较的对象是同一个对象;因为java 的浮点类型数据底层是二进制表示的, 不能准确表示1/10等分数。equals不相同,hashcode不一定不同,但两个对象不是同一个对象。equals比较的是内存中的地址,hashcode比较的是hash值,final可用于声明类、方法、变量,申明变量时,该变量将转化为常量,==对于基本数据类型是比较值,对于引用数据类型是比较内存地址;final修饰的类不能被继承,final修饰的方法不能被重写。

2024-01-05 22:23:56 352 1

原创 学习笔记和easyexcel使用

VO 类通常包含一些属性,以及相应的getter和setter方法。在 Java 的Web应用程序中, VO 类通常用于将数据库中的表映射成 Java 对象。DTO是数据传输对象,用于在不同层之间传输数据 通常用于优化数据传输的性能和减少网络通信的开销 DTO可以封装多个对象的数据,以减少网络请求次数。1.easyexcel 使用逐行解析的方式导入数据,减小了内存压力;如果说VO一般用于前端和后端之后传输数据,那么DTO就是在后端的不同层之间传递数据。的缩写,是 Java 中使用的一种设计模式,主要用于。

2024-01-02 22:10:02 348

原创 项目的角色权限分配功能

前端:el-table自动处理tree结构,default-expend-all属性自动展开。数据:当前角色所拥有的权限id,dialog的提交对象。1.权限表的数据结构,以及如何实现权限功能的CRUD?自关联表,一对多,外键和主键在同一张表中。查询:递归查询,判断每个节点是否有子节点。自关联表可以实现无限多级分类。分配按钮:dialog对话框。自关联表的父子数据属性一样。再重新批量添加角色权限数据。

2024-01-01 22:17:56 324

原创 Git的介绍与使用

1.Git介绍1.1Git 是一个免费开源的 分布式版本控制系统分布式版本控制的优点:1.每个客户端都保存了完整的项目,更加安全2.断网的情况下也不影响项目进度1.2代码托管中心(远程库)1.2.1 局域网GitLab1.2.2 互联网GitHubGitee2.Git安装工作区:磁盘中代码存放的位置代码一旦进入 本地库,就会生成版本,不可删除3.Git命令git add + 文件名————添加到缓存区git commit -m "日志信息" + 文件名————添加到本地仓库。

2023-12-24 23:02:56 303

原创 跨域及其解决方法

allowedOriginPatterns("*") // 允许请求来源的域规则。​ 简单请求的条件:1.HTTP请求是 Head 、get 、post。​ 在非简单请求要跨域访问时,在正式请求之前,向服务器发送预检请求。是跨域资源共享,是一种允许非同源的地址或端口的js请求的放行协议。​ 浏览器将CROS请求分为:简单请求和非简单请求。​ 被访问网站 不允许 网域外的请求进行访问。​ (1)不同请求:http、https。

2023-12-23 22:46:00 310 1

原创 Docker常用命令

docker login -u admin -p Harbor12345 192.168.136.142 # 登录到Harbor docker tag ebuy-docker 192.168.136.142/ebuy-docker/ebuy-docker:latest # 给镜像重新打一个标签 docker push 192.168.136.142/ebuy-docker/ebuy-docker:latest # 推送镜像到Harbor中。docker pull + 镜像名 ——拉取镜像。

2023-12-20 22:57:37 308 1

原创 学习Docker的使用

​ docker cp index.html tomcat8-1:/usr/local/tomcat/webapps/ROOT 将index.html 文件复制到tomcat容器内。​ docker exec -it tomcat8-1 /bin/bash 进入到tomcat8容器。查看docker 镜像文件的版本号,可以到Docker Hub网站查询。​ docker exec -it + 容器名 进入容器。docker version 查看docker版本。

2023-12-19 22:44:29 329 1

原创 动态规划算法

分析:偷N间,情况1:偷第N间的钱,则偷到的钱 = 第N间的钱 + 偷到的N-1间之前的钱。分析:需要每次遍历硬币的面额,取出一次硬币后,减去硬币的面额,每次尽量取得面额的最大值。关键:到达目的楼梯的方法数 = 到达上一次楼梯的方法数 + 到达上上次的楼梯的方法数。在一个三角形中,每次移动只能向下和向右移动,到达三角形的底,求经过路径的值之和最小。情况2:不偷第N间,则偷到的钱 = 第N-1间的钱 + 偷盗的N-2间之前的钱。有一些连续的房子,小偷偷钱,不能偷连续的房子,如何偷到最多的钱?

2023-12-18 23:03:19 361

原创 二叉树和排序

1.1非递归方式:从根节点开始遍历,获取根节点的左右子节点,进行交换,如果左右子节点还有子节点,继续交换。将数组的第二个位置设为待插入元素,将待插入元素的前一个元素设为 preIndex,向前比较。冒泡优化:设置Boolean类型,默认需要冒泡,当不需要冒泡时,执行break。遍历时,标记一个最大值,遍历完所有值之后,将最大值与标记的值进行位置交换。当待插入元素小于preIndex时,待插入元素放在preIndex前面。当待插入元素大于preIndex时,待插入元素放在preIndex后面。

2023-12-16 23:22:45 379 1

原创 递归和二叉树

因为递归算法每调用一次方法,就会分配一个独立的栈空间,调用次数过多,容易遭成栈内存不足,因此能不用递归尽量不用。1.1 每一个父节点,有两个子节点,左子节点<父节点,右子节点>=父节点。特点:左子树比根节点小,右子树比根节点大,查询速度比链表更快。(9). 寻找二叉树的最小元素,并且删除最小元素。(5). 二叉树的前序遍历: 根、左、右。(6). 二叉树的中序遍历: 左、根、右。(7). 二叉树的后序遍历: 左、右、根。前序遍历(根节点,左节点,右节点)中序遍历(左,根,右)后序遍历(左,右,根)

2023-12-15 22:58:56 288 1

原创 声明式事务

1.2 借助AOP优化事务: 编写一个切面,在切面中编写一个环绕通知,在环绕通知中进行事务控制 ------> 不同的持久层框架进行事务控制的代码是不一样的。(1). DataSourceTransactionManager -----> 针对JDBC、JdbcTemplate、Mybatis持久层技术。1.1 如果不借助任何框架和技术: 需要在每个要添加事务的方法中加上事务代码 ------> 重复冗余的代码非常多。2.1 事务是所有程序员普遍需要用到的技术,并且事务代码与具体项目的业务是无关的。

2023-12-14 22:42:16 279 1

原创 双链表和hash表

(4) 在指定元素的前面添加。(5) 在指定元素的后面添加。(3) 获取指定下标处的元素。1. 底层采用数组 + 单链表的方式存储数据。3.4 替换: 指定下标替换元素。(4) 删除指定的元素。(1) 指定下标添加。(1) 指定下标删除。(1) 获取头部元素。(2) 获取尾部元素。3.5 判断是否包含某个元素。3. HashMap应该有哪些方法?1. 双链表的节点有哪些属性?2. Hash表要维护哪些属性。2. 双链表自身有哪些属性?3. 双链表应该有哪些方法?

2023-12-13 22:30:13 333 1

原创 数据结构(数组和单链表)

(8)扩容: 设置最大容量为Integer.MAX_VALUE-8, 扩容为原数组的1.5倍,当扩容大于最大容量时,扩容为最大容量;(1)添加:addFirst(E e) addLast(E e) add(int index, E e)特点:一个节点(node)记录了下一个节点的位置信息(next),只能从前面往后面查询,需要记录头节点。(2)删除: remove(int index) remove(E e)(5)修改:set(int index,E e)(6)获取元素: get(int index)

2023-12-13 08:28:29 344 1

原创 Mybatis多表关联查询

(2.2.1) 左外连接查询: SELECT 要查询的字段 FROM t_emplotee t1 LEFT OUTER JOIN t_department t2 ON t1.did=t2.did WHERE t1.eid=1。(2.1.1) 隐式内连接查询: SELECT 要查询的字段 FROM t_emplotee t1,t_department t2 WHERE t1.did=t2.did AND t1.eid=1。(1) 根据员工的id查询员工信息,并且连接部门表,查询出该员工所属的部门信息。

2023-12-10 23:37:38 374 1

原创 Mybatis总结

4.2.3 select标签的resultType属性的值对应查询方法的返回值类型,如果返回值类型是List则对应其泛型。2.2 MapperScannerConfiguer ------> 要扫描的持久层接口所在的包名。(2). type 指定当前手动映射规则是将结果集映射给哪个类的对象。4.2 持久层接口的每一个方法 ------> 映射配置文件的每一个子标签。4.1 根标签的namespace ------> 持久层接口的全限定名。2. mybatis的全局配置 ----> 与spring的整合。

2023-12-09 22:22:14 392

原创 分页功能的实现

分页功能

2023-12-08 23:08:18 364

原创 SpringBoot

在配置文件中,添加dev、test、pro等配置文件,这样在项目需要不同环境下运行,可以直接修改配置文件。2.1 目标: 客户端发送请求,服务器端的表现层处理请求,并且响应 Result.ok();(1) 存放路径: 一定要在resources的根路径下。(1) 存放路径: 一定要在resources的根路径下。1. 引入spring的依赖的时候,有各种各样的依赖。(4). 编写SpringBoot的配置文件。(5). 编写SpringBoot的启动类。(1). 创建SpringBoot项目。

2023-12-07 22:22:29 335 1

原创 Redis持久化和分布式集群架构

(2). 如果缓存数据丢了,你开机的时候刚好又突然来了大量的请求,这样的话Redis是无法拦截请求的,请求都会到达DB。2. Redis的事务的作用: 保证同一个事务内的多个Redis命令在执行的过程中,不会被其它客户端的命令插队。Redis的主机负责处理写操作,Redis从机负责处理读操作,在这个过程中主机需要将数据同步给从机。默认的第一次文件重写,需要文件达到64MB,文件增长比达到100%,可以根据需求调节。1.1 Redis的数据操作发生在内存中,如果不对数据做持久层,数据很有可能会发生丢失。

2023-12-06 22:35:09 363

原创 Redis的数据类型

String,单键单值,String是Redis最基本的数据类型,是二进制安全的(可以传图片和序列化的对象),一个value最大可达512MB。有序集合Zset,是一个字符串集合,数据结构:哈希结构, 集合成员唯一,成员都关联一个score(分数,分数可重复),score从低到高排序。列表 list:单键多值,有序,可重复,数据结构为: 双向链表 + 压缩列表(类似数组)Set :单键多值,无序,不可重复,数据结构是:dict字典,字典由哈希结构实现。字典结构是一种思想,哈希表是字典的的实现。

2023-12-05 22:40:43 317

原创 Linux命令学习

(1)find (全局、实时遍历查询) find / -name "*.txt" ——在整个系统中查找以 . txt 结尾的文件。find /root -name ".txt" ——在root文件夹中查找以 . txt 结尾的文件。ls | grep "p" | tail -10 ——查看该路径下名字带 p 的最后10个文件。locate ".java" ——在系统中查找以.java 结尾的文件。ls | grep ".txt" ——查询该路径下的 txt 文件。ls ——该路径下的所有可见文件。

2023-12-04 22:11:00 391

空空如也

空空如也

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

TA关注的人

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