![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 78
摘星喵Pro
蜡笔小新.com
展开
-
Netty 进阶知识 编解码器、Protobuf、TCP粘包、出站入站
首先,在.proto文件中定义您的消息格式。通过这些步骤,可以在 Netty 应用程序中集成 Protobuf,利用其高效的二进制数据序列化/反序列化能力。这对于需要处理复杂数据结构或要求高性能的网络通信应用尤其有用。Protobuf 提供了一种高效、灵活的方式来定义和处理结构化数据。在分布式系统、大数据应用和微服务架构中,Protobuf 是数据交换的理想选择,特别是在对性能和带宽使用有严格要求的场景中。TCP流式传输TCP是面向连接的、面向流的协议,它不保留消息边界。原创 2024-01-17 11:55:45 · 1524 阅读 · 0 评论 -
Netty 介绍、使用场景及案例
https://github.com/netty/nettyNetty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可扩展的网络服务器和客户端。它是一个开源项目,最初由JBoss公司开发,现在由社区维护。Netty的设计和实现以处理高并发、低延迟、可靠性和灵活性为目标,因此非常适合构建各种网络应用,包括网络服务器、代理、聊天应用、在线游戏、实时通信和分布式系统等。以下是一些Netty的主要特点和优势:异步和事件驱动:Netty采用异步非阻塞的IO模型,允许处理大量并发连接而不会阻塞应用程序线程。原创 2024-01-11 15:00:43 · 4775 阅读 · 0 评论 -
Redis交互速度慢,CPU占用100%,集群方案,报错等问题
## 问题描述:执行top命令发现redis占用达到100%redis交互速度慢,一次要几十到一百毫秒一次## 解决思路查看redis数据量,比如我这里达到了30万经过本地测试,redis交互的速度跟redis交互量成正比,也就是说redis没数据时交互在10ms以内,数据量大的话一次可能花费更久的时间## 集群方案我在本地虚拟机建立了3个主节点3个从节点的redis集群,经过压力测试单节点情况cpu占到30%;改为集群模式redis每个节点占用在10%以下可以得出结论集群方案确实能降原创 2023-12-04 11:51:59 · 935 阅读 · 0 评论 -
Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等)
这样做完后,使用swagger测试接口大概率会出现"%A8%A1%E6%9D%BF.xlsx"这种格式,这是由于Swagger对文件名进行了URL编码,导致文件名在下载时显示为编码后的形式。Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等)编写下载接口,返回要下载的模版文件,fileName可以根据需要灵活配置。准备文件,这里我放在resource下的templates路径。直接使用浏览器进行Get测试接口,文件编码正常,完美!原创 2023-09-13 14:57:16 · 2630 阅读 · 0 评论 -
23种设计模式介绍+案例演示
对每个设计模式案例增加了详细注释和设计模式的介绍总结。这是一个学习java设计模式案例分析。参考书籍:《图解设计模式》原创 2023-08-04 13:07:07 · 82 阅读 · 0 评论 -
MyBatis XML方式常用元素用法示例
MyBatis XML 中的元素有很多种,每个元素都有不同的作用和用法。:用于定制 SQL 片段的前缀和后缀,并根据条件进行添加或删除。:用于循环遍历集合或数组,并生成对应的 SQL 语句。:根据条件判断是否包含某个 SQL 片段。:实现条件选择逻辑。原创 2023-06-28 16:00:15 · 612 阅读 · 0 评论 -
Mybatis注解形式用法
MyBatis 注解形式的用法提供了一种在接口方法上直接定义 SQL 语句和参数映射的方式,使得数据库操作更加简洁和直观。在使用注解形式时,需要确保正确配置了 MyBatis 的注解扫描和相关的配置信息,以便正确地执行数据库操作。除了以上示例,MyBatis 还提供了其他注解和用法,例如动态 SQL 注解(:指定方法参数的名称,在 SQL 语句中引用参数。:执行查询操作,用于查询单个结果或结果列表。:执行插入操作,用于插入数据。:执行更新操作,用于更新数据。:执行删除操作,用于删除数据。原创 2023-06-28 15:52:20 · 491 阅读 · 0 评论 -
JSON序列化/反序列化,指定自定义字段名key转换注解配置
输出结果: 可以看到直接输出key也是自定义的,但这里用的是alibaba.fastjson注解完成的,和上面使用场景不一样,因为springboot使用fastjson序列化对象。在springboot请求接口返回对象得到的结果:(因为springboot使用fastjson序列化对象)实体类属性上增加@JSONField(name = “属性名”)注解(alibaba.fastjson)实体类的属性上面增加@JsonProperty(“字段名”)注解(fastjson)原创 2023-01-13 15:40:39 · 6211 阅读 · 0 评论 -
Mac/Windows使用DBeaver+jdbc驱动连接KingbaseES人大金仓数据库
下载DBeaver Communit连接工具并安装:官网下载驱动你电脑对应的文件:原创 2023-01-13 10:03:40 · 4094 阅读 · 1 评论 -
【微服务技术09】统一网关Gateway
全局过滤器对所有路由都生效的过滤器,并且可以自定义处理逻辑实现全局过滤器的步骤实现GlobalFilter接口添加@Order注解或实现Ordered接口编写处理逻辑。原创 2022-12-16 17:06:32 · 663 阅读 · 0 评论 -
【微服务技术08】基于Feign远程调用
Feign是一个声明式的http客户端,其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。1、引入依赖 < dependency > < groupId > org.springframework.cloud < artifactId > spring-cloud-starter-openfeign原创 2022-12-14 14:06:21 · 390 阅读 · 0 评论 -
【微服务技术07】Nacos配置管理
解决服务部署实例越来越多,需要逐个修改微服务配置的问题Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。从微服务拉取配置微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。但如果尚未读取application.yml,又如何得知nacos地址呢?因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:首先,在user-servic原创 2022-12-14 11:21:55 · 237 阅读 · 0 评论 -
【微服务技术06】Nacos注册中心
Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式临时实例心跳不正常会被剔除,非临时实例则不会被剔除Nacos支持服务列表变更的消息推送模式,服务列表更新更及时Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式原创 2022-12-14 09:47:17 · 366 阅读 · 0 评论 -
【微服务技术05】Ribbon负载均衡
1、Ribbon负载均衡规则规则接口是IRule默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询2、负载均衡自定义方式代码方式:配置灵活,但修改时需要重新打包发布配置方式:直观,方便,无需重新打包发布,但是无法做全局配置3、饥饿加载开启饥饿加载指定饥饿加载的微服务名称。原创 2022-12-13 16:55:49 · 428 阅读 · 0 评论 -
【微服务技术04】Eureka注册中心-服务注册与发现
在Eureka架构中,微服务角色有两类:**EurekaServer:**服务端,注册中心记录服务信息心跳监控**EurekaClient:**客户端**Provider:**服务提供者,例如案例中的 user-service注册自己的信息到EurekaServer每隔30秒向EurekaServer发送心跳**consumer:**服务消费者,例如案例中的 order-service根据服务名称从EurekaServer拉取服务列表。原创 2022-12-13 15:18:22 · 117 阅读 · 0 评论 -
springboot kafka配置与使用
可以根据情况只配置生产着或消费者;每个groupId都可以完整消费指定topic的所有数据,要想重新消费所有数据可以更换groupid组原创 2022-11-25 16:53:07 · 3469 阅读 · 0 评论 -
lambda stream流处理异常的方法/Either不终止stream流处理异常
当你在使用一个抛出checkedException的函数式,如果你想要在lambda里使用它,你需要做一些额外的工作,比如将异常包装成RuntimeException是一种可行的方案。这种方法非常适合创建一个简单的工具包装函数,然后每次你只需要调用这个检查函数而不必再写try/catch。如果你想进一步控制异常并在不终止stream的需求下,可以使用Either来再对函数包装,把异常和正确执行结果分开处理。原创 2022-11-12 13:51:56 · 1565 阅读 · 0 评论 -
swagger-bootstrap-ui Api接口文档
之前配置过swagger的话直接再引入swagger-bootstrap-ui就可以使用了, 不需要额外配置,如果没配置过swagger还需要引入swagger核心包。跟swagger区别把最后的页面换成doc.html。ip:端口/[应用程序上下文]/doc.html。原创 2022-10-24 13:14:23 · 661 阅读 · 0 评论 -
【微服务技术03】服务拆分--远程调用RestTemplate
1.单一职责:不同微服务,不要重复开发相同业务562.数据独立:不要访问其它微服务的数据库3.面向服务:将自己的业务暴露为接口,供其它微服务调用。原创 2022-10-21 10:46:07 · 438 阅读 · 0 评论 -
【微服务技术02】认识微服务--架构演变/技术对比/SpringCloud
单体架构特点简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统分布式架构特点松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝微服务一种良好的分布式架构方案优点:拆分粒度更小、服务更独立、耦合度更低缺点:架构非常复杂,运维、监控、部署难度提高。原创 2022-10-19 20:04:20 · 586 阅读 · 0 评论 -
【微服务技术01】微服务技术栈--模块组成
微服务是分布式架构的一种,分布式架构就是要把服务做拆分,而拆分的过程中会产生各种问题,而SpringCloud只是解决了服务拆分过程中的服务治理问题,其他的一些服务拆分更复杂问题没有给出完整的解决方案,所以一个完整的微服务技术要包含的不仅仅是SpringCloud。原创 2022-10-19 15:44:30 · 696 阅读 · 0 评论 -
Mac切换Java JDK版本
打开配置文件增加/修改环境变量,改为想要的版本路径。Mac切换Java JDK版本。查看系统中的java版本。原创 2022-09-27 09:27:24 · 860 阅读 · 0 评论 -
Spring Cloud Netflix 知识整理
APIHTTP,RPC注册与发现熔断机制一切问题的原因:网络不可靠!什么是微服务?微服务(Microservice Architecture) 是近几年流行的一种架构思想,关于它的概念很难一言以蔽之。究竟什么是微服务呢?我们在此引用ThoughtWorks 公司的首席科学家 Martin Fowler 于2014年提出的一段话:原文:https://martinfowler.com/articles/microservices.html。原创 2022-09-16 17:33:33 · 640 阅读 · 1 评论 -
Java反射知识总结、Java内存分析、通过反射动态创建对象、操作泛型、注解
这四种类加载器存在如下关系,当进行类加载的时候,虽然用户自定义类不会由bootstrap classloader或是extension classloader加载(由类加载器的加载范围决定),但是代码实现还是会一直委托到bootstrap classloader, 上层无法加载,再由下层是否可以加载,如果都无法加载,就会触发findclass,抛出classNotFoundException.当一个类加载器收到了类加载的请求的时候,他不会直接去加载指定的类,而是把这个请求委托给自己的父加载器去加载。原创 2022-09-09 17:18:44 · 343 阅读 · 0 评论 -
Java内置注解用法、自定义注解
使用@interface自定义注解时,自动继承java.lang.annotation.Annotation接口分析:@interface用来声明一个注解,格式:public @interface 注解名{定义内容}其中的每个方法实际上是声明一个配置参数方法名称就是参数名称返回值类型就是参数的类型(返回值只能是基本类型、Class、String、enum)可以通过default来声明参数的默认值如果只有一个参数成员,一般参数名为value。原创 2022-09-09 14:31:41 · 325 阅读 · 0 评论 -
SpringBoot异步任务、邮件任务、定时任务
在springboot启动类上增加@EnableAsync // 开启异步注解功能在要调用的异步方法上增加@Async注解[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zw1TyTNB-1662639933309)(/Users/cat/Library/Application Support/typora-user-images/image-20220908191920110.png)]直接调用即可,完成异步处理任务。原创 2022-09-08 20:27:17 · 706 阅读 · 0 评论 -
Spring/SpringBoot注解用法解析/案例
After 在方法执行之后执行(方法上) @Before 在方法执行之前执行(方法上) @Around 在方法执行之前与之后执行(方法上)比如,公司使用bean.xml文件生成配置bean,然而你为了省事,想继续复用bean.xml,@ImportResource粉墨登场。@Configuration 声明当前类为配置类,其中内部组合了@Component注解,表明这个类是一个bean(类上)@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)原创 2022-09-08 17:43:54 · 192 阅读 · 0 评论 -
SpringBoot整合Redis/自定义Redis配置和工具类
可以自定义一些对象序列化操作等配置/**// 编写自己的redisTemplate @Bean @SuppressWarnings("all") public RedisTemplate < String , Object > redisTemplate(RedisConnectionFactory factory) throws UnknownHostException {原创 2022-09-08 13:43:01 · 399 阅读 · 0 评论 -
Mybatis-plus条件构造器Wrapper/QueryWrapper/LambdaQueryWrapper/LambdaQueryChainWrapper关系梳理和用法
1. `QueryWrapper`、`QueryChainWrapper`只能都只能指定需要的数据库列名2. `LambdaQueryWrapper`、`LambdaQueryChainWrapper`可以通过获取Lambda数据库列名3. `QueryWrapper` 、`LambdaQueryWrapper`不能使用链式查询的方式,必须借助BaseMapper来执行4. `QueryChainWrapper`、`LambdaQueryChainWrapper`可以使用链式查询的方式,如list()原创 2022-09-08 10:59:38 · 1375 阅读 · 1 评论 -
函数式编程-Stream流/lambda表达式/Optional/函数式接口/方法引用/高级用法
1.2.1 概念 面向对象思想需要关注用什么对象完成什么事情。而函数式编程思想就类似于我们数学中的函数。它主要关注的是对数据进行了什么操作。 优点* 代码简洁,开发快速* 接近自然语言,易于理解* 易于"并发编程"......原创 2022-08-29 16:17:29 · 156 阅读 · 0 评论 -
数据结构--二叉树--创建,复制,计算高度,叶子结点总数,叶子总数--c++
【代码】数据结构--二叉树--创建,复制,计算高度,叶子结点总数,叶子总数--c++原创 2021-03-31 21:50:27 · 389 阅读 · 0 评论 -
python操作文件--批量修改文件名,替换文件/文件夹名中的字符串(已使用递归算法完善代码,可通用任何文件目录)
最近搞了一些课程资源,但是每个文件后面都有+vx的广告就比较烦,于是写了个python操作文件批量修改文件名,替换文件/文件夹名中的字符串程序。###python操作文件–批量修改文件名,替换文件/文件夹名中的字符串(已使用递归算法完善代码,可通用任何文件目录)递归遍历获取文件目录的字典,再遍历字典根据传入的参数(想替换的字符串,新字符串,文件目录字典)修改文件名。这是改好的截图,之前每个后面都有"+vx xxx"字符串。然后每个文件夹中有一堆文件(图片中已经是修改好的了)...原创 2021-03-31 21:54:19 · 1012 阅读 · 0 评论 -
Java基础--环境--语法--封装继承--单例模式与多态
在类中普通代码块每次创建对象时调用{}静态代码块只执行一次static{}抽象类不能被实例化,防止编写无意义的代码可以通过向上转型,指向子类实例。原创 2021-03-31 21:55:29 · 171 阅读 · 0 评论 -
Java异常
Throwable是Java中的异常根类,有Error和Exception两个子类Error是程序无法处理的错误,表示运行应用程序中较严重的问题Exception是程序本身可以处理的异常。异常处理通常指针对这种类型异常的处理。多重catch块,捕获Exception具体子类的异常,可以在最后加入Exception收尾(防止遗漏)且只能在最后由于finally的执行机制,在finally中的return语句会覆盖掉try和catch中的return...原创 2021-03-31 22:00:53 · 82 阅读 · 0 评论 -
XML可扩展标记语言
XML可扩展标记语言和html格式类似,有开始和结束成对标记标签名要有意义,建议使用英文,小写字母,单词之间用"-"分割。多级标签之间不要存在同名的情况可以使用适当的注释与缩进让格式清晰标签属性用于描述不可或缺的信息,对标签分组或者为标签设置ID时常用属性表示XML支持5种实体引用实体引用对应符号说明<<小于>>大于&&和号'’单引号"原创 2021-04-23 09:24:20 · 93 阅读 · 0 评论 -
Java输入输出流
Java输入输出流感觉不做例子没啥用,用到的时候再搞,先简单看一下原创 2021-04-13 13:36:55 · 77 阅读 · 0 评论 -
Java集合排序
因此,如果使用Comparator接口,那么要比较的类和实现Comparator接口的类可以分开,如果使用Comparable接口,那么。一般情况下如果对某个类进行排序,比如Cat类,如果使用Comparable接口的方式,那么Cat类需要实现Comparable接口。对于Comparable接口,它的方法只有一个对象作为参数,所以要比较的类需要实现Comparable接口,将当前对象与方法参。因此,Comparable接口可以作为实现类的默认排序算法,Comparator接口则用于一个类的扩展排序。...原创 2021-04-01 07:30:32 · 636 阅读 · 0 评论 -
使用Java操作xml文档
DOM定义了访问和操作XML文档的标准方法,DOM把XML文档作文树结构来查看,能够通过DOM树来读写所有元素。Dom4j是一个易用的、开源的库,用于解析XML。它应用于Java平台,具有性能优异、功能强大和极易使用的特点。掌握XPath可以极大的提高在提取数据时的开发效率。学习XPath本质就是掌握各种形式表达式的使用技巧。XPath路径表达式是XML文档中查找数据的语言。XML标签被Dom4j定义为Element对象。Dom4j将XML视为Document对象。XPath基本表达式案例。...原创 2021-04-25 13:40:55 · 315 阅读 · 0 评论 -
IntellJ IDEA
配置好后点击菜单 构建 -> 编译Artifacts -> 构建 即可生成jar包。并且引用tomcat lib文件夹下的servlet-api.jar。右侧“项目名编译输出”双击添加到左侧,否则没有编译后的类。文件 -> 项目结构 -> 构建 -> 添加jar包。配置jar包信息,名字,输出路径,创建清单入口类等等。项目右键,添加框架支持,选择Web应用程序。然后菜单 构建 -> 构建工件。新建一个普通Java工程。企业版2021.1.1。添加tomcat配置。...原创 2021-07-22 17:27:05 · 169 阅读 · 0 评论 -
Java将base64字符串保存为图片/图片转base64字符串
Base64 编码普遍应用于需要通过被设计为处理文本数据的媒介上储存和传输二进制数据而需要编码该二进制数据的场景。这样是为了保证数据的完整并且不用在传输过程中修改这些数据。Base64 也被一些应用(包括使用。(binary-to-text)的编码规则,使得二进制数据在解释成 radix-64 的表现形式后能够用 ASCII 字符串的格式表示出来。中储存复杂数据时使用。...原创 2022-08-09 10:54:40 · 2978 阅读 · 0 评论