- 博客(409)
- 资源 (4)
- 问答 (1)
- 收藏
- 关注
原创 SpringBoot 之整合gRPC
将proto文件编译成需要的JAVA文件(使用maven去compile)了。实现在API模块中定义的gRPC服务。测试服务调用(阻塞方式和异步方式)。在src/main目录下创建。
2024-11-18 17:10:52
289
原创 Maven 之 配置文件pom
modules 标签用于声明当前 Maven 项目包含的模块子项目,每个子项目都是一个独立的 Maven 项目,具有自己的 pom.xml 文件,可以进行独立构建和测试。
2024-03-13 11:04:36
643
原创 SpringBoot 之配置加密
Jasypt是一个Java简易加密库,用于加密配置文件中的敏感信息,如数据库密码。prefix 和 suffix 是自定义的密码串标识,不配置默认为:ENC(…password 参数是必须的,相当于 Salt(盐),以保证密码安全性。Jasypt库与springboot集成,在实际开发中非常方便。注意 ENC@[] 这个占位符是上面进行自定义配置的。
2023-09-22 12:40:17
599
原创 Nginx 之负载均衡
Nginx 通过反向代理可以实现服务的负载均衡,避免了服务器单节点故障,把请求按照一定的策略转发到不同的服务器上,达到负载的效果。
2023-05-30 14:47:30
255
原创 SpringBoot 之 MDC 实现全链路调用日志跟踪
简单使用就这么容易,但是在有些情况下 traceId 将获取不到。traceId 和 MDC 中的键名称一致。
2023-05-12 16:27:52
683
原创 GitHub 登录不上解决方案
4、修改配置 C:\Windows\System32\drivers\etc\hosts。1、打开 http://ping.chinaz.com/github.com。2、输入 github.com 点击Ping检测。3、选择一个响应时间短的响应IP。
2023-04-07 14:29:58
1983
原创 JVM 之 AdaptiveSizePolicy 参数
3、由于AdaptiveSizePolicy会动态调整 Eden、Survivor 的大小,有些情况存在Survivor 被自动调为很小,比如十几MB甚至几MB的可能,这个时候YGC回收掉 Eden区后,还存活的对象进入Survivor 装不下,就会直接晋升到老年代,导致老年代占用空间逐渐增加,从而触发FULL GC,如果一次FULL GC的耗时很长(比如到达几百毫秒),那么在要求高响应的系统就是不可取的。容量比较小,可以看到 Eden、From、To 之间的比例不是默认的 8:1:1。
2022-12-16 16:36:15
1315
原创 JVM 之堆内存详解
新生代中的可用内存:复制算法用来担保的内存为9:1,所以只会造成 10% 的空间浪费。可用内存中Eden:S1区为8:1即新生代中Eden:S1:S2 = 8:1:1这个比例,是由参数 -XX:SurvivorRatio 进行配置的(默认为 8)。
2022-12-16 15:38:44
257
原创 Ubuntu 之安装 Jenkins
Jenkins 依赖 Java 环境。https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.300/地址: http://mirrors.jenkins-ci.org/首行是系统版本名称,Releases行是短期更新包,LTS是长期更新包。vim run-jenkins.shvim /root/.jenkins/hudson.model.UpdateCenter.xml......
2022-07-02 20:10:06
681
原创 Linux 之执行 Shell 脚本空行造成: not found 报错的解决方法
问题:执行shell脚本文件,报错原因:应该是使用了window的记事本编辑了脚本文件。window下的换行是回车符+换行符,也就是\r\n,而unix下是换行符\n。解决方法:方法一:使用 notepad++ 转换在右下角的windows(CR LF),点击右键,选择转为Unix(LF)方法二:使用vim转换使用vim打开xxx.sh直接输入 :set ff,不用进编辑模式;如果输出 fileformat=dos,说明文本格式是windows下的;直接输入 :set ff = unix
2022-07-02 17:09:49
2605
原创 CentOS7 时间同步
设置时区linux获取的时间比实际时间差八个小时,这个一般是因为时区设置导致的,我们可以在 /etc/profile 中设置时区设置为CST时区,然后source /etc/profile。
2022-06-30 15:57:49
1570
原创 IDEA 之启动多个 SpringBoot 实例
-Xmx512m--server.port=8081 --spring.profiles.active=test
2022-05-22 22:49:55
546
原创 VirtualBox 之使用 Vagrant 初始化 Linux 系统
文章目录VirtualBox 安装Vagrant 安装安装一个 centos 7 系统安装 VirtualBox 体系下的 Vagrant Box创建一个虚拟机设置 Linux 环境下载链接: https://pan.baidu.com/s/1laHUXbmMSmcuuKeG9EBkmwVirtualBox 安装1、配置虚拟机默认安装地址2、网络配置如果出现主机无法ping通虚拟机的情况,请首先确认虚拟机防火墙已关闭。1、网络地址转换(NET)一般用来虚拟机上网。如果主机可以上网,虚
2022-05-04 13:48:16
766
1
原创 内网穿透配置
我在局域网中有一台电脑,部署了web服务,现在希望所有人都能访问它。很显然,这台电脑只有一个局域网ip,没有公网ip。那么同一局域网内的设备可以通过局域网ip找到他。而其他设备则找不到你。最多只能找到你的路由器,却进不了你的局域网。那么就需要内网穿透了。通过 ngrok 来实现。官网下载内网穿透工具地址:可以使用Github账号登录https://ngrok.com/download...
2022-04-30 23:49:31
378
原创 SpringBoot 之开发大全
文章目录Spring Boot 对 Json 的处理jackson 中对 null 的处理使用 alibaba fastJson 解析框架封装统一返回的数据结构Spring Boot中的全局异常处理官方构建Spring Boot应用:http://start.spring.io/Spring Boot 对 Json 的处理Spring Boot 中默认使用的 json 解析框架是 jackson。jackson 中对 null 的处理在实际项目中,难免会遇到一些 null 值出现,在转 json
2022-04-27 00:13:16
1497
原创 k8s 集群部署
简介Kubernetes 简称 k8s。是用于自动部署,扩展和管理容器化应用程序的开源系统。中文官网:https://kubernetes.io/zh/中文社区:https://www.kubernetes.org.cn/官方文档:https://kubernetes.io/zh/docs/home/社区文档:http://docs.kubernetes.org.cn/k8s 集群安装环境准备1、准备工作使用 vagrant 快速创建三个虚拟机。虚拟机启动前先设置 virtualbox
2022-04-26 22:23:46
2410
原创 CSS 布局网页
文章目录CSS 提供了三种传统布局方式(简单说就是盒子如何进行排列)普通流(标准流)浮动定位CSS 提供了三种传统布局方式(简单说就是盒子如何进行排列)普通流(标准流)标签按照规定好的默认方式排列。1、块级元素会独占一行,从上向下顺序排列。2、行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。浮动在一行排列,宽高生效,浮动后的标签具备行内块特点。浮动最典型的应用:可以让多个块级元素一行内排列显示。网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动!f
2022-04-13 22:42:29
556
原创 CSS 的复合选择器
结构伪类选择器伪元素伪元素 通过css创建标签,装饰性的不重要的小图。.father::before { content: '您好'; color: red;}.father::after { content: '好好';}找到父级,在这个父级里面创建子级标签。<div class="father">hello</div>...
2022-04-13 21:04:49
341
原创 HTML+CSS常见问题总结
文章目录CSS 布局技巧CSS 通用布局行内元素 高、宽 直接设置是无效的版心居中使单行文字垂直居中相邻块元素垂直外边距的合并嵌套块元素垂直外边距的塌陷通过 margin 或 padding 改变行内标签的位置,无法生效CSS 布局技巧从外到内、先宽高背景色、放内容、调节内容的位置、控制文字细节。CSS 通用布局默认问题:网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致盒子的宽高会加上内边距和边框* { padding:0; /* 清除内边距 */ margin:0;
2022-04-13 20:22:42
801
原创 RabbitMQ 之集群模式
问题: 如果我有一个 RabbitMQ 集群,那么是不是我的消息集群中的每一个实例都保存一份呢?这里就涉及到 RabbitMQ 集群的两种模式。普通集群将 RabbitMQ 部署到多台服务器上,每个服务器启动一个 RabbitMQ 实例,多个实例之间进行消息通信。此时我们创建的队列 Queue,它的元数据(主要就是 Queue 的一些配置信息)会在所有的 RabbitMQ 实例中进行同步,但是队列中的消息只会存在于一个 RabbitMQ 实例上,而不会同步到其他队列。当我们消费消息的时候,如果连接
2022-04-11 21:22:06
5635
2
原创 RabbitMQ 之消息丢失、积压、重复解决
文章目录如何保证消息可靠性-消息丢失如何保证消息可靠性-消息重复如何保证消息可靠性-消息积压如何保证消息可靠性-消息丢失消息发送出去,由于网络问题没有抵达服务器。做好容错方法(try-catch),发送消息可能会网络失败,失败后要有重试机制,可记录到数据库,采用定期扫描重发的方式。做好日志记录,每个消息状态是否都被服务器收到都应该记录。做好定期重发,如果消息没有发送成功,定期去数据库扫描未成功的消息进行重发。消息抵达Broker,Broker要将消息写入磁盘(持久化)才算成功。此时
2022-04-11 21:05:02
717
原创 SpringCloudAlibaba 之 Seata 实现分布式事务
简介Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。https://seata.io/zh-cn/Seata 四种模式(AT、TCC、Sage、XA)ATAT 模式的一阶段、二阶段提交和回滚均由 Seata 框架自动生成,用户只需编写业务 SQL,便能轻松接入分布式事务,AT 模式是一种对业务无任何侵入的分布式事务解决方案。TCCTCC需要写三个接口:Try:业务。Confirm:确认提交。Cancel:业务回滚。相对于 AT
2022-04-10 22:39:16
792
原创 Spring 之Security提供的加密算法BCryptPasswordEncoder
BCryptPasswordEncoderBCryptPasswordEncoder方法采用SHA-256 +随机盐+密钥对密码进行加密。密码是不可逆的。SHA系列是Hash算法,不是加密算法,使用加密算法意味着可以解密(这个与编码/解码一样),但是采用Hash处理,其过程是不可逆的。1、加密(encode):注册用户时,使用SHA-256+随机盐+密钥把用户输入的密码进行hash处理,得到密码的hash值,然后将其存入数据库中。2、密码匹配(matches):用户登录时,密码匹配阶段并没有进行密码
2022-03-31 19:00:23
2964
原创 JS实现发送验证码倒计时
<a id="sendCode"> 发送验证码 </a>$(function () { $("#sendCode").click(function () { //2、倒计时 if ($(this).hasClass("disabled")) { //正在倒计时中 } else { //1、给指定手机号发送验证码 $.get("/sms/sendcode?
2022-03-31 16:05:49
2318
原创 SpringCloud 之分布式事务解决方案
本地消息表(异步确保)基本思路就是:消息生产方,需要额外建一个消息表,并记录消息发送状态。消息表和业务数据要在一个事务里提交,也就是说他们要在一个数据库里面。然后消息会经过MQ发送到消息的消费方。如果消息发送失败,会进行重试发送。消息消费方,需要处理这个消息,并完成自己的业务逻辑。此时如果本地事务处理成功,表明已经处理成功了,如果处理失败,那么就会重试执行。如果是业务上面的失败,可以给生产方发送一个业务补偿消息,通知生产方进行回滚等操作。生产方和消费方定时扫描本地消息表,把还没处理完成的消息或者失
2022-03-30 20:58:19
3332
原创 Kafka 之集成到 SpringBoot
https://www.jianshu.com/p/6ce5d9a96113?utm_campaign=hugohttps://blog.youkuaiyun.com/weixin_43291055/article/details/92616895https://blog.youkuaiyun.com/yuanlong122716/article/details/105160545/
2022-03-29 22:18:00
2474
原创 SpringCloud 之OpenFeign远程调用丢失Header头
Gateway网关丢失请求头解决办法:在搭建微服务时,使用了SpringSecurity Oauth2认证授权,使用密码方式,从认证中心获取了token后,要将token携带在请求头中,但是发现经过gateway网关后,token丢失了。解决:通过使用过滤器,重新构建一个request,再向服务发送请求。@Componentpublic class RequestAuthFilter implements GlobalFilter, Ordered { @Override public Mon
2022-03-27 23:18:11
2858
原创 Nacos 面试题
1、为什么要将服务注册到nacos?为了更好的查找这些服务。2、Nacos服务是如何判定服务实例的状态?通过发送心跳包,5秒发送一次,如果15秒没有回应,则说明服务出现了问题,如果30秒后没有回应,则说明服务已经停止。3、服务消费方是如何调用服务提供方的服务的?通过创建RestTemplate对象来实现。4、Nacos中的负载均衡底层是如何实现的?通过Ribbon实现,Ribbon中定义了一些负载均衡算法。然后基于这些算法从服务实例中获取一个实例为消费方提供服务。5、Ribbon 是什么
2022-03-27 20:19:03
14937
原创 JVM 之面试题
JVM 如何加载一个类1、将.java文件通过javac命令编译成.class文件。2、通过类加载器读取.class文件,并加载类信息到方法区,同时生成了一个Class对象。3、通过Class对象实例化放入到堆区。一个类什么时候进入JVM1、虚拟机启动时,执行main方法的时候。2、new对象的时候。3、读取静态变量或调用静态方法的时候。4、初始化一个子类,首先会初始化父类。5、反射 Class.forName(“com.demo.ClassA”)。一个类进入JVM后,经历了什么加载、
2022-03-26 21:33:51
263
原创 Redis 之缓存和DB一致性解决
文章目录缓存数据一致性模式双写模式失效模式缓存数据一致性-解决方案缓存数据一致性模式双写模式失效模式上面两种方案在并发量大的情况下,可能会导致脏数据,为缓存设置过期时间后,数据过期下一次查询会触发更新缓存。缓存数据一致性-解决方案无论是双写模式还是失效模式,都会导致缓存的不一致问题。即多个实例同时更新会出事。怎么办?1、如果是用户纬度数据(订单数据、用户数据),这种并发几率非常小,不用考虑这个问题,缓存数据加 上过期时间,每隔一段时间触发读的主动更新即可。2、如果是菜单,商品介绍等基础
2022-03-26 13:56:01
1591
1
原创 SpringBoot 之AOP实现过滤器、拦截器、切面
文章目录AOP概述过滤器、拦截器、切面区别过滤器 Filter使用过滤器统一请求耗时拦截器 Interceptor使用拦截器判断是否登录切面 AspectJAOP概述AOP表示面向切面编程(Aspect-Oriented Programming)。首先AOP不是一项技术,它是一种编程思想。过滤器、拦截器、切面都可以理解为AOP的实现方式。过滤器、拦截器、切面区别过滤器拦截器Aspect关注的点所有web请求部分web请求偏向于业务层面的拦截实现原理函数回调
2022-03-25 23:00:46
7528
1
原创 Spring Cloud Gateway+Oauth2 实现统一认证和鉴权
前言应用架构:认证服务负责认证,网关负责校验认证和鉴权,其他API服务负责处理自己的业务逻辑。安全相关的逻辑只存在于认证服务和网关服务中,其他服务只是单纯地提供服务而没有任何安全相关逻辑。JWT认证流程:1、用户使用账号和密码发出post请求;2、服务器使用私钥创建一个jwt;3、服务器返回这个jwt给浏览器;4、浏览器将该jwt串在请求头中像服务器发送请求;5、服务器验证该jwt;6、返回响应的资源给浏览器。JWT解析JWT使用场景:授权:这是JWT使用最多的场景,一旦用户登
2022-03-25 19:50:44
8709
2
原创 Redis 之Redisson客户端
概述Redisson 是架设在 Redis 基础上的一个 Java 驻内存数据网格。充分 的利用了 Redis 键值数据库提供的一系列优势,基于 Java 实用工具包中常用接口,为使用者 提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工 具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式 系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间 的协作。官方文档SpringBoot使用Redisson1、导入Redis
2022-03-22 22:41:42
1787
原创 Jvisualvm 性能监控
安装插件方便查看 gc。1、cmd 启动 jvisualvm2、工具->插件3、如果 503 错误解决:https://visualvm.github.io/pluginscenters.htmlcmd 查看自己的 jdk 版本,找到对应的复制下面查询出来的链接。并重新设置上即可...
2022-03-20 13:38:30
507
经典嵌入式面试集合
2012-04-16
30岁Java开发想转前端可行么?
2022-04-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人