📇 本类导航
本页自动汇总「1经验」分类下的全部笔记(含子分类),随笔记增删实时更新。
在 GitHub 上提交 Pull Request(简称 PR,拉取请求)是参与开源项目或团队协作的核心方式。简单来说,就是把你修改好的代码“请求”合并到别人的项目里。
以下是提交 PR 的完整标准流程,你可以把它看作一份新手避坑指南:
🌱 1. Fork 项目(复制一份到你自己的仓库)
在你想要贡献代码的项目主页,点击右上角的 Fork 按钮。这会在你的 GitHub 账号下生成一个该项目的完整副本。
💻 2. Clone 到本地(把代码下载到电脑)
打开你 Fork 后的仓库,点击绿色的 Code 按钮,复制仓库的 HTTPS 或 SSH 链接。在本地终端(命令行)中执行克隆命令:
git clone 你的仓库链接🌿 3. 配置上游仓库与创建分支(关键步骤)
进入项目文件夹后,千万不要直接在主分支(main/master)上修改代码!
- 添加上游仓库:为了后续能同步原项目的最新代码,需要把原项目添加为上游仓库(upstream)。
git remote add upstream 原项目的仓库链接- 同步最新代码:先拉取原项目的最新代码,确保你的基础是最新的。
git checkout main然后git pull upstream main- 创建新分支:基于最新的 main 分支,创建并切换到一个新的功能分支。分支名最好有意义,例如
fix/typo-in-readme(修复文档错别字)或feature/new-login(新增登录功能)。
git checkout -b fix/typo-in-readme✏️ 4. 开发与提交(写代码与 Commit)
在本地用你喜欢的编辑器修改代码。修改完成后,执行以下 Git 操作:
git add .(将修改加入暂存区)git commit -m "docs: fix typo in installation guide"(提交代码)
- 提示:Commit 信息最好遵循规范,比如
feat:表示新功能,fix:表示修 Bug,docs:表示改文档,这样会显得非常专业。git push origin fix/typo-in-readme(将你的分支推送到你远程的 GitHub 仓库)🚀 5. 提交 Pull Request(发起合并请求)
代码推送到你的 GitHub 仓库后,打开你的仓库页面,通常会看到一个醒目的 Compare & pull request 按钮,点击它(或者去原项目的 Pull requests 页面点击 New pull request)。
- 填写 PR 描述:标题要简明扼要。在描述框里写清楚你解决了什么问题、是怎么修改的,如果有相关的 Issue 编号也可以关联(如
Closes #123)。- 点击 Create pull request:正式提交请求,通知原项目的维护者来审查你的代码。
🔄 6. 应对反馈与合并(代码审查)
提交后,项目维护者会 Review 你的代码:
- 如果需要修改:直接在本地同一个分支(
fix/typo-in-readme)上继续修改,然后再次add、commit、push。PR 会自动更新,不需要重新提交。- 如果发生冲突:如果原项目在你修改期间有了新更新,你可能需要先在本地
pull upstream main并解决冲突,然后再 push。- 大功告成:维护者审核通过后,会点击 Merge pull request。你的代码就正式被合入原项目了!🎉
🧹 7. 收尾清理
PR 合并后,记得清理一下本地和远程的临时分支,保持环境整洁:
- 切回主分支并拉取最新代码:
git checkout main和git pull upstream main- 删除本地功能分支:
git branch -d fix/typo-in-readme💡 给新手的建议:
如果你是第一次尝试,可以先从修复文档错别字、翻译或修正链接开始,这些都是非常受欢迎的入门贡献。另外,动手前记得阅读项目里的CONTRIBUTING.md文件,里面通常包含了该项目的具体贡献规范。祝你第一次提 PR 顺利!
实践环境
物理机:Windows10 专业版,操作系统版本 17134.950 (查看方式:Win+R 打开运行 -> 输入
winver)虚拟机:Ubuntu20.04.2 LTS (查看方式: cat /etc/issue)
linux-vm-tools 简介
在 Hyper-V 中的刚安装好 Ubuntu 虚拟机之后,会发现鼠标滑动很不顺畅,也不能向虚拟机中拖拽文件或者复制内容。在 VMware 中,可以通过安装 VMware tools 来使物理机和虚拟机之间达到更好的交互。在 Hyper-V 中,也有这样的工具。这款工具可以完成更好的鼠标交互,我的实践结果发现它可以在物理机和虚拟机之间复制粘贴(包括文字和文件),不支持在两者之间拖拽文件。这是一款Windows与XRDP合作开发的工具 —— linux-vm-tools。
微软官方技术论坛关于 linux-vm-tools 的说明 click here
操作 Ubuntu 虚拟机
在 Ubuntu 打开终端(Terminal),准备执行命令
1.安装 git
sudo apt-get update sudo apt install git第一条命令是为了更新
apt-get,防止执行第二条命令时出现 软件包 git 还没有可供安装的候选者 的错误。2.用 git 下载源码
git clone https://github.com/microsoft/linux-vm-tools这条命令会将 linux-vm-tools 下载到 /home/{你的用户名}/linux-vm-tools 文件夹下。
如果遇到一些网络不好,下载超时的情况,可以试一下下面这个备用地址:
git clone https://hub.fastgit.org/microsoft/linux-vm-tools3.安装 linux-vm-tools
cd ~/linux-vm-tools/ubuntu/18.04/ sudo chmod +x install.sh sudo ./install.sh第一条指令,进入 ubuntu 18.04 的文件夹;
第二条指令,修改 install.sh 文件,使其可执行;
第三条指令,执行 install.sh因为我在 /ubuntu/18.04 中没有看到 config-user.sh 文件,因此就没有执行
sudo chmod +x config-user.sh和sudo ./config-user.sh
install.sh执行到最后,出现如上图所示的操作指示:1、执行重启:
reboot2、重启后,再次执行 install.sh 这个文件
sudo bash ~/linux-vm-tools/ubuntu/18.04/install.sh
Ubuntu20.04.2无法启动xrdp 问题解决方案 click here
3、虚拟机Ubuntu立即关机
sudo shutdown now操作 Windows 10 主机
打开 PowerShell 操作符:
Set-VM -VMName <your_vm_name> -EnhancedSessionTransportType HvSocket举例:
在 Ubuntu 上创建一个新用户
创建一个新用户专门用来通过 远程桌面连接 登录 Ubuntu,了解更多 click here
su root adduser ubuntu创建一个新的用户可以避免一些蓝屏和黑屏的问题。
参考文档
- Windows10使用Xrdp远程桌面连接Ubuntu主机 click here
- 微软官方技术论坛关于 linux-vm-tools 的说明 click here
- ubuntu桌面 黑屏_Win10远程桌面连接Ubuntu 20.04 click here
- Ubuntu16.04系统中创建新用户 click here
排查方法:看看是不是你的请求链接写错了,详细对照以下几点
① http写成https
② 端口号写错了
③ 网址写错了!!!
Java和C++的区别
C++中的virtual虚函数,Java中不用什么前缀,子类直接重写即可,用@Override作标记
C++中的纯虚函数,Java中加abstract前缀,且类也要声明为抽象类,C++不用声明
Java中的接口,其实就是一个抽象类,里面都是常量和abstract方法,记住,都是常量和abstract方法,都是常量和abstract方法
C++中通过类名访问静态成员与Java不一样,
- C++的格式是 类名::成员变量名
- Java的格式是 类名.静态成员变量名
还有,C++类名::成员变量名,其中,只要是类中公有的成员,都可以访问(不晓得为啥,明明对象都还没有,怎么来的内存),而Java只能访问静态成员。
问题:重写了接口里面的abstract方法之后怎么调用?
答:new一个实现类就行了C++中对象可以是栈区
继承的那些事
==子类继承父类的变量和函数(理解:只能继承财富和技能,继承不了身体)==
父类和子类有重名的定义时:
子类的可以直接访问了,父类要在前加this
父类的虚函数可以重写或者不重写(不重写就用父类的,不用想都明白),但纯虚函数必须重写。
只有纯虚函数没有函数体以外,其他的函数都要有函数体,不然会报函数未定义的错误
类成员的访问属性
继承九宫格
之前你一直不理解的问题:继承不是公有属性时,怎么理解?
答:若继承为保护属性,能改变的只是基类中的公有属性,若继承为私有属性,能改变的只是基类中的(公有属性/保护属性),看上面那表就知道,一级压一级,看完上面的表之后再看上一点那表你就理解了
- Java源文件的名字跟类中的public修饰的类一样。
- Java的一个类中可以没有public类,有也只能有一个,且要与源文件同名,非public类可以有多个
- Java里面的char占两个字节
- float类型的变量怎么与double区别的呢?
答:值后面加上f或F- Java中 int[]a,b; //其实是定义了两个一维数组,名字分别为a、b,int a[],b; //才是定义了一个数组a和一个变量b
- Java中数组是引用来的,所以数组需要new才能使用,要不然就只能在定义时初始化,即int a[20];在Java中不对,应为int a[]=new int[20];
- 循环语句的判断表达式只能是boolean类型,但是switch除了double和float,其他都可以
- 数据类型转换中的注意事项:
答:如果是在定义时就初始化的话,只要不超所定义数据类型的取值范围都可,在进行运算的表达式中,整数是int类型,小数是double类型,所有低于int类型的数据在运算之后都会转成int类型- 逻辑运算符和关系运算符的结果都是true或false,不是0或1
- Java里面的所有条件表达式都必须是boolean类型,如while(1)是错误的
① 公司中是用html+css还是用vue
答:
这得看应用场景,如果需要被搜索引擎搜录 -> html+css
不需要,只需要服务于特定群体,而且要快速落地 -> Vue
② 为什么很多公司都用第三方组件
答:
因为谁都不想消耗巨大的人力和物力造轮子,公司主要看效益,能用就行,能赚钱就行
③ 为什么很多公司喜欢用老版本的东西(例如JDK8)
答: 稳定性!!!
版本问题,很多公司肯定是用最稳定的框架,因为稳定才是一个企业发展的根基,不然就像你那时候遇到的那个最sb的bug一样(代码死在加载模型那里,我真的艹了,重装了好几次操作系统和环境都不行,真的日了),如果从技术的手段来处理都处理不了,那么只能推倒重来,其中消耗的人力物力是一个企业无法承担的
所以最核心的思想就是
在 Linux 中,文件和目录的操作是非常基础且常用的。下面整理了一些常见的命令,涵盖文件操作、目录操作、文件与目录之间的操作以及目录与目录之间的操作。
一、文件操作(File Operations)
功能 命令 说明 创建文件 touch filename创建一个空文件或更新已有文件的时间戳 查看文件内容 cat filename显示整个文件内容 分页查看文件 less filename适合查看大文件 查看文件前几行 head -n 10 filename默认显示前10行 查看文件后几行 tail -n 10 filename默认显示后10行; tail -f可持续跟踪日志复制文件 cp file1 file2将 file1 复制为 file2 移动/重命名文件 mv oldname newname也可用于重命名 删除文件 rm filename删除单个文件; rm -i 安全确认;rm -f强制删除查看文件类型 file filename判断文件真实类型(如文本、二进制等) 查看文件大小 ls -lh filename以易读方式显示文件大小
二、目录操作(Directory Operations)
功能 命令 说明 创建目录 mkdir dirname创建一个目录 递归创建多级目录 mkdir -p dir1/dir2/dir3自动创建所有不存在的父目录 删除空目录 rmdir dirname只能删除空目录 删除非空目录 rm -r dirname递归删除目录及内容;加 -f可强制删除进入目录 cd dirname切换当前工作目录 返回上一级 cd ..返回父目录 返回家目录 cd 或cd ~回到当前用户的主目录 查看当前路径 pwd显示当前工作目录的绝对路径 列出目录内容 ls /ls -l /ls -a-l 详细信息,-a显示隐藏文件
三、文件与目录之间的操作
功能 命令 说明 将文件复制到目录 cp file.txt /path/to/dir/目标必须是目录 将文件移动到目录 mv file.txt /path/to/dir/移动后原文件消失 在目录中创建文件 touch /path/to/dir/newfile直接指定路径创建 查找某目录下的文件 find /path/to/dir -name "filename"按名称查找文件 批量操作(如删除某类文件) rm /path/to/dir/*.log删除目录下所有 .log 文件
四、目录与目录之间的操作
功能 命令 说明 复制整个目录 cp -r dir1 dir2-r表示递归复制所有子内容移动/重命名目录 mv dir1 dir2若 dir2 不存在,则重命名;若存在,则移动到其内部 同步两个目录(增量备份) rsync -av dir1/ dir2/高效同步,保留权限、时间等;注意末尾 /的区别比较两个目录差异 diff -r dir1 dir2递归比较目录内容 合并目录内容 cp -r dir1/* dir2/将 dir1 所有内容复制到 dir2(不覆盖同名需加 -n)⚠️ 注意:
rsync是高级但非常实用的工具,常用于备份和镜像。
补充建议
- 使用
man 命令(如man cp)查看命令的完整手册。- 操作前建议先用
ls确认路径和文件名。- 删除操作(尤其是
rm -rf)要格外小心,不可恢复!
如果你在使用一个框架,在具体业务逻辑中得到意料之外的结果,除去特殊情况,一般就是还有一些代码其他人写的,你还没找到罢了
for<=2层,if<=3层
2147483646
Centos查看Ip地址命令:ip addr
使用Linux 时不要乱删或乱改根目录下的东西(非必要)。家目录随便你操作,再乱删、乱改 剁手!!!
查看名称对应进程ID(ps -ef | grep 名字**** )
图形化模式查看Linux的硬盘使用情况:baobab
修复 U 盘命令:chkdsk /f [U 盘挂载盘符号]
一、随心记
⚠️⚠️⚠️项目部署到服务器时,注意把前端和后端用到的端口在安全组里面都打开
无论是 Windows 还是 Linux,在终端输入的命令,第一个输入的肯定是那个工具的全称或者是缩写,也就是可以直接跑的一个程序(比如说 python xxx,其实就是 python.exe xxx,java xxx,其实就是 java.exe),其他后面的后缀都是它里面可以解析的指令集,大悟彻悟 – 2024.3.11 0:22😊😊
调试程序找bug的两大杀器, !!! 注释+输出语句 !!!
一定要善于使用工具(tools/utils),特别是别人已经有的工具(一定不要自己造轮子,没必要),还有Python(这可真是个好东西)
复制粘贴固然好用,但是也容易出问题,一下小小的地方没改过来(得找半天,我哭死😭),反正很细节
编写程序的一个很好用的思路:标志位
开发什么东西都差不多,无论是游戏还是软件还是一些其他的什么东西,凡是关于计算机的,通通都是一个个函数堆起来的,就那样,简简单单,有手就行
在Ubuntu编译C++项目时,如果项目编译完仍没有生成可执行文件,那么一定是CMakeLists里面写的有问题
sprintf函数的作用:在一个字符串中需要夹杂着可变数字,就需要sprintf来格式化一下
Ubuntu输出段错误(核心已转储),一般为程序抛的异常,类似与VS的中断一样。
C# 好像Java还没独立完的样子,有点C,又有点Java
①:g_标识符:定义全局变量
②:局部变量的一种可爱用法:用来当开关使用,您细品
③:检查bug的步骤:
(1)语法有没有问题
(2)访问有没有问题
(3)逻辑有没有问题
④:经验: (直接记)
a指针=b指针,说明a指针指向b指针指向的地方
a指针=b内容,说明a指针指向b内容
⑤:尽量不要用l和o对变量进行命名,因为它会和1、0混淆
⑥:npm install安装vue所需包报错时,如果出现的问题不知道咋解决,可以考虑把项目下的 package-lock.json 先删掉,在npm install试试
二、免费获取图片网站(测试用):
三、安装python包的万能命令:
安装
单个包:pip install [包名] -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com requirements.txt文件:pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com卸载
卸载 单个包:pip uninstall [包名] requirements.txt文件:pip uninstall -r requirements.txt #然后一直按回车即可四、二维数组下标规律
① 主对角线上的下标,主对角线上的每一个下标的行下标等于列下标
② 副对角线上的下标,副对角线上的每一个下标的行下标+列下标都等于一个特定的值
五、栈损坏
栈损坏一般的考虑情况
①:数组大小太小,不够装下所要存储的数据
②:数组下标访问越界
六、C++指针异常问题
C++异常:如果读入位置为0X00000000,则是野指针错误
如果读入位置为0X41123341(随便一个地址),则是指针访问越界
七、快速熟悉一个框架
如何快速熟悉一个框架:
①资源文件在哪里加载?
②框架的属性在哪里改,这个组件有什么作用,具有事件的代码在哪里写?
八、输出错误
C/C++输出-nan(ind)的问题:对负数开平方,对负数取对数,0.0除以0.0,0.0乘无穷大∞,无穷大∞除以无穷大∞ 等错误都会得到它
下载安装包和破解工具
Navicat安装包
**链接:**https://pan.baidu.com/s/1omVvljarD88EiJY1dSkqnw?pwd=dmue
提取码:dmue
–来自百度网盘超级会员V5的分享破解工具
**链接:**https://pan.baidu.com/s/1nVYZTjwzXHoa4IfosWB7ow?pwd=72wg
提取码:72wg
–来自百度网盘超级会员V5的分享开始安装
下载好后首先安装 Navicat Premium 15 ,此安装比较简单,我就不全部截图,选定安装位置后全部点下一步
开始激活(退出所有杀毒软件)
使用注册机,退出所有杀毒软件,再打开注册机,否则会一直报错 no All Pattern Found! File Already Patched?
注册机报错提示
**在激活工具的第一个选项(1.Patch)里选择Backup,Host,Navicat 是那个版本就选那个版本,这里就选择Navicat V15就好了,然后点击,Patch按钮,**选择Navicat的安装位置中的navicat.exe文件
出现以下提示说明Patch成功了。
License. Product and LanguageLicense里选中Enterprise、在Produce里选择Premium、在Languages里选择Simplified Chinese(简体中文)
Resale License
选择Site License
Keygen / Offline Activation
点击Generate按钮就会生成一个许可证秘钥 ,将许可证秘钥复制后就打开Navicat Premium 15
打开Navicat Premium 15,点击注册
粘贴秘钥,然后点击激活按钮
在弹出的界面选择手动激活
将请求码粘贴到注册机Request Code框中
点击激活页面的激活弹出(说明激活成功)
恭喜,激活成功啦!!
一、下载安装包
链接: https://pan.baidu.com/s/1RCZQXYtEPr9TooOUeSjMIQ?pwd=ywmk
提取码:ywmk
–来自百度网盘超级会员V5的分享下载后的目录如图所示
二、Postman安装
双击目录下的Postman-win64-9.10.0-Setup.exe即可自动安装
三、Postman汉化
三、Postman汉化
找到postman的安装目录,然后会看到resources文件夹,把刚下载的汉化包复制到此当前文件夹即可!!
放好了之后,重启一下postman,就可以看到原来的英语基本变成中文了!!!
四、关闭自动更新
① 把postman目录下的update删除
(点击桌面的postman,右键点击,然后选择文件所在位置,即可看到)
② 然后在postman里面选择把自动更新关闭!!!
缓存的意义在于可以保护后台的接口不被大量的请求所攻击
逻辑是这样的:
1、客户端第一次请求的话,先从数据库中查询到数据并将其写入Redis缓存中,后面都是直接从Redis里面读
2、(最简单的处理,如需复杂一点的处理,后面再跟进记录**** )除了查询,如果后台对数据进行了增加、修改、删除,那么后台会把Redis缓存清除(对应的键值),前端再次请求,还是从数据库里面获取并将其写入Redis缓存
方法一:打开sublime——首选项(preferences)——设置(setting)
然后加入下面这一句代码,重新打开Sublime Text3"update_check":false
如果方法一不行,用方法二方法二:打开hosts文件,在里面加入下面两句
文件路径参考:C:\Windows\System32\drivers\etc
127.0.0.1 license.sublimehq.com 127.0.0.1 www.sublimetext.com然后保存,打开Sublime,无更新提示!
- 主要是两个脚本文件,train.py(模型训练脚本文件),detect.py(利用训练出来最好的权重文件进行推理的脚本文件)
- 流程为:先用开始模型自带的权重文件进行训练,等到模型训练完之后会生成一个最好的权重文件,然后利用这个最好的权重文件进行推理
- 需要更改的文件:一个是data目录下的相应的yaml文件,一个是model目录文件下的相应的yaml文件,一个是train.py(模型训练脚本文件)
一台电脑会有65536个端口,计算是由256*256得出,端口号从0开始到65535.
- 公认端口(baiWell Known Ports):从0到1023,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。
- 注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。
- 动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。
乐观锁:先改,提交时再看有没有人动过,有就重来;
悲观锁:先占住,别人等我改完才能动。
作用:普通型http(s)隧道穿透,用于搭建网站,微信开发等穿透到本地web服务
1 安装NATAPP软件
将下面文件解压到一个目录
natapp_windows_amd64_2_3_9.zip
解压后,文件夹的内容如下
主要是替换natapp.bat下的authtoken,具体authtoken怎么获取,请从第2点开始看
2 去NATAPP官网申请一个authtoken
NATAPP官网:https://natapp.cn/tunnel/buy/free
2.1 购买免费隧道
2.2 修改购买隧道的配置,我这里用的是8080
获取authtoken,购买完成后,在左侧菜单栏找到我的隧道,如下图所示
注:vue项目
vue项目应该在devServer下添加disableHostCheck: true,跳过检查;否则会报Invalid Host header
哈希表
哈希表的思想就是一个数组的下标嵌套另一个数组的值,形成一个键值的对应关系,将键作为数组的索引,数组中索引为i存储的值就是它对应的值
栈
栈的指针为什么一开始赋值为-1,这是因为当压入数据时,可以使(下标++)的代码不用特殊处理,也就是一直(下标++)
二叉树的遍历
由前序知道树的根节点是哪个,再到中序中找他的左右子树,如果没有就是空,如果有多个就继续在前序中把下一个当根节点(理解为遍历,一定要一个个遍历,不要怀疑,肯定对的)
其实用到了递归的思想,一点点地拆分,您细品就知道了!
(遍历看的时候,先总体看,再细分)
问:新手学Python容易上手吗?
答:建议直接从项目开始做
某个东西,你想做但不会,就去抄一个项目,先跑起来
比如你想爬百度的内容,肯定有人做过
你就直接抄过来,能跑就是第一步
然后开始改
改着改着你就入门了
这比你看枯燥的课程快多了
然后学一学基本的语法就ok了
(注:一开始最好不要直接看项目具体的逻辑,先跑起来再说,这个思想很重要!!!)
**1、** ******(也是最重要的一步)****** ,按照上一个开发者的 readme 配好环境,(如果没有 readme,那就量力而行,看看这个框架自己熟不熟悉需要哪些环境,或者 CSDN 一下,一般项目都有 readme 的)
2、项目跑起来了(注:这里跑起来的意思是没有报错❎,有警告⚠️不鸟他)
3、代码跑起来了之后,到处玩玩这个项目,看看点击那个按钮有什么效果
4、等自己玩的差不多知道它是用来干嘛的时候,再尝试改项目
首先:两台电脑需要在同一个局域网里面,且能ping通对方
一、创建Hyper-V共享文件夹
步骤1. 在Hyper-V主机中创建一个文件夹,并将您想要传输的文件放入此文件夹中。
步骤2. 右键单击此文件夹,依次选择 “属性”>“共享”>“共享” ,然后添加 “Everyone” 用户并将其权限级别设置为 “读取/写入” 并单击下方的 “共享” 按钮。
步骤3. 此后将出现一个弹窗,里面有此共享文件夹的路径,请您复制此路径并妥善保存,以便之后能够顺利访问此共享文件夹,然后单击 “完成” 。
步骤4. 此时您已经成功在本地计算机中创建了共享文件夹,然后您需要在Hyper-V中将此网络位置添加到虚拟机。所以请您打开Hyper-V虚拟机,选择 “此电脑” ,然后选择 “映射为网络驱动器” 。
步骤5. 在弹出窗口中您可以设置网络驱动器的驱动器号,在下方文件夹框处输入刚刚复制的共享文件夹路径,勾选 “登录时重新连接” ,然后单击 “完成” 即可在虚拟机上成功映射出本地计算机上的共享文件夹,您可以随时访问,从而达成Hyper-V虚拟机共享文件的目的。 (如果需要输入账号密码,随便输入宿主机一个用户的账号和密码即可)
字段是否走了索引,走不走索引的效率差了几百倍- 批量操作
- 连接的表不要过多
- ==避免使用 select==
- 小表驱动大表
- 使用 limit
- 使用 union all 代替 union
- 口诀:in 小,exists 大,in 先内后外,exists 先外后内
2023 年 11 月 21 日 00:10
总之记得一句话,文件多的文件夹打包传输
前言:如果服务器需要访问外网的服务,不要选择内地的,内地的会被屏蔽用不了,推荐选择中国香港的
服务器配置选择:
- 1-10人使用:1核2G
- 10-30人使用:2核4G
- 30-100人使用:4核8G
- 100人以上使用:8核16G
文件注释:
@file - 文件名
@author - 作者
@version - 版本
@date - 日期
@note - 注解函数注释:
@brief - 简短说明
@param - 输入参数
@arg - 输入参数取值
@return - 返回值
@retval - 返回值取值
@sa -参考资料(see also)
@code -在文档当中嵌入代码块,代码结尾处使用@endcode标签
@addtogroup、@{、@}添加到一个分组,如果分组不存在,自动创建
@todo -将要做的事
@since - 从哪个版本起有了这个函数
多行注释:/**
*
*/
单行注释://
根据Doxygen生成帮助文档。
命名空间:禁止使用 using 指示 引入整个命名空间的标识符号(污染命名空间),在命名空间的最后注释出命名空间的名字。
TFS:子分支起点,合并到主分支
Git:主分支起点,合子分支
- 内存擦拭金手指还是点不亮:说明主板有问题
- 显卡和主板最容易坏,CPU 和内存、硬盘那些都很难坏的
- CPU 和显卡温度 正常不会超过 70
始终记得一个理念:
非必要,不要自己造轮子,不要觉得全部自己写的就是好的,一定要站在巨人的肩膀上开发,能实现需求就行,管你怎么实现的
多用别人写好的库,真的香
最后C、C++版
//////////////////////////////////////////////////////////////////// // _ooOoo_ // // o8888888o // // 88" . "88 // // (| ^_^ |) // // O\ = /O // // ____/`---'\____ // // .' \\| |// `. // // / \\||| : |||// \ // // / _||||| -:- |||||- \ // // | | \\\ - /// | | // // | \_| ''\---/'' | | // // \ .-\__ `-` ___/-. / // // ___`. .' /--.--\ `. . ___ // // ."" '< `.___\_<|>_/___.' >'"". // // | | : `- \`.;`\ _ /`;.`/ - ` : | | // // \ \ `-. \_ __\ /__ _/ .-` / / // // ========`-.____`-.___\_____/___.-`____.-'======== // // `=---=' // // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // // 佛祖保佑 永不宕机 永无BUG // ////////////////////////////////////////////////////////////////////Python版
''' // _ooOoo_ // // o8888888o // // 88" . "88 // // (| ^_^ |) // // O\ = /O // // ____/`---'\____ // // .' \\| |// `. // // / \\||| : |||// \ // // / _||||| -:- |||||- \ // // | | \\\ - /// | | // // | \_| ''\---/'' | | // // \ .-\__ `-` ___/-. / // // ___`. .' /--.--\ `. . ___ // // ."" '< `.___\_<|>_/___.' >'"". // // | | : `- \`.;`\ _ /`;.`/ - ` : | | // // \ \ `-. \_ __\ /__ _/ .-` / / // // ========`-.____`-.___\_____/___.-`____.-'======== // // `=---=' // // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // // 佛祖保佑 永不宕机 永无BUG // //////////////////////////////////////////////////////////////////// '''
1、网站的脚本有两种形式写法:js和ts
3、Axios和Ajax的区别
axios是通过Promise(Promise技术,说人话就是把异步变同步,只需要在代码中加入async、await,解决了******传统 Ajax 回调函数嵌套问题,因为传统的 Ajax 异步调用在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观,就是常说的 Callback Hell (“回调地狱”**** )实现对ajax技术的一种封装,就像jquery对ajax的封装一样,**总结一句话就是axios是ajax,ajax不止axios)。
注: 传统Ajax 指的是 XMLHttpRequest(XHR),axios和jQuer ajax都是对Ajax的封装。
主板和 CPU 要配对,其他的都是通用的
CPU:Intel,AMD
主板:技嘉,华硕
内存条:金士顿,海盗船,游戏威龙
显卡:七彩虹,华硕,影驰
固态:三星
1、父辈比子辈多一辈,所以父进程的pid为1,子进程的pid为0
2、sleep(1)的作用是在子进程尝试使用sem_p()获取信号量之前引入1秒的延迟。这个延迟给父进程足够的时间将字符串写入文件并使用sem_v()释放信号量。如果没有这个延迟,存在子进程在父进程写入文件之前执行的可能性(主要是为了限制进程的不可预测性,您细品),导致子进程读取到空字符串或不完整的字符串。通过引入延迟,确保了父进程和子进程之间的正确同步。
输入regedit
找到路径计算机\HKEY_CLASSES_ROOT\Directory\Background\shell
现在开始创建一个新的
默认情况是这样,我写了一个android 2
双击下面图片内容
下面开始
然后在写入地址
然后将command项的右边的数值改为"D:\android-config\android-studio\bin\studio64.exe" “%V”,软件安装的具体路径要按照各自的路径来
就可以右键文件夹了
实现一个需求时,无论是别人给的还是自己想的,切记第一点:一开始一定不要想的很复杂,先想最简单的,并且实现它,拿QQ来说,刚开始出来的时候也没多美观啊,只实现了最基本的两个客户端之前互相聊天(开始可能也没考虑什么高并发啊,这些乱七八糟的**** ),后面界面的变化都是后来的事情了,反正你就记得,先有,你才有改的余地,不管你怎么实现的,只要你能实现预期的效果就行,“不管白猫黑猫,只要能抓到老鼠的就是好猫”
1、频繁使用、并发率高的表尽量使用DB.Update进行更新对应的字段,使用RF.Save更新会存在字段被覆盖更新的情况
2、批处理与延迟提交,使用批量插入/更新数据,减少数据库往返次数。
3、能使用异步处理,尽量使用异步、消息队列处理,可降低主线程阻塞情况。




















































