获得徽章 10
- #挑战每日一条沸点#
一、EC技术深度应用于RAID和通信领域,通过对数据编解码以实现在部分数据丢失时仍能够将其恢复。
我们可以这样理解EC的目标和作用:对n个同样大小的数据块, 额外增加m个校验块, 使得这n+m个数据中任意丢失m个数据块或校验块时都能恢复原本的数据。
二、简单EC算法:XOR
它是一种基于 XOR(异或)运算的算法,提供了最简单的 EC 形式。XOR 操作是关联的,可从任意数量的数据 bits 中生成 1 个奇偶校验位(parity bit)。
例如,如果我们有 3 个数据单元,则使用 XOR 运算,我们可以计算奇偶校验位,比如 1 ⊕ 0 ⊕ 1 ⊕ 1 = 1。
如果任何数据位丢失,则通过对其余位和奇偶校验位进行异或来恢复。
三、改进的EC算法:RS
使用线性代数运算生成多个 parity cells,以便能够容忍多个失败。
RS 算法使用生成矩阵(GT,Generator Matrix)与 m 个数据单元相乘,以获得具有 m 个数据单元(data cells)和 n 个奇偶校验单元(parity cells)的 extended codewords。
如果存储失败,则只要 m+n cells 中的 m 个可用,就可以通过将生成器矩阵来恢复存储。
RS 中的容错能力最高为 n,即奇偶校验单元的数量和存储效率为 m / m + n,其中 m 为数据单元(data cells),n 为奇偶校验单元(parity cells)
四、HDFS EC策略采用的是条带式存储布局(Striping Block Layout)。条带式存储以块组(BlockGroup)为单位,横向式地将数据保存在各个Block上,同一个Block上不同分段的数据是不连续的,写完一个块组再申请下一个块组。展开评论点赞 - #每天一个知识点#
Spring是一个一站式重量级的开发框架,目的是为了解决企业级应用开发的复杂性,它为开发Java应用程序提供全面的基础架构支持,让Java开发者不再需要关心类与类之间的依赖关系,可以专注的开发应用程序(crud)。
1.Spring为企业级开发提供给了丰富的功能,而这些功能的底层都依赖于它的两个核心特性:依赖注入(DI)和面向切面编程(AOP)。
2.IoC的全称为Inversion of Control ,意为控制反转,IoC也被称为依赖性注入(DI),这是一个通过依赖注入对象的过程:对象仅通过构造函数、工厂方法,或者在对象实例化在其上设置的属性来定义其依赖关系(即与它们组合的其他对象),然后容器在创建bean时注入这些需要的依赖。这个过程从根本上说是Bean本身通过使用直接构建类或诸如服务定位模式的机制,来控制其依赖关系的实例化或位置的逆过程(因此被称为控制反转)
3.在Spring中,我们可以使用XML、Java注解或Java代码的方式来编写配置信息,而通过配置信息,获取有关实例化、配置和组装对象的说明,进行实例化、配置和组装应用对象的称为容器。
一般情况下,我们只需要添加几个注解,这样容器进行创建和初始化后,我们就可以得到一个可配置的,可执行的系统或应用程序。
4.在Spring中,由Spring IOC容器进行实例化—>组装管理—>构成程序骨架的对象称为Bean。
5.面向切面编程(Aspect-oriented Programming),是相对面向对象编程(OOP)的一种功能补充,OOP面向的主要对象是类,而AOP则是切面。在处理日志、安全管理、事务管理等方面有非常重要的作用。AOP是Spring框架重要的组件,虽然IOC容器没有依赖AOP,但是AOP提供了非常强大的功能,用来对IOC做补充。
AOP可以让我们在不修改原有代码的情况下,对我们的业务功能进行增强:将一段功能切入到我们指定的位置,如在方法的调用链之间打印日志。展开评论点赞 - #每天一个知识点#
什么是架构?
架构,又称软件架构:
是有关软件整体结构与组件的抽象描述
用于指导软件系统各个方面的设计
架构的重要性?
架构没设计好,软件容易崩,用户体验上不去。最终要么重构,要么放弃
架构设计好了,软件的稳定性上去了,用户体验高了,口碑一点点就打造出来了
良好的架构基础,也为软件的未来发展提供了更多的可能。为用户赋能,实现自身价值
单机架构
All in one,所有的东西都在一个进程里,部署在一个机器上。
单体架构
在单机架构的基础上,将进程部署到多个机器上。
垂直应用架构
在单机架构基础上,将进程按照某种依据切分开。比如,A 软件和 B 软件的后端原先采用单机架构部署,那就是一个进程部署在多个机器上;如果用垂直应用架构,可以将 A 和 B 的后端拆分为 A、B 两个进程,然后再按照单体模式的思路,部署在多个机器上。
SOA (面向服务架构)
SOA 架构中,服务为一等公民,将进程按照不同的功能单元进行抽象,拆分为『服务』。有了服务之后,SOA 还为服务之间的通信定义了标准,保证各个服务之间通讯体验的一致性
微服务
在 SOA 架构中,ESB 起到了至关重要的作用。但从架构拓扑来看,它更像是一个集中式的模块。有一个 SOA 分布式演进的分支,最终的形态便是微服务。展开评论点赞 - #挑战每日一条沸点#
一、内网穿透作为程序员常用的调试手段之一,我们可以通过在个人电脑上运行花生壳或者 frp 等方式,让他人访问我们本地启动的服务,而且这种访问可以不受局域网的限制
1.内网 IP : 内网 IP 是用户在使用局域网时,由局域网的网关所分配的 IP 地址,每一个内网 IP 实际上都可以映射到当前所在局域网网关的某一端口( IPV4 地址通过 NAT 与端口映射方式实现,具体原理下文详解),拥有内网 IP 可以被同一局域网下的其他设备所访问到;
2.公网 IP : 内网的设备想要访问非同一局域网下的资源则必须通过公网 IP ,公网 IP 是没有经过 NAT 转换的由互联网供应商(ISP)提供的最原始的 IP 地址,每一个公网 IP 都可以直接在互联网中被直接定位到。
二、NAT(网络地址转换)技术
网络地址转化技术的核心作用在于实现对公网 IP 地址的复用,即所有的内网主机共用同一个 IP 地址
1.静态转换:将内网 IP 直接转换为公网 IP 地址,形成一一对应的方式
2.动态转换:将内网 IP 地址转换为公网 IP 地址,与静态转换不同的是动态转换会在 IP 池中选择空闲 IP 地址进行转换,即每次同一个内网 IP 对应的公网 IP 会发生改变
3.端口多路复用(PAT 技术):将内网 IP 与公网 IP 的某一端口进行映射,通过公网 IP 的某一端口访问公网
三、内网穿透的核心原理在于将外网 IP 地址与内网 IP 地址建立联系,市面上常用的如花生壳工具其核心原理就是依靠一台具有公网 IP 的服务器作为请求的中转站以此来达到从公网访问内网主机的目的。
当我们启动花生壳的服务时,花生壳会将本地配置好的端口和服务器上的端口进行映射,告知服务器请求转发的路径,花生壳的公网服务器则会监听相应端口的请求,当用户访问花生壳提供的 IP 地址时,花生壳的对应 IP 地址的公网主机将会根据访问的端口映射到相应的内网主机,并通过预先配置好的服务端口将请求转发,以达到访问内网主机相应服务的效果。展开评论点赞 - 云原生时代:云原生是一种基于容器、微服务和自动化管理的方式来构建和运行应用程序的方法,它可以实现更高的弹性、可靠性和可扩展性。
1)容器化技术,隔离环境、可移植、高扩展,方便实现交付标准化
2)微服务架构:松耦合式系统架构,高内聚,各个服务独立部署,独立演进,按需扩展
3)自动化管理:管理容器、监控应用程序和自动化运维。例如阿里云的EDAS,K8s和SLS等
4)云原生存储:例如分布式存储和数据库服务。阿里云采用阿里云分布式存储服务(OSS)OSS支持多种存储类型和多种数据访问方式,例如对象存储、文件存储、块存储等,可以满足不同的存储需求。阿里云云原生数据库(ApsaraDB for OceanBase),它是一种分布式、高可用、高性能的云原生数据库服务。ApsaraDB for OceanBase支持多种存储引擎和多种数据访问方式,例如关系型数据库、分布式事务等,可以满足不同的数据库需求。 #挑战每日一条沸点#展开评论点赞 - #挑战每日一条沸点#
什么是pnpm?
pnpm 本质上就是一个包管理器,这一点跟 npm/yarn 没有区别,但它作为杀手锏的两个优势在于:
包安装速度极快;
磁盘空间利用非常高效
npm i -g pnpm
1.pnpm 内部使用基于内容寻址的文件系统来存储磁盘上所有的文件,这个文件系统出色的地方在于:
不会重复安装同一个包。用 npm/yarn 的时候,如果 100 个项目都依赖 lodash,那么 lodash 很可能就被安装了 100 次,磁盘中就有 100 个地方写入了这部分代码。但在使用 pnpm 只会安装一次,磁盘中只有一个地方写入,后面再次使用都会直接使用硬链接
2.即使一个包的不同版本,pnpm 也会极大程度地复用之前版本的代码。举个例子,比如 lodash 有 100 个文件,更新版本之后多了一个文件,那么磁盘当中并不会重新写入 101 个文件,而是保留原来的 100 个文件的 hardlink,仅仅写入那一个新增的文件
3.pnpm 与 npm/yarn 另外一个很大的不同就是支持了 monorepo,体现在各个子命令的功能上,比如在根目录下 pnpm add A -r, 那么所有的 package 中都会被添加 A 这个依赖,当然也支持 --filter字段来对 package 进行过滤。展开评论点赞 - #每天一个知识点#
MySQL 中的 InnoDB 和 MyISAM 之间是什么关系?
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能
SHOW ENGINES;查看数据库引擎
一、InnoDB 支持事务,MyISAM 不支持(对于 InnoDB 每一条 SQL 语句都默认封装成事务进行提交,这样就会影响速度,优化速度的方式是将多条 SQL 语句放在 begin 和 commit 之间,组成一个事务)
InnoDB 支持外键,而 MyISAM 不支持
二、存储引擎原理B+ 树
MyISAM 中 B+ 树的数据结构存储的内容是实际数据的地址值,它的索引和实际数据是分开的,只不过使用索引指向了实际数据。这种索引的模式被称为非聚集索引。
InnoDB 中 B+ 树的数据结构中存储的都是实际的数据,这种索引有被称为聚集索引
三。什么是索引
唯一索引:唯一索引不允许两行具有相同的索引值
主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空
聚集索引:表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个
非聚集索引:非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于 249 个
四、MyISAM 的索引文件仅仅保存数据记录的地址:MyISAM 中索引检索的算法为首先按照 B+Tree 搜索算法搜索索引,如果指定的 Key 存在,则取出其 data 域的值,然后以 data 域的值为地址,读取相应数据记录
五、InnoDB表数据文件本身就是按 B+Tree 组织的一个索引结构,InnoDB 利用的数据库主键作为索引 Key,所以 InnoDB 数据表文件本身就是主索引,且因为 InnoDB 数据文件需要按照主键聚集,所以使用 InnoDB 作为数据引擎的表需要有个主键,如果没有显式指定的话 MySQL 会尝试自动选择一个可以唯一标识数据的列作为主键,如果无法找到,则会生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形展开评论点赞
![[打脸]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_82.c6f2aee.png)