![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 92
窗边冷月光
南国以南,若为方圆,怎知花未央?
展开
-
Redis分布式锁的正确实现 --集群版
为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:1、互斥性。在任意时刻,只有一个客户端能持有锁。2、不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。3、具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。4、解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。package...原创 2020-04-26 19:58:18 · 730 阅读 · 0 评论 -
Redis分布式锁的正确实现
为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:1、互斥性。在任意时刻,只有一个客户端能持有锁。2、不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。3、具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。4、解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。package...原创 2019-11-15 12:13:00 · 304 阅读 · 0 评论 -
linux之 grep "xxx" * | wc -l 命令
查找某文件夹下所有文件中某个字符的个数grep 'xxx' * | wc -l查看某文件夹下文件的个数ls -l |grep "^-"|wc -l或find ./company -type f | wc -l查看某文件夹下文件的个数,包括子文件夹里的。ls -lR|grep "^-"|wc -l查看某文件夹下文件夹的个数,包括子文件夹里的。原创 2018-12-01 06:44:54 · 23390 阅读 · 0 评论 -
stream 和 parallelStream
parallelStream是一个并行执行的流.它通过默认的ForkJoinPool,可能提高你的多线程任务的速度.parallelStream的作用Stream具有平行处理能力,处理的过程会分而治之,也就是将一个大任务切分成多个小任务,这表示每个任务都是一个操作。效率对比// 初始化2千万个元素List<Integer> list = new ArrayList<...原创 2018-12-06 18:00:05 · 4060 阅读 · 0 评论 -
IDEA启动不了如何解决
报错:解决方案:找到 项目文件夹/.idea/workspace.xml搜索这句话 <component name="PropertiesComponent">在里面加入下面一行代码,表示动态回去Java编译路径 <property name="dynamic.classpath" value="true" />...原创 2019-02-22 17:23:50 · 5601 阅读 · 0 评论 -
Java编程珠玑(201903)
1、初始化一个对象的简便方式Student stu = new Student(){{ setName("张三");}};2、重新组合后去重List<String> names = list.stream().map(Student::getName).distinct().collect(Collectors.toList());3、根据某一属性对集合去重list ...原创 2019-03-14 20:38:39 · 799 阅读 · 0 评论 -
分批执行工具类
适合于分批获取数据,分批执行。比如一些接口比较耗时,可以将参数列表分成几次调用。package com.tgb.hz.utils;import org.apache.commons.collections.CollectionUtils;import org.apache.commons.lang3.ArrayUtils;import java.util.ArrayList;im...原创 2019-03-14 20:46:18 · 384 阅读 · 0 评论 -
Java工具类 - 根据左上角坐标和右下角坐标裁剪图片
package cut;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.*;import java.util.Arrays;/** * 根据左上角...原创 2019-04-19 12:30:29 · 13284 阅读 · 1 评论 -
Java 集合或数组转变为逗号分隔的字符串的几种方式
首先,创建一个集合List<String> list = Lists.newArrayList(null, "bob", "jack");1、自己编码实现 public static <T> String join(List<T> list, String splitStr) { if (CollectionUtils.isEmp...原创 2019-07-17 15:08:01 · 9916 阅读 · 1 评论 -
关于zip压缩包日志查询、统计、导出
1.由于没有权限创建文件,也就无法导出输出日志文件,需要找运维帮忙导出2.举个栗子:查询ZIP日志文件中此提示的日志:【创建人】保存出现异常2.1查找Zip压缩包中的字符,先把中文转成Unicode编码,’‘需转义为’\’,忽略大小写查’邮寄’ -->转成Unicode编码 ‘\u90ae\u5bc4’ -->加转义符 ‘\\u90ae\\u5bc4’ -->加忽略...原创 2019-09-29 19:02:18 · 3354 阅读 · 0 评论 -
深复制和浅复制
对象的复制java除了用new来创建对象,还可以通过clone来复制对象。那么这两种方式有什么相同和不同呢?newnew操作符的本意是分配内存。程序执行到new操作符时,首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域,这一步叫做对象的初始化,构造方法返回后,一个对象创建完毕,可以把他的引用(地址)发布到外...原创 2019-10-05 11:39:22 · 211 阅读 · 0 评论 -
BigDecimal add方法比较坑的问题:调用add后,求和结果没变
// 这篇随笔是为了提醒自己避免重复错误// 原先的代码是这样的,想着输出会是9.00,可是结果却是0.00BigDecimal day_fee = new BigDecimal("0.00");day_fee.add( new BigDecimal("9.00"));System.out.print("day_fee:" + day_fee);// 正确的代码应该是这样的,输出的是9...原创 2018-10-19 11:32:46 · 8392 阅读 · 3 评论 -
关于 BigDecimal构造函数说明, 防踩坑
对于精确值计算应该使用 BigDecimalJDK7中 BigDecimal(double val) 构造方法的结果有一定的不可预知性,例如:new BigDecimal(0.1)表示的不是 0.1 而 0.1000000000000000055511151231257827021181583404541015625这是因为0.1无法准确的表示为double。因此应该使用 new Big...原创 2018-09-27 11:21:09 · 853 阅读 · 0 评论 -
Mybatis 常用语法
likesubject_name LIKE CONCAT(CONCAT('%', #{subjectName,jdbcType=VARCHAR}), '%')in&amp;amp;amp;amp;lt;if test=&amp;amp;amp;quot;status != null&amp;amp;amp;quot;&amp;amp;amp;amp;gt; and status in原创 2018-09-06 17:40:36 · 2106 阅读 · 0 评论 -
使用JavaMail实现发送模板邮件以及保存到发件箱
需要用到的jar包 1.freemarker-2.3.19.jar 2.javax.mail.jar 3.javax.activation.jar 本次测试邮箱是腾讯企业邮箱,其他未经测试。 做这个功能是因为我女朋友每个月都需要手动去发几十个人的考勤、考核邮件,实在是太过重复的做一件很乏味的事情,所以才有了这个程序,不过,界面是使用的控制台,简单一点。核心代码展示原创 2017-08-18 15:10:30 · 9236 阅读 · 0 评论 -
线程池的探索
一、线程池并发的基础是java.lang.Threads类。 Thread执行类型为java.lang.Runnable的对象。直接使用Thread类有以下缺点:Ø 创建新线程会导致一些性能开销。Ø 太多的线程可能导致性能下降,因为CPU需要在这些线程之间切换。Ø 不能轻易地控制线程数,因此线程过多会导致内存不足错误。与直接使用Threads相比,java.util.原创 2017-08-18 20:37:07 · 269 阅读 · 0 评论 -
深入理解OSGI的模块化
定义OSGI(Open Service Gateway Initiative)技术是面向Java的动态模型系统。OSGI框架实现了一个优雅、完整和动态地组件模型。应用程序(bundle)无需重新引导可以被远程安装、启动、升级和卸载。OSGi技术提供允许应用程序使用精炼、可重用和可协作的组件构建的标准化原语。 这些组件能够组装进一个应用和部署中。OSGi服务平台提供在多种网络设备上无原创 2017-08-18 20:39:00 · 902 阅读 · 0 评论 -
Java类的执行顺序、final的用法
———-java类的初始化顺序———– 1、静态变量 2、静态代码块 3、main方法 4、类的属性 5、代码块 6、构造方法——如果有父类则是:——— 1、父类–静态变量 2、父类–静态代码块 3、子类–静态变量 4、子类–静态代码块 5、父类–属性 6、父类–代码块 7、父类–构造方法 8、子类–属性 9、子类–代码块 10、子类–构造方法注意: 1、如果Tes原创 2017-08-21 09:56:41 · 585 阅读 · 0 评论 -
家庭网络环境下基于OSGI的灵活授权
摘要:在家庭网络环境下,OSGi平台在控制不同用户进行访问时,授权就显得非常重要。OSGi平台虽然支持基于角色的访问控制(RBAC),但并不支持RBAC模型中的所有功能。本文针对OSGi平台动态部署不足的问题,通过增加了相对角色的概念并使用委托模型激活了其访问控制,提出了一个多样化的访问控制机制,扩展了OSGi平台现有的授权机制。 关键词:授权;OSGi;RBAC;委托模型;访问控制原创 2017-11-24 15:56:20 · 286 阅读 · 0 评论 -
MybatisGenerator的Maven插件配置
pom.xml 配置<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.or...原创 2018-06-12 14:59:55 · 450 阅读 · 0 评论 -
FastJSON.toJSONString() 转换对象,Long类型数据发生改变
在使用FastJSON转换对象时,遇到一个问题: 接口返回的Id是:81043452862799872,但是经过控制器然后传到页面变成了81043452862799870, 导致后续调用失败。 找了很久才发现是因为这个原因。解决方案:在获取接口数据的时候把Long类型转换为String类型,这样子就OK了。...原创 2018-07-06 11:50:34 · 10347 阅读 · 0 评论 -
Java stream filter过滤 之 Long类型 失败
有这样一个问题public class Student { private Long stuId; private String name; private Integer age; // 省略getter、setter}public class StudentDaoImpl implements StudentDao { privat...原创 2018-08-10 16:32:19 · 2408 阅读 · 0 评论 -
maven之scope属性
在POM中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值: compile,缺省值,适用于所有阶段,会随着项目一起发布。 provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。 runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段...转载 2018-08-07 10:28:36 · 120 阅读 · 0 评论 -
包装类之equals
/* * 【强制】所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较 说明:对于 Integer var = ? 在-128 至 127 范围内的赋值, Integer 对象是在IntegerCache . cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有...原创 2018-09-08 19:29:59 · 2841 阅读 · 0 评论 -
Hibernate 通用操作类 BaseHibernateDao
在用HIbernate的时候,写DAO每次都要获取session,query,感觉很繁琐,就自己写了一个类,实现了绝大多数功能,代码简化了很多,话不多说,直接上代码:BaseHibernateDao类package cn.util;import java.io.Serializable; import java.lang.reflect.ParameterizedType; import ja原创 2015-08-15 06:26:03 · 5043 阅读 · 0 评论