自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 FastDFS

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。国开发源的作用:费用便宜、重要资源掌握在自己手里、访问速度购买CDNOSS存储:第三方存储服务。优点:实现技术简单,不需要搭建服务,只调用服务提供方的api即可。缺点:你的数据在第三方手上,费用高。创业型(早期成本低,快速实现)

2023-01-08 21:23:52 277 2

原创 Feign抽取、OkHttp连接池

我们发现,如果每一个feign都有相关的针对单表的操作,那么每一个都写一个样的代码是不合理的而且是麻烦的,那么我们可以参考抽取controller一样的方式去抽取feign ,我们不搞那么复杂,因为feign只是接口声明,我们是可以使用okhttp ,默认的feign调用httpUrlConnection每次都会创建一个链接对象。​ 在使用默认的feign的时候,feign底层实际上是使用restTemplete 而restTemplate底层又使用到了httpclient,默认使用java自带的。

2023-01-04 22:00:09 691

原创 通用异常、通用Controller的抽取、日志、JWT介绍

目前的代码中如果发生系统异常,则直接会给用户抛出不友好的异常信息。为了提高前后台用户的体验,并且系统本身很多的地方都会有一些业务相关的异常,需要统一进行捕获并进行返回给前端。springmvc为我们提供了几个注解 实现统一异常的捕获功能,根据不同的异常的类型进行不同的处理。1.需要处理系统异常相关 未知的错误2.需要处理自定义业务异常相关 已知的业务的错误。例如 商品获取不到,查询不到数据等。随着 Restful API、微服务的兴起,基于 Token(令牌) 的认证现在已经越来越普遍。

2023-01-01 15:12:30 1197

原创 Swagger & Knife4j

(1)简介Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务()。它的主要作用是:使得前后端分离开发更加方便,有利于团队协作接口的文档在线自动生成,降低后端开发人员编写接口文档的负担功能测试Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在项目中引入Springfox ,即可非常简单快捷的使用Swagger。(2)SpringBoot集成Swagger。

2022-12-15 20:54:31 1035

原创 Redis - 高级

Redis会把每一个master节点映射到0~16383共16384个插槽(hash slot)上,当需要向redis集群中执行一个命令时,比如set num 123 ,这个时候,redis集群会根据发送过来的key 先执行crc16算法得出一个值,并再对16384求余数,那么余数值永远都在0~16383之间,这样得出一个值比如:num—>98,98刚好在0-5601这个插槽范围,而这些插槽在节点1号中。不过,旧的数据只要是绿色的,说明是已经被同步到slave的数据,即便被覆盖了也没什么影响。

2022-11-27 20:56:03 482

原创 Springboot - 高级

如上图,在启动类的注解@springbootapplication注解里面又修饰了@compnetScan注解,该注解的作用用于组件扫描包类似于xml中的context-componet-scan,如果不指定扫描路径,那么就扫描该注解修饰的启动类所在的包以及子包。在我们使用springboot的时候,能带来的方便性和便利性,不需要配置便可以实现相关的使用,开发效率极大的提升,那么实际上,springboot本身的基础依赖中封装了许许多多的配置帮我们自动完成了配置了。他的接口的说明也描述了这有点;

2022-11-23 20:08:06 250

原创 分布式事务 - Seata

XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范 提供了支持。但是当我们把三件事情看做一个"业务",要满足保证“业务”的原子性,要么所有操作全部成功,要么全部失败,不允许出现部分成功部分失败的现象,这就是分布式系统下的事务了。在分布式系统中,系统间的网络不能100%保证健康,一定会有故障的时候,而服务有必须对外保证服务。

2022-11-23 20:02:12 325

原创 微服务保护 - Sentinel

解读:RT超过500ms的调用是慢调用,统计最近10000ms内的请求,如果请求量超过10次,并且慢调用比例不低于0.5,则触发熔断,熔断时长为5秒。默认情况下sentinel会监控SpringMVC的每一个端点(Endpoint,也就是controller中的方法),因此SpringMVC的每一个端点(Endpoint)就是调用链路中的一个资源。需求:给 UserClient的查询用户接口设置降级规则,慢调用的RT阈值为50ms,统计时间为1秒,最小请求数量为5,失败阈值比例为0.4,熔断时长为5。

2022-11-23 19:58:29 177

原创 ElasticSearch(三)

默认情况下,Bucket聚合是对索引库的所有文档做聚合,但真实场景下,用户会输入搜索条件,因此聚合必须是对搜索结果聚合。例如:用户搜索“东方明珠”,那搜索的酒店肯定是在上海东方明珠附近,因此,城市只能是上海,此时城市列表中就不应该显示北京、深圳、杭州这些信息了。集群的master节点会监控集群中的节点状态,如果发现有节点宕机,会立即将宕机节点的分片数据迁移到其它节点,确保数据安全,这个叫做故障转移。目前,页面的城市列表、星级列表、品牌列表都是写死的,并不会随着搜索结果的变化而变化。

2022-11-23 19:53:15 131

原创 ElasticSearch(二)

分布式搜索引擎021.DSL查询文档elasticsearch的查询依然是基于JSON风格的DSL来实现的。1.1.DSL查询分类Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。我们以查询所有为例,其中:查询类型为match_all没有查询条件// 查询所有{}}}其它查询无非就是查询类型、查询条件的变化。1.2.全文检索查询1.2.1.使用场景例如京东。

2022-11-23 19:49:24 225

原创 ElasticSearch(一)

什么是elasticsearch?一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能什么是elastic stack(ELK)?是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch什么是Lucene?是Apache的开源搜索引擎类库,提供了搜索引擎的核心API分词器的作用是什么?创建倒排索引时对文档分词用户搜索时,对输入的内容分词IK分词器有几种模式?ik_smart:智能切分,粗粒度。

2022-11-16 16:25:39 2370

原创 RabbitMQ - 高级

每个RabbitTemplate只能配置一个ReturnCallback,因此需要在项目加载时配置:修改publisher服务ConfirmCallback可以在发送消息时指定,因为每个业务处理confirm成功或失败的逻辑不一定相同。// 1.消息体 String message = "hello, spring amqp!

2022-11-16 15:52:10 1017

原创 RabbitMQ

基本消息队列的消息发送流程:建立connection创建channel利用channel声明队列利用channel向队列发送消息基本消息队列的消息接收流程:建立connection创建channel利用channel声明队列定义consumer的消费行为handleDelivery()利用channel将消费者与队列绑定多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量交换机的作用是什么?接收publisher发送的消息。

2022-11-13 17:57:44 59

原创 SpringCloud(二)

使用Feign的步骤:① 引入依赖② 添加@EnableFeignClients注解③ 编写FeignClient接口④ 使用FeignClient中定义的方法代替RestTemplate类型作用说明修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象请求参数编码将请求参数编码,便于通过http请求发送支持的注解格式默认是SpringMVC的注解失败重试机制。

2022-11-13 17:52:31 70

原创 SpringCloud(一)

单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝微服务:一种良好的分布式架构方案①优点:拆分粒度更小、服务更独立、耦合度更低②缺点:架构非常复杂,运维、监控、部署难度提高SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件SpringCloudRibbon的底层采用了一个拦截器,拦截了RestTemplate发出的请求,对地址做了修改。

2022-11-13 17:43:32 63

原创 Docker

*数据卷(volume)**是一个虚拟目录,指向宿主机文件系统中的某个目录。一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。而要自定义镜像,就必须先了解镜像的结构才行。

2022-11-09 20:02:57 783

原创 CRM项目 - 心得

json web token,通过数字签名的方式,以json为载体,在不同的服务之间安全的传输信息的一种技术用户哪些接口是能看到的,有哪些接口是能访问的,那么这些用户能访问的接口就称之为这个用户的接口资源,如果该用户没有对应的接口,后端应该返回403(没有权限)​ 任何一个项目都会有一个用户操作日志(也叫行为日志)的模块,它主要用来记录某个用户做了某个操作,当出现操作失败时,通过日志就可以快速的查找是哪个用户在哪个模块出现了错误,以便于开发人员快速定位问题所在。

2022-11-09 19:55:59 507

原创 外卖项目优化(三)前后端分离、接口文档、项目部署

当前项目中,前端代码和后端代码混合在一起,是存在问题的,存在什么问题呢?主要存在以下几点问题:1). 开发人员同时负责前端和后端代码开发,分工不明确2). 开发效率低3). 前后端代码混合在一个工程中,不便于管理为了解决上述提到的问题,现在比较主流的开发方式,就是前后端分离开发,前端人员开发前端的代码,后端开发人员开发服务端的业务功能,分工明确,各司其职。我们需要将之前的项目进行优化改造,变成前后端分离开发的项目。前后端分离开发。

2022-11-01 11:14:03 446

原创 外卖项目优化(二)读写分离、Nginx反向代理、负载均衡

1). 存在的问题在前面基础功能实现的过程中,后台管理系统及移动端的用户,在进行数据访问时,都是直接操作数据库MySQL的。结构如下图:而在当前,MySQL服务器只有一台,那么就可能会存在如下问题:1). 读和写所有压力都由一台数据库承担,压力大2). 数据库服务器磁盘损坏则数据丢失,单点故障2). 解决方案为了解决上述提到的两个问题,我们可以准备两台MySQL,一台主(Master)服务器,一台从(Slave)服务器,主库的数据变更,需要同步到从库中(主从复制)。

2022-10-30 17:05:18 175

原创 外卖项目优化(一)增加缓存

1). 当前系统存在的问题之前已经实现了移动端菜品展示、点餐、购物车、下单等功能,但是由于移动端是面向所有的消费者的,请求压力相对比较大,而我们当前所有的数据查询都是从数据库MySQL中直接查询的,那么可能就存在如下问题:频繁访问数据库,数据库访问压力大,系统性能下降,用户体验较差。2). 解决该问题的方法要解决我们上述提到的问题,就可以使用我们前面学习的一个技术:Redis,通过Redis来做缓存,从而降低数据库的访问压力,提高系统的访问性能,从而提升用户体验。

2022-10-30 17:00:03 133

原创 Redis - 基础

Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务」。 基于内存存储,读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message b

2022-10-30 16:55:16 46

原创 Linux(二)

软件安装项目部署在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下:上述介绍了Linux系统软件安装的四种形式,接下来我们就通过第一种(二进制发布包)形式来安装JDK。JDK具体安装步骤如下:1). 上传安装包使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux由于上述在进行文件上传时,选择的上传目录为根目录 /,上传完毕后,我们执行指令 cd / 切换到根目录下,查看上传的安装包。2)卸载以前的JDK2). 解压安装包执行如下指令,将上传上来的压缩包进行解压,

2022-10-30 16:52:33 237

原创 Linux(一)

Linux是一套免费使用和自由传播的操作系统。说到操作系统,大家比较熟知的应该就是Windows和MacOS操作系统,我们今天所学习的Linux也是一款操作系统。不同领域的主流操作系统,主要分为以下这么几类: 桌面操作系统、服务器操作系统、移动设备操作系统、嵌入式操作系统。接下来,这几个领域中,代表性的操作系统是那些?1). 桌面操作系统操作系统特点Windows用户数量最多MacOS操作体验好,办公人士首选Linux用户数量少(桌面操作系统,Linux使用较少)2). 服务器操作系统。

2022-10-30 16:48:19 457

原创 Git

Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。集成后在IDEA中可以看到Git相关图标可以通过启动两个IDEA窗口模拟两个开发人员来展示Git的使用SVNCVSVSSSVN 与 Git 的对比Git 是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。

2022-10-30 16:41:40 183

原创 SpringSecurity

前面已经分析了认证和授权的概念,要实现最终的权限控制,需要有一套表结构支撑:用户表t_user、权限表t_permission、角色表t_role、菜单表t_menu、用户角色关系表t_user_role、角色权限关系表t_role_permission、角色菜单关系表t_role_menu。上述的7张表就构成了RBAC权限模型:2. 编写controller3. 访问controller3. 细节处理:3.1 自定义用户名和密码3.2 修改日志级别4. 自动配置原理4.1 sp

2022-10-30 16:37:17 465

原创 外卖项目 - Day06

对于这一类的单表的增删改查,我们已经写过很多了,基本的开发思路都是一样的,那么本小节的用户地址簿管理的增删改查功能,我们就不再一一实现了,基本的代码我们都已经提供了,直接导入进来,做一个测试即可。这里,我们需要说明一下,这里并不会去开发支付功能,因为不论是支付宝的支付,还是微信支付,都是需要企业资质的,而我们大家在测试的时候,是没有办法提供企业资质的,所以这一部分支付功能我们就不去实现了。异步请求,查询分类对应的菜品列表,功能我们已经实现了,但是我们之前查询的只是菜品的基本信息,不包含菜品的口味信息。

2022-10-30 16:29:54 200

原创 外卖项目 - Day05

在项目中,如果我们要实现短信发送功能,我们无需自己实现,也无需和运营商直接对接,只需要调用第三方提供的短信服务即可。目前市面上有很多第三方提供的短信服务,这些第三方短信服务会和各个运营商(移动、联通、电信)对接,我们只需要注册成为会员,并且按照提供的开发文档进行调用就可以发送短信。需要说明的是,这些短信服务一般都是收费服务。常用短信服务:阿里云华为云腾讯云京东梦网乐信本项目在选择短信服务的第三方服务提供商时,选择的是阿里云短信服务。

2022-10-30 16:26:16 232

原创 外卖项目 - Day04

文件上传,也称为upload,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。表单属性取值说明methodpost必须选择post方式提交enctype采用multipart格式上传文件typefile使用input的file控件上传1). 简单html页面表单

2022-10-30 16:22:49 296

原创 外卖项目 - Day03

在业务逻辑操作过程中,如果遇到一些业务参数、操作异常的情况下,我们直接抛出此异常。所在包: com.mingye.reggie.common。

2022-10-28 21:41:05 145

原创 外卖项目 - Day02

1). 访问员工列表页面/member/list.html时, 会触发Vuejs中的钩子方法, 在页面初始化时调用created方法从上述的前端代码中我们可以看到, 执行完分页查询, 我们需要给前端返回的信息中需要包含两项 : records 中封装结果列表, total中封装总记录数。而在组装请求参数时 , page、pageSize 都是前端分页插件渲染时的参数;2). 在getMemberList方法中, 通过axios发起异步请求。

2022-10-28 21:35:25 131

原创 外卖项目 - Day01

在开发外卖这个项目之前,我们需要全方位的来介绍一下当前我们学习的这个项目。接下来,我们将从以下的五个方面, 来介绍 外卖这个项目。本项目( 外卖)是专门为餐饮企业(餐厅、饭店)定制的一款软件产品,包括 系统管理后台 和 移动端应用 两部分。其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的分类、菜品、套餐、订单、员工等进行管理维护。移动端应用主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等。序号表名说明1employee员工表2category菜品和套餐分类表3。

2022-10-16 22:47:29 1232

原创 MyBatisPlus

MyBatisPlus环境搭建的步骤BaseMapper}通过入门案例制作,MyBatisPlus的优点有哪些?MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率https//有什么简单的办法可以自动生成实体类的GET、SET方法?Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发。

2022-10-11 16:18:26 370

原创 SpringBoot

以前的框架主要是为了完成功能,注重点在代码;但是springBoot关注的是简化配置和项目初始化。SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程原生开发SpringMVC程序过程学习了SpringBoot入门案例之后,感觉对比SpringMVC哪一个更加方便简洁?SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。

2022-10-10 19:38:43 85

原创 Maven高级

解决maven项目中的依赖冲突哪个jar包在靠上的位置,这个jar包就是先声明的,先声明的jar包下的依赖包,可以优先引入项目中。如: 我们在pom.xml中引入如下坐标,分别是spring中不同的版本。我们在控制面板的maven面板,点击查看依赖关系按钮,看到了包和包之间的依赖关系存在冲突,都使用了spring-core包把2个包的顺序调换后就变成了低版本的依赖导入。直接依赖比传递依赖路径近,那么最终进入项目的jar包会是路径近的直接依赖包。直接依赖:项目中直接导入的jar包就是项目的直接依赖包。传递依

2022-10-09 20:40:35 865

原创 Spring - SpringMVC(二)

使用示例3.2 请求转发并传递数据【重点】是SpringMVC提供的组件之一,其中,模型,用于封装数据(Springmvc会把数据放到了request域中),视图,就是页面,用于展示数据如果我们设置了视图名称,并且封装了数据模型,SpringMVC会:把Model的数据放到request域对象中,然后请求转发到指定的视图(页面)我们可以视图页面中获取数据显示出来**使用示例 **在index.jsp视图页面中,取出数据显示出来4.小结返回页面文件名方法返回

2022-10-08 16:15:48 415

原创 Spring - SpringMVC(一)

/ ,代表的就是端口后面,哪怕你在配置文件中配置了项目的映射名,也是端口后面,不是映射名后面,它会直接忽视项目的映射名,只代表端口后边。服务器端程序,一般都基于两种形式,一种C/S架构程序,一种B/S架构程序. 使用Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构三层架构​ 表现层:WEB层,用来和客户端进行数据交互的。表现层一般会采用MVC的设计模型​ 业务层:处理公司具体的业务逻辑的​ 持久层:用来操作数据库的MVC全名是Model View Controller 模型视图控制器

2022-10-06 20:54:07 1207

原创 Spring - AOP

10个方法: 想给10个方法都增加一种打印日志的功能,但是又不想(不能)改源码,此时可以给它使用AOP增强。​ 实际上,Spring的AOP,底层是通过动态代理实现的。在运行期间,通过代理技术动态生成代理对象,代理对象方法执行时进行功能的增强介入,再去调用目标方法,从而完成功能增强。常用的动态代理技术有:Spring的AOP采用了哪种代理方式?目标对象(Target):要代理的/要增强的目标对象。代理对象(Proxy):目标对象被AOP织入增强后,就得到一个代理对象连接点(JoinPoint):能够被拦截到

2022-09-30 17:16:39 186

原创 Spring - IOC注解开发

准备工作:创建Maven项目,导入依赖坐标编写代码并注解配置:编写dao层、service层代码,使用注解配置bean:代替xml里的标签使用注解依赖注入:代替xml里的和标签在xml配置文件中开启组件扫描测试2) 编写代码,并注解配置接口实现类接口实现类3) 开启组件扫描创建,注意引入的名称空间4) 功能测试创建一个测试类,调用Service步骤小结导入依赖定义接口和实现类(dao 和 service)在实现类上面打上注解 @Component

2022-09-29 21:35:42 720

原创 Spring - IOC、DI

在类中提供需要注入的成员(依赖项)的set方法,在配置文件中注入属性的值

2022-09-27 16:37:43 120

原创 JavaWeb综合案例

这里的 和 功能在课程上不做讲解,留作同学来下的练习。在elementUI 官网中有那种有修改按钮的表单,理解它的写法,scope属性中有该行该列的数据信息直接赋值会导致用的是同一个对象,会导致在修改对话框中修改数据时,原来的表单数据也被改了,这是不行的,万一想取消本次修改也没法还原了,所以要重新创建一个对象,相当于复制一份原有数据,但是是一个新的对象· 隐含的知识点:深拷贝和浅拷贝​ 深拷贝:new 一个新对象,让它的地址不同于原来那个,但是数据与原来那个对象一样,相当于复制一份当新的用​ 浅拷贝

2022-09-26 19:56:14 410 2

空空如也

空空如也

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

TA关注的人

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