07 2022 档案
摘要:Java多线程1、线程池的原理,为什么要创建线程池?答:1)线程池可以降低创建和销毁线程时的资源消耗,提高响应速度,提高现成的可管理性。 2)线程池构造参数: corePoolSize:核心线程数 maximumPoolSize:最大线程数 keepAliveTime:空闲时间 unit:空闲时间单
阅读全文
摘要:
阅读全文
摘要:/** * 使用synchronized实现一个简单的死锁 * @author RJH * @date 2017年11月23日 下午8:24:13 */ public class SynchronizedDeadLock { public static void main(String[] args
阅读全文
摘要:corePoolSize:核心线程数 maximumPoolSize 线程池所能容纳的最大线程数 keepAliveTime 线程闲置超时时长。如果超过该时长,非核心线程就会被回收 unit 指定 keepAliveTime 参数的时间单位。常用的有:TimeUnit.MILLISECONDS(毫秒
阅读全文
摘要:整合jwt令牌 前段定义发送短信接口 和注册接口 但前段获取cookie中的值时 需要将cookie是string类型 转换成json格式
阅读全文
摘要:nginx 如果传输文件 需要添加一下配置 tomcat 传输文件需要设置文件大小 查询数量是否存在 int count = eduVideoService.count(new QueryWrapper<EduVideo>().eq("chapter_id", chapterId)); 按照指定的列
阅读全文
摘要:依赖采用阿里官网版本 否则会报错 <dependencies> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.1</version> </de
阅读全文
摘要:templateParameters: { BASE_URL: config.dev.assetsPublicPath + config.dev.assetsSubDirectory <script src=<%= BASE_URL %>/tinymce4.7.5/tinymce.min.js></
阅读全文
摘要:工厂方法模式 抽象工厂模式 简单工厂模式 对象创建方式 new clone 反射 工厂 在所有的工厂模式中,我们都强调一点:两个类A和B之间的关系应该仅仅是A创建B或是A使用B,而不能两种关系都有。将对象的创建和使用分离,也使得系统更加符合“单一职责原则”,有利于对功能的复用和系统的维护。 创建型模
阅读全文
摘要:@RestController @RequestMapping("/eduoss/fileoss") @CrossOrigin public class OssController { @Autowired OssService ossService; //上传头像方法 @PostMapping("
阅读全文
摘要:因为修改页面会提交teacher的id 所以我们可以获取teacher 提交的实体类是否存在id 如果存在 那么是修改方法
阅读全文
摘要:我们需要手动去捕获异常 然后抛出自己自定义的异常状态码和信息 logback-spring.xml <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="10 seconds"> <!-- 日志级别
阅读全文
摘要:@Configuration//配置类 @EnableSwagger2 //swagger注解 public class SwaggerConfig { @Bean public Docket webApiConfig(){ return new Docket(DocumentationType.S
阅读全文
摘要:一定要先查询版本号 在进行修改 逻辑删除执行的是 修改操作 只是修改了deleted的状态 数据还是存在数据库中 若我们用mybatis查询数据的话 mybatis会根据配置的逻辑删除插件 会在查询后面追加字段where deleted=0 来查询数据库 这样保证了数据存在数据库 而查询却无法查出
阅读全文
摘要:首先登录需要获取验证码 然后我们需要根据第三方服务发送验证码 我们需要将验证码存入redis中 存储的key为 sms:code:phone value为 生成的验证码+系统当前时间 在redis中存活时间暂定为1小时 如果用户在一分钟内多次请求发送短信验证码(这里虽然前段会进行设置,但是为了预防有
阅读全文
摘要:24.1.1.缓存雪崩 缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间所有原本应该访问缓存的请求都去查询数据库了,而对数据库 CPU 和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。一般有三种处理办法: 1.一般并发量不是特别多的时候,使用最多的
阅读全文
摘要:两阶段提交协议 分布式事务是指会涉及到操作多个数据库的事务,在分布式系统中,各个节点之间在物理上相互独立,通过网络进行沟通和协调。 XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。 XA 接口函数由数
阅读全文
摘要:19.1.2.1.常见索引原则有 1.选择唯一性索引 1.唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。 2.为经常需要排序、分组和联合操作的字段建立索引: 3.为常作为查询条件的字段建立索引。 4.限制索引的数目: 越多的索引,会使更新表变得很浪费时间。 尽量使用数据量少的索引 6
阅读全文
摘要:负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性 四层负载均衡(目标地址和端口交换) 主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。 以常见的 T
阅读全文
摘要:设计原则 工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式 适配器模式 装饰器模式 代理模式 外观模式 桥接模式 组合模式 享元模式 策略模式 模板方法模式 观察者模式 迭代子模式 责任链模式 命令模式 备忘录模式 状态模式 访问者模式 中介者模式 解释器模式
阅读全文
摘要:Zookeeper 集群是一个基于主从复制的高可用集群,每个服务器承担如下三种角色中的一种 Leader 1.一个 Zookeeper 集群同一时间只会有一个实际工作的 Leader,它会发起并维护与各 Follwer 及 Observer 间的心跳。 2.所有的写操作必须要通过 Leader 完成
阅读全文
摘要:7层模型主要包括: 1.物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由 1、0 转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的模数转换与数模转换)。这一层的数据叫做比特。 2.数据链路层:主要将从物理
阅读全文
摘要:Mybatis 中有一级缓存和二级缓存,默认情况下一级缓存是开启的,而且是不能关闭的。一级缓存是指 SqlSession 级别的缓存,当在同一个 SqlSession 中进行相同的 SQL 语句查询时,第二次以后的查询不会从数据库查询,而是直接从缓存中获取,一级缓存最多缓存 1024 条 SQL。二
阅读全文
摘要:两阶段提交主要保证了分布式事务的原子性:即所有结点要么全做要么全不做,所谓的两个阶段是指:第一阶段:准备阶段;第二阶段:提交阶段。 1准备阶段 事务协调者(事务管理器)给每个参与者(资源管理器)发送 Prepare 消息,每个参与者要么直接返回失败(如权限验证失败),要么在本地执行事务,写本地的 r
阅读全文
摘要:1.创建独立的 Spring 应用程序 2.嵌入的 Tomcat,无需部署 WAR 文件 3.简化 Maven 配置 4.自动配置 Spring 5.提供生产就绪型功能,如指标,健康检查和外部配置 6.绝对没有代码生成和对 XML 没有要求配置
阅读全文
摘要:Http 请求到DispatcherServlet (1)客户端请求提交到 DispatcherServlet。 HandlerMapping 寻找处理器 (2)由 DispatcherServlet 控制器查询一个或多个 HandlerMapping,找到处理请求的Controller。 调用处理
阅读全文
摘要:AOP 主要应用场景有: 1.Authentication 权限 2.Caching 缓存 3.Context passing 内容传递 4.Error handling 错误处理 5.Lazy loading 懒加载 6.Debugging 调试 7.logging, tracing, profi
阅读全文
摘要:Spring 启动时读取应用程序提供的 Bean 配置信息,并在 Spring 容器中生成一份相应的 Bean 配置注册表,然后根据这张注册表实例化 Bean,装配好 Bean 之间的依赖关系,为上层应用提供准备就绪的运行环境。其中 Bean 缓存池为 HashMap 实现 BeanDefiniti
阅读全文
摘要:直接赋值复制 直接赋值。在 Java 中,A a1 = a2,我们需要理解的是这实际上复制的是引用,也就是说 a1 和 a2 指向的是同一个对象。因此,当 a1 变化的时候,a2 里面的成员变量也会跟着变化。 浅拷贝(复制引用但不复制引用的对象) 创建一个新对象,然后将当前对象的非静态字段复制到该新
阅读全文
摘要:保存(持久化)对象及其状态到内存或者磁盘 Java 平台允许我们在内存中创建可复用的 Java 对象,但一般情况下,只有当 JVM 处于运行时, 这些对象才可能存在,即,这些对象的生命周期不会比 JVM 的生命周期更长。但在现实应用中, 就可能要求在JVM 停止运行之后能够保存(持久化)指定的对象,
阅读全文
摘要:静态内部类,成员内部类,局部内部类,匿名内部类四种 静态内部类 定义在类内部的静态类,就是静态内部类。 public class Out { private static int a; private int b; public static class Inner { public void pr
阅读全文
摘要:在 Java 中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法; 并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为Java 语言的反射机制。 反射的应用场合 编译时的类型由声明对象时实用的类型来决定,运行时的类型由实际赋值给
阅读全文
摘要:位置不同 1.throws 用在函数上,后面跟的是异常类,可以跟多个;而 throw 用在函数内,后面跟的是异常对象。 功能不同: 2.throws 用来声明异常,让调用者只知道该功能可能出现的问题,可以给出预先的处理方式;throw 抛出具体的问题对象,执行到throw,功能就已经结束了,跳转到调
阅读全文
摘要:CAS当且仅当内存值等于预期值时,才会将内存值值设为新值 当多个线程同时使用 CAS 操作一个变量时,只有一个会胜出,并成功更新,其余均会失败。失败的线程不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败的线程放弃操作。基于这样的原理, CAS 操作即使没有锁,也可以发现其他线程对当前线程
阅读全文
摘要:减小锁粒度 减小锁粒度是指缩小锁定对象的范围,从而减小锁冲突的可能性,从而提高系统的并发能力。减小锁粒度是一种削弱多线程锁竞争的有效手段,这种技术典型的应用是 ConcurrentHashMap(高性能的 HashMap)类的实现。对于 HashMap 而言,最重要的两个方法是get 与set 方法
阅读全文
摘要:两者的共同点: 1.都是用来协调多线程对共享对象、变量的访问 2.都是可重入锁,同一线程可以多次获得同一个锁 3.都保证了可见性和互斥性 两者的不同点: 1.ReentrantLock 显示的获得、释放锁,synchronized 隐式获得释放锁 2.ReentrantLock 可响应中断、可轮回,
阅读全文
摘要:ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。 ThreadLocalMap(线程的一个属性) 1.每个线程中都有一
阅读全文
摘要:Java 语言提供了一种稍弱的同步机制,即 volatile 变量,用来确保将变量的更新操作通知到其他线程。volatile 变量具备两种特性,volatile 变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile 类型的变量时总会返回最新写入的值。 变量可见性 其一是保证
阅读全文
摘要:CountDownLatch(线程计数器 ) CountDownLatch 类位于java.util.concurrent 包下,利用它可以实现类似计数器的功能。比如有一个任务 A,它要等待其他 4 个任务执行完毕之后才能执行,此时就可以利用 CountDownLatch 来实现这种功能了。 Cyc
阅读全文
摘要:1.corePoolSize:指定了线程池中的线程数量。 2.maximumPoolSize:指定了线程池中的最大线程数量。 3.keepAliveTime:当前线程池数量超过 corePoolSize 时,多余的空闲线程的存活时间,即多次时间内会被销毁。 4.unit:keepAliveTime
阅读全文
摘要:乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为 别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新), 如果失败则要重复读-比较-写的操作
阅读全文
摘要:1.对于sleep()方法,我们首先要知道该方法是属于 Thread 类中的。而 wait()方法,则是属于Object 类中的。 2.sleep()方法导致了程序暂停执行指定的时间,让出 cpu 该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。 3.在调用 sleep
阅读全文
摘要:1.新建状态(NEW) 当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配 内存,并初始化其成员变量的值 。 2.就绪状态(RUNNABLE) 当线程对象调用了start()方法之后,该线程处于就绪状态。Java虚拟机会为其创建方法调用栈和 程序计数器,等待调度运
阅读全文
摘要:newCachedThreadPool:创建可缓存的线程池,如果线程池中的线程在60秒未被使用就将被移除,在执行新的任务时,当线程池中有之前创建的可用线程就重用可用线程,否则就新建一条线程 newFixedThreadPool:创建可重用且固定线程数的线程池,如果线程池中的所有线程都处于活动状态,此
阅读全文
摘要:1我们先克隆当前的虚拟机 修改ip地址 2 在idea中编写yml语句 #3.8.5-management-alpine 带图形化界面 体积小适合开发环境 #在搭建rabbitMQ集群时 必须保证 cookie必须一直 值随便 #5272 是通信端口 15272是图形化界面 4369 集群之间交互端
阅读全文
摘要:基于消费者 reject requeue设置为false 消息进入死信队列 # 应用名称 spring.application.name=rabbitmq # 应用服务 WEB 访问端口 server.port=8080 spring.rabbitmq.host=192.168.1.137 spri
阅读全文
摘要:reject nack requeue set false 就会成为死信队列消息被消费者拒绝 requeue设置为false消费者拿到消息后 并没有正常执行 执行了nack或者reject 在默认情况下 这个消息会被重新放到队列中给其他消费者再次消费但是如果开启了 requeue=false 那么这
阅读全文
摘要:/*普通发送消息*/ @Test void publishWithConfirm() throws IOException { rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() { @Override pub
阅读全文
摘要:导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> # 应用名称 spring.applicatio
阅读全文
摘要:服务异步调用:服务A如何保证异步请求一定能被服务B就收到并处理 削峰:海量请求,如何实现削峰效果,将请求全部放到一个队列中 慢慢消费 这个队列怎么实现? 服务解耦:如何尽量降低服务之间的耦合问题,如果在订单服务与积分服务解耦 需要一个队列 而这个队列依然需要实现上述两种功能 前提系统安装了 dock
阅读全文
摘要:github中选择对应的版本https://github.com/helm/helm/releases?page=6下载传入到linux中https://get.helm.sh/helm-v2.16.3-linux-amd64.tar.gz创建yml配置文件vi helm_rbac.yaml api
阅读全文
摘要:https://kubernetes.io/zh/docs/concepts/workloads/pods/#pods-and-controllers 我们先删除 之前安装过的副本 kubectk get all kubectl delete deployment.apps/tomcat6kubec
阅读全文
摘要:https://kubernetes.io/zh/docs/reference/kubectl/overview/ https://kubernetes.io/zh/docs/reference/kubectl/overview/#%E8%B5%84%E6%BA%90%E7%B1%B B%E5%9E
阅读全文
摘要:1、部署一个 tomcat k8s会在其中一个节点上下载镜像tomcat 至于是哪个 可以用以下命令 kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8 kubectl get pods -o wide 可以获取到 tomcat
阅读全文
摘要:进入文件夹 给文件master_images.sh赋予执行权限chmod 777 master_images.sh./master_images.sh 执行文件拉去镜像 kubeadm init --apiserver-advertise-address=10.0.2.15 --image-repo
阅读全文
摘要:在命令行输入 vagrant up 启动三台k8s-node1 k8s-node2 k8s-node3 我们需要设置宿主机和virtualBox在同一网段(三台都要设置) 使用xshell 链接 vagran中的宿主机 su root 进入root权限 重启虚拟机命令 选择nat网络 重新生成MAC
阅读全文
摘要:接口幂等性 通过加锁 通过数据库乐观锁字段 数据库悲观锁字段 加事务 最多的是令牌机制 类似于验证码 发令牌 下次携带令牌访问 用一次就销毁 分布式事务 seata 后台管理系统 并发要求不高的可以使用seata 高并发事务 使用最终一致性 babbitMQ(必要) 由发送端和接收端的确认机制 性能
阅读全文
摘要:限流 采用 分布式信号量 和sentinel 进行限流 分布式锁 用Redisson 自带看门狗机制 key的过期时间是30 秒自动过期 不会造成死锁 以上场景是先去redis中获取数据 redis中没有才去DB 如果是修改数据 那么会涉及到 双写模式和失效模式 双写模式和失效模式在大的并发下都会出
阅读全文
摘要:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 针对于服务不可用 我们需要开启如下配置 如果
阅读全文
摘要:https://hub.docker.com/r/bladex/sentinel-dashboard/tags 找到对应版本1.8.0 docker pull bladex/sentinel-dashboard:1.8.0 docker run --name sentinel -d -p 8858:
阅读全文
摘要:创建新的映射 PUT gulimall_product{ { "mappings": { "properties": { "skuId": { "type": "long" }, "spuId": { "type": "keyword" }, "skuTitle": { "type": "text"
阅读全文
摘要:nested 嵌入式查询 nasted 嵌入式聚合 GET mall_product/_search { "query": {"match_all": {} }, "aggs": { "brandAgg": { "terms": { "field": "brandId", "size": 10 },
阅读全文
摘要:redisson的可重入锁 如果拿不到锁 一直等待 //redisson 解决了锁的自动续期 如果业务超长 运行期间自动给锁续上新的30s 读写锁 闭锁 信号量 秒杀服务 高并发访问 只有获取到信号量的 才能访问接口 acquire 是阻塞形式 一定要回去到信号量才能继续 tryacquire 有就
阅读全文
摘要:phrase 是短语精准查询 只要包含此短语 就符合查询要求 添加mapping 映射属性
阅读全文
摘要:package com.msb.common.exception; import com.msb.common.utils.R; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindingResult
阅读全文
摘要:
阅读全文
摘要:根据邮箱生成秘钥 ssh-keygen -t rsa -C "379858863@qq.com" 查看秘钥 cat ~/.ssh/id_rsa.pub 然后复制秘钥 登录到马云中 https://gitee.com/profile/sshkeys 测试是否链接成功 ssh -T git@gitee.
阅读全文
摘要:安装zipkin docker run -d -p 9411:9411 openzipkin/zipkin <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipki
阅读全文
摘要:<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>2021.1</version> </dependenc
阅读全文
摘要:<component name="RunDashboard"> <option name="configurationTypes"> <set> <option value="SpringBootApplicationConfigurationType" /> </set> </option> <o
阅读全文