04 2022 档案
摘要:有什么用? 异步处理 缩短服务响应时间 应用解耦 订单系统无需直接远程调用库存系统 流量控制 大并发流量时,可存入队列中,根据系统能力自行消费消息 一、概述 1. 大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力 2. 消息服务中两个重要概念: 消息代理(message broker
阅读全文
摘要:1、本地事务 一、事务的基本性质 数据库事务的几个特性:原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily),简称就是 ACID; 原子性:一系列的操作整体不可拆分,要么同时成功,要么同时失败 一致性:数据在事务
阅读全文
摘要:1、正向代理与反向代理 正向代理:如ke学上网,隐藏客户端信息 反向代理:屏蔽内网服务器信息,负载均衡访问 2、Nginx+Windows搭建域名访问环境 2.1修改Host文件 路径:C:\Windows\System32\drivers\etc 添加域名映射 192.168.56.10 guli
阅读全文
摘要:List<Long> searchAttrIds = attrService.selectSearchAttrIds(attrIds); //转为Set,使用set的contains进行匹配性能更好 Set<Long> idSet = new HashSet<>(searchAttrIds); Li
阅读全文
摘要:简介 https://www.elastic.co/cn/what-is/elasticsearch 全文搜索属于最常见的需求,开源的 Elasticsearch 是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它 Elas
阅读全文
摘要:@Configuration public class GulimallConfiguration { @Bean public CorsWebFilter corsWebFilter(){ UrlBasedCorsConfigurationSource source = new UrlBasedC
阅读全文
摘要:一、什么是幂等性 接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用;比如说支付场景,用户购买了商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录
阅读全文
摘要:feign远程调用时会构建一个新的请求模板 解决: 使用feign请求拦截器requestInterceptor给新的请求模板加上请求头 @Configuration public class GuliFeignConfig { @Bean("requestInterceptor") public
阅读全文
摘要:使用案例(在购物车页面获取登录用户信息) 使用拦截器 /** *在执行目标方法之前,判断用户的登录状态。并封装传递给controller目标请求 * **/@Componentpublic class CartInterceptor implements HandlerInterceptor { p
阅读全文
摘要:1、手机短信验证码防刷校验 将第一次生成的验证码存入redis,并设置过期时间,当二次请求的时候从redis获取验证码,如果存在则校验过期时间 @ResponseBody@GetMapping("/sms/sendcode")public R sendCode(@RequestParam("phon
阅读全文
摘要:一、缓存 1、缓存使用 为了系统性能的提升,我们一般都会将部分数据放入缓存中,加速访问。而 db 承担数据落盘工作。 哪些数据适合放入缓存? 即时性、数据一致性要求不高的 访问量大且更新频率不高的数据(读多,写少) 举例:电商类应用,商品分类,商品列表等适合缓存并加一个失效时间(根据数据更新频率来定
阅读全文
摘要:一、线程回顾 1、初始化线程的 4 种方式 继承 Thread 实现 Runnable 接口 实现 Callable 接口 + FutureTask (可以拿到返回结果,可以处理异常) 线程池 public class ThreadTest { public static ExecutorServi
阅读全文
摘要:1、简介 Spring 从 3.1 开始定义了 org.springframework.cache.Cache和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术;并支持使用 JCache(JSR-107)注解简化我们开发; Cache
阅读全文
摘要:1、本地锁的问题 本地锁只能锁住当前进程,当负载均衡到其他的集群服务时又重复查询db了 2、分布式锁实现 保证加锁和解锁的原子操作。 使用 RedisTemplate 操作分布式锁 public Map<String, List<Catelog2Vo>> getCatalogJsonFromDbWi
阅读全文
摘要:1、缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中,将去查询数据库,但是数据库也无此记录,我们没有将这次查询的 null 写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。 在流量大时,可能 DB 就挂掉了,要是有人利用不存在的 key 频繁攻击
阅读全文
摘要:1、let声明变量 // var声明的变量往往会越域// let声明的变量有严格局部作用域 { var a = 1; let b = 2; } console.log(a); // 1 console.log(b); // ReferenceError: b is not defined / / v
阅读全文
摘要:1. 单行子查询 即子查询只返回一条数据记录 1.1 单行比较操作符 操作符 含义 = 等于 > 大于 >= 大于等于 < 小于 <= 小于等于 <> 不等于 1.2 代码示例 返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id和工资 SELECT last_n
阅读全文
摘要:1. 聚合函数介绍 什么是聚合函数 聚合函数作用于一组数据,并对一组数据返回一个值。 聚合函数语法 1.1 AVG和SUM函数 可以对数值型数据使用AVG 和 SUM 函数。 SELECT AVG(salary), SUM(salary) FROM employees WHERE job_id LI
阅读全文
摘要:对单行记录使用 1.数值函数 1.1 基本函数 函数 用法 ABS(x) 返回x的绝对值 SIGN(X) 返回X的符号。正数返回1,负数返回-1,0返回0 PI() 返回圆周率的值 CEIL(x),CEILING(x) 返回大于或等于某个值的最小整数 FLOOR(x) 返回小于或等于某个值的最大整数
阅读全文
摘要:分类1:等值连接 vs 非等值连接 等值连接 查询语法: SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2; #连接条件 拓展1:多个连接条件与 AND 操作符
阅读全文
摘要:1.排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC(ascend): 升序 DESC(descend):降序ORDER BY 子句在SELECT语句的结尾。 1.2 单列排序 SELECT last_name, job_id, department_id, hire_date
阅读全文