摘要:
1.golang 语言层面支持并发的编程语言,支持并发是golang的非常重要特性 golang支持的是协程,可以类比java中的线程,解决并发问题的难点就是(线程之间的协作) 2.golang如何解决多协程之间的协作问题呢 (1)共享内存方式通信 golang也像java一样提供了管程和原子类对协 阅读全文
摘要:
1.协程 轻量级线程 Coroutine 线程是内核态调度的,协程是用户态调度的,用户态调度的资源消耗更小,性能更高 内核态用户态之间切换有成本 线程的栈大小:1M 协程的栈大小:几K或者几十K 2.Golang中的协程示例 import ( "fmt" "time" ) func hello(ms 阅读全文
摘要:
1.四种模型 同步阻塞,同步非阻塞,异步阻塞,异步非阻塞 2.同步异步之说 是线程之间调用的说法 调用者与被调用者,它们是线程之间的关系 两个线程要么是同步,要么是异步 同步操作:调用线程需要等待被调用线程返回结果,才会进行下一步 异步操作:调用线程不需要等待被调用线程返回结果,被调用线程一版依赖事 阅读全文
摘要:
docker容器实际案例 1.使用docker部署python写的web应用 from flask import Flask import socket import os app = Flask(__name__) @app.route('/') def hello(): html = "<h3> 阅读全文
摘要:
1.前情提要 面向对象编程理论中,对象之间通信,依赖的是消息,但java里,对象之间通信,用的是对象方法 2.Actor模型 计算模型,计算单位Actor,所有的计算都在Actor中执行 Actor中一切都是actor,actor之间完全隔离,不共享任何变量 不共享变量,就不会有并发问题 java本 阅读全文
摘要:
1.高性能数据库连接池HiKarCP c3p0,DBCP,Tomcat JDBC Connection Pool,Druid 最火的是Hikaricp 最快的数据库连接池,springboot2.0作为默认数据库连接池 2.数据库连接池 池化资源,避免重量级资源的频繁创建和销毁。数据库连接池就是避免 阅读全文
摘要:
1.容器概念回溯 容器本质是一种特殊的进程 namespace作用是视觉隔离,cgroups作用是限制,给沙箱围了已圈墙 2.容器内看到的文件系统是什么样子? 联想Mount namespace问题 容器里的应用进程,按理应该看到一份完全独立的文件系统,这样就可以在自己容器目录(/tmp)下操作 不 阅读全文
摘要:
1.为什么要用高性能队列Disruptor 为什么要说Disruptor?java SDK提供了2个有界队列 ArrayBlockQueue,LinkedBlockingQueue,基于ReentrantLock锁实现,在高并发情况下,锁的效率不高,更好的替代品有木有?Dosritpr 2.Disr 阅读全文
摘要:
1.隔离 使用namespace技术,实现隔离 namespace 实际上修改了应用进程看待整个计算机的视图,即它的视线被操作系统做了限制,只能看到某些指定内容 。对宿主机来说,这些被“隔离”的进程和其他进程没有啥太大差别 2.说明 用户运行在容器里的业务进程,和宿主机上其他进程一样,都是由宿主机操 阅读全文
摘要:
1.并发案例,限流Guava RateLimiter Guava RateLimiter 如何解决高并发的限流问题 guava中的工具类RateLimiter 2.简单实用RateLimiter 假设已有线程池,每秒只能处理两个任务,提交任务过快,可能导致系统不稳定,用到限流 创建一个2个请求/秒的 阅读全文
摘要:
1.基础知识:进程 前情提要(docker 通过镜像技术,解决了应用打包的根本性难题) 2.容器本身没有价值,有价值的是"容器编排" 3.容器 容器其实是一种沙盒技术,就像集装箱一样,把应用装起来的技术 应用于应用之间,有了边界而不至于互相干扰 被装进集装箱的应用,可以方便搬来搬去 4.程序,进程 阅读全文
摘要:
1.Commons Logging和log4j 前情提要: Commons Logging和log4j好基友,一起走。Commons Logging负责充当日志API,log4j负责日志底层实现 搭配起来使用非常便于开发 2.SL4J和Logback SL4J类似于commons logging,也 阅读全文
摘要:
1.生产者-消费者模式 Worker Thread模式类比现实工厂里车间工人的工作模式 生产者-消费者模式,类比显示工厂里流水线模式 2.应用场景 Log4j2异步Appender内部使用生产者-消费者模式。 3.生产者,消费者模式优点 核心:任务队列 生产者线程生产任务,并将任务添加到任务队列中 阅读全文
摘要:
1.Assert断言 伪代码 assert x >= 0 : "x must >= 0"; // assert 即为断言, x >= 0预期为true,如果计算结果为false,则断言失败 2.assert断言失败,抛出AssertionError 抛出的是Error不是Exception 抛出错误 阅读全文
摘要:
1.两阶段终止模式 如何优雅的终止线程? 2.线程执行完或者出现异常就会进入终止状态 现在要思考的是,不是自己终止自己,而是在线程T1中终止线程T2 而且是优雅的终止,给T2线程一个料理后事的机会,而不是被一剑封喉 3.历史 java的Thread类提供了一个stop方法,用来终止线程,但早已不适用 阅读全文
摘要:
1.WorkThread 设计模式 可以有效避免频繁创建,销毁以及OOM问题 2.类比现实 类比车间的工作模式 车间工人,有活大家一起干,没活就聊聊天 车间里工人的数量是确定的 3.编程世界映射车间的套路呢 如何实现Worker Thread模式 阻塞队列做任务池,创建固定数量的线程消费阻塞队列。 阅读全文
摘要:
1.Thread-Pre-Message 设计模式 简单来说,就是为每个任务分配一个独立的线程,最简单的分工方法 2.并发领域3个核心问题 分工,同步,互斥 同步,互斥源自微观,分工来自宏观 Thread-Pre-Message其实就是一种分工模式 3.映射现实世界 教育小朋友搞不定,委托学校老师 阅读全文
摘要:
1.Balking模式 线程安全的单例模式 2.多线程的if 多线程if条件快速放弃的方案 3.案例精选 编辑器自动保存功能 每隔一段时间自动执行存盘操作,前提是文件做过修改。如果文件没有做过操作,不要等待,快速放弃存盘。和上一篇的Guarder Suspension在这一点有很大的不同。Guard 阅读全文
摘要:
1.Guarded Suspension设计模式 等待唤醒机制的规范实现 2.业务场景 用户发请求->异步消息->MQ->等MQ返回结果,结果返回浏览器 给mq发消息的线程是T1,但消费mq结果的线程不是T1,那么线程T1如何等待MQ的返回结果? 3.伪代码 class Message{ Strin 阅读全文
摘要:
1.Copy-on-Write 又称COW,写时复制 String的replace()方法,没有修改内部的value数组,而是新创建了一个不可变对象 这种方法在解决不可变对象时,经常使用 这其实就是一种Copy-on-write方式 不可变对象的写操作往往都是使用 Copy-on-Write 方法解 阅读全文
摘要:
1.什么是Immutability Immutability,不变性, 叫做不变性设计模式,简单来说就是对象一旦创建,状态就不再发生变化。 变量一旦被赋值,就不允许修改了(没有写操作);没有修改操作,就保持了不变性 2.什么情况用Immutablity设计模式 多个线程同时读写同一个共享变量存在并发 阅读全文
摘要:
1.RunWith 注解 RunWith 就是一个运行器 可以在单元测试的时候,自动创建spring的应用上下文 2.正确使用 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo 阅读全文
摘要:
泛型类,泛型方法的使用 传递入对象类型,返回出对象类型都是泛型 接口 public interface CloudParamGetter<IN, OUT> { OUT get(IN in); } 实现 public class VmParamGetter implements CloudParamG 阅读全文
摘要:
1.Mapper注解 在接口类上添加@Mapper,在运行时动态代理生成实现类 @Mapper public interface UserDao { // User getUser(); } 如果想要每个接口都要变成实现类,那么需要在每个接口上都添加@Mapper注解,比较麻烦,可以使用@Mappe 阅读全文
摘要:
1.说明 Configuration注解的出现就是为了替换xml文件 java配置是通过@Configuration和@Bean注解实现了 @Configuration注解,声明当前是一个配置类,相当于是spring中的一个xml文件 @Bean 注解: 作用在方法上,声明当前方法的返回值是一个Be 阅读全文
摘要:
1.消息的发送流程 一条消息从生产到被消费,将会经历3个阶段 生产阶段,Producer 新建消息,然后通过网络将消息投递给MQ Broker 存储阶段,消息将会存储在Broker端磁盘中 消费阶段,Consumer将会从Broker拉取消息 以上3个阶段,都有可能会丢失消息,只要找到这3个阶段丢失 阅读全文
摘要:
# 1.自定义异常 ```java public class CreateFailedException extends RuntimeException{ public CreateFailedException(String errMsg) { super(errMsg); } /** * Co 阅读全文
摘要:
1.介绍 面向切面编程——AOP 的具体实现 你可以使用 Interceptor 来执行某些任务,例如在 Controller 处理请求之前编写日志,添加或更新配置…… 在 Spring中,当请求发送到 Controller 时,在被Controller处理之前,它必须经过 Interceptors 阅读全文
摘要:
0.ApiException /** * controller exception annotation */ @Retention(RUNTIME) @Target(METHOD) public @interface ApiException { Status value(); } 1.配置全局异 阅读全文
摘要:
1.需求 需要扫描某个包中的某个接口的实现类的需求 2.maven 依赖引入 <dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <version>0.9.11</version> 阅读全文
摘要:
1. Controller接收Date类型的数据 核心使用@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 来将传递过来的时间字符串转化为Date类型 @RestController @RequestMapping("res") public clas 阅读全文
摘要:
AutomicBoolean 介绍 java并发包下提供的原子变量,是原子类其中之一。基本特性是在多线程环境下,多个线程同时执行这些类的实例包含的方法时,具有排他性 当某个线程进入方法,不会被其他线程打断,而其他线程就像自旋转一样,等待该方法执行完成 原子性操作 阅读全文
摘要:
1.使用场景 @Resource和@Autowired都是做bean注入时使用 @Resource是jdk的注解,不是spring的注解;由包javax.annotation.Resource提供,需要导入,但是Spring支持该注解注入 2.相同点,不同点 共同点:两者都可以写在setter方法, 阅读全文
摘要:
1.配置文件添加paginationInterceptor @Configuration @MapperScan("fama.cost.*.mapper") public class SpringConnectionFactory { @Bean public MybatisPlusIntercep 阅读全文
摘要:
1.引入依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <depende 阅读全文
摘要:
1.mybatis的多参数使用 mapper 使用 通过@param注解,传递到xml中的参数名称指定 public interface RedisInstanceTypesMapper extends BaseMapper<RedisInstanceType> { ; List<RedisInst 阅读全文
摘要:
1.接口 RequestType 是泛型,不是具体的类 T 也是泛型,不是具体类,只是这个泛型必须extends CloudResult public interface CloudClient<RequestType, T extends CloudResult> { CloudResponse< 阅读全文
摘要:
stream分组后的map是有序map List<RedisInstanceTypeDto> typeDtoList = ModuleHelper.mapAll(redisInstanceTypes,RedisInstanceTypeDto.class); Map<Integer,List<Redi 阅读全文
摘要:
1.pom引入 <dependency> <groupId>org.modelmapper</groupId> <artifactId>modelmapper</artifactId> <version>2.3.8</version> </dependency> 2.将DAO对象转为DTO对象 Us 阅读全文
摘要:
当使用mybatis plus3.2.0+springboot2.1.1 报错 Error attempting to get column from result set 1.一般出现这种问题,最简单的错误可能是因为数据库的字段类型和实体类的类型不一致 2.但我不是,我是因为在实体类里面使用了@b 阅读全文