资讯

  • 聊聊高可用存储架构:集群和分区

    聊聊高可用存储架构:集群和分区

    主备、主从、和主主架构都基于一个共同的前提:主机需要有能力存储所有数据。然而,主机的存储和处理容量是有限的。以历史发展为例,Intel 386时代的服务器仅能存储几百MB数据,到了Intel奔腾时代则能够存储几十GB,而进入Intel酷睿多核时代后,服务器的存储能力增加到了数TB。尽管从硬件发展角度看,存储能力的提升速度相当快,但与业务需求的增长速度相比,这种提升还是远远不够。例如,截至2013年...

    日期:2024-04-26点击:3
  • 详解JavaScript中的层叠规则(CSS Specificity)

    详解JavaScript中的层叠规则(CSS Specificity)

    引言在前端开发中,CSS样式表用于定义网页元素的外观。然而,在实际应用中,可能会出现多个选择器同时作用于同一元素的情况,此时浏览器如何决定使用哪个样式呢?这就涉及到了CSS的层叠规则(Specificity)。本文将深入探讨JavaScript环境下CSS层叠规则的工作原理及其计算方法。1. CSS层叠规则简介CSS层叠规则是指当有多个CSS声明应用于同一个HTML元素时,浏览器依据特定的优先级顺...

    日期:2024-04-26点击:3
  • 为什么Java String哈希函数乘数为31?

    为什么Java String哈希函数乘数为31?

    哈喽,大家好,我是了不起。今天给大家介绍一个底层数字问题——为什么Java String哈希函数乘数为31?1、源码重现在这个实现中,31 被用作乘数。那么,为什么选择 31 作为乘数呢?2、降低哈希冲突31 是一个质数,相信大家学过数学的,质数是这样定义的:指在大于1的自然数中,除了1和它本身以外没有任何正因数的自然数。在哈希函数中,使用质数作为乘数可以提高哈希值的分布均匀性。如果使用...

    日期:2024-04-26点击:3
  • 从零到生产:Go在Google的历程

    从零到生产:Go在Google的历程

    2007年Go诞生于Google,2009年Google正式对外宣布了Go语言的开源!时至今日,距离Go开源已经过去了近15个年头了[1]!Go在Google公司内部究竟是怎样的一个状态呢?前Google员工Yves Junqueira近期撰文从其个人所见所闻谈了Go在Google的历程[2]!这里简单翻译,供大家参考!最近,Jeremy Mason[3]和Sameer Ajmani[4]撰写了有...

    日期:2024-04-26点击:2
  • .NET配置文件大揭秘:轻松读取JSON、XML、INI和环境变量

    .NET配置文件大揭秘:轻松读取JSON、XML、INI和环境变量

    概述:.NET中的IConfiguration接口提供了一种多源读取配置信息的灵活机制,包括JSON、XML、INI文件和环境变量。通过示例,清晰演示了从这些不同源中读取配置的方法,使配置获取变得方便且易于扩展。这种方式适用于不同场景,如API密钥、数据库连接等,为应用提供了高度可配置性。在.NET中,IConfiguration接口提供了一种灵活的方式来管理和读取应用程序配置信息。这可以包括来自...

    日期:2024-04-26点击:3
  • Zustand:让React状态管理更简单、更高效

    Zustand:让React状态管理更简单、更高效

    在React项目开发中,状态管理一直是一个绕不开的话题。很多人提到状态管理,第一时间会想到Redux。Redux作为一个历史悠久的库,确实在功能性和中间件生态方面都有着不错的表现,但它复杂的配置和繁琐的代码书写让许多开发者望而却步。什么是Zustand?近年来,React社区涌现出了许多新的状态管理库,比如Jotai、Recoil,还有本文的主角——Zustand。这些新兴的库不仅可以完全替代Re...

    日期:2024-04-26点击:3
  • Rust: 如何区分可变引用还是可变变量?&mut VS mut

    Rust: 如何区分可变引用还是可变变量?&mut VS mut

    变量要在Rust中创建不可变变量,只需编写let x = 1337,这是简单的。如果想创建一个以后可以改变的变量,只需在let之后添加mut关键字。添加mut关键字通知其他人该变量将在代码的其他地方被修改。例如:let mut x = 1337 和 let y = 42,如图:图片引用目前,一切都很简单。然而,当使用mut引用时,事情开始变得有点棘手。让我们创建一些。let mut x = 133...

    日期:2024-04-26点击:3
  • Java的栈帧和动态链接是什么?

    Java的栈帧和动态链接是什么?

    在 Java 的面试过程中,不可避免的一个面试题那就是 JVM ,而 JVM 的面试题中,有各种,比如在堆中会被问到的关于垃圾回收机制的相关问题,在栈中会被问到入栈以及出栈的过程,今天我们就来聊一下关于栈的相关问题,比如,栈帧和动态链接指的是什么?JVMJVM(Java Virtual Machine,Java虚拟机)是Java平台的核心组成部分,它是一个可以执行Java字节码的虚拟计算机。JVM...

    日期:2024-04-26点击:4
  • 持续交付基金会发布最新的 CICD 趋势报告

    持续交付基金会[1](Continuous Delivery Foundation,简称 CDF)前几天发布了最新的一期的 CICD 趋势报告。这份报告中的调查结果基于 SlashData 过去 8 次的调查数据,这些调查在 2020 年 Q3 度到 2024 年 Q1 的三年半时间里覆盖了全球超过 150,000 名受访者。本文是针对部分结果的解读,结果数据来自官方的报告,解...

    日期:2024-04-26点击:2
  • 聊聊业务高可用的保障:异地多活架构

    聊聊业务高可用的保障:异地多活架构

    无论是高可用计算架构还是高可用存储架构,它们的核心设计目标均是在部分服务器出现故障时确保系统能继续运行。然而,在极端情况下,如机房断电、火灾、地震或洪水等,可能导致一个地点的所有服务器同时出现故障,使得整个业务系统瘫痪。即便依靠其他地区的备份系统,全面恢复业务的时间也可能较长,从半小时到12小时不等。备份系统由于平时不提供服务,可能存在许多未被发现的潜在问题。如果业务需求是在这种灾难性故障发生后也...

    日期:2024-04-26点击:2
  • 一网打尽 Rust 语法

    一网打尽 Rust 语法

    1. 构建运行环境我们在Rust环境配置和入门指南中详细介绍了如何安装Rust环境构建一个Rust应用编译和运行的区别使用Cargo构建Rust应用下面,我们就之间直入主题了。通过创建一个名为 main.rs 的文件并将以下代码放入其中来编写我们的第一个 Rust 代码:fn main() { println!("Hello, Front789!")...

    日期:2024-04-26点击:2
  • 这个被忽略的细节,是编写优秀 Python 代码的必经之路

    这个被忽略的细节,是编写优秀 Python 代码的必经之路

    某个操作在Python编写代码中是可选的,意味着它不是必须的。但要想写出好的Python代码,你就必须这样做。这就是 Python 中的类型提示。图片Python 中数据类型的问题Python是一种动态类型编程语言,变量的类型是在运行时分配的,无需在赋值之前定义特定类型。a = 5变量 a 被赋值为 5,在此之前,无需声明 a 存储整数,直接将 5 赋值给&...

    日期:2024-04-26点击:2
  • SDK与API:概念、区别与应用

    在软件开发领域,SDK(软件开发工具包)和API(应用程序接口)是两个常见的术语。虽然它们都是开发工具,但各自承载着不同的功能和应用场景。本文旨在阐明SDK和API的基本概念,探讨它们之间的区别,并简要介绍各自的应用。一、API(应用程序接口)API,全称Application Programming Interface,即应用程序接口,是一组定义、协议和工具,用于构建应用软件的某个功能。它允许不...

    日期:2024-04-26点击:2
  • 原来计算机1秒钟能干这么多事儿!

    大家好,我是风筝我们平时在开发的时候,凡涉及到时间的场景,一般就是在做性能测试和优化的时候了。比如说一个互联网系统,在性能方面会要求接口的平均响应时间为1秒以内,或者几百毫秒。在软件项目中,最小的时间单位可能也就是毫秒了。反正我是没碰到过有人说毫秒以下的单位了。比如某个开发说,我把这个接口的响应时间减少了10纳秒。那我们会想,这莫不是个傻子吧。但是,在计算机中(主要指硬件层面),1秒钟能干的事儿简...

    日期:2024-04-26点击:3
  • 一文了解Rust语言中的双向链表

    Rust作为一门面向安全性和性能的系统编程语言,提供了强大的内建数据结构支持,其中LinkedList是其标准库std::collections中一个重要的组成部分。本文将深入探讨Rust中的双向链表,包括其特性、应用场景以及高效使用方法。什么是双向链表?在讲述双向链表之前,我们先简要回顾下链表的概念。链表是一种常见的线性数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。与...

    日期:2024-04-26点击:3
  • 一文了解Go语言类型转换

    Go语言以其简洁的语法和强大的性能吸引了大批开发者的关注。但作为一门静态类型语言,Go在类型管理上相较于动态类型语言有着更为严格的要求。尤其在类型转换上,Go不支持自动类型转换,所有的转换必须显式进行。本文将深入探讨Go语言中的类型转换,提供丰富的示例以助于理解。类型转换的基本概念类型转换(Type Casting)或称类型强制转换,是指在程序运行过程中将变量从一种类型转换为另一种类型的过程。在G...

    日期:2024-04-26点击:3
  • 秒挂了!与快手无缘了....

    秒挂了!与快手无缘了....

    大家好,我是小林。今天分享一位同学快手Java后端面经,问的问题基础比较多,可惜同学没怎么准备好,回答的不是很多,面完就秒挂了。图片考察的知识,我给大家罗列一下:操作系统:进程线程、上下文、中断Java:JVM、HashMap、synchronized、线程池数据结构:数组和链表算法:合并k个有序链表技术八股进程和线程区别是什么?图片本质区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执...

    日期:2024-04-26点击:3
  • 聊聊Rust中的“借用”

    在Rust的世界里,想要优雅地共享数据,就得聊聊“借用”这档子事。想象一下,朋友有个宝贝,咱们不夺人所爱,只是暂时借用一下,用完还得物归原主,这就是借用(Borrowing)的核心思想。借用基础操作来看看这行代码:let y = &x;这里,y就是一个指向x的引用,就像你跟朋友说:“嘿,借你那5块钱瞅瞅。”要查看y指向的值,得用解引用运算符,就像这样:assert_eq!(5, *y);就...

    日期:2024-04-26点击:4