Mark

从锁升级的角度理解synchronized

若如初见. 提交于 2020-08-09 10:49:51
前言 在 Java 中为保证线程安全,可以使用关键字 synchronized 保护代码,在多个线程之间同时只能有一个线程执行被保护的代码。 synchronized 锁的到底是什么?是对象,还是代码块呢? 保证线程安全已经有了 synchronized 为什么又会出现 Lock 呢,二者之间有什么区别呢? synchronized 一定比 Lock 性能差吗? synchronized 的锁升级过程是什么,偏向锁,轻量级锁,自旋锁,重量级锁怎么一步一步实现的? synchronized 使用 1、用在静态方法 public class SimpleUserSync { public static int a = 0; // 相当于 synchronized (SimpleUserSync.class){a++;} public synchronized static void addA_1() { a++; } } 2、用在成员方法上 public class SimpleUserSync { public static int a = 0; // 相当于 synchronized (this){a++;} public synchronized void addA_1() { a++; } } 3、用在代码块 private static final Object LOCK

【JVM之内存与垃圾回收篇】对象实例化内存布局与访问定位

a 夏天 提交于 2020-08-09 06:47:13
对象实例化内存布局与访问定位 从各自具体的 内存分配 上来讲 new 的对象放在 堆 中 对象所属的类型信息是放在 方法区 的 方法当中的局部变量放在 栈空间 这 new 的对象怎么把三块粘合到一起 就是这章的内容了 对象实例化 面试题 美团: 对象在 JVM 中是怎么存储的? 对象头信息里面有哪些东西? 蚂蚁金服: 二面 Java 对象头有什么? 从对象创建的方式和步骤开始说 对象创建方式 new:最常见的方式,单例类中调用 getInstance 的静态类方法,XXXFactory 的静态方法 Class 的 newInstance 方法:反射的方式,在 JDK9 里面被标记为过时的方法,因为只能调用空参构造器,权限必须是 public Constructor 的 newInstance(XXX):反射的方式,可以调用空参、带参的构造器,权限没有要求 使用 clone() :不调用任何的构造器,要求当前类需要实现 Cloneable 接口中的 clone() 方法 使用反序列化:反序列化一般用于 Socket 的网络传输,从文件中、从网络中获取一个对象的二进制流 第三方库 Objenesis 创建对象的步骤 判断对象对应的类是否加载、链接、初始化 虚拟机遇到一条 new 指令,首先去检查这个指令的参数能否在 Metaspace 的常量池中定位到一个类的符号引用

我最喜欢用的 5 个 Ansible 模块

断了今生、忘了曾经 提交于 2020-08-09 05:56:20
了解如何通过这些 Ansible 模块实现几乎任何事情。 在我成长的时候,我爷爷在他的花园里有一个棚子。他经常会花几个小时在那里制作和修复东西。这是在我们有互联网之前的事情,所以我花了很多时间看他在那个棚子里创造东西。虽然棚子里有很多工具,从钻头到车床到电器配件,还有很多东西我至今都无法辨认,但他使用的只是他手头的一小部分。然而,他能做到的事情似乎永远没有极限。 我之所以告诉你这个故事,是因为我觉得我的职业生涯是在一个隐喻的棚子里度过的。计算机也是如此多的工具,都在一个狭小(虚拟?)的空间里。而工具棚中又有工具棚 —— 我最喜欢的是 Ansible。最近的 2.9 版本有 3,681 个模块! **3,681 个啊!**当我在 2013 年夏天第一次开始使用 Ansible 时,1.2.1 版本只有 113 个模块,然而,正如 我当时写的 ,我仍然可以实现任何我想象到的东西。 模块是 Ansible 的支柱,是让重任轻装上阵的齿轮。它们被设计为做好一项工作,从而实现了 Unix 哲学 。我们就是这样来把这么多的模块捆绑在一起,作为乐团的指挥,Ansible 现在有很多乐器可以听从它的指挥。 回顾一下我多年来的 Ansible 剧本和角色的 Git 仓库,我发现我只用了 35 个模块。这个小的子集被用来构建大型基础设施。不过,我想知道如果用一个更小的子集可以实现什么?当我回顾这 35

开源要安全!Linux 基金会、GitHub、GitLab、Google 联合起来了!

为君一笑 提交于 2020-08-09 05:23:12
编译 | 胡雨晴 责编 | 唐小引 出品 | CSDN开源实验室 今天,开源已经成为了全球技术应用的基础设施,据 Gartner 调查显示,99% 的组织在其 IT 系统中都使用了开源软件。不过,与此相伴的是一直以来开源的安全风险都是许多企业及开发者担忧的所在。据此前安全公司 WhiteSource 发布的 报告统计 ,在过去的一年里,开源安全漏洞的数量再破记录,同比增长近 50%。 解决开源的安全问题迫在眉睫,全球最大的代码托管平台 GitHub 便一直在努力,其官方表示,开源的安全性对软件的未来至关重要,在 2019 年 GitHub 收购了 Dependabot 和 Semmle,并将这些安全工具免费提供给公共存储库,同时,GitHub 还通过创建 GitHub Security Lab 和 Open Source Security Coalition 来支持开源开发者和维护者的安全工作,截至目前,这些举措已经帮助在开源软件中发现了 120 多个 CVE。 现在,我们在保护开源安全性上迎来了更强有力的保障。 近日,Linux 基金会联合包括微软与 GitHub、Google、IBM、红帽(Red Hat)、英特尔(Intel)、VMware、优步(Uber)等在内的多家软硬件企业一起,共同成立了 Open Source Security Foundation(开源安全基金会

深入理解JVM(③)ZGC收集器

与世无争的帅哥 提交于 2020-08-09 03:28:51
前言 ZGC 是一款在JDK11中新加入的具有实验性质的低延迟垃圾收集器,目前仅支持Linux/x86-64。ZGC收集器是一款基于Region内存布局的,(暂时)不设分代的,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的,以低延迟为首要目标的一款垃圾收集器。 ZGC布局 与Shenandoah和G1一样,ZGC也采取基于Region的堆内存布局,但与他们不同的是,ZGC的Region具有动态性(动态的创建和销毁,以及动态的区域容量大小)。 ZGC的Region可以分为三类: 小型Region :容量固定为2MB,用于放置小于256KB的小对象。 中型Region :容量固定为32MB,用于放置大于等于256KB但小于4MB的对象。 大型Region :容量不固定,可以动态变化,但必须为2MB的整数倍,用于存放4MB或以上的大对象。并且每个大型Region只会存放一个对象。 ZGC内存布局图: 染色指针 HotSpot的垃圾收集器,有几种不同的标记实现方案。 把标记直接记录在对象头上(Serial 收集器)。 把标记记录在于对象相互独立的数据结构上(G1、Shenandoah使用了一种相当于堆内存的1/64大小的,称为BitMap的结构来记录标记信息)。 ZGC染色指针直接把标记信息记载引用对象的指针上。

Scala 实现Python Arange

大城市里の小女人 提交于 2020-08-09 03:28:34
使用scala时有arange的需求,但是没有找到相对应函数,只找到了group,sliding函数,于是自己实现一个: 目标: 给定起点,终点和份数,得到arange结果 实现: 计算起始点长度与分类数,得到每一步的Step,然后循环添加即可。这里还加了隐式转换是为了函数传参类型转换。 private implicit def doubleToFloat(number: Double): Float ={ number.toFloat } private def getPercent(st: Float, end: Float, num: Int): Array[String] = { val step = (end - st) / num (0 to num).map(x => { val per = st + x * step per.formatted("%.2f") }).toArray } 结果: 1)小数 val arange = getPercent(0,0.5,10) println(arange.mkString("\t")) 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 2)整数 val arange = getPercent(10,100,10) println(arange.mkString(

Go语言基础(二)

断了今生、忘了曾经 提交于 2020-08-09 00:06:44
一 运算符 1 运算符基础 1 算法: 解决问题的过程,运算符和表达式来串联数据和指令。 算数运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 其他相关运算符 2 算数运算符 1 简介 算术运算符是对数值类型的变量进行运算的,如加减乘除,在Go语言中使用较多 运算符 描述 + 相加 - 相减 * 相乘 / 相除 % 求余 ++ 自增 -- 自减 2 重点讲解 除(/)和取模(%) 针对除(/): 默认的当除号两边都是整数时,其值为整数,其会直接削减掉对应的小数部分,当一个为小数时,则会继承小数的属性 针对取模(%) a%b=a-a/b*b 及 -10%3=-10-(-10/3)*3=-10-(-9)=-1 自增和自减 ++ -- Go语言中自增自减只能当成独立语言使用,不能是b:=a++ 或 b:=a-- Go 语言中的++ 和 -- 只能在变量后面,不能在变量前面,及没有++a和--a Go 语言中自增,自减不是运算符,只能作为独立语句,不能用于表达式 3 关系运算符 1 简介 关系运算符的结果都是bool类型,也就是要么是true,要么是false 关系表达式经常用在if结构条件判断中或循环结构中使用 运算符 描述 == 检查两个值是否相等,如果相等则返回True,否则返回False != 检查两个值是否不相等,如果不相等返回True,否则返回False >

精选BAT Java面试突击1000道面试题详解:JVM篇.建议收藏

别来无恙 提交于 2020-08-08 21:49:49
JVM Java内存区域 说一下 JVM 的主要组成部分及其作用? 说一下 JVM 运行时数据区 深拷贝和浅拷贝 说一下堆栈的区别? 队列和栈是什么?有什么区别? HotSpot虚拟机对象探秘 对象的创建 为对象分配内存 处理并发安全问题 对象的访问定位 句柄访问 直接指针 内存溢出异常 Java会存在内存泄漏吗?请简单描述 垃圾收集器 简述Java垃圾回收机制 GC是什么?为什么要GC 垃圾回收的优点和原理。并考虑2种回收机制 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? Java 中都有哪些引用类型? 怎么判断对象是否可以被回收? 在Java中,对象什么时候可以被垃圾回收 JVM中的永久代中会发生垃圾回收吗 说一下 JVM 有哪些垃圾回收算法? 标记-清除算法 复制算法 标记-整理算法 分代收集算法 说一下 JVM 有哪些垃圾回收器? 详细介绍一下 CMS 垃圾回收器? 新生代垃圾回收器和老年代垃圾回收器都有哪些?有什么区别? 简述分代垃圾回收器是怎么工作的? 内存分配策略 简述java内存分配与回收策率以及Minor GC和Major GC 对象优先在 Eden 区分配 大对象直接进入老年代 长期存活对象将进入老年代 虚拟机类加载机制 简述java类加载机制? 描述一下JVM加载Class文件的原理机制 什么是类加载器

130. Surrounded Regions

我是研究僧i 提交于 2020-08-08 20:46:59
题目:130. Surrounded Regions 题目地址: https://leetcode.com/problems/surrounded-regions/ Given a 2D board containing 'X' and 'O' ( the letter O ), capture all regions surrounded by 'X' . A region is captured by flipping all 'O' s into 'X' s in that surrounded region. Example: X X X X X O O X X X O X X O X X After running your function, the board should be: X X X X X X X X X X X X X O X X Explanation: Surrounded regions shouldn’t be on the border, which means that any 'O' on the border of the board are not flipped to 'X' . Any 'O' that is not on the border and it is not connected to an 'O' on the

三天研读《中兴电路设计规范》精华总结

泄露秘密 提交于 2020-08-08 19:04:47
目录 1、原理图制图规范 2、电路设计 2.1、通用要求 2.2、逻辑器件应用 2.3、时钟设计 2.4、保护器件应用 2.5、可编程逻辑器件 2.6、电源设计 2.7、其他应用经验 3、可靠性设计 4、信号完整性/电源完整性设计 5、系统相关设计 6、可生产性设计 7、可生产性设计 7.1、JTAG 7.2、测试点 7.3、电路可测试性 7.4、系统可测试性 本博客将简述 中兴通讯股份有限公司在原理图设计中需要注意的一些事项,其中包含了中兴设计开发部积累的大量硬件开发知识和经验,可以作为学习使用。硬件工程师可以学习并掌握检查条目的内容以及对条目的详细说明,学习部门经验。 1、原理图制图规范 原理图制图规范如下表所示: 详细说明如下所示: 1、原理图必须使用公司统一原理图库 在原理图设计中,必须采用公司统一原理图库,以保证设计的一致性和打包后封装、料单等结果的一致性。不使用公司统一原理图库造成的连接、封装错误个人承担责任。 注意使 cds.lib 中的路径指向库服务器 eda-svr1 的路径。库服务器每天会和公司统一库服务器同步 2 次确保最新。 在改版设计中尤其要注意这个问题,因为打包时会将部分库备份到本地,可能造成本地库和公司库不一致。 对于历史遗留的未采用统一图库的设计,可以豁免此项检查。但是如果经历改版,必须将原理图库切换至公司统一库,以保证料单的正确性和后续的可维护性。