自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (1)
  • 收藏
  • 关注

原创 Redis分布式锁:redis命令

前言分布式锁一般有三种实现方式:数据库乐观锁;基于Redis的分布式锁;基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。什么是分布式锁?要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如synchronized是共享对象头,显示锁Lock是共享某个

2020-11-29 17:09:12 930

原创 分布式事务的四种解决方案

事务应该具有4个属性:原子性、一致性、隔离性、持久性。原子性:一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。一致性:事务必须是数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据,对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。持久性:持久性也称永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。分布式

2020-11-29 00:36:34 249

原创 synchronized底层实现原理及锁优化

一、概述1、synchronized作用原子性:synchronized保证语句块内操作是原子的可见性:synchronized保证可见性(通过“在执行unlock之前,必须先把此变量同步回主内存”实现)有序性:synchronized保证有序性(通过“一个变量在同一时刻只允许一条线程对其进行lock操作”)2、synchronized的使用修饰实例方法,对当前实例对象加锁修饰静态方法,多当前类的Class对象加锁修饰代码块,对synchronized括号内的对象加锁二、实

2020-11-28 22:14:40 358

原创 Redis分布式锁:Redisson

说实话,如果在公司里落地生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是用Redisson框架就好了,非常的简便易用。大家如果有兴趣,可以去看看Redisson的官网,看看如何在项目中引入Redisson的依赖,然后基于Redis实现分布式锁的加锁与释放锁。下面给大家看一段简单的使用代码片段,先直观的感受一下:怎么样,上面那段代码,是不是感觉简单的不行!此外,人家还支持redis单实例、redis哨兵、redis cluster、redis master-slave

2020-11-28 22:04:16 245

原创 Redis如何保持与数据库一致

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2020-11-28 21:33:29 2298

原创 Spring持久化

一、DAO模式DAO(Data Access Object 数据访问对象)DAO的主要目的就是将与持久性相关的问题与一般的业务规则和工作隔离开来,它为定义业务层可以访问的持久性操作引入了一个接口并隐藏了实现的具体细节,该接口的功能将依赖于采用的持久性技术而改变,但是DAO接口可以基本保持不变。DAO是ORM技术的一种实现,采用DAO也能节省程序开发时间,减少代码量和开发成本。二、Spring DAO理念1、Spring提供了一套抽象的DAO类,这有利于统一的方式操作各种DAO技术。如JDO、JDB

2020-11-28 21:03:40 574

原创 mysql的tinyInt与byte,int,boolean之间的关联

mysql的jdbc字符串,数据库类型及长度,java类型, 结果tinyInt1isBit=true 数据库tinyint(1) enum(boolean)2也是true,1是true,0是false tinyInt1isBit=true 数据库tinyint(1)enum(int) null tinyInt1isBit=true 数据库tinyint(1)enum(byte) 1 tinyInt1isBit=true

2020-11-13 12:18:25 1212

原创 ==和equals的区别

1)对于==,比较的是值是否相等如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址2)对于equals方法,equals继承Object类,比较的是是否是同一个对象注意:equals方法不能作用于基本数据类型的变量。如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容...

2020-11-13 11:42:04 63

原创 BIO、NIO与AIO的区别

简介:BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。AIO(NIO.2):异步非阻塞式IO,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行

2020-11-06 14:28:49 64

原创 HashMap在jdk1.7和jdk1.8中的区别

一、初窥HashMapHashMap是应用更广泛的哈希表实现,而且大部分情况下,都能在常数时间性能的情况下进行put和get操作。jdk1.7中底层是由数组(也有叫做“位桶”的)+链表实现;jdk1.8中底层是由数组+链表/红黑树实现可以存储null键和null值,线程不安全。在HashMap中,null可以作为键,这样的键只有一个,但可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该key,也可以表示该key所对应的value为null。因

2020-11-06 14:25:41 2138 1

原创 HashMap、Hashtable、ConcurrentHashMap的原理与区别

HashTable底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化初始size为11,扩容:newsize = olesize*2+1计算index的方法:index = (hash & 0x7FFFFFFF) % tab.lengthHashMap底层数组+链表实现,可以存储null键和null值,线程不安全初始size为16,扩容:ne

2020-11-05 16:00:32 96

原创 synchronized、volatile和lock的区别

synchronized和volatile区别volatile本质是告诉JVM当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。volatile仅能用在变量级别,而synchronized可以使用在变量、方法、类级别。volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性。volatile不会造成线程阻塞,synchronized可能会造成线程

2020-11-05 09:35:41 756

原创 MySQL索引类别

一、索引类型MySQL目前主要有以下几种索引类型:1.普通索引index :加速查找2.唯一索引主键索引:primary key :加速查找+约束(不为空且唯一)唯一索引:unique:加速查找+约束 (唯一)3.联合索引-primary key(id,name):联合主键索引-unique(id,name):联合唯一索引-index(id,name):联合普通索引4.全文索引fulltext :用于搜索很长一篇文章的时候,效果最好。5.空间索引spatial :了解就好,几乎不用

2020-11-04 19:05:03 577

原创 redis 的雪崩、穿透和击穿

缓存雪崩对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机。缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据库必然扛不住,它会报一下警,然后就挂了。此时,如果没有采用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。这就是缓存雪崩。大约在 3 年前,国内比较知名的一个互联网公司,曾因为缓存事故,导致雪崩,后台系统全部崩溃,事故从当天下午持续到晚上凌晨 3~4 点,公司损

2020-11-03 19:22:16 86

原创 poi导出excel

POI导入导出ExcelHSSF:操作Excel 97(.xls)格式XSSF:操作Excel 2007 OOXML (.xlsx)格式,操作EXCEL内存占用高于HSSFSXSSF:从POI3.8 beta3开始支持,基于XSSF,低内存占用。使用POI的HSSF对象,生成Excel 97(.xls)格式,生成的EXCEL不经过压缩直接导出。线上问题:负载服务器

2020-11-03 17:49:40 314

原创 mysql的存储引擎

一、引言在mysql5之后,支持的存储引擎有十几个,但是常用的就那么几种,而且默认支持的也是InnoDB,既然要进行一个对比,我们就要从不同的维度来看一下。我们可以使用命令来看看当前数据库可以支持的存储引擎有哪些。show ENGINES;默认支持了9种。还是比较多的,下面进行一个对比。不同的存储引擎都有各自的特点,以适应不同的需求,如表所示。为了做出选择,首先要考虑每一个存储引擎提供了哪些不同的功能。在这里我们列举了一些特点并作出了比较。下面我们来具体分析对比一下。二、存储引擎1、My

2020-11-03 17:46:24 83

原创 mysql中使用分析函数(开窗函数)

mysql> SET @t1=0, @t2=1, @t3=2;mysql> select @t1;+------+| @t1 |+------+| 0 |+------+mysql> select @t2;+------+| @t2 |+------+| 1 |+------+/* http://www.manongjc.com/article/1442.html */

2019-02-22 18:34:24 3443

原创 git命令:修改上一次commit的提交信息

git commit --amend -m "New commit message" 这一步操作完之后要pull一次

2019-01-14 18:22:55 4684

转载 使用git stash命令保存和恢复进度

git stash保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save 'message...'可以添加一些注释git stash list显示保存进度的列表。也就意味着,git stash命令可以多次执行。git stash pop [–index] [st...

2018-11-01 11:36:12 126

转载 MySQL系列-优化之like关键字

like关键字我们也是经常使用,用来模糊查询用户名,那么like如何进行优化呢?这篇博客就简单讨论一下like的优化,但是真实的生产环境要比这复杂多了。1.%号不放最左边先创建表和索引。然后进行查询【explain select * from tb where name like 'e%';】可以看到我们的查询使用上了idx_name这个索引,因为我们的 'e%' 规定了只要以字符 ...

2018-10-19 09:46:27 221 1

转载 MySQL查询分页,同时获取总记录数

Mysql分页查询获取totalCount大幅提升性能的办法总结MySQL查询分页,通常在MySQL中获取记录总数都会使用SELECT COUNT(*) FROM tblName之类的语句这类语句的缺点是:记录集还需要单独的查询来获取,相当于查询两次,推荐如下写法:SELECT   SQL_CALC_FOUND_ROWS fldName1, fldName2 FROM tblName ...

2018-10-16 18:30:49 20971 3

转载 mysql优化–explain分析sql语句执行效率

Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。Explain语法:explain select … from … [where …]例如:explain select * from news;输出:+----+--------...

2018-10-16 11:26:49 84

原创 git管理项目命令

git clone url    从远程下载项目(url为远程链接)git status     查看当前改动过的代码git checkout -b 分支名    创建分支git diff      比较本地和远程代码修改后的差异git pull     将远程项目更新到本地git add .    保存新的添加和修改(将本地写好的代码添加到当前分支上)git reset ...

2017-07-19 18:08:30 164

原创 mac下配置maven环境

1、首先,找到自己安装的jdk目录打开终端,使用命令 /usr/libexec/java_home -V2、接着到http://maven.apache.org/download.html下载Maven安装文件,如apache-maven-3.5.0-bin.zip,然后解压到本地目录3、解压并配置maven环境变量,比如(路径根据需要修改)在终端输入如

2017-07-04 19:03:03 345

原创 python 对List进行切片

L = ['Adam', 'Lisa', 'Bart', 'Paul']>>> L[0:3]['Adam', 'Lisa', 'Bart']L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。如果第一个索引是0,还可以省略:>>> L[:3]['Adam', 'Lisa', 'Bart']只用一个 : 

2017-07-03 19:23:04 1133

原创 python中raw字符串与多行字符串

如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀r ,表示这是一个 raw 字符串,里面的字符就不需要转义了。      例如:r'\(~_~)/ \(~_~)/'      但是r'...'表示法不能表示多行字符串,也不能表示包含'和 "的字符串。      如果要表示多行字符串,可以用'''...'

2017-06-26 10:40:45 259

转载 python简单实例一

1.自定义函数#coding=utf-8#自定义函数,传入参数,没有传入参数def sayHello(): print ("hello word")def maxed(a,b): if(a>b): print(a) else: print(b)sayHello()print(maxed(2,3))2.判断语句

2017-06-15 23:46:00 482

原创 使用Eclipse配置python环境并创建实例

安装Python 从网站上下载最新的版本,从http://python.org/download/下载。安装过程与其他Windows软件类似。目前稳定版本为Python 2.7.6和Python 3.3.4。在Windows命令行中使用Python 如果你想要从Windows命令行调用Python,那么需要先设置Python环境变量。对于Windows,点击控制面板->系统->高级->环境变量。

2017-06-15 21:53:54 379

Netty nio protocolbuf视频课程

包含了Netty,NIO AIO,Mina知识的详解以及netty结合spring protocolbuf的源码

2018-04-04

空空如也

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

TA关注的人

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