Tag:java
All the articles with the tag "java".
mvnw添加代理
Posted on:November 14, 2023 at 12:49 PM## 背景 mvnw 编译flink,需要使用国内源,否则非常慢 ## 描述 ``` ## 指定setting ./mvnw -Drat.skip=true -DskipTests=tru
java classloader相关内容
Posted on:November 9, 2023 at 07:49 PM## 背景 学习java的类加载内容,了解java类加载是加载什么内容? 是加载`*.class`文件,还是加载`*.java`.或者其实文件格式不重要,`class`和`java`都可以 ##
jsr310
Posted on:October 30, 2023 at 09:53 AM## jsr310 描述的是时间的类 ### date 描述的是时间戳,也就是在任何一个地方都是这个时间 ### timezonedatetime 描述的是时区对应的时间,这个主要是描述的
simpleDatetimeformatter vs datetimeformatter
Posted on:October 20, 2023 at 04:30 PMSimpleDatetimeFormat 线程不安全是因为这个format持有一个对象,这个对象会被多个线程修改 DateTimeFormatter 线程安全是因为是一个immutable , 不变
java mybatis-plus date handler
Posted on:October 18, 2023 at 09:52 PM## 背景 堆栈: ``` setNonNullParameter:33, DateTypeHandler (org.apache.ibatis.type) setNonNullParameter
java oom hprof文件生成时机
Posted on:September 22, 2023 at 01:18 PM## 背景 1 有次排查oom问题,发现没有对应的目录,oom后会不生成hprof的dump文件 2 oom后被try catch 后依然可以生成dump的prof文件,所以不是在退出生成hpro
java 业务oom排查
Posted on:September 21, 2023 at 05:34 PM## 背景 - jdk版本:jdk11 之前会请求一个php的内部商品接口服务,现在切换成java的商品接口服务,但是java的代码很多边界有问题,导致oom ### 现象 cpu 飙升100
elastic search 编译和调试
Posted on:September 10, 2023 at 10:59 PM## 背景 熟悉elastic search ## ### 构建 ``` ./gradlew localDistro ``` - 第一步: 关闭安全相关检查,我本地是http,不需要htt
java branch bytecode
Posted on:September 6, 2023 at 10:20 PM## 背景 了解各种分支跳转 ## 注释 ``` (gdb) x/30i 0x7fffe10176ab 0x7fffe10176ab: mov -0x18(%rbp),%rc
java jdk 为什么一个线程空指针不退出
Posted on:September 6, 2023 at 08:03 PM## 背景 了解jdk异常的捕获原理 ## 堆栈 ``` (gdb) bt #0 PosixSignals::pd_hotspot_signal_handler (sig=sig@entry=11
java unbox
Posted on:August 25, 2023 at 03:46 PM## 背景 想比较两个数字的时候:`Long`的equal比较的值,而不是对象的地址 ``` public boolean equals(Object obj) { if (
java main
Posted on:August 24, 2023 at 01:39 PM## main 函数介绍 java的main函数在入口函数 一般都是这个签名 ``` public static void main(String[] argv){ } ``` 那么这个mai
WARNING: An illegal reflective access operation has occurred groovy
Posted on:August 16, 2023 at 05:24 PM## 背景 jdk11 的时候,会抛出如下的报错: ``` WARNING: An illegal reflective access operation has occurred WARNING:
antlr 使用
Posted on:August 16, 2023 at 12:59 PM## 背景 ANTLR 是一个lex/parser 工具,类似与c的bison/yacc ## 语法 >Token names always start with a capital le
mybatisplus Column 'xxx' cannot be null
Posted on:August 15, 2023 at 08:17 PM## 背景 有下面的表: crated_at是自动由mysql填充的,但是使用mybatisplus的BatchSave的时候,发现 `Column 'created_at' cannot be
java juc
Posted on:August 15, 2023 at 11:54 AM## 背景 了解java容器类 ## juc主要类 Collection 接口: |类|描述| |--|--| |List|列表| |Queue|队列| |Set|集合| Map接口: |
jdbc Communications link failure
Posted on:August 10, 2023 at 03:23 PM## 背景 本地电脑连接测试环境mysql,发现如下错误`Communications link failure` 测试环境jdbc连不上,最后发现是网络原因,不允许外网访问测试环境的mysql,
java nio
Posted on:August 4, 2023 at 10:04 PM## 背景 了解java的nio,因为在看到lucene的MappedByteBuffer , 所以想了解一下nio的内容 nio 主要包括三个内容: - Buffer - Selector -
java generic
Posted on:July 30, 2023 at 01:56 PM## java的泛型 java的泛型是什么? 泛型是class/interface/method/constructor的一个属性,简单来说是一个修饰符,所以当我们说java的泛型的时候,需
System.arraycopy in java
Posted on:July 16, 2023 at 10:24 PM## 背景 System.arraycopy 是System包下面的函数,主要是从一个数组复制元素到另外一个数组 为什么要介绍一下这个函数呢? 因为lucene经常会用到这个函数复制内容
hidden and shadow in java
Posted on:July 10, 2023 at 03:02 PM## shadow 这个词是描述`同一个类`里面不同作用范围内的同名变量,越里面的变量越覆盖越外面的同名变量 shadow 会和几个词相关: - scope - simple name 原则
Numeric overflow in expression idea java
Posted on:July 4, 2023 at 07:30 PM## 背景 在使用java的idea的时候,有如下代码 ``` Date date = new Date(); date.getTime() + 30 * 24 * 60 * 60 * 1000;
found duplicate key xxx spring boot
Posted on:July 4, 2023 at 12:00 PM## 背景 项目是springboot 框架 发现下面错误: `found duplicate key xxx` ``` Caused by: while constructing a mapp
Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass
Posted on:July 3, 2023 at 10:28 PM## 背景 本地编译报错 ``` Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protecte
java sort default order
Posted on:June 27, 2023 at 05:35 PM## 背景 java 的`Array.sort()`或者`.stream.sorted()` 都会使用`Comparable<T>` 作为参数 目前需要了解这些排序函数究竟是升序还是降序的 #
Payload value must not be empty
Posted on:June 6, 2023 at 09:48 AM## 背景 生产环境rabbitmq遇到错误:`Payload value must not be empty` ``` Caused by: org.springframework.messa
java 线程池
Posted on:May 27, 2023 at 08:48 PM## 背景 了解java源码包里面线程池的细节 ## 线程池 线程池是管理一堆线程的对象。对于线程池来说,不同线程池主要是他们创建、调度、销毁的的各种策略的不一样 ## 基础类 ### `
fst 结构
Posted on:May 25, 2023 at 08:05 PM## 背景 了解lucene 的fst结构 ## 核心函数 freeezeTail -> compileNode ``` private void freezeTail(int p
java 数组声明位置区别
Posted on:May 24, 2023 at 07:20 PM## 背景 ```java String inputValues[] = {"cat", "dog", "dogs"}; ``` 当我声明一个数组,方括号在右边的时候, idea会有个很小警
volatile java 实现
Posted on:April 20, 2023 at 11:56 PM## 背景 了解java volatile实现 ## 实现 核心在这里: is_volatile_shift ``` void TemplateTable::putfield_or_stat
java integer divison
Posted on:April 18, 2023 at 09:59 AM## 背景 了解java整除除法的规则 ## jls 描述 ``` Integer division rounds toward 0. That is, the quotient produce
java rabbitmq 初始化
Posted on:April 14, 2023 at 07:28 PM## 背景 了解java的spring boot 的rabbitmq的启动流程 ## 堆栈 ``` declareQueues:700, RabbitAdmin (org.springfram
kafka编译和启动
Posted on:April 14, 2023 at 08:05 AM## 背景 了解kafka使用 ## 编译 ``` ## 拉代码 git clone https://github.com/apache/kafka.git ## 切换目录 cd kafka/
direct memory in java
Posted on:April 9, 2023 at 10:51 AM## 背景 lucene 使用了direct memory,这类内存是非jvm直接管理的内存 `DirectByteBufferR` 是read only 版本的`DirectByteBuffe
java 基本类型
Posted on:April 3, 2023 at 01:16 PM## 背景 了解java的基本类型,基本类型的大小和取值范围 platform:amd64 ## 源码分析 在c++ standard 里面 |类型|是否有符号|最小范围字节数|type|
java unsafe
Posted on:March 29, 2023 at 07:46 PM## 背景 java的unsafe包是有很多底层的api暴露出来,举例,java的netty就大量使用这个api ## 例子 下面是java的unsafe包里面的`allocateMemory
each jvm bytecode implement in x86 with asm
Posted on:March 9, 2023 at 07:15 AM## 背景 想要了解jvm的bytecode 的汇编实现 ,目标平台是x86 ### 汇编格式 同样一个汇编语句:*将1赋值给rax* 汇编有两种表达方式 |desc/描述|intel|
utf8 and utf16 and encoding and java
Posted on:February 28, 2023 at 10:09 AM## 背景 java 的字符串会设计很多编码相关的问题,全部整理一下 ## 知识点 ### Code Unit code unit 描述的是一个编码的的最小单位(注意一个Unicode 平面
clickhouse mybatis batch insert cpu raise up
Posted on:February 21, 2023 at 01:55 PM## 背景  使用jdbc clickhouse,批量写入,发现cpu升高非常多,升到了90%多 ## 排查及
java 常用命令
Posted on:February 14, 2023 at 01:14 PM|命令|描述| |--|--| |java -XshowSettings:all -version|获取所有配置|
使用jstack
Posted on:February 13, 2023 at 11:55 PM## 背景 排查线上问题 ,定位故障线程 ## 使用top 使用top -p `PID` -H 可以获取对应线程下面的线程以及负载 ## 使用thread https://arth
Double-Checked Locking is Broken
Posted on:February 4, 2023 at 09:06 PM## 背景 double checked licking 在我们构造一个单例的时候会用到。 ## 用法 对于一个单例,我们需要在不同线程中共享这个变量,所以 ## 相关阅读 - [Doubl
Garbage-First Garbage Collection 简单概况
Posted on:January 30, 2023 at 08:18 AM## Garbage-First Garbage Collection Garbage-First简称g1算法,是java目前可选的一个gc算法。 目标: 在一定的软实时性条件下,保证整体的吞吐
java 一次gc排查
Posted on:January 11, 2023 at 09:22 AM## 背景 测试环境有个old generation 非常占用内存.所以需要排查 ## 过程 ### 问题出现 同事压测的时候,发现old generation 占用内存非常大 例子是下图
java 对象大小
Posted on:January 11, 2023 at 08:43 AM## 背景 排查一个gc问题的时候想到需要了解java的对象大小 举例这样创建一个1099 的对象会占用多少个字节呢? 那如果是一个特定的对象`NumClass` ``` public
redission 调用流程
Posted on:December 29, 2022 at 02:31 PM## 背景 java的redis操作使用redission封装 一个简单的堆栈[堆栈](https://github.com/769344359/redissiondemo) ## 使用
cms gc
Posted on:December 26, 2022 at 05:08 PM## 背景 了解java 的cms gc 算法 ## 路径 ``` src\hotspot\share\gc\serial\defNewGeneration.cpp // Ignores
thread pool
Posted on:December 26, 2022 at 07:39 AM## 背景 线程池是多个线程的集合。java的线程池主要使用 - `ExecutorService` - `ThreadPoolExecutor` - `Executor` - `Executor
java基础
Posted on:December 26, 2022 at 07:28 AM- 查看默认选项 ``` $ java -XX:+PrintCommandLineFlags -version -XX:ConcGCThreads=3 -XX:G1ConcRefinementT
java arraycopy
Posted on:December 22, 2022 at 02:32 PM## 背景 了解arraycopy的实现,是浅拷贝还是深拷贝 ### arrays 在了解`arraycopy`之前,先了解`arrays` 在[jls](https://docs.o
rabbitmq spring boot
Posted on:December 22, 2022 at 11:39 AM## 背景 了解springboot 的配置怎么加载的,了解spring-boot怎么读取rabbitmq配置的 ## 堆栈 ### spring boot 设置配置 ``` conf
nacos 获取配置
Posted on:December 22, 2022 at 11:10 AM## 背景 nacos 是一个服务注册/发现中间件 ## 获取配置的堆栈 ``` run:744, ClientWorker$ConfigRpcTransportClient$4 (com.a
java 动态代理
Posted on:December 21, 2022 at 12:10 PM## 背景 了解java动态代理 ## 相关阅读 - https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Invocatio
how to debug javac
Posted on:December 21, 2022 at 11:52 AM## 背景 javac 是java的编译器,目前对编译原理非常感兴趣,而且对类型擦除和java的类型系统感兴趣.所以需要调试javac ## How to do java9 之后新增了模块m
java parser
Posted on:December 20, 2022 at 12:23 AM## 背景 - 了解java的`.java`文件的词法分析 - 了解java的编译过程 ## parser 类型检查 ``` src/jdk.compiler/share/classes/com
gradle 使用
Posted on:December 19, 2022 at 01:07 PM## 背景 spring boot 使用gradle 构建 , 需要了解gradle的使用 ## 下载安装 - https://gradle.org/releases/ 这里可以下载 ##
编译sping boot
Posted on:December 16, 2022 at 11:00 PM## 背景 编译`spring boot` ## 流程 `github` 主页有写怎么编译 - 下载代码 ``` ## 下载代码 git clone https://github.com
ConcurrentHashMap npe
Posted on:December 16, 2022 at 02:28 PM### 背景 线上遇到`ConcurrentHashMap` 空指针异常,发现`ConcurrentHashMap` 不能`get` 和`put` 一个 `null`的值
spring boot repackage 和入口
Posted on:December 16, 2022 at 09:51 AM## 背景 了解java打包的过程和入口 ## 例子 我工作环境的spring boot jar 包打包后是这样的: ``` Manifest-Version: 1.0 Create
java int overflow 探究
Posted on:December 15, 2022 at 08:33 AM## 背景 遇到`java int overflow`的问题,想了解java的数字类型溢出是怎么处理的 ``` jshell> 2147483647 + 1 $3 ==> -2147483648 `
mybatis dollor and sharp
Posted on:December 12, 2022 at 11:40 AM## 背景 使用mybatis 的时候需要对sql的变量做对应的了解 ## 相关阅读 - https://stackoverflow.com/questions/39954300/when
mockito 使用
Posted on:December 12, 2022 at 09:21 AM## 背景 我们新的项目使用`mockito`来mock数据,所以需要学习`mockito`的使用 ## 使用 如何使用? 可以去官网`https://site.mockito.org/`
create a maven plugin
Posted on:December 10, 2022 at 10:08 AM## 背景 如何创建maven 扩展 ## 步骤 使用maven创建一个叫`hello-maven-plugin` 的插件 ``` mvn archetype:generate
spring boot
Posted on:December 7, 2022 at 11:18 PM## 背景 需要做到以下几步: - 搭建spring boot , - 使用spring boot - 打包spring boot ## 开始 下载spring boot demo
java redis client
Posted on:December 7, 2022 at 07:13 PM## 背景 背景是需要了解java的redis是怎么使用的 ### redission redisson 是java的一个redis客户端 ## 接入spring boot 遇
java volatile
Posted on:December 6, 2022 at 09:23 AM## 背景 了解java的volaite 内容 ## volatile volatile 在jls有几个描述: - keyword - filed modified ## volat
java 方法签名
Posted on:December 1, 2022 at 10:11 AM## 背景 了解java的签名相关内容 ### javap 查看签名 ``` javap -s java.lang.String Compiled from "String.java" p
tomcat 编译
Posted on:November 30, 2022 at 10:37 PM## 背景 了解`tomcat`生命周期,了解一个http的生命周期 ### 步骤 - 1 拉取tomcat 代码 ``` git clone https://github.com/apach
java assert
Posted on:November 30, 2022 at 09:44 AM## 背景 assert 是glibc 一个函数. java也有类似功能,断言是可以快速在测试环境发现问题的功能. 在java里面,assert是一个`Statement` 也就是一个语句
java 使用lua script
Posted on:November 30, 2022 at 09:32 AM## 相关阅读 - https://rtmsoft.me/Lettuce%E8%B0%83%E7%94%A8Lua%E8%84%9A%E6%9C%AC.html - https://github.
springboot 请求流程
Posted on:November 29, 2022 at 01:15 PM## 背景 了解java里面`spring boot` 一个http请求的生命周期 ### tomcat 启动 ``` initialize:108, TomcatWebServer (or
javac
Posted on:November 29, 2022 at 01:06 PM## 背景 - 了解java 编译过程 - 使用java的module调用javac ## java的编译命令 在java jdk9 开始,拥有了`module` 系统 ,jdk里面内部的库也
jdk 反汇编
Posted on:November 16, 2022 at 01:31 PM## 背景 很多时候可以通过java 命令打印反汇编信息 ## 相关命令 jvm参数: HotSpot options (with an -XX: prefix on the command
jdk 堆栈
Posted on:September 21, 2022 at 01:25 PM## 背景 想了解jdk的的实现和php有什么不一样。 ## 堆栈 jdk 会将opcode 生成对应的汇编代码,生成汇编的代码如下: ``` (gdb) where #0 Abstract
jdk编译
Posted on:September 20, 2022 at 07:42 AM## 第一步 拉取代码 ``` git clone https://github.com/openjdk/jdk.git ``` </br> ## 第二步 本地版本: 我本地的
java thread local 初始化时机
Posted on:September 11, 2022 at 09:34 AM## 背景 java 的spring boot 不少地方用到了利用java 的thread local map 来实现线程变量隔离。 想要理解java的相关内容。 ## 实现 核心就在于每次创建
httpServerletRequest autowired 原因
Posted on:September 6, 2022 at 06:37 PM### 背景 autowired 默认都是一般都是单例,为什么httpServerletRequest是做到不是单例呢? 堆栈: ``` getRequestAttributes:105,
Method Reference Expressions
Posted on:August 26, 2022 at 12:49 PM## 背景 了解java 的method reference ### 介绍 [java method reference](https://docs.oracle.com/javas
java static 块
Posted on:August 23, 2022 at 01:35 PM## 背景 记录java的一些简单的语法 ### static 块 [static block](https://docs.oracle.com/javase/specs/jls/se18/j
lucene 10源码分析
Posted on:June 27, 2022 at 10:50 PM## 背景 我家里的电脑的lucene是10版本的 # 创建索引和保存 ``` ### 断点 java -agentlib:jdwp=transport=dt_socket,server=y,ad
lucene 编译安装
Posted on:June 19, 2022 at 08:49 PM# 背景 需要编译和了解lucene代码 # 编译 因为lucene锁死了版本,所以要切换成jdk17,我本地是jdk18 ## clone代码 ``` ## clone 代码 git
java类初始化
Posted on:April 12, 2022 at 01:52 PM``` Method* InstanceKlass::class_initializer() const { Method* clinit = find_method( vmSym
jvm线程实现
Posted on:April 12, 2022 at 12:43 PM## 背景 了解线程相关处理逻辑 ### jni jni和php的扩展类似,都是用一个符号绑定一个native函数 ## 堆栈 堆栈: ``` (gdb) bt #0 __pthre
java和springboot
Posted on:April 12, 2022 at 12:42 PM- [springboot](https://spring-source-code-learning.gitbook.teaho.net/boot/spring-boot-config.html)
dubbo-rpc
Posted on:April 2, 2022 at 03:49 PM``` doInvoke:92, DubboInvoker (org.apache.dubbo.rpc.protocol.dubbo) invoke:173, AbstractInvoker (
jdk 编译
Posted on:February 18, 2022 at 01:05 PM### 前言 jdk 某个版本之后是自举的,所以编译jdk之前先有一个jdk。 主要参照https://openjdk.java.net/groups/build/doc/building.html
java-wait-notify
Posted on:July 7, 2020 at 01:25 PM## 背景 java的线程间通信,偶尔会用到wait和notify ## 实现 注册: ``` // Register native methods of Object void java_
java Class_forName
Posted on:December 12, 2019 at 05:32 PM在看到jdbc使用的例子里面,看到了Class.forName("xxx")的相关调用 ``` Class.forName("com.mysql.jdbc.Driver") ``` 这有什么用的?
ik分词
Posted on:December 2, 2019 at 12:25 PMes上面安装ik分词 ``` ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-i
java 异常
Posted on:November 26, 2019 at 01:06 PM## 异常例子 ``` import java.io.*; public class className { public void deposit(double amount) throws
java string 相关内容
Posted on:November 25, 2019 at 12:43 PM版本是java8 ## 基本类型和对象 java的string是什么呢? 很明显是对象 ## 特化的+ > 15.18.1. String Concatenation Operator + I
java的package与文件路径与编译
Posted on:November 14, 2019 at 02:33 PM写了很久的php的原生代码,对php相对路径自动加载这类坑的恐惧已经深入骨髓了. java和golang也有类似的内容,对于写java没多久的我来说,先记录一下 关于类名和classpath的
maven打包NoClassDefFoundError
Posted on:September 28, 2019 at 06:47 PM## maven打包NoClassDefFoundError 刚刚在学习怎么使用maven,可以编译通过,但是运行命令`java -jar xxx.jar` 的时候却报了错误`NoClassD
hello world java
Posted on:September 21, 2019 at 09:41 AM## hello java hello world ``` public class HelloWorld { public static void main(String[] ar