avatar
文章
383
标签
67
分类
46

主页
时间轴
标签
分类
关于
ClawHub的技术分享
搜索
主页
时间轴
标签
分类
关于

ClawHub的技术分享

HeapByteBuffer和DirectByteBuffer
发表于2019-08-09|JavaJAVA基础
文章首发于:clawhub.club 最近在用java操作LMDB,看看能不能代替BDB实现本地持久化队列的功能,碰到了HeapByteBuffer与DirectByteBuffer的坑。 HeapByteBuffer内容维护在JVM中,容易做到垃圾回收,但是也容易被垃圾回收所影响,在flush到远程的时候,会先拷贝数据到直接内存,再发送。 DirectByteBuffer其数据分配到堆外内存中,所以很多框架都会选择它进行网路交互。避免了数据的额外拷贝,也不会收到垃圾回收的影响。 应用场景DirectByteBuffer适用于频繁的native IO操作,高吞吐量,低延迟。HeapByteBuffer适用于数据量小,方便垃圾回收的场景。
mongoDB迭代数据-springboot版本
发表于2019-08-09|JavaJAVA基础
文章首发于:clawhub.club SpringBoot 2.0.1.RELEASE JDK 1.8 MongoDB依赖 1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId></dependency> 核心代码1234567//获取集合name内所有的数据MongoCursor<BasicDBObject> iterator = mongoTemplate.getCollection(name).find(BasicDBObject.class).iterator();BasicDBObject object;while (iterator.hasNext()) { object = iterator.next(); //Do something ...
unzip遇到的一些事儿
发表于2019-08-09|JavaJAVA基础
文章首发于:clawhub.club 背景3个Tb的数据,每个压缩包一个Gb,SSD4T,现要求全部解压。 策略解压后立即删除原有zip包,以防止空间不足。 尝试一 linux shell脚本实现遇到的问题unzip命令会另外fork出线程去执行解压缩,以至于我捕捉不到解压是否完成,会出现还没等解压的时候,rm命令先执行,从而删除zip包,程序报错。 解决办法查资料,问大神,折腾半天,最后转变思路,用JAVA实现。 尝试二 java实现commons-compress 问题一 文件名中文乱码。发现默认的是UTF8编码,尝试了多个编码方式,我一直以为GBK与GB2312是一样的,所以只试了GBK,后来同事帮助下,GB2312完美解决。 问题二 windows与linux对于文件名称限制问题。因为我是在window系统上跑程序,报错:java.nio.file.InvalidPathException: Illegal char <*> Windows 中文件命名规则 文件名或文件夹名可以由1~256个西文字符或128个汉字(包括空格)组成,不能多于256个字符。文件名可 ...
JAVA CPU占用过高问题排查(linux)
发表于2019-08-09|JavaJAVA基础
文章首发于:clawhub.club 一 linux查看进程信息1top 二 查看进程占用cpu最多的线程12ps -mp 23967 -o THREAD,tid,time 三 线程ID转16进制12printf "%x\n" 23968 四 查看线程信息12jstack 23967 |grep -A 10 5da0 12jstack 23967 |grep 5da0 -A 30 五 查看进程的对象信息12jmap -histo:live 23967 | more 六 查看进程的GC情况12jstat -gcutil 23967 1000 100
Java中的自动拆箱装箱,包装类中的缓存,类型之间的转化例子
发表于2019-08-09|JavaJAVA基础
文章首发于:clawhub.club 12345678910111213141516171819202122232425public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e = 321; Integer f = 321; Long g = 3L; Long h = 2L; // Integer 内部-128 到 127 之间数字的缓存机制 System.out.println(c == d); //true // 超出了Integer 内部缓存机制 System.out.println(e == f);//false // a+b 值为基本类型,基本类型和包装类型==比较, // 包装类型会自动拆箱,成为基本类型 ...
Java中的Byte类型的取值范围为啥是-128到127
发表于2019-08-09|JavaJAVA基础
文章首发于:clawhub.club 基本概念机器数:一个数在计算机中表示叫机器数,带有符号位,正数为0,负数为1。     如:00000011 和 10000011 真值:带符号位的机器数的真正数值叫做机器数的真值。如: 0000 0001的真值 = +000 0001 = +1 ;1000 0001的真值 = –000 0001 = –1 原码:第一位是符号位,其余位数值。 如:+1的原码 = 0000 0001  ; -1的原码 = 1000 0001 反码:正数的反码使其本身,负数的反码是符号位不变,其余各位取反。    如:00000001的反码 = 00000001 ;10000001的反码 = 11111110 补码:正数的补码就是其本身,负数的补码是其反码+1。 如:00000001的补码 = 00000001 ;10000001的补码 = 11111111 +0与-0+0:原码 反码 补码 都是0000 0000 -0:原码:1000 0000 ;反码:111 ...
JDK8接口的默认方法与静态方法-接口与抽象类的区别
发表于2019-08-09|JavaJAVA基础
文章首发于:clawhub.club 引入JDK1.8后,接口允许定义默认方法与静态方法,如:Iterable类中的foreach方法。 123456789101112131415161718192021222324252627282930313233343536public interface Iterable<T> { /** * Returns an iterator over elements of type {@code T}. * * @return an Iterator. */ Iterator<T> iterator(); /** * Performs the given action for each element of the {@code Iterable} * until all elements have been processed or the action throws an * exceptio ...
数组的常用算法-冒泡排序-选择排序-插入排序-折半查找-数组逆序(java实现)
发表于2019-08-09|JavaJAVA基础
文章首发于:clawhub.club 冒泡排序 1234567891011121314151617181920/** * 冒泡排序的基本思想是对比相邻的元素值, * 如果满足条件就交换元素值, * 把较小的元素值移到数组前面, * 大的元素值移到数组后面, * 这样较小的元素就像气泡一样从底部上升到顶部。 * * @param array the array */ private static void bubbleSort(int[] array) { for (int i = 0; i < array.length; i++) { for (int j = 1; j < array.length; j++) { if (array[i] > array[j]) { int temp = array[i]; array[i] = array ...
java的几种图片压缩方式:ImageIO、GraphicsMagick、OpenCV、Thumbnails简单介绍
发表于2019-08-09|JavaJAVA基础
文章首发于:clawhub.club ImageIO: JDK自带的图片处理类,处理的质量还不错,但是网上都说会发生OOM。 例子: 1234567891011121314151617181920/** * 按照固定宽高原图压缩 * * @param img 源图片文件 * @param width 宽 * @param height 高 * @param out 输出流 * @throws IOException the io exception */public static void thumbnail(File img, int width, int height, OutputStream out) throws IOException { BufferedImage bufferedImage = ImageIO.read(img); Image image = bufferedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage t ...
java通过jnr-ffi调用C++外部函数
发表于2019-08-09|JavaJAVA基础
文章首发于:clawhub.club 前一阵子碰到个需求,将图片压缩到指定大小(byte),封装成外部服务,期间找过好多方案,最后选用c++操作opencv处理图片,springboot封装成服务。 其中java调用native方法选用了jnr-ffi。这个工具是在以前用lmdb的时候发现的。jnr的github地址使用基本上看他的README就可以了。 记一下注意的地方: 1、类型对应String - equivalent to const char *StringBuffer - equivalent to char * 2、注解@out:可以减少一次数据拷贝,详细信息去看源码。1int test(@Out ByteBuffer byte, int size);
1…242526…39
avatar
ClawHub
ClawHub的技术分享,记录学习中的点点滴滴!
文章
383
标签
67
分类
46
Follow Me
公告
奋斗!
最新文章
以精准营销为例梳理短信业务
以精准营销为例梳理短信业务2023-10-16
小程序商品库存及限购优化改造
小程序商品库存及限购优化改造2023-10-16
从恶意刷单到小程序下单流程优化
从恶意刷单到小程序下单流程优化2023-10-16
从红包裂变活动了解活动业务
从红包裂变活动了解活动业务2023-09-27
从服务提醒单了解商机提醒业务
从服务提醒单了解商机提醒业务2023-09-23
标签
Golanghexo分布式微服务业务梳理小程序下单商机提醒活动短信nodeelectronvue测试PostmanJasper打印模板ExcelSQL微信ElasticSearchSQL优化福利资源问题与解决Excel上传OOMMap.computeIfAbsentAsyncTransmittableThreadLocalLists.partition随笔面试一键分发平台JavaJAVA基础java泛型arthasJAVA基础集合框架java并发容器源码分析
归档
  • 十月 20233
  • 九月 20233
  • 十二月 20223
  • 十一月 20223
  • 七月 20222
  • 六月 202210
  • 五月 202211
  • 四月 20222
©2019 - 2023 By ClawHub
好好学习 天天向上
搜索