自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 问答 (1)
  • 收藏
  • 关注

原创 JAVA CAS实现原理与使用

在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁)。锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile...

2018-09-04 23:43:18 64453 7

原创 Sublimt 正则

sublime 正则使用

2023-02-22 22:11:12 98

原创 国家级发明专利专利 - 崔博文

个人专利

2022-12-10 21:39:01 664

原创 一些常用的命令

1:可以查看当前机器中java的配置admin@WEN_NAS:~$ java -XX:+PrintFlagsFinal -version|grep Code uintx CodeCacheExpansionSize = 65536 {pd product} uintx CodeCacheMinimumFreeSpace = 512000

2021-11-05 01:16:47 123

原创 2021-11-04JVM调优总结 -Xms -Xmx -Xmn -Xss

堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置: java-Xmx3550m -Xms3550m -Xmn2g-Xss128k-Xmx3550m:设置JVM最大可用内存为3550M。-Xms3550m:设置JV..

2021-11-04 01:20:39 181

原创 mysql 事务的实现原理

开篇相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等。今天想跟大家一起研究下事务内部到底是怎么实现的,在讲解前我想先抛出个问题:事务想要做到什么效果?按我理解,无非是要做到可靠性以及并发处理可靠性:数据库要保证当insert或update操作时抛异常或者数据库crash的时候需要保障数据的操作前后的一致,想要做到这个,我需要知道我修改之前和修改之后的状态,所以就有了undo lo

2020-12-08 12:45:07 176

原创 Spring 生命周期

Spring Bean的生命周期是Spring面试热点问题。这个问题即考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易!本文希望能够从源码角度入手,帮助面试者彻底搞定Spring Bean的生命周期。只有四个!是的,Spring Bean的生命周期只有这四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。要彻底搞清楚Spring的生命周期,首先要把这四个阶段牢牢记住。实例化和属性赋值对应构造方法和setter方法的注入,初始化

2020-11-12 18:50:06 206

原创 Redis系列 - 主从库模式、哨兵和分片集群

主从库模式Redis的高可靠性主要包括两方面:数据尽量少丢失:RDB & AOF机制 服务尽量少中断:增加副本冗余主从模式Redis提供了主从库模式,增加冗余的副本来提高Redis集群的高可靠性。主从库之间采用读写分离的方式,写请求只能在主库,读请求在主从库都可以完成。读操作:主库、从库 写操作:主库 --> 主库写完后同步从库写请求为什么只能在主库上,若从库和主库上都可以进行读写会发生什么?1. 若有3个写请求先后都是对key1进行操作,并且分别请求到了不同实

2020-11-12 11:37:54 221

原创 关于MQ的几件小事(六)消息积压在消息队列里怎么办

1.大量消息在mq里积压了几个小时了还没解决场景:几千万条数据在MQ里积压了七八个小时,从下午4点多,积压到了晚上很晚,10点多,11点多。线上故障了,这个时候要不然就是修复consumer的问题,让他恢复消费速度,然后傻傻的等待几个小时消费完毕。这个肯定不行。一个消费者一秒是1000条,一秒3个消费者是3000条,一分钟是18万条,1000多万条。所以如果你积压了几百万到上千万的数据,即使消费者恢复了,也需要大概1小时的时间才能恢复过来。解决方案:”这种时候只能操作临时扩容,以更快的速度去消费数据

2020-11-05 17:28:10 1491

原创 关于MQ的几件小事(四)如何保证消息不丢失

1.mq原则数据不能多,也不能少,不能多是说消息不能重复消费,这个我们上一节已解决;不能少,就是说不能丢失数据。如果mq传递的是非常核心的消息,支撑核心的业务,那么这种场景是一定不能丢失数据的。2.丢失数据场景丢数据一般分为两种,一种是mq把消息丢了,一种就是消费时将消息丢了。下面从rabbitmq和kafka分别说一下,丢失数据的场景,(1)rabbitmqA:生产者弄丢了数据生产者将数据发送到rabbitmq的时候,可能在传输过程中因为网络等问题而将数据弄丢了。B:rabbitmq自己丢

2020-11-05 17:26:47 269

原创 关于MQ的几件小事(三)如何保证消息不重复消费

1.幂等性幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“setTrue()”函数就是一个幂等函数,无论多次执行,其结果都是一样的.更复杂的操作幂等保证是利用唯一交易号(流水号)实现.简单来说,幂等性就是一个数据或者一个请求,

2020-11-05 17:25:18 464

转载 关于MQ的几件小事(二)如何保证消息队列的高可用

1.RabbitMQ的高可用RabbitMQ基于主从模式实现高可用。RabbitMQ有三种模式:单机模式,普通集群模式,镜像集群模式。(1)单机模式:单机模式就是demo级别的,生产中不会有人使用。(2)普通集群模式普通集群模式就是在多台机器上启动多个rabbitmq实例,每个机器启动一个。但是创建的queue只会放在一个rabbitmq实例上面,但是其他的实例都同步了这个queue的元数据。在你消费的时候,如果连接到了另一个实例,他会从拥有queue的那个实例获取消息然后再返回给你。这种方式

2020-11-05 17:09:43 130 2

转载 关于MQ的几件小事(一)消息队列的用途、优缺点、技术选型

1.为什么使用消息队列?(1)解耦:可以在多个系统之间进行解耦,将原本通过网络之间的调用的方式改为使用MQ进行消息的异步通讯,只要该操作不是需要同步的,就可以改为使用MQ进行不同系统之间的联系,这样项目之间不会存在耦合,系统之间不会产生太大的影响,就算一个系统挂了,也只是消息挤压在MQ里面没人进行消费而已,不会对其他的系统产生影响。(2)异步:加入一个操作设计到好几个步骤,这些步骤之间不需要同步完成,比如客户去创建了一个订单,还要去客户轨迹系统添加一条轨迹、去库存系统更新库存、去客户系统修改客户的状

2020-11-05 17:07:46 282

原创 解决多线程安全问题-无非两个方法synchronized和lock 具体原理以及如何 获取锁AQS算法

一定要看后面的文章,先说结论:非公平锁tryAcquire的流程是:检查state字段,若为0,表示锁未被占用,那么尝试占用,若不为0,检查当前锁是否被自己占用,若被自己占用,则更新state字段,表示重入锁的次数。如果以上两点都没有成功,则获取锁失败,返回false。还有其他的锁,如果想要了解,参考:JAVA锁机制-可重入锁,可中断锁,公平锁,读写锁,自旋锁,用synchronized实现ReentrantLock 美团面试题参考:使用synchronized 实现ReentrantL..

2020-07-31 18:18:15 534

原创 深入分析Synchronized原理

记得开始学习Java的时候,一遇到多线程情况就使用synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着学习的进行我们知道在JDK1.5之前synchronized是一个重量级锁,相对于j.u.c.Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它。不过,随着Javs SE 1.6对synchronized进行的各种优化后,synchronized并不会显得

2020-07-31 18:11:53 235

原创 查缺补漏

1:ThreadLocal原理,以及为什么会内存泄漏2:红黑树和AVL树区别3:Redis的HashMap怎么实现4:动态代理与静态代理区别5:各种排序算法时间复杂度

2020-07-12 13:42:37 300

转载 VMware Ubuntu安装详细过程(非常靠谱)

不是每一个程序员都必须玩过linux,只是博主觉得现在的很多服务器都是linux系统的,而自己属于那种前端也搞,后台也搞,对框架搭建也感兴趣,但是很多生产上的框架和工具都是安装在服务器上的,而且有不少大公司都要求熟悉在linux上开发,因此从个人职业发展有必要去多了解一下linux。(博主网上查了一下,现在大部分服务器安装的系统主要有:ubuntu server、centos、suse lin...

2019-12-20 16:24:34 434

原创 powerdesigner 的 PDM文件转excel

在PowerDesigner 中 ctrl+shift+x 弹出执行脚本界面,输入如下代码就会生成 Excel'******************************************************************************Option Explicit Dim rowsNum rowsNum = 0'---------------...

2019-11-10 17:35:28 881 3

转载 redis 常用命令总结

一、key pattern 查询相应的key  (1)redis允许模糊查询key  有3个通配符  *、?、[]  (2)randomkey:返回随机key    (3)type key:返回key存储的类型  (4)exists key:判断某个key是否存在  (5)del key:删除key  (6)rename key newkey:改名  (7)rename...

2018-11-28 16:58:33 174

原创 java NIO原理及实例

1、reactor(反应器)模式  使用单线程模拟多线程,提高资源利用率和程序的效率,增加系统吞吐量。下面例子比较形象的说明了什么是反应器模式:  一个老板经营一个饭店,  传统模式 - 来一个客人安排一个服务员招呼,客人很满意;(相当于一个连接一个线程)  后来客人越来越多,需要的服务员越来越多,资源条件不足以再请更多的服务员了,传统模式已经不能满足需求。老板之所以为老板自然有过...

2018-09-09 23:42:19 169

转载 MySQL事务隔离级别和Spring事务关系介绍

原文地址:https://mp.weixin.qq.com/s/IWthSznQpNiY5BiI26RM2g事务隔离级别介绍隔离级别 脏读 不可重复读 幻读 未提交读(Read uncommitted) 可能 可能 可能 已提交读(Read committed) 不可能 可能 可能 可重复读(Repeatable read)...

2018-08-29 14:03:49 3697

转载 JVM内存结构

所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问题就会变的非常常见,了解JVM内存也是为了服务器出现性能问题的时候可以快速的了解那块的内存区域出现问题,以便于快速的解决生产故障。 先看一张图,这张图能很清晰的说明JVM内存结构布局。Ja...

2018-08-28 18:57:16 104

转载 Hessian的基本使用

客户端必须具备以下几点:java客户端包含Hessian.jar的包。 具有和服务器端结构一样的接口。 利用HessianProxyFactory调用远程接口。 使用spring方式需要配置HessianProxyFactoryBean  注意:使用resin容器时,resin已经包含了hessian.jar包 JAVA服务器端必须具备以下几点:包含Hessian的jar包。...

2018-08-26 23:27:08 2586

转载 zookeeper原理分析

场景一有这样一个场景:系统中有大约100w的用户,每个用户平 均有3个邮箱账号,每隔5分钟,每个邮箱账需要收取100封邮件,最多3亿份邮件需要下载到服务器中(不含附件和正文)。用20台机器划分计算的压力,从 多个不同的网路出口进行访问外网,计算的压力得到缓解,那么每台机器的计算压力也不会很大了。        通过我们的讨论和以往的经验判断在这场景中可以实现并行计算,但我们还期望能对并行计...

2018-08-25 01:05:53 5666

原创 算法:回溯法与八皇后问题

   在国际象棋中,皇后是最强大的一枚棋子,可以吃掉与其在同一行、列和斜线的敌方棋子。比中国象棋里的车强几百倍,比她那没用的老公更是强的飞起(国王只能前后左右斜线走一格)。上图右边高大的棋子即为皇后。   八皇后问题是这样一个问题:将八个皇后摆在一张8*8的国际象棋棋盘上,使每个皇后都无法吃掉别的皇后,一共有多少种摆法?此问题在1848年由棋手马克斯·贝瑟尔提出,岂止是有年头,简直就是...

2018-08-18 11:27:04 328

转载 Mycat从入门到放弃

当初写这篇文章的初衷只是想提醒自己在用一个开源产品前不仅要了解其提供的功能,更要了解其功能和场景边界。1.非分片字段查询Mycat中的路由结果是通过分片字段和分片方法来确定的。例如下图中的一个Mycat分库方案:根据 tt_waybill 表的 id 字段来进行分片 分片方法为 id 值取 3 的模,根据模值确定在DB1,DB2,DB3中的某个分片如果查询条件中有 id 字...

2018-08-16 00:17:48 171

原创 Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

今天发一篇"水文",可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHashMap,大部分文章都说不...

2018-08-15 23:12:30 98

原创 HTTP协议网络请求状态码,详细~

作为一个互联网开发人员对于一些服务器返回的HTTP状态的意思都必须是了如指掌的,只有将这些状态码一一弄清楚,工作中遇到的各种问题才能够处理的得心应手。好了,下面就让我们来了解一下比较常见的HTTP状态码吧!2开头 (请求成功)表示成功处理了请求的状态代码。200   (成功)  服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 201   (已创建)  请求成功并且服务器创...

2018-08-14 23:23:17 6311

原创 一个对理解算法非常有帮助的网站

废话不多说,直接上干货:用力戳我  

2018-08-14 22:40:45 220

转载 MySQL索引原理及慢查询优化

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问...

2018-08-13 23:12:21 112

转载 从实际案例聊聊Java应用的GC优化

当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化。但GC算法复杂,影响GC性能的参数众多,且参数调整又依赖于应用各自的特点,这些因素很大程度上增加了GC优化的难度。即便如此,GC调优也不是无章可循,仍然有一些通用的思考方法。本篇会介绍这些通用的GC优化策略和相关实践案例,主要包括如下内容:优化前准备: 简单回顾JVM相关知识、...

2018-08-11 18:21:13 124

转载 spring的4种事务特性,5种隔离级别,7种传播行为

spring事务: 什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败.事务特性(4种): 原子性 (atomicity):强调事务的不可分割. 一致性 (consistency):事务的执行的前后数据的完整性保持一致. 隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰 持久性(durability) :事务一旦...

2018-08-05 15:35:57 838

转载 Java并发编程:volatile关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。  volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来...

2018-07-31 18:26:52 100

原创 设计模式 - 抽象工厂模式

前言发现工厂方法模式存在一个严重的问题:一个具体工厂只能创建一类产品而在实际过程中,一个工厂往往需要生产多类产品。为了解决上述的问题,我们又使用了一种新的设计模式:抽象工厂模式。目录抽象工厂模式.jpg1. 介绍1.1 定义抽象工厂模式,即Abstract Factory Pattern,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类;具体的工...

2018-07-29 16:07:58 99

原创 设计模式 - 工厂方法模式

前言发现简单工厂模式存在一系列问题:工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响; 违背“开放 - 关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂。 简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。为了解决上述的问题,我们又使用了一种新的设计模式:工厂方...

2018-07-29 16:06:12 105

原创 设计模式 - 简单工厂模式

1. 含义简单工厂模式又叫静态方法模式(因为工厂类定义了一个静态方法) 现实生活中,工厂是负责生产产品的;同样在设计模式中,简单工厂模式我们可以理解为负责生产对象的一个类,称为“工厂类”。2. 解决的问题将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦。即使用者可直接消费产品而不需...

2018-07-29 16:01:59 88

原创 设计模式 - 模板模式

1. 介绍1.1 定义定义一个模板结构,将具体内容延迟到子类去实现。1.2 主要作用在不改变模板结构的前提下在子类中重新定义模板中的内容。模板方法模式是基于”继承“的;1.3 解决的问题提高代码复用性 将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中 实现了反向控制 通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控...

2018-07-29 15:50:32 120 2

转载 设计模式 - 策略模式

写代码时总会出很多的if…else,或者case。如果在一个条件语句中又包含了多个条件语句就会使得代码变得臃肿,维护的成本也会加大,而策略模式就能较好的解决这个问题,本篇博客就带你详细了解策略模式。策略模式的定义和使用场景定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。分析下定义,策略模式定义和封装了一系列的算法,它...

2018-07-29 12:20:48 118

转载 Java四种引用包括强引用,软引用,弱引用,虚引用

强引用:只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.equels(new Object());而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常所用到的编码形式。 软引用:非必须引用,内存溢出之前进行回收,可...

2018-07-27 16:40:08 102

原创 Spring Aop 代理深入研究

 目录什么是代理模式?为什么要用代理模式?有哪几种代理模式?1.静态代理     2.动态代理Spring AOP都有哪几种实现方式1:通过JDK提供的API(InvocationHandler)2:CGLIB代理最近一直在研究AOP的源码感觉颇受感悟什么是代理模式?       代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制...

2018-07-27 00:14:17 140

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除