首页 文章 精选 留言 我的
优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/u/4586915/blog/4703161

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

面试重灾区——Synchronized原理

兄弟们,大家好。时隔多天,我,终于来了。今天我们来聊一下让人神魂颠倒的Synchronized。 不过呢,在读这篇文章之前,我希望你真正使用过这个东东,或者了解它到底是干嘛用的,不然很难理解这篇文章讲解的东西。 这篇文章的大体顺序是:从无锁-->偏向锁-->轻量级锁-->重量级锁讲解,其中会涉及到CAS,对象内存布局,缓存行等等知识点。也是满满的干货内容。其中也夹杂了个人在面试过程中出现的面试题,各位兄弟慢慢享受。 Synchronized在jdk1.6做了非常大的优化,避免了很多时候的用户态到内核态的切换,节省了资源的开销,而这一切的前提均来源于CAS这个理念。下面我们先来聊一下CAS的一些基本理论。 1. CAS CAS全称:CompareAndSwap,故名思意:比较并交换。他的主要思想就是:**我需要对一个值进行修改,我不会直接修改,而是将当前我认为的值和要修改的值传入,如果此时内存中的确为我认为的值,那么就进行修改,否则修改失败。**他的思想是一种乐观锁的思想。 一张图解释他的工作流程: 知道了它的工作原理,我们来听一个场景:现在有一个int类型的数字它等于...

快速排序为什么这么快?

快速排序 首先选一个基准 pivot,然后过一遍数组, 把小于 pivot 的都挪到 pivot 的左边, 把大于 pivot 的都挪到 pivot 的右边。 这样一来,这个 pivot 的位置就确定了,也就是排好了 1 个元素。 然后对 pivot 左边 👈 的数排序, 对 pivot 右边 👉 的数排序, 就完成了。 那怎么排左边和右边? 答:同样的方法。 所以快排也是用的分治法的思想。 「分」 选择一个 pivot,就把问题分成了 pivot 左边 pivot 右边 这两个问题。 「治」 就是最开始描述的方法,直到每个区间内没有元素或者只剩一个元素就可以返回了。 「合」 放在一起自然就是。 但是如何选择这个 pivot? 取中间的? 取第一个? 取最后一个? 举个例子:{5, 2, 1, 0, 3}. 比如选最后一个,就是 3. 然后我们就需要把除了 3 之外的数分成「比 3 大」和「比 3 小」的两部分,这个过程叫做 partition(划分)。 这里我们仍然使用「挡板法」的思想,不用真的弄两个数组来存这两部分,而是用两个挡板,把区间划分好了。 我们用「两个指针」(就是挡板...

相关文章

发表评论

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册