首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Autu
掘友等级
前端
每天的我都比昨天更强。
获得徽章 1
动态
文章
专栏
沸点
收藏集
关注
作品
赞
20
文章 19
沸点 1
赞
20
返回
|
搜索文章
最新
热门
【并发编程】安全发布对象与防止对象逸出(原因与防护方法)
首先来明确一下发布与逸出的概念。 发布对象:使一个对象能够被当前范围之外的代码所使用。 对象逸出:是一种错误的发布。当一个对象还没有构造完成时就使它被其他线程所见。 在日常开发中,我们经常需要发布对象,比如通过类的非私有方法返回对象的引用,或者通过公有静态变量发布对象。 这个类…
【并发编程】对线程安全性的理解(Atomic、sync、volatile、Lock)
当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,这个类就是线程安全的。 提供互斥访问,同一时刻只能有一个线程对它进行操作。 多次执行结果始终是5000,由此我们可以认为这个…
【并发编程】基础-初识Java内存模型
JMM是一种规范,规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值以及在必须时如何同步地访问共享变量。 Heap(堆):运行时的数据区,由垃圾回收负责,优势是可以动态分配内存大小,生存期不必事先告诉编译器,垃圾收集器会自动回收不再使用的数据。缺点是由于要在运行时…
【并发编程】基础-CPU多级缓存
MESI是一种协议,用于保证多个CPU cache之间缓存共享数据的一致。 MESI表示了缓存的4种状态。 M:被修改。指该缓存行只被缓存在该cpu的缓存中并且是被修改过的,与主存中的数据不一致。该缓存行内容将在未来某个时间点写回主存。 E:独享。M状态被写回主存后进入E状态,…
【数据结构】红黑树原理介绍及实现
红黑树是二分搜索树中的一种。 1.每个节点是红色或者黑色。 2.根节点是黑色。 3.每个叶子节点是黑色。 4.如果一个节点是红色,其孩子节点都是黑色。 5.从任意一个节点到叶子节点经过的黑色节点相同。 对于初学者,直接给出这样的5个性质会难以理解,因此我们先来了解2-3树。 红…
【数据结构】AVL(平衡二叉树)的基础实现
最少节点数( 是 Fibonacci polynomial 的第h+2个数)。 每个节点的平衡因子为其左右子树的高度差。 一个节点的平衡因子超过1或小于-1时就破坏了我们的平衡二叉树的定义。 二分搜索树在添加新节点时可能会失去平衡,而失去平衡的节点只可能在新节点的祖先节点上。所…
【数据结构】从零写一个并查集并层层优化
并查集 Union Find是一种很不一样的树结构,之前学习的树结构都是由父亲指向孩子,而并查集则是由孩子指向父亲的树结构。它可以非常高效地解决连接问题,如下图: 要求判断图中任意两点间是否存在一条路径连接这两个点。 并查集就可以高效地解决这一类问题。 1.并查集可以快速地判断…
【数据结构】字典树Trie的底层实现及应用
查询每个条目的时间复杂度与条目数无关,时间复杂度为O(w),w为查询单词的长度。 特点:每个节点有26个指向下个节点的指针。根据不同的语言和情景,指针数量要随具体情况而变,如考虑字母大小写时指针数量就为52个。 由于指针数量的不确定性,我们不能直接把指针数量写死,应该采用动态的…
【数据结构】从零认识线段树
线段树又称区间树,英文叫Segment Tree。 线段树主要用于解决区间内的统计查询问题。 更新:更新区间中一个元素或一个区间的值。 查询:查询一个区间[i,j]的最大值,最小值,或者区间和等。 上面两个图都是线段树,我们可以发现真正的值都存储在树的叶子节点,而其他节点都存储…
【数据结构】优先队列的经典问题
在N个元素中选出前M个元素,且M远小于N。 如,在100万个元素中选出前100名。 如果用排序,最多优化到nlogn的复杂度,这个复杂度也还能接受。 但是如果用优先队列就可以在nlogm的复杂度完成,由于m远小于n所以这个复杂度会比nlogn小很多。 思路:使用优先队列,维护当…
下一页
个人成就
文章被点赞
20
文章被阅读
14,939
掘力值
495
关注了
66
关注者
14
收藏集
2
关注标签
65
加入于
2019-06-14