Redis 原理
Redis 原理篇
原理篇-01.Redis原理篇课程介绍_哔哩哔哩_bilibili
0. 准备
redis 源码:redis 安装包下 src 目录里
1. 数据结构1.1 动态字符串SDS
Redis 是基于 C 语言实现的,但没有直接使用 C 语言的字符串(底层是字符数组),C 语言的字符串存在很多问题:
获取字符串长度需要通过运算(字符串数组以 \0 结尾)
非二进制安全(不能包含特殊字符)
不可修改(拼接字符串要申请内存空间)
Redis 创建了一种新的字符串结构,称为简单动态字符串SDS(Simple Dynamic String)
SDS 本质是一个结构体,底层字符数组 char[] 由SDS自己管理
头:头中记录当前字符串的长度等信息,便于读取
体:真实存储字符串的char[]
源码: sds.h => 支持多种长度字符串
SDS 支持动态扩容:
优点:
二进制安全的:读取数据的时候不是像C中以 /0 为结束标识,而是按照长度,长度是几就读几个
SDS 因为是字节存储,所以也可以存音频,视频等(但不推荐, ...
JVM 入门
JVM
学习视频:
黑马程序员JVM完整教程,Java虚拟机快速入门,全程干货不拖沓_哔哩哔哩_bilibili
G1与zgc垃圾回收器剖析_哔哩哔哩_bilibili
1. 概述
什么是 JVM?
定义:java virtual machine 也就是 java 程序(准确说是 java 二进制字节码)的运行环境
java 程序源代码经过 javac 编译成 class 字节码,字节码再通过 java 程序加载到虚拟机里即可运行
好处:
一次编写,到处运行(跨平台是在jvm层面实现的,屏蔽了字节码和底层操作系统的差异,对外提供了一致的运行环境)
自动内存管理,垃圾回收功能(c和c++没有)
数组下标越界检查(c和c++没有)
多态是面向对象的基石(jvm内部使用虚方法表实现多态)
jdk & jre & jvm
jvm+基础类库 => jre+编译工具 => jdk
jvm 只是一套规范,之后的笔记以 HotSpot 虚拟机为例
jvm 的主要组成
类加载系统
内存结构(运行时数据区域)
执行引擎
本地 ...
Lua 脚本
Lua 脚本
学习视频:
Lua教程-进阶部分 - 4K超清【不定期更新】_哔哩哔哩_bilibili
Lua 教程 | 菜鸟教程 (runoob.com)
文档:LuatOS 文档
Lua 5.3 Reference Manual - contents
轻量级、嵌入式脚本语言
最常见的中间件 Redis MySQL Proxy 和 MySQL WorkBench都是可以通过lua脚本进行扩展功能
1. 环境搭建1.1 Win 环境下载
Lua在Windows下的安装、配置、运行_lua-language-server win7-CSDN博客
官网:https://www.lua.org/
在线编译界面:https://onecompiler.com/lua/42jmby4vv
下载界面:[Download lua-5.4.2_Win32_bin.zip (LuaBinaries) (sourceforge.net)](https://sourceforge.net/projects/luabinaries/files/5.4.2/Tools Executables ...
JUC 并发编程
JUC
学习视频:【狂神说Java】JUC并发编程最新版通俗易懂_哔哩哔哩_bilibili
1. 基本介绍
JUC:java.util.concurrent 包,简称 JUC,是 Java 5 引入的并发工具包,提供了大量的并发编程工具和高级特性,用于简化多线程编程
进程和线程:
进程:计算机中正在执行的独立程序,每个进程拥有独立的内存空间和系统资源,进程是CPU资源分配的最小单位
线程:进程内部的执行单元,一个进程可以包含多个线程,线程共享进程的内存空间和资源,线程是CPU调度和执行的最小单位
Java 默认有2个线程 ==> main线程、GC线程
Java 真的可以开启线程?
从源码看,Java 是使用本地 native 方法调用底层的 C/C++ 代码来开启线程
start0 是 Thread 类的私有本地方法,由 JVM 通过 C/C++ 代码实现
123456789101112131415161718192021// C++ 底层, Java是没有权限操作底层硬件的private native void sta ...
Java 集合
Java 集合
学习视频:【韩顺平讲Java】Java集合专题 -ArrayList HashMap HashSet List Map TreeMap TreeSet等_哔哩哔哩_bilibili
1. 集合介绍
数组的不足:不够灵活
长度开始时必须指定,而且一旦指定,不能更改
保存的必须为同一类型的元素
使用数组进行增加元素的示意代码比较麻烦
12345678// 数组扩容示例代码Person[] pers = new Person[1];pers[0] = new Person();// 扩容Person[] pers2 = new Person[pers.length + 1] // 创建新数组for() {} // 拷贝 pers 数组的元素到 pers2pers2[pers2.length - 1] = new Person(); // 添加新的对象
集合的好处:
可以动态保存任意多个对象,使用比较方便
提供了一系列方便的操作对象的方法(crud):add、remove、set、get 等
使用集合添加,删除新元素代码更加简洁
2. ...
RabbitMQ 入门
RabbitMQ
学习笔记:02-什么是MQ_哔哩哔哩_bilibili
1. 消息队列1.1 MQ 相关概念1.1.1 什么是 MQ
MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已
还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常见的上下游 “逻辑解耦+物理解耦” 的消息通信服务
a 给 b 发消息,a 就是上游,b 就是下游
使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务
1.1.2 为什么要用 MQ
MQ 有三大功能:
流量削峰
举例:
如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果
但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单
使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好
图示说明:
应用解耦
...
awk 编程
使用 awk 编写 shell 脚本
awk 是一个强大的 Linux 命令,有强大的文本格式化的能力
三剑客:
grep:擅长单纯的查找或匹配文本内容
awk:更适合编辑、处理匹配到的文本内容
sed:更适合格式化文本内容,对文本进行复杂处理
1. awk 基础
awk 语法:
12awk [option] 'pattern[action]' file ...awk 参数 '条件动作' 文件
Action 指的是动作,awk 擅长文本格式化,且输出格式化后的结果,因此最常用的动作就是 print
条件动作举例:
1234{print $0} # 把每行都打印出来, 等同于 {print}{print $1} # 把每行的第一列打印出来(默认以空格为列的分隔符){print $NF} # 每行的最后一列[倒数第二列可以写成$(NF-1)]{print $1,$4,$5} # 打印多列(中间加上逗号是为了 ...
Redis 基础
Redis 基础篇
NoSql 数据库
1. 入门1.1 NoSQL
SQL 和 NoSQL
关系型数据库 和 非关系型数据库
区别:
(1)结构化和非结构化
SQL关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名、字段数据类型、字段约束等等信息,插入的数据必须遵守这些约束
NoSql对数据库格式没有严格约束,往往形式松散,自由。可以是key-value,可以是文档,或者图格式
(2)关联和非关联
关系型:
非关系型
12345678910111213141516171819{ id: 1, name: "张三", orders: [ { id: 1, item: { id: 10, title: "荣耀6", price: 4999 } }, { id: 2, item: { id: 20, title: "小米11", price: 399 ...
爬虫
爬虫1. 相关概念介绍
解释1:通过一个程序,根据 Url 进行爬取网页,获取有用的信息
解释2:使用程序模拟浏览器,去向服务器发送请求,获取响应信息
1.1 爬虫核心?
爬取网页
解析数据(重点)
难点:爬虫与反爬虫之间的博弈
1.2 爬虫的用途
数据分析/人工数据集
社交软件冷启动
舆情监控
竞争对手监控
1.3 爬虫分类
通用爬虫(不学)
功能:访问网页->抓取数据->数据存储->数据除了->提供检索服务
实例:百度、google等搜索引擎
缺点:
抓取的数据大多是无用的
不能根据用户的需求来精准获取数据
聚焦爬虫
功能:根据需求,实现爬虫程序,抓取需要的数据
设计思路:
确定要爬取的url
模拟浏览器通过 http 协议访问 url,获取服务器返回的 html 代码
解析 html 字符串
增量式爬虫
检测网站中的数据更新情况,只会抓取网站中最新更新出来的数据
1.4 反爬手段
User-Agent:
简称 UA,是一个特殊的字符串头,能识别客户使用的操作系统及版本、CPU 类型、浏览器语言、插件等等
代理 IP ...
Jmeter 压测
JMeter参考:JMeter 快速上手 | 白月黑羽 (byhy.net)
JMeter 这个软件工具 主要用于服务端系统的性能测试
比如 测试 web网站,API服务器 的性能,如下图所示
1. 安装 JMeter
前提要有 JDK8/JDK11
官网:Apache JMeter - Download Apache JMeter
下载后解压放在 D盘即可
2. 打开
进入 bin 目录下,双击 jmeter.bat 文件,就会出现如下界面:
修改系统背景和字体大小还有语言,可以点击 option
3. 界面简介性能测试是:验证在各种性能负载场景下 ,系统的表现是否符合预期
模拟大量用户访问被测系统?
一个性能测试场景, JMeter称之为 test plan ,中文翻译为 测试计划 。实际上,一个 JMeter的测试计划对应性能测试的一个场景,其实也就是一个测试用例 。应该先准备好性能测试用例, 然后再用JMeter对应配置好一个测试计划来对应它。每个测试计划都可以保存在一个单独的文件中。
JMeter的测试计划,具体里面的内容(怎么测), ...