首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

原 GetHashCode重写指南(译文)

我偶尔也会回应“我想把我在GetHashCode中抛出notimplementedexception以确保对象从未投入一个哈希表;我不打算为这个对象会被放入一个哈希表。“类似于这种问题。...好了,好了,但以前的指南中的最后一句话;这意味着你的对象不能在LINQ中使用,也不能享受由此带来的高性能。 因此它不会抛出一个异常, 所以必须最终返回一个值。...如果相近数据产生相近哈希值, 那么可能会减少所使用的桶数, 并在桶变得非常大时导致性能问题。...在同一个代码中的线程 bug 之间, 我破坏了 msn.com 上一个重要页面的性能;这既费钱又尴尬。数据有时是大量相似的, 一个好的哈希算法将考虑到这一点。 特别要小心“异或”。...这是很常见的散列码的结合一起异或他们,但这未必是一件好事。假设您有一个数据结构,其中包含发送地址和家庭地址的字符串。即使在单个字符串的哈希算法是非常好的,如果存在大量两个字符串相同的对象,这些对象的。

1.1K60

解决性能问题的复杂性

Kerry Osborne 在 P99 CONF 2023 上的演讲,“如何提高解决复杂性能问题的能力”,即使在几个月后仍然受到广泛关注。...查看特色演讲者 + 获取免费 P99 CONF 24 通行证 为什么性能问题如此难以解决 让我们谈谈我们在性能领域试图解决的问题的特征。它们很复杂,对吧?几乎每个问题都有多种解决方案。...如果有人来找我说,“嘿,我的数据库很慢”,那么可能有一百万种原因导致它变慢,或者只是让人感觉它很慢。也可能有很多不同的解决方案可以加快系统的速度。...因为我们的下一步是收集数据以了解导致问题的原因。 假设我们的定义是 IO 系统很慢。由于我们的偏见,我们的大脑会自动想要丢弃与导致 IO 系统变慢无关的任何数据。这只是我们大脑的工作方式。...这是这种方法的主要特征。 这种方法有优点也有缺点。由于我们没有经过一个有条理的数据收集步骤,因此我们经常会错过重要的数据。

9410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【前端技能树-需要避免的坑】Javascript 开发者容易在花田里犯的错

    但是 Javascript 本身的灵活性、微妙性导致开发者(特别是初级开发者)经常会面临一些 Javascript 带来的问题。 本篇文章,我会和你一起讨论其中的 10 个问题。...: Uncaught TypeError: this.clearBoard is not a function 为什么会导致这样的错误?...即使是手动垃圾收集器也无济于事。看起来每次调用 replaceThing 时我们都会泄漏longStr。但是这是为什么呢?...当需要添加多个 DOM 元素时,一种有效的替代方法是使用文档片段(document fragments),它将有效提高效率和性能: const div = document.getElementById...这里的问题更多的是性能和效率问题。 我们经常会忽略一个问题,如果将字符串作为第一个参数传递给 setTimeout或setInterval,它将被传递给函数构造函数以转换为新函数。

    19911

    Java 的异常处理机制

    介绍 Java 中的异常异常是程序在运行过程中出现的程序异常事件,异常会中断正在执行的正常指令流 。Java 中的异常分为两大类:Exception 和 Error。...如果把异常输出到日志系统时,我们在保证诊断信息足够的同时,也要考虑避免包含敏感信息,因为那样可能导致潜在的安全问题。...你先思考一下这是为什么呢?...异常处理时,性能开销大的地方我们从性能角度来审视一下 Java 的异常处理机制,这里有两个性能开销相对大的地方:try-catch 代码段会产生额外的性能开销,或者换个角度说,它往往会影响 JVM 对代码进行优化...,所以建议仅捕获有必要的代码段,尽量不要一个大的 try 包住整段的代码;Java 每实例化一个 Exception,都会对当时的栈进行快照,这是一个相对比较重的操作。

    73670

    c语言也有“回”字的多种写法——整数交换的三种方式

    进行异或运算的过程如下: 101 (5)^ 011 (3) =110 (6) 因此,5 异或 3 的结果是 6。...为什么不是看上去更加省内存的 位运算法 或者 加减交换法 呢? 常规方式 优点 可读性高:代码非常直观,容易理解和维护。即使是初学者也能快速理解其逻辑。...适用性强:适用于所有情况,包括 a 和 b 指向同一个地址的情况。 缺点 占用额外内存:需要一个临时变量来存储其中一个值,但现代编译器通常会对这种简单的交换操作进行优化,性能非常接近位运算交换。...存在不适用的情况:如果 a 和 b 指向同一个地址,会导致 a 和 b 都变为0。 性能差异:在某些情况下,位运算可能比简单的临时变量交换稍慢,但这种差异通常可以忽略不计。...不过,位运算的复杂性可能会导致编译器优化不如临时变量交换。 推荐使用临时变量交换的原因 在大多数情况下,笔者都推荐使用临时变量来交换两个整数的内容: 可读性高:代码更直观,容易理解和维护。

    7010

    项目中的异常处理策略与最佳实践

    在软件开发的世界里,异常就如同人生中的意外,时常会出现,却又令人防不胜防。无论是在什么规模的项目中,异常处理都是不可或缺的一环。...今天,我们将深入探讨,在项目开发中,为什么你一定会使用异常处理,以及如何巧妙地运用它,为你的代码赋予更高的稳定性和可维护性。...例如,在一个电子商务应用中,如果支付过程中出现异常,良好的异常处理可以避免用户订单丢失,保障交易安全。 2. 提升用户体验 异常处理也是用户体验的关键因素之一。...这可能掩盖了潜在的问题,导致难以定位和修复。在捕获异常时,务必要有相应的处理逻辑,即使只是记录日志或给用户友好提示。 3....掌握好异常处理技巧,你将为自己的代码添加一层强大的保护盾,让你的项目更具活力、更加的健壮、更具韧性。 在项目中,让异常处理成为你的得力助手,让代码在波澜中依然能够平稳前行!

    60020

    【面试题精讲】JVM-clinit指令

    当一个 Java 类第一次被主动使用时,Java 虚拟机会处理收集到的 clinit()方法,执行这些类的静态初始化。 2. 为什么需要 clinit 指令?...6. clinit 指令的缺点 clinit 指令 的一个潜在缺点是它可能会导致类加载的过程变慢,特别是当类中有大量的静态变量或静态代码块时。...此外,如果静态初始化代码中存在错误,那么这个错误将在类加载时抛出,可能导致类无法被加载。...静态初始化代码中不应该包含可能导致异常的代码,否则可能导致类无法被加载。 静态初始化代码应该尽可能简单,避免导致类加载过程变慢。 8....虽然它可能会导致类加载过程变慢,但是正确使用 clinit 指令可以确保类的静态初始化正确无误。 本文由 mdnice 多平台发布

    18010

    springCloud学习3(Netflix Hystrix弹性客户端)

    然而,当服务运行缓慢时,检测到这个服务性能越发低下并绕过它是非常困难的,因为以下几个原因: 服务的降级可以是以间歇性的故障开始,并形成不可逆转的势头————可能开始只是一小部分服务调用变慢,直到突然间应用程序容器耗尽了线程...性能较差的远程服务会导致很大的潜在问题,它们不仅难以检测,还会触发连锁反应,从而影响整个应用程序生态系统。如果没有适当的保护措施,一个性能不佳的服务可以迅速拖垮整个应用程序。...后备(fallback)模式   当远程调用失败时,将执行替代代码路径,并尝试通过其他方式来处理操作,而不是产生一个异常。也就是为远程操作提供一个应急措施,而不是简单的抛出异常。...--本依赖不是必须的,spring-cloud-starter-hystrix已经带了,但是在Camden.SR5发行版本中使用了1.5.6,这个版本有一个不一致的地方,在没有后备的情况下会抛出java.lang.reflect.UndeclaredThrowableException...因此在存在大量请求的情况下,一个服务出现性能问题会导致 Java 容器内的所有线程被占用,同时阻塞新请求,最终容器彻底崩溃。

    56720

    浅谈Kotlin的Checked Exception机制

    有了Checked Exception,就可以保证我们的程序不会存在一些隐藏很深的潜在异常,不然的话,这些异常会像定时炸弹一样,随时可能会引爆我们的程序。...许多Java程序员会比较担心这一点,Kotlin取消了Checked Exception机制,这样不会导致我的程序变得很危险吗?每当我调用一个方法时,都完全不知道这个方法可能会抛出什么异常。...那么至于为什么取消Checked Exception并不会成为导致程序出现更多异常的原因,我想分成以下几个点讨论。 第一,Kotlin并没有阻止你去捕获潜在的异常,只是不强制要求你去捕获而已。...比如我正在编写网络请求代码,由于网络存在不稳定性,请求失败是极有可能发生的事情,所以即使没有Checked Exception,大多数程序员也都知道应该在这里加上一个try catch,防止因为网络请求失败导致程序崩溃...另外,当你不确定调用一个方法会不会有潜在的异常抛出时,你永远可以通过打开这个方法,观察它的抛出声明来进行确定。

    1.5K43

    动量因子:行为金融角度新解

    另一个基于风险的解释是,动量溢价可能来自投资者期望得到潜在崩盘风险的补偿。事实上,众所周知,动量策略可能会遭遇突然的、毁灭性的崩溃,比如2009年发生的那次。...与主流的新古典主义金融学不同,新古典主义金融学认为投资者是理性的代理人,理解金融市场的风险和机会,行为金融学建立在假设投资者不是完全理性的,他们基于启发式的决策,这可能导致错误,因此产生了“异象”。...反应不足也会导致动量溢价。这是一种保守偏差,这意味着对于他们认为正确的信念,通常会选择不变或者缓慢地改变。...如果与动量相关的异象能够从人类的错误中得到到稳健的收益率,那么自然而然的问题是,为什么它们没有被套利行为消除。 首先,动量因子在真实交易中,实施起来并不容易。...第三,定义动量没有一个唯一正确的方法。即使是简单的价格动量,也经常使用不同的回溯窗口来定义,从3个月到12个月不等。

    94520

    springCloud学习3(Netflix Hystrix弹性客户端)

    然而,当服务运行缓慢时,检测到这个服务性能越发低下并绕过它是非常困难的,因为以下几个原因: 服务的降级可以是以间歇性的故障开始,并形成不可逆转的势头————可能开始只是一小部分服务调用变慢,直到突然间应用程序容器耗尽了线程...性能较差的远程服务会导致很大的潜在问题,它们不仅难以检测,还会触发连锁反应,从而影响整个应用程序生态系统。如果没有适当的保护措施,一个性能不佳的服务可以迅速拖垮整个应用程序。...后备(fallback)模式   当远程调用失败时,将执行替代代码路径,并尝试通过其他方式来处理操作,而不是产生一个异常。也就是为远程操作提供一个应急措施,而不是简单的抛出异常。...--本依赖不是必须的,spring-cloud-starter-hystrix已经带了,但是在Camden.SR5发行版本中使用了1.5.6,这个版本有一个不一致的地方,在没有后备的情况下会抛出java.lang.reflect.UndeclaredThrowableException...因此在存在大量请求的情况下,一个服务出现性能问题会导致 Java 容器内的所有线程被占用,同时阻塞新请求,最终容器彻底崩溃。

    92610

    React官方最新发版,16.9支持组件性能评估

    为大型React应用提供React.Profiler以进行性能评估 使用javascript:形式的url,React将抛出warning,并且这种写法在未来的主要版本中会被禁止。...(Strict Mode)来禁止使用这类有潜在风险的生命周期。...它可以作为一个节点添加在React应用的任意一处,并且能评估React 应用程序渲染的频率以及渲染的 “成本”。...有了如上组件更新的回调信息,我们可以更加精细地判断使用的优化方法所带来的收益。 需要注意的是Profiler即便是一个轻量级的组件,但是依然会有性能和计算开销,不推荐在生产环境使用。...React支持它会导致库变大且变慢。因此,在 16.9 中正在弃用此模式,并在遇到警告时输出警告。

    92660

    ConcurrentDictionary 对决 Dictionary+Locking

    当然,我碰到的问题与我的使用方法有关,一般来说,我会使用字典类型来缓存一些数据: 这些数据创建起来非常的慢; 这些数据只能创建一次,因为创建第二次会抛出异常,或者多次创建可能会导致资源泄漏等; 我就是在第二个条件上遇到了问题...我在一个 Remoting 框架中使用了这种方式,并且将所有的实现都放到了一个不能被回收的程序集当中。如果一个类型被创建了两次,第二个将一直存在,即使其从未被使用过。 直接地或者间接地创建一个线程。...如果是 Dictionary + Locks 方式,会对读操作进行锁互斥控制,即使需要读取的是一个完全不同的键值,显然读取操作会变慢。 这样看来,ConcurrentDictionary 扳回一局。...如果你的确很关注性能,可能 Dictionary + Locks 仍然是一个好的方案。重要的因素是,添加和删除数据项的数量。但如果是读操作多,就慢于 ConcurrentDictionary。...所以,真相是:如果你不需要锁得话,Dictionary 类在读操作上更快,而锁会导致读操作变慢。

    1.6K70

    学习了这么些年,请问编程中除以 0 一定抛异常吗?

    引言在计算机编程中,除以 0 是一个常见的错误操作。对于整数类型来说,这种操作通常会导致程序抛出 ArithmeticException 异常,终止程序执行。...对于整数除以零的操作,不存在模糊或特殊值,抛出异常是唯一合理的选择。7. 为什么浮点数不抛异常?浮点数在设计上就考虑到了容错性。...浮点数返回 Infinity 或 NaN,可以使程序继续运行,避免由于单一错误导致整个系统崩溃。8. 程序设计中的稳定性与性能浮点数不抛异常的设计,有助于提高程序的稳定性。...此外,抛出异常通常会消耗更多的系统资源和时间,尤其在大规模的数值计算中,异常的处理和堆栈追踪会显著影响性能。因此,避免不必要的异常抛出,能在性能上带来显著的优势。9....这种设计旨在保证程序的稳定性、性能和容错性,尤其在科学计算、图形渲染等领域具有重要意义。理解这一行为,可以帮助开发者更好地处理边界情况和潜在错误,提高程序的健壮性,并能在遇到特殊情况时做出合理的应对。

    26830

    业务系统 hystrix 实际应用

    3000000 次失败 2 小时以上的停机时间/月,即使所有依赖项都具有良好的正常运行时间。...当一切正常时,请求流可能如下所示: 当许多后端系统中的一个变得潜在时,它可以阻止整个用户请求: 在高流量的情况下,一个潜在的后端依赖可能会导致所有服务器上的所有资源在几秒钟内饱和。...应用程序中通过网络或进入客户端库可能导致网络请求的每一点都是潜在故障的根源。...第三方客户就是一个“黑匣子”,其中实施细节被隐藏,并且可以随时更改,网络或资源配置对于每个客户端库都是不同的,通常难以监视和 更改。 通过的故障包括: 网络连接失败或降级。 服务和服务器失败或变慢。...新的库或服务部署会改变行为或性能特征。 客户端库有错误。 所有这些都代表需要隔离和管理的故障和延迟,以便单个故障依赖关系不能导致整个应用程序或系统的故障。

    25710

    开发人员面临的10个最常见的JavaScript问题

    今天,JavaScript 是几乎所有现代 Web 应用的核心。这就是为什么JavaScript问题,以及找到导致这些问题的错误,是 Web 发者的首要任务。...如果你猜测console.log()的调用会输出 undefined 或者抛出一个错误,那你就猜错了。答案是输出10。为什么呢?...在大多数其他语言中,上面的代码会导致一个错误,因为变量i的 "生命"(即使作用域)会被限制在for块中。...而且,只在 replaceThing 的主体和unused的函数中被引用,而事实上,从未被使用。 因此,我们又一次想知道为什么这里会有内存泄漏。...当需要添加多个DOM元素时,一个有效的替代方法是使用 document fragments来代替,从而提高效率和性能。

    82810

    Selenium异常集锦

    正确捕获/处理异常是一个好习惯,因为未处理的异常会导致程序失败而终止,从而最终影响终端用户体验。异常对象包含有关异常类型,调用堆栈和异常信息等内容,这些信息将有助于调试并使代码更可靠。...与浏览器自动测试相关的场景中,经常会遇到未经检查的异常,因为这些测试涉及浏览器和操作系统的不同组合和版本,包括网络和异步加载等因素都会导致未检查异常的发生。...ElementNotInteractableException 即使目标Web元素存在于DOM上,但与该元素的交互将击中另一个Web元素时,也会抛出此ElementNotInteractableException...在Selenium测试自动化中通常会遇到这种情况,其中尝试对Web元素(例如按钮、标签、超链接等)进行相关操作,但该元素从视图中隐藏了。另一个示例是HTML中定义的具有隐藏类型的元素。...如果会话处于非活动状态或从未存在过,则可能发生这种情况。

    5.4K20

    日活3kw下,如何应对实际业务场景中SQL过慢的优化挑战?

    然而,如果不加以优化,这种连接可能会导致查询性能下降。 多表连接的执行速度变慢主要是因为数据库系统需要同时处理多个表,进行数据匹配和组合。这可能涉及大量的数据扫描、比较和排序,导致查询变得缓慢。...通过优化查询条件、添加索引、限制返回字段等方式,可以改善这个查询的性能,使其执行更加高效。 为什么互联网公司都不建议使用多表join?...举个例子,有一个字段它一共在10万行数据里有10万个值对吧?结果呢?这个10万值,要不然就是0,要不然就是1,那么他的基数就是2,为什么?因为这个字段的值就俩选择,0和1。...情况五:表中数据量太大 当单个表中的数据量超过1000万条时,通常会导致查询效率下降,即使使用了索引也可能变得比较缓慢。在这种情况下,单纯建立索引并不能完全解决问题。...如果发现上述问题,则需要去监平台上看一下相关SQL的耗时情况 我们的问题其实就是简单的一个更新语句,其中使用了乐观锁进行并发控制。 为什么乐观锁还会导致大量的锁耗时呢?

    15210

    为什么那么重要?

    3、日志数据:服务器上的日志文件记录了服务器的活动和事件,包括访问日志、错误日志、安全日志等。这些日志文件可以用于监测服务器的性能、排查问题和进行安全审计。...4、应用程序数据:服务器上安装的各种应用程序所使用的数据。这些数据可以是应用程序的配置文件、缓存数据、用户上传的文件等。5、安全备份数据:为了防止数据丢失或灾难恢复,服务器上通常会进行定期的备份。...由于服务器数据具有高度的保密性和安全性要求,只有被授权的用户才能够访问和管理这些数据。这些数据通常都是通过互联网进行传输和共享,因此在互联网安全领域也占据着重要的位置。为什么服务器数据如此重要呢?...这些攻击不仅可能导致数据泄露,还可能破坏系统的正常运行。现代网络攻击技术日新月异,攻击者使用的工具和方法越来越复杂,给防御工作带来了极大的挑战。内部威胁内部威胁来源于组织内部人员的恶意行为或失误。...数据安全的最佳实践1、数据加密加密是保护数据安全的基本方法之一。无论是存储数据还是传输数据,加密技术都能有效防止未经授权的访问。对敏感数据进行加密可以确保即使数据被盗取,攻击者也无法轻易解读。

    12310

    深度学习的这些坑你都遇到过吗?神经网络 11 大常见陷阱及应对方法

    一般来说,规范化(normalization)的意思是:将数据减去均值,再除以其方差。通常这是对每个输入和输出特征单独做的,但你可能经常会希望对特征组做或特别主翼处理某些特征的规范化。 为什么?...类似地,要小心具有这样一个较小范围的特征,它们的方差接近或等于0,如果将它们规范化,则会导致NaN不稳定。...即使你认为你拥有比参数多得多的数据量,或过拟合不重要的情况,或没出现过拟合,你仍然应该添加dropout或其他形式的noise。 怎样解决?...网络里有坏的梯度 问题描述 使用ReLU激活函数的深层网络通常会受所谓“死神经元”的影响,而后者是由不良梯度引起的。这可能会对网络的性能产生负面影响,在某些情况下甚至完全无法训练。 怎样解决?...还需要注意 实际上,与其他因素相比,隐藏单元的数量通常对神经网络性能影响很小,而在许多情况下,高估所需隐藏单位的数量不会使训练变慢。

    1.1K40
    领券