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

    Java先行发生原则

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

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

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

    先行发生”(happens-before)原则。 一、什么是先行发生原则 现在就来看看“先行发生原则指的是什么。 “j=i”,那么可以确定在线程B操作执行后,变量j值一定等于1,得出这个结论依据有两个:一是根据先行发生原则,“i=1”结果可以被观察到;二是线程C还没“登场”,线程A操作结束之后没有其他线程会修改变量 ,根据程序次序规则,“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
  • 来自专栏喔家ArchiSelf

    浅析dashboard10个实现原则

    不论是一般运营/运维系统,还是大/小数据分析,最后一个环节一般都是数据洞见可视化。而仪表盘(dashboard)是有关数据可视化首选工具。 但要构建一个真正信息丰富、可以指导行动仪表盘,仅将所有数据分析结果放到面板上是不够,必须认真考虑各种规划和展现元素设计。 ? 那么,仪表盘设计与实现有哪些原则呢? 1. 直观图表和基础颜色图案也可以讲述生动故事。易于理解仪表盘可以快速传递信息,并且有助于展示专业技能。为了确保受众能够理解数据,仪表盘中应遵循可视化最佳做法。 3. 减少仪表盘上元素数目有助于永恒理解要传达消息。 例如,如果仪表盘上不同图表维度是等同,则使用一种颜色图例即可。 如果仪表盘需要一个筛选器,将它放置在适合位置,确保用户能够迅速知晓如何与数据交互。尝试对筛选器进行分组,或者为其添加 视觉提示,能帮助用户更好地使用仪表盘。 10.

    73530发布于 2020-03-26
  • 来自专栏芋道源码1024

    10 分钟实现 Spring Boot 发生邮件功能

    POP3常用于“离线”邮件处理,即允许客户端下载服务器邮件,然后服务器上邮件将会被删除。目前很多POP3邮件服务器只提供下载邮件功能,服务器本身并不删除邮件,这种属于改进版POP3协议。 JavaMailSender和JavaMailSenderImpl 是Spring官方提供集成邮件服务接口和实现类,以简单高效设计著称,目前是Java后端发送邮件和集成邮件服务主流工具。 thymeleaf: cache: false prefix: classpath:/views/ servlet: multipart: max-file-size: 10MB 那么优雅发送邮件应该是如何呢?应该屏蔽掉这些构建信息和发送邮件细节,不管是简单还是复杂邮件,都可以通过统一API来发送邮件。例如:mailService.send(mailVo) 。 请参考http://dmarc.org/关于DMARC规范定义; 550 MI:STC 发件人当天连接数量超出了限定数量,当天不再接受该发件人邮件。

    1.8K10发布于 2020-03-02
  • 来自专栏架构师成长之路

    谷歌10个用户体验设计原则

    谷歌10个用户体验设计原则: 1. 以人为本——专注于人们生活、工作、梦想。 创造愉悦而没有干扰视觉享受。Delight the eye without distracting the mind. 9. 值得信任。 Be worthy of people’s trust. 10. 添加一些人情味。Add a human touch. 原文如下: 1. 互联网一些事 If people looked at a Google product and said “Wow, that’s beautiful!” The larger Google becomes, the more essential it is to live up to our “Don’t be evil” motto. 10.

    71810编辑于 2022-04-14
  • 来自专栏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
  • 来自专栏呱牛笔记

    苏茜·韦尔奇:10-10-10原则,为你每个决定保驾护航

    ----更新结束 《斯坦福商业决策课》中,有一段关于10/10/10决策原则介绍,用于界定个人决策时由于我们看世界观点和立场局限性,产生决策失误,特别是没有长远考虑,所以针对每个决策选择,判断接下来 10分钟、10个月、10 年这个决策产生影响,从而做出更加明智决策,这个原则就是: (1)这个决策在10分钟后,会产生什么影响? 10/10/10原则提出者是苏茜·韦尔奇,她是美国知名新闻工作者、作家及演说家,曾任《哈佛商业评论》杂志总编辑。 苏茜关于这个原则应用小故事,还是挺有意思,有兴趣同学可以直接跳转到百度文库阅读这篇小文,摘录一小段关于这个原则应用: 大约1年后,10-10-10法则改变了我的人生。 我首先想到10分钟之后:离婚意味着一大堆混乱与绝望;10个月之后,情况甚至会更糟;但是10年之后,那将是精彩十年,我们会重新拥有自己生活,真诚、没有怀疑与伪装生活。

    53210编辑于 2023-05-02
  • 来自专栏Java技术栈

    架构师必须掌握 10 条设计原则

    01 遵循单一职责原则 函数是程序员工具中最重要抽象形式。它们能更多地被重复使用,你需要编写代码就越少,代码也因此变得更可靠。较小函数遵循单一职责原则更有可能被重复使用。 06 对模块应用良好原则 寻找机会将软件项目分解成更小模块(例如库和应用程序),以促进模块级别的重用。 对于模块,应该遵循一些关键原则是: 1.尽可能减少依赖 2.每个项目应该有一个明确职责 3.不要重复自身 你应该努力使你项目保持小巧和明确。 我很少有成功使用或编写重载类经历。 08 将测试作为设计和开发一部分 我不是测试驱动开发坚定分子,但开始编码时先编写测试代码会使得代码十分自然地遵循许多指导原则。这也有助于尽早发现错误。 10 避免编写新代码 这是每个程序员都应遵循最重要教诲:最好代码就是还没写代码。你写代码越多,你将遇到问题就越多,查找和修复错误就越困难。

    56510发布于 2018-09-29
  • 来自专栏静Design

    UI设计中颜色使用10原则

    设计颜色用法应保持一致,因此即使上下文发生变化,颜色也始终统一。 如果在我们设计中,主色调使用红色,则应避免使用它来通知错误状态。我们可以使用其他颜色(例如黄色)来避免混淆。 10.60-30-10原则 ? 60%是氛围色,30%是辅助色,10%是点睛色(主色) “这种室内设计规则是一种永恒装饰技术,可以帮助您轻松地将配色方案组合在一起。 60%+ 30%+ 10比例是为了使颜色平衡。这个公式之所以有效,是因为它创造了一种平衡感,并使眼睛舒适地从一个焦点移动到另一个焦点。” 与我之前提到技巧类似,例如少量使用颜色来增加强调和加强品牌烙印,60–30–10是确保我们不会在色彩上占上风粗略工具。 我还想从界面往后退后几步,眯起眼睛。 原文:https://uxdesign.cc/10-principles-for-color-usage-in-ui-design 作者:Danny Sapio 翻译:静电

    4.7K10发布于 2020-07-28
  • 来自专栏java思维导图

    架构师必须掌握 10 条设计原则

    01 遵循单一职责原则 函数是程序员工具中最重要抽象形式。它们能更多地被重复使用,你需要编写代码就越少,代码也因此变得更可靠。较小函数遵循单一职责原则更有可能被重复使用。 这也是降低软件项目复杂性最简单方法之一。 05 接口高于类 接收接口函数(或 C++ 中模板参数和概念)比在类上运行函数更具可重用性。点击这里查看 6 大设计原则。 06 对模块应用良好原则 寻找机会将软件项目分解成更小模块(例如库和应用程序),以促进模块级别的重用。 对于模块,应该遵循一些关键原则是: 1.尽可能减少依赖 2.每个项目应该有一个明确职责 3.不要重复自身 你应该努力使你项目保持小巧和明确。 10 避免编写新代码 这是每个程序员都应遵循最重要教诲:最好代码就是还没写代码。你写代码越多,你将遇到问题就越多,查找和修复错误就越困难。

    43430发布于 2018-10-24
  • 来自专栏顶级程序员

    10位顶级PHP大师开发原则

    这里,我们向大家介绍PHP10种最佳实践,当然,每一种都是经过大师们证明而得出。 1. 有一条web开发基本原则,我重复多少遍都觉得不够,那就是:千万不要相信你用户,同时要假设你网站中每个数据单元都是从用户那里收集来恶意代码。 很多时候,你必须用JAVAscript在客户端检验表单提交过来内容, 如果你习惯了如此,那么,这是一个好习惯。如果安全性对你来说很重要,这就是最重要最需要学习原则。 除非你认为你站点永远不会受到攻击,否则就正视所有的问题,当问题真正发生时候,你情况会变得很糟。 两种方法我都尝试过,我认为Cron非常符合”Keep It Simple, Stupid” (KISS) 原则,它让后台处理变得简单。与多进程业务逻辑相比,它没有内存溢出风险。

    1.1K50发布于 2018-05-03
  • 来自专栏dino.c的专栏

    了解模板化控件(10):原则与技巧

    原则 推荐以符合以下原则方式编写模板化控件: 选择合适父类:选择合适父类可以节省大量工作,从UWP自带控件中选择父类是最安全做法,通常选择是Control、ContentControl、ItemsControl 使用依赖属性:控件使用者会认为所有控件属性都是可以绑定,除非有特殊理由不要破坏这个约定俗成规则。 好命名能让使用者用起来更得心应手,坏命名只会让代码更混淆。下面总结了UWP控件命名一般模式: 根据控件实际功能命名,譬如Button。 以父类型名字作为后缀,如RepeatButton。 结语 这个系列主旨是讲解常见模板化控件技术,希望了解这些技术后能更轻松地构造自己控件,对理解开源控件库代码也有一定帮助。 这个系列内容有很多来自于WPF/Silverlight经验,虽然有一些小出入,基本上可以用在WPF自定义控件。

    1.3K30发布于 2019-01-18
  • 来自专栏明志德到的IT笔记

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

    现存原则发生改变,新原则会被加进来,旧原则将不再适用。实践和从实践中获得经验,促使我们发展了那些原则。 (3) 对逾期交付实行严厉处罚。 原则10 做好抛弃准备 对一个项目来说,最关键成功因素之一,是它所涉及领域是否是全新。 与原则185和201 (强调软件部署后,需求可能发生巨大变化)不同,本原则想表达,在开发过程中,软件也可能发生巨大变化。这些变化可能体现在编写新代码、新测试计划或新需求规格说明上。 比较下面两段文字,以理解我意思: 为拨打长途电话,用户应该拿起电话。系统应该在10秒内返回一个拨号音。用户应该拨“9”。系统应该在10秒内返回一个不同拨号音。 在设立基线前,要确认需求和设计是正确且合适,在对最终产品编码前更要确认。附带说一下,不要从这个原则推断出原型试验方法有问题(见原则5、10、11、12、13)。

    1.9K20编辑于 2023-10-21
  • 来自专栏人工智能快报

    深度学习起源与先行

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

    86220发布于 2018-07-26
  • 来自专栏全栈程序员必看

    vs2017当前页面的脚本发生错误_win10当前页面脚本发生错误

    大家好,又见面了,我是你们朋友全栈君。 今天使用金山卫士对IE8进行组件升级,此后再此使用VS2008查看项目界面中控件变量类型,或者添加变量,都弹出“当前页面脚本错误”。在网上进行查找。

    78440编辑于 2022-09-27
  • 来自专栏巴啦啦的积累

    《架构整洁之道》第 10 章:ISP 接口隔离原则

    均为原创,读架构整洁之道笔记。接口隔离原则:(ISP :Interface Segregation Principle)。通过名称可以得知,该原则主要偏向于接口设计。 核心在于,不要依赖一个你不需要东西。应该使用接口,将被依赖类中方法隔离出来,使得这个类依赖于该接口,而这个接口中方法是干净,所有方法,该类都会用到,而不会存在用不到方法。 但是ISP不仅只是跟编程语言强相关设计原则,它还和架构有关。ISP 与软件架构设想有一个A系统,需要引入一个框架B,然而这个B强依赖于一个特定数据库C。 就相当于A也强依赖于C了,如果C中有Bug,或者对C中功能有修改的话,那么就可能导致B要被重新编译部署,B要重新编译部署,那么A也要重新部署。 如果C中一个无关功能发生了错误,那么也会让A和B发生错误。本章小结在任何层次软件设计中,如果依赖了它并不需要东西,就会带来意料之外麻烦。

    36750编辑于 2023-07-17
领券