自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 map 和 flatMap区别

map和flatMap区别,首先看源码, 一个返回值被optional包装了,一个没有。 所以flatMap可以返回一个或者多个 ,而map只能返回一个,这是二者本质的区别。优雅判空: 使用optional, 层层包装,判空。...

2019-03-14 19:41:57 3124

原创 查找最消耗cpu的java线程

  2中方法, 推荐第二种 .   1. top 找到最消耗的java进程id 2.  ps -mp pid -o Thread ,tid ,time 3.   转换为16进制   printf "%x\n" nid 4 .  jstack  pid  | grep nid -A 30  最后一个命令 -A 30 是显示匹配后面30行 ,就找到堆栈信息了  下面...

2018-07-19 15:45:44 877

原创 线程池

Java 标准类库提供了几种基础实现,比如ThreadPoolExecutor、ScheduledThreadPoolExecutor,ForkJoinPool这些线程池的设计特点在于其高度的可调节性和灵活性,以尽量满足复杂多变的实际应用场景​​​​ ...

2018-07-17 00:12:17 176

原创 mysql索引 覆盖索引/MRR/ICP

B+树的特点就是高扇出性,因此在数据库中,树的高度一般都在2~4层.聚集索引: 一张表一个聚集索引 。 使用范围就是 range query 主键 . 和主键 order by 没有消耗。数据叶节点之间根据双向链表链接.  (相当于primary 索引)辅助索引:   叶子节点不包含行记录的全部数据。  叶子节点包含书签, 书签可以找到与索引对应的行数据。 , 因此辅助索引的书签就是相应行数据的聚...

2018-07-07 12:16:08 777 1

原创 浅谈MySQL的锁

分为三类Record lock    锁定单行记录gap lock     j间隙锁, 不包含记录本身next-key lock  : 目的是为了解决 Phantom Problem。 锁定一个范围.  包含记录本身效果 : 解决了幻象读Phantom Problem , 相同查询,正是因为 next-key lock , 锁定了一个范围, 所以执行查询不会产生幻象读.  oracle 需要在 s...

2018-07-07 12:10:13 171

翻译 高并发读写缓存不一致解决:数据库与缓存更新与读取操作进行异步串行化

比较复杂的数据不一致问题描述数据发生了变更,先删除了缓存,然后要去修改数据库,此时还没修改一个请求过来,去读缓存,发现缓存空了,去查询数据库,查到了修改前的旧数据,放到了缓存中数据变更的程序完成了数据库的修改 。 完了,数据库和缓存中的数据不一样了。。。。 只有在对一个数据在并发的进行读写的时候,才可能会出现这种问题 其实如果说你的并发量很低的话,特别是读并发很低,每天访问量就1...

2018-06-24 16:12:53 3157

翻译 最经典的缓存+数据库读写的模式,cache aside pattern

1、Cache Aside Pattern(1)读的时候,先读缓存,缓存没有的话,那么就读数据库,然后取出数据后放入缓存,同时返回响应(2)更新的时候,先删除缓存,然后再更新数据库2、为什么是删除缓存,而不是更新缓存呢? 原因很简单,很多时候,复杂点的缓存的场景,( 因为缓存有的时候,不简单是数据库中直接取出来的值目前我们项目的缓存还是简单的和数据库相同的值 , 不复杂,所以更新缓...

2018-06-24 14:22:36 1618 1

转载 “Java 是解释执行”,这句话正确吗

对于“Java 是解释执行”这句话,这个说法不太准确。我们开发的 Java 的源代码,首先通过 Javac 编译成为字节码(bytecode),然后,在运行时,通过 Java 虚拟机(JVM)内嵌的解释器将字节码转换成为最终的机器码。但是常见的 JVM,比如我们大多数情况使用的 Oracle JDK 提供的 Hotspot JVM,都提供了 JIT(Just-In-Time)编译器,也就是通常所说...

2018-06-24 10:00:21 924

原创 Redis Cluster高可用(HA)集群环境搭建详细步骤

一 原理介绍   没有使用一致性hash, 而是引入了哈希槽的概念。共有16384个哈希曹槽,每个key通过取模来决定放置哪个槽,使用的hash算法也比较简单,就是CRC16后16384取模。使用的hash算法也比较简单,就是CRC16后16384取模举个例子: 当集群有三个节点,A :0-5500,B :5501 – 11000C  : 11001 – 16384二 Re...

2018-06-23 19:01:05 365

原创 封装数据库异常

2018-06-23 11:29:43 238

原创 mybatis 拦截器的实现

2018-05-25 17:43:08 209

原创 密码学

1. 私钥加密技术 :           明文: A B C D E            密文:Q W E R T             加密密钥就是上面的密文。 这种简单的称为私钥加密技术或者说对称密钥加密技术。 这个跟人想法很符合。2. 公钥加密技术         由于上面的运算量是可控的,且发送者和接收者必须同事拥有密钥。 所以引入了公钥加密技术。这种特性下,加密密钥可以被公开。  ...

2018-05-09 19:57:36 149

原创 netty 常用接口

2018-05-06 23:32:43 289

原创 Idea 远程调试 Java 代码

服务端配置  在tomcat 的catalina.sh加上下面一行: CATALINA_OPTS="$CATALINA_OPTS-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"idea配置  下面是截图说明

2018-05-06 13:01:48 359

原创 Jenkins重构失败解决

发现jenkins重构多次后,部署到远程tomcat的时候要么undeploy 失败,要么deploy失败,这时需要删除远程tomcat的webapps下面的core.war core文件并重启才会重构成功,针对这种情况,进行优化. 整体思路是在jenkins build成功后,ssh 到远程tomcat主机,将远程tomcat进行重启并删除webapps下面的core 包。 随后让jenkins...

2018-05-06 13:00:03 548

原创 SpringCloud搭建

1.1 spring boot简介: Spring cloud 基于spring boot 去构建, 所以先介绍下 spring boot.Spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西。因此就有了SpringBoot框架,它的作用很简单,就是帮我们自动配置。SpringBoot框架的核心就是自动配置,只要存在相应的jar包,Spring就帮我们自动配置。如果默认配置...

2018-05-06 12:57:10 2840

翻译 nohup 和 &

bg之后输出还是会到终端

2018-05-05 19:19:21 120

原创 dp动态规划 0-1 背包

2018-05-04 19:03:04 95

转载 网络 TCP/IP

TCP UDP 属于传输层。   下图是 TCP/IP 参考模型 

2018-05-04 17:01:01 97

原创 MyBatis——一级缓存和二级缓存

一级缓存默认开启, 一个sqlSession内是共享的。 和spring整合的时候, 需要使用spring 管理sqlSession,不然一个查询是一个sqlSession, 不会共享一级缓存。  二级缓存默认不开启,跨session的...

2018-05-04 16:27:24 118

转载 Innodb与Myisam引擎的区别与应用场景

1. 区别:(1)事务处理:MyISAM是非事务安全型的,而InnoDB是事务安全型的(支持事务处理等高级处理);(2)锁机制不同:MyISAM是表级锁,而InnoDB是行级锁;3)select ,update ,insert ,delete 操作:MyISAM:如果执行大量的SELECT,MyISAM是更好的选择InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,...

2018-05-04 16:11:17 117

原创 dispatcherServlet

dispatcherServlet 先用处理器到contorller, 再找视图 ;  dispatcherServlet是一个servlet实现类,转发请求

2018-05-04 15:32:01 177

转载 BIO和NIO区别及各自应用场景

BIO和NIO是两种不同的网络通信模型,现如今NIO已经大量应用在Jetty、ZooKeeper、Netty等开源框架中。 一个面向流、一个面向缓冲区一个是阻塞式的、一个非阻塞一个没有io多路复用器、一个有下面通过一个例子解释两者区别:假设当前服务端程序需要同时从与多个客户端建立的连接读取数据。 使用BIO   BIO是阻塞式IO, 单线程处理者线程可能阻塞...

2018-05-03 20:56:39 1094

转载 jvm五大区及作用学习总结

程序计数器程序计数器(Program Counter Register)是JVM中一块较小的内存区域,保存着当前线程执行的虚拟机字节码指令的内存地址。Java多线程的实现,其实是通过线程间的轮流切换并分配处理器执行时间的方式来实现的,在任何时刻,处理器都只会执行一个线程中的指令。在多线程场景下,为了保证线程切换回来后,还能恢复到原先状态,找到原先执行的指令,所以每个线程都会设立一个程序计数器,...

2018-05-02 20:25:17 348

原创 线程池ThreadPoolExecutor

corePoolSize:线程池中核心线程数的最大值maximumPoolSize:线程池中能拥有最多线程数workQueue:用于缓存任务的阻塞队列keepAliveTime:表示空闲线程的存活时间。TimeUnitunit:表示keepAliveTime的单位。threadFactory:指定创建线程的工厂handler:表示当workQueue已满,且池中的线程数达到maximumPoolS...

2018-05-02 20:00:47 78

原创 Semaphore

Semaphore是JDK1.5中引入的,中文一般译为信号量,我把它翻译为信号局. 是一个类。适用场景系统中某类资源比较紧张,只能被有限的线程访问,此时适合使用信号量....

2018-05-02 16:44:42 64

转载 Condition.await, signal 与 Object.wait, notify 的区别

Object 类中 wait,notify 与 notifyAll 方法可以用来实现线程之间的调度,比如在阻塞队列(BlockingQueue)的实现中,如果队列为空,则所有消费者线程进行阻塞 ( wait ),如果某一个时刻队列中新添加了一个元素,则需要唤醒某个或所有阻塞状态的消费者线程( notify,notifyAll ),同理如果是队列已满,则所有生产者线程都需要阻塞,等到某个元素被消费之...

2018-05-02 15:46:37 1511

原创 Future 简介

Future这是在JDK1.5新增的接口,展示异步执行的结果(结果,将来的,Future)。他有以下几个方法:cancel: 尝试去取消这个任务,如果该任务已经完成,或者已经取消,或者其他什么原因将不能取消。get: 可以通过get方法获取异步线程的结果,如果没有执行完成则阻塞当前线程,等待异步线程执行完获取结果。isDone: 判断该任务是否已经完成。如果是被取消,中断等,该方法也会返回true...

2018-05-02 15:17:10 124

转载 CountDownLatch使用场景及分析 CyclicBarrier 使用

使用场景:比如对于马拉松比赛,进行排名计算,参赛者的排名,肯定是跑完比赛之后,进行计算得出的,翻译成Java识别的预发,就是N个线程执行操作,主线程等到N个子线程执行完毕之后,在继续往下执行。也就是说主线程在等待所有其它的子线程完成后再往下执行CyclicBarrier可以用于多线程计算数据,最后合并计算结果的应用场景。比如我们用一个Excel保存了用户所有银行流水,每个Sheet保存一个帐户近一...

2018-05-02 15:01:41 219

转载 java中ArrayList、LinkedList、Vector的区别

先说共同点: 都继承自List接口ArrayList  里面数组类型,可以存放任意类型的对象。ArrayList不具有线程安全性。LinkedList可以看做为一个双向链表,LinkedList也是线程不安全的,在LinkedList的内部实现中,并不是用普通的数组来存放数据的,而是使用结点<Node>来存放数据的,有一个指向链表头的结点first和一个指向链表尾的结点last。Lin...

2018-05-02 14:36:33 103

原创 java 集合

先奉上java9的API介绍collection接口集成自Itreable 接口,故拥有迭代能力. 1. 为什么要有集合          本质上是一些可以复用的函数2. 泛型好处       编译器提醒报错,避免了运行时的ClassCastException异常, 不用生成类型检查的字节码,更快3. 迭代器接口        用来遍历集合, 并且提供移除元素方法 4. 为什么迭代器不提供add方...

2018-04-29 16:07:27 86

原创 mysql数据库索引

索引也是数据库的一种对象, 可以缓存在数据库中 InnnoDB 常见索引        1  B+树索引         2   全文索引           3  哈希索引    哈希索引是自适应的, 不能认为干预。为啥我可以选?     B+树是传统意义上的索引,根据key value快速找到数据。 由B树和索引顺序访问方法演化而来。 所有记录都放在叶子节点上,并且是顺序存放的。B+树会维持平...

2018-04-29 14:29:11 67

转载 mysql 优化

参考阿里巴巴 :   mysql 的 offset 不太好, 先取offset行, 再取 N行。 十分低下, 所有可以利用子查询优化超多分页场景

2018-04-21 21:58:01 98

原创 StatementHandler学习

StatementHandler 接口位于executor包下面。 和ParameterHandler在一起, 主要见到的是parameterize这个方法   首要的实现类是BaseStatementHandler BaseStatementHandler构造器参数好多 prepare 方法就是设置超时时间,fetchSize那些,返回statement SimpleStatementHandl...

2018-04-13 22:05:34 340

原创 mybatis源码阅读体会

Executor 接口。 提供执行sql的接口, 像查询,update,提交,回滚事物, 创建mybatis缓存key , 获取当前事物, 包装executor等方法。从此接口可以看出MappedStatement是一个对mybatis很重要的类, RowBounds类很简单,只有offset偏移量和limit限制数据量。ResultHandler 结果处理器。BoundSql 绑定的sqlEx...

2018-04-13 15:16:11 269

空空如也

空空如也

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

TA关注的人

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