- 博客(30)
- 收藏
- 关注
原创 低延迟垃圾回收器ZGC
对于低延迟和高可用的Java服务,GC停顿一直是它们的痛点。ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,可用于大内存低延迟服务的内存管理和回收。
2022-05-22 10:51:57
1017
原创 awk实现行列互相转换
目的:使用awk对文本进行行列转换,行变成列。方法示例文件:test.txt1 2 34 5 67 8 9转换代码:awk '{for(i=1;i<=NF;i++) a[i,NR]=$i}END{for(i=1;i<=NF;i++) {for(j=1;j<=NR;j++) printf a[i,j] " ";print ""}}' test.txt输出:1 4 7 2 5 8 3 6 9 ...
2021-04-30 15:45:14
2411
1
原创 Java 线程池execute和submit的区别
execute和submit的区别方法使用场景是否有返回值异常处理execute适用于不需要返回值的场景无线程内部如果发生异常,主线程无感知。异常会通过stdout方式显示,如果需要在日志中打印,需要单独设置。方法见示例3submit适用于需要获取返回值的场景有调用future get方法时,异常会抛出。如果不调用get方法,则无法获取。示例1:execute使用 private static void executeDemo() { Runna
2021-02-09 17:55:21
843
原创 Java 8 时间类介绍
Java 8 中新增了3个时间类:名称说明是否可变是否线程安全LocalDate用于表示日期否是LocalTime用于表示时间(时分秒)否是LocalDateTime用于表示日期+时间否是相关示例:LocalDate //获取当前日期 LocalDate today = LocalDate.now(); System.out.println("today : " + today); //获取昨天日期 L
2021-02-09 17:28:03
229
原创 Java 8 字符串和时间相互转换
Java 8 字符串和时间相互转换1. 常见日期转换符号说明符号说明备注y年Y本周所在的年如果日期所在的周跨年了,年份就会是第二年的,需要注意M月(month-of-year)d日(day-of-month)D年内的第几天(day-of-year)H小时值(24小时制)h小时值(12小时制)m分钟(minute-of-hour)s秒( second-of-minute)2. 字符串转时间
2021-02-08 09:48:10
6219
原创 Sentinel 学习笔记
Sentinel 学习笔记文章目录Sentinel 学习笔记1. 简介2. 依赖3. 限流(FlowRule)4. 熔断降级(DegradeRule)5. 限流和熔断降级的区别6. 参考资料1. 简介Sentinel是阿里巴巴自研的限流熔断系统。2. 依赖<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId>
2021-02-03 09:47:19
198
原创 spark gson 运行和编译版本冲突的处理办法
问题spark调用gson的方法,运行时抛出NoSuchMethod异常。本地编译无问题。查看依赖,程序本身并没有依赖老版本的gson。原因:spark自带gson,版本为2.2.4。spark任务启动时,会优先加载该版本。程序本身编译集成的gson版本不会被加载。如果代码中使用了更高版本的gson才有的方法和特性,就会抛出异常。解决方案方法1使用和spark版本相同的gson,即2.2.4。优点:不会再报该异常。缺点:无法使用新版本的gson,一些方法和特性都无法使
2021-01-05 20:05:08
704
1
原创 Effective Java学习笔记 第65条:不要忽略异常
空的catch块应该包含一条说明,解释为什么可以忽略这个异常。正确的处理异常能够彻底挽回失败。只要将异常传播给外界,至少会导致程序迅速地失败,从而保留了有助于调试该失败条件的信息。
2016-09-17 20:04:32
437
原创 Effective Java学习笔记 第64条:努力使失败保持原子性
失败原子性(failure atomic)失败的方法调用应该使对象保持在被调用之前的状态。
2016-09-17 20:00:54
776
原创 Effective Java学习笔记 第61条: 抛出与抽象相对应的异常
更高层的实现应该捕获低层的异常,同时抛出可以按照高层抽象进行解释的异常 使用异常链来让高层抽象包含低层的异常,便于以后排除问题。try { ...} catch(LowerLevelException e) { throw new HigherLevelException(message , e);}
2016-09-17 17:50:03
782
原创 Effective Java学习笔记: 第59条 避免不必要地使用受检的异常
受检异常强迫程序员处理异常条件。 过分使用受检异常会是API使用起来非常不方便。受检异常的使用场景:如果正确地使用API并不能阻止这种异常条件的产生;并且一旦产生异常,使用API的程序员可以立即采取有效的动作。如果这两个条件都成立,这种负担就是正当的。否则就适用于未受检的异常。
2016-09-17 17:29:45
691
原创 Effective Java学习笔记: 第58条 对可恢复的情况使用受检异常,对于编程错误使用运行时异常
java提供了三种可以抛出的结构: 1. 受检异常(checked exception) 2. 运行时异常(runtime exception) 3. 错误(error)运行时异常和错误都是不需要也不应该被捕获的可抛出结构。如果程序抛出运行时异常或者错误,说明出现了不可恢复的情形,继续执行下去有害无益。如果没有捕捉到这样的结构,将会导致当前线程停止,并出现适当的错误消息。
2016-09-17 17:16:50
860
原创 Effective Java学习笔记: 第57条只针对异常的情况才使用异常
摘要:异常应该只用于异常的情况下,它们永远不应该用于正常的控制流。 设计良好的API不应该强迫它的客户端为了正常的控制流而使用异常。如果对象有“状态相关的方法”。可以使用如下的两种方式来避免调用该方法时,抛出异常。状态测试方法使用方法来判断对象的“状态相关方法”是否可以被调用。 例如:Iterator接口的hasNext方法i.hasNext()可识别的返回值返回一个可以识别的值来表示当前的对象
2016-09-17 17:03:10
572
原创 Effective java学习笔记:第43条 返回0长度的数组或者集合,而不是null
1.目的避免因为返回null,导致调用端代码必须检查返回值是否为null2.方法2.1返回长度为0的数组2.2返回空集合
2016-09-17 16:29:35
557
原创 JAVA编程规范(整理)
1. 变量的命名1.1 常量命名:字母全部大写,单词以下划线连接 静态常量字段: static final 全部大写,单词用“_” 连接1.2 变量命名:普通变量:首字母小写,其它每个单词的首字母大写。名字应该简短而有特定的含义,简洁明了的向使用者展示其使用意图。约定变量:使用后即可抛弃的临时变量。 整形:i,j,k,m,n 字符型: c,d,e循环计数变量:i,j,k,count
2016-06-26 17:53:21
441
原创 byte[]作为Map key的问题
1. TreeMap:为TreeMap指定Comparator,这样就能够使用byte[]作为key了。2. HashMap:byte[]会按照地址生成hashcode,作为key的话需要注意
2016-06-25 10:31:51
4095
原创 c++ 11 lamda表达式语法整理
C++11 lamda表达式语法整理基本语法[捕获列表] (参数列表) 可选项 -> 返回值类型 {函数实现;};捕获列表[] 不捕获变量,见f1,f2 [val] 见f3 [=] 按值捕获全部变量,见f4 [&] 按引用捕获全部变量,见f6 [this] 获取this指针,在函数内可以使用和修改类的成员变量,见Test [=,&val] 按值捕获除val外的所有变量,按引用捕获val,见
2016-01-10 11:52:58
1892
原创 C++11 auto关键字介绍
在C++11中,auto关键字负责提示编译器对变量的类型进行自动推导。使用auto关键字能够增加代码的灵活度,减少代码的书写量。本文介绍了auto关键的注意事项,使用场景和推导规则.
2015-12-27 16:09:16
6134
原创 boost::shared_ptr的线程安全
官方文档的说明shared_ptr objects offer the same level ofthread safety as built-in types. A shared_ptr instance can be "read"(accessed using only const operations) simultaneously by multiple threads.Differe
2015-12-06 16:48:10
3359
1
原创 C++ vector resize 和 reserve的区别
resize 调整的是vector的大小,改变的是vector的size;如果resize的调整值小于vector的size,则会删除多余的元素;如果大于size,则增加元素。reserve 调整的是vector的预分配的内存,改变的是vector的capacity。如果reserve的调整值大于vector的capacity,则会增加预分配的内存;如果小于capacity,则不做任何改变。
2015-12-01 20:12:28
1254
原创 使用C++ 11 实现阻塞队列
阻塞队列介绍阻塞队列主要用于线程和线程之间的通信。当队列为空时,从队列中获取元素的线程将会被挂起;当队列是满时,往队列里添加元素的线程将会挂起。本文使用C++ 11中的多线程库,实现了一个带有最大容量的阻塞队列。代码使用Visual C++ 2015编写。阻塞队列的实现代码 BlockQueue.hpp#pragma once#include #include #
2015-08-17 20:53:26
6760
3
原创 Sleeping Barber Window版本实现
介绍:题目来自于开源力量(www.osforce.cn) C语言进阶课程 具体如下:一间理发店有3位理发师,理发店有沙发,最多坐10人。3个理发师是三个线程,没有客人时,理发师睡觉。客人上门时,理发师醒过来服务客人。如果理发师都在忙,客人则坐到沙发上等待,如果沙发满了,客人直接离开。收到关门信号的时候,沙发上的客人直接离开,对于服务到一半的客人,理发师要帮他们剪完头发。
2015-07-18 13:55:50
688
原创 关于c++智能指针share_ptr的引用问题
做了个实验,弄明白了const share_ptr<T>的引用和share_ptr<const T>的引用的区别
2015-04-15 21:04:19
1223
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人