自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (2)
  • 收藏
  • 关注

原创 【算法笔记】01. 如何正确的学习和练习算

1. 注意:编写多种解法,并比较多种解法优劣。1. 分析多种解法,及其时间和空间复杂度。1. 耗时:5min~15min。2. 不是一定要做困难的题目。1. 觉得困难的,就是不会的。1. 需比较多种解法的优劣;2. 解决了困难,才能进步。2. 查看解法(没有思路的情况下)1. 详细分析和理解题目。2. 目标:优化不同解法的熟练度。2. 目标:熟悉题目以及其解法。1. 反复练习到熟练。2. 选择最优的解法。2. 理解和编写代码。2. 优化算法,进入前50%1. 反复练习同一类题目。2. 发现缺陷,解决缺陷。.

2022-08-17 00:38:40 190 1

原创 Java Lock 锁的特性和使用(ReentrantLock ReentrantReadWriteLock Condition 可重入锁、读写锁 是什么 使用场景 与Synchronized的区别)

Lock入门跟同步关键字有同样的内存语义。与Synchronized的比较对比与 synchronized 相比,ReentrantLock 更灵活。他支持阻塞等待/可中断的等待/非阻塞的获取/超时等待 等 阻塞期间不会响应中断 支持更细粒度的可重入锁代码示例// ************************** Synchronized **************************// 1.用于代码块synchronized (this)...

2020-05-27 00:50:10 1036 1

原创 MySQL中,一条update更新语句是如何执行的?详解MySQL日志——redolog(重做日志) 和 binlog(归档日志)是什么、有什么用,MySQL如何做到如何恢复数据、主从同步、动态扩容

-

2020-05-26 23:18:40 713

原创 你真的了解Synchronized吗?深入JVM,图文并茂的理解Synchronized的加锁原理(锁的概念、同步关键字的概念、同步关键字的原理)

提纲认识锁锁的概念悲观锁概念:假定会发生并发冲突,同步所有对数据的相关操作,从读数据就开始上锁。 实例:Synchronized 就是悲观锁乐观锁概念:假定没有冲突,在修改数据时如果发现数据和之前获取的不一致,则读最新数据,修改后重试修改。 实例:CAS机制自旋锁概念:不放弃CPU事件,不断使用 CAS 尝试对数据进行更新,直到成功 实例:AtomicInt 使用自旋锁,保证数据的原子性 其实也是一种乐观锁可重入锁概念:同一个线程,在拿到一次锁之后,可以继续调用

2020-05-26 01:54:37 305

原创 IDEA 2020.1 版自动导入MAVEN依赖的方法(新版MAVEN无法自动导入/更新POM依赖、MAVEN设置自动更新、自动更新快捷键)

新版的IDEA为了防止 pom 更新时,MAVEN 自动导包时卡死的问题,取消了自动导包机制。但新增了导入按钮和快捷键。问题问题idea 升级到 2020.x 版后,变更 MAVEN 不会自动更新依赖、也没有设置选项。解决通用当我们修改了 maven 依赖以后,当前 pom 文件的右上角会出现一个 maven 的小图标,点一下就可以更新依赖了。快捷键将鼠标放到 maven 图标上后,会出现快捷键提示。MAC Shift + Command + O Win...

2020-05-21 17:15:39 24247 16

原创 图文并茂,从源码的角度,深入理解线程池原理(总体设计、线程池的生命周期、任务调度、Worker工作线程)

写在前面线程池是基于「池化」思想锁设计的线程管理和任务调度工具好处降低资源消耗:重复利用已创建(池化)的线程,降低线程创建和销毁造成的性能损耗。 如果 创建与销毁消耗的时间 > 任务执行时间,是很低效的。 提高响应速度:任务到达时,无需等待线程创建即可立即执行。 提高线程的可管理性:线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会因为线程的不合理分布导致...

2020-05-06 23:27:45 444

原创 重新认识线程池-线程池入门(概念、方法定义、Executor 工具类、执行过程)含图示、代码演示

本文侧重于线程池入门,线程池进阶请关注后续文章主要讲了:什么是线程池、线程池的 API、TreadPoolExecutor、提交任务时发生了什么、代码演示为什么要用线程池为了更好的控制线程数量,而且将任务提交和线程维护解耦。线程是不是越多越好?线程在 java 中是一个对象,在操作系统是一种资源分类。线程创建、销毁需要时间。如果创建时间+销毁时间 > 执行任务时间...

2020-05-06 00:56:17 202

原创 CPU多级缓存、MESI缓存同步协议、指令重排、内存屏障解决指令重排和多级缓存带来的问题

入门本节主要介绍了 CPU 多级缓存、CPU 指令重排序、内存屏障。其中 多级缓存、指令重排序 都是 CPU 为了执行效率而做的优化。内存屏障是为了解决多线程中指令重排序所带来的的问题。CPU性能优化手段缓存作用尽可能的降低 CPU 访问主内存带来的开销多级缓存分类L1 Cache(一级缓存) 是CPU第一层高速缓存,分为数据缓存和指令缓存。 ...

2020-04-29 01:32:38 492

原创 图解类加载机制、双亲委派模型、类的热加载(含代码演示)

本文解答的问题类是如何被加载的 ClassLoader 如何确定要加载的类的位置 什么是双亲委派模型?代码中如何体现? 类的热加载准备运行时数据区JVM用来存储加载的类信息、常量、静态变量、编译后的代码等数据 虚拟机规范中这是一个逻辑区划。具体实现根据不同虚拟机来实现。 oracle的HotSpot在java7中方法区放在永久代 java8方法区放在元数据空间...

2020-04-28 01:09:47 237

原创 Redis之主从复制(主从复制的原理、复制流程、应用场景、故障恢复以及可能遇到的坑)含实例和代码演示

入门概要为什么用避免 redis-server 单点故障 单节点 QPS 有限场景读写分离场景,规避redis单机瓶颈 master:写 slave(replica):读 故障切换,master出问题后还有slave节点可以使用使用搭建主 Redis Server 以普通模式启动;从服务器可以选择多种方式启动命令行#连接需要实现从节点的re...

2020-04-27 23:30:41 627

原创 详细分析冒泡排序、选择排序、插入排序(最好/最坏/平均时间复杂度(有序度)、稳定性、内存消耗(原地排序))

如何分析排序算法最好、最坏、平均时间复杂度算法的时间复杂度,会随着排序集合的有序性而改变。我们需要分析不同算法在不同数据下的表现 最好时间复杂度:在完全有序的情况下的时间复杂度(满有序度) 最坏时间复杂度:在最坏情况下的时间复杂度(有序度为0) 内存消耗就是排序算法的 空间复杂度 原地排序:原地排序算法,就是特指空间复杂度是 O(1) 的排序算法。算法的稳定性如果待排...

2020-04-21 23:51:54 10909 2

原创 分布式一致性定理、算法(CAP定理/BASE理论/数据一致性模型/2PC/3PC/Paxos算法/墨菲定律/康威定律)

CAP定理所有的分布式系统都需要在 CAP 三者之间进行权衡分布式系统的三个指标CAP定理说的是在一个分布式软件系统中,CAP 不可能同时达到Consistency 一致性 Availability 可用性 Partition tolerance 分区容错性(高可用)分区容错性分布式系统的节点,会分布在多个子网中,每个子网叫做一个分区当数据只存在于 S2 的时...

2020-04-21 02:27:28 548

原创 什么是队列(基础概念/顺序队列/链式队列/动态扩容/循环队列)含示例代码

定义如何理解“队列”队列是一个操作受限的线性表 具有先进先出的性质 跟「栈」一样,分为顺序队列和链式队列用数组实现的顺序队列和用链表实现的链式队列主要要关注队满和队空条件 线性队列 > 队满:tail == n | 队空(没有数据):head == tail 链式队列 > 队满:无界 | 队空:head.next = tail 线性队列的数据搬迁:当队满时,...

2020-04-20 22:48:41 587

原创 什么是栈/Java中的栈(栈定义/栈的时间复杂度/实现一个栈/栈的动态扩容)含示例代码

入门如何理解“栈”他是一种受限的线性表 分为 顺序栈/链式栈 是一种 后进先出 的数据结构如何实现一个“栈”栈主要包含两个操作,出栈和入栈。 可以使用 链表或数据 存储数据 分类:顺序栈、链式栈支持动态扩容的顺序栈顺序栈可以支持动态扩容 当容量达到上限,进行一次数据迁移即可。 复杂度分析 最好时间复杂度:O(1) 简单的 push 操作。 最...

2020-04-20 22:43:31 836

原创 链表基础(链表、数组性能对比、链表翻转、回文子串)

链表的类型链表也是线性表的一种单链表 双向链表 循环链表 双向循环链表链表/数组的性能对比随机取的时间复杂度 数组:通过下标取是 O(1);取指定值是 O(n) 链表:因为链表的内存地址不连续,所以没办法通过下标取;取指定值是 O(n) 插入/删除 数组:涉及到数据迁移,平均时间复杂度是 O(n) 链表:找到指定值的时间复杂度为 O(n),删除的时间复杂...

2020-04-17 01:09:06 189

原创 Java多线程之如何正确的中断线程(Interrupt/Stop的使用)含示例代码

概要操作的原子性破坏线程安全的停止Stop正确的线程停止Interrupt手动检测中断状态操作的原子性使用 synchronized 关键字,就是为了保证线程安全(操作的原子性) 即,线程内的变量 a/b 应该都自增成功 public class StopThread implements Runnable { private int a = 0;...

2020-04-16 22:25:14 306

原创 ZooKeeper 集群详解(ZK集群的概念/Leader选举机制/ZAB原子广播协议/集群的崩溃恢复/恢复后的数据同步)

ZooKeeper提供了一个类似于Linux文件系统的树形结构,同时提供了对于每个节点的监控与通知机制。本节将介绍ZooKeeper如何保证集群下的数据一致性,如何进行领导选举,以及数据监控/通知机制的语义保证。为什么需要集群为了提供可靠的ZooKeeper服务 超过半数服务器准备就绪,就可以对外提供服务 集群高可用设置至少需要三个服务器,建议使用奇数个服务器。如果只有两台...

2020-04-16 02:56:46 2046

原创 一张图,彻底理解Java中六种线程状态以及各状态之间的转换(含示例/测试代码)

目录状态分类状态转换CodeNew > Runnable > TerminatedNew > Runnable > Timed_Waiting > TerminatedNew > Blocked > Runnable > Terminated状态分类Java. Lang.Thread.StateNew尚未启...

2020-04-16 00:11:47 287

原创 Zookeeper ZK 的特性和核心概念(session/znode/acl/watch监听机制/自定义Serializer)

sessionhttps://zookeeper.apache.org/doc/r3.1.2/zookeeperStarted.html基础概念一个客户端链接生成一个 session,由 server 生成唯一的 sessionId tickTime 客户端通过tickTime(心跳时间)来保持会话 当超过 会话超时时候见(ticktime * 2)未收到心跳,则认为客户端...

2020-04-15 22:34:36 549

原创 Zookeeper 基础(分布式协调服务/ZK安装使用/ZK常用命令)

基础ZK 是什么https://zookeeper.apache.org/是啥:Apache ZooKeeper是一-种用于分布式应用程序的高性能协调服务,提供一种集中式信息存储服务。 特点:数据存在内存中,类型文件系统的树形结构(文件和目录),高吞吐量和低延迟,集群高可靠。 作用: 分布式同步(Distributed Synchronization)、命名服务(Namin...

2020-04-14 11:25:12 333

原创 【Java并发编程与高并发解决方案】JAVA内存模型JMM以及乱序执行优化(重排序)

编辑文章出现线程安全问题,一般是因为主存和工作内存数据不一致以及重排序,那今天就说一下这两个方面。乱序执行优化乱序执行优化是多核CPU为了提高效率而做的不符合代码规则的优化。int a = 1;int b = 1;int c = a + b;正常我们看到的执行顺序是A-B-C,但是因为CPU的重排序,运行顺序有可能变为B-A-C,这时候结果是不会受到任何影响的。...

2018-10-31 22:11:32 648

原创 【Java并发编程与高并发解决方案】CPU多级缓存与缓存一致性(MESI协议)

最近用到了很多多线程的问题,发现对于并发的理论只是还有些欠缺,在学习的时候也会慢慢积累一下文章~希望能跟更多的小伙伴更好的交流~目录 概述以及抛出几个问题为什么需要CPU多级缓存为啥要需要缓存Cachecache容量有限,命中率低,为啥还要他。缓存一致性 MESI开始详细说一下cpu、内存、缓存之间的关系如果只是读缓存的情况如果考虑写缓存的情况一致性...

2018-10-30 00:28:18 709

原创 MySQL面试常见问题总结(MySQL5.5阅读总结)

MySQL面试常见问题总结(MySQL5.5阅读总结)包括了:1.MySQL数据库的基本操作2.MySQL数据库的存储引擎3.MySQL数据表的基本操作4.MySQL中常用的几个数学函数5.MySQL中常用的几个字符串函数6.MySQL中的数据查询7.MySQL中的索引(MySQL索引概念)8.索引的语法(索引的创建、删除)

2017-11-13 15:49:39 564

HotspotOverview.pdf

HotSpot虚拟机的概况文档 *每一个java对象都是一个潜在的monitor(监视器) >synchronized 关键字 *所有现代JVM虚拟机都包含light-weight锁   >避免关联一个系统互斥信号量或者每个对象的条件变量(heavy-weight lock)   >当没有竞争时,使用原子变量进入或者退出monitor   >当有竞争时,退回到heavy-weight的OS锁 *高效,因为大多数锁都是没有竞争的 Light-weight Locking (轻-重锁) *每一个对象的第一个字节是 mark word *用来做同步和GC   >同样的如果之前计算过,就缓存hashcode *markWord的低位2个字节用来存储同步状态   >01 => unlocked   >00 => light-weight locked   >10 => heavy-weight locked   >11 => marked for GC Light-weight Locking (轻-重锁) *当对象被锁定时,mark word 被拷贝到线程栈的建造中的lock record   >又叫做,移位mark *使用原子操作CAS引导尝试使mark word 指向lock record *如果CAS成功,线程获得锁 *如果CAS失败,竞争:锁膨胀(制造heavy-weight 重锁)

2020-05-26

c3p0连接池_官方最新jar包_含源码_免费_程序文件

现在CSDN很多Jar不包含源码,特上传Jar+源码版本。_(:з」∠)_

2017-10-07

空空如也

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

TA关注的人

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