Hadoop数据体系-基本概念
Hadoop技术概述 Hadoop是一种针对大数据处理的被行业广泛使用的关于数据处理挖掘的主流技术。 主要涉及到的技术点是大数据的 分布式存储和计算框架 Hadoop的特点 1. 高可靠性 :数据存储使用集群部署在不同的机器上。当数据处理请…
深入服务、数据与基础设施背后的运行核心。
Hadoop技术概述 Hadoop是一种针对大数据处理的被行业广泛使用的关于数据处理挖掘的主流技术。 主要涉及到的技术点是大数据的 分布式存储和计算框架 Hadoop的特点 1. 高可靠性 :数据存储使用集群部署在不同的机器上。当数据处理请…
分布式系统的概念 分布式系统是建立在网络之上的软件系统,拥有软件特性,所以分布式系统具有高度内聚性,和透明性。是建设于网络之上的高层软件,而不是硬件。 分布式系统特点 分布式系统是多个服务器通过网络互联而构建的松耦合系统,其具备以下特点: …
什么是SPI机制 SPI(Service Provider Interface) ,是JDK内置的一种 服务提供发现机制 ,可以用来 启用框架扩展和替换组件 ,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商…
深度分页问题描述 分页语法 为什么深度分页会变慢? 设置一个 表结构 假设深度分页的执行SQL如下 执行流程: - 通过 普通二级索引树 idx update time,过滤 update time 条件,找到满足条件的记录ID。 - 通过…
窗口函数 MySQL8 窗口函数是一种特殊的函数,它可以在 一组查询行上执行类似于聚合的操作 ,但是 不会将查询行折叠为单个输出行 ,而是为每个查询行生成一个结果。窗口函数可以用来处理复杂的报表统计分析场景,例如计算移动平均值、累计和、排名…
本文是为了巩固自己的基本能力,记录自己使用Linux的常用命令,日积月累,避免每次遇到问题都需要反复去查阅。 之前面试的时候,面试官给我了一些建议,希望我多学习一些Linux的相关操作,我记得重点的内容是 着重于Linux在对于项目开发运维…
分库分表 分库分表是企业里面针对常见的针对高并发、数据量大的场景下的一种技术优化方案 分库,分表,分库分表 所谓"分库分表",根本就不是一件事儿,而是三件事儿,他们要解决的问题也都不一样。 这三个事儿分别是"只分库不分表"、"只分表不分库"…
Nginx是什么 Nginx是一个 高性能的 HTTP 和反向代理服务器 ,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好。 Nginx 专为性能优化而开发,性能是其最重要的要求,十分注重效率,有…
从大量的URL中找出相同的URL 给定a、b两个文件,各存放50亿个URL,每个URL各占64B,内存限制是4G。如何找出a,b两个文件中共同的URL 假设每个URL占64B,50亿个URL文件的大小为320G,无法直接读取到内存中进行处理…
浅谈Stream 在计算和编程领域, stream(流) 通常指的是一系列数据的传输方式。流是数据的持续序列,允许 程序在数据没有完全加载或没有完全存储的情况下进行处理。 流的使用在处理大数据集、实时数据传输或资源有限的环境下尤为重要。 本…
为什么要调优 ? 最近几天在和朋友一起玩我的世界服务器,服务器是我之前购买的用于部署项目的2c2g的阿里云,闲置无用,便拿来当作服务器,在部署期间遇到过很大问题,但因为我是Java选手,部署方面的报错,调用Jar包的参数等还是能看明白,倒也…
查询优化的百科全书-Explain详解(下) 执行计划输出中各列详解 Extra Extra 列是用来说明一些额外信息的,我们可以通过这些额外信息来更准确的理解 MySQL 到底将如何执行给定的查询语句。 MySQL 提供的额外信息有好几十…
查询优化的百科全书-Explain详解(上) 一条查询语句在经过 MySQL 查询优化器的各种基于成本和规则的优化会后生成一个所谓的 执行计划 ,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方…
MySQL基于规则的优化(关于子查询优化二三事儿) 设计 MySQL 的大叔依据一些规则,竭尽全力的把很糟糕的语句转换成某种可以比较高效执行的形式,这个过程也可以被称作 查询重写 条件化简 移除不必要的括号 有时候表达式里有许多无用的括号,…
InnoDB统计数据是如何收集的 两种不同的统计数据存储方式 InnoDB 提供了两种存储统计数据的方式: - 永久性的统计数据 统计数据存储在磁盘上,也就是服务器重启之后这些统计数据还在。 - 非永久性的统计数据 统计数据存储在内存中,当…
前置视频和图片相关的基础知识 基础概念 分辨率 : - 视频或图片的尺寸,通常用宽度和高度表示(例如1920x1080)。 - 常见分辨率:480p(SD),720p(HD),1080p(Full HD),4K,8K。 帧率(Frame R…
MySQL基于成本的优化 什么是成本 MySQL 执行一个查询可以有不同的执行方案,它会选择其中成本最低,或者说代价最低的那种方案去真正的执行查询。不过我们之前对 成本 的描述是非常模糊的,其实在 MySQL 中一条查询语句的执行成本是由下…
连接的原理 连接简介 连接的本质 为了故事的顺利发展,我们先建立两个简单的表并给它们填充一点数据: 我们成功建立了 t1 、 t2 两个表,这两个表都有两个列,一个是 INT 类型的,一个是 CHAR 1 类型的,填充好数据的两个表长这样:…
组合模式介绍 这有点像螺丝 和螺母,通过⼀堆的链接组织出⼀棵结构树。而这种通过把相似对象 也可以称作是方法 组合成⼀组可被调用的结构树对象的设计思路叫做组合模式。 这种设计⽅式可以让你的服务组节点进⾏⾃由组合对外提供服务,例如你有三个原⼦校…
单表访问方法 为了故事的顺利发展,我们先得有个表: 我们为这个 single table 表建立了1个聚簇索引和4个二级索引,分别是: - 为 id 列建立的聚簇索引。 - 为 key1 列建立的 idx key1 二级索引。 - 为 ke…
InnoDB的表空间 表空间 是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为 表名.ibd 的实际文件。大家可以把表空间想象成被切分为许许多多个 页 的池子,当我们…
DDD 建模方法 四色建模(风暴事件)是整个 DDD 这套软件设计方法中用于工程拆分界限上下文的非常重要的实践手段。通过建模过程快速识别业务领域中的关键事件和核心流程,也是在这个过程中设计出领域对象的,为后面详细设计和代码开发做指导。 可以…
MySQL的数据目录 数据库和文件系统的关系 像 InnoDB 、 MyISAM 这样的存储引擎都是把表存储在文件系统上的。当我们想读取数据的时候,这些存储引擎会从文件系统中把数据读出来返回给我们,当我们想写入数据的时候,这些存储引擎会把这…
B+树索引 页和记录的关系示意图如下: 页a、页b、页c ... 页n 这些页可以不在物理结构上相连,只要通过双向链表相关联即可。 没有索引的查找 先只唠叨搜索条件为对某个列精确匹配的情况,所谓精确匹配,就是搜索条件中用等于 = 连接起的表…
InnoDB数据页结构 数据页:存放我们表中记录的页,官方称这种存放记录的页为索引( INDEX )页,这些表中的记录就是我们日常口中所称的数据,所以也可以称这种存放记录的页为数据页 数据页结构的快速浏览 数据页代表的这块 16KB 大小的…
B+树索引的使用 我们必须熟悉下边这些结论: - 每个索引都对应一棵 B+ 树, B+ 树分为好多层,最下边一层是叶子节点,其余的是内节点。所有 用户记录都存储在 B+ 树的叶子节点,所有 目录项记录 都存储在内节点。 - InnoDB 存…
DDD DDD 既不是 MVC 一样的工程结构,也不能直接等同于微服务架构,更不是一种设计模式。 DDD 是领域驱动设计(Domain-Driven Design)的缩写,这是一种主要软件开发方法,由 Eric Evans 在他的书《领域驱…
InnoDB记录结构 MySQL 服务器上负责对表中数据的读取和写入工作的部分是 存储引擎 ,而服务器又支持不同类型的存储引擎。真实数据在不同存储引擎中存放的格式一般是不同的,甚至有的存储引擎比如 Memory 都不用磁盘来存储数据,也就是…
字符集和比较规则简介 字符集简介 在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系了,建立这个关系最起码要搞清楚两件事儿 - 你要把哪些字符映射成二进制数据?也就是界定清楚字符范围。 - 怎么映射?将…
启动命令 mysql --help 可以看到 mysql 程序支持的启动选项。 mysqld safe --help 可以看到 mysqld safe 程序支持的启动选项。 查看 mysqld 支持的启动选项有些特别,需要使用 mysqld…
MySQL的客户端/服务器架构 MySQL 服务器程序和客户端程序本质上都算是计算机上的一个进程,这个代表着 MySQL 服务器程序的进程也被称为 MySQL数据库实例 ,简称 数据库实例 。 MySQL 服务器进程的默认名称为 mysql…
网络基础知识 计算机网络出现的背景 计算机最初运行模式-独立模式 随着计算机发展,逐渐演变为连接多太计算机以实现信息共享 计算机网络根据网络的规模大小,可以分为 LAN 局域网 和 WAN 广域网 LAN: WAN: 最初的计算机网络是由几…
简单的HTTP协议 HTTP协议用于客户端和服务端之间的通信 请求访问文本或图像等资源的一端称为客户端,提供资源响应的一 端称为服务器端 通过请求和响应的交换达成通信 请求一定是从客户端发出,最后由服务端响应请求,并返回。 请求和响应报文 …
分布式锁 为什么需要分布式锁? - 在多线程环境中,如果多个线程同时访问共享资源(例如商品库存、外卖订单),会发生数据竞争,可能会导致出现脏数据或者系统问题,威胁到程序的正常运行。 - 为了实现共享资源的互斥访问,锁是一个比较通用的解决方案…
分布式事务 柔性事务 - 在 CAP 理论和 BASE 理论的基础上,提出了柔性事务的概念。柔性事务追求的是最终一致性。 - 柔性事务就是 BASE 理论 + 业务实践。柔性事务追求的目标是:我们根据自身业务特性,通过适当的方式来保证系统数…
分布式ID 如何为不同的数据节点生成全局唯一主键呢? - 生成分布式 ID 最基本的分布式 ID 需要满足下面这些要求: - 全局唯一 :ID 的全局唯一性肯定是首先要满足的! - 高性能 :分布式 ID 的生成速度要快,对本地资源消耗要小…
HttpClient 响应 Post请求填充参数的方式 如下图的两种方式: WebMagic概览 WebMagic 的设计参考了业界最优秀的爬虫 Scrapy,而实现则应用了 HttpClient、Jsoup 等 Java 世界最成熟的工具…
Netty基础 Netty 是什么? - Netty 是一个 异步的 、 基于事件驱动的网络应用框架 ,用于快速开发可维护、高性能的网络服务器和客户端。 一开始需要树立正确的观念: - 把 channel 理解为数据的通道。 - 把 msg…
SpringSecurity的原理 - 本质上是一个过滤器链 ,内部包含了提供各种功能的过滤器。 - 常见的三种过滤器: - UsernamePasswordAuthenticationFilter :负责处理我们在登录页面填写了用户名密码…
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式 普通字符 ABC : 匹配 ... 内的所有字符 ^ABC : 匹配除了 ... 中字符的所有字符 A-Z : 表示一个区间,匹配 A - Z 范围…
分布式理论 CAP - CAP 实际上指的是一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)。 - CAP 理论指出,对于一个分布式系统,当涉及到读写操作的时候,只能…
Java 虚拟机性能监控、故障处理工具 基础故障处理工具 - jps:虚拟机进程状况工具 - jstat:虚拟机统计信息监视工具 - jinfo:Java 配置信息工具 - jmap:Java 内存映像工具 - jhat:虚拟机堆转储快照分…
Java 虚拟类加载机制 类加载的时机 - 遇到 new、getstatic、putstatic或 invokestatic 这四条字节码指令时: - 使用 new 关键字实例化对象时。 - 读取或设置一个类型的静态字段时。 - 调用一个类…
Java 类文件结构 无关性的基石 实现语言无关性的基础仍然是虚拟机和字节码存储格式。Java 虚拟机不与包括 Java 语言在内的任何程序语言绑定,它只与“Class 文件”这种特定的二进制文件格式相关联。Class 文件中包含了 Jav…
Java 垃圾收集器与内存分配策略 对象已死? 引用计数算法 - 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。 - 单纯的引用计数很难解决对…
Java 内存区域与内存溢出异常 Java 内存区域 运行时数据区域 程序计数器 - 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的 字节码 的行号指示器。 - 在任何一个确…
Java 并发容器和框架 ConcurrentHashMap 的实现原理与使用 - ConcurrentHashMap 是线程安全且高效的 HashMap。 - 为什么要使用 ConcurrentHashMap : - 在并发编程中使用 H…
Java 并发编程实践 生产者和消费者模式 生产者和消费者模式是通过一个容器来解决生产者和消费者之间的强耦合问题。在该模式中,生产者和消费者彼此之间不直接通信,而是通过阻塞队列进行通信。具体工作流程如下: 1. 生产者 :生产者生成数据后,…
Executor 框架 Java 的线程既是工作单元,也是执行机制。为了更好地管理和调度线程,Java 提供了强大的 Executor 框架。 Executor 框架的两级调度模型 在 Java 的 HotSpot VM 线程模型中, Ja…
Java 中的线程池 合理地使用线程池可以带来以下三个主要好处: 1. 降低资源消耗 :通过重复利用已创建的线程,减少线程创建和销毁所造成的开销。 2. 提高响应速度 :当任务到达时,无需等待线程创建即可立即执行任务。 3. 提高线程的可管…
Java 中的并发工具类 并发流程控制的手段 - CountDownLatch - CyclicBarrier - Semaphore 在线程间交换数据的一种手段 - Exchanger 工具类 CountDownLatch - Count…
Java 中的 13 个原子操作类 原子更新基本类型类 - AtomicBoolean :原子更新布尔类型。 - AtomicInteger :原子更新整型。 - int addAndGet int delta :以原子方式将输入的数值与实…
Java 中的锁 Lock 接口 - 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发访问共享资源,比如读写锁)。 - Lock 接口提供了与 synchronized…
Java并发编程基础 线程的状态 线程的状态变化 Daemon 线程 - Daemon 线程是一种支持型线程 (常被叫做守护线程),因为它主要被用作程序中后台调度以及支持性工作。 - 可以通过调用 Thread.setDaemon true…
Java内存模型 Java 内存模型的基础 并发编程模型的两个关键问题 - 线程之间如何通信 / 线程之间如何同步 - 共享内存(Java采用) : - 线程之间共享程序的公共状态, 通过写-读内存中的公共状态进行隐式通信 。 - 同步是显…
并发编程的挑战和底层原理 并发编程的目的 并发编程的目的是为了让程序运行得更快。 并发编程的挑战 - 上下文切换 - 死锁 - 资源限制 Java 并发机制的底层实现原理 Java 中的并发机制依赖于 JVM 的实现和 CPU 的指令。 v…
基础概念 消息队列是一个可以用于存放消息的容器 消息队列满足FIFO原则 参与消息传递的双方被称为生产者和消费者,生产者负责发送消息,消费者负责处理消息 消息队列是一种中间件 中间件是一种为应用软件服务的软件,不同的软件和技术架构可以借助中…
进程与线程 进程与线程的概念 - 进程的概念 :由 CPU 执行的运行中的程序,被称为进程 Process 。 - 并行 :两个任务同时进行。 - 并发 :两个任务在一段时间中交替进行。 进程的状态 - 创建 - 就绪 - 就绪挂起 - 运…
网络系统 网络性能指标 - 带宽 :链路最大传输速率 - 延时 :请求包发送后,收到对端响应所需要的时间延迟。不同场景含义不同,可以表示建立TCP连接所需要的时间延迟,或者一个数据包往返所需要的时间延迟。 - 吞吐量 :单位时间成功传输的数…
调度算法 调度算法 进程调度 - 先来先服务 - 对长作业有利 - 短线程优先 - 对短作业有利 - 高响应比 - 权衡了长短作业 - 时间片轮转 - 最公平 - 最高优先级算法 - 从就绪队列中选取最高优先级的进程运行 - - 多级反馈队…
内存管理 虚拟内存 - 虚拟内存 :操作系统为了将进程和物理内存隔离,设计的一种内存映射。 内存分段 虚拟地址 - 段选择子 : - 段号(段表的索引) - 特权标志位 - 段内偏移量 (0 段界限) - 段表 : - 段的基地址 - 段的…
网络分层模型 - OSI七层模型 - 应用层 :为计算机用户提供服务 - 表示层 :数据处理 编解码、加密解密、压缩解压缩 - 会话层 :管理 建立、维护、重连 网络应用程序之间的会话 - 传输层 :为两台主机进程之间的通信提供通用的数据传…
MyBatis常见面试题总结 \ 和 $ 的区别是什么? - $ 是 Properties 文件中的变量占位符,它可以用于标签属性值和 SQL 内部,属于原样文本替换,可以替换任意内容,比如 $ driver 会被原样替换为 com.mys…
SpringBoot 常见面试题总结 简单介绍一下 Spring?有啥缺点? - Spring 是一个重量级企业开发框架,是 Enterprise JavaBean(EJB)的替代品。Spring 为企业级 Java 开发提供了一种相对简单…
集合框架概览 Java集合,也叫做容器,主要由两大接口派生而来: - Collection :主要用于存放单一元素 - List :存储的元素 有序、可重复 - ArrayList :基于 Object 数组 - Vector :基于 Ob…
Redis 数据类型和数据结构 常见的数据类型 - String类型 - 底层数据结构:SDS - List类型 - 底层数据结构:双向链表或者压缩列表 - 当列表元素小于512个,列表的每个元素的值都小于64字节,Redis会使用压缩列表…
Spring完成文件的存储和下载 文件的存储 - 使用数据库存储文件本体 - 使用数据库存储文件的位置,文件存储在文件系统上 使用数据库直接存储文件,使用LONGBLOB类型保存文件的Byte数据 文件的接收 前端使用form上传数据 Co…
表单数据 - application/x-www-form-urlencoded : enctype未指定属性时的默认值 - multipart/form-data :当表单包含 type=file 的 input元素时使用此值 - tex…
首先导入hotel-admin 一个实现了对数据库数据增删改查的简易后台 本次的目标是,实现对后台数据库Crud的同时,保证ES内部的数据同步变更 1. 明确主次关系,引起修改的主体是对数据库的Crud,通过使用消息队列技术来监听Crud,…
分布式搜索 Elasticsearch基础 安装ES 之后还需要部署Kibana容器,因此需要让es和kibana容器互联,先创建一个网络 启动es -e "cluster.name=es-docker-cluster" :设置集群名称 -…
服务异步通讯 RabbitMQ 性能下降,吞吐量下降 实际操作 RabbitMQ安装 导入tar包 启动容器 docker run \\ \-e RABBITMQ\ DEFAULT\ USER=itcast \\ 这是用户名 \-e RAB…
Docker 微服务的模块非常多,部署起来非常麻烦,Docker可以解决这个问题 Docker的定义 DockerFile内容 最后的 . 表示dockerfile所在的目录 构建中 构建完成 成功访问 DockerCompose 基于Co…
微服务技术栈 自动部署 持续集成 完整的微服务技术栈 微服务本质是分布式架构方案的一种,旨在实现项目各个模块的高内聚低耦合,降低服务之间的影响,避免出现集群故障 可以通过RestTemplate来实现跨服务的远程调用(实际上就是发起一次远程…
数据存储 Java程序运行期间,有5个地方可以存储数据 - 寄存器:速度最快,Java没有直接控制器,根据需求进行分配 - 栈内存:存在于常规内存RAM中,仅次于寄存器,Java必须知道存在于栈内存中数据的生命周期,通常用于存储一些数据的引…
使用反射简单模拟MVC对请求的处理过程
Lambda表达式 Lambda 表达式,也可称为闭包 Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中) 使用 Lambda 表达式可以使代码变的更加简洁紧凑 语法 重要特征 可选类型声明:不需要声明参数类型,编译器可…
Redis.conf 详解 启动的时候,就通过配置文件启动 行家有没有,出手就知道 单位 配置文件表示unit单位,对于大小写不敏感 包含 可以用来添加redis的配置文件 网络配置 bind 127.0.0.1 绑定的ip目前运行本机访问…
SpringBoot整合Redis SpringBoot操作数据层:Spring-data jpa jdbc mongodb redis!!! 说明:在SpringBoot2.x之后,原来使用的jedis被替换为了lettuce? jedi…
NoSql概述 为什么要用Nosql 面对大数据,一般的数据库无法分析处理了 !!! 技术和业务在发展的同时,对人的要求也越来越高了 本质:数据库(读,写) 慢慢的就开始使用分库分表来解决写的压力!MySql在那个年代推出了表分区(并没有多…