JAVA
文章平均质量分 65
JeenoD
talk is cheap, show me the code.
展开
-
JAVA 序列化和反序列化
JAVA 序列化和反序列化1. 实现方式及侧重点 JAVA提供了两种接口实现方式,先看下相关接口结构图其中,1)实现Serializable接口的java类,默认会为内部所有字段(除去transient修饰属性和静态属性)实现序列化和反序列化处理逻辑,适用于序列化属性较多的情形,对于少量的需排除属性,可以使用transient修饰。2)实现Externalizable接口的java类,需要显式实现writeExternal和readExternal方法,且序列化和反序列化的属性顺序需要一致,适原创 2021-06-18 13:28:04 · 237 阅读 · 1 评论 -
OpenJDK8 TransferQueue内容
TransferQueue接口与常规的Queue实现不太一样,因此我把它单独拎出来做介绍。1. 类结构图图中的类/接口主要来自两个包。java.util包Queue接口AbstractQueue抽象类java.util.concurrent包(juc)BlockingQueue 阻塞队列接口TransferQueue 接口LinkedTransferQueueSynchronousQueue其中,Queue、AbstractQueue、BlockingQueue在前文都有所提原创 2021-04-28 23:40:50 · 270 阅读 · 4 评论 -
OpenJDK8 Queue和Deque
今天学习了一下队列相关内容,奈何内容比较多,一晚没有整理完,所以暂时先放一部分1. 整体类图(不全)从图上可以看到,内容主要可以分成2个部分,分别为Queue队列、Deque双端队列,其中Deque还提供了Stack栈的功能。2. Queue相关2.1 Queue接口提供了队列的通用操作方法声明。可以看做一个排队队伍,新来的人要排在队尾(新增/offer),按次序叫号,最先叫的都是队首(获取/poll)。/** * 队列接口 * 提供了两套操作队列方法: * 1)抛异常, add/rem原创 2021-04-21 00:58:58 · 218 阅读 · 0 评论 -
OpenJDK8 List接口相关
今天,主要看了下List接口及其实现类,整体的类结构图如下。主要的几个实现类为ArrayList, LinkedList, Vector,下面分别进行介绍。1. ArrayList1.1 数据结构数组1.2 扩容机制先扩容再插值当添加元素时,执行ensureCapacity(int minCapacity)方法执行扩容逻辑,具体源码如下: /** * 在列表末尾追加元素 */ public boolean add(E e) { // 执行扩容原创 2021-04-14 00:51:48 · 158 阅读 · 0 评论 -
OpenJDK8 Set相关内容
老规矩,先上整体的类结构图主要的三个类:HashSet, LinkedHashSet, TreeSet。其底层分别由三个对应的map实现:HashMap, LinkedHashMap, TreeMap。所以Set就是值为PRESENT常量的Map。其实,前文的EnumSet本应放在该文,它也是继承的AbstractSet抽象类,但为了勉强凑够Enum部分内容,想想还是不挪了把。1. HashSet底层由HashMap实现,其主要方法已经在AbstractSet、AbstractCollection原创 2021-04-12 23:24:26 · 111 阅读 · 0 评论 -
OpenJDK8 Map相关内容
还记得之前有过源码学习记录,这次重新回顾,还是有一些新的收获。今天的内容暂不包含JUC包下的Map类型,先上整体的类结构图。所有的类型实现Map接口,最最常见的是Hashtable和HashMap。其中,Hashtable线程安全(从1.0版本就有),而HashMap非线程安全(1.2版本),下文主要以两者的区分进行源码分析。1. Hashtable1.1 数据结构数组+链表1.2 初始化默认容量大小11默认负载因子0.751.3 扩容时机当put新元素时,先扩容再插入 priva原创 2021-04-08 22:32:59 · 129 阅读 · 0 评论 -
OpenJDK8 Enum相关
Enum枚举相关类Enum枚举类/** * 枚举常量名 */private final String name;/** * 返回枚举常量的名字 */public final String name() /** * 枚举常量的索引,从0开始 */private final int ordinal;/** * 返回枚举常量的索引位置,从0开始 */public final int ordinal() /** * 枚举类型专有构造器,由编译器触发,无法显示触发 */原创 2021-04-08 00:14:08 · 120 阅读 · 1 评论 -
OpenJDK8 StringBuilder和StringBuffer
类层次关系StringBuilder和StringBuffer都继承了AbstractStringBuilder抽象类,区别在于StringBuffer对相关操作都做了synchronized加锁处理,以确保多线程环境下的线程安全;而StringBuilder更适合于单线程环境,执行速度更快。StringBuffer/** * 字符串缓存,缓存最后一次调用toString()的值,对象修改时会自动清空缓存 */private transient char[] toStringCache;/原创 2021-04-07 00:25:44 · 165 阅读 · 0 评论 -
OpenJDK8 String类
String 字符串类型String是不可变对象,创建后值(引用地址)不可变;StringBuffer、StringBuilder 支持可变字符串提供了系列方法:单字符提取、字符串比较、字符串查询、字串提取、大小写字符串拷贝等public final class Stringimplements java.io.Serializable, Comparable, CharSequence {// 实际的字符存储,每个是一个char类型(Java中单个char为2字符)private final原创 2021-04-03 00:20:23 · 188 阅读 · 0 评论 -
OpenJDK8 Object类
JAVA Object类Object类是JAVA中所有对象的基类。/** * 返回运行时类 */public final native Class<?> getClass();/** * 返回对象hash值 * <1> 不改变对象属性的前提下。 * 程序的一次执行,同一对象先后获取的hashcode必须一致; * 而另一次执行时,可以与当前执行时对象的hashcode值不一致 * <2> equals方法返回true,则两个对象原创 2021-04-01 23:23:32 · 142 阅读 · 0 评论 -
【踩坑记录】springboot 报错 MissingPathVariableException
1. 背景有个接口,前端传的是id,后台由于用了Springdata,会自动根据id去TeacherDO实体对应的Repository(实际调的是SimpleJpaRepository)中调用findById方法,并将查询到的数据库结果转成TeacherDO,并作为接口的传入参数。中间过程都是由SpringData 代办。TeacherDO 实体部分字段内容正常情况效果图2. 问题描述之前使用该功能都没有问题,直到昨晚使用该功能时,传入了一个DB中不存在的id,这时候出了问题。2.1 问题原创 2021-01-13 11:28:09 · 8891 阅读 · 0 评论 -
nginx 处理后台http的重定向问题
项目背景项目接入了统一认证登录,同时注册了回调地址https://localhost/test(这里用了假的路径,只用作描述问题)。中间省去了nginx反向代理,整个登录流程:(1)点击登录,跳转到统一认证登录页面https(2)输入手机号及验证码,完成登录(3)统一认证平台回调地址(https://localhost/test?token=xx),服务后台根据token完成用户登录,之后...原创 2020-01-10 16:32:21 · 2298 阅读 · 0 评论 -
【使用技巧】实现便携、有选择地记录用户操作日志
背景平台后台接口已经完成,需求方提出了新的需求(需要针对某些具体业务,记录用户操作日志入库)。方案选择1. 通过为 每个/个别类似接口 编写一个AOP处理。 优点: 每个业务接口处理可以针对性处理,扩展灵活; 缺点: 需要编写很多AOP类,工作量略大2. 团队里技术人员的推荐。用aop+自定义注解的方式来灵活,通过判断自定义注解中是否有设置属性来区分是否要执行处理逻辑。...原创 2019-10-30 00:00:34 · 322 阅读 · 0 评论 -
【踩坑记录】docker服务器部署导致无法从es拉取数据
问题描述开发过程中,为了方便前端跟测试人员的工作进行,也为了保证各自数据的一致,最好使用同一套后台代码,所以采取了后台代码部署到服务器方案,避免因本地开发环境的频繁调试关闭阻塞他们的工作进展。同时,我想作为一个后台开发,应该都经历过手工打jar包,然后上传到服务器,再敲命令运行一系列繁琐且重复性很高的工作。可选的类似方案有一些:像是jenkins自动部署,docker推送,…。本次问题就出现在...原创 2019-09-10 09:50:07 · 619 阅读 · 0 评论 -
【问题记录】tomcat设置开机自启动事务不生效
一开始直接指定了操作运行文件为tomcat的startup.bat,看计划运行记录中也显示机器启动时有过运行,但进程中就是没找到。解决:自己手写了一个bat脚本文件,里面写上了执行命令start /d “你的Tomcat的bin目录” startup.bat再次重启tomcat正常启动...原创 2019-08-10 10:32:39 · 343 阅读 · 0 评论 -
【问题记录】RestTemplate 请求中添加headers项Host不生效
由于目前的项目中有如下场景:RestTemplate 发送Get请求到一ip,并要求请求头中带上跳转的Host,几经测试,未能走通,一直报的是403错误;而直接通过Postman 发送是没问题的。 RestTemplate template = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); ...原创 2019-07-29 11:32:28 · 3733 阅读 · 2 评论