Java
文章平均质量分 58
最好束手就擒
这个作者很懒,什么都没留下…
展开
-
stream对list进行升降序排序
【代码】stream对list进行升降序排序。原创 2023-03-11 10:52:20 · 10844 阅读 · 0 评论 -
Mybatis-Plus查询时排除某些字段
【代码】Mybatis-Plus查询时排除某些字段。原创 2022-11-22 16:37:10 · 1131 阅读 · 0 评论 -
Es 根据时间分组聚合 (趋势图 折线图数据)
【代码】Es 根据时间分组聚合 (趋势图 折线图数据)原创 2022-11-09 15:09:43 · 2856 阅读 · 0 评论 -
TreeUtil工具类,传入list递归生成树形结构
【代码】TreeUtil工具类,传入list递归生成树形结构。原创 2022-09-09 15:39:14 · 342 阅读 · 0 评论 -
Netty12-TCP粘包拆包
假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到字节数是不定的,故可能存在以下四种情况:原创 2022-06-30 15:21:15 · 526 阅读 · 0 评论 -
Netty12-Netty的入站出站编解码
关系继承图粘包拆包:由于不可能知道远程节点是否会一次性发送一个完整的信息,tcp有可能出现粘包拆包的问题,** **这个例子,每次入站从ByteBuf中读取4字节,将其解码为一个int,然后将它添加到下一个List中。当没有更多元素可以被添加到该List中时,它的内容将会被发送给下一个ChannelInboundHandler。int在被添加到List中时,会被自动装箱为Integer。在调用readInt()方法前必须验证所输入的ByteBuf是否具有足够的数据入栈bytebuff为八个字节,此原创 2022-06-30 11:30:07 · 243 阅读 · 0 评论 -
Netty11-编码和解码-Protobuf
Netty 自身提供了一些 codec(编解码器)Netty 提供的编码器• StringEncoder,对字符串数据进行编码• ObjectEncoder,对 Java 对象进行编码Netty 提供的解码器• StringDecoder, 对字符串数据进行解码• ObjectDecoder,对 Java 对象进行解码Netty 本身自带的 ObjectDecoder 和 ObjectEncoder 可以用来实现 POJO 对象或各种业务对象的编码和解码,底层使用的仍是 Java 序列化技术 , 而原创 2022-06-29 15:27:28 · 516 阅读 · 0 评论 -
Netty10-WebSocket长连接开发
Netty 实现 Websocket长连接原创 2022-06-27 18:12:08 · 970 阅读 · 0 评论 -
Netty-9-Netty心跳检测
netty 心跳检测原创 2022-06-25 18:08:58 · 247 阅读 · 0 评论 -
Netty9-Netty实现群聊系统 并附 实现点对点私聊思路
Netty实现群聊系统原创 2022-06-25 17:14:30 · 532 阅读 · 0 评论 -
Netty7-Netty核心模块
1) Netty 网络通信的组件,能够用于执行网络 I/O 操作。2) 通过Channel 可获得当前网络连接的通道的状态3) 通过Channel 可获得 网络连接的配置参数 (例如接收缓冲区大小)4) Channel 提供异步的网络 I/O 操作(如建立连接,读写,绑定端口),异步调用意味着任何 I/O 调用都将立即返回,并且不保证在调用结束时所请求的 I/O 操作已完成5) 调用立即返回一个 ChannelFuture 实例,通过注册监听器到 ChannelFuture 上,可以I/O 操作原创 2022-06-24 15:34:12 · 267 阅读 · 0 评论 -
Netty6-快速入门HTTP服务
HTTPServerInitializer 通道初始化对象创建一个通道初始化对象 并给WorkGroup的 EventLoop 对应的管道设置处理器 可以是Netty提供的 也可以是自定义的Http ServerHandle服务启动后访问监听的浏览器端口即可得到返回消息此时控制台打印会发现浏览器发送了两次请求一次是请求网站,一次是请求网站的图标进行请求过滤...原创 2022-06-24 13:37:37 · 364 阅读 · 0 评论 -
Netty5-Netty模型
ServerHandler中处理事件是有一个非常耗时长的业务 -> 异步执行 -> 提交该channel 对应的NIOEventLoop 的 taskQueue中解决方案1 用户程序自定义的普通(异步)任务解决方案2 : 用户自定义定时任务 -》 该任务是提交到 scheduleTaskQueue中Netty异步模型基本介绍说明:当 Future 对象刚刚创建时,处于非完成状态,调用者可以通过返回的 ChannelFuture来获取操作执行的状态,注册监听函数来执行完成后的操作。常见有如下操作• 通原创 2022-06-24 10:37:49 · 204 阅读 · 0 评论 -
Netty5-入门实例-TCP服务
Netty 模型理论原创 2022-06-23 22:38:25 · 669 阅读 · 0 评论 -
Netty4-Netty入门-模型理论
Netty 对 JDK 自带的 NIO 的 API 进行了封装工作原理图黄色的框表示对象, 蓝色的框表示线程白色的框表示方法(API)模型特点问题分析基于 I/O 复用模型:多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象等待,无需阻塞等待所有连接。当某个连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理Reactor 对应的叫法: 1. 反应器模式 2. 分发者模式(Dispatcher) 3. 通知者模式(notifier)2) 基于线程池复用线程资源:原创 2022-06-23 20:10:06 · 242 阅读 · 0 评论 -
Netty3-NIO与零拷贝
传统IO 进行四次拷贝,三次切换(仅仅是读写)mmap 优化sendFile 优化1所谓零拷贝是操作系统角度看,是没有CPU拷贝sendFile 优化小结:这里其实有 一次cpu 拷贝kernel buffer -> socket buffer但是,拷贝的信息很少,比如lenght , offset , 消耗低,可以忽略零拷贝的再次理解零拷贝案例-Server零拷贝案例-CLientBIO、NIO、AIO对比表NIO零拷贝关键方法...原创 2022-06-23 14:49:12 · 98 阅读 · 0 评论 -
Netty2-基于NIO的群聊系统
基于NIO额群聊系统原创 2022-06-23 13:34:27 · 198 阅读 · 0 评论 -
Netty-1-IO模型
Netty是一个处理网络高并发的框架 JDK ---> NIO ---> Netty">Java共支持3种网络编程模型/IO模式:BIO、NIO、AIOBIO、NIO、AIO适用场景分析BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序简单易理解。NIO方式适用于连接数目多且连接比较短(netty基于NIO 但是支持长连接)的架构,比如聊天服务器,弹幕系统,服务器间通讯等。编程比较复杂,JDK1.4开始支持。AIO方式使原创 2022-06-23 10:15:00 · 142 阅读 · 0 评论 -
ruoyi使用AOP控制数据权限案例
Aspect :表示切面,给业务方法增加的功能,叫做切面。 切面一般都是非业务功能, 而且切面功能一般都是可以复用的。 例如 日志功能, 事务功能, 权限检查,参数检查, 统计信息等等Orient:面向,对着Programming:编程详细请查看 AOP缓存实现ruoyi使用的是使用注解方式为切入点此注解可传入两个参数 分别为用户表别名 及部门表别名在查看完自定义注解后,再来看一下切面业务类定义切入点@annotation 即使用注解方式切入JoinPoint 当前切入点对象handl原创 2022-06-21 09:14:39 · 628 阅读 · 0 评论 -
Alibaba-Sentinel简单入门
1、简介项目地址:https://github.com/alibaba/Sentinel随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。Sentinel 具有以下特征:丰富的应用场景:Sentinel 承接了阿里巴巴近10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel原创 2022-04-17 11:54:26 · 2344 阅读 · 1 评论 -
org.redisson.client.RedisResponseTimeoutException: Redis server response timeout (3000 ms)错误解决
org.redisson.client.RedisResponseTimeoutException: Redis server response timeout (3000 ms) occured after 3 retry attempts. Command: (HEXISTS), params: [com.dinsmooth.storehbase.schedule:entryTaskDelay, 1f15dcac-22b6-4865-92a5-a6452e6ae5c3:154], channel: [i原创 2022-04-16 15:49:23 · 8815 阅读 · 0 评论 -
分布式事务与本地事务
事务保证:1、订单服务异常,库存锁定不运行,全部回滚,撤销操作2、库存服务事务自治,锁定失败全部回滚,订单感受到,继续回滚3、库存服务锁定成功了,但是网络原因返回数据途中问题?4、库存服务锁定成功了,库存服务下面的逻辑发生故障,订单回滚了,怎么处理?利用消息队列实现最终一致库存服务锁定成功后发给消息队列消息(当前库存工作单),过段时间自动解锁,解锁时先查询订单的支付状态。解锁成功修改库存工作单详情项状态为已解锁1、远程服务假失败:远程服务其实成功了,由于网络故障等没有返回导致:订单回滚,库.原创 2022-04-12 19:20:22 · 315 阅读 · 0 评论 -
分布式session解决方案-SpringSession
1.Session复制让两个服务器之间互相同步Session,小型系统使用,在大型分布式系统下不适用2. 客户端存储3.hash一致性同一个hash后的ip落到同一个服务器上4.统一存储让Session统一存储在中间件或者数据库中,不存在内存中Spring整合SpringSession1.导入依赖<dependency> <groupId>org.springframework.session</groupId>原创 2022-04-11 12:25:25 · 158 阅读 · 0 评论 -
RabbitMQ
1.消息中间件使用场景异步处理应用解耦流量削峰简介大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力消息服务中两个重要概念:消息代理(message broker)和目的地(destination)当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。消息队列主要有两种形式的目的地队列(queue):点对点消息通信(point-to-point)• 消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取消息内容原创 2022-04-11 12:24:27 · 1562 阅读 · 0 评论 -
如何保证接口的幂等性(防止重复提交)
一、什么是幂等性接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用;比如说支付场景,用户购买了商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条...,这就没有保证接口的幂等性。二、哪些情况需要防止用户多次点击按钮用户页面回退再次提交微服务互相调用,由于网络问题,导致请求失败。feign 触发重试机制其他业务情况三、什么情原创 2022-04-11 12:22:58 · 5352 阅读 · 0 评论 -
Feign远程调用丢失请求头或异步情况丢失请求上下文
Feign在远程调用之前要构造请求,会调用很多拦截器来对请求进行增强,如果没有的拦截器,会创建一个新的request请求,这个请求里什么都没有解决:添加拦截器解决远程调用丢失请求头package cn.cloud.xmall.order.config;import feign.RequestInterceptor;import feign.RequestTemplate;import org.springframework.context.annotation.Bean;import o.原创 2022-04-09 19:55:50 · 723 阅读 · 0 评论 -
SpringBoot添加视图控制器来简写controller页面跳转
发送一个请求,跳转到一个页面前言发送一个请求,跳转到一个页面,通常是在controller定义一个空方法进行跳转例如: @GetMapping("/login.html") public String loginPage(){ return "login"; }可以使用springmvc的 viewcontroller 将请求和页面映射一、使用方法1.新建配置类package cn.cloud.xmall.auth.confi.原创 2022-03-23 14:30:18 · 1161 阅读 · 0 评论 -
GROUP_CONCAT(DISTINCT xxx.`xxx`) 使用
项目场景:mysql分组查询例如:例如要查询三个属性,需要对前两个属性去重,第三个结果进行去重并分组问题描述SELECT ssav.`attr_id`,ssav.`attr_name`,ssav.`attr_value`FROM `pms_sku_info` infoLEFT JOIN `pms_sku_sale_attr_value` ssav ON ssav.`sku_id` = info.`sku_id`WHERE info.`spu_id` = 1 GROUP BY ssav.原创 2022-03-21 13:40:56 · 1793 阅读 · 0 评论 -
Java中的异步与线程池
初始化线程的4种方式1、继承Thread Thread01 thread01 = new Thread01(); thread01.start(); public static class Thread01 extends Thread{ @Override public void run() { System.out.println("当前线程:"+Thread.currentThread().getId());原创 2022-03-20 19:00:32 · 7150 阅读 · 0 评论 -
gateWay-API网关
Route:网关的基本构建块。它由 ID、目标 URI、谓词集合和过滤器集合定义。如果聚合谓词为真,则匹配路由。断言:这是一个Java 8 函数断言。输入类型是Spring FrameworkServerWebExchange。这使您可以匹配来自 HTTP 请求的任何内容,例如标头或参数。过滤器GatewayFilter:这些是使用特定工厂构建的实例。在这里,您可以在发送下游请求之前或之后修改请求和响应。spring: cloud: gateway: routes:原创 2022-03-19 08:32:44 · 260 阅读 · 0 评论 -
SpringCache
Spring 从3.1 开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager 接口来统一不同的缓存技术;并支持使用JCache(JSR-107)注解简化我们开发;Cache 接口为缓存的组件规范定义,包含缓存的各种操作集合; Cache 接口下Spring 提供了各种xxxCache 的实现;如RedisCache , EhCacheCache , ConcurrentMapCache 等;.原创 2022-03-17 15:28:39 · 13904 阅读 · 2 评论 -
Redis缓存使用&Redisson分布式锁
缓存哪些数据适合放入缓存?即时性、数据一致性要求不高的访问量大且更新频率不高的数据(读多,写少)原创 2022-03-17 11:23:00 · 1765 阅读 · 0 评论 -
压力测试-JMeter
1.什么是压力测试压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。使用压力测试,我们有希望找到很多种用其他测试方法更难发现的错误。有两种错误类型是:内存泄漏,并发与同步。有效的压力测试系统将应用以下这些关键条件:重复,并发,量级,随机变化。2.性能指标响应时间(Response Time: RT)响应时间指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程所耗原创 2022-03-14 16:28:39 · 2102 阅读 · 0 评论 -
ElasticSearch-快速入门(一)
ES简介官网全文搜索属于最常见的需求,开源的Elasticsearch 是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它Elastic 的底层是开源库Lucene。但是,你没法直接用Lucene,必须自己写代码去调用它的接口。Elastic 是Lucene 的封装,提供了REST API 的操作接口,开箱即用。REST API:天然的跨平台。官方文档-new官方中文-ES2社区中文1-ES5社区中文2-ES5原创 2022-03-10 14:46:10 · 2955 阅读 · 0 评论 -
debug在springboot启用事务的情况下调试
debug 笔记原创 2022-03-02 18:00:38 · 524 阅读 · 0 评论 -
Alibaba-OSS-对象云存储
用户需要上传文件到服务器时,浏览器发送需要上传的文件信息到服务端,服务端使用阿里云密钥生成专属签名然后返回给浏览器,浏览器使用签名直接上传OSS原创 2022-02-21 21:32:16 · 700 阅读 · 0 评论 -
JSR303数据校验 Spring统一异常处理
JSR303进行数据校验1.给Bean添加校验注解可以多个注解校验@NotBlank(message = "品牌名不能为空")private String name;//不能为空 + 自定义规则@NotEmpty @Pattern(regexp = "!/^[a-zA-Z]$/",message = "检索首字母必须是一个字母")private String firstLetter;//不能为空 + 最小值@NotEmpty @Min(value = 0,message = "排原创 2022-02-22 07:45:00 · 485 阅读 · 2 评论 -
stream流方式获取三级菜单
@Override public PageUtils queryPage(Map<String, Object> params) { IPage<CategoryEntity> page = this.page( new Query<CategoryEntity>().getPage(params), new QueryWrapper<CategoryEntity>().原创 2022-02-17 14:22:42 · 351 阅读 · 0 评论 -
import org.junit.Test飘红
检查springboot版本import org.junit.jupiter.api.Test 用在Spring Boot 2.2.X以后import org.junit.Test用在2.2.x之前原创 2021-12-20 15:40:37 · 1078 阅读 · 0 评论 -
java读取excel数据导入数据库
初始化readExcel对象 26为excel列数//文件名称String file_id = ra.getParameter("file_id");//文件路径String filePath = ra.getFileWritePath() + "files/" + file_id;//文件对象File file = new File(filePath);//读取excelReadExcel readExcel = new ReadExcel(26);List<Map<Stri原创 2021-08-24 19:47:05 · 513 阅读 · 0 评论