- 博客(137)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 JVM 学习前言摘抄
被真相蒙蔽,是一件痛苦的事情。我们在一个被层层封装的世界里进行开发和设计,操作系统、各种中间件与框架,将底层世界隐藏地结结实实。我们一方面享受着高级编程语言所带来的高效、稳定、快速的开发体验,然而另一方面,却又如同行走于黑暗之中。我们不知道路的下面是否有坑,即使知道有坑,可能也不知道如何排除。Java 的很多概念和技术,很多时候由于我们对于底层机制的不了解,而让我们感到十分高深莫测,无法窥其全貌。这种感觉十分痛苦,尤其是技术修炼到一定阶段的时候,纸上得来终觉浅,绝知此事要躬行。即使从 Java 语言层面
2020-12-21 11:53:40
202
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 收集的一些学习网站
收集的一些学习网站搜索网站:https://magi.com/java 全栈知识体系:https://www.pdai.tech/bbsmax:https://www.bbsmax.com/编程空间:https://segmentfault.com/blog/lantkotlin 中文网站:https://www.kotlincn.net/IBM developer:ht...
2019-08-25 09:55:23
1738
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Spring 使用 feign时设置header信息
目录问题描述:解决方案: 1. 使用Headers注解。直接在请求上或者在类上添加2. 通过实现RequestInterceptor接口,完成对所有的Feign请求,设置Header问题描述:最近使用 SpringBoot 项目,把一些 http 请求转为 使用 feign方式。但是遇到一个问题:个别请求是要设置header的。于是,查看官方文档和博客,大致推荐两种方式...
2019-06-27 13:47:16
7267
4
原创 “全双工“是什么
全双工是通讯传输的一个术语。通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工指可以同时(瞬时)进行信号的双向传输(A→B且B→A)。指A→B的同时B→A,是瞬时同步的。Channel 是全双工的。在 UNIX 网络编程模型中,底层操作系统的通道都是全双工的,同时支持读写操作。单工的话,一个时间点只能A->B 或者 B->A。现在打电话就是全双工的,多方可以同时喊话聊天。“全双工”这个词语,我第一次看到的时候,感觉不明觉厉;我是在"NIO"这里接触到的“全双工”
2024-04-05 19:10:38
265
原创 使用ArrayList sort 导致的并发问题
近期调整一个作业流程,内容大致如下:在主流程获取依赖数据结束之后,将依赖数据做一个备份,另起一个线程,和主流程做类似的后续流程。如果依赖的数据没有做深拷贝,这个过程中不可避免会遇到多线程问题。依赖的数据中有一些基础数据是List 的形式,基础数据的基准原理就是不改动,加上基础数据量大,考虑性能问题没有进行深拷贝。此时,在大量请求进来时,发现出现零星的报错:ConcurrentModificationException。
2024-04-05 19:00:57
416
原创 Spring Boot 回顾
Spring Boot 的发展是很快的,也使用了很多年。但是在工作中,还是发现了很多公司还没有怎么使用 Spring Boot,依旧是在使用 Spring MVC。于是决定复习总结一下。框架的进步和飞跃很重要,但是也不能一味追求新鲜事物,历史的很多东西都是要持续维护的。
2023-06-11 23:30:40
602
原创 序列化进阶2-常见序列化框架
上一篇 序列化进阶1-Java序列化注意事项。Java 序列化还可以实现 深克隆哦。在 Java 中存在一个 Cloneable 接口,通过实现这个接口的类都会具备clone 的能力,同时 clone 是在内存中进行,在性能方面会比我们直接通过 new 生成对象要高一些,特别是一些大的对象的生成,性能提升相对比较明显。深克隆和浅克隆在这就不谈了。Java 序列化实现深克隆的原理是把对象序列化输出到一个流中,然后再把对象从序列化流中读取出来,这个对象就不是原来的对象了。序列化框架开源工具优势劣势JavaJAV
2022-06-29 09:30:01
388
原创 序列化进阶1-Java序列化注意事项
上一篇小作文,我们介绍了什么是序列化 认识序列化。下面我们谈一谈,Java 序列化的注意事项。静态变量不能被序列化。序列化保存的是对象状态,静态变量保存的是类状态,因此序列化并不保存静态变量。transient 关键字的作用是阻止变量的序列化,变量声明时加上该关键字,变量将不再是对象持久化的一部分,该变量内容在序列化后无法被访问,即反序列化后,transient变量的值被设为初始值,如 int 类型的是 0,对象类型的是 nulltransient关键字只能修饰变量,而不能修饰方法和类。本地变量是不能被tr
2022-06-16 09:27:54
365
原创 认识序列化
什么是序列化?我理解的序列化就是将数据按照某种规则转换一种方式存储,实现对数据的压缩和跨平台使用。应用到 Java 对象序列化就可以理解为:对象脱离JVM 的限制进行持久化传输和使用。Java 平台允许我们在内存中创建可复用的 Java 对象,但一般情况下,只有当 JVM 处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比 JVM 生命周期更长。但在现实应用中,就可能要求在 JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java 对象序列化就能够帮助我们实现该功能简
2022-06-13 22:54:25
212
原创 分布式系统中的CAP理论
CAP理论指的是一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。先说结论:一般是 CP、AP 两种情况。P 可以算是分布式的基础。当然也可以选择 CA,即不允许分区。分析:通过一个案例来分析一下现在网络中某个服务两个节点S1和S2,他们之间网络可以连通,S1中有一个应用程序APP1,和一个数据库DB1,S2也有一个应用程序APP2和一个数据库DB2。现在,APP1和APP2是分
2022-05-22 15:41:25
1375
1
原创 Jar 版本规范
注意:此处只针对 release 版本。版本正常情况下只升不降快照版本可以拥有更多的选择。 比如同时多个需求并行开发,会出现1.1.x-SNAPSHAOT,1.2.x-SNAPSHAOT,1.3.x-SNAPSHAOT 甚至2.0.x-SNAPSHAOT等版本1.版本标注【主版本】.【次版本】.【增量版本】参考:1.1.0说明:主版本(X): 有重大架构变更,做了不兼容API修改,不能完全向下兼容;次版本(Y): 功能性新增,向下兼容;修正版本(Z):细小变动、BUG修复,向下兼容。2.
2022-05-16 21:05:30
1325
原创 Java8 Stream分组并排序
@Data@AllArgsConstructor@NoArgsConstructorpublic class Customer { private String name; private TypeEnum type; private int age;}@Getterpublic enum TypeEnum { /** * 第一 */ First("甲类", 2), Second("乙类", 12), Three(
2022-05-12 09:40:26
9295
原创 lombok使用注意,不要写重载属性get\set方法
背景最近在写UT测试的过程中,有些接口的响应内容比较多。不想也不应该手动去敲代码拼接响应内容。于是对响应内容做反序列化,转成直接使用的对象。到这一步还没有问题,关键是下一步,我要将响应内容在项目中业务中转对象的序列化内容转成 业务中转对象。业务中转对象使用了 lombok @Data 注解。问题反序列化的时候出现问题,报错如下:Cannot deserialize instance of java.util.ArrayList<java.lang.Object> out of VALUE_STRIN
2022-05-10 21:23:21
1067
原创 Jackson Calendar日期类反序列化问题
背景:开发过程中,需要写测试用例。测试用例需要用到 某些接口的响应内容。本次呢,是有个接口的响应体里定义了很多 Calendar 类型的字段。Jackson 序列化的时候,Calendar 类型默认输出样式为 “yyyy-MM-dd HH:mm:ss.SSS”。反序列化的时候就会报错。报错内容类似如下:com.ctrip.soa.caravan.common.serializer.SerializationException: com.fasterxml.jackson.databind.exc.In
2022-05-10 21:09:43
549
原创 SOA架构-微服务架构
SOA全称(Service Oriented Architecture)—— 面向服务的架构。面向服务架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过在这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。跟 SOA 相提并论的还有一个 ESB(企业服务总线),简单来说 ESB 就是一根管道,用来连接各个服务节点。为了集成不同系
2022-05-05 21:21:12
2063
2
原创 设计模式-Spring中常用的设计模式
设计模式是一种思想,是一种更快更好更优雅的解决问题的一种思想。这种思想在很多优秀的框架中都有落地。比如 Spring 框架。设计模式名称举例工厂模式BeanFactory装饰器模式BeanWrapper代理模式AopProxy委派模式Dispatchservlet策略模式HandlerMapping适配器模式HandlerAdapter模板模式JdbcTemplate观察者模式ContextLoaderListener设计
2022-04-27 09:54:27
376
原创 MapStruct 使用注意
MapStruct 应该很多人都使用过,或者正在使用。不得不说,作为一个Java Bean 转换的工具,他表现的很出色:1. 功能强大 2. 编译时插件,不会导致代码运行时额外的耗时开销 3.很容易上手。但是呢,如果使用的过程中不注意细节也是经常会出现问题的。记录一下今天使用的过程中遇到的一个由细节导致的问题。(千里之堤毁于蚁穴……)场景:项目内部有两个类 A、B如下:public Class A { private B b; private String name; ……}publi
2022-04-25 21:33:29
453
原创 Springboot controller 响应内容格式调整
背景最近在做 流量回放对比的过程中,soa 使用的 protobuf 协议响应内容去除了 值为空的属性节点(减小报文大小),controller 接口的响应内容中还是会有值为空的属性节点,导致流量回放对比的脚本需要判断哪些属性节点值为空没有问题,确定是否可以排除。增加了一些 额外的工作量,所以想了想,将 controller 接口的响应内容做一下调整,去除 值为空的属性节点。代码如下@Configurationpublic class XxxConfig { @Bean @Pri
2022-03-29 09:04:24
366
原创 maven jar 冲突解决方案
maven jar 冲突解决方案mvn dependency:tree 查看依赖树mvn dependency:tree -Dverbose -Dincludes=【groupId】:【artifactId】如: mvn dependency:tree -Dverbose -Dincludes=com.alibaba:fastjsonidea 自带maven dependency分析功能下载 idea 插件:maven helper基本上,通过 2、3 就能解决问题了。更多
2021-12-08 19:29:15
305
翻译 Redis使用建议
一、 键值设计key 名称设计(1) 可读性和可管理性便于查看,统计,排错(2)简洁性,控制key长度在保证语义的前提下,尽量控制key的长度(3)不要包含特殊字符禁止包含特殊字符如空格,换行,单双引号,其他转义字符value 设计(1)不宜过大,越小越好string类型控制在1KB以内,hash/list/set/zset等包含元素个数控制在1000以内credis页面,群集所有者可以通过unlink异步清理或小批量迭代清理(2)一定要设置过期时间,当实例写满,根
2021-11-04 12:21:39
310
原创 设计模式之内功心法-设计原则
学习设计原则,是学习设计模式的基础。但是在实际开发过程中,不要为了设计而设计。需要考虑时间、人力、成本、质量。在适当的场景遵循设计原则,提现出平衡取舍。开闭原则开闭原则(Open-Closed Principle,OCP)是指一个软件实体如类、模块、函数应该对扩展开放,对修改关闭。所谓的开闭,就是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性和可维护性。开闭原则,是面向对象设计中最基础的原则。实现开闭原则的核心思想是面向抽象编程。依赖倒置原则Dep
2021-06-02 23:27:44
347
3
转载 Hashmap链表长度为8时转换成红黑树,你知道为什么是8吗
hashmap当中有一些默认的属性其实是经过反复的推敲才确定的,今天我们说说为什么要等链表长度为8的时候才转换红黑树引言8这个阈值定义在HashMap中,如下所示,这段注释只说明了8是bin(bin就是bucket,即HashMap中hashCode值一样的元素保存的地方)从链表转成树的阈值,但是并没有说明为什么是8: /** * The bin count threshold for using a tree rather than list for a * bin. .
2021-02-03 14:07:58
3434
转载 java 实现Word或Excel 转Pdf
1:首先需要引入相关的jarword转pdf需要引入 aspose-words-15.8.0-jdk16.jar下载JAR包 Wordhttp://note.youdao.com/noteshare?id=1e73ab1c91abad338271d50a881165c2excel转pdf需要引入aspose-cells-8.5.2.jar Excelhttp://note.youdao.com/noteshare?id=f75d87445106ea6ca6b54cfa58bc4fb2...
2020-12-28 10:40:14
814
原创 引入外部jar,项目启动 Class not found
背景:背景简单又弱小,需要接入外部的jar去做一些事情。比如: 钉钉消息发送、外部银行对接等。你会拿到对方提供的 sdk,但是呢你自己又没有 公司maven 私服的上传jar 权限,同时呢,又不好意思或者找不到人来帮你上传 jar 到maven私服。这个时候就想出一个歪点子:将 jar 文件放置到项目中。一般情况下呢,大家可能都是在 项目根目录下创建一个 lib 的文件夹,然后加 jar 放入进去。项目使用框架呢,简单粗暴的 springboot 项目。操作步骤项目根目录下创建目录,放置 ja
2020-12-22 21:15:10
964
1
原创 钉钉发送工作台消息 agentId 不合法
这个错误是笼统的千万不要被这个错误提示 引入歧路。最近调用 发送钉钉工作台消息的时候报错,agentId 不合法。于是我换了好几个 应用,重新配置调用,中间有一段时间是可以的。第二天一早发现又不行啦。我这里呢,是多家公司的发送钉钉工作台消息功能。当时还是很着急的。怎么办呢,提个工单给到 钉钉客户,但是没啥卵用呀,等了许久也没有啥结果。第一反应看到这个报错,我的第一反应就是 查一下 应用情况。看一下应用是否出现以下情况:应用被停用应用被删除应用参数 agentId、appKey、 appSecr
2020-12-22 20:42:09
4863
原创 Field ‘jpaVersion‘ doesn‘t have a default value
实体公共抽象类如下:import org.apache.commons.lang.builder.HashCodeBuilder;import org.apache.commons.lang.builder.ReflectionToStringBuilder;import org.springframework.data.annotation.CreatedDate;import org.springframework.data.annotation.LastModifiedDate;impo
2020-12-22 20:21:05
400
1
原创 Java pdf 生成遇到的字体问题
1. 背景pdf 编辑器使用的是 Adobe Acrobat Pro DC。出现的问题大概如下:字体找不到导致报错的 字体选择不对,导致部分中文不显示 文本属性选择问题导致文本内容很小问题大致记录一下,下面写一下调整细节。2.调整1. 编辑文本域属性,在“外观”栏位,调整字体大小和字体。如下图:2. 编辑文本域属性,在“选项”栏位,调整。去除多行勾选了 “多行”选项时的效果:去除“多行”选项后的效果:...
2020-12-16 16:44:04
1615
原创 Lombok的@Builder注解使用注意
背景:业务运行过程中,发现使用Lombok的@Builder以及@Data 共同标注的类,使用反射的时候报错。找不到无参构造方法。@Data和@Builder 共同使用导致无参构造丢失 单独使用@Data注解,会生成无参数构造方法。 单独使用@Builder注解,生成全属性的构造方法,无无参构造方法。 @Data和@Builder一起用:没有了默认的构造方法。手动添加无参数构造方法或者用@NoArgsConstructor注解会报错 于是看了一下Lombok...
2020-12-15 19:19:53
1247
转载 npm 使用国内淘宝镜像
一.通过命令配置npm config set registry https://registry.npm.taobao.org验证是否成功:npm config get registry返回https://registry.npm.taobao.org,说明镜像配置成功二.通过使用cnpm安装npm install -g cnpm --registry=https://registry.npm.taobao.orgcnpm install xxx...
2020-12-10 16:40:29
225
原创 初识go
1. 查看 go 的环境变量,如 GOPATHcmd 环境下,输入 go envwindows 环境下发现 GOPATH 路径默认为 C:\user{用户名}\go, 修改环境变量中的 GOPATH 之后发现不生效。注意: GOPATH是go语言中跟工作空间相关的环境变量,这个变量指定go语言的工作空间位置。如果修改GOPATH呢,自己创建的 工作目录下必须有pkg、src这两个目录。有这两个目录 GOPATH 修改才能生效。博主把GOPATH 修改成了 D:\code\go2. 下载一个开源项目
2020-11-17 16:02:58
694
原创 Spring boot 项目使用 redisson 延迟队列
背景:有些场景下,需要延迟触发一些任务。比如:延迟几秒钟发送短信或者邮件;某些业务系统回调,需要延时几秒钟后回调。当然,实现延时触发的方式有很多。博主这里采用 redisson 的RDelayedQueue,一是因为接入简单,二是没有分布式的问题。毕竟现在微服务大行其道接下来,进入正题。使用步骤:使用 延迟队列呢,一般就几个步骤:添加消息进入延迟队列 从延迟队列中取出消息消费下面贴一下代码:1.首先定义一个消息的承载实体:import lombok.Data;/*.
2020-11-17 10:31:05
1061
原创 Python学习--Python3简介
1.Python 特点Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。Python 是一种解释型语言:开发过程中没有了编译这个环节。Python 是交互式语言: 可以在一个 Python 提示符 >>> 后直接执行代码。Python 是面向对象语言: 支持面向对象的风格或代码封装在对象的编程技术。Python 是初学者的语
2020-10-25 14:52:13
658
原创 Python学习--windows下安装使用
目前正在学习使用 python做一些简单的事情,下面从头开始记录一下。本篇记录 windows 下安装使用 python环境。1. 官网下载安装包windows 安装包下载笔者选择了 Python3.9.0.下载可执行文件( executable installer)就可以啦。x86 表示是 32 位机子的,x86-64 表示 64 位机子的。2. 安装完成后查看安装完成后,可以找到 IDLE 这个东东,也可以直接使用 cmd 简单操作了解一下。打开后是这样的:可以简单操作一下啦。
2020-10-24 17:52:09
375
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人