- 博客(81)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 无锁算法——CAS原理
一、无锁算法CAS(比较与交换,Compare and swap) 是一种有名的无锁算法。无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。实现非阻塞同步的方案称为“无锁编程算法”( Non-blocking algorithm)。
2017-04-09 09:32:28
17168
原创 那些年我们踩过的坑——Java中Date夏令时日期转换不一致问题
一、问题描述前段时间遇到一个很神奇且费解的问题,程序将用户的生日从日期类型转为string类型时,竟然莫名其妙的少了一天,具体表现为存在数据库的19900916这个日期,取出到程序后做转换为字符串的操作,然后神奇的变为了19900915,并且在开发环境重现时出现了有些同事能够重现,而有些同事无法复现的情况。最终,我们发现了问题的原因,真的可谓是你意想不到的坑之一。如下图为问题复现:可见19...
2019-11-25 17:43:34
7651
4
原创 MySQL错误:Access denied for user 'root'@'%' to database 'mytest'
一、错误描述最近在使用MySQL时创建好了数据库,用户,使用root用户在赋予新建用户gateway权限的时候执行如下命令:GRANT ALL on gateway.* to 'gateway'@'%' identified by 'gateway' with grant option;但却报了一个错误Access denied for user 'root'@'%' to dat...
2018-09-12 21:53:18
88864
16
原创 自定义mybatis-generator自动生成代码时的类型转换
一、mybatis-generator问题大家在使用mybatis的时候,有些时候需要使用mybatis generator来逆向生成mapper和entity层。这其中一个问题在于,表设计的时候,出于最大程度节省表空间的考虑,不少枚举使用了tinyint类型,但是在进行自动生成的时候,默认生成的java字段是Byte类型,但是我想要的是Integer类型,这就对程序中使用产生了不便。...
2018-09-07 14:44:37
12172
2
原创 使用CountDownLatch等待多线程全部执行完成
前言 CountDownLatch 允许一个或多个线程等待其他线程完成操作。 应用场景 假如有一个列表的大量数据等待处理,最后全部处理完毕后返回处理结果。普通做法就是从头遍历,一个个顺序执行,这样单线程处理效率不高,我们希望使用多线程的方式处理,同时在主线程等待所有子线程处理完成。CountDownLatch的构造函数接收一个int类型的参数作为计数器,如果你想等待N个点完成,这里就传入...
2018-05-21 19:01:30
4381
1
原创 数据库分库分表分片中间件——MyCat配置及使用
一、MyCat是什么MyCat是什么呢?简而言之,MyCat就是一个数据库中间件,对数据库的请求直接连接到MyCat,MyCat再根据规则连接到后端的数据库集群。如果你不关心架构方面的事,只是纯粹的应用的话,那么你完全可以把它当做一个数据库看待。 下面摘自官方文档 从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的的 Server,前端用户可以把它看作是一...
2018-04-20 18:41:44
1777
3
原创 Junit自动单元测试以及测试覆盖率简单使用
前言众所周知,测试对于一个工程而言是至关重要的,而现在绝大多数团队都配有专门的测试人员来使用各种工具进行专业的测试,这里介绍的Junit的更多是作为开发同学在开发过程或最后提供自测的工具,使用起来非常方便,并且可以提供出测试覆盖率,以及具体没有覆盖的代码。 下面还是使用Idea做为演示IDE,使用Eclipse或者其他IDE的同学请自行搜索搭建方式,应该都是大同小异。 这里网上有很多详细的...
2018-04-19 18:56:18
25650
3
原创 Lombok简介与应用
简介lombok是java开发中一个非常好用的小工具,刚见到的时候就感觉非常惊艳,有一种相见恨晚的感觉,所以特此来推荐一下。lombok的官方地址:https://projectlombok.org/ lombok的Github地址:https://github.com/rzwitserloot/lombokLombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很...
2018-04-10 15:40:34
621
原创 ActiveMQ的持久化存储机制
一、ActiveMQ的消息存储持久化方式1.AMQ消息存储-基于文件的存储方式,以前的默认存储机制 2.KahaDB消息存储-提供了容量的提升和恢复能力,是现在的默认存储方式 3.JDBC存储-基于数据库方式 4.Memory存储-基于内存的,重启后消失 KahaDB介绍KahaDB是目前默认的存储方式,可使用于任何场景,提高了性能和恢复能力。消息存储使用了一个事务日志和仅仅用一个索引文件来
2017-12-20 15:31:22
992
原创 Mysql(Linux)root用户密码重置方法
一、前言关于mysql在Linux系统密码忘记需要重置,之前也写过一篇文章;http://blog.csdn.net/roy_70/article/details/53006405,但是那次不是使用的markdown,所以图片似乎都已丢失,那个方法是通过修改配置文件使启动跳过密码,然后登陆成功修改密码后再改回来。这次新装的mysql又出现了root密码不对的情况,找了一种更简单的方法,原理都是一样,
2017-12-14 09:18:33
1797
原创 ActiveMQ内置Broker启动方式
ActiveMQ除了可以作为独立进程单独部署在服务器上之外,也可以很小巧的内嵌在程序中启动,下面我们来简单的介绍内置Broker启动的几种方式。 首先准备工作还是需要准备好activemq的jar包,请自行配置,不多赘述
2017-12-11 15:49:57
2316
原创 ActiveMQ安装
一、下载并安装1.从http://activemq.apache.org/download.html页面中下载最新的ActiveMQ,选择自己的系统版本下载,这里我们演示的是Linux系统(自己装的虚拟机)的版本。 2.下载后将tar.gz包直接上传至服务器目录,并解压。因为是java编译的,所以只要系统安装了jdk配置好了环境变量,那么ActiveMQ只要解压完成就表名安装完成了,十分简单。
2017-12-06 15:26:10
796
原创 Linux常用文本比对命令——diff
在windows环境下我们通常会选择使用功能强大显示友好的Beyond Compare工具来进行文件的比对。其实在Linux系统中就自带了同样的强大比对命令,可以让我们在Linux系统下直接使用。diff命令用以比对两个文件的不同,功能强大使用方便。diff命令是逐行进行比对,如果命令使用在目录下,则可以比对两个目录中具有同名的文件。
2017-11-10 16:08:00
3801
转载 limits.conf文件工作原理
1、 limits.conf 描述 limits.conf文件实际是Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,突破系统的默认限制,对系统访问资源有一定保护作用。 limits.conf 和sysctl.conf区别在于limits.conf是针对用户,而sysctl.conf是针对整个系统参数配
2017-11-02 13:21:28
2686
原创 too many open files(打开的文件过多)解决方法
一、产生原因too many open files(打开的文件过多)是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。 引起的原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数,通
2017-11-02 13:18:53
140377
8
转载 JVM内存模型你只要看这一篇就够了
让我们不厌其烦的从内存模型开始说起:作为一般人需要了解到的,JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这里说的是JVM的内存区域,实际上Java程序还可以调用native方法使用直接内存)。 本文接下来就重点说说这三个区域。1. 线程栈简介注意这个栈和数据结构中的stack有相似之处,但并不是用户态的。准确的讲它压入的每个栈帧(Stack Frame)是程序
2017-10-31 18:37:57
837
原创 KMP算法之java实现
一、KMP算法KMP算法的理解请参考上一篇博客:http://blog.csdn.net/roy_70/article/details/78321930 这里说一下具体如何来用代码实现KMP算法二、部分匹配表接下来说一下部分匹配表是如何生成的。首先,要了解两个概念:”前缀”和”后缀”。 “前缀”指除了最后一个字符以外,一个字符串的全部头部组合;”后缀”指除了第一个字符以外,一个字符串的全部尾部组合
2017-10-24 15:36:13
3886
2
原创 字符串匹配算法——KMP算法简单解释
一、字符串匹配算法KMPKMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。
2017-10-23 18:59:37
2670
原创 Redis原子计数器incr,防止并发请求
一些对高并发请求有限制的系统或者功能里,比如说秒杀活动,或者一些网站返回的当前用户过多,请稍后尝试。这些都是通过对同一时刻请求数量进行了限制,一般用作对后台系统的保护,防止系统因为过大的流量冲击而崩溃。对于系统崩溃带来的后果,显然还是拒绝一部分请求更能被维护者所接受。 而在各种限流中,除了系统自身设计的带锁机制的计数器外,利用Redis实现显然是一种既高效安全又便捷方便的方式。
2017-10-17 15:14:19
58371
7
原创 JVM自带性能分析工具介绍——jstat
前言JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一种工具都有其自身的特点,用户可以根据你需要检测的应用或者程序片段的状况,适当的选择相应的工具进行检测,这里我们就简要介绍下这几个命令的作用和使用方法。
2017-09-18 17:27:46
1232
原创 JVM自带性能分析工具介绍——jmap和jhat
前言JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一种工具都有其自身的特点,用户可以根据你需要检测的应用或者程序片段的状况,适当的选择相应的工具进行检测,这里我们就简要介绍下这几个命令的作用和使用方法。
2017-09-18 17:26:33
2969
原创 JVM自带性能分析工具介绍——jstack
前言JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一种工具都有其自身的特点,用户可以根据你需要检测的应用或者程序片段的状况,适当的选择相应的工具进行检测,这里我们就简要介绍下这几个命令的作用和使用方法。
2017-09-18 17:25:05
11877
原创 JVM自带性能分析工具介绍——JPS
前言JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一种工具都有其自身的特点,用户可以根据你需要检测的应用或者程序片段的状况,适当的选择相应的工具进行检测,这里我们就简要介绍下这几个命令的作用和使用方法。
2017-09-15 20:38:00
849
2
转载 大型分布式网站优化术语分析
1.I/O优化1.增加缓存,减少磁盘的访问次数。 2.优化磁盘的管理系统,设计最优的磁盘方式策略,以及磁盘的寻址策略,这是在底层操作系统层面考虑的。 3.设计合理的磁盘存储数据块,以及访
2017-09-07 11:26:33
458
原创 Java设计模式——模板方法模式
模板方法模式其实在日常中运用的非常多。它的实现是先创建一个抽象类,类中既有实际的方法(公用方法),也有抽象方法(需要子类覆写的),然后再由子类继承该抽象类,覆写其中的抽象方法。通过对其子类的调用,既共用抽象类中的公有方法,也根据不同的子类,实现了各自独有的不同方法。
2017-08-20 13:48:31
1357
原创 Java设计模式——策略模式
策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。这通常需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类,提供辅助函数。
2017-08-20 12:36:26
438
原创 Java设计模式——享元模式
享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。这个我们在数据库也经常接触,就是连接池Pool。想想每个连接的特点,我们不难总结出:适用于作共享的一些个对象,他们有一些共有的属性,就拿数据库连接池来说,url、driverClassName、username、password及dbname,这些属性对于每个连接来说都是一样的,所以就适合用享元模式来处理,建
2017-08-16 16:13:35
1068
原创 Java设计模式——桥接模式
桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。
2017-08-16 16:09:26
807
原创 Java设计模式——外观模式
外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口,
2017-08-16 16:04:35
747
原创 Java设计模式——代理模式
一、前言本文是笔者自己在参考大神关于设计模式的讲解并学习后记的小记,只用于自己以后复习用,其他同学若想全面学习设计模式的种种,请移步下面原文链接: http://blog.csdn.net/zhangerqing/article/details/8194653/综述都摘自原文: 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设
2017-08-16 14:45:43
725
原创 Java设计模式——装饰模式
装饰模式是给一个对象增加一些新的功能,而且是动态增加,这要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。
2017-08-16 14:43:33
755
原创 Java设计模式——适配器模式
适配器模式将某个类的接口转换为客户端期望的另一个接口的表示,目的是消除由于接口不匹配所造成的类的兼容性问题,主要分为类的适配器模式,对象的适配器模式,接口的适配器模式。
2017-08-16 14:39:48
756
原创 Java读写锁ReadWriteLock
一、前言在多线程开发中,我们更多关注的是多并发情况下,修改操作不会因为并发而产生错误的情况,比如1000个线程对一个参数同时加1,最终得到的是小于1000的数字。这样的情况下我们有很多方法来保证其线程安全,比如使用synchronized关键字或者使用ava.util.concurrent包内部的类或者方法。 但其实还有一种情况,同时存在读写并发的情形,这个时候我们希望读写分离,就是对于读取这个动
2017-08-11 18:29:17
660
原创 Java设计模式——原型模式
原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。
2017-08-10 15:55:28
664
原创 Java设计模式——建造者模式
一、前言本文是笔者自己在参考大神关于设计模式的讲解并学习后记的小记,只用于自己以后复习用,其他同学若想全面学习设计模式的种种,请移步下面原文链接: http://blog.csdn.net/zhangerqing/article/details/8194653/综述都摘自原文: 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设
2017-08-10 11:45:10
632
原创 Java设计模式——单例模式
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了
2017-08-09 18:22:02
875
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人