
java
文章平均质量分 82
代码搬运工.
我不生产技术,我只是技术的搬运工。
展开
-
【转】利用try-with-resource机制关闭连接
JAVA的一大特性就是JVM会对内部资源实现自动回收,即自动GC,给开发者带来了极大的便利。但是JVM对外部资源的引用却无法自动回收,例如数据库连接,网络连接以及输入输出IO流等,这些连接就需要我们手动去关闭,不然会导致外部资源泄露,连接池溢出以及文件被异常占用等。传统的手动释放外部资源一般放在一般放在try{}catch(){}finally{}机制的finally代码块中,因为finally代码块中语句是肯定会被执行的,即保证了外部资源最后一定会被释放。同时考虑到finally代码块中也有可能出现异转载 2020-11-24 11:52:33 · 473 阅读 · 0 评论 -
PageHelper导致自定义Mybatis拦截器不生效
背景:最近由于公司要做统一的数据变更记录,以前是基于Aop来做的,这样效率很低,而且在做批量处理(insert,update,delete)操作时基本不可用。所以我打算使用CDC(如Canal,Maxwell等工具)来监听mysql的binlog来做。但是不是所有的表都会有user_id字段,所以我们须要在sql上做一些处理,因为公司现在统一用的是mybatis,那么现在我觉得比较好的方式就是...转载 2020-03-26 14:48:04 · 8952 阅读 · 6 评论 -
生产中遇到的pageHelper问题(自动加上limit)
最近发现生产环境中的有些不需要分页的sql自动加上了limit分页,后面查了资料发现了原因,记录一下。别人遇到的同样的问题:http://www.herohuang.com/2018/08/08/pagehelper-limit/pageHelper分页原理:https://www.lovecto.cn/20180805/185.html...原创 2019-12-09 16:03:55 · 1120 阅读 · 0 评论 -
运用ThreadFactory管理自己的线程池
前话最近项目中因为需要用到多线程处理数据,在Java中,我们通常使用两种方式来创建线程:集成Thread类和实现Runnable接口。Java还提供了一个接口,既ThreadFactory接口,用于创建你自己的线程对象工厂,可以设置线程名称、优先级等属性。ThreadFactory为什么要用ThreadFactory来创建线程呢?自定义具有描述意义的线程名称。如果使用默认的Thre...原创 2019-11-04 11:01:51 · 2218 阅读 · 0 评论 -
反射中,Class.forName和ClassLoader区别
今天浏览其他博客的时候,看到一个问题问“反射中,Class.forName和ClassLoader区别”,思考后,发现自己知道这两个都可以用来进行类的加载,但是其区别确实还不了解,经查阅相关资料学习后总结如下:一、类加载过程装载:通过累的全限定名获取二进制字节流,将二进制字节流转换成方法区中的运行时数据结构,在内存中生成Java.lang.class对象; 链接:执行下面的校验、...原创 2019-02-20 17:53:01 · 8098 阅读 · 3 评论 -
Java线程的6种状态及切换
一、线程的6种状态1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready...转载 2019-02-13 16:15:22 · 194 阅读 · 0 评论 -
AQS详解
http://www.cnblogs.com/chengxiao/archive/2017/07/24/7141160.html原创 2019-03-05 21:22:34 · 728 阅读 · 0 评论 -
java 23种设计模式 深入理解(转载)
转载以下是学习过程中查询的资料,别人总结的资料,比较容易理解(站在各位巨人的肩膀上,望博主勿究)创建型抽象工厂模式http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html工厂方法http://www.cnblogs.com/java-my-life/archive/2012/03/25/2416227.h...转载 2019-06-24 14:10:40 · 170 阅读 · 0 评论 -
sharding-jdbc系列(一):概念
前话前段时间公司项目比较忙,天天都忙于码代码,最近好不容易项目上线了,后期就是试运行解决线上问题,要闲一些了,看了下公司以前的一些项目,发现其中居然有用到sharding-jdbc,想到以前自己也使用过,但是仅仅是会用过,对一些原理还不了解,所以决定趁这段时间学习一下。核心概念一、 背景在互联网海量数据时代的今天,我们需要存储的数据也越来越多,在使用关系型数据库例如mysql等时,...原创 2019-07-04 11:39:44 · 55911 阅读 · 1 评论 -
sharding-jdbc系列(二):在spring boot下的分库分表运用
本文使用的是spring boot+mybatis+sharding-jdbc+druid。项目整体结构单库分表集成项目背景:创建一个数据库user0,假设只有一张表t_user需要进行分表,分为2张表t_user0、t_user1,分片字段为主键id,采用取余的分片算法(%2)。创建对应的数据库及表create database user0;CREATE TAB...原创 2019-07-04 17:47:17 · 2150 阅读 · 0 评论 -
sharding-jdbc系列(三):分布式主键
在我们进行开发工作时,数据库表主键自动生成是一个基本的需求,而且大多数数据库也提供了基本的解决方案,比如mysql的自增主键、Oracle的自增序列。但是我们进行了分库分表后,同一个逻辑表内的不同实际表之间的自增键由于无法互相感知而产生重复主键。目前有许多第三方解决方案可以完美解决这个问题,如UUID等依靠特定算法自生成不重复键,或者通过引入主键生成服务等。为了方便用户使用、满足不同用户不同使...原创 2019-07-05 14:50:45 · 5772 阅读 · 3 评论 -
(转)sharding-jdbc系列(四):源码分析
看到一篇不错的博客https://blog.youkuaiyun.com/feelwing1314/column/info/22801/1转载 2019-07-30 10:59:53 · 638 阅读 · 0 评论 -
设计模式之策略模式的实际运用
前话在日常工作中,运用设计模式的思想能让我们写出更佳优雅的代码。平常策略模式的思想用的比较多,今天我们就来讲讲策略模式。策略模式策略模式讲的是一个对象具有某个行为,但是在不同的场景,这个行为的表现形式又不一样,换句话说就是有不同的算法实现,所以我们把这些不同的实现封装起来,可以在运行时动态的选择或切换。(多态思想)策略模式有两个明显的特点:对不同的实现各自有一个封装(实现类)。...原创 2019-10-11 17:58:58 · 421 阅读 · 0 评论 -
NIO之selector知识总结
一、概念selector三大概念:Channel(通道):Channel分为服务端Channel:ServerSocketChannel与客户端Channel:SocketChannel, Java NIO 中权威的说法:通道是 I/O 传输发生时通过的入口,而缓冲区是这些数 据传输的来源或目标。对于离开缓冲区的传输,您想传递出去的数据被置于一个缓冲区,被传送到通道。对于传回缓冲区的传输,...原创 2018-12-11 22:15:25 · 272 阅读 · 0 评论 -
mybatis中#与$的坑
今天在做项目的时候遇到一个动态排序的功能,需求为:可点击多个列后面的箭头,动态升降序。一.解决思路前端动态传入字段名与排序方式(desc、asc)二.解决方式1.代码如下:ORDER BY #{sort}||' '||#{sortType}执行后发现排序未生效2.代码如下:ORDER BY ${sort} ${sortType}排序生效。三.原因...原创 2018-12-14 17:49:17 · 313 阅读 · 0 评论 -
ConcurrentHashMap总结
http://www.importnew.com/22007.html转载 2018-12-07 14:36:06 · 131 阅读 · 0 评论 -
深入介绍Java中的锁[原理、锁优化、CAS、AQS]
1、为什么要用锁?锁-是为了解决并发操作引起的脏读、数据不一致的问题。2、锁实现的基本原理2.1、volatileJava编程语言允许线程访问共享变量, 为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁要更加方便。volatile在多处理器开发中保证了共享变量的“ 可见性”。可见性的意思是当一个...转载 2018-10-18 15:06:29 · 165 阅读 · 0 评论 -
ReentrantLock的lockInterruptibly()理解
ReentrantLock锁有几种:lock、tryLock、tryLock(long timeout, TimeUnit unit)、lockInterruptibly。lock 阻塞等待获取锁,优先考虑获取锁,待获取锁成功后,才响应中断。lockInterruptibly 优先考虑响应中断,而不是响应锁的普通获取或重入获取。tryLock() 是一个有返回值的方法,试图申请一个锁...转载 2018-10-15 18:07:36 · 4598 阅读 · 0 评论 -
ReentrantLock:公平锁与非公平锁
在ReentrantLock中很明显可以看到其中同步包括两种,分别是公平的FairSync和非公平的NonfairSync。 可以看看ReentrantLock的源码构造方法 public ReentrantLock() { sync = new NonfairSync(); } public ReentrantLock(boolean flag)...转载 2018-10-16 10:39:57 · 208 阅读 · 0 评论 -
maven中scope
scope的分类1.compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去2.test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit3.runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编...转载 2018-10-17 17:51:42 · 1026 阅读 · 0 评论 -
Java并发:线程池技术
需要知道的知识点: 1.首先,要清楚corePoolSize、maximumPoolSize、keepAliveTime、队列类型的含义; 2.其次,要知道Worker是用来起到什么作用的; 通俗的说,worker就是用来干活的,提交的线程任务,线程池创建一个worker,新建一个thread,把提交的线程任务赋值给 worker用来执行任务。 3....原创 2018-10-24 18:11:50 · 171 阅读 · 0 评论 -
Java并发编程:深入剖析ThreadLocal
一.对ThreadLocal的理解 ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。 这句话从字面上看起来很容易理解,但是真正理解并不是那么容易。 我们还是先来看一个例子: 1 2 3 ...转载 2018-11-01 10:41:24 · 134 阅读 · 0 评论 -
Maven常用命令大全与pom文件讲解
https://blog.youkuaiyun.com/Evankaka/article/details/47960493转载 2018-11-01 15:58:21 · 194 阅读 · 0 评论 -
微服务架构之分布式事务
一、微服务微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。 每个微服务内聚不同的业务模块。二、分布式事务本地事务 分布式事务-跨库事务 分布式事务-微服务 三、XA/JTA规范两阶段提交协议(2PC) TCC与XA/JTA对比:XA是资源层面的分布式事务,强...原创 2018-11-09 16:12:35 · 1116 阅读 · 0 评论 -
分布式ID
https://blog.youkuaiyun.com/xlgen157387/article/details/80053021转载 2018-11-02 16:37:53 · 119 阅读 · 0 评论 -
Tomcat使用IDEA远程Debug调试
https://blog.youkuaiyun.com/xlgen157387/article/details/50268457转载 2018-11-08 14:56:06 · 270 阅读 · 0 评论 -
Java类加载器及加载范围、双亲委派模型及破坏双亲委派模型
对于虚拟机,只有两种不同的类加载器:1.启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现,是虚拟机自身的一部分;2.其它所有的类加载器,这些类加载器都由Java语言实现,独立于虚拟机外部,并且全部继承自java.lang.ClassLoader。具体划分,如下:1.启动类加载器(Bootstrap ClassLoader):这个类加载器负责将...原创 2018-11-12 10:38:06 · 668 阅读 · 0 评论 -
mysql隔离级别
一、事务的四大要素 ACID1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,...原创 2018-11-27 15:18:13 · 137 阅读 · 0 评论 -
Elasticsearch下分布式存储的数据分布
对于一个分布式存储系统来说,数据是分散存储在多个节点上的。如何让数据均衡的分布在不同节点上,来保证其高可用性?所谓均衡,是指系统中每个节点的负载是均匀的,并且在发现有不均匀的情况或者有节点增加/删除时,能及时进行调整,保持均匀状态。本文将探讨Elasticsearch的数据分布方法,文中所述的背景是Elasticsearch 5.5。 在Elasticsearch中,以Shard为最小的数据分...转载 2018-11-28 18:02:09 · 501 阅读 · 0 评论 -
负载均衡
参考地址:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651959585&idx=1&sn=0a9222cbfeb62a662edffafb7f0b43ae&scene=21#wechat_redirect 什么是负载均衡?负载均衡(Load Balance)是分布式系统架构设计中必须考虑...转载 2018-12-06 11:05:45 · 168 阅读 · 0 评论 -
mybatis执行流程
源码类执行流程:返回SqlSessionFactory 其实就是从Configuration 解析org.apache.ibatis.session.SqlSessionFactoryBuilder.build(java.io.InputStream) >org.apache.ibatis.builder.xml.XMLConfigBuilder 构造函数 &g...原创 2018-12-19 14:47:38 · 2356 阅读 · 1 评论 -
分布式session一致性
一、缘起什么是session?服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文。 Web开发中,web-server可以自动为同一个浏览器的访问用户自动创建session,提供数据存储功能。最常见的,会把用户的登录信息、用户信息存储在session中,以保持登录状态。 什么是session一致性问题?只要用户不重启浏览器,每次http...转载 2018-12-13 16:58:32 · 222 阅读 · 0 评论 -
检测数据过期的处理方法(redis过期时间、订单规定时间内支付等)
三个常见的处理方法:1.创建的时间新启一个线程去检测当前任务,实时刷新,效率较低。2.需要用的时候再去查询是否已过期;这个时候需要在设置的时候记录两个数据,创建时间、过期时间,当使用的时候再去判断当前数据是否已过期。3.我们以支付以后7天自动收货为例来说明下:(1)用户支付完成以后,把订单ID插入到内存的一个DelayQueue中,同时插入到Redis中。(2)7天之内,用户点...原创 2018-10-11 15:30:46 · 4772 阅读 · 0 评论