Redis知识点
仅作为个人学习纪录
原视频
Redis
Redis的使用场景:
缓存\(\Rightarrow\)
缓存穿透、缓存击穿、缓存雪崩、双写一致、持久化、数据过期策略、数据淘汰策略
分布式锁\(\Rightarrow\) setnx、redisson
消息队列、延时队列\(\Rightarrow\) Redis数据类型的选择
名词解释
缓存穿透:
查询一个一定不存在的数据,MySQL查询不到数据也不会写入缓存,就会导致每次请求都查数据库。(常常发生在恶意攻击中)解决方法:布隆过滤器
缓存击穿:
一个热点数据设置了过期时间的key,缓存在某个时间点过期的时候,恰好这时间点对这个Key有大量的并发请求过来,这个时候大并发的请求可能会瞬间把
DB
压垮。解决方法:互斥锁(强一致)、逻辑过期(高可用)
缓存雪崩:
设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB
瞬时压力过重雪崩。与缓存击穿的区别:雪崩是很多key,击穿是某一个key缓存。解决方法:给不同key添加随机过期时间、利用Redis集群、给缓存业务添加降级限流策略、 ...
创建一个3D模型在自己博客里
创建一个3D模型在自己博客里
最近在美化博客的时候,发现许多博客都有一个Live2d的二次元角色在博客页面,还会跟着鼠标动,有些还会互动。
像这样
这样的
虽然我知道Hexo有技术支持实现这样的功能,实现起来也很简单。
但是我更喜欢像在Minecraft主页实现的小人这样效果:
由于需要将3D模型展示在自己的博客里,于是便开始寻找解决方案,经过一番搜索,发现了一个比较方便的方案,那就是使用Three.js。里面有非常多、看起来非常NB的示例,都是用了Three.js。
Three.js
Three.js是一个基于WebGL的JavaScript库,它可以帮助我们轻松地创建3D场景、模型、动画等。我们可以使用Three.js来创建一个3D模型,并将其展示在自己的博客里。
获得3D模型
首先第一步肯定是拿到模型,说到模型,我是基本没有建模过的,但是搞到一个Minecraft里面的人物模型还是非常简单的。
我也是查了好多资料,才发现居然有专门针对Minecraft建模的软件:Blockbench。下载链接:Downloads -
Blockbench
...
Perlin噪声
Perlin噪声
引言
在计算机图形学中,Perlin噪声是一种非常重要的算法,它被广泛用于生成自然现象,如云朵、地形、火焰等。它的发明者Ken
Perlin在1983年首次提出了这一算法,并在1985年因这项工作获得了奥斯卡科学技术奖。
原始实现获得奥斯卡科学技术奖
Perlin噪声之所以受欢迎,是因为它能生成看似随机但具有连续性和平滑性的噪声,这使得生成的图形更自然。
Perlin噪声的历史
Ken
Perlin发明Perlin噪声的初衷是为了解决传统伪随机噪声在计算机图形学中产生的不自然感。传统噪声函数往往会在图像中产生尖锐的、不连续的过渡,导致图像看起来不够真实。为了解决这个问题,Perlin提出了一种可以生成“渐进式噪声”的方法,这种噪声在空间上是连续的,过渡平滑,可以很好地模拟自然现象。
Perlin噪声的最初版本是基于一维的,之后扩展到了二维和三维。在1985年,这一算法被应用于电影《创:战纪》的特效制作中,用于生成云朵、烟雾等特效。Ken
Perlin因此获得了图形学界的广泛认可,并在1985年获得奥斯卡科学技术奖。
Perlin噪声的原理
Pe ...
使用Unity创建一个类似MC的游戏场景(一)
前言
使用Unity来制作一个类似Minecraft的游戏场景。这个系列的文章将记录我制作这个游戏场景的过程。
我们首先将建立一个体素引擎,用于生成游戏中的区块(chunk)
准备工作
首先,我们需要准备一些工具和资源。
在这个系列的文章中,我们将使用Unity
2020.3.48f1c1版本,以及一些免费的资源。
贴图资源Voxel Pack
·
Kenney的原始地址点此下载贴图包
导入贴图包
点击
资源->导入包->自定义包
选择下载的unity资源包进行导入
编写代码
首先在我们Untiy的Assets文件夹下创建一个**_Scripts**文件夹,用于存储我们的所有代码。
1234Assets -- _Scripts //代码 -- _Textures //贴图 -- Scense //场景
定义方块类型
在**_Scripts下创建BlockType.cs**脚本,用于定义游戏中的方块类型。
12345678910111213141516171819using System.Collections;using Syste ...
图像表示和图像增强(二)
图像处理(二)
滤波
滤波是一种常见的信号处理技术,用于去除信号中的噪声、平滑信号、增强信号特征等。在图像处理中,滤波器(也称为卷积核或内核)在图像上滑动,对图像的每个像素点进行加权求和,从而得到输出图像的像素值。滤波可以根据滤波器的设计和权重分布,实现不同的效果。
给出以下图片:
进行三种滤波的演示:
使用OpenCV库进行图像处理操作
1. 均值滤波:
均值滤波是一种线性平滑滤波方法,它用周围像素的平均值来替代当前像素值。均值滤波对图像中的噪声有较好的去除效果,同时能够一定程度上平滑图像。由于简单易实现,均值滤波通常用于实时应用或较低要求的去噪处理。
123456789101112131415import cv2import numpy as np# 读取图像image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)# 均值滤波blurred_image = cv2.blur(image, (5, 5))# 显示原始图像和均值滤波后的图像cv2.imshow('Original Image ...
图像表示和图像增强(一)
图像表示
图像表示与获取主要包括:
图像的数字化表示
图像是连续的信号,需要通过采样和量化过程变为数字化的离散信号。
采样间隔(Sample spacing)决定了图像的分辨率和包含的信息量。
量化表决定了图像的灰度级数(比特数)。
颜色模式
RGB色彩模式:颜色通过红绿蓝三个颜色通道的组合表示。
灰度图像:只有灰度一个通道,表示图像的亮度信息。
图像获取
摄像机、图像传感器采集光线信息,转换为图像信号。
医学成像(CT、MRI等)通过非光学方法获取图像。
图像文件格式
JPEG:有损压缩格式,文件大小较小。
PNG:无损压缩格式,保留更多细节质量。
TIFF:灵活的位图图像格式。
图像存储
像素网格存储:行序和列序存储。
数据压缩:提高存储效率。
图像从连续信号到数字化表示的过程,不同的颜色模式、文件格式,以及如何有效存储图像数据。这些构成了数字图像处理的基础。
图像增强
图像增强主要包括以下几种方法:
1. 直方图均衡化
改善图像的对比度,使得整个灰度范 ...
决策树
决策树是一种常见的监督学习方法,用于分类和回归。
主要思想:将数据递归地按特征分割,构建一个树形结构,表示输入和输出之间的映射关系。
特点:非参数化模型,可以处理数值和分类数据,易于理解和解释。
算法:常用ID3、C4.5、CART等,通过选取最优特征进行数据分割。
分割标准:信息增益、GINI指数等,度量分割的好坏。
停止条件:没有特征可选或达到树的最大深度。
预测:从根节点开始,测试数据在树中传播,直到达叶节点获得预测。
剪枝:防止过拟合,后剪枝或预剪枝。
集成学习:决策树容易过拟合,通常使用随机森林、GBDT等集成学习方法。
决策树通过递归分割构建树模型,易于理解和解释,是一种常用的基础分类与回归方法。
下面通过鸢尾花数据来进行一个简单的演示:
123456789101112131415161718192021222324import osos.environ['PATH'] = os.pathsep + r'C:\Program Files (x86)\Graphviz2.38\bin'from sklear ...
SVM
SVM(支持向量机)是一种常用的机器学习算法,主要用于分类问题,但是也可以扩展做回归任务。
SVM的主要思想是:
将样本映射到高维空间中,转换为线性可分问题。
在高维空间中,存在很多分隔超平面可以将不同类样本完全分开。SVM试图找到这些超平面的最优解,即最大间隔超平面,这样可以获得最佳的分类
GENERALIZATION(泛化)能力。
最大间隔超平面可以由支持向量决定,而支持向量就是离分隔超平面最近的样本点。
通过核函数,SVM可以隐式地实现高维映射,并建立优化问题求解最大间隔超平面,
thus分类模型。
SVM决策超平面的推导过程:
设训练样本为\(\{(x_1, y_1), (x_2, y_2),
\cdots, (x_n, y_n)\}\),其中\(x_i \in
\mathbb{R}^d\),\(y_i \in
\{-1,+1\}\)。
SVM的目标是找到一个分类超平面:
\[w^Tx + b = 0\]
将两类样本完全分开,且间隔尽可能大。
定义样本\(x_i\)到超平面的函数间隔为:
\[d_i = \frac{|w^Tx_i +
...
逻辑回归
逻辑回归本质上是一个分类模型,用于预测输入数据属于哪个类别的概率。其基本思想是:
构建一个线性函数,输入是样本特征,输出是样例属于某类的对数概率。
将线性函数的输出通过sigmoid函数转换为概率值。
根据最大概率,对样本进行分类预测。
通过最大化似然估计或最小化交叉熵损失,训练线性模型的参数。
具体实现原理:
假设逻辑回归为二分类,线性函数为:
\[z = w_1 x_1 + w_2 x_2 + ... + w_n x_n +
b\]
其中:
\(z\) - 模型的预测值
\(x_1, x_2,...,x_n\) - \(n\)个特征变量
\(w_1, w_2,...,w_n\) - \(n\)个特征变量对应的模型参数权重
\(b\) - 模型的偏置项
将z代入sigmoid函数求概率:
\[p = \frac{1}{1+e^{-z}}\]
其中: p表示输入样本为正类的概率。
则逻辑回归的损失函数为负对数似然或交叉熵。
通过梯度下降算法训练w和b,最小化损失,完成模型。
预测时,计算新样本的概率p,如果p>0.5则预测为正 ...
线性回归
线性回归是一种基础而且常用的机器学习算法,顾名思义是一个回归模型。
它的假设是,输出y可以被输入x以线性的方式预测
y = wx + b,
其中,w和b是模型要学习的参数。
线性回归的目标是求解w和b,使得预测输出y与真实输出之间的误差最小。
线性回归的损失函数通常使用均方误差作为衡量指标:
\[MSE = \frac{1}{n} \sum_{i=1}^{n}
(Y_i - \hat{Y}_i)^2\]
其中:
\(n\) - 样本数量
\(Y_i\) - 第\(i\)个样本的真实值
\(\hat{Y}_i\) - 第\(i\)个样本的预测值
\(\sum\) -
求和符号,对所有样本求和解析:
\((Y_i - \hat{Y}_i)\) 表示第\(i\)个样本的预测误差,即真实值与预测值之
\((Y_i - \hat{Y}_i)^2\)
对预测误差进行平方,避免正负误差相抵消,误差可能为负也可能为正,取平方有一个特性,它惩罚更大的错误更多。
\(\frac{1}{n}\)
求样本平均值,防止样本数量影响所以MSE是每个样本平方误差之和的平均值, ...