java
珍惜时间简单生活
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
什么是乐观锁和悲观锁
1)乐观锁:就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态,乐观锁认为竞争不总是会发生,因此它不需要持有锁,将 比较-设置 这两个动作作为一个原子操作尝试去修改内存中的变量,如果失败则表示发生冲突,那么就应该有相应的重试逻辑。 乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别...原创 2018-10-01 17:07:07 · 9821 阅读 · 0 评论 -
"==",equals 和 hashCode有什么区别?
"=="用来比较两个变量是否相等。如果比较的是两个基础类型变量,则比较的是两个变量的值是否相等;如果比较的是两个是两个对象,则比较的是两个对象的地址是否相同;equals是Object类的方法。在没有重写equals方法的情况下,equals与"=="的效果一样可以重写equals方法,使得比较的是两个对象的内容是否相同。比如典型的String类就重写了equals方法,如果使用equa...原创 2019-03-27 19:15:06 · 427 阅读 · 0 评论 -
大根堆和小根堆
大根堆和小根堆在排序和选择第K大的数中经常有用到。在Java中是可以直接实现这两个中结构的,使用的优先队列public class TIMU1 { //小根堆 public PriorityQueue<Integer> minHead = new PriorityQueue<>(new Comparator<Integer>() { ...原创 2019-03-27 19:13:17 · 2243 阅读 · 0 评论 -
前缀树结构和Java代码实现
以前在项目中使用过前缀对敏感词进行过滤,现在就详细说一下他的结构和如何实现吧。结构的3个基本性质:1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。3. 每个节点的所有子节点包含的字符都不相同。前缀的好处:前缀树可以最大限度地减少无谓的字符串比较,查询效率非常高。前缀树的核心思想是利用空间换时间,利...原创 2019-03-30 17:00:42 · 731 阅读 · 0 评论 -
快速排序的核心思想和Java实现
算法步骤1、从数列中挑出一个元素,称为 “基准”(pivot);2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;3、递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;在每次的迭代(iteration)中,它...原创 2019-03-30 16:54:08 · 913 阅读 · 0 评论 -
消息队列中推和拉模式
消息队列比较核心的应用场合有三个:解耦、异步和削峰在消息队列中一种常用的消息推送类型是推拉模式下面是推拉模式的对比:具体的比较1.Push模式推模式是服务器端根据用户需要,由目的、按时将用户感兴趣的信息主动发送到用户的客户端Push模式的主要优点是(1)对用户要求低,方便用户获取需要的信息(2)及时性好,服务器端即使地向客户端推送更行的动态信息Push模式的缺点不能...原创 2019-01-04 15:16:20 · 7693 阅读 · 0 评论 -
排序算法的比较
这里是我在网上找到两个截图(侵删)原创 2018-12-29 15:07:00 · 232 阅读 · 0 评论 -
github上传代码失败的两个常见异常
马克一下,等下提醒自己回来写.原创 2018-11-08 17:03:06 · 739 阅读 · 1 评论 -
什么是CAS
CAS,全称为Compare and Set,即比较-设置。假设有三个操作数: 内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,才会将内存值修改为B并返回true,否则什么都不做并返回false 。当然CAS一定要volatile变量配合,这样才能保证每次拿到的变量是主内存中最新的那个值,否则旧的预期值A对某条线程来说,永远是一个不会变的值A,只要某次CAS操作失败,永远都...原创 2018-10-01 17:12:49 · 395 阅读 · 0 评论 -
多线程中总内存和线程的工作内存
Java内存模型将内存分为了 主内存和工作内存 。类的状态,也就是类之间共享的变量,是存储在主内存中的,每个线程都有一个自己的工作内存(相当于CPU高级缓冲区,这么做的目的还是在于进一步缩小存储系统与CPU之间速度的差异,提高性能),每次Java线程用到这些主内存中的变量的时候,会读一次主内存中的变量,并让这些内存在自己的工作内存中有一份拷贝,运行自己线程代码的时候,用到这些变量,操作的都是自己...原创 2018-10-01 17:11:42 · 4626 阅读 · 1 评论
分享