- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 《成长之路 -JAVA并发系列》 - (四)Lock体系
Lock体系 1.lock与Synchronize比较: (1)Synchronize是一个关键字,JAVA语言内置的特性;Lock是一个类,通过这个类实现同步访问。 (2)Synchronize不需要关心锁的获取与释放;lock需要手动获取释放锁,比较灵活。 2.AQS(AbstractQueuedSynchronizer): (1)是什么? AQS采用了模板方法设计模式,实现了同步状态的管理,线程排队等底层操作;具体的实现者只需要通过AQS提供的模板方法实现同步组件的语义即可。 (2)AQS如何维护锁状
2020-09-11 17:00:06
822
原创 《成长之路 -JAVA并发系列》 - (三)并发关键字
Synchronized 1.使用: Synchronized可以在代码块和方法中使用,可以锁住类对象和实例对象,如果锁的是类对象的话,尽管new多个实例对象,但他们仍然是属于同一个类依然会被锁住,即线程之间保证同步关系。 具体分类 被锁对象 静态方法 类对象 实例方法 实例对象 实例对象 this 实例对象 class对象 类对象 任意实例对象obj 实例对象obj 2.moniter机制: 每个对象和class都有一个监视器关联,内部有有一个锁,注意监视器是外部关联,
2020-09-10 16:05:34
837
原创 《成长之路 -JAVA并发系列》 - (二)并发理论JMM
上一节我们知道了线程的基本概念,对多线程有了基本的认识。显然多线程远远不止这些,在并发编程时常常会出现线程安全的问题。那什么是线程安全呢?通俗讲在多线程下代码执行的结果与预期正确的结果不一致,该代码就是线程不安全的,否则则是线程安全的。 JMM 1.抽象结构: JVM把JMM分为线程栈区和堆区。java线程 --> 工作内存 --> 主内存。线程运行时会将数据从主内存拷贝到工作内存,操作完成后再刷新到主内存。 2.共享数据: 共享数据就是线程需要拷贝到工作内存的数据,java程序中的实例域,
2020-08-27 18:29:01
874
原创 《成长之路 -JAVA并发系列》 - (一)JAVA并发基础
前言 大学里自己总是对学习各种语言、框架、中间件那些能实实在在做出东西的技术乐此不疲,看着自己做出的系统总能获得成就感。但慢慢地这种成就感越来越少,我无非就是各种组装调用了别人写好的API再加点业务逻辑罢了,这算是写代码吗?我陷入沉思。我开始去学习基础的东西,多线程、JMM、JVM、算法,阅读框架源码,了解框架的架构设计,学习写高质量的代码,体会设计模式的使用。这时才发现原来还有那么多重要的东西,真的就是你知道的越多,你不知道的越多。 正文 概念理解 同步和异步: 同步和异步的概念描述的是用户线程与内核的交
2020-08-22 17:10:31
847
原创 《成长之路 - Redis系列》 - (三)Redis实战
前言 前两节中比较重要的理论知识都已经介绍过了,理论知识不可或缺,但实际操作更为重要,毕竟理论是为实战服务的。第一节中说到redis能显著提高系统的性能和并发度,考虑到这两点,我想秒杀系统确实是一个不错的选择。 项目架构图: 环境搭建: redis cluster: aof,rdb,主从读写分离设置 redis分页 ...
2020-08-19 20:38:25
962
原创 通俗讲解最短路径算法----Dijkstra
前言 最短路径问题是比较经典的一个问题,而Dijkstra是解决这种问题经典算法。 算法思想 Dijkstra采用广度优先和贪心的思想,简单来说就是从一点出发,将边的值赋给点,每次选择值最小的点作为下一次循环的起点直到所有点都被遍历过。需要注意的是Dijkstra算法不能处理存在负权值的情况。 1.先定义一个数组result存放顶点的值初始化为0,再建立一个visited数组用来记录已经遍历过了的顶点(与DFS与BFS中的一样); 2.从节点v1开始,先将v1放到visited数组,visited[0]=
2020-07-30 12:08:03
877
原创 《成长之路 - Redis系列》 - (二)Redis进阶
前言 上一篇介绍了redis基础类型,持久化机制、同步机制以及redis高可用大概原理。 传送门:《成长之路 - Redis系列》 - (一)Redis基础 几种缓存问题 缓存雪崩: 缓存雪崩是指key值大量失效或者redis节点挂掉,这时有大量请求直接打到了数据库,导致数据库扛不住直接挂掉。 应对: 1.针对key值大量失效可以对key的过期时间加上随机值,这样key就不会再同一时间过期了。 2.对于redis节点挂掉。我们可以设置使用Redis Sentinel 和 Redis Cluster 保
2020-07-28 18:52:03
1951
原创 迷宫:深度优先(DFS)和广度优先(BFS)的简单应用
前言 深度优先算法(DFS)和广度优先算法(BFS)是比较基础的算法,在图论算法中还是很重要的。 深度优先算法(DFS) 算法思想:从一个节点开始沿着一条路径走到底。在上图中从1节点开始,先走到2(当然也可以是3或4),再从2开始继续向下走,因为只有5与2相连,所以到5然后到9。到了9之后以为没有与9相连的了,所以要回退,9-5-2-1,又回到1,这时与1相连的还有3、4没走,选一个接着走到底。 广度优先算法(BFS) 算法思想:从一个节点开始访问所有与这个节点相连的。在上图中从1节点开始,与1相连的有2
2020-07-23 15:42:56
1518
原创 《成长之路 - Redis系列》 - (一)Redis基础
前言 项目中使用redis主要从性能和并发两个角度考虑。在关系型数据库中因为涉及到IO操作,即使有索引但也是非常耗时的,而且数据库的并发性不高,在大量请求打到数据库时它是撑不住的。但往往数据库是项目中最重要的一部分。redis能比较好的解决这一问题。 基本数据结构 String: String是最简单的数据类型,通过set和get操作能实现简单的KV存储。我们可以用它存字符串也可以存序列化后的对象。 应用场景: 1.我们可以用它做常规的缓存,redis是支持高并发的,能够大大降低数据库的压力,提高系统性能。
2020-07-20 20:40:54
799
原创 简单理解几种IO模型
前言 最近在学习的过程中总是遇到IO模型这个概念,对它只有些模糊的印象,只知道NIO,BIO这些名词,再具体些就说不出啥所以然了。今天抽空特地好好看了下IO模型,发现确实能帮我更好的了解程序。比如说,我们都知道Redis是单线程的,那它是如何处理高并发的呢?那就是采用IO多路复用模型监听多个Socket,然后再用对应的handle进行处理。看到了吧,了解IO模型还是很有用的。(刚学会就出来嘚瑟的丑恶嘴脸~) 简单理解 首先我们举一个经典例子: 1.这天小龙去餐馆吃饭,他点了份蛋炒饭,然后坐在凳子上等着啥也不
2020-07-15 19:09:41
858
原创 通俗讲解KMP算法,简单易懂
前言 相比较传统的暴力匹配字符串算法,KMP算法有了比较大的改进,但是它却更难理解,尤其是next数组的求解部分。本人也反复学习了几次,每次弄懂但几个月就忘了,然后就找博客重新学,下次忘了就能看自己的博文了,哈哈。 算法思想 模式串 “ABCABCABDA”,目标串:“ABCABD”,暴力算法中当目标串第六个字母D不匹配时,那么将从模式串第二个字母B开始从头匹配。我们自己判断上面字符串是否匹配时,通常的做法是遇到不匹配时,那么我们就在模式串中找到第二个以A为开头的匹配。KMP算法也是这样,但是有一个问题,就
2020-07-10 18:50:59
1244
1
原创 图解比较几种排序算法:快速排序、归并排序、堆排序
算法思路: 首先得到数组的第一个数,将比它小的放到它的左边,比它大的放到右边。然后递归操作就可以了。 图解: 1.以上一组数据,先从数字6开始,记录下数字6作为基准数字,即上图红色,在数组的末端数字9开始向前与6比较找到小于6的数字,9大于6,下一个,8大于6,再下一个,4小于6,这时将4移到6的位置。 2.接着从数组首端即此时第一个4所在的位置开始向后找到大于6的数字,一直到7发现大于6,这时将7移到4一开始时候的位置,即第二个4所在的位置。 3.此时发现两个数字7之间还有数字9没有进行比较,所..
2020-07-03 13:33:07
2656
原创 ConcurrentLinkedQueue中offer与poll方法源码分析
ConcurrentLinkedQueue中offer与poll方法源码分析 前言 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown
2020-05-31 15:40:23
2652
转载 hadoop集群启动成功但live node为0
https://blog.youkuaiyun.com/Meoop/article/details/50806724
2019-05-15 15:23:00
450
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅