
java
文章平均质量分 51
Mint6
这个作者很懒,什么都没留下…
展开
-
深入解析Java和Go语言中String与byte数组的转换原理
java中通过 byte[]转换为 String时,可能因为一些编码规则,比如UTF-8,造成部分被替换,反向转换为 byte[]后和之前不同;在转换时,可以通过指定 StandardCharsets.ISO_8859_1等单字节编码来解决问题;这里引入另一个思考的问题,一个 String转换为 byte[]后,再转换为 String会有问题么?答案是不会,因为转换为byte[]的字节编码是符合UTF-8的;原创 2024-06-27 17:16:01 · 1596 阅读 · 0 评论 -
为什么Java默认使用UTF-16,Golang默认使用UTF-8呢?
为什么Java默认使用UTF-16,Golang默认使用UTF-8呢?Java 和 Go 在处理字符编码方面的选择,反映了它们各自的历史背景和设计哲学。Java 的 UTF-16 选择了稳定和兼容,而 Go 的 UTF-8 则倾向于现代互联网应用的灵活性和效率。原创 2024-06-21 20:06:37 · 922 阅读 · 0 评论 -
Java 和 Go 中的 byte 和 String 转换
Java: 强调对字符集和编码的处理,String是用来表示文本的类,在转换时需要处理不合法的字节。Go string是不可变的字节序列视图,直接允许[]byte转换为string,无论字节是否构成有效的 UTF-8 字符。如果在 Java 中不希望进行替换错误编码的处理,而希望直接存储字节数据,应当选择直接使用byte[]而不是String。这样可以避免编码和解码过程中的问题。原创 2024-06-21 18:58:59 · 1149 阅读 · 0 评论 -
测试使用guava RateLimiter工具时动态修改令牌的方法(java)
测试使用guava RateLimiter工具时动态修改令牌的方法(java)初始化一个限流1秒执行1次的RateLimiter,然后在循环模拟是否允许通过的过程中,使用调度线程池,动态修改RateLimiter的rate,查看允许通过的执行次数是否动态增加了。原创 2023-05-10 11:14:14 · 589 阅读 · 0 评论 -
fastjson使用JSON.toJSONString时,会把byte[]数据自动转base64
如题,使用fastjson处理list数据转成json过程中,存在自动转base64的情况调用JSON.toJSONString命令,不同的fastjson版本,会存在自动把字节数组转成base64如果再次把json反序列化的话,就需要进行base64解密。原创 2023-04-09 01:40:22 · 524 阅读 · 0 评论 -
LambdaDeserializer makes incorrect call to JDK‘s altMetafactory which raises an IllegalArgumentExcep
这个是jdk17版本的bug,暂时切换回jdk1.8。在使用scala使用jdk17的时候,提示如下报错。java.io.InvalidObjectException: ReflectiveOperationException during deserialization原创 2022-12-02 18:42:12 · 332 阅读 · 0 评论 -
java之抽象类定义通用方法
定义public abstract class ResponseServiceTemplate<T> { public abstract T run(); public FastbootResponse<T> execute() { FastbootResponse fastResponse = new FastbootResponse(); try { T result = run();原创 2022-01-19 14:29:13 · 652 阅读 · 0 评论 -
Java线程池之如何合理配置核心线程数?
目标:最大限度利用cpu核数,不让cpu闲着CPU 密集型任务:CPU核心数+1理解:cpu很忙,那就根据机器核数分配一核一个线程,不额外增加工作量。比如一个8核的CPU,就需要分配8个线程,但是跟人干活一样,一个核执行完一个线程,还有一些额外的准备工作,并不能很快切入到下一个线程,所以需要比系统核数多增加一个等待的线程,提前完成准备工作,设置9个。IO 密集型任务:CPU核心数 * (1+IO耗时/CPU耗时)理解:io密集会占有线程等待任务执行完毕,此时cpu核可以闲下来执行原创 2021-12-22 11:38:02 · 1869 阅读 · 0 评论 -
java设计模式简化版之六大原则
1.单一职责原则一个类只负责一项职责,修改a类,不影响无关的b类。2.里氏替换原则所有引用父类的地方必须能使用其子类的对象替换,不影响正常功能。3.依赖倒置原则通过接口把read的行为通用化,Newspaper和Book都可以传入给motherclass Newspaper implements IReader {public String getContent(){return "这个是报纸的内容……";}}class Book implements IRea原创 2021-12-20 14:06:39 · 496 阅读 · 0 评论 -
java单元测试全链路实践
场景java比如在web开发的场景中,总是离不开写单元测试,但是单元测试需要依赖数据库查询数据,如果只使用最基本的单机mysql,可以在本地使用嵌入式的db来mock,但是上了微服务之后,这些服务怎么mock也是一件难事,最终解决方案,这些都可以使用mock服务来解决。单元测试开发过程1.使用mock工具mockito和powermock工具使用推荐:https://blog.youkuaiyun.com/Mint6/article/details/114044113mock进阶教程:https:/原创 2021-08-29 20:47:03 · 467 阅读 · 0 评论 -
java8函数式接口作为方法传参
场景:java方法的部分逻辑重用,允许调用方法的人修改部分方法逻辑。示例java8之前的方法重用,调用方法时可以修改方法传入参数,来达到特殊的执行逻辑。如下,我只能修改方法的传入参数变量name,但是调用者可以调用的方法修改内部逻辑吗?不可以void findBy(String name){System.out.println("执行第一步");System.out.println("执行第二步");System.out.println("执行第三步");}java8之后原创 2021-08-29 20:23:06 · 2227 阅读 · 0 评论 -
Mockito mock类私有变量的值
mockito怎么mock一个类的私有属性? @InjectMocks private UserServiceImpl userService; @Test public void test() { Field apiField = UserServiceImpl.class.getDeclaredField("username"); FieldSetter.setField(userService, apiField, "1");原创 2021-06-25 22:44:11 · 11697 阅读 · 0 评论 -
springboot在控制台查看http接口数据,在preview和response中显示的数据不一致
背景:查看springboot项目返回给前端的http接口时,其中返回的数值类型字段,在前端显示的数据不正确,然后在控制台查看接口返回的字段,发现同一个数据preview和response中显示的内容不一样。原因:后端返回的数值类型过大,前端精度不够,导致丢失。比如后端使用Long精度范围:9223372036854775807(2^64-1)前端JavaScript接收范围:最大接收数字为16位所以超过16位,存在精度丢失问题。解决办法:后端把long类型转string返回即可,前原创 2021-05-26 00:14:13 · 1470 阅读 · 1 评论 -
java记录之排查线上jvm内存不够用的问题
1.查询cpu和内存使用情况,主要查看占用异常高cpu和内存的进程,找出pidtop2.查找linux本地java工具位置which jps结果:这里列出/export/servers/jdk1.8.0_191/bin/jps,我们就知道jps命令在这个位置了,下面使用绝对路径命令3.找到工具进程pid/export/servers/jdk1.8.0_191/bin/jps4.查找线程内占用cpu使用率过高的线程ps -mp pid -o THREAD,tid,time5原创 2021-05-22 00:20:24 · 372 阅读 · 0 评论 -
java注解通俗易懂系列教程四之组合自定义注解
自定义注解初步会了之后,有时候会遇到1.注解只有一个属性,想增加属性。2.两个注解经常一起使用,合并两个注解为一个,写一个就行了省事。等等场景。主要逻辑是:新定义一个注解,然后把原来的注解引入进来,新注解的属性和原来注解的属性绑定。1.组合多个注解到成为一个新注解:a,b注解合并成c注解,c拥有a,b的全部或者部分属性。以@SpringBootApplication为例组合逻辑:@Sp...原创 2020-01-04 20:20:31 · 2453 阅读 · 5 评论 -
java注解通俗易懂系列教程三之自定义注解demo
根据上篇教程写自定义注解分为三步1.定义注解格式 2. 配置元注解 3.定义参数 4.定义注解逻辑本篇以写多数据源切换注解为例子,来了解写自定义注解的过程,多数据源切换注解逻辑为:在方法上可以使用这个注解,根据注解属性,执行当前方法前切换到对应的数据源。1.定义注解格式 public @interface ChooseDataSource { }2. 配置元注解 定义...原创 2020-01-04 18:43:15 · 316 阅读 · 2 评论 -
java注解通俗易懂系列教程二之自定义注解步骤
1.自定义注解回顾一下官方提供的注解:Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。作用在代码的注解是:@Override - 检查该方法是否是重载方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。 @Deprecated - 标记过时方法。如果使用该方法,会报编译警告。 ...原创 2020-01-04 17:55:55 · 310 阅读 · 0 评论 -
java注解通俗易懂系列教程一之定义和使用
1.java注解定义定义:Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据。简单点来说:Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的...原创 2020-01-04 16:56:23 · 326 阅读 · 0 评论 -
apache和guava工具类partition方法分批list容易遇到的问题
背景:java代码分批和分割list,是使用apche和guava的工具类做的,(具体的使用这工具类的方法看链接:https://blog.youkuaiyun.com/Mint6/article/details/102875247)分割后foreach的过程调用remove会报错java.util.NoSuchElementException原因:apache和guava分割list,都是使用的假分割s...原创 2019-11-02 19:41:21 · 3164 阅读 · 0 评论 -
java分割list变成list嵌套list的办法,分批处理
背景:java里面经常会遇到把一个list分批处理的需求,这个时候把一个list分割成list<List>嵌套是一个好办法。解决办法三种:1.可以自己写一个普通的foreach循环多少次加到一个list里面,然后重新new一个list2.使用guava的工具类Lists.partition(要分割的list, 每个小list多少条数据)3.使用apach的工具类com...原创 2019-11-02 18:54:57 · 3973 阅读 · 0 评论 -
java多线程并发------共享变量安全
先看一个多线程卖票的demo卖票程序 piaopackage thread.example.saletickets;public class piao implements Runnable { @Override public void run() { int count = 10; while (count > 0) { try { Thread.sle...原创 2018-07-01 18:44:34 · 3658 阅读 · 0 评论 -
java读取txt文件为List<String>
文件在桌面放着名字为hello.txt,先看一下要读取的内容这是为了方便展示demo随便写的,格式是一行一个英文单词,一共五个。读取代码,这个代码也是网上找的,忘了哪个博客了。import java.io.*;import java.util.ArrayList;import java.util.List;/** * @author : * @date : 2018/...原创 2018-08-30 20:56:30 · 6590 阅读 · 5 评论 -
java8之读取txt文件转List<String>
到了java8读取文件内容最好的方式就是用Stream了桌面有个文件hello.txt,为了方便展示demo,内容是这样的格式是一行一个英文单词。看代码import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.File;import java.io.IOException;import...原创 2018-08-30 21:23:23 · 4099 阅读 · 2 评论 -
java批量执行之分批处理
相关:在处理一些与数据库相关的操作的时候,通常把一些操作合并能够起到优化的效果,并且数量越大,批量执行的效率比一条一条执行的效率要快的多。批量插入比单次插入快比如有十条数据单条执行需要操作十次数据库,批量的话执行一次数据库的操作就可以。对应的sql语句:单次:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....);I...原创 2018-09-15 15:42:16 · 5209 阅读 · 0 评论 -
window10配置java环境变量,'javac' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
配置window10的java环境变量java,java -version命令cmd都正常显示,但是javac提示:'javac' 不是内部或外部命令,也不是可运行的程序或批处理文件。 1.%JAVA_HOME%必须配置到jdk的目录,就是这个目录一打开下面就是bin和lib这些的那个目录。2.path里面不能用%JAVA_HOME%这样的前缀,自己写绝对路径,写全,不引用%JA...原创 2018-10-19 18:19:59 · 2533 阅读 · 1 评论 -
java8之List<String>转List<Integer>
这个使用java8的stream可以很好的解决 List<Integer> codesInteger = codes.stream().map(Integer::parseInt).collect(Collectors.toList());转换list列表String到列表Intger,java8提供了stream很好的进行操作。上代码public sta...原创 2018-08-26 15:46:02 · 59766 阅读 · 4 评论 -
java之for循环与list.remove
demopublic static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); //for循环的list.size...原创 2018-07-14 22:17:06 · 1435 阅读 · 0 评论 -
java符号|和||、&和&&的用法和区别
例子package symbol;public class TestSymbol { public static void main(String[] args) { //同时满足fasle,否则一个是true结果就为true if (1 < 2 || false) { System.out.println("输出1"); } /* * 运算规则:两个数都...原创 2018-07-07 00:08:34 · 16088 阅读 · 0 评论 -
java局部变量,成员变量和类变量
转载:http://www.runoob.com/java/java-variable-types.html在Java语言中,所有的变量在使用前必须声明。Java语言支持的变量类型有:局部变量成员变量类变量Java局部变量局部变量声明在方法、构造方法或者语句块中;局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;访问修饰符不能用于局部变量;局部变量只在声明它的...转载 2018-07-01 18:27:04 · 647 阅读 · 0 评论 -
java多线程并发----ThreadLocal分析
在项目中我们有时候,想把一个变量传给另外一个方法,但是当前类跟想传递的类没有什么联系,所以需要传递的话,就要在一个一个有关系的方法中写多个方法,方法再调用下面的方法,直到调用所用方法。ThreadLocal使用缘由:https://mp.weixin.qq.com/s/aM03vvSpDpvwOdaJ8u3Zgw类变量在多线程的安全问题:https://blog.youkuaiyun.com/mint6/ar...原创 2018-07-01 19:22:36 · 228 阅读 · 0 评论 -
java集合之hashset和hashmap的无序
例子package MaMap;import java.util.HashMap;import java.util.HashSet;import java.util.Map;public class HashsetOrder {public static void main(String[] args) { HashSet<Integer> set = new Hash...原创 2018-07-08 15:36:35 · 1287 阅读 · 0 评论 -
int与Long需要注意的值范围
今天使用程序计算一个算式,算出的结果一点不对,当时就气死我了。然后用计算器算了好几遍,先证明自己逻辑没有混乱。这个算式什么样子?System.out.println( "不加L,丢失精度:"+(-1387053568*31 + 19287));运行结果:明显不对。不加L,丢失精度:-48968361这个计算肯定超过了int的最大值,所以使用Long算一下,Syst...原创 2018-11-07 21:46:47 · 424 阅读 · 0 评论 -
hashmap的无序和有序
上代码 public static void main(String[] args) { Map<String,String> map = new HashMap<>(); map.put("3","1"); map.put("4","1"); map.put("1","1&原创 2018-12-02 17:55:41 · 20882 阅读 · 0 评论 -
java异常try catch finally中return具体执行顺序
java异常try catch finally中return以及执行顺序总结 1.finally一定会执行 2.try catch finally他们中有两处return时或者只有finally里面有一个return时, 就不可以与try catch finally外的return不能同时存在 try{ return;}catch(){return;} finally{re原创 2017-08-23 17:14:38 · 848 阅读 · 0 评论 -
java运算符右移和左移的快速理解
java运算符右移>>和左移<<的快速理解“ << " : 左移运算符,num << n, 相当于 num 乘以2的 n 次方" >> " : 右移运算符,num >> n, 相当于 num 除以2的 n 次方ps:1<<4 , 即 1×2^4=16;2<<3 , 即 2×2^3=16;3<<5 , 即 3×2^5=96;16>>4 , 即 16÷2^4=1;16>>3 , 即 16÷2^3=2;96>>5 , 即 96÷2^5=3;原创 2020-01-04 10:54:54 · 327 阅读 · 0 评论 -
java数据类型之基本类型和引用类型的概念的完全理解(网上搜集总结)
java的世界里面应该是万物皆对象,为什么会存在基本类型呢?(1)由于性能问题不得不用 :java基于性能的考虑,用c写的基本数据类型,基本数据类型存在栈里(存取速度比堆要快,仅次于直接位于CPU中的寄存器)速度比堆存储特别快,再有就是基本类型定义的变量创建和销毁很快,而类定义的变量还需要JVM去销毁。(2)为了满足面向java面向对象:装箱和拆箱:包装类型将基本类型的值包装在对象中,这样就可以使用对象的方法操作基本类型,类型之间的转换需要使用包装类型的方法才能完成,因此需要有包装类型。原创 2019-08-25 02:40:11 · 1044 阅读 · 0 评论 -
java8最简单的list列表转换成map类型
list列表转换成map结构方法一:Map<Integer, Student> mapStream = studentList.stream().collect(Collectors.toMap(Student::getNumber, Student -> Student));方法二:Map<Integer, Student> studentMap...原创 2019-01-10 11:56:27 · 8933 阅读 · 0 评论 -
史上最简单的java的浅拷贝与深拷贝
项目中一般传输类,实体类,视图类等等对象,它们之间需要来回转换,对象的属性大部分重合,如果一个一个属性set的话就会有有许多看起来比较难受的代码。这里我们就用到了对象直接内容的拷贝了。把一个对象的内容拷贝到另外一个对象,根据属性名一样拷贝。浅拷贝:拷贝对象里面的属性--》另外一个对象的属性深拷贝:对象里面还会嵌套对象,对象里面还有属性,浅拷贝无法完成对象里面对象的拷贝。浅拷贝方法使...原创 2019-01-05 23:53:19 · 2078 阅读 · 0 评论 -
java之循环获取list<String>内容思路
list<String>里面有内容 第一个张三第一个李四循环获取内容存入对象做属性,循环两次为一次完整循环,每个循环内第一个,第二个是一个对象的不同属性。将list<String>转换成list<Company> company的两个属性分别取list<String>第一行、第二行上代码:List<String...原创 2019-01-10 16:58:13 · 5907 阅读 · 0 评论 -
window10安装java失败,提示向导中断
1.完全卸载上次安装的java(1)从控制面板卸载java,删除java文件夹。(2)删除注册表内容。2.安装自定义java路径,不能有中文原创 2018-12-27 00:32:20 · 7222 阅读 · 3 评论