- 博客(48)
- 资源 (1)
- 收藏
- 关注
原创 redis:通过CLion打开redis的源码并启动服务,进行源码调试
文章目录1.下载该项目到本地,直接用CLion打开项目2.在CLion的右上角选择 redis-server 运行,这时候服务已经运行成功3.一般来说,我们是为了调试server端的程序,所以我们本地要安装好redis。然后本地直接通过本地安装的redis-cli 命令连接刚刚启动的redis-server(不是CLion里面的redis-cli)4. redis-cli5.然后就可以在本地的 r...
2019-11-17 13:29:54
3338
4
原创 Python中os.fork()的简单理解
Python中,通过os.fork()会做下面的事情(1)创建子进程,子进程会复制父进程的数据信息,然后程序就分两个进程继续运行后面的程序,这也是fork(分叉)名字的含义了。(2)在父进程内,这个方法会返回子进程的编号PID。(3)在子进程内,这个方法会返回0。所以可以使用PID来区分两个进程:import osdef doing(): print '{} : before fo...
2019-09-17 23:53:01
1455
原创 MacOS10.14,python安装Mysql-python出错,报ld: library not found for -lssl
MacOs10.14,python安装Mysql-python出错,报ld: library not found for -lssl解决方法:原因:错误日志:解决方法:先确认是否安装mysql,如果没装,可以通过 brew install MySQL(有点慢),也可以下载dmg来安装pip intall Mysql-python 出错,如果错误信息是 ld: library not fo...
2019-07-21 22:04:44
888
原创 学习Mysql的join算法:Index Nested-Loop Join和Block Nested-Loop Join
阅读这篇文章,你将会了解1.什么是Nested-Loop Join?2.Index Nested-Loop Join怎么优化连接?3.Block Nested-Loop Join怎么优化连接?Nested-Loop Join在Mysql中,使用Nested-Loop Join的算法思想去优化join,Nested-Loop Join翻译成中文则是“嵌套循环连接”。举个例子:sel...
2019-05-03 19:13:18
13412
8
原创 理解Mybatis一级缓存,以及如何真正使用到一级缓存
阅读这篇文章,你将会了解1.什么是会话(SqlSession)、执行器(Executor)2.什么是Mybatis一级缓存3.一级缓存的生命周期4.一级缓存的CacheKey生成策略5.在日常开发时,怎么才能用到一级缓存(通过事务)一.类关系图:二.什么是会话(SqlSession)在Mybatis中,SqlSession可以理解为数据库访问的最小粒度,每次的数据库访问,...
2019-05-02 19:21:59
4713
4
原创 Java类加载机制:双亲委派机制,还是应该叫做“父委派模型”?
阅读这篇文章,你会了解到:1.上面是类加载器2.为什么应该叫做“父委派模型”,而不是“双亲委派机制”3.在JNDI中,“父委派模型”是怎么被违背的4.不只是JNDI,还有TOMCAT的类加载器模型是怎样的,他们有无违背“父委派模型”?一.什么是类加载器讲“双亲委派机制”前,要先要讲一讲类和类加载器的关系1.类(Class)我们在编写代码时,创建的每个“*.java”文件都可以认...
2019-05-01 15:53:10
4327
7
原创 Java线程的状态以及不同状态下线程中断机制的效果
阅读这篇文章,你将会了解1.Java线程有什么状态,以及状态扭转的方式2.Java线程的中断对于各个状态的Java线程有什么效果。一.Java线程的状态:线程的中断不属于线程的状态,中断是一种操作,当用户不希望某个线程继续执行时,可以通过中断机制去完成这个事情。但是,Java线程的中断对于各个状态的Java线程有不一样的效果。Java线程有6个状态,可以进入源码Thread.jav...
2019-04-28 00:11:01
654
原创 理解协程,以及协程如何提升IO阻塞时的性能
阅读这篇文章,你将会了解:1.协程的概念2.进程、线程、线程的区别3.协程有什么好处,如何提升性能一.概念:1.协程是在线程下的,线程内的多个协程通过协程的调度获得cpu时间。但是线程内的多个协程肯定是串行的。即线程下的某个协程在运行时,其他协程必然是挂起,没有在运行。2.一个进程可以有多个线程,一个线程可以用多个协程。二.进程、线程、协程三者的上下文切换比较进程线...
2019-04-27 22:07:05
4150
2
原创 了解awk、sed、grep
阅读这篇文章,你将会了解:1.awk、sed、grep的区别;2.他们分别有什么命令可以使用,用到的时候可以查阅;一. awk、sed、grep的区别概念模版SED在线编辑器,一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。文件内容...
2019-04-21 14:00:20
233
原创 ThreadPoolExecutor中的keepAliveTime详解
ThreadPoolExecutor中的keepAliveTime详解阅读这篇文章,你将会知道:keepAliveTime的概念。keepAliveTime是如何设置的。线程是如何根据keepAliveTime进行销毁的。一.keepAliveTime的概念:keepAliveTime的单位是纳秒,即1s=1000000000ns,1秒等于10亿纳秒。keepAliveTi...
2019-04-20 17:02:02
52279
1
原创 Mybatis:了解SqlSessionTemplate
读完这篇文章,你将会知道:SqlSessionTemplate 和 SqlSessionManager 有什么不同。 SqlSessionTemplate 如何实现线程安全。 SqlSessionTemplate 怎么和数据库打交道。目录SqlSessionTemplate 和 SqlSessionManager 有什么不同。SqlSessionTemplate 如何实现线程安全...
2019-04-17 23:42:19
22955
1
原创 Mybatis: 理解Mapper接口的代理流程
目录关系梳理:ConfigurationMapperRegistryMapperProxyFactoryMapperProxyMapperMethod关于SqlSession的,会另起一篇文章介绍,本次关于Mapper接口的代理就到这里了,谢谢大家。一.关系梳理二.Configuration配置实体,可以理解为读取了xml配置文件后生成的配置实体。...
2019-04-14 19:42:39
959
原创 理解mysql中的MVCC多版本并发控制,某些场景会出现幻读
目录MVCC是为了实现数据库的并发控制而设计的一种协议。几乎所有的RDBMS都支持MVCC。针对一条当前读的SQL语句,InnoDB与MySQL Server的交互,是一条一条进行的,因此,加锁也是一条一条进行的。mvcc并没有完全解决幻读的问题:以下做2个实验SQL中定义的四种标准隔离级别:InnoDB的MVCC实现机制参考资料MVCC是为了实现数据库的并发控制而...
2019-04-05 11:04:25
1580
1
转载 linux中用户线程、内核线程、轻量级进程的区别
原文链接:http://www.cnitblog.com/tarius.wu/articles/2277.html内核线程内核线程就是内核的分身,一个分身可以处理一件特定事情。这在处理异步事件如异步IO时特别有用。内核线程的使用是廉价的,唯一使用的资源就是内核栈和上下文切换时保存寄存器的空间。支持多线程的内核叫做多线程内核(Multi-Threads kernel )。轻量级进程(LW...
2019-04-04 19:38:58
1398
转载 进程的用户态和内核态的概念理解以及切换
原文链接:https://www.cnblogs.com/viviwind/archive/2012/09/22/2698450.html内核态:当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。用户态:每个进程都有自己的内核栈。当进程在执行用...
2019-04-04 19:20:59
7882
1
原创 理解:事务两阶段提交和三阶段提交(2PC、3PC)
目录两阶段提交(2PC)准备阶段:提交阶段:2PC存在的问题:三阶段提交(3PC)CanCommit:PreCommit(如果CanCommit阶段中所有参与者都返回“Yes”)DoCommit3PC存在的问题:3PC在2PC上的改动点:两阶段提交(2PC)图片来源:https://medium.com/@balrajasubbiah/conse...
2019-03-31 22:35:18
1573
原创 字符串相乘:2种解题思路
目录第一种:实现字符串的乘法算法,乘法算法通过实现字符串的加法完成。第二种:利用乘法公式,把num1,num2的每个位相乘的结果放到在数组对应的偏移位上,最终数组上的值就是相乘的结果。第一种思路的代码实现:第二种思路的代码实现:字符串相乘是leetcode中的43题:https://leetcode-cn.com/problems/multiply-strings/目前有2...
2019-03-24 00:48:37
2518
原创 N皇后问题:通过DFS方式输出所有的棋子放置方案
https://leetcode-cn.com/problems/n-queens/N皇后问题是指在N×N格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。思路1.如何判断(row, col)位置是否能放皇后(1)使用col存储已经摆放皇后的列索引(2)sum存储 /方向的对角线,因为 / 方向的对角线的坐标满足 (...
2019-03-17 22:34:50
622
原创 AQS: 等待队列详解(AbstractQueuedSynchronizer)
目录AQS中的等待队列:是一个双向链表,并使用了“CLH锁”的思想实现等待队列一.CLH锁二.Node的数据结构:记录了等待状态、当前线程、前后节点的引用三.Node如何入队acquire(int arg):获取资源acquireQueued(final Node node, int arg):通过入队获取资源shouldParkAfterFailedAcquire(Nod...
2019-03-17 20:11:41
2321
2
原创 mysql的共享锁(S)、排他锁(X)、意向共享锁(IS)、意向排他锁(IX)的关系
一.S锁和X锁:S锁和X锁都属于行数 兼容性 加锁方式 S锁:共享锁 加了S锁的记录,允许其他事务再加S锁,不允许其他事务再加X锁 select…lock in share mode X锁:排他锁 加了X锁的记录,不允许其他事务再加S锁或者X锁 select…for update 二.意向锁:表锁,相互兼容,表明“某个事务持有了锁、或准备去持有...
2019-02-24 23:12:53
20013
4
原创 Mysql的Gap锁(间隙锁)详解
间隙锁实质上是对索引前后的间隙上锁,不对索引本身上锁。根据检索条件向左寻找最靠近检索条件的记录值A,作为左区间,向右寻找最靠近检索条件的记录值B作为右区间,即锁定的间隙为(A,B)。间隙锁的目的是为了防止幻读,其主要通过两个方面实现这个目的:(1)防止间隙内有新数据被插入。(2)防止已存在的数据,更新成间隙内的数案例如果事务A开启一个事务,执行select * from tes...
2019-02-24 21:14:45
23841
8
原创 Mysql锁详解(行锁、表锁、意向锁、Gap锁、插入意向锁)
锁:对 “某种范围” 的数据上 “某种锁”1.“某种范围”:行、表 2.“某种锁”2.1 共享锁Shared Locks(S锁)1、兼容性:加了S锁的记录,允许其他事务再加S锁,不允许其他事务再加X锁2、加锁方式:select…lock in share mode2.2 排他锁Exclusive Locks(X锁)1、兼容性:加了X锁的记录,不允许其他事务再加S锁或者X锁2、加锁方式...
2018-11-18 21:03:44
26851
5
原创 ForkJoinPool实现原理和源码解析
这是在部门做技术分享的时候写的一篇学习笔记,顺便贴在这里给大家看看,欢迎指出错误,共同学习ForkJoin是什么ForkJoin是用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。数据结构关键的调用图源码解析p...
2018-11-11 22:35:51
5315
6
原创 HashMap:为什么容量总是为2的次幂
HashMap:为什么容量总是为2的次幂HashMap是根据key的hash值决策key放入到哪个桶(bucket)中,通过 tab=[(n - 1) & hash] 公式计算得出。其中tab是一个哈希表1)为什么要通过 (n - 1) & hash 决定桶的索引呢?(1)key具体应该在哪个桶中,肯定要和key挂钩的,HashMap顾名思义就是通过hash算法高效的把存储
2018-09-24 21:13:32
30994
9
原创 IO多路复用:select,poll,epoll的区别
I/O多路复用: (1)单个线程,通过记录跟踪每个I/O流(sock)的状态,来同时管理多个I/O流) 。(2)I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。
2017-08-24 13:12:09
752
转载 mysql:InnoDB的主键采用聚簇索引,二级索引不采用聚簇索引
我的归纳:(1)InnoDB的主键采用聚簇索引存储,使用的是B+Tree作为索引结构,但是叶子节点存储的是索引值和数据本身(注意和MyISAM的不同)。(2)InnoDB的二级索引不使用聚蔟索引,叶子节点存储的是KEY字段加主键值。因此,通过二级索引查询首先查到是主键值,然后InnoDB再根据查到的主键值通过主键索引找到相应的数据块。
2017-08-20 10:51:25
7991
1
原创 算法:记一次快速排序
public static void main(String[] args) { int[] param = new int[]{1,-1,3,7,-2,8}; int[] res = sort(param,0,param.length-1); for (int re : res) { System.out.print(re);
2017-08-19 23:46:44
335
原创 Java的notify,wait,notifyAll方法使用介绍
wait, notify, notyfyAll 都是Object里面的方法,每个Object其实自身都带有一个隐形锁。一般wait和notify都是要配合synchronized一起使用的假设线程A执行一下代码,首先获得test的锁,然后test调用wait方法(在线程A中调用wait方法的时候,线程A会释放test的锁)
2017-08-17 22:56:14
643
原创 为源码写注释: ReentrantLock
ReentrantLock: 先简单讲下ReentrantLock里面的成员变量。(1)int state:用于分辨当前锁是否已经被锁上 1)state=0: 未上锁 2)state>=1:已上锁,并且state>=1时记录的时重入锁的次数(2)Node head:引用始终指向获得了锁的节点,它不会被取消。acquire操作成功就表示获得了锁,acquire过程中如果中断,那么acquire就
2017-08-07 23:09:40
370
原创 金蝶随手记java面经
面试的是java开发岗1.首先是做一份笔试题,笔试题比较简单,主要是设计模式,sql查询,linux命令2.面试分3轮第一轮:1个面试官,总体答得还行比较全面的技术面试,包括了(1)jvm内存模型:堆栈,方法区,程序计数器,本地方法区,以及他们各种的作用(2)jvm垃圾回收算法:复制算法,标记-清除,标记-整理,以及他们使用的场景和大致的作用1)多线程:synchron...
2017-08-04 20:29:03
4814
1
原创 redis:RDB快照失败问题排查与处理
排查与解决redis快照问题错误错误如下:MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details
2017-07-31 19:27:12
4658
1
原创 docker搭建tomcat javaweb环境
还没有安装docker,可以参考下面链接 centos 安装 docker1.下载centos镜像,并查看centos镜像的id $ docker pull centos$ docker images 2.下载jdk、tomcat 并放在宿主主机/data目录$ wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.5.8/bin/apa
2016-11-17 18:10:13
2323
3
原创 java 原码、反码、补码计算 以及 取反(~)运算
1. 原码、反码、补码:(1)在Java中,所有数据的表示方式都是以补码形式来表示(2)正数:原码、反码、补码相同(3)负数:符号位为1,其余各位是对原码取反,然后整个数加1(4)~按位取反(反码加1称为补码。)步骤就是先求出这个数(因为java存的数是补码)的原码,然后对原码取反得到X,这个X就是我们要求的那个数的补码2. 取反(~)运算(1)n=37 ,二进制数就...
2016-10-18 16:51:34
21004
7
原创 rabbitMq集成Spring后,消费者设置手动ack,并且在业务上控制是否ack
rabbitMq集成Spring后,消费者设置手动ack,并且在业务上控制是否ack
2016-08-19 19:49:29
41245
8
原创 idea的svn突然显示错误“E155021: E155021:”解决方法
原因:由于本地使用TortoisSVN的版本从1.7升级到1.8(或者说升级都某个版本),导致IDEA编辑器里面默认的svn版本跟不上。所以idea里面使用svn会报错,找不到路径。IDEA里面默认的SVN对TortoisSVN1.8是不支持的。解决方法:下载安装文件,并进行安装。安装完成后重启IDEA会发现一切都好了(而且安装包默认配好了环境变量,可以在cmd上使用svn命令了!):
2016-06-30 10:19:00
4325
原创 netty:protobuf的编码器ProtobufVarint32LengthFieldPrepender()、解码器ProtobufVarint32FrameDecoder()
netty:protobuf的编码器ProtobufVarint32LengthFieldPrepender()、解码器ProtobufVarint32FrameDecoder()
2016-03-22 19:02:36
13073
6
Netty权威指南--私有协议栈功能实现
2016-03-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人