- 博客(229)
- 资源 (6)
- 收藏
- 关注
原创 SpringBoot中java操作excel【EasyExcel】
Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;
2023-07-24 18:47:10 2970
原创 Nacos的安装与使用(SpringCloud)
Nacos /nɑ:kəʊs/ 是 DynamicNaming andCoService的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
2023-06-28 09:00:44 6033
原创 限流与令牌桶
令牌桶是一种常用的流量控制技术。令牌桶本身没有丢弃和优先级策略。原理1.令牌以一定的速率放入桶中。2.每个令牌允许源发送一定数量的比特。3.发送一个包,流量调节器就要从桶中删除与包大小相等的令牌数。4.如果没有足够的令牌发送包,这个包就会等待直到有足够的令牌(在整形器的情况下)或者包被丢弃,也有可能被标记更低的DSCP(在策略者的情况下)。5.桶有特定的容量,如果桶已经满了,新加入的令牌就会被丢弃。因此,在任何时候,源发送到网络上的最大突发数据量与桶的大小成比例。
2023-06-14 20:03:42 1074
原创 详解java中的日期与时间;新旧API对比;各种日期格式转换
API所在包主要类旧java.util新(Java1.8)java.time从Java 8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:LocalDateLocalTime;;Instant;DurationPeriod可以取代旧的 SimpleDateFormat区别可变性final非final多线程线程安全线程非安全新特性新API严格区分了时刻、本地日期、本地时间和带时区的日期时间。
2023-05-19 09:55:31 1766
原创 Java字符串知多少:String、StringBuffer、StringBuilder
上的,但是又因 String 常量池的存在,因此实际上在堆上的 String 对象的数据又指向了字符串常量池。Java 程序在运行的时候会维护着一个常量池,编译期生成的各种字面量和符号引用会在类加载后进入方法区的。对于上述这种实现字符串的方式就可以在编译的时候确定字符串的内容,因此这一行生成的内存结构就如下图。的时候才能确定字符串的内容。不严谨的讲:虚拟机栈中的 strNew 存储的就是 strNew 这个对象在。,而 strNew 中的字符串数据又指向了常量池中的 A。,在jvm堆内是惟一的。
2023-05-17 09:33:32 800
原创 ThreadLocal实现共享变量的线程安全
类型为ThreadLoclal的参数n2,存取都通过ThreadLocal,实现线程间的隔离,从而达到线程安全。针对上面2中的线程不安全情况,采用ThreadLocal,可以让共享变量实现线程隔离,从而达到线程安全。单例对象,多个线程操作同一个对象,并且该对象有共享变量,对象中方法会对共享变量做出修改。多线程下,操作同一个MyUtil对象时,变量n1是不安全的。如:MyUtil中增加变量n2。
2023-05-07 12:34:41 326
原创 Comparable与Comparator
两种方法各有优劣Comparable 简单,只要实现Comparable 接口的对象直接就成为可以比较的对象,但是需要修改源代码Comparator 的好处是不需要修改源代码,而是另外实现一个比较器,当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。
2023-05-06 09:37:30 289
原创 微服务下网关聚合Swagger文档、starter统一配置Swagger
更加细致的设计思路:(网上有介绍)微服务中不需要Swagger的ui包,只要能生成api的json数据包,供网关抓取就可以。同时网关中也不用自已成生api的json数据包,也可以去掉一些相关的依赖包。有些内部服务可以通过docker的内部网络直接访问,可以单独配置这类内部服务的API文档。至此,用starter实现微服务的swagger配置完成!网关把各个微服务的文档聚合起来,通过网关统一访问。从网关配置中过滤出Swagger的API文档配置信息。需要使用swagger的服务注入。
2023-04-22 09:56:49 1835 2
原创 用spring-boot-starter实现事务的统一配置
微服务架构下,多个微服务都需要事务操作,如果在每个微服务下都从头配置事务,将非常繁锁。事务配置具有高度的一致性,可以抽取出来,制作starter,在需要配置事务的服务中引入starter依赖即可。采用springAOP的方式实现事务。
2023-04-18 09:24:04 851
原创 用starter实现Oauth2中资源服务的统一配置
Oauth2中的资源服务Resource需要验证令牌,就要配置令牌的解码器JwtDecoder,认证服务器的公钥等等。如果有多个资源服务Resource,就要重复配置,比较繁锁。把公共的配置信息抽取出来,制成starter,可以极大地简化操作。
2023-04-16 08:44:53 834
原创 Ubuntu用户权限、查看文件路径、防火墙
如果系统中安装了某个服务的多个版本,只有一个是默认的;如:系统中安装了多个jdk:jdk8、jdk11,其中jdk8是默认的,运行时就是jdk8,而不是jdk11,这个jdk8就是默认服务。Ubuntu使用的防火墙名为UFW(Uncomplicated Fire Wall),是一个iptable的管理工具。:如果要查服务的安装路径,需要先查到运行路径,再根据软链接的指向,依次去查看安装路径。的运行路径,也不是安装路径。开启防火墙的状态下,只有系统允许的端口才能被其他主机访问。的运行路径,并不是安装路径;
2023-04-14 09:42:45 3105
原创 Ubuntu中安装OpenJdk、Docker、ssh
测试是否成功,输入sudo docker run hello-world 显示以下信息则成功,第一次比较慢。更换版本的意思是当系统中安装有多个jdk时,在这几个jdk中如何切换,如何选择。
2023-04-13 09:00:57 1203
原创 双硬盘安装Ubuntu22
文件,写入U盘,制作系统启动盘。(注:最好是一个空U盘,要不然会被格式化)因为是U盘的UEFI启动,因此需要设置EFI引导。绿色免安装,下载后点exe运行即可(windwos环境下)swap交换空间,也就是虚拟内存的地方;bios版本不同,方式也不同;进入安装界面后,按提示选择配置项。swap虚拟内存区(固态盘中)设置EFI引导区(固态盘中)1、固态盘128G安装系统。用于:Ext4日志文件系统。用于:Ext4日志文件系统。按照如图设置后,软件会把。用于:fat32文件系统。较新的机子选:GPT。
2023-04-12 10:10:25 1769
原创 SSE(Server-sent Events)实现Web消息推送(SpringBoot)
短轮询长轮询iframe流SSEMQTTwebsocketSSE(Server Sent Event),直译为服务器发送事件,顾名思义,也就是客户端可以获取到服务器发送的事件。我们常见的 http 交互方式是客户端发起请求,服务端响应,然后一次请求完毕;但是在 sse 的场景下,客户端发起请求,连接一直保持,服务端有数据就可以返回数据给客户端,这个返回可以是多次间隔的方式。
2023-01-28 10:22:07 2820 1
原创 SpringBoot下RabbitMQ的实战应用:动态创建和动态监控队列、死信、备份交换机
每个用户对应一个普通队列;当用户过多时,相应的队列也会很多,并且队列是持久化的,会占用较多的系统资源;交换机收到消息,但无法投递时,转发至备份交换机,再广播至对应队列。缓存操作不是本文的重点,用模型类代替;缓存中未得到确认的消息,由定时器重新发送;用户登录后,动态切换要监控的队列;未发送成功的消息,由缓存保存,定时重发。如果用户退出后,也要更新监控列表;是接收不到的,消息会存储在相应对列中。发消息,消息应该不会被消费,存在。项目要足够稳健,消息不能丢失。交换机、队列、消息持久化。,这时再向上一个登录用户。
2023-01-07 18:17:54 4103 7
原创 Redis新版工具类
* 方法命名更加简洁,调用更简单; * 针对不同的操作对象,把方法封装在不同的内部类中; *1、RKey 类用于操作 key;使用:...rkey.del()2、RString 类用于操作 string;使用:...rstring.add()3、RMap 类用于操作 map;使用:...rmap.put()4、RSet 类用于操作 set;使用:...rset.size()5、RList 类用于操作 list;使用:...rlist.get()
2022-09-19 22:06:37 410
原创 【六】ElasticSearch8.x Java API 实体类、工具类、测试类及常见问题
ES `8.x` 新版本中,Type 概念被弃用,所以新版 JavaAPI 也相应做出了改变,使用更加简便。ES 官方从 `7.15` 起开始建议使用新的 JavaAPI
2022-09-17 18:23:06 5623 1
原创 【五】ElasticSearch 索引模板及文档评分机制
索引模板就是提前定义好的索引规则。创建索引的时候,可以应用模板。如果批量创建建索引,使用比较方便。
2022-09-15 09:40:16 611
原创 【四】ElasticSearch 文档操作:增删改、高级搜索、聚合搜索,倒排索引
ES 是面向文档操作的。文档相当于数据库中的单行数据。命令行中加上_doc(除查询所有文档命令)
2022-09-15 09:33:46 593
原创 【三】ElasticSearch 索引操作
Rest 是,而不是标准,只是提供了一组设计原则和约束条件。它主要用于 客户端 和 服务器 交互类的软件。基于这个风格设计的软件可以,,等机制。
2022-09-15 09:21:25 477
原创 【二】ElasticSearch核心概念 与 IK 分词器
中文分词器分词:即把一段中文或者别的划分成一个个的关键字,在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一一个匹配操作,默认的中文分词是将每个字看成一个词(不使用IK分词器的情况下)。IK提供了两个分词算法ik_smart: 最少切分: 最细粒度切分在 IK 插件的config目录下新建自已的词典tuwer.dic注入配置文件中重启ES测试。
2022-09-15 09:13:45 314
原创 【一】win10 下 ElasticSearch8.1.0、Head插件、Kibana下载与安装(图文详解)
Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。
2022-09-15 09:00:29 2422
原创 两个坑:Integer对象比较,MySql中in()、not in()为空
早就在阿里规约里了解过,但真在项目中遇到时,排查花了很长时间。真是一个大坑。所有整型包装类对象之间值的比较,全部使用equals()方法。
2022-09-07 20:06:53 871
原创 SpringCloud 下 MultipartFile 序列化(JSON)出错的解决方案
在SpringCloud架构下,用户向客户端上传文件,客户端调用文件处理微服务去处理文件。
2022-08-30 13:36:55 9094 1
原创 Bootstrap5 + js 上传文件操作流程 Model-Toasts综合运用
1、点击添加图片:弹出模态框(上传图片界面)2、选择图片文件:会在前后端验证文件类型3、点击上传按钮:关闭模态框、ajax执行上传操作、接收操作结果4、弹出Toast信息栏:展示操作结果...
2022-07-07 10:53:15 1901 1
原创 一套方便实用的分页设计方案 Bootstrap5 + Thymeleaf
- 可以方便地进入 第一页、最后页- 可以方便地进入 当前活动页 的 前两页、后两页- 可以根据 总页数 及 当前活动页 自动地排版页码
2022-07-04 17:18:58 1396 1
Java集合知识体系.zip
2021-11-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人