自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 华为云子网路由表作用及价值

某个ip为8.8.8.8的服务器,通过snat和dnat访问云内ecs,此时在内网中是以源地址8.8.8.8进行路由传递的,nat不会把服务器IP修改为自己的nat ip。子网内部作为一个二层网络,通过mac地址互通,不通过路由互通。跨子网(无论是否跨VPC)场景,需要配置子网路由表,相当于三层交换机或路由器的角色。

2023-07-14 11:44:52 1109

原创 华为云OBS权限控制

OBS权限控制理论上来讲有3种,IAM权限、桶策略、桶/对象ACLs参考:https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html。

2023-07-06 21:00:16 1024

原创 华为云CCE及CCE turbo(k8s)网络能力原理分析

原理:CCE中无论是容器隧道模式还是VPC网络模式,Pod网络都是独立于VPC网络之外,在Node内部单独分配的地址段。而云原生网络2.0是通过CNI将VPC网络对接到了k8s网络里,可以做到直接将弹性网卡附属给Pod,如此一来,Pod网络也是云上VPC网络的一部分了。参考:https://support.huaweicloud.com/usermanual-cce/cce_10_0282.html。- CCE支持容器隧道网络、VPC网络,CCE turbo支持云原生网络2.0。

2023-07-06 20:55:35 1405

原创 高并发场景下大量TCP链接处于time_wait状态原因及优化思路分析

time_wait问题处理

2023-06-28 14:39:26 4232

原创 kafka中topic、partition、broker、consumerGroup、consumer之间的关系、区别及存在意义

topic:逻辑概念,用于联系Producer 和 Consumer的message生产和消费。Producer 生产的消息放入一个topic中,由Consumer通过对同一个topic的订阅进行消费broker:物理资源,一般一个broker指底层的一台物理服务器。partition:逻辑分区存储,用于将topic在不同的物理资源上进行逻辑存储。实际Producer 放入topic的消息,会存入不同broker上的partition中。因此partition可以理解为最细I粒度的topic。.......

2022-08-27 13:23:11 5051 1

转载 Spring Security的十一个拦截器

处理form登录的过滤器,与form登录有关的所有操作都是在这里进行的,登陆时判断用户名密码是否有效,有效的话就跳转到成功页面。

2022-08-25 19:46:01 3135

原创 基于elk的springboot web日志收集存储方案

web系统的日志按照价值排序分类controller层的接口访问日志(debug日志)自定义包下的其他日志(debug日志)全局日志① 全局错误日志② 部分组件的debug日志③ 部分组件的Info日志一般来讲,1和2的价值最大,2可基于实际业务情况,进一步划分,如component目录下日志,service层日志等。版本:7.6.2安装前部署部署后Logstash安装版本:7.6.2部署前修改配置文件logstash.conf部署部署后kibana版本:7.6.2部署部署后导入依赖

2022-08-23 11:18:03 1303

原创 [多登录页]Spring boot集成Spring security及JWT实现多页面(多种登录方式)前后端分离登录鉴权

我的这篇文章详细描述了如何使用Spring boot集成Spring security及JWT实现单一登录页面前后端分离登录鉴权。但是在服务设计中,经常有多端登录的需求。比如一套系统一般分为后台管理系统,和前台系统。更细致区分,可能前台还分为不同登录端,比如移动端和PC端。这时,不同的系统就需要不同的登录鉴权体系。比如admin的登录鉴权无论是颁发的token还是使用的用户存储表,都与user前台的数据不同。这就要求我们在使用Spring security的时候,具备提供多套登录鉴权认证体系的能力。....

2022-08-23 09:55:51 1969 4

原创 [单一登录页]Spring boot集成Spring security及JWT实现单一登录页面前后端分离登录鉴权

网上对于spring security的介绍非常杂乱一搜要么就是xml的配置方式,不符合springboot的配置方式要么是基于模板引擎做页面跳转,但实际项目中,很少会让后端实现页面跳转逻辑,更多的是返回json由前段根据结果进行页面跳转逻辑判断所以如果有以下需求,可以参考本文方案Spring boot集成Spring security及JWT使用JWT token替换Spring security token鉴权前后端分离项目,不基于后端实现跳转逻辑,只需要后端返回校验结果json。

2022-08-19 16:16:07 372

原创 springboot 2.7集成swagger 3

springboot集成swagger2技术比较成熟,基本不挑版本。网上技术文章一找一大堆,不在此赘述。但是sprngboot 2.6.x以上版本在集成swagger 3的时候,会报错误网上关于此问题的解决,有各种各样的方案,但实际实践起来非常麻烦。比如这种方案在网上说的比较多,但实际上,应用效果并不佳。解决此问题,降版本的方案我就不说了,如果确实需要使用sprngboot 2.6.x以上版本在集成swagger 3的兄弟,请往下看。

2022-08-19 15:37:27 5317 1

原创 登录鉴权方案中,session、token、cookie三者的区别及选择

目前web常用的登录鉴权方案主要有3种,分别是session、token、cookie,每种方案都有其特定应用场景和局限性,本文主要针对几种方案的使用特点简单做一个对比分析。阅读本文,首先需要对以上三者的概念和基本原理有基础了解,如不然,建议先详细了解一下上述三种方案的实现原理。另除了上述三种方案外,localStroage作为前端的存储方式之一,实际可以简单理解为一个小型前端key-value数据库,由于不直接参与前后端交互且不影响登录鉴权,不在本文讨论范围内。...

2022-08-16 20:57:18 3593

转载 @NotNull注解放在实体类或者Controller层不生效解决方案

在日常开发过程中,我们会写一些注解于加在java的实体类属性字段上,或者放到controller层的方法参数中,在进请求或请求的时候会根据字段的注解进对应的校验,简化校验相关的代码。当校验不通过时,会返回对应的message描述例1:注解写在Controller层的接口参数中例2:注解写在实体中。...

2022-08-15 11:41:14 998

原创 Springboot中,VieResolver和MessageConverter的关系

最近学习spring mvc,看到了ContentNegotiatingViewResolver 和 spring mvc的Content Negotiating,于是想不通viewResolver 和HttpMessageConverter 的适用范围。看到了下面这篇文章。之前一直在用@ResponseBody注解的方式进行开发,在看书的时候又看到了ContentNegotiatingViewResolver,顿时就疑惑了,这两个东西的功能不是重复了吗?...

2022-08-09 14:23:05 180

原创 如何理解MVC和MVVM思想(一句话秒懂)

其他文章说的太复杂了,我在这简化一下问题。

2022-08-04 11:35:49 462

原创 哈希表类结构在相关问题中的应用

比如数组有序的场景,是可以通过排序O(n)+双指针O(n)的方案,解决了一个O(n^2)复杂度的查找问题的。如例题(15)三数之和中的解法,在数组排序后,找一个普通for循环选定一个元素A,剩下两个元素B、C进行遍历搜索,当。和一定要先向右移动右指针,但是此时再移动left,left一定经过right遍历过的位置,此时,就会导致一个元素被left遍历过一次,right便利过一次,出现数据重复或错误。此时,由于A是普通循环变量,所以一般不被视为指针,B和C被控制了精确地移动方向,所以算是双指针。......

2022-07-26 15:47:47 114

转载 docker运行mysql,连接慢问题解决

由于MySQL是使用Docker容器搭建起来的,在今天的数据库连接中,发现比平时的连接速度变慢了很多,每次连接大概延迟了10秒左右。

2022-07-23 13:21:15 3286

转载 java Comparator 和 Comparable 区别

两种方法各有优劣。用Comparable简单,只要实现Comparable接口的对象直接就成为一个可以比较的对象,但是需要修改源代码,用Comparator的好处是不需要修改源代码,而是另外实现一个比较器,当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了,并且在Comparator里面用户可以自己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。...

2022-07-18 16:32:37 187

原创 vo、dto、bo、do、po的概念理解以及与controller、service、dao层的对应关系

项目中真的有必要定义吗?按照理论上来讲如果项目比较小,是一个简单的MVC项目,又是单兵作战,我不建议使用,直接用POJO负责各个层来传输就好,因为这种项目的“目的地”是快速完成。而我们更多的时候,是持续迭代的团队协作项目,这个时候我们就建议用,而且团队内要达成共识,形成一个标准规范。目的是提升项目的可扩展性、可维护性与可阅读性。其实要不要用这么多o,关键问题在于关注controller、service、dao这些层间数据有没有变化。比如vo传进来,放进service直接拆成po,那就没有dto什么事。...

2022-07-17 17:00:52 5144

转载 nacos整合feign报错java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBala

http://events.jianshu.io/p/8b7dc64f57f6因为Spring Cloud Feign在Hoxton.M2 RELEASED版本之后不再使用Ribbon而是使用spring-cloud-loadbalancer,所以不引入spring-cloud-loadbalancer会报错一、整合feign和nacos时要导入loadbalance包二、这个时候还有一个坑就是当我们调用feign的时候还会抱一个错误:java.lang.AbstractMethodError: org

2022-07-13 17:09:26 976

原创 链表的设计,修改,查找(如何选择循环基点,如何确定复杂边界条件)

设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:此题目通过单向链表即可解决,因此不考虑双向链表算法。链表冗余信息的选择作为一个链表,需要保存哪些冗余信息?head:肯定要有,最好还是用虚拟nodesize:肯定要有。如果没有保存size当使用while

2022-07-13 13:33:38 210

原创 链表的插入,删除算法设计思考(保留不同变量对算法的设计会产生哪些影响,插入和删除节点的循环条件为什么这么复杂)

设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:此题目通过单向链表即可解决,因此不考虑双向链表算法。链表冗余信息的选择作为一个链表,需要保存哪些冗余信息?head:肯定要有,最好还是用虚拟nodesize:肯定要有。如果没有保存size当使用while

2022-07-12 15:53:26 296

原创 滑动窗口解决连续子串问题(滑动窗口与暴力破解对比看算法本质,左右指针变化看窗口控制)

给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 的 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:难点分析:滑动窗口的控制处理这道题目,一般有两种方法,暴力求解和滑动窗口。无论是暴力求解还是滑动窗口求解,本质上都是一种双指针法的变体,都要不断变化双指针位置,去查找符合要求的元素范围。在双指针变化过程中,需要考虑两个问题滑动窗口正常的动作一般有两种:平移和放缩,但实际操作过程中,

2022-07-10 02:01:48 345

原创 二分查找(从分治思想谈二分查找原理,一次搞定边界条件)

分治理论二分法是分治思想的典范,这句话很多人听过只觉得是个概念,不当回事,但实际上这才是解决二分法问题的核心关键。什么是分治思想,分治思想就是把一个大问题A,拆成无数个小问题B,再采用相同的方法分而治之。典型的案例是动态规划问题的应用,二分法也可以理解为一个简单的动态规划问题,只不过由于二分法逐渐缩小范围,实际上是将其他不符合要求的小问题抛弃了。既然是分治,那就可以把每次循环,看成一个问题的拆分动作。每次缩小范围后,都视为在处理一个拆分后的小问题。由于解决大问题和小问题采用的是同一套方法,那么拆分后的小问题

2022-07-08 19:14:21 742

原创 从分布式架构,到数据一致性,再到分布式事务原理及解决方案(一文搞通分布式)

数据一致性的问题,是搭建任何微服务及分布式系统都必须提前考虑的问题。原本以为微服务系统及分布式系统已经应用如此普遍,从理论到实践的讲解应该是已经烂大街才对。但是历经一周,查阅了无数篇文献资料发现,网上文献无外乎二种,一类是照抄论文定义,强行解释。此类文献还好,至少有理可循。另一类二手文献,直接不分青红皂白加以解释,实际解释效果前后矛盾百出。在这其中,不乏有部分精品文件,但也都死较为片面的阐述了数据一致性的部分内容,尚没有将数据一致性结合不同架构统一起来做完整的介绍。............

2022-07-04 22:01:10 1048 1

原创 缓存与数据库数据一致性问题详细分析及解决方案

同时操作数据库和缓存,使二者达成数据一致。主要的实现方式有一下两种双写模式改db(save,update,del),同时改一下cache失效模式(推荐)改db,同时删除对应cache,读取数据时再更新cache。更新cache的方式有两种,分别是手动更新与自动更新,以下主要考虑在应用层主动更新的情况,使用binlog自动更新cache的情况作为一种独立方案讨论。但是以上两种操作方式在操作时会存在一些情况,下面具体展开分析。db的修改与cache的修改无法保证原子性如果出现多线程同时修改db的情况,网络延迟导

2022-06-29 15:12:51 1360

原创 接口幂等性问题梳理

多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。1、前端重复提交就好比有个新增商品的功能,如果前端连续多次点击保存,后端就会收到多次请求接口2、接口超时重试当我们调取第三方接口的时候,有可能会因为网络等原因导致调用失败,所以我们会对接口调用添加失败重试的机制,Spring可以通过注解实现重试机制。3、MQ消息重复消费MQ在生产端和消费端都有重试机制,也就是同一消息很可能会被重复消费,业务无法保证多次消费的结果一致。当一个方法内存在非幂等的数据库操作,那这个方法一定

2022-06-27 15:12:52 355

原创 gulimall mysql数据库总结

数据库表间关系一般分为三种:一对一、一对多、多对多。一对一:一般两表分别存储对方primary_key。如husband表中一条记录,对应wife一条记录,互相持有对方id一对多:可以让多表储存一表的primary_key(主推),也可以另建一张关联关系表。如teacher表中1条记录对应student表中的10条记录,可以让10个student分别保存老师的id信息。也可以创建关联关系表多对多:创建关联关系表,专门储存两者对应关系如class表中的一条记录对应student表中的多条记录,student表

2022-06-21 23:13:18 282

转载 导入Sentinel无WebCallbackManager包

http://t.zoukankan.com/exce-ben-p-13501972.html整合SpringCloud alibaba Sentinel 时发现一个意想不到的事情,那就是设置拦截资源,自定义返回结果的时候WebCallbackManager无法导入之前的sentinel版本升级,高版本都是能兼容低版本的,可是这次2.2.0的升级不知道为啥,就是没兼容低版本的sentinel,2.2.0之前的版本基于sentinel-web-servlet原生servlet能力实现2.2.0及之后版本是

2022-06-20 08:40:43 958

原创 feign整合sentinel报错java.lang.ClassNotFoundException: feign.hystrix.FallbackFactory$Default

feign整合sentinel报错java.lang.ClassNotFoundException: feign.hystrix.FallbackFactory$Defaultboot2.6.7问题根因依赖缺失feign-hytrix下的hytrix-core加一套依赖

2022-06-20 07:59:55 1034

原创 Redisson中常用的分布式锁

Redisson中常用的分布式锁目录Redisson中常用的分布式锁是什么文档Redisson中提供的锁可重入锁ReentrantLock增强公平锁Fair Lock多锁MultiLock读写锁ReadWriteLock信号量Semaphore闭锁CountDownLatch是什么Redisson 是一个分布式协调Redis Client端,能帮助用户操作分布式环境中的Java的对象。Redisson、Jedis、Lettuce 是三个不同的操作 Redis 的客户端,Jedis、Lettuce

2022-05-21 18:11:29 1786

原创 Redis docker安装及redis.conf配置文件解析

Redis docker安装及配置文件解析目录Redis docker安装及配置文件解析安装配置文件编写基础配置开发配置全局其他配置Redis实现分布式锁基本原理实现思路主要流程核心关注点实现代码安装docker pull redis:6.2.7mkdir -p /usr/local/redis/confmkdir -p /usr/local/redis/datachmod -R 777 /usr/local/redis## 下载redis配置文件## 配置文件获取地址https:/

2022-05-21 18:07:39 6099 1

原创 缓存穿透、缓存雪崩、缓存击穿问题分析及解决方案

常见redis缓存问题及处理方案目录常见redis缓存问题及处理方案缓存失效问题及解决方案缓存穿透缓存雪崩缓存击穿在修改数据库时,cache数据如何和db保持一致实现方案两种方案存在的问题根本解决方案最佳实践缓存失效问题及解决方案缓存穿透问题描述查询数据库中不存在的内容,大量查询直接透传给db由于缓存是不命中,将去查询数据库,但是数据库也无此记录,我们没有将这次查询的null 写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。解决方案缓存空结果、并且设置短的

2022-05-21 18:03:04 556

原创 IDEA中 Maven name group、artifact、package区别

IDEA中 Maven name group、artifact、package区别概念name:决定了Location中最后一级目录的名字group:maven第一层逻辑分组,一般为公司组织。如com.huaweiartifact:maven第二层逻辑分组,一般为项目名称。如搜索项目searchpackage:java包名称,区别与关系group和artifact时maven中的组织结构,package是java中的包结构,理论上并无关系。但一般来讲,java包结构定义也是com.组织名

2022-05-17 14:58:38 3299 2

原创 SpringCloud基础使用及配置

SpringCloud基础使用及配置文章目录SpringCloud基础使用及配置NacosNacos server 启动dockerNacos server windows启动Nacos注册中心代码使用工作原理Nacos配置中心代码使用其他Nacos整合踩坑openfeign代码使用工作原理存在意义Gateway代码使用SpringCloud整合NacosNacos server 启动dockerdocker run --name nacos -p 50000:8848 -p 9848:984

2022-05-11 19:00:00 1149

原创 SpringBoot中使用JR303校验

SpringBoot中使用JR303校验参考资料:https://blog.csdn.net/weixin_37199234/article/details/107253433https://www.csdn.net/tags/NtTaUg0sMTA0NjMtYmxvZwO0O0OO0O0O.html文章目录SpringBoot中使用JR303校验普通校验分组校验自定义校验校验结果收集注意常见注解普通校验SpringBoot2.3.0以后版本没有引入javax.validation,需要手

2022-05-10 21:30:00 354

原创 Maven父子项目工程依赖原则及问题解决

Maven父子项目工程依赖原则及问题解决文章目录Maven父子项目工程依赖原则及问题解决插件父子工程继承原则Springboot公共模块处理方案方案一(推荐):common只放自定义包,father模块放公共,son继承father后,再通过引入common。方案二:common中既放自定义包,又放公共,son依然继承father(并没有意义),再在son中通过引入common。方案对比SpringBoot父依赖冲突问题(针对方案二)插件依赖:运行时开发时都需要用到的jar包,在项目打包时需要把这些

2022-05-09 20:00:00 1935

原创 Dokcer常见命令及使用

Dokcer使用及常见命令文章目录Dokcer使用及常见命令docker安装docker常见操作dockerfile使用举例:docker镜像安装mysql实例举例:MySQL、Redis、Nacos启动docker安装官网访问:https://docs.docker.com/engine/install/centos/删除旧版:sudo yum remove docker \ docker-client \ doc

2022-05-08 00:30:00 198

原创 Git基础使用

Git基础使用文章目录Git基础使用安装初始化git生成秘钥项目维度初始化项目克隆安装初始化gitgit config –global user.name 'xxxxx'git config –global user.email 'xxx@xx.xxx'生成秘钥注:秘钥生成位置:~/.sshwindows:C:\Users\Liu\.sshlinux:/home/.sshssh-keygen -t rsa -C 'xxx@xx.xxx'项目维度初始化项目git init

2022-05-07 14:39:35 1082

原创 Dynamic Connectivity Problem(动态连通性问题)

###1. 概念触点:区域内的点连接:点与点之间的连接。分量:区域内部分相互连通的所有点构成一个分量,整个区域可以划分为多个分量(包含互相联通的点)概念举例触点0、1、2……连接0-1,1-2,3-4……分量{0、1、2、5、6、7},{3、4、8、9}###2. APIpublic class UF UF构造方法intfind(p)找到当前触点p所属分量voidunion(p,

2022-05-07 14:39:04 201

原创 Elasticsearch基础使用

Elasticsearch基础使用文章目录Elasticsearch基础使用概念安装基础语法基础信息查询四类请求POST和PUT区别DELTEGET批量操作检索能力(Query DSL语法)查询字符串查询非字符串bool查询filter分析能力(aggregations聚合能力)aggregations分组执行操作其他MappingReinndex 数据迁移分词器elasticsearch三大主要用途,存储、检索(query)、分析(analyse)。概念索引(database)、类型(table

2022-05-07 14:36:42 988

空空如也

空空如也

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

TA关注的人

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