谷粒商城学习笔记
一只小灰灰
这个作者很懒,什么都没留下…
展开
-
ElasticSearch部分(分析)
一、aggregations聚合分析GET bank/_search{ "query": { "match": { "address": "mill" } }, "aggs": { "ageAgg": { "terms": { "field": "age", "size": 10 } } }}{ "took" : 13, "timed_out" : false, "_sh原创 2022-04-05 17:28:29 · 2170 阅读 · 0 评论 -
ElasticSearch部分(增删改查)
一、基本概念1、index(索引)动词,相当于MySQL中的insert名词,相当于MySQL中的Database2、Type(类型)在index(索引)中,可以定义一个或多个类型类似于MySQL中的Table:每一种类型的数据放在一起3、Document(文档)保存在某个索引(Index)下,某中类型(Type)的一个数据(Document),文档是JSON格式的,Document就像是MySQL中的某个Table里面的内容...原创 2022-03-26 19:56:23 · 3051 阅读 · 0 评论 -
课时93 商城业务-异步-线程池详解
·线程池[ExecutorService]给线程池直接提交任务service.execute(new Runable01());创建:1)Executors2)new ThreadPoolExecutor当前系统中池只有一两个,每个异步任务,提交给线程池让他自己去执行就行七大参数corePoolSize:[5]核心线程数[一直存在除非(allowCoreThreadTimeOut)];maximumPoolSize:[200]最大线程数量;控制资源keepAliveTime:存活时间。如原创 2021-05-29 15:00:35 · 75 阅读 · 0 评论 -
课时92 商城业务-异步-异步复习
·继承Thread·实现Runnable接口·实现Callable接口+FutureTask(可以拿到返回结果,可以处理异常)·线程池给线程池直接提交任务区别:1、2不能得到返回值,3可以获取返回值1、2、3都不能控制资源4可以控制资源,性能稳定...原创 2021-05-29 01:02:39 · 66 阅读 · 0 评论 -
课时65 缓存-分布式锁-缓存一致性解决
无论是双写模式还是失效模式,都会导致缓存的不一致问题。即多个实例同时更新会出事。怎么办?1、如果是用户维度数据(订单数据、用户数据),这种并发几率非常小,不用考虑这个问题,缓存数据加上过期时间,每隔一段时间触发读的主动更新即可2、如果是菜单,商品介绍等基础数据,也可以去使用canal订阅binlog的方式3、缓存数据+过期时间也足够解决大部分对于缓存的需求4、通过加锁保证并发读写,写写时候按顺序排好队,读读无所谓。所以适合使用读写锁。(业务不关心脏数据,允许临时脏数据可忽略)总结·我们能放入缓存原创 2021-05-20 09:57:05 · 199 阅读 · 0 评论 -
课时62 缓存-分布式锁-Redisson-读写锁补充
保证一定读到最新数据,修改时间,写锁是一个排他锁(互斥锁、独享锁),读锁是一个共享锁写锁没释放读就必须等待读+读:相当于无锁,并发读,只会在redis中记录好,所有当前的读锁。他们都会同时加锁成功写+读:等待写锁释放写+写:阻塞方式读+写:有读锁,写也需要等待只要有写的存在,都必须等待...原创 2021-05-19 20:53:03 · 73 阅读 · 0 评论 -
课时61 缓存-分布式锁-Redisson-读写锁测试
保证一定能读到最新数据,修改期间,写锁是一个排他锁(互斥锁)。读锁是一个共享锁写锁没释放读就必须等待原创 2021-05-19 17:30:50 · 88 阅读 · 0 评论 -
课时57 缓存-分布式锁-分布式锁原理与使用
1、setnx占好了位,业务代码异常或者程序在页面过程中宕机。没有执行删除锁逻辑,就造成了死锁解决:设置锁的自动过期,即使没有删除,会自动删除2、设置过期时间,必须和加锁是同步的,原子的...原创 2021-05-18 22:54:58 · 52 阅读 · 0 评论 -
课时53 缓存-缓存使用-压力测试出的内存泄露及解决
产生堆外内存溢出:OutOfDirectMemoryError1、springboot2.0以后默认使用lettuce作为操作redis的客户端。它使用netty进行网络通信2、lettuce的bug导致netty堆外内存溢出,-Xmx300m;netty如果没有指定堆外内存,默认使用-Xmx300m可以通过 -Dio.netty.maxDirectMemory只去调大堆外内存解决方案:不能是要要功能 -Dio.netty.maxDirectMemory只去调大堆外内存1)升级lettuce客户端原创 2021-05-17 21:17:49 · 386 阅读 · 0 评论 -
课时54 缓存-缓存使用-缓存击穿、穿透、雪崩
1、空结果缓存,解决缓存穿透2、设置过期时间(加随机值):解决缓存雪崩3、加锁:解决缓存击穿原创 2021-05-17 20:22:41 · 76 阅读 · 0 评论 -
课时51 缓存-缓存使用-整合redis测试
opsForValue()opsForHash()opsForList()opsForSet()opsForZSet()原创 2021-05-17 15:42:25 · 95 阅读 · 0 评论 -
课时50 缓存-缓存使用-本地缓存与分布式缓存
哪些数据适合放入缓存?·即时性、数据一致性要求不高的·访问量大且更新频率不高的数据原创 2021-05-17 13:37:36 · 91 阅读 · 0 评论 -
课时 51 性能测压-优化-优化三级分类数据获取
三级分类数据获取 避免多次和数据库交互原创 2021-05-16 23:31:17 · 46 阅读 · 0 评论 -
MySQL 索引(谷粒商城db优化) 课时46
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。创建索引时,你需要确保该索引是应用在 SQL 查询原创 2021-05-16 17:56:24 · 109 阅读 · 0 评论 -
课时43 性能压测-性能监控-堆内存与垃圾回
虚拟机:本地方法栈、程序计数器、虚拟机栈、堆区、元数据区、JIT编译产物垃圾回收机制作用的区域:堆区(Heap)原创 2021-05-11 16:54:28 · 50 阅读 · 0 评论 -
系统错误码参考
错误码和错误信息定义类1、错误码定义规则为5位数字2、前两位表示业务场景,最后三位表示错误码。例如,100001。10:通用 001:系统未知异常3、维护错误码后需要维护错误描述,将它们定义为枚举形式错误码列表10:通用001:参数格式校验11:商品12:订单13:购物车14:物流...原创 2021-05-11 16:53:38 · 493 阅读 · 0 评论 -
课时35 商城业务-首页-整合thymeleaf渲染首页
每一个微服务都可以独立部署、运行、升级、独立自治;技术、架构、业务原创 2021-05-11 16:22:31 · 146 阅读 · 0 评论 -
课时76 商品服务-API-平台属性-规格参数新增与VO
Object划分1、PO(persistant object) 持久化对象PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作2、DO(Dormain Object) 领域对象就是从现实世界中抽象出来的有形或无形的业务实体3、TO(Transfer Object) 数据传输对象不同的应用程序之间传输的对象4、DTO(Data Transfer Object) 数据传输对象这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗原创 2021-04-14 20:31:13 · 106 阅读 · 0 评论 -
课时42 前端基础-Vue-生命周期和钩子函数
生命周期每个Vue示例在被创建时都要经过一系列的初始化过程:创建实例,装载模板,渲染模板等等。Vue为生命周期中的每个状态都设置了钩子函数(监听函数)。每当Vue示例处于生命周期时,对应的函数就会被触发调用生命周期:你不需要立马弄明白所有的东西...原创 2021-03-29 22:30:00 · 75 阅读 · 0 评论 -
课时41 前端基础-Vue-组件化基础
组件化在大型应用开发的时候,页面可以划分成很多部分。往往不同的页面,也会有相同的部分。例如可能会有相同的头部导航。但是如果每个页面都独自开发,这无疑增加了我们开发的成本。所以我们会把页面的不同部分拆分成组件,然后在不同页面就可以共享这些组件,避免重复开发在vue里,所有的vue示例都是组件·组件其实也是一个Vue实例,因此它在定义时也会接收:data、methods、生命周期函数等·不同的是组件不会与页面的元素绑定,否则就无法复用了,因此没有el属性·但是组件渲染需要html模板,所以增加了te原创 2021-03-29 22:16:10 · 66 阅读 · 0 评论 -
课时39 前端基础-Vue-指令-v-on、v-for、v-if
事件修饰符在事件处理程序中调用event.preventDefault()或event.stopPropagation()是非常常见的需求,尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理DOM事件细节为了解决这个问题,Vue.js为v-on提供了事件修饰符。修饰符是由点开头的指令后缀来表示的。...原创 2021-03-29 19:17:37 · 127 阅读 · 0 评论 -
课时38 前端基础-Vue-指令-单向绑定&双向绑定
·花括号格式:{{表达式}}说明:该表达式支持js语法,可以调用js内置函数(必须有返回值)表达式必须有返回结果,例如 1 + 1,没有结果的表达式不允许使用,如:let a = 1 + 1可以直接获取Vue示例中定义的数据或函数<!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-w原创 2021-03-27 21:32:42 · 70 阅读 · 0 评论 -
课时37 前端基础-Vue-基本语法&插件安装
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>tes1t1</title> </head> <body> <div id="app"&原创 2021-03-27 17:36:58 · 60 阅读 · 0 评论 -
课时36 前端基础-Vue-介绍&HelloWorld
<body> <div id="app"> <h1> {{name}},非常帅</h1> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> //1、vue声明式渲染 let vm = new Vue({ el:"#app", data:原创 2021-03-25 22:39:33 · 43 阅读 · 0 评论 -
课时35 前端基础-ES6-模块化
//hello.js//export const util = {// sum(a,b) {// return a + b;// }//}//export {util}//`export`不仅可以导出对象,一切js变量都可以导出。比如:基本类型变量、函数、数组、对象export default { sum(a,b) { return a + b; }}//user.jsvar name = "jack"var age = 21function add(a, b){原创 2021-03-25 15:07:29 · 38 阅读 · 0 评论 -
课时34 前端基础-ES6-promise异步编排
//promise.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>原创 2021-03-25 14:52:09 · 64 阅读 · 0 评论 -
课时33 前端基础-ES6-map、reduce
//数组中新增了map和reduce方法//map():接收一个函数,将原数组中单独所有元素用这个函数处理后放入新数组返回 let arr = [ '1', '20', '-5', '3']; arr = arr.map((item) => { return item * 2 }); arr = arr.map(item => item * 2); console.log(arr); //reduce()为数组中的每一个元素依次执行回调函数,不包括数组中被删原创 2021-03-25 11:08:24 · 43 阅读 · 0 评论 -
课时32 前端基础-ES6-对象优化
// 1、新增的API const person = { name: "jack", age: 21, language: ['java', 'js', 'css'] } console.log(Object.keys(person)); //["name", "age", "language"] console.log(Object.values(person)); //["jack", 21, Array(3)] console.log(Object.entries(pers原创 2021-03-25 09:49:17 · 47 阅读 · 0 评论 -
课时31 前端基础-ES6-箭头函数
//1、函数参数默认值 //在ES6以前,我们无法给一个函数参数设置默认值,只能采用变通写法: function add(a,b) { // 判断b是否为空,为空就给默认值1 b = b || 1; return a + b; } // 传一个参数 console.log(add(10)); //现在可以这么写:直接给参数写上默认值,没传就会自动使用默认值 function add2(a,b = 1) { return a + b; } console.原创 2021-03-24 22:51:26 · 79 阅读 · 0 评论 -
课时30 前端基础-ES6-解构&字符串
//1、数组解构 let arr = [1,2,3]; let a = arr[0]; let b = arr[1]; let c = arr[2]; console.log(a,b,c); let[a,b,c] = arr; console.log(a,b,c); //2、对象解构 const person = { name: "jack", age: 21, language:['java','js','css'] } const name =原创 2021-03-24 21:22:01 · 72 阅读 · 0 评论 -
课时29 前端基础-ES6-let&const
// var声明的变量往往会越界// let声明的变量有严格局部作用域 { var a = 1; let b = 2; } console.log(a); // 1 console.log(b); // ReferenceError: b is not defined // var可以声明多次// let只能声明一次 var m = 1 var m = 2 var n = 3 // let n = 4 console.log(m) //2 console.lo原创 2021-03-24 20:50:21 · 34 阅读 · 0 评论 -
课时8 环境-linux安装docker
Docker虚拟化容器技术,Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行程序,容器之间互相隔离原创 2021-01-22 08:53:25 · 85 阅读 · 0 评论 -
课时3 简介-分布式基础概念
微服务微服务架构风格,镜像是把一个单独的应用程序开发为一套小服务,每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API。这些服务围绕业务能力来构建,并通过完全自动化部署机制来独立部署。这些服务使用不同的编程语言书写,以及不同数据存储技术,并保持最低限度的集中式管理简而言之:拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署进行集群集群是个物理形态,分布式是个工作方式只要是一堆机器,就可以叫集群,它们是不是一起协作着干活,这个谁也不知道分布式《分布式系统原理与原创 2021-01-14 16:14:49 · 107 阅读 · 0 评论 -
课时1 简介-项目介绍
电商模式市面上有5种常见的电商模式B2B、B2C、C2C、O2O·B2B模式 (Business to Business)是指商家与商家建立的商业关系。如:阿里巴巴·B2C模式(Business to Consumer)就是我们经常看到的供应商直接把商品卖给用户,即“商对客”模式,也就是通常说的商业零售,直接面向消费者销售产品和服务。如:苏宁易购、京东、天猫、小米商场·C2B模式(Customer to Business)即消费者对企业。先有消费者需求产生而后有企业生产,即先有消费者提出需求,原创 2021-01-14 14:04:30 · 140 阅读 · 0 评论