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
autoauto 表示不知道是什么类型的变量,可以把任意变量赋予 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.Compr ...
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地址带上锚点与不带锚点是一样的
HTTPhttp
超文本传输协议
默认端口号: 80https ...
stm32-ucos使用
计算机操作系统计算机只由硬件构成的叫做“裸机“,不能工作,必须有软件
多任务
把一个大任务分解为几个小任务,那在一个任务需要等待I/O时就可以交出CPU的使用权去运行其他的任务,可以极大的提高CPU的利用效率。
内核类型
可剥夺型内核
总是运行优先级别最高的任务,即使CPU正在运行某一个低优先级的任务,当高优先级的任务准备就绪时,就会剥夺低优先级的任务的CPU的使用权。
不可剥夺型内核
总是优先级别高的任务最先获得CPU的使用权,要求每个任务都能主动放弃CPU的使用权。
任务切换时间
多任务系统的任务之间的切换是需要时间的。操作系统的任务调度器就是做这项工作的。调度器在进行任务切换时需要一段时间,这段时间的长短也影响系统实时性,任务调度器进行任务切换所用的时间不能受到应用程序中其他因素(任务数目等)的影响。
终端延时
外部事件的发生会以中断申请信号的形式通知CPU,然后才运行中断服务程序来处理该事件,自CPU响应中断到CPU转向中断服务程序之间所用的时间叫做终端延时,也影响系统的实时性。
ucosii使用
用户应用程序的结构
123456789voi ...
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 = np ...
编译原理
编译器的结构介绍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 删除包,包括 ...
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 ma ...