JasonBourne

回溯算法

回溯算法 核心思想:回溯法是一种通过探索所有可能的候选解来找出所有解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过撤销(回溯) 上一步或几步的操作,丢弃该候选解,并尝试其他可能的候选解。 它是一种深度优先搜索策略的运用。 为什么需要回溯算法? 很多问题无法用简单的循环嵌套来解决,特别是当问题的规模(大小)是动态的或需要穷举所有排列/组合时。 典型问题:...

sync、fsync、fdatasync

传统的UNIX实现再内核都设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将数据复制到一个缓冲区中,如果该缓存区尚未写满, 则不将其排入输出队列,而是的等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后等待其到达队首时,才进行实际的I/O操作。 这种输出方式成为延迟写。 延迟写减少了磁盘的读写次数,但是...

数据结构与算法:几个简单的双指针算法题

27. 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作: 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 num...

正码、反码、补码

机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为0. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是 00000011 。如果是 -3 ,就是 10000011 。那么,这里的 00000011 和 10000011 就是机器数。 真值 因为第一位是符号位,所以机器数的形式值就不等...

计算机组成与设计笔记

计算机系统概述 计算机系统由硬件(Hardware)和软件(Software)两大部分组成,二者协同工作实现计算功能。 硬件是计算机的物理实体部分,基于电子学、光学和机械原理实现,主要包括: 核心部件:CPU(运算器+控制器)、存储器(内存/外存)、输入/输出设备 基础架构:总线系统、电源模块、主板、接口电路等 扩展设备:GPU、TPU等专用处理器 软件是运行在硬件上的...

字符集与字符编码

什么是字符集 在介绍字符集之前,我们先了解下为什么要有字符集。我们在计算机屏幕上看到的是实体化的文字,而在计算机存储介质中存放的实际是二进制的比特流。那么在这两者之间的转换规则就需要一个统一的标准,否则把我们的U盘插到老板的电脑上,文档就乱码了;小伙伴QQ上传过来的文件,在我们本地打开又乱码了。于是为了实现转换标准,各种字符集标准就出现了。简单的说字符集就规定了某个文字对应的二进制数字存放...

为什么学习过的技术总是遗忘

时常会有一个疑问,明明自己看过很多技术书籍、博客,为什么当真正聊起来的时候,却又发现自己好像什么都不记得了。今天我想通过批判性思维,好好的论证一下自己出现这个问题的原因。 为什么学习的技术点总是遗忘? 如果我问自己这个问题,我能想到以下几种原因: 在学习的时候,就没有理解透彻,一知半解。 学习之后,没有实践,理解程度停留在理论层面。 没有及时复习,时间长了就遗忘了...

跨微服务的分页查询

问题描述 假设有一个列表查询页面,查询的数据是多个数据源的聚合,数据源由不同的微服务管理,如何实现分页查询? 解决方案 为了表述方便,把涉及到的微服务分为主微服务和辅微服务。提供主体数据的微服务称为主微服务,提供关联数据的微服务称为辅微服务。这里根据查询条件的不同又分为三种情况 查询条件字段在主微服务中 查询条件字段在主微服务中,则查询过程为:从数据库中根据条件查询出分页结果,将辅...

【转载】Go 垃圾回收:三色标记法

垃圾回收 (Garbage Collection,简称 GC) 是编程语言中提供的自动的内存管理机制,自动释放不需要的内存对象,让出存储器资源。GC 过程中无需程序员手动执行。GC 机制在现代很多编程语言都支持,GC 能力的性能与优劣也是不同语言之间对比度指标之一。 Golang 在 GC 的演进过程中也经历了很多次变革, Go V1.3 之前的标记-清除算法 Go V...

服务治理:限流

定义 限流是指在单位时间内限制接口的请求数量。其主要作用有两个: 保护服务的处理能力:避免因流量洪峰导致系统超载或崩溃。 防范恶意调用:防止人为或恶意的频繁请求耗尽系统资源。 限流位置 客户端:在客户端或前端直接限制用户的请求频率。例如,用户提交表单时设置按钮的防重复点击,或通过前端代码限制调用频次。这样可以有效降低无意义的请求传递到后端。 ...

队列与日志对比

日志无处不在:系统的基础 日志结构在许多关键系统中起着基础性的作用: 关系数据库:数据库首先写入预写日志(WAL),以确保事务的原子性和持久性。即便数据库崩溃,所有表的数据也可以从 WAL 中重建。 文件系统:如 XFS 文件系统,先将文件元数据的更改写入日志,然后再写入文件本身,以保证一致性。 分布式系统:Raft、ZAB、Paxos 等状态机复制协议依赖日志,确保所有副...

RabbitMQ 入门指南

RabbitMQ是目前非常热门的一款消息中间件,其凭借高可靠、易扩展、高可用及丰富的功能特性受到众多开发者的青睐,在互联网、金融传统行业中都在大量的使用。 消息中间件 什么是消息中间件 消息中间件,也称消息队列,是一种在分布式系统中用于消息通信、传输和处理的软件,它提供了异步通信的机制,解耦了系统中的不同服务或组件,使它们能够以松耦合的方式进行交互。 它一般有两种传递模式:点...