java
文章平均质量分 93
游戈程序员
阅读-思考-书写
展开
-
lombok.xxx.callSuper不生效问题
建议 Lombok 版本至少升到 1.18.6。原创 2022-07-19 19:13:29 · 768 阅读 · 0 评论 -
部分 MP4 视频在谷歌浏览器无法播放
部分 MP4 视频在谷歌浏览器无法播放本质上,html 是使用 <video>标签播放视频的,大部分的浏览器我相信都是支持的。但是今天遇到一个问题,在 APP 端拍摄了两段视频,一段可以播放,一段播放失败。排除了服务器、文件存储服务器的问题,怀疑过是前端代码写错了,怀疑是网速限制,视频被截断了。没想到最后究其原因居然是因为 mp4 的视频码流格式问题,谷歌浏览器不支持。mp4 都是 mp4, 然而这只是为了操作系统去识别哪些应用可以播放。实际内容需要看视频流的格式或者说编码,但是视频流原创 2021-12-10 19:15:29 · 10469 阅读 · 1 评论 -
排查与解决`java.io.EOFException: \n not found: limit=0 content=…
排查与解决java.io.EOFException: \n not found: limit=0 content=…问题起因是项目向华为云 OBS 请求视频, 偶现题目中的异常;如果等一段时间(30s),就可以正常读取到视频。原因是 OBS SDK 底层用的 Okhttp 连接池,而 Okhttp 的 GitHub 上也有相关 issue:服务器在返回数据后就直接关闭 TCP 连接,而客户端(项目应用)却将连接放入连接池重复使用;当下次请求复用时,连接已经被关闭,就读取不到返回值,报上述异常。原创 2021-12-09 15:45:36 · 14014 阅读 · 3 评论 -
多线程编程之CyclicBarrier 源码分析
CyclicBarrier 源码分析之怎么卷死 CountDownLatchCyclicBarrier 是什么?CyclicBarrier 一般称为栅栏、屏障,是一种多线程同步工具。常常和 CountDownLatch一起作比较,因为都属于用于一组线程等待的工具。不同于 CountDownLatch常用于协调线程等待一组工作线程,且工作线程到达后做一次通知并继续执行,CyclicBarrier 人如其名的是一组线程相互等待全部到达指定处后,再全部继续执行。CyclicBarrier更高级的是:原创 2021-06-22 15:21:28 · 125 阅读 · 0 评论 -
多线程编程之 CountDownLatch
CountDownLatch 是什么?CountDownLatch 一般称为闭锁、计数器,是一种多线程同步工具,属于 AQS 体系的一员。常用于让协调线程等待一组工作线程全部“完成工作“或“满足特定条件"后继续进行下去。但其实也可以和 CyclicBarrier让一组线程全部到达指定点后才继续执行,不过不如 CyclicBarrier简单且不可重用,所以一般一组线程自等待的场景我们倾向于直接使用 CyclicBarrier。CountDownLatch 怎么用?老板有个保险箱,为了保证安全,指定原创 2021-06-22 15:20:57 · 849 阅读 · 0 评论 -
AQS Condition源码深度解析
简介在上一篇《AQS》ConditionQueue 介绍中提到了 ConditionQueue 是借助 AQS 的 SyncQueue 结构来实现条件变量及等待的功能。ConditionQueue 是 AQS 中相对特殊、复杂的队列。相比较 SyncQueue 只把资源争抢、线程通信全部在 AQS 中处理,那ConditionQueue 就是为了对标 Object#wait、notify、notifyAll 而设计的数据结构,就是为了让开发人员可以手操线程同行。队列结构ConditionQueue原创 2021-04-16 17:41:06 · 241 阅读 · 0 评论 -
把 ThreadLocal 拆开揉碎了看看
前言1.为什么用 ThreadLocal?所谓并发,就是有限资源需要应对远超资源的访问。解决问题的方法,要么增加资源应对访问;要么增加资源的利用率。所以,相信这年头做开发的多多少少,都会那么几个“线程二三招”、“用锁五六式”。那所带来的就是多线程访问下的并发安全问题。共享变量的访问域跨越了原始的单线程,进入了千家万户的线程眼里。谁都可以用,谁都可以改,那不就打起来了吗?因此,防止并发问题的最好办法,就是不要多线程访问(这科技水平倒退二十年~)。ThreadLocal 顾名思义,将一个变量限制为“原创 2021-02-20 14:49:07 · 92 阅读 · 0 评论 -
构建 openjdk11源码阅读环境
文章目录1.创建新项目2.找到对应 JDK 的源码压缩包3.解压 src.zip 到项目目录下4.如何调试时,查看自己注释的代码,或同时进行注释5.调试6.其他问题6.1 编译 OOM6.2 创建的项目使用了 版本管理工具,调试时运行失败6.3 jdk源码写过注释后debug提示source code does not match the bytecode6.4 上传到 github前言:jdk版本:openjdk 11编辑器:idea 2019.1.2电脑:Mac OS1.创建新项目用 i原创 2021-01-20 16:15:48 · 1157 阅读 · 0 评论 -
PMD 定制化忽略某些类、方法或字段
PMD 定制化忽略某些类、方法或字段某些情况下,希望单独忽略 PMD的校验,但是由于该场景下可能包含很多类、字段或者方法。如果直接在压制告警的地方使用@SuppressWarnings,那写的太多。如果在上级写,一是容易误伤,二是某些场景没有上级。希望可以在一个统一的地方,进行定制化的配置。pmd-rule.xml在根目录下的pmd-rule.xml对规则进行配置。下面示例中,希望忽...原创 2020-05-08 15:33:05 · 1388 阅读 · 0 评论 -
Java IO总结
IO总结比特/字节/字符 比特(bit) =(经过分组编码)=> 字节(Byte) =(经过字符集编码)=> 字符 1.比特(Bit):最小的二进制单位 ,是计算机的操作部分。取值0或者1 2.字节(Byte):是计算机操作数据的最小单位由8位bit组成 取值(-128-127) 3.字符(Char):是用户的可读写的最小单位,在Java里面由16位bit组成 取值(...原创 2020-04-19 13:36:21 · 145 阅读 · 0 评论 -
stream的使用
stream的使用概述 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation) 集合专注的是数据,流专注的是算法和计算(Stream不是集合元素、不是数据结构、不保存数据) Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。 提供串行和...原创 2020-04-19 13:35:15 · 287 阅读 · 0 评论 -
Spring 获取resources下的文件
//路径不用/开头,即使开头,实际在ClassPathResource中也会被处理掉String styleFile = "templates/style.css";ClassPathResource cpr = new ClassPathResource(styleFile);String style = FileUtils.readFileToString(cpr.getFile(),...原创 2020-04-18 21:55:16 · 1375 阅读 · 0 评论 -
zookeeper实现的简单选主
用户服务package com.demo.local.zookeeper;import lombok.Data;import java.io.Serializable;/** * @author ryan * @since 2019/08/21 **/@Datapublic class UserCenter implements Serializable { pr...原创 2020-04-18 21:52:23 · 366 阅读 · 0 评论 -
as-if-serial
重排的异常多线程的重排执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件:在单线程环境下不能改变程序运行的结果;存在数据依赖关系的不允许重排序as-if-serial所有的操作均可以为了优化而被重排序,但是你必须要保证重排序后执行的结果不能被改变,编译器、runtime、处理器都必须遵守as-if...原创 2020-04-18 21:48:22 · 665 阅读 · 0 评论 -
会用 jps 吗?
功能显示当前系统的java进程情况,及其id号,但仅限于当前用户.查找所有java应用程序,包括即使没有使用java执行体.原理java程序在启动以后,会在java.io.tmpdir指定的目录下,就是临时文件夹里,生成一个类似于hsperfdata_User的文件夹,这个文件夹里(在Linux中为/tmp/hsperfdata_{userName}/),有几个文件,名字就是java进程的...原创 2020-04-18 21:45:19 · 91 阅读 · 0 评论 -
Java 到底偷偷做了什么之自动拆装箱
1.作用2.概念定义4.何时何地会自动拆装箱5.可能带来的问题1.作用是一种java提供的语法糖,实际简化了基本数据类型与对应的对象包装类之间的转化.本身简化了基本数据类型在对象使用时的代码.通过自动拆装箱实现了泛型对基本数据类型的兼容.实际自动拆装箱的实现,有效提高了效率,减少了对象的创建.(对象缓存)2.概念定义首先得明白什么是拆装箱.装箱:指将基本类型转化为对应的包装类...原创 2020-04-18 21:36:10 · 157 阅读 · 0 评论 -
全链路追踪必备组件之 TransmittableThreadLocal 详解
ThreadLocal 线程传递 & TransmittableThreadLocal 源码解析文章目录ThreadLocal 线程传递 & TransmittableThreadLocal 源码解析InheritableThreadLocal缺点RunnableWrapper/ CallableWrapperDelegaingExecutorTransmittableThrea...原创 2020-04-18 20:53:40 · 944 阅读 · 0 评论