Nacos简介
Nacos简介
Nacos概述Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。用来取代以前常用的注册中心(zookeeper , eureka等等),以及配置中心(spring cloud config等等)。Nacos是集成了注册中心和配置中心的功能,做到了二合一。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。
Nacos vs Spring Cloud
Nacos = Spring Cloud Eureka + Spring Cloud Config
Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。
通过 Nacos Server 和 spring-cloud-s ...
MyBatis源码环境搭建及整体架构
MySQL 安装与启动安装并启动一个关系型数据是调试 MyBatis 源码的基础。
1. 下载 MySQL首先,从 MySQL 官网下载最新版本的 MySQL Community Server。MySQL Community Server 是社区版本的 MySQL 服务端,可以免费试用。这里我选择使用 tar.gz 的方式进行安装,所以需要下载对应的 tar.gz 安装包。
2. 配置 MySQL下载完 tar.gz 安装包后,我执行如下命令,就可以解压缩该 tar.gz 包,得到 mysql-8.0.22-macos10.15-x86_64 目录。
tar -zxf mysql-8.0.22-macos10.15-x86_64.tar.gz
紧接着执行如下命令进入 support-files 目录:
cd ./mysql-8.0.22-macos10.15-x86_64/support-files
执行如下命令打开 mysql.server 文件进行编辑:
vim mysql.server
这里我需要将 basedir 和 datadir 变量分别设置为 MySQL 所在根目录以及 ...
MyBatis基础
思路这里我会以一个简易订单系统的持久化层为例进行讲解,整体的讲解逻辑是这样的:
首先介绍订单系统 domain 层的设计,了解如何将业务概念抽象成 Java 类;
接下来介绍数据库表的设计,同时说明关系型的数据库表与面向对象模型的类之间的映射关系;
随后介绍订单系统的 DAO 接口层,DAO 接口层是操作数据的最小化单元,也是读写数据库的地基;
最后再简单提供了一个 Service 层和测试用例,用来检测前面的代码实现是否能正常工作。
现在几乎所有的 Java 工程都会使用 Maven 来管理 jar 包依赖,所以我们首先创建一个 Maven 项目,然后在 pom.xml 中添加如下 jar 依赖,这些 jar 包都是订单示例系统必不可少的依赖:
<dependencies>
<!--MyBatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
...
MyBatis反射工具箱
反射是 Java 世界中非常强大、非常灵活的一种机制。在面向对象的 Java 语言中,我们只能按照 public、private 等关键字的规范去访问一个 Java 对象的属性和方法,但反射机制可以让我们在运行时拿到任何 Java 对象的属性或方法。
有人说反射打破了类的封装性,破坏了我们的面向对象思维,我倒不这么认为。我觉得正是由于 Java 的反射机制,解决了很多面向对象无法解决的问题,才受到众多 Java 开源框架的青睐,也出现了有很多惊艳的反射实践,当然,这也包括 MyBatis 中的反射工具箱。
凡事都有两面性,越是灵活、越是强大的工具,用起来的门槛就越高,反射亦如此。这也是写业务代码时,很少用到反射的原因。反过来说,如果必须要用反射解决业务问题的时候,就需要停下来思考我们的系统设计是不是有问题了。
为了降低反射使用门槛,MyBatis 内部封装了一个反射工具箱,其中包含了 MyBatis 自身常用的反射操作,MyBatis 其他模块只需要调用反射工具箱暴露的简洁 API 即可实现想要的反射功能。
反射工具箱的具体代码实现位于 org.apache.ibatis.reflec ...
shell第三天讲义
学习目标理解expr命令的作用
能够使用(())进行整数的数学运算
能够使用let进行整数的数学运算
能够使用bc进行数学运算
掌握流程控制语句的使用
掌握自定义函数的使用
掌握Shell重定向输入与输出
Shell整数计算命令expr命令详解介绍expr (evaluate expressions 的缩写),译为“表达式求值”。Shell expr 是一个功能强大,并且比较复杂的命令,它除了可以实现整数计算,还可以结合一些选项对字符串进行处理,例如计算字符串长度、字符串比较、字符串匹配、字符串提取等.
求值表达式(已讲)计算语法
expr 算术运算符表达式
# 例如: expr 1 + 1 返回: 2
# 例如: expr \( 10 + 10 \) \* 2 + 100 返回:140
获取计算结果赋值给新变量语法
result=`expr 算术运算符表达式`
# 例如: result=`expr 1 + 1` 输出result得到结果: 2
字符串语法计算字符串的长度语法
expr length 字符串
# 例如: expr length "itheima" 返回: 7
截 ...
shell第二天讲义
学习目标目标能够使用字符串的3种方式
掌握Shell字符串拼接
掌握shell字符串截取的常用格式
能够定义Shell索引数组和关联数组
能够使用内置命令alias,echo,read,exit,declare操作
掌握Shell的运算符操作
Shell字符串变量介绍字符串(String)就是一系列字符的组合。字符串是 Shell 编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了)
字符串的3种格式
单引号方式
双引号方式, 推荐
不用引号方式
字符串的3种格式区别
使用单引号 '' 的字符串:
任何字符都会原样输出,在其中使用变量是无效的。
由双引号" "包围的字符串:
其中包含了变量,那么该变量会被解析得到值,而不是原样输出。
字符串中还可以出现双引号的子字符串,但是需要转义。
不被引号包围的字符串
不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样。
字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析。
获取字符串的长度语法${#字符串变量名}
含义获取字符串的字符长度
演示
字符串拼接方式 ...
shell第一天讲义
Shell概述本次课程主要包含内容:
Shell脚本入门
Shell变量
Shell内置命令
Shell运算符与执行运算命令
流程控制语句
Shell函数
Shell重定向
Shell好用的工具, cut sed awk sort
大厂常见企业面试题
Shell脚本入门疑问linux系统是如何操作计算机硬件CPU,内存,磁盘,显示器等?
答: 使用linux的内核操作计算机的硬件
Shell介绍通过编写Shell命令发送给linux内核去执行, 操作就是计算机硬件. 所以Shell命令是用户操作计算机硬件的桥梁,
Shell是命令, 类似于windows系统Dos命令
Shell是一个门程序设计语言, Shell里面含有变量, 函数, 逻辑控制语句等等
Shell脚本通过Shell命令或程序编程语言编写的Shell文本文件, 这就是Shell脚本 , 也叫Shell程序
为什么学习Shell脚本?通过Shell命令与编程语言来提高linux系统的管理工作效率
Shell的运行过程当用户下达指令给该操作系统的时候,实际上是把指令告诉shell,经过shell解释,处理后让内核 ...
shell第四天讲义
学习目标使用cut可以切割提取指定列、字符、字节的数据。
使用sed编辑文件增删改查。
使用awk对文件分析。
使用sort对文件进行字符串或数字或多列排序。
能够理解场景面试题。
Shell好用的工具: cut目标使用cut可以切割提取指定列、字符、字节的数据。
介绍cut 译为“剪切, 切割” , 是一个强大文本处理工具,它可以将文本按列进行划分的文本处理。cut命令逐行读入文本,然后按列划分字段并进行提取、输出等操作。
语法cut [options] filename
options参数说明
选项参数
功能
-f 提取范围
列号,获取第几列
-d 自定义分隔符
自定义分隔符,默认为制表符。
-c 提取范围
以字符为单位进行分割
-b 提取范围
以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-n
与“-b”选项连用,不分割多字节字符;
提取范围说明
提取范围
说明
n-
提取指定第n列或字符或字节后面所有数据
n-m
提取指定第n列或字符或字节到第m列或字符或字节中间的所有数据 ...
Redis事件驱动框架和执行模型模块
Redisserver启动后会做哪些操作main函数是Redis整个运行程序的入口,并且Redis实例在运行时,也会从这个main函数开始执行。同时,由于Redis是典型的Client-Server架构,一旦Redis实例开始运行,Redis server也就会启动,而main函数其实也会负责Redis server的启动运行。
Redis运行的基本控制逻辑是在server.c文件中完成的,而main函数就是在server.c中。
介绍下Redis server是如何在main函数中启动并完成初始化的。Redis针对以下三个问题的实现思路:
Redis server启动后具体会做哪些初始化操作?
Redis server初始化时有哪些关键配置项?
Redis server如何开始处理客户端请求?
main函数:Redis server的入口阶段一:基本初始化
在这个阶段,main函数主要是完成一些基本的初始化工作,包括设置server运行的时区、设置哈希函数的随机种子等。这部分工作的主要调用函数如下所示:
//设置时区
setlocale(LC_COLLATE,"");
tzset ...
FastDFS
FastDFS为什么要有分布式文件系统?单机时代优点:文件访问比较便利,项目直接引用,实现起来简单,无需任何复杂技术,保存文件和访问文件都 很方便。
缺点:一方面,文件和代码耦合在一起,文件越多存放越混乱。另一方面,如果流量比较大,静态文件 访问会占据一定的资源,影响正常业务进行,不利于网站快速发展。
独立文件服务器优点:Web/App服务器可以更专注发挥动态处理的能力。独立存储,更方便做扩容、容灾和数据迁移; 方便做图片等资源请求的负载均衡,方便应用各种缓存策略(HTTP Header、Proxy Cache等),也更 加方便迁移到CDN。
缺点:单机存在性能瓶颈,容灾、垂直扩展性稍差
分布式文件系统优点:扩展能力: 毫无疑问,扩展能力是一个分布式文件系统最重要的特点;高可用性: 在分布式文件 系统中,高可用性包含两层,一是整个文件系统的可用性,二是数据的完整和一致性;弹性存储: 可以 根据业务需要灵活地增加或缩减数据存储以及增删存储池中的资源,而不需要中断系统运行。 缺点:系统复杂度稍高,需要更多服务器。
为什么要使用FastDFS 通用的分布式文件系统的优点的是开发体验好, ...
Redis源码之数据结构
Redis字符串的实现实现字符串的要求
能支持丰富且高效的字符串操作,比如字符串追加、拷贝、比较、获取长度等;
能保存任意的二进制数据,比如图片等;
能尽可能地节省内存开销。
在C语言中可以使用char*字符数组来实现字符串。同时,C语言标准库string.h中也定义了多种字符串的操作函数,比如字符串比较函数strcmp、字符串长度计算函数strlen、字符串追加函数strcat等,这样就便于开发者直接调用这些函数来完成字符串操作。
Redis好像完全可以复用C语言中对字符串的实现呀?
但实际上,我们在使用C语言字符串时,经常需要手动检查和分配字符串空间,而这就会增加代码开发的工作量。而且,图片等数据还无法用字符串保存,也就限制了应用范围。
Redis设计了简单动态字符串(Simple Dynamic String,SDS)的结构,用来表示字符串。相比于C语言中的字符串实现,SDS这种字符串的实现方式,会提升字符串的操作效率,并且可以用来保存二进制数据。
为什么Redis不用char*?char*的结构设计char*字符数组的结构很简单,就是一块连续的内存空间,依次存放了字符串中的每 ...
Redis源码之导读
导读Redis源码的整体架构如何学习Redis的代码架构?
代码的目录结构和作用划分,目的是理解Redis代码的整体架构,以及所包含的代码功能类别;
系统功能模块与对应代码文件,目的是了解Redis实例提供的各项功能及其相应的实现文件,以便后续深入学习。
Redis目录结构
阅读代码的一个小诀窍:在学习一个大型系统软件的代码时,要想快速地对代码有个初步认知,了解系统源码的整体目录结构就是一个行之有效的方法。这是因为,系统开发者通常会把完成同一或相近功能的代码文件,按目录结构来组织。能划归到同一个目录下的代码文件,一般都是具有相近功能目标的。
那么对于Redis来说,在它的源码总目录下,一共包含了deps、src、tests、utils四个子目录,这四个子目录分别对应了Redis中发挥不同作用的代码。
deps目录简介这个目录主要包含了Redis依赖的第三方代码库,包括Redis的C语言版本客户端代码hiredis、jemalloc内存分配器代码、readline功能的替代代码linenoise,以及lua脚本代码。
特点它们可以独立于Redis src目录下的功能源码进行编译 ...