首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏技术知识总结

    Java先行发生原则

    先行发生原则(Happens-Before)是Java内存模型定义一个等效判断原则。 依赖这个原则,我们可以通过几条简单规则判断数据是否存在竞争,线程是否安全,而不需要陷入Java内存模型苦涩难懂定义之中。---“先行发生原则指的是什么。 下面是Java内存模型下一些“天然先行发生关系,这些先行发生关系无须任何同步器协助就已经存在,可以在编码中直接使用。 Java 语言无须任何同步手段保障就能成立先行发生规则有且只有上面这些。---“时间上先后顺序”与“先行发生”之间有什么不同?一个操作“时间上发生”不代表这个操作会是 “先行发生”。 时间先后顺序与先行发生原则之间基本没有因果关系,所以我们衡量并发安全问题时候不要受时间顺序干扰,一切必须以先行发生原则为准。

    44630编辑于 2023-06-05
  • 来自专栏Java成长之路

    先行发生原则(happens-before)介绍

    先行发生”(happens-before)原则。 一、什么是先行发生原则 现在就来看看“先行发生原则指的是什么。 对象终结规则(Finalizer Rule):一个对象初始化完成(构造函数执行结束)先行发生于它finalize()方法开始。 8. ,根据程序次序规则,“int i=1”操作先行发生于“int j=2”,但是“int j=2”代码完全可能先被处理器执行,这并不影响先行发生原则正确性,因为我们在这条线程之中没有办法感知到这点。 上面两个例子综合起来证明了一个结论:时间先后顺序与先行发生原则之间基本没有太大关系,所以我们衡量并发安全问题时候不要受到时间顺序干扰,一切必须以先行发生原则为准。

    3.1K20发布于 2018-09-29
  • 来自专栏云霄雨霁

    Java虚拟机--先行发生原则

    先行发生原则先行发生是Java内存模型中定义两项操作数之间偏序关系,如果说操作A先行发生于操作B,就是说在发生操作B之前,操作A产生影响能被操作B观察到,“影响”包括修改了内存中共享变量值、发送了消息、调用了方法等 线程启动规则 :Thread对象start方法先行发生于此线程每个动作;  线程终止规则 :线程中所有操作都先行发生于对此线程终止检测;  线程中断规则 :对线程interrupt()方法调用先行发生于被中断线程代码检测到中断时间发生 ;  对象终结规则 :一个对象初始化完成先行发生于它finalize方法开始;  传递性 :如果操作A先行发生于操作B,操作B先行发生于操作C,那么,操作A也就先行发生于操作C。  依次分析一下先行发生原则各个原则:由于两个方法分别在不同线程中被调用,程序次序原则不适用;没有同步块,自然不会发生lock和unlock操作,管程锁定原则不适用;value变量没有被volatile

    61060发布于 2018-05-22
  • 来自专栏JavaEdge

    Happens-beofre 先行发生原则(JVM 规范)

    )原则 这个原则非常重要,它是判断数据是否存在竞争,线程是否安全主要依赖。 先行发生原则 指的是JMM中定义两项操作之间依序关系 happens- before关系 主要用于强调两个有冲突动作之间顺序,以及定义数据争用发生时机 如果说操作A先行发生于操作B,就是在说发生 线程中断规则(Thread Interruption Rule) 对线程interrupt()方法调用先行发生于被中断线程代码检测到中断事件发生,可以通过Thread.interrupted() A先行发生于操作B,操作B先行发生于操作C,那就可以得出操作A先行发生于操作C结论 一个操作”时间上发生“不代表这个操作会是”先行发生“,那如果一个操作”先行发生“是否就能推导出这个操作必定是”时间上发生 也是不成立,一个典型例子就是指令重排序 所以时间上先后顺序与先行发生原则之间基本没有什么关系,所以衡量并发安全问题一切必须以先行发生原则为准。

    60310发布于 2021-02-22
  • 来自专栏韩曙亮的移动开发专栏

    【Java 并发编程】指令重排序规范 ( happens-before 先行发生原则 )

    文章目录 一、指令重排序规范 二、happens-before 先行发生原则 一、指令重排序规范 ---- 指令重排指的是 , 线程中如果两行代码 没有逻辑上上下关系 , 可以对代码进行 重新排序 ; 规范 : 先行发生原则 ; 二、happens-before 先行发生原则 ---- happens-before 先行发生原则 : A happens-before B , A 先于 B 发生 , 使用 指令重排 ; happens-before 先行发生原则 适用场景 : 在以下场景中 , 不进行指令重排 , 这些先后顺序 , 绝对不能被打乱 , 否则会出现严重线程安全问题 ; 程序次序原则 检测到 中断时 事件发生 ; 必须先发生中断 , 然后才能被检测到 ; 不能还没发生中断 , 就可以检测到中断发生 ; 对象终结 : 对象创建 先于 对象终结 , 创建就是调用构造函数 , 终结就是调用 finalize 方法 ; 只要符合上述规则 , 不需要进行同步 , 就可以成立 ; 通过 " happens-before 先行发生原则 " 可以判定两个线程操作 , 是否有发生冲突可能 ;

    45410编辑于 2023-03-29
  • 来自专栏无原型不设计

    什么是“移动先行原则,如何践行?

    2010年全球移动通信大会上,谷歌时任首席执行官Eric Schmidt 提出:产品设计应遵循 “移动先行” 原则。 该原则具体指什么?遵循该原则依据有哪些?为什么它在产品设计中如此重要? 一、什么是“移动先行原则? 为了更好地理解该原则,首先要了解两个概念: 1. 响应式网页设计(RWD) 一种网页设计方法。 因为“移动先行原则,就是“逐步增强” 策略一个具体表现形式。 “移动先行”,顾名思义,即在设计多终端产品时,首先设计限制较多移动端版本,再一步步向高级终端迈进。 ? 二、为什么在产品设计中,“移动先行原则如此重要? 除了以上提到“逐步增强”设计策略可操作性更强外,“移动先行原则其实还具有强大现实基础:移动端需求爆炸式增长。 移动端需求爆炸式增长,要求设计师在进行产品设计时,重视产品移动端版本,遵从 “移动先行设计原则。 三、如何在产品设计中践行移动先行原则

    1.7K40发布于 2018-03-16
  • 来自专栏Java知识点

    8章_索引创建与设计原则

    虽然在语法上,从 MySQL 4 版本开始就已经支持降序索引语法了,但实际上 DESC 定义是被忽略,直到 MySQL 8.x 版本才开始真正支持降序索引 (仅限于 InnoDBc 存储引擎)。 索引设计原则 为了使索引使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型索引。** 索引设计不合理或者缺少索引都会对数据库和应用程序性能造成障碍。 使用列类型小创建索引 # 8. 区分度高 (散列性高) 列适合作为索引 列基数 指的是某一列中不重复数据个数,比方说某个列包含值 2, 5, 8, 2, 5, 8, 2, 5, 8 ,虽然有 9 条记录,但该列基数却是 扩展:联合索引把区分度搞 (散列性高) 列放在前面。 # 10. 使用最频繁列放到联合索引左侧 这样也可以较少建立一些索引。同时,由于 "最左前缀原则",可以增加联合索引使用率。

    67630编辑于 2023-08-02
  • 来自专栏小菜良记

    万字警告 - k8s入门,理应Pod先行

    不要让贫穷扼杀了你学 k8s 兴趣 这篇我们本着善始善终原则,继续带你搞明白 k8s 中pod ,成为别人家程序员~ 我们老样子,先回顾下 k8s 中存在几种组件: ? 2)Pod Pod 是 k8s 中可以创建和管理最小单元,是资源对象模型中由用户穿件或部署最小资源对象模型,也是在 k8s 上运行容器化应用资源对象。 生命周期短暂 pod 是一个具有生命周期组件,如果 pod 所在节点发生故障,那么该节点上pod 都会被调度到其他节点上,而调度后pod是一个全新 pod,与之前没有任何关系。 **3. 和内存),在运行时候如果不对某个容器资源进行限制,那么它可能会耗尽服务器大量资源,防止这种情况发生,k8s 中提供了 resource 属性,对资源进行限制。 关于 k8s 中 pod 介绍到这里就结束啦~个人觉得还是挺详细,如果能够认真看下来,相信对 pod 已经有足够了解了。但是你认为 k8s 到这里就结束了吗?

    1.1K40发布于 2021-04-29
  • 来自专栏JavaEdge

    Java内存模型与volatile关键字Java内存模型(JMM)指令重排序对于Long和double型变量特殊规则内存屏障有序性(Ordering)先行发生原则

    先行发生原则 如果JMM中所有的有序性都只靠volatile和synchronized,那么有一些操作将会变得很繁琐,但我们在编写Java并发代码时并没有感到这一点,这是因为Java语言中有一个先行发生 先行发生原则是指JMM中定义两项操作之间依序关系 如果说操作A先行发生于操作B,就是在说发生B前,A产生影响能被B观察到,“影响”包含了修改内存中共享变量值、发送了消息、调用了方法等。 传递性(Transitivity):如果操作A先行发生于操作B,操作B先行发生于操作C,那就可以得出操作A先行发生于操作C结论。 一个操作”时间上发生“不代表这个操作会是”先行发生“,那 如果一个操作”先行发生“是否就能推导出这个操作必定是”时间上发生“呢?也是不成立,一个典型例子就是指令重排序。 所以时间上先后顺序与先生发生原则之间基本没有什么关系,所以衡量并发安全问题一切必须以先行发生原则为准。

    1.5K100发布于 2018-05-16
  • 来自专栏纯洁的微笑

    CentOS 8 成为绝版!到底发生了什么?

    CentOS 一生走到了尽头... 1 CentOS 8 成为绝版 12 月 8 日,CentOS 项目宣布,CentOS 8 将于 2021 年底结束,而 CentOS 7 将在其生命周期结束后停止维护 做为程序员应该都知道,CentOS 在国内有着大量用户,几乎是所有互联网公司标配,包括我们知道BAT等一线大厂。 我和大家先聊聊 CentOS 发展历史,以及红帽公司对 CentOS 发展影响,这样才能明白为什么 CentOS 走到了今天。 后记: 看到这个新闻其实蛮震惊,这么多年这么多人使用 CentOS 说停就停了,如果我们不掌握底层核心技术,迟早都会被收割。 不能说利用开源就很好,刚开始确实很美好,也符合开源社区精神。 我微信号puresmilea,欢迎大家找我聊天,记录你我故事。

    3.2K30发布于 2021-01-08
  • 来自专栏Java那些事

    JVM 发生 OOM 8 种原因、及解决办法

    撸Java同学,多多少少会碰到内存溢出(OOM)场景,但造成OOM原因却是多种多样。 JDK8后,元空间替换了永久代,元空间使用是本地内存,还有其它细节变化: 字符串常量由永久代转移到堆中 和永久代相关JVM参数已移除 可能原因有如下几种: 1、在Java7之前,频繁错误使用String.intern ()方法 2、运行期间生成了大量代理类,导致方法区被撑爆,无法卸载 3、应用长时间运行,没有重启 没有重启 JVM 进程一般发生在调试时,如下面 tomcat 官网一个 FAQ: Why does Sun 官方对此定义:超过98%时间用来做GC并且回收了不到2%堆内存时会抛出此异常。 解决方法 1、检查项目中是否有大量死循环或有使用大内存代码,优化代码。 本地方法在运行时出现了内存分配失败,和之前方法栈溢出不同,方法栈溢出发生在 JVM 代码层面,而本地方法溢出发生在JNI代码或本地方法处。

    1.6K10发布于 2019-11-18
  • 来自专栏架构师专栏

    JVM 发生 OOM 8 种原因、及解决办法

    GC 开销超过限制 发生频率:5颗星 造成原因 1、Java 进程98%时间在进行垃圾回收,恢复了不到2%堆空间,最后连续5个(编译时常量)垃圾回收一直如此。 请求数组大小超过虚拟机限制 发生频率:2颗星 造成原因 1、应用程序试图分配一个超过堆大小数组 解决方案 1、使用 -Xmx 增加堆大小 2、修复应用程序中分配巨大数组 bug 4. Metaspace 发生频率:3颗星 造成原因 1、从 Java 8 开始 Perm gen 改成了 Metaspace,在本机内存中分配 class 元数据(称为 metaspace)。 8. 发生 stack_trace_with_native_method 发生频率:1颗星 造成原因 1、本机方法(native method)分配失败 2、打印堆栈跟踪信息,最顶层帧是本机方法 解决方案

    3.1K21发布于 2019-12-11
  • 来自专栏深度学习与python

    BBC在线云迁移成功8原则

    无论怎样,沟通价值都是不可磨灭。没有它,团队就无法理解他们工作与其他团队是如何协调。缺少了这种理解,他们就看不到分享可能性,甚至可能开始不信任彼此。 交流带来了理解,而理解能让文化发生变化。 我们不能确定未来会怎样,需求会发生改变,云供应商技术也会推陈出新。世界——尤其是科技领域——变化速度比以往任何时候都要快。 更频繁地发布更小版本,也是最小化风险好办法。 3技术概览 把上述原则付诸实践,下面是改造 BBC 网站一个技术概览。 ? 越来越多渲染发生在 AWS Lambda 上,大约每秒钟有 2000 次 Lambda 调用,用于创建 BBC 页面,我们预计这个数字还会增长。如前所述,无服务器降低了运维成本,而且伸缩速度非常快。 这方面的内容超出了这篇文章范围,但原则是一样:这些服务从数据中心转向云端、解决差异、去重,确保它们处于最有利位置,能够随着 BBC 演化而演化。

    69540发布于 2021-01-07
  • 来自专栏Java学习网

    程序员需谨记8条团队开发原则

      当你从学校出来,找到第一份软件开发工作时候,你就不再是一个单独作战程序员了,你将会有一个团队,你一举一动也将直接影响团队效率和产出。 下面这8条团队开发基本原则,作为团队一员,你必须谨记在心,这会对你和你团队带来非同凡响效果。 ?   2、每天汇报自己工作情况   我们可以每天早上把今天工作做个简单计划,然后在下班前把今天工作内容做一下小总结,并抄送给领导,很多时候因为不知道要写啥,或者可能一句话就能说清楚,我们就不愿意去做这个简要汇报 因为这不仅让你失去了思考问题能力,而且也有可能引入一些不必要问题。虽然重复造轮子做法不可取,但是在你拷贝代码时候是否也需要思考一下代码实现思路,这对你提高非常有用。   8、及时记录工作日志   这点也很少会有程序员能够做到,“一个没有博客程序员不是好程序员!”,用博客记录自己开发过程中经验教训,时间久了,这也是一笔巨大财富。

    78850发布于 2018-02-28
  • 来自专栏明志德到的IT笔记

    《软件开发201个原则》—— 一般原则、需求原则、设计原则、编码原则、测试原则、管理原则、产品原则、演变原则

    现存原则发生改变,新原则会被加进来,旧原则将不再适用。实践和从实践中获得经验,促使我们发展了那些原则。 这些方法包括:让客户参与(见原则8)、原型设计(在全面开发之前验证需求;见原则11~13)、保持设计简单(见原则67) 、审查代码(见原则98)和雇用最优秀的人(见原则130和131) 。 详细介绍请参见链接8原则113 成功测试应发现错误 我经常听到测试人员兴高采烈地宣布,“好消息!我测试成功了,程序运行正常”。这是运行测试时错误态度。 原则130 理解客户优先级 很有可能是,如果客户能按时获得必需10%系统功能,那么他们可以忍受其余90%功能延迟交付。原则8推论更令人震惊,但 很有可能就是这样。一定要弄明白! 第8章 产品保证原则 产品保证是通过使用分权制衡(checks and balances )来确保软件质量一系列工作。产品保证通常包括如下几项。

    1.9K20编辑于 2023-10-21
  • 来自专栏web前端教室

    【今晚8点】- 先行者计划:作业 &总结 & 讲一些有难度事情

    很久以来就有这样一个现象,现在网上有无数教程教你怎么学习前端开发,但对于前端开发学习计划以及执行力贯彻程度,却几乎没有这方面的文章。就算是有一些沾边,也落入了学习方法、快速学习俗套。 这就至于了一个问题,很多同学会花了很多心思在教程收集上,花心思在各种示例、demo等代码整理上面。就像七龙珠一样,收集了n篇教程之后,你前端开发能力就自动提升了。 如果某个同学收集了n篇教程之后,发现自己前端开发能力依然没有提升,他可能会认为,“我教程收集还不够多”。 我做先行者计划二年多了,web前端零基础课也讲了一年多,我就发现一个现象,“刚开始时候,同学们都热情满满,但越到后来,掉队的人就越多”。 刚开始时候我还以为是我课程讲不好,后来发现能找到工作、能学会的人,基本上都是坚持到最后那批人。 这背后原因是,时间长了就会放松对自己要求,我也没有什么办法去严格约束。

    46100发布于 2018-08-08
  • 来自专栏WflynnWeb

    ArcoDesign 值得学习 8 个设计原则

    设计原则相当于整个语言体系中修辞手法。 务实浪漫主义是对设计语言形容,它也代表着ArcoDesign 试图建立工作模式。 浪漫与务实并非矛盾对立,它们相辅相成,引导设计方向。 通过对务实与浪漫定义得出设计语言价值观, 这贯穿着整个设计系统。 清晰与一致价值观意味着务实方向,清晰效率提升是务实基础,品牌一致性是务实目的。 韵律与开放价值观意味着浪漫方向,推敲设计韵律是 Bytedancer 浪漫,包容开放体系才能浪漫解决问题。 设计原则相当于整个语言体系中修辞手法,在实际词语组成中给我们提供模式化思考结构。它让整个语言体系更丰满。 及时反馈 系统应该让用户知道目前状态,并及时给予相对应反馈。 防止错误发生 比出现错误信息提示更好是更用心设计防止这类问题发生。在用户选择动作发生之前,就要防止用户容易混淆或者错误选择。

    71610编辑于 2022-10-28
  • 来自专栏巴啦啦的积累

    《架构整洁之道》第 8 章 OCP:开闭原则

    均为原创,读架构整洁之道笔记。开闭原则:(OCP :Open Closed Principle)。一个设计良好系统,应该在不需要修改,或者修改很少前提下,就能够完成扩展功能。 可以看出,该系统数据是一致,只是展现方式有所不同。数据流利用SRP原则,可以得出以下数据流:图片组件分类一共五个组件:书中原图:用标记是接口,<DS>为数据结构。 这么做目的是为了让Presenter层变动,不影响到Controller层。而Interactor是最负责OCP,其他模块修改变动都不会影响到它。 这是因为Interactor通常是最核心,属于业务相关,其他都是辅助模块。并且组件与组件之间关系都是单向。 信息隐藏可以看到,Controller层,使用到了Interactor两个数据结构分别是请求和响应,这个本意是想让Controller不过渡依赖Interactor细节,为了让Interactor屏蔽掉发生

    33020编辑于 2023-05-25
  • 来自专栏前端达人

    分享8个新鲜 VSCode 插件,提高你发生产效率

    本文将深入探讨8个必备VSCode扩展,无疑将彻底改变您编码体验并大幅提高您生产力。 所以,无论你是一个经验丰富编码人员还是刚刚开始你编程之旅,为市场上最好VSCode扩展做好准备,准备好迎接一次令人兴奋探索吧! 什么是VSCode扩展? 此外,扩展还可以根据您偏好个性化定制您工作区,为您提供舒适愉悦编码环境。 话不多说,让我们深入挖掘我们精选8个必备VSCode扩展,这些扩展将有助于提高您生产力。 通过Rainglow,您可以轻松切换不同主题,根据您心情或一天中时间来定制编辑器配色方案。这个庞大高质量主题选择为您编码环境增添了美学元素,减少了视觉疲劳,使编码更加愉快。 它可以快速有效地生成各种类型虚拟数据,简化您测试过程。 8.Image Preview 作为一名网页开发者,处理图片通常是一项具有挑战性任务,尤其是当你需要处理大量图片文件时。"

    1.3K70编辑于 2023-08-31
  • 来自专栏人工智能快报

    深度学习起源与先行

    在二十世纪五十年代就存在深度学习概念了。麦肯锡全球研究院发文简要回顾了深度学习是如何从概念发展为现实,而使之实现关键人物又是谁。 后来,美国麻省理工学院(MIT)马文·明斯基(Marvin Minsky)和西摩·帕普特(SeymourPapert)在其1969年出版书《感知器》中,用数学方法展示了感知器只能进行很基础任务, 他们书还讨论了训练多层神经网络难点。 2012年,辛顿和他学生在著名 ImageNet 竞赛中取得了突出结果,彰显了深度学习强大。该竞赛以李飞飞等人整理数据集为基础。 深度学习也增强了强化学习这一已存在领域,理查德·萨顿(Richard Sutton)就是其中一位顶尖研究人员,他牵头让谷歌DeepMind开发系统取得了多次棋类比赛胜利。

    86220发布于 2018-07-26
领券