自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 收藏
  • 关注

原创 Lua实现链表(面向对象应用)

在 Lua 中,面向对象编程(OOP)的概念是通过表(table)和元表(metatable)来实现的。Lua 并没有内建的类系统,但通过灵活的元表机制,可以实现类、继承和多态等 OOP 特性。1.封装:对一个事物的抽象为一些属性和行为动作的集合,封装将属性和行为动作(操作数据的方法)绑定在一起,并隐藏对象的内部实现细节,只暴露给外部部分接口。3. 多态允许一个接口或方法在不同类的实例上有不同的表现形式。2. 继承是一种机制,允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码重用和扩展。

2024-07-01 22:53:41 661

原创 Lua协程介绍

协程(coroutine)是一种程序组件,它允许执行代码在不同的点暂停和恢复,从而实现协作式的多任务处理。与传统的线程不同,协程不是由操作系统调度的,而是由程序自身控制的。因此,协程提供了一种轻量级的并发机制,适用于需要多任务但不需要真正并行的场景。

2024-07-01 22:34:36 625

原创 Lua优化技巧

例如,避免频繁使用 loadstring 或 load 函数来动态创建和执行 Lua 代码。频繁创建闭包会带来性能开销,因为每次创建闭包都需要分配内存并捕获外部变量。通过避免在循环中创建不必要的闭包,可以提高性能。频繁创建表会导致性能下降,因为每次创建表都需要分配内存和初始化表结构。通过重用表或预先分配表可以提高性能。尽量将变量局部化,尤其是频繁使用的变量,是Lua最重要的优化方式。表访问也有一定的开销,可以将常用的表元素存储在局部变量中。在创建大型表时,预先分配表的大小可以提高性能。

2024-06-18 23:56:11 930

原创 Lua迭代器详解(附加红点功能实例)

迭代器是一种能让我们遍历一个集合中的所有元素的代码结构。比如常用ipairs()和pairs()。

2024-06-18 22:40:18 737 1

原创 Lua与C交互API接口总结

Lua调用C函数时,必须遵守int FunctionName(lua_State *L)类型去定义并实现,其中int返回值表示参数个数。当每个Lua调用C函数时,会自动在内部维护一个私有局部栈,因此我们去参数时直接从1取就可以,且在调用时与结束调用时无需考虑栈的清理问题。

2024-06-12 23:21:31 872 1

原创 UE4 监听游戏窗口最小化事件

UE4 windows相关事件处理过程

2023-05-19 15:08:13 462

原创 lua与C++交互

基本原理就是在C++和lua之间维护一个栈,将各自需要的变量和传给对方的变量放入栈中,进行相互调用。VS2017搭建C++和lua的交互环境打开 项目属性—VC++ 目录,包含目录、库目录依次添加lua安装目录下的include路径、lua安装目录下的lib路径打开 项目属性—连接器—输入,在附加依赖项中添加lua安装目录下lib文件夹中的.lib文件以下测试都是在lua5.1中进行的。

2022-09-14 14:21:18 432

原创 2022完整总结WIN11 Pytorch与GPU环境配置

2022一文搞定深度学习环境配置安装Python安装CUDA安装Anaconda安装Pytorch安装PythonPython官网选择版本进行下载,推荐3.9,最新的版本可能存在适配兼容性的问题安装CUDA仅限于NVIDIA显卡,桌面右击进入NVIDIA控制面板,左下角点击系统信息,查看显卡驱动版本根据显卡驱动版本选择CUDA版本显卡驱动版本支持文档注意安装的时候需要注意不能无脑安装最新版本,需要先看Pytorch支持的最新版本超过最新支持版本可能出现兼容性问题安装CUDA过程

2022-01-19 12:19:40 3991 6

原创 二叉树序列化

通过字符串反序列化#include<iostream>#include<vector>#include<string>#include<algorithm>#include<queue>using namespace std;struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode() :val(0), left(nullptr), right(

2021-09-19 21:59:38 125

原创 二叉树的路径

二叉树的路径二叉树所有路径路径总和1路径总和2路径总和3二叉树最大路径和二叉树最长相同路径二叉树的直径二叉树所有路径题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} *

2021-09-19 16:19:59 169

原创 那些年我们一起处理过的IP地址

字符串处理验证IP地址复原IP地址验证IP地址题目链接class Solution {public: bool Ip4(string IP){ vector<string> ip; split(IP, ip, '.'); if(ip.size()!=4) return false; for(auto s: ip){ if(s.size()==0||s.size()>1&&am

2021-09-19 10:53:15 115

原创 2021 C++ unordered_map和vector在不同编译器下扩容机制

unordered_map和vector在不同编译器下扩容机制vector扩容情况unordered_map扩容情况vector扩容情况VS2019:1.5倍扩容g++:2倍扩容unordered_map扩容情况VS2019:初始为8,8的倍数进行扩容。g++:以13开始,2倍多一点进行扩容...

2021-09-17 21:46:42 2532 1

原创 括号系列问题

栈有效的括号有效括号升级版有效的括号题目链接class Solution {public: bool isValid(string s) { stack<char> st; unordered_map<char, char> hash={{')','('}, {']','['}, {'}','{'}}; for(auto c:s){ if(hash.count(c)==0){

2021-09-17 17:59:12 115

原创 删除链表倒数K节点与合并

#include <iostream>#include <vector>#include <unordered_map>#include <algorithm>#include <string>#include <sstream>using namespace std;struct ListNode { int val; ListNode* next; ListNode() :val(0), ne

2021-09-17 09:52:21 95

原创 最长串系列

最长串问题最长递增子序列最长连续递增子序列最长重复子数组最长公共子序列不相交的线最大子数组和不同子序列两个字符串删除操作编辑距离回文子串个数最长回文子串最长回文子序列最长递增子序列题目链接class Solution {public: int lengthOfLIS(vector<int>& nums) { //if (nums.size() <= 1) return nums.size(); vector<int>

2021-09-16 21:41:40 110

原创 实现计算器

class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回表达式的值 * @param s string字符串 待计算的表达式 * @return int整型 */ int solve(string s) { int res = 0; stack<int> sumStack; char sign =

2021-09-13 09:45:55 110

原创 C++进制转换(dl)

class Solution {public: /** * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ string solve(int M, int N) { // write code here if(M == 0) return "0";//如果M=0就直接返回 bool flag

2021-09-13 09:41:13 215

原创 C++智能指针与虚析构

智能指针与虚析构虚析构智能指针注意智能指针与普通指针的转换问题虚析构众C++er所周知,在多态发生时,如果父类的虚函数不是虚函数的话,子类指针指向父类对象,在其生命周期结束进行delete时,子类对象只会调用父类的析构函数,子类自己的析构函数无法调用导致内存泄露的风险。只有声明父类析构为虚函数才能按序正常进行。下面简单的代码验证:#include<iostream>#include<memory>using namespace std;class A {publ

2021-08-31 21:39:18 1213

原创 用最少的代码重建二叉树

重建二叉树由前序和中序重建由中序和后序重建由前序和中序重建题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution { t

2021-08-26 17:26:09 115

原创 socket优雅关闭连接

优雅关闭连接前言closeshutdown若被动方一直不发第三次挥手代码前言今天突然发现最近搞的那个HTTP服务器的一个bug。以前有个突然服务器崩溃的问题,不过是偶然发生的,所以一直搁置没有解决。今天调试过程中突然发现一个致命问题,就是客户端发的HTTP请求在最后一次执行后直接调用了close,而服务端返回的数据导致这个客户端无法接受到,因为服务端的write函数,所以会触发一个SIGPIPE的中断。closeclose函数或者shutdown函数调用后都会向对端发送FIN。一般是客户端

2021-08-19 17:45:10 6578

原创 C++ __thread的个人理解

C++ __thread的个人理解前言__thread验证代码前言今天依然在调试我那个简陋的server,下午起床逛GitHub时候发现一个大佬在创建线程pthread时,先声明了个__thread,就像这样我?这是啥玩意,找了度娘发现讲解的人也很少,于是对着一两篇现有文章记录下自己的理解__thread被__thread修饰的变量,在多线程中不是共享的而是每个线程单独一个,个人理解就是同一个变量即使多个线程同时调用,在同样的动作下也应该出现同样的一个结果。既然一份变量,那就用static

2021-08-17 16:48:53 909

原创 滑动窗口题型总结

滑动窗口长度最小子数组最小覆盖子串长度最小子数组题目链接用一个动态伸缩的滑动窗口来寻找满足target的子数组。核心是while循环里面的那个while循环,即为窗口收缩过程,并用一个变量来记录最小的子数组长度。class Solution {public: int minSubArrayLen(int target, vector<int>& nums) { int i=0,j=0; int n=nums.size();

2021-08-12 15:35:07 179

原创 HTTPS加密过程(个人总结)

HTTPS加密HTTP存在的问题对称加密非对称加密数字签名数字证书HTTP存在的问题http明文传输,且无身份认证,防篡改机制,因此是既不安全的。综合来说,http存在三大安全问题:明文传输,信息泄露无防篡改机制,可能被黑客将信息篡改无身份认证,收到假冒网站发来的信息对称加密为了解决上述问题,首先考虑到对称加密。浏览器和服务器共享一个秘钥,两方发消息时都通过这个秘钥来对数据进行加密和解密。这样黑客窃取到的都是经过加密的消息。存在问题:浏览器和服务器交换秘钥时是明文传输,这样黑客就

2021-08-08 16:44:56 132

原创 C++实现LRU缓存

LRU代码代码#include<iostream>#include<list>#include<unordered_map>using namespace std;template <typename k, typename v>class LRU {public: typedef pair<k, v> Pair; typedef list<Pair> List; typedef unordered_map&l

2021-08-07 20:03:53 239

原创 Redis CAP理论与BASE理论

CAP理论与BASE理论CAPBASECAPC:集群中任意一台服务器做出数据更改,其他服务器当访问时必须保持一致性(强一致性)A:集群中不能出现用户访问时出现失败或者超时访问P:一个分区的集群中的几台机器崩溃不能影响用户使用当数据出现不一致时,为了满足P,就需要让用户等待一段时间更新,此时不满足A相反,为了满足A,就会出现部分集群中的主机出现不一致BASE对CAP做了一定妥协,也是Redis集群采用的策略...

2021-08-05 20:57:43 323

原创 C++ 实现半同步半异步线程池

半同步半异步线程池TaskQueue.h#pragma once#include<queue>#include<pthread.h>using namespace std;using callback=void (*)(void* arg);//任务结构体template <class T>struct Task{ Task<T>(){ function =nullptr; arg=nullptr;

2021-07-30 16:36:10 105

原创 C语言实现半同步半异步模型

线程池原理![在这里插入图片描述](https://img-blog.csdnimg.cn/a4814caaa4074958a134aafbdcf67485.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x6aDgyNDM1OTUwOA==,size_16,color_FFFFFF,t_70#pic_center)原理#include&lt

2021-07-28 15:30:07 105

原创 缓存服务器 一致性哈希

一致性哈希普通哈希取模法改进哈希算法哈希偏斜虚拟节点普通哈希取模法假设三万张图片,要均匀存在三个缓存服务器上我们首先想到的是用哈希算法来使这些图片均匀分布在三个缓存服务器上用取模算法(模3算法),求得三种结果分别为0, 1, 2此时却是可以满足均匀分布但是,一旦要新加入新的服务器,此时取模算法面临失效的情况即以前已经存在缓存服务器上那些图片用新的模4算法,计算的哈希值与以前不同使得出现大面积图片未命中的情况(缓存雪崩)改进哈希算法为了解决上面面临的问题,我们需要模统一一个数,这样无论多

2021-07-20 09:32:43 157

原创 MySQL buffer poll与日志

MySQL buffer poll原理Buffer Pool结构图Buffer Pool相关参数配置项Buffer PoolredologBuffer Pool结构图Buffer Pool相关参数配置项注意:InnoDB开头的都为InnoDB所特有的配置Buffer PoolMySQL并不是直接从磁盘中取数据进行操作Buffer Pool为MySQL启动后开辟的一块内存,默认128M当从磁盘读取数据时,会将数据所在的那一页(MySQL预读页 16KB)放入Buffer Pool中,

2021-07-15 22:08:18 310 1

原创 MySQL 索引

索引为什么要有索引索引都有哪些实现方式哈希索引二叉树/红黑树索引B树B+树为什么要有索引索引是帮助MySQL高效获取数据的数据结构索引都有哪些实现方式B+树,哈希不能脱离存储引擎来聊索引InnoDB B+树,自适应哈希MEMORY 哈希frm文件为InnoDB下的表结构ibd文件位实际数据和索引frm为MYISAM的表结构MYD为数据,MYI是索引不同的存储引擎数据的结构不同哈希索引缺点:利用hash值存储需要将所有数据文件添加到内存,耗费内存空间查询操作都是等值

2021-07-13 21:55:23 73

原创 有关优先级队列的4道题 priority_queue

堆/优先级队列数组第k大的元素最小k个数前k个高频单词数据流的中位数数组第k大的元素题目链接两种堆的使用方法:使用元素总个数大小的小根堆,弹出k个元素后堆顶元素就是所有元素中第k大的元素。维护一个k大小的大根堆,这样堆中就是所有元素前k个最大元素,堆中元素依次弹出直到最后一个即为第k大的元素。下面的为方法一的代码实现class Solution {public: int findKthLargest(vector<int>& nums, int k) {

2021-07-11 18:59:27 1108 1

原创 wordpress无法上传大于2M文件(2021)

wordpress无法上传大于2M文件前言首先在根目录搜索php.ini修改完成记着重启apache前言今天打算给自己的主页做一个视频背景,突然发现最新的wordpress限制了上传文件大小,只能上传2M。(以前没这样情况啊???)于是首先打开万能度娘搜索解决方法。。。大家的解决blog咋都长一个样?都是修改/etc/php.ini文件。有的人说要在/etc下面新建一个php.ini有的人说文件存在直接修改,可是文件都不存在。。。memory_limit=128Mpost_max_size

2021-07-04 18:08:23 484 5

原创 2021最新版 从零搭建wordpress环境

wordpress前言1. 操作系统为阿里云ubuntu 20.042. 更新基础包3. 安装PHP环境4. 安装apache5. 安装MySQL6. 建立Apache与MySQL的连接7. 重启Apache8. 安装wordpress9. wordpress移动到默认路径10. 修改数据库配置11. 登陆wordpress12 .备注如果帮到你了就赏一个赞吧,也算是给菜鸡的一点鼓励前言本人一开始用的是阿里云市场里提供已经安装好wordpress,基于centos7的服务器。然而那个LAMP环境都

2021-07-03 19:02:16 1144 3

原创 C++ getline的两种用法

C++ getline的两种用法读取键盘含有空格的输入getline字符流来分割字符串cin.getline()读取键盘含有空格的输入当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格、制表符或换行符)。一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。以下面的语句为例:#include <iostream>#include <string> // Header file needed to use string objects

2021-07-01 16:59:39 5287 7

原创 VSCode远程连接云服务器详细过程

VSCode远程连接云服务器详细过程安装SSH插件打开云服务器SSH连接权限参考阿里云配置过程,选择配置安全组规则加入SSH 22端口配置SSH密码,选择那个密码/密钥,点击重置实例密码VSCode添加新的远程连接,点那个加号输入你的云服务器IP配置SSH文件,第一次配置自动出来,没有就点前面加号旁边的那个齿轮配置文件内容直接输入密码即可连接安装SSH插件打开云服务器SSH连接权限参考阿里云配置过程,选择配置安全组规则加入SSH 22端口配置SSH密码,选择那个密码/密钥,点击重置实例密码

2021-06-29 10:54:48 1045

原创 C++如何创建列数不定的“二维”数组

C++ vector突然发现大神定义写法如下:vector<int> e[10];猛一下没反应过来,这是什么意思?后面还有:e[0].push_back(1);e[0].push_back(2);e[0].push_back(3);哦懂了,这是创建了一个vector< int >类型的数组,即数组里面的放了10个vector太强了,这种写法的厉害之处在于,不用像二维数组那样浪费不需要的空间下面附上完整测试代码#include<iostream>

2021-06-28 20:37:49 1911 2

原创 深度优先搜索题型总结

这里写目录标题岛屿数量岛屿面积岛屿最大面积岛屿数量题目链接矩阵类型的遍历,可以采用DFS当发现满足条件的元素时(本题是元素为1时)开始遍历上下左右四个方向(题目要求斜方向不能组成岛屿)当这个位置遍历完成(主函数循环中的那个dfs),就说明这是一整个岛屿,周围没有满足条件的元素了注意的是:为了防止重复dfs,将遍历过的位置设为2(为啥不设为0,这是防止其他题目隐藏逻辑问题)class Solution { void dfs(vector<vector<char&g

2021-06-28 15:32:25 296 1

原创 采坑记录-C++关于++i,i++,i=i+1,i+=1之间的区别于性能分析

++,+=,+之间性能对比内置类型自定义类型i++和++ii=i+1和i+=1起因:在leetcode上一道有关字符串的题,代码流程与答案一样,但是无法通过最后一个案例,显示超时,最后一个未通过的案例为一个长50000的string,经过调试,发现循环内有两步为:str=str+String[i],将这一步改为+=就可以通过了。。。内置类型对于C++内置类型而言,如int,double等,++i,i++,i=i+1,i+=1这四种操作的效率是没有区别的在VS2019中,可以通过调试里面的窗口,

2021-06-23 09:26:22 1252 1

原创 7道题解决单调栈问题

单调栈下一个更大元素1下一个最大元素2每日温度移掉K位数字柱状图最大矩形接雨水下一个更大元素1题目链接维护一个单调递减栈,即当遍历元素大于栈顶元素时就要保存结果并弹出栈顶元素为了以子集数组1的顺序得出结果,我们需要对数组2操作时利用哈希表等来建立映射关系class Solution {public: vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& num

2021-06-22 16:28:11 183 2

原创 7道题解决二分查找问题

二分查找顺序数组搜索一个值搜索插入位置排序数组查找元素第一个和最后一个位置找第一个大于目标元素的索引找最后一个比目标元素小的索引搜索旋转的排序数组搜索旋转的有重复排序数组找旋转数组最小值顺序数组搜索一个值二分查找最基本的思想,查找的区间必须有序本文全部按照闭区间来查找,此时while里面条件应该写为l<=r若按开区间查找(r=nums.size()),此时while里面条件应该写为l<r返回值-1表示未找到目标class Solution {public: int sea

2021-06-17 17:29:52 320 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除