ButterFly主题美化
我这里只总结了自己用到的,可以看原教程:hexo主题butterfly配置
主题安装
在项目的根目录 Blog 右键打开终端,输入如下指令安装
1git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly
安装 pug 和 stylus 渲染器
1npm install hexo-renderer-pug hexo-renderer-stylus --save
修改占点配置文件,开启主题
1theme: butterfly
为了減少升级主题带来的不便,可以把主题文件夹中的 _config.yml 重命名为 _config.butterfly.yml,复制到根目录下与站点配置文件同级。
Hexo 会自动合并主题中的 _config.yml 和 _config.butterfly.yml ,如果存在同名配置,会使用 _config.butterfly.yml 的配置,其优先度较高。所以像和博客网址相关联的固定资料可以设置在 _config.yml 中,比如博客的标题、作 ...
NexT主题美化
主题安装
当前用得最多的是next主题,下载地址:theme-next/hexo-theme-next
可以直接在博客根目录中打开终端,输入代码将主题下载到目录 Blog/themes 中
1git clone https://github.com/theme-next/hexo-theme-next themes/next
主题配置
打开根目录下的 _config.yml 文件(站点配置文件),查找并且修改
123456789101112title: LuosBlogsubtitle: ''description: 或许从未开始,或许已经结束,但是我该走了keywords:author: 落language: zh-CNtimezone: Asia/Shanghai# Extensions## Plugins: https://hexo.io/plugins/## Themes: https://hexo.io/themes/theme: next
将主题修改为 next ,主题的语言需要查看 themes/next/language 文件夹中的简体中文是 zh- ...
个人博客创建
绑定github
SSH与github
SSH(安全外壳协议,Secure Shell 的缩写)是建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。简单来说,SSH就是保障你的账户安全,将你的数据加密压缩,不仅防止其他人截获你的数据,还能加快传输速度。
一般来说,安装 git bash 之后实际上是自带 SSH 的,所以可以检验一下,在终端输入指令 ssh 会显示出 usage 的内容,那就是装好了,有问题的话,可以自行百度一下。
没问题了就可以输入指令 ssh-keygen -t rsa ,使用 RSA 算法生成密钥,然后,如下
其中 红色圈里面是输入保存的地址,蓝色圈里输入的是 passphrase,可以不输入,直接回车就行。最终去你保存的地址找到它
接下来我们要做的事情就是把公钥 id.pub 的内容添加到 GitHub。复制公钥 id.pub 文件里的内容,你可以通过目录找到 id.pub 文件的位置,打开复制里面的内容。(文件名是与上述操作中文件名称有关,我的设置 ...
算法
单调栈
用于寻找一个数组内最大或者最小的元素,单调的意思就是栈内的数据排列是单调递增或者递减的
例如,如果是一个单调递增的栈,遇到比top元素更小的元素的话,就需要把top之前比该元素小的元素全部弹出,之后再将该元素放入,继续维持单调栈
1234567891011121314151617181920212223// leetcode 42int trap(vector<int>& height){ stack<int> stack; int n = height.size(); int res = 0; for (int i = 0; i < n; i++) { // 将栈顶中小的元素推出栈,并且计算这个范围内的数据 while (!stack.empty() && stack.top() < height[i]) { int top = stack.top(); stack.pop(); if (!stack.empty()) // 如果已经空了就中断不再进行 ...
数据结构
github仓库
链表
单向链表
单向链表每次查找只能从前向后查找,单向的,只会有一个指针并且指向下一个节点。所以每个节点只能找到自己后面的节点,但是无法找到之前的链表。
对于循环链表,最末端的节点会指向头节点,形成首尾相接的循环。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631 ...
C++内存管理
四种内存分配和释放的方式
分配
释放
类型
是否可重载
malloc
free
C-function
否
new
delete
C+±expressions
否
::operator new()
::operator delete()
C+±function
可
allocator::allocate()
allocator::deallocate()
C+±STL
可自由设计并且搭配任何容器
memory primitives
malloc
free
不可重载
new
delete
不可重载
::operator new()
::operator delete()
可重载
allocator::allocate()
allocator::deallocate()
可以自由设计并搭配任何容器
new expression
new 有两个作用,申请内存→构造函数,申请内存使用 operator new 实际上使用的还是 malloc 函数来申请内存
12345678910111213141516Complex *pc = new ...
C++程序的生前死后
startup
默认的startup函数是由 linker(连接器) 自己选择的
1. 内存初始化
内存块:
从哪里来
大小多少
回收到哪
SBH(Small Block Heap):应付CRT本身以及main进去之后的所有内存(size=1024=1k)。
如果客户要的区块大小要小于sbh_threshold(size=1016,加上图中的上下的00000131(各占4个字节),1016+8=1024,即1K),将从sbh内部去申请内存。反之,使用HeapAlloc(win提供的API函数),让操作系统提供服务。
因此,内存小于等于1K的,VC6认为它足够小,它将使用SBH去服务它。反之,若大于1K,将有操作系统那些"池塘"(HeapAlloc等函数)来提供。(内存块从哪里来)
HeapAlloc:HeapAlloc是Windows提供的API,在进程初始化的时候,系统会在进程的地址空间中创建1M大小的堆,称为默认堆(Default Heap),该大小为默认值,可以通过/HEAP连接器开关进行修改。用户也可以通过HeapCreate创建额外的堆,堆的使用可以 ...
C++11STL
STL 六大部件
容器 Container
分配器 Allocators 用于为算法分配地址
算法 Algorithms
迭代器 Iterators 容器中就会有迭代器,用于遍历元素,就是可以表示容器中的所有种类的元素
适配器 Adapters 就像是一个泛化的指针, 对迭代器,仿函数,容器进行适配
仿函式 Functors 就是一种函数
数据在容器里,操作数据的函数在另外的类里
时间复杂度(Big-oh)
O(1),O(c)O(1),O(c)O(1),O(c) : 常数时间
O(n)O(n)O(n) :线性时间
O(lognx)O(\log_n x)O(lognx) :次线性时间
O(n2)O(n^2)O(n2) :平方时间
O(n3)O(n^3)O(n3) :立方时间
O(2n)O(2^n)O(2n) :指数时间
O(nlog2n)O(n\log_2n)O(nlog2n) :线性与二次方成长之间的模式
容器
Sequence Container(序列式)
Arrary (数组) 固定大小 12
Vector (向量) 末尾扩充 12
heap 以算法形式呈 ...
C++11新标准
variadic template
就是参数个数随意的模板,定义任意个参数的模板,可以是任意类型
而且可以依据参数重载,关键字 typename… 也可以实现递归,下面的这两种给方式可以并存
相较来看,第一个定义比较特化,第二个比较泛化,所以就会,如果传入参数是 1 + x 那么就调用第一个,否则调用第二个
12345template <typename... types>void func(size_t seed, types& ...args){return func(args...);}template <typename... types>void func(types& ...args){}
Space in Template Expressionn**ullptr & std::nullptr_t
左边是一个 object,就是0的空的指针,允许使用 null 代替0
auto
auto 表示不知道是什么类型的变量,可以把任意变量赋予 auto 变量
编译过程中,编译器会自动识别类型, ...
unity游戏开发-MYSQL
MySQL配置
先安装一个数据库,我使用的是 8.0.35 版本的,版本没什么大的要求。也可以安装一个可视的 UI 界面,例如 workbench,方便做一些操作
在数据库中添加表格,然后将某一个 user 的 localhost 设置为 %,就可以实现其他设备的登录了
unity端配置
在 Assets 文件目录下新建一个文件夹 Plugins 用来存放数据库需要的一些文件 (必须是这个名称,不能更改,不然 unity 不能识别出来)
可以不用下载 MySQL Connnector/NET,直接在 vs中安装 mysql 包 项目→管理 NuGet 程序包,直接在浏览中搜索 MySQL,安装第一个,之后它会自己把依赖装好
然后,最最重要的一步,在vs的解决方案资源管理器的项目的引用之下,找到 mysql.Data 这个项目,查看它所在的路径,在文件资源管理器中找到它,把它拖到第一步所建好的文件夹中,然后进入unity它会报错,查看错误信息,是需要一些文件,然后再在项目引用之下找到 Google.Protobuf , K4os.Compression.LZ4 , K4os.Com ...
request-python学习记录
requests 学习
静态网络与动态网络
动态xml页面: 如果网络界面是由js加载上去的,那么网络就是动态的
静态xml页面: 没有使用js加载
通用爬虫: 通常指搜索引擎的爬虫 面向互联网上所有的网站
聚焦爬虫: 针对特定网站的爬虫 针对几个网站,特定的网站
步骤
url list
响应内容 提取url
提取数据
入库
DNS服务器: 根据客户给定的域名,来返回对应的 ip 地址,客户通过 ip 地址请求页面,返回页面的 html+js+css+.jpg
url形式:
scheme://host[:port# ]/path/…/[?query-string ][#anchor ]
scheme: 协议(http,https,ftp)
host: 服务器的ip地址或者域名
port: 服务器的端口(如果是默认端口就是 80 / 443)
path: 访问资源的路径
query-string: 参数,发送给http服务器的数据
anchor: 锚点(跳转到网页的指定冒点位置)
url地址带上锚点与不带锚点是一样的
HTTP
http
超文本传输协议
默认端口号: 80
...
stm32-ucos使用
计算机操作系统
计算机只由硬件构成的叫做“裸机“,不能工作,必须有软件
多任务
把一个大任务分解为几个小任务,那在一个任务需要等待I/O时就可以交出CPU的使用权去运行其他的任务,可以极大的提高CPU的利用效率。
内核类型
可剥夺型内核
总是运行优先级别最高的任务,即使CPU正在运行某一个低优先级的任务,当高优先级的任务准备就绪时,就会剥夺低优先级的任务的CPU的使用权。
不可剥夺型内核
总是优先级别高的任务最先获得CPU的使用权,要求每个任务都能主动放弃CPU的使用权。
任务切换时间
多任务系统的任务之间的切换是需要时间的。操作系统的任务调度器就是做这项工作的。调度器在进行任务切换时需要一段时间,这段时间的长短也影响系统实时性,任务调度器进行任务切换所用的时间不能受到应用程序中其他因素(任务数目等)的影响。
终端延时
外部事件的发生会以中断申请信号的形式通知CPU,然后才运行中断服务程序来处理该事件,自CPU响应中断到CPU转向中断服务程序之间所用的时间叫做终端延时,也影响系统的实时性。
ucosii使用
用户应用程序的结构
123456789v ...
opencv
程序说明
图片转灰度图
这个操作可以在一开始读取照片时就完成,也可以自己根据每个像素点,把每个像素点的r,b,g三个参数调成一样的,也就能形成灰度图
12def imread(filename: str, flags: int = ...)
这里的flags能选择读入图片的形式:0是灰度图,1是彩色图
123456789101112for i in range(img.shape[0]): for j in range(img.shape[1]): point = [i,j] (b,g,r) = img[i,j] b = int(b) g = int(g) r = int(r) # gray = 255 gray = (b + g + r)/3 # 第一种灰度化方法 # gray = r*0.299 + g*0.587 + b*0.114 # 第二种灰度化方法 img[i,j] = np.array([gray,gray,gray],dtype = ...
编译原理
编译器的结构介绍
1234graph LRA[高级语言]-->|编译|B[汇编语言]A-->|编译|C[机器语言]B-->|汇编|C
编译流程
123graph TDA(源程序)-->B[预处理器]-->|将存储在不同文件中的源程序聚合在一起,宏展开|C(处理后的源程序)-->D[编译器]-->E(汇编语言)-->F[汇编器]-->G(可重定位目标文件)-->H[链接器&加载器]-->|修改可重定位目标文件,将修改后的指令和数据放入内存中|I(可执行目标文件)J(库文件)-->H
编译器结构
12graph TDA(字符流)-->B[词法分析器]-->C(词法单元流)-->D[语法分析器]-->E(语法树)-->F[语义分析器]-->G(语法树)-->H[中间代码生成器&机器无关代码优化器]-->I(中间表示形式)-->J[目标代码生成器]-->K(目标机器语言)-->L[机器相关代码优化器]-->M(目标机器代码)
其中机器无 ...
设计模式
GitHub - Luo25177/Design-Pattern
介绍
设计原则
依赖倒置原则
高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定),稳定的东西不应该依赖于变化的东西
抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定),稳定的东西不应该依赖于变化的东西
解决: 创建抽象类,之后的类依赖抽象类
依赖:例如A依赖B,在编译A的时候只有B存在才能编译成功 编译式依赖
开放封闭原则
对扩展开放,对更改关闭
类模块应该是可以扩展的,但是不可以修改
单一职责原则
一个类应该仅有一个引起它变化的原因,一个类不能放太多功能,也就是不能有太多的责任
变化的方向隐含着类的责任
Liskov替换原则
子类必须能够替换它们的基类(is-a)
继承表达类型抽象
接口隔离原则
不应该强迫客户程序依赖他们不用的方法
接口应该小而完备
真正有必要暴漏出去的方法才做成 public
优先使用对象组合而不是类继承
类继承通常为"白箱复用",对象组合通常为"黑箱复用"
继承在某种程度上破坏了 ...
操作系统
前言
这个笔记是跟着 jyy 老师学的,有兴趣的话可以看看原视频,讲的很不错
读手册,读手册,读手册
http://jyywiki.cn/pages/OS/2022/demos/
绪论
操作系统是服务于程序的,程序就是状态机,计算机每执行一条指令计算机的内存和寄存器都会发生变化
操作系统=对象(文件,进程,管道)+API(操纵对象的API)
用简单的硬件实现对象和API,操作系统可以用c程序实现
广义的操作系统:基于下层的支撑为上层提供服务
程序
程序就是状态机,作为一个状态机是没有办法自己销毁自己的,只能以死循环或者以一个系统调用(告诉操作系统该销毁了)结束,程序的状态机模型
状态 = 堆 + 栈
初始状态 = main 的第一条语句
迁移 = 执行第一条语句
任何 C 程序都可以改写成非复合语句的 C 代码,所有程序都是运行在计算机上的,计算机就相当于是状态机,C程序的所有代码都会被推入栈中,之后在运行过程中依次调用,每执行一条指令计算机的状态也会发生改变,指令是从pc取出来的,确定性的指令,状态是一条直线
系统调用 syscall
这个指令就是把系统完全交给操作系统,任其 ...
ubuntu指令
ubuntu关于安装的指令
bus restart重置输入法
sudo apt search package 搜索包
sudo apt show package 获取包的相关信息,如说明、大小、版本等
sudo apt depends package 了解使用依赖
sudo apt rdepends package 查看该包被哪些包依赖
sudo apt-cache pkgnames 执行pkgnames子命令列出当前所有可用的软件包
sudo apt policy package 使用policy命令显示软件包的安装状态和版本信息。
sudo apt install package 安装包
sudo apt install package=version 安装指定版本的包
sudo apt install package --reinstall 重新安装包
sudo apt -f install 修复安装 -f = --fix-missing
sudo apt remove package 删除包
sudo apt purge package 删除包,包括删除配置文件等
sudo a ...
zsh使用
安装
在 linux 终端命令行只需要一行指令安装
1sudo apt install zsh
设置为默认终端
在linux终端输入指令
1chsh -s $(which fish)
配置文件
是一个很不错的美化,曾经刚接触 linux 时就是用的这个(后来改用fish了)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118# ~/.zshrc# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.# Initialization code that ...