【优秀外文翻译 第40弹】 几年前,我第一次通过Spotify的同事介绍了“破窗理论”。这个理论最先说的是,维护城市环境可以防止诸如故意破坏或在公共场合饮酒等小型犯罪,营造良好的秩序范围。...最重要的是,可以防止更严重的犯罪发生。 让我举一个纽约市的具体例子。 在1990年代,纽约的犯罪率急剧下降。纽约的暴力犯罪率下降超过56%,而全国这个比例只有28%。...后来大家将这些变化归因于前纽约市长Rudolph Giuliani提出的政策。其中最重要的一条是对小型犯罪的监管,也就是现在大家所知道的“破窗方法”。...基本上,你所处的环境会对你或者环境中的其他人所做的决定产生巨大的影响。如果你看到一个有很多破窗的房子,你很有可能会打破另一扇窗户进入房子。尽管你一开始根本没有犯罪意图。...在布朗克斯的汽车在那里10分钟内遭到袭击。然而,帕洛阿尔托的汽车保持完美了一周。接着,Zimbardo自己砸了一扇帕洛阿尔托的汽车的窗户。很快,“受人尊敬的白人”也加入到了汽车破坏中。
让我们看看它们是如何提升Android 的开发效率以及如何适应当下流行的编程规则和模式。 本文中描述的所有功能现在都可以在稳定的 AndroidX 软件包中使用,它们在去年均已发布或移至稳定版本。...在这种情况下,您需要在 Activity 中重写 onBackPressed() 方法。 但是,当您使用 Fragment 时,没有直接的方法来拦截返回。...在 Fragment 类中没有可用的 onBackPressed() 方法,这是为了防止同时存在多个 Fragment 时发生意外行为。...您不再需要重写Activity 中的 onBackPressed 方法,也不必提供自己的抽象的来实现需求的代码。 2....这样可以防止您的数据被 attach 到同一个 Activity/Fragment的另一个 SavedStateProvider 破坏。
为了防止用户误触返回键,还在使用 “再按一次退出” 吗? 追求简约与极速的时代,这种交互显然已经Out了嘛~ 下面我们来看一下如何用四行代码实现优雅退出。...代码实现 第一步,声明一个Runnable private Runnable mFinishRunnable = this::finish; 第二步,重写Activity的onBackPressed()...方法 @Override public void onBackPressed() { getWindow().getDecorView().postDelayed(mFinishRunnable...,Constants.VALUE_FINISH_DELAYED_TIME); moveTaskToBack(true); } 第三步,重写Activity的onStart()方法 @Override...*/ @Override public void onBackPressed() { // super.onBackPressed(); //注释掉 super 代码. /
我们一直在喊敏捷开发,其实敏捷开发的一个很重要的目的就是消除浪费,防止破窗效应的发生。事情太难,就让它简单,更简单。流程太重,就让它轻点,更轻点。尽量扫清开发的障 碍,消灭破窗形成的环境。...下面我会从软件构建的很多方面来描述如何防止“软件开发中的破窗”。 一、脏代码 如果代码不整洁,后来人就很难看懂,人们往往会对难以看懂的代码失去耐心,不愿意进一步了解。...如果有了单元测试,有了验收测试,当我们每做一下重构时,我们都可以从测试快速获得反馈,每当红条亮起时,我们知道我们破坏了一些已有的功能,我们 停下来去修复,当绿条亮起时,我们知道现在处于安全状态,可以安心的继续重构...上面主要从代码实践方面来阐释编码中的破窗和如何防止破窗,其实在软件开发的很多方面都存在类似的情况。...日本的丰田公司,在远远落后于福特和通用之后,采用5S的精益思想【注3】,成为后起之秀,而这5S(整理、整顿、清扫、清洁和素养)最终的目的就是 防止破窗效应。
单例模式被成功破坏! 那么怎么抵制被克隆呢? ? 就是重写 clone 方法,调用 getInstance() 方法,返回已有的实例即可! 现在我们再来看序列化是如何破坏单例模式的。...现在假设你的单例模式,实现了 Serializable 接口。看我下面反序列化的案例! ? 执行之后,hash 值不一样了,获取的对象非同一对象。结论,单例模式又被破坏了!那么怎么防止被反序列化呢?...其中有一个 readOrdinaryObject 方法在做怪! ? 关键代码都注射的比较全,我相信你能看明白。如果还不明白,加我微信ID:xttblog。 最后,我们再来看反射是如何破坏单例模式的!...执行之后,hash 值不一样了,获取的对象非同一对象。结论,单例模式又被破坏了!那么如何解决呢?很简单,加入下面的代码。 ? 因为执行反射会调用无参构造函数,所以上面的判断就可以起作用了!...枚举类型是绝对单例的,可以无责任使用。 ? 一个枚举,就算实现双接口,也是无论如何都无法被破坏的。枚举无法克隆,没有这样的方法。没有构造函数,会抛出异常。就算你在枚举里加了构造函数,也是一样的。
,这就破坏了 Singleton 的单例性。...所以,如果想要防止单例被反序列化破坏,就让单例类实现 readResolve() 方法 反射破坏单例 上面说到,反序列化底层其实就是通过反射来创建一个新对象的,我们直接来看反射是怎么破坏单例的:...是通过类的构造函数来的 所以如果我们想要阻止反射破坏单例,我们就需要修改类的构造函数: 重新执行一遍我们的代码,不出所料抛异常了,这样便防止了单例被反射破坏: 不过这种构造函数判断的方法,只能阻止饿汉式的单例模式...= null 的判断,不会抛异常,再通过 getInstance 创建对象,这两个对象就不是同一个对象了,即单例模式被破坏了。...总结下,如果今后需要自己手动实现一个单例的话,可以选择【构造函数判断】+【实现 readResolve() 方法】的方式 来防止单例被破坏 优雅的单例实现:Enum 那如果我不想在构造函数里面做判断,也不想写
本文将通过实例+阅读Java源码的方式介绍序列化是如何破坏单例模式的,以及如何避免序列化对单例的破坏。 单例模式,是设计模式中最简单的一种。...输出结构为false,说明: 通过对Singleton的序列化与反序列化得到的对象是一个新的对象,这就破坏了Singleton的单例性。...答:序列化会通过反射调用无参数的构造方法创建一个新的对象。 那么,接下来我们再看刚开始留下的问题,如何防止序列化/反序列化破坏单例模式。...防止序列化破坏单例模式 先给出解决方案,然后再具体分析原理: 只要在Singleton类中定义readResolve就可以解决该问题: code 4 ?...所以,原理也就清楚了,主要在Singleton中定义readResolve方法,并在该方法中指定要返回的对象的生成策略,就可以方式单例被破坏。 总结 在涉及到序列化的场景时,要格外注意他对单例的破坏。
简介 破窗效应是犯罪心理学的一个理论,指如果一个建筑,当出现小量破窗的时候,会诱发更多的人为破坏。如果一个建筑出现破窗的时候及时修复,会受到更少破坏。...我们是否有这样的经历,当接手一个代码质量较差的项目,例如一个函数有上百行的代码,函数里有大量的 if else,如果让你增加一个功能,你更倾向于直接在目标函数上加入你的改动代码,而不是通读该方法,再进行封装修改呢...但是,这样的项目,就是典型的破窗效应,因为第一个人产生了破窗,没有及时修复,后面来的人,就会更大胆的破坏,最终项目没法维护。...二、如何拯救 1、eslint 自动修复:还是上面说的代码规范,我们需要利用 eslint 进行老代码清理,使用 eslint –fix 命令,可以实行自动格式化。...3、重构你的核心模块:如果你要经常修改的模块又是核心模块,建议你对其进行重构,重构时,利用单元测试进行覆盖,保障代码质量,同时,团队成本要进行 review,防止把代码修改为你喜好的代码,而非大家能理解的代码
主要讲了三个点:1.意志力的生理基础 2.什么东西会削弱意志力 3.如何提高意志力 1.意志力的生理基础: 1.大脑中控制我们的意志力的地方叫前额叶,它会控制我们的三个行为: 1.让我们要去做对自己有益的事情...2.让我们不要去做对自己有害的事情 3.让我们建立长远的想要达到的目标 2.大脑中的冲动和自控是分别由两个系统控制的: 1.冲动系统:这个系统体现了我们的动物性。...3.人的心率变异度——遇到事情心跳变化的速率,这个指标可以衡量一个人的意志力强弱 2.什么东西会削弱意志力 1.身体不健康——破坏了意志力的生理基础 2.道德许可——做了一件自认为好的事情,常常会让我们放纵...比如:跑步之后,为了奖励自己而吃更多的东西。 3.恐惧管理——简称破罐子破摔,现状比较糟糕的情况下,常常也会让我们放纵。比如:心里想已经很胖了,再吃东西也无所谓。...比如:别人吃很多东西,你也吃 3.如何提高意志力: 1.健身、冥想、呼吸训练(控制自己每分钟呼吸次数在 4—6次左右) 2.去道德化——去除奖励自己的心理,要认为好的事情都是自己该做的事情,将好事情当成自己的习惯
预先资源分配法 一次性申请所有需要的资源,只要有一种资源不满足要求,哪怕其它需要的资源都足够,也不做任何分配。这样一来就没有“保持”资源的状态,只有“请求”资源的状态,破坏了请求与保持条件。...有序资源分配法 在申请不同类资源时,必须按指定顺序申请,破坏了环路等待条件。 正例:线程A、B申请资源顺序均为R1->R2; 反例:A申请顺序为R1->R2,B申请顺序为R2->R1。...避免死锁 也是预发死锁,但不会事先去破坏死锁的必要条件,只是有人请求资源时,用某种方法防止系统进入不安全的状态(死锁),从而避免发生死锁。...银行家算法 基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。 检测死锁和解除 不采取措施防止死锁产生,允许系统产生死锁,但是可以通过一些手段检测出死锁,然后将死锁解除。...检测方法: 定时检测 效率低时检测 进程等待时检测 解除死锁方法: 根据具体业务场景,可以撤销或挂起死锁的进程/线程,使资源释放。
当测试通过时,我们将该提交安装为Google的生产Go工具链。 如果一个改变破坏了Google内部的测试,我们假设它也会破坏Google外部的测试,并寻找减少影响的方法。...大多数时候,我们完全回滚改变或找到一种方式重写它,使其不破坏任何程序。然而,有时候,我们得出的结论是,这个改变是重要的,即使它确实破坏了一些程序。...我们在测试中发现的问题有很多例子,我们决定这些问题确实破坏了兼容性规则,并在发布之前回滚。时间精度的改变是一个有趣的例子,它破坏了程序,但我们仍然发布了。...这个改变没有在Google内部破坏任何东西,但很久以后我们听到了一个外部用户的代码确实破坏了。他们的程序使用下划线分隔的数字作为数据格式。...这种方法意味着每个新版本的Go应该是旧版本Go的最好的可能的实现,即使在以后的版本中以兼容但破坏的方式改变行为时也能编译旧代码。
如何防止外部调用new关键字来创建新的对象 如何做到防止通过对象序列化来创建新的对象 实现了cloneable的类,如何防止clone来创建新的对象 如何防止反射调用构造器来创建新的对象 如何做到线程安全...总结一句话,如何线程安全的创建唯一实例对象。...如何防止单例被破坏 我们上面有提到过,一个完整的单例需要做到防止 对象序列化对单例语意的破坏 反射对单例语意的破坏 clone对单例语意的破坏 解决对象序列化的问题 try {...catch (IOException e) { e.printStackTrace(); } 输出是false,经过序列化和反序列化后,生成了二个单例对象,显然破坏了单例的语意...解决clone的问题 尽量不要给单例实现cloneable接口,如果非要实现,也在重写的clone方法里,返回此单例对象。
另外,不同的系统视图也可能有单独设置的响应方法,或者自定义视图也会提供单独的响应方法,例如列表视图中的某一行数据被单独点击后如何响应,这些都要根据具体的视图类查找并使用对应的响应方法,这里不再赘述。...---- 界面间交互 上文介绍了针对一个界面Activity的交互响应,那么两个界面Activity之间如何交互呢?...发送数据界面 在启动一个界面Activity之前要先创建意图对象,在该意图对象调用putExtras(Bundle bundle)方法,可以将要发送的数据打包成android.os.Bundle类型的实例存入...而当启动界面Activity在被用户操作返回时,系统将回调该启动界面的onBackPressed()方法,之后将该Activity从栈中移出并销毁。...所以可以重写onBackPressed()方法,在该方法中调用setResult(int resultCode, Intent data)设置上文提到的返回时参数。
1、背景:APP端上安全在谈什么 APP的每个业务场景都有其既定的运行模式,若被人为破坏就可认为是不安全的。...举个栗子,比如秒杀场景:大量用户在特定时间点,通过点击抢购来秒杀优惠商品,从而营造一种紧迫而有噱头的营销场景,但如果能通过非法手段自动抢购、甚至提前开始刷接口抢购,那就彻底破坏了业务的玩法,这就是一种不安全的运行模式...以秒杀为例,通过营造紧迫而又刺激的氛围可以让活动更有意思,但如果能直接刷接口/或者通过插件抢跑,那就会破坏其公平性,影响用户的参与感,造成资产及口碑受损,这类场景如何应对?...,比如Android采用C+混淆来处理 为线上APP添加防调试与HOOK的能力,防止动态调试探测, 添加防止代理与中间人劫持的能力,例如SSLPING等技术,避免被抓包探测 从二次打包入手,添加签名、完整性检测的能力...4、线上执行方案 最后一步是上线执行,上述的手段多种多样,但相互之间并非孤立运行,彼此可以相互穿插,灵活配合,不存在特定的章法,全看使用方的意图,如何探测,探测之后如何处理,是全杀还是放一部分,都看操刀者自己的运作
首先我们来看一下tcp四次挥手的过程示意图: 客户端首先发起FIN请求,所以客户端会进入time_wait状态。...1.我们都知道的是time_wait太短或者取消,可能会使上一个连接延迟的数据包(关闭连接,但是没有关闭完全),所以延迟的数据包可能被新的连接收到,从而影响到新连接的数据。...time_wait太快,导致time_wait时间太短,引得连接建立后,上个连接在网络中延迟的数据包被新的连接收到了,从而破坏了新的tcp连接的可靠性。...2.第二个作用是采用正常的time_wait机制会防止最后一个对FIN的ACK丢失,我们看下面这张图: 当最后一个ACK丢失后,服务端一直处于last_ack状态,因为没有收到客户端的ACK所以服务端就会认为这个连接还是有效的...,就可能继续给客户端发送消息,而且当该服务端收到新的连接请求时,由于服务端还在等待上个连接的ACK,这时由于它等待的seq值和新的请求的seq不符,所以客户端会发送rst请求重新连接,所以新的连接无法建立
从这里可以看出,有信号量被破坏了。显然,这里只是问题的表象,根因并不在这里。...50ms,并且检测到内存错误后,立即抛出异常,防止其他程序破坏现场。...内存踩的很有技巧,相对位置固定的地址,前面的内容不破坏后面的内容不破坏,偏偏只破坏了中间的四个字节,而且这四个字节和内存管理模块free状态的magic code保持一致。...更不可思议的是,问题很快就复现了。如下图所示,0xa182f710是B的起始地址,可以看到,有16个字节被破坏了。...问题很快就又出现了,结果如下图所示,0xa182f714是全局数组B的起始地址,可以看到,有12个字节被破坏了。
A、反病毒软件可以查、杀任何种类的病毒 B、计算机病毒是一种被破坏了的程序 C、反病毒软件必须随着新病毒的出现而升级,提高查、杀病毒的功能 D、感染过计算机病毒的计算机具有对该病毒的免疫性 3.下列关于计算机病毒的说法中...A、可执行 B、可传染 C、可保存 D、可拷贝 7.防止软盘感染病毒的有效方法是______。...A、不要把软盘与有毒软盘放在一起 B、使软盘写保护 C、保持机房清洁 D、定期对软盘进行格式化 8.为防止计算机病毒的传播,在读取外来软盘片上的数据或软件前应该______。...A、从键盘上输入数据 B、随意运行外来的、未经消病毒软件严格审查的软盘上的软件 C、所使用的软盘表面不清洁 D、电源不稳定 10.防止软盘感染病毒的有效方法是______。...A、反病毒软件可以查、杀任何种类的病毒 B、计算机病毒是一种被破坏了的程序 C、反病毒软件必须随着新病毒的出现而升级,提高查、杀病毒的功能 D、感染过计算机病毒的计算机具有对该病毒的免疫性 15.下列叙述中
通过 dispatch 方法,回调触发事先注册的_mutations方法。...这份代码有很多问题,举例来说: 使用简单对象作为 state 状态的突变仅仅通过修改state对象属性值实现 没有任何有效的机制,防止 state 对象被误修改 这些设计问题,在Vuex中同样存在,这与...这样的设计意图,主要还是职责分离,action 单元用于描述 发生了什么;mutation用于修改数据层状态state。...即可”的假象,破坏了Flux的信号机制 在 action 中手误修改了 state ,而没有友好的跟踪机制(这一点在getter中特别严重) 由于没有确切有效的机制防止错误,在使用Vuex的过程中,需要非常非常警惕...单向数据流 这里的数据流是指从 Vuex 的 state 到 Vue 组件的props/computed/data 等状态单元的映射,即如何在组件中获取state。
例如,将资源分层,得到上一层资源后才能够申请下一层资源,这样就破坏了环路等待条件。用户申请资源时,要求一次性申请所需要的全部资源,这就破坏了占有并等待条件。...当一个已经占有某些不可剥夺资源的进程,请求新的资源而得不到满足时,它必须释放已经占有的所有资源,待以后需要时再重新申请,这就破坏了不剥夺条件。...这些预防死锁的方法破坏了系统的并行性和并发性,通常会降低系统的效率。...避免死锁 该方法同样属于事先预防,但它并不事先采取各种限制措施去破坏产生死锁的四个必要条件,而是在动态分配资源的过程中,用一些算法来防止系统进入不安全状态,避免死锁的发生。 具体策略如下: 1....这种方法很简单,但损失很大,先前的工作可能都浪费了。
之前谈了《如何从头组建测试团队?》,今天谈谈空降兵的那点事儿。 成功做好空降兵的策略是什么? 新官上任三把火怎么烧? 我的经验很简单:以静制动,先立后破。遇事则急,遇人则缓。...可事实上,很多时候都是旧有的秩序被破坏了,但新的需要确定的秩序却迟迟无法确立,最后往往还是不得不回过头去走过去的老路。然而,破坏带来的混乱和损失却是难以恢复的。...破和立其实都是手段,到底谁先谁后应该取决于我们的目标。...强调先立后破,还有一个原因,就是先立后破实施的风险更小,改革成本更低,更容易被各方接受,比较适合空降兵操作。...对于人的问题,组好的处理方法还是让老板自己了解实际情况,自己做决定。这样可以避免你的风险!
领取专属 10元无门槛券
手把手带您无忧上云