自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(325)
  • 论坛 (2)
  • 收藏
  • 关注

原创 Java设计模式类型——桥接模式

文章目录1:需求2:使用传统方式2.1 使用传统方式优缺点3:桥接模式3.1 桥接模式解决手机操作问题4:桥接模式的注意事项和细节1:需求现在对不同品牌的手机类型实现操作编程(比如:开机,关机,上网等)2:使用传统方式使用传统方式思路2.1 使用传统方式优缺点扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加 一个手机品牌,也要...

2020-01-15 18:05:28 1150 6

原创 Java设计模式类型——单例设计模式

文章目录1:单例设计模式介绍2:单例设计模式八种方式2.1 饿汉式(静态常量)2.2 饿汉式(静态代码块)2.3 懒汉式(线程不安全)2.4 懒汉式(线程安全,同步方法)2.5 懒汉式(线程安全,同步代码块)2.6 双重检查2.7 静态内部类2.8 枚举3 :单例模式注意事项和细节说明1:单例设计模式介绍所谓类的单例设计模式,就是采取一定的方法保证在整个软件系统中,对某个类只可以存在一个对象实...

2020-01-14 15:29:53 531 7

原创 Tomcat的文件目录作用

bin目录:一些可执行文件目录(startup.bat,shutdown.bat)conf目录:相关的配置文件(server.xml)lib目录:相关的加包(tomcat依赖的jar包文件)logs目录:储存相关的运行日历(记录出错的信息)temp目录:相关缓冲文件webapps目录:把事先编好的代码放到web容器中(可执行项目,将我们开发的项目,放入该目录)work:存放的由jsp翻...

2019-08-24 13:27:49 317 3

原创 Java后端技术体系-学习顺序总结

2020-12-24 11:09:33 35

原创 电商项目——分布式事务——第十三章——中篇

文章目录1:本地事务在分布式下的问题2:本地事务隔离级别&传播行为等复习3:分布式CAP&Raft原理4:BASE5:分布式事务常见解决方案6:Seata&环境准备7:Seata分布式事务体验8:最终一致性库存解锁逻辑1:本地事务在分布式下的问题 @Transactional @Override public SubmitOrderResponseVo submitOrder(OrderSubmitVo vo) { confirmVoThrea

2020-11-25 15:00:25 32

原创 电商项目——订单服务——第十二章——中篇

文章目录1:订单基本概念2:订单登录拦截3:订单确认页模型抽取4:订单确认页数据获取5:Feign远程调用丢失请求头问题和Feign异步调用丢失请求头问题6:bug修改7:订单确认页渲染8:订单确认页库存查询9:订单确认页模拟运费效果10:订单确认页细节显示11:接口幂等性讨论12:订单确认页完成13:原子验令牌14:构造订单数据15:构造订单项数据16:订单验价17:保存订单数据18:锁定库存19:提交订单的问题1:订单基本概念2:订单登录拦截mall-orderOrderInter

2020-11-24 14:35:51 46

原创 接口幂等性介绍

文章目录1:什么是幂等性?2: 哪些情况需要防止?3: 什么情况下需要幂等?4:幂等解决方案比如我们遇到了一个提交订单的例子假设模拟网速很慢,它点击了多次提交订单,我们数据库的订单被插入了多份,订单的防止重复提交是非常重要的(无论是表单之间的提交,还是微服务之间的相互调用,都可能出现多次提交)专业术语就是要保证提交订单的幂等性(提交一次和提交一百次结果都是一样的),接下来我们就来讨论一下接口幂等性问题1:什么是幂等性?2: 哪些情况需要防止?3: 什么情况下需要幂等?4:幂等解决方案

2020-11-23 00:42:29 27

原创 电商项目——消息队列——第十一章——中篇

文章目录1:RabbitMQ简介2:RabbitMQ工作流程3:RabbitMQ安装4:Exchange类型5:Direct-Exchange6:Fanout-Exchange7:Topic-Exchange8:SpringBoot整合RabbitMQ9:AmqpAdmin使用10:RabbitTemplate使用11:RabbitListener&RabbitHandler接受消息12:可靠投递-发送端确认13:可靠投递-消费端确认1:RabbitMQ简介概述我们来讲一下队列和主题中的

2020-11-20 20:20:27 47 2

原创 电商项目——购物车——第十章——中篇

文章目录1:环境搭建2:数据模型分析3:VO编写4:ThreadLocal用户身份鉴别5:页面环境搭建6:添加购物车7:添加购物车细节8:RedirectAttribute9:获取&合并购物车10:选中购物项11:改变购物项数量12:删除购物项1:环境搭建我们先来搭建好购物车的环境第一步:创建一个购物车微服务,并且配置好域名,映射到我们的linux虚拟机,并编写好配置文件spring: application: name: mall-cart cloud: naco

2020-11-17 00:30:23 49 1

原创 电商项目——认证服务——第九章——中篇

文章目录1:环境搭建2:好玩的验证码服务倒计时3:整合短信验证码4:验证码防刷校验5:一步一坑的注册页环境6:异常机制7:MD5&盐值&BCrypt8:注册完成9:账号密码登录10:OAuth2.0简介11: weibo登录测试12:社交登录回调13:社交登录完成14:社交登录测试成功15:分布式session不共享不同步问题16:分布式session解决方案原理17:SpringSession整合18:自定义SpringSession完成子域session共享19:SpringSessio

2020-11-15 10:48:44 183 2

原创 电商项目——商城业务-检索服务——第六章——中篇

文章目录1:搭建页面环境2:调整页面跳转3:检索查询参数模型分析抽取4:检索返回结果模型分析抽取5:检索DSL测试-查询部分6:检索DSL测试-聚合部分7:SearchRequest构建-检索8:SearchRequest构建-排序,分页,高亮&测试9:SearchRequest构建-聚合10:SearchResponse分析&封装11:验证结果封装正确性12:页面基本数据渲染13:页面筛选条件渲染14:页面分页数据渲染15:页面排序功能16:页面排序字段回显17:页面价格区间搜索18:面包

2020-11-15 10:36:47 34 2

原创 分布式session解决方案原理

我们先来解决session不同步问题第一种方案第二种方案第三种方案第四种方案我们最终使用第四种方案来解决session不同步问题;前提:浏览器无论负载均衡到哪一个服务器,都会携带上一次访问的数据(也就是同域名情况下),如果是在不同域名的情况下,我们又要怎么解决????这就是子域问题如上的操作非常麻烦,我们以后可以使用SpringSession来统一解决我们可以使用SpringSession来解决session在分布式情况下带来的问题:session共享问题解决;不同服务,子域ses

2020-11-14 15:53:08 25 2

原创 自己动手整合阿里云的短信验证码

我们来调通一下发送验证码到手机,这就是一个第三方服务mall-third-party(短信服务)阿里云上面有免费使用的发送短信验证码如下,开通即可https://free.aliyun.com/product/cloudcommunication-free-trial?spm=5176.12901015.0.i12901015.729e525colmSdi开通完出现如下页面在阿里云控制台中注意一点:我们前端点击发送验证码,不可以直接到第三方服务(短信服务)里面,必须先通过我们的微服务,在让微服务发

2020-11-12 00:28:47 73 2

原创 电商项目——商品详情——第八章——中篇

文章目录1:环境搭建2:模型抽取3:规格参数4:销售属性组合5:详情页渲染6:销售属性渲染7:sku组合切换8:异步编排优化1:环境搭建前面我们复习了异步和线程池里的内容2:模型抽取3:规格参数4:销售属性组合5:详情页渲染6:销售属性渲染7:sku组合切换8:异步编排优化...

2020-11-11 00:25:00 51 4

原创 java.lang.IncompatibleClassChangeError: Found interface org.elasticsearch.common.bytes.BytesReferenc

我在官网上引入es的依赖(注意这个依赖,必须要和你安装的ES的版本一致)到mall-search中 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version&g

2020-11-07 10:36:30 102 1

原创 电商项目——商城业务-异步——第七章——中篇

文章目录1:异步复习2:线程池详解3:CompletableFuture3.1 启动异步任务3.2 完成回调与异常感知3.3 handle最终处理3.4 线程串行化3.5 两任务组合-都要完成3.6 两任务组合-一个完成3.6 两任务组合-多任务组合1:异步复习异步复习2:线程池详解线程池详解3:CompletableFuture在分布式架构中,我们还有一个需要解决的复杂任务场景,比如A,B,C三个异步任务进行运行,C必须等待A运行完的返回结果后才可以运行,B又不用等A,C我们可以直接异步运行

2020-11-06 22:14:43 29 2

原创 项目开发中为什么需要使用线程池???

文章目录1:异步2:线程池介绍2.1 创建线程池的两大方法:2.2 线程池的运行流程2.3 开发中为什么要使用线程池项目开发中为什么需要使用线程池???我们先从开启线程的几种方式进行比较,然后得出为什么需要使用线程池来进行开发??最后对线程池做一个简单的介绍1:异步在我们后来的开发中有很多异步场景,为了提高系统的吞吐量和运行时间,我们要做一些异步任务;异步我们都是使用Java里面的Thread开启线程的任务方式异步和同步区别:同步和异步的概念对于很多人来说是一个模糊的概念,是一种似乎只能意会不能

2020-11-06 14:22:14 82 1

原创 电商项目——缓存——第五章——中篇

文章目录1:缓存使用1.1 本地缓存与分布式缓存1.2 整合redis测试1.3 改造三级分类业务1.4 压力测试出现的内存泄露及解决1.5 缓存击穿,穿透,雪崩1.6 加锁解决缓存击穿问题1.7 本地锁在分布式下的问题2:分布式锁2.1 分布式锁原理与使用2.2 Redisson简介&整合2.3 Redisson-lock锁测试2.4 Redisson-lock看门狗原理-redisson如何解决死锁2.5 Redisson-读写锁测试2.6 Redisson-读写锁补充2.7 Redisson

2020-11-04 16:39:35 46 2

原创 SpringCache——自定义缓存配置——如何将自定义的数据保存为json格式

我们接下来就自定义将数据保存为json格式我们先来看源码CacheAutoConfiguration里面的@EnableConfigurationProperties(CacheProperties.class)(将所有的属性都绑定到这里面),我们的CacheAutoConfiguration源码还有如下的配置可以导入CacheConfigurations缓存的自动配置类/** * {@link ImportSelector} to add {@link CacheType} configurati

2020-11-04 15:07:34 67 1

原创 缓存一致性解决

根据上一章的学习,我们现在就可以用Redisson框架来解决分布式锁的问题,进行修改获取三级二级分类代码如下 //todo 产生堆外内存溢出异常:OutOfDirectMemoryEror @Override public Map<String, List<Catelog2Vo>> getCatalogJson() { String catalogJSON = stringRedisTemplate.opsForValue().get("cat

2020-11-04 03:14:32 45 4

原创 分布式锁的原理与使用

文章目录1:分布式锁演进-阶段一2:分布式锁演进-阶段二3:分布式锁演进-阶段三4:分布式锁演进-阶段四5:分布式锁演进-阶段五-最终形态为了锁住所有的东西我们就要使用分布式锁,前面我们已经讲过了使用本地锁不可以再分布式下正确加锁的情况,原因是本地锁只可以锁住当前进程,在分布式情况下,有很多服务,每一个锁只可以锁自己的服务,我们必须让所有的服务,只可以有一个锁进来,这种情况我们必须要使用分布式锁来解决分布式下的缓存问题。我们分布式锁该如何使用呢?我们先来讨论一种简单的原理,如下图我们现在有这么多的商

2020-11-02 23:28:51 54 2

原创 自己总结的19 个 Java 核心技术

文章目录1. JVM相关2. Java的运行3. 数据类型4. 对象和实例5. 访问控制6. 流程控制7. 面向对象编程的概念8. static9. 基础知识点10. 集合框架11. 异常框架12. Java IO13. 多线程并发14. 网络15. 时间日期处理16. XML解析/JSON解析17. Maven使用18. 泛型19. 注解1. JVM相关对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资深开发者

2020-11-02 00:48:26 59 1

原创 10个冷门的Dcoker技巧

在平时的学习中,docker 接触得很多,除了经常使用的 docker run ,docker stop 等命令,docker 还有很多十分有用但是却不经常使用的命令,下面就来总结一下:docker top CONTAINERID这个命令是用来查看一个容器里面的进程信息的,比如你想查看一个 nginx 容器里面有几个 nginx 进程的时候,就可以这么做:docker load && docker save我一般使用这两个命令去下载打包 Kubernetes 的镜像,因为你知

2020-11-01 23:59:25 986 14

原创 缓存击穿,穿透,雪崩

在我们高并发系统下,就这么一个简单的缓存逻辑它暗藏了很多玄机,如下categoryServiceImpl @Override public Map<String, List<Catelog2Vo>> getCatalogJson() { //给缓存中放入json字符串,拿出json字符串,还要逆转为可用的对象类型【序列化,反序列化】 /** * 由于网络传输,我们相当于给内存创建了一个对象catalogJsonFromDb

2020-11-01 23:32:20 53 1

原创 本地缓存与分布式缓存介绍

1:本地缓存与分布式缓存性能提升大神器:缓存,我们合理利用缓存就可以对系统性能有一个大提升,当然使用缓存也会有很多的问题,我们就一起提升解决通过以前的性能优化,我们可以优化它的业务逻辑来增加它的吞吐量,但在更多的时候,对于一些复杂的业务,我们已经不可以通过优化它的业务逻辑来增加吞吐量了,比如一些复杂的查询功能,每次查询就会很麻烦,我们就需要使用缓存。第一次查询的时候就把它放入缓存里面,以后我们需要数据就直接从缓存里面获取,没必要进行复杂的查询,检索。最基本的缓存就是map(本地缓存)

2020-11-01 01:52:29 39 1

原创 电商项目——性能压测——第四章——中篇

文章目录1:压力测试1.1 基本介绍1.2 Apache JMeter安装使用1.3 JMeter在windows下地址占用bug解决2:性能监控2.1 堆内存与垃圾回收2.2 jvisualvm使用3:优化3.1 中间控件对性能的影响3.2 简单优化吞吐量测试3.3 nginx动静分离3.4 模拟线上应用内存崩溃宕机情况3.5 优化三级分类数据获取1:压力测试1.1 基本介绍在分布式开发中,我们都将微服务拆分成一个个独立的模块,每一个微服务模块在上线之前,或者之后,都要对他进行压力测试。压力测试就是

2020-10-31 23:24:20 142

原创 电商项目——商城业务-首页——第三章——中篇

文章目录1:整合thymeleaf渲染页2:整合dev-tools渲染一级分类数据3:渲染二级三级分类数据4:nginx-搭建域名访问环境一(反向代理配置)5:nginx-搭建域名访问环境二(负载均衡到网关)1:整合thymeleaf渲染页前面我们编写了商品上架功能,让我们可以在后台点击商品上架按钮进行上架接下来我们开发整个商城的前端界面,包括首页内容,检索内容,购物车,订单等在mall-product中调通前后端不分离的效果。第一步:导入thymeleaf <dependency&g

2020-10-31 12:30:58 952 12

原创 nginx-搭建域名访问环境

文章目录1:反向代理配置2:负载均衡到网关按照正常流程如果项目上线的话我们必须要买一台服务器,我们就会有一个公网ip地址,这样的花别人都可以访问到ip地址,为这个地址绑定上域名,备案等操作,这样别人访问域名就可以访问到我们ip地址,但这样太麻烦了,我们开发环境中只要做基本环境,1:反向代理配置正向代理:请求发给我们的代理服务器,在转给我们整个网络互联网,所以互联网上看到的所有ip地址都是来源于正向代理服务器的ip地址反向代理在集群开发的时候非常需要,比如任何人去访问京东,京东有后台服务

2020-10-31 12:30:17 41

原创 电商项目——商城业务-商品上架——第二章——中篇

文章目录1:sku在es中的存储模型分析2:nested数据类型场景3:构造基本数据4:构造sku检索属性5:远程查询库存&泛型接口封装6:远程上架接口7:上架接口调试&feign源码8:抽取响应结果&上架测试完成1:sku在es中的存储模型分析es作为全文检索引擎,1.它承担项目里的所有全文检索功能,2.也会承担日志里面的全文检索信息功能(项目里面有些日志我们要进行快速定位,日志也有检索需求,我们把它传输到ES里面(有一个技术栈叫ELK,,LogStash负责收集日志,把收集来

2020-10-28 23:21:32 76

原创 电商项目——全文检索-ElasticSearch——第一章——中篇

文章目录1:简介2:Docker安装ES-存储和检索数据3:Docker安装Kibana-可视化检索数据4:入门-_cat5:入门-put&post新增数据6:入门-get查询数据&乐观锁字段7:入门-put&post修改数据8:入门-删除数据&bulk批量操作导入样本测试数据9:进阶-两种查询方式10:进阶-QueryDSL基本使用&match_all11:进阶-match全文检索12:进阶-match_phrase短语匹配13:进阶-multi_match多字段匹

2020-10-28 00:14:05 84

原创 SpringBoot整合ES

文章目录1:SpringBoot整合hign-level-client2:整合-测试保存1:SpringBoot整合hign-level-client我们接下来用java操作es检索场景:检索条件的时候,就要给es发送请求,检索出真正的商品,展示到界面中,这个请求应该由一段java程序来接受,并且发给es来处理,处理的结果在返回给前端界面,对于java来操作es有如下两种方式https://www.elastic.co/guide/en/elasticsearch/client/java-re

2020-10-27 23:56:33 156 2

原创 caused \“rootfs_linux.go:58: mounting \\\“/mydata/elasticsearch/config/elasticsearch.yml\\\“ to roo

caused \"rootfs_linux.go:58: mounting \\\"/mydata/elasticsearch/config/elasticsearch.yml\\\" to rootfs \\\"/var/lib/docker/overlay2/8bb43ca22869a883de751cd70e5b0e625c7ab67c084051c81ef6df25ab0ede00/merged\\\" at \\\"/var/lib/docker/overlay2/8bb43ca22869a.

2020-10-26 22:37:40 179

原创 Kibana server is not ready yet报错的过程分析

我安装好ES后,也进行了安装Kibana docker run --name Kibnana -e ELASTICSEARCH_HOST=http://192.168.174.139:9200 -p 5601:5601 -d kibana:7.4.2但是启动后发现报Kibana server is not ready yet我初步判断认为是浏览器没有缓过来,再次刷新,一直刷新也不行然后打开执行docker ps查看是否ES,Kibana都成功启动,发现是的然后我就想是不是启动kibnana时报错

2020-10-24 15:35:55 87

原创 如何直接在Vagrantfile文件中扩大磁盘根目录?

大家认真阅读,如下的github就可以找出答案vagrant-disksize

2020-10-22 01:22:51 35

原创 Vagrantfile文件介绍

文章目录1:Vagrantfile2:装载命令和合并(Load Order and Merging)3:查找路径(Lookup Path)4:配置版本(Configuration Version)1:VagrantfileVagrantfile的主要功能是描述项目所需的机器类型,以及如何配置和提供这些机器。Vagrantfiles之所以称为Vagrantfiles,是因为该文件的实际文本文件名是Vagrantfile(除非您的文件系统在严格区分大小写的模式下运行,否则大小写并不重要)。Vagrant意

2020-10-22 00:20:55 37

原创 电商项目——商品服务-API-仓库管理——第十六章——上篇

文章目录1:整合ware服务&创建采购需求2:查询库存&创建采购需求3:合并采购需求4:领取采购单5:完成采购6:商品管理-SPU规格维护1:整合ware服务&创建采购需求WareInfoController@RestController@RequestMapping("ware/wareinfo")public class WareInfoController { @Autowired private WareInfoService wareInfoSe

2020-10-20 08:57:18 107

原创 电商项目——商品服务-API-商品管理——第十五章——上篇

文章目录1:SPU检索2:SKU检索1:SPU检索SpuInfoController@RestController@RequestMapping("product/spuinfo")public class SpuInfoController { @Autowired private SpuInfoService spuInfoService; /** * 列表 */ @RequestMapping("/list") //@Requi

2020-10-19 22:03:24 41

原创 电商项目——商品服务-API-新增商品——第十四章——上篇

文章目录1:调试会员等级相关接口2:获取分类关联的品牌3:获取分类下所有分组以及属性4:商品新增vo抽取5:商品新增业务流程分析6:保存SPU基本信息7:保存SKU基本信息8:调用远程服务保存优惠等信息9:商品保存debug完成10:商品保存及其它问题处理1:调试会员等级相关接口我们后来发布的所有商品都是通过下面的形式发布的我们先完善商品维护下的发布商品的所有接口mall-memberhttp://localhost:10000/member/memberlevel/list{"m

2020-10-19 20:30:16 92 4

原创 电商项目——商品服务-API-平台属性——第十三章——上篇

文章目录1:规格参数新增与VO2:规格参数列表3:规格修改4:销售属性维护5 :查询分组关联属性&删除关联6:查询分组未关联的属性7:新增分组与属性关联1:规格参数新增与VOAttrGroupController .java@RestController@RequestMapping("product/attrgroup")public class AttrGroupController { @Autowired private AttrGroupService att

2020-10-18 14:50:02 71

原创 Object划分

文章目录1:Po(persistant object)持久对象2:DO (Domain Object)领域对象3:TO(Transfer Object),数据传输对象4:DTO (Data Transfer Object)数据传输对象5:Vo(value object)值对象6:BO(business object)业务对象7:POJO(plain ordinary java object)简单无规则java对象8:DAO(data access object)数据访问对象1:Po(persistant

2020-10-16 19:38:47 59 3

空空如也

空空如也

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

TA关注的人 TA的粉丝

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