zpf1813763637
码龄7年
关注
提问 私信
  • 博客:269,849
    269,849
    总访问量
  • 87
    原创
  • 520,238
    排名
  • 38
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2018-05-15
博客简介:

zpf1813763637的博客

查看详细资料
个人成就
  • 获得526次点赞
  • 内容获得98次评论
  • 获得1,056次收藏
  • 代码片获得29,647次分享
创作历程
  • 14篇
    2023年
  • 2篇
    2022年
  • 2篇
    2021年
  • 68篇
    2020年
  • 3篇
    2018年
成就勋章
TA的专栏
  • C++
    11篇
  • Lua&C/C++
    1篇
  • 云服务器
    7篇
  • JavaSE
    27篇
  • git
    6篇
  • java多线程
    1篇
  • springcloud
    10篇
  • MybatisPlus
    2篇
  • spring
    3篇
  • elasticsearch
    2篇
  • springboot
  • redis
    3篇
  • RabbitMQ
    6篇
  • nginx
    3篇
  • maven
    1篇
  • database
    5篇
兴趣领域 设置
  • 大数据
    mysqlredis
  • 后端
    spring架构
  • 服务器
    linux
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

186人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

C++ 通过std::shared_lock(共享锁)和std::shared_mutex(共享互斥量)实现读写锁

std::shared_mutex`(共享互斥锁)和 `std::map` 结合使用的方法。`std::shared_mutex` 支持读写分离的锁策略,允许多个线程并发地读取数据,但在写入数据时会互斥锁定。`writeMap` 函数使用 `std::unique_lock` 来获得独占的写入访问权限,而 `readMap` 函数使用 `std::shared_lock` 来获得共享的读取访问权限。这样,在写入数据时会阻止其他线程的任何访问,而在读取数据时可以允许多个线程同时访问。
原创
发布博客 2023.08.09 ·
2331 阅读 ·
0 点赞 ·
0 评论 ·
5 收藏

使C++动态库导出的符号表和C符号表导出规则一致

C++代码编译成动态库时,由于C++支持函数重载、虚函数表等特性,导致符号名可能被编译器进行了一些修饰,导致C和C++导出的符号不一致。这样,编译器就会按照C语言的命名规则导出这些符号。在使用这些符号的时候,需要通过extern "C"语法来声明这些符号,可以通过在C++代码中使用extern "C"语法来取消符号修饰,使其符合C语言的命名规则,从而和C语言导出的符号表保持一致。具体做法是将需要导出的函数或变量的定义用extern "C" {}包围起来
原创
发布博客 2023.05.10 ·
774 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

C++结构体分别在:栈空间、堆空间、静态存储区中初始化

C++结构体分别在:栈空间、堆空间、静态存储区中初始化栈空间中存储的结构体变量,其生命周期与定义变量的作用域有关,一旦离开定义变量的作用域,就会被销毁;对于静态存储区中存储的结构体变量,其生命周期与程序的运行周期相同,即从程序开始执行到程序结束;对于堆空间中存储的结构体变量,其生命周期由程序员手动管理,需要在不需要使用时手动释放,避免内存泄漏。
原创
发布博客 2023.05.06 ·
1562 阅读 ·
1 点赞 ·
0 评论 ·
6 收藏

C++有些方法形参没有参数名只有&

函数参数可以通过值传递或引用传递。对于引用传递的参数,在函数定义时可以省略参数名称,只保留引用符号&。这是因为引用是一个别名,它指向传递给函数的实参,因此函数内部可以直接使用它,而不需要复制参数的值。这也提高了程序的效率,因为引用传递避免了参数值的复制。在这个例子中,swap()函数定义中的形参a和b都是引用类型,没有指定参数名称。当函数被调用时,x和y的值被传递给函数,函数内部通过引用a和b来访问它们,并将它们的值交换。注意,调用swap()函数时不需要使用取地址符&,因为参数已经是引用类型了。需要注
原创
发布博客 2023.04.07 ·
799 阅读 ·
2 点赞 ·
1 评论 ·
3 收藏

std::make_shared<int>(num) 和 std::shared_ptr<int> p1(new int(num));二者创建智能指针有什么区别

std::make_shared(num)和std::shared_ptr p1(new int(num))这两种方式都可以用于创建一个std::shared_ptr指向一个int类型的对象,并且都是在堆上分配内存是一次性分配了一个包含对象和引用计数的连续内存空间。则需要分别在堆上分配一个对象和一个引用计数,因此可能会存在一些额外的开销。因此该计数和对象的内存是一起被管理的,这样可能会在内存方面有一定的优化。而std::shared_ptr p1(new int(num))则需
原创
发布博客 2023.04.07 ·
292 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++什么是结构体的声明、定义、初始化?

结构体的声明包括两个部分:结构体的名称和结构体的成员变量。声明结构体不会分配内存空间,仅仅是为结构体类型定义了一个名字,可以用于后续的定义和声明。结构体的定义用于分配内存空间,并为结构体的成员变量赋值。定义结构体可以使用以下两种方式结构体可以通过以下几种方式进行初始化:使用成员初始化器默认初始化列表初始化通过动态内存分配方式定义结构体指针直接定义结构体变量
原创
发布博客 2023.04.07 ·
1367 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

结构体声明、定义和初始化的几种方式

直接声明结构体类型声明结构体类型的同时定义结构体变量不指定结构体名而直接定义结构体变量使用结构体标记和类型别名直接声明结构体别名有typedef 和无typedef 关键字的区别在于,第一种方式将结构体标记和类型别名定义在一起,可以更方便地使用别名来代替结构体类型;而第二种方式直接定义结构体类型,不需要定义结构体标记,但需要使用 struct 关键字来引用结构体类型如果结构体类型没有设置类型别名,则必须在定义变量时使用结构体标记来指定变量的类型,而不能使用类型别名。。
原创
发布博客 2023.04.07 ·
1374 阅读 ·
2 点赞 ·
0 评论 ·
5 收藏

C++使用make_系列函数创建智能指针

C++使用make_系列函数创建智能指针make_系列函数可以用于创建智能指针,并且不需要手动管理内存。make_unique用于创建unique_ptr,make_shared用于创建shared_ptr。它们都使用了可变参数模板(variadic templates)和完美转发(perfect forwarding),可以方便地传递构造函数参数。需要注意的是,make_系列函数只能用于创建智能指针,而不能用于创建裸指针。make_unique和make_shared分别创建了一个unique_ptr和一
原创
发布博客 2023.04.07 ·
479 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

C++中智能指针(unique_ptr、shared_ptr、weak_ptr)详解

C++中的智能指针是一种 RAII(资源获取即初始化)机制的实现,它可以在对象不再需要时自动释放相关资源。智能指针通过封装指针对象并提供一些额外的功能,如引用计数、自动内存管理、避免内存泄漏等C++中,有三种主要类型的智能指针:unique_ptr、shared_ptr和weak_ptr。智能指针是C++中管理动态内存的重要工具,它可以大大减少内存泄漏和悬挂指针等问题的发生。在使用智能指针时,
原创
发布博客 2023.04.06 ·
906 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

C++ std::ref() 函数使用详解

函数时,必须保证被转换的对象的生命周期要长于引用包装器的使用期限,否则会导致未定义的行为。另外,引用包装器的使用也可能会导致代码可读性降低,因此需要谨慎使用。的实例,它的主要作用是将一个对象转换成一个引用类型,并提供了访问该对象的引用的方法。是C++标准库中的一个函数,定义在。例如,下面的代码演示了如何使用。,以便在函数模板中使用。引用包装器是一个类模板。函数,以便在函数对象。最后,输出结果表明,
原创
发布博客 2023.04.05 ·
4641 阅读 ·
6 点赞 ·
0 评论 ·
23 收藏

QuickJS中JS_SetClassProto方法把JavaScript对象指定为某个类的原型对象

在 QuickJS 中,JS_SetClassProto 方法用于设置一个类的原型对象。这个方法的作用是将一个 JavaScript 对象指定为该类的原型对象,从而定义该类的属性和方法。具体来说,JS_SetClassProto 方法的第一个参数是指向 QuickJS 引擎执行上下文的指针,第二个参数是要设置原型对象的类,第三个参数是指向原型对象的 JSValue 指针。
原创
发布博客 2023.03.27 ·
549 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

C++ (&valName)[index] 方式访问数组

C++ (&valName)[index] 方式访问数组(&valName)[4] 是 C++ 中的数组访问方式之一,它表示访问一个由 bytes 数组的第四个元素开始的新数组。具体来说,这个表达式中的 &bytes 将 bytes 数组的地址作为一个指针返回,然后在这个指针上进行偏移量的计算。因为 bytes 数组的类型是 char,所以这个偏移量是以字节为单位计算的。(&bytes)[4] 就表示一个新的 char 类型的数组,它包含了从 bytes 数组的第四个元素(即 0x78)开始的所有元素
原创
发布博客 2023.03.25 ·
489 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

Linux在线升级GCC版本

在编译Quickjs引擎时报错,发现问题是。Linux在线升级GCC版本 gcc版本过低
原创
发布博客 2023.01.31 ·
647 阅读 ·
3 点赞 ·
0 评论 ·
3 收藏

ArrayList的add(int index,E element)和set(int index, E element)插入元素问题

1,注意:上面两个方法都不能在集合下标没有赋值的情况下操作该下标,否则会报错2,add(index,value) 插入,长度+1:会在对应下标下插入数据。之前的index索引及之前的数据都会后移。集合长度+1: list.size() + 1。3,set(index,value) 覆盖,长度不变:会在对应下标下覆盖数据。之前的index索引位置的值被新值覆盖,后面的数据不变。上面两个方法都不能在集合下标没有赋值的情况下操作该下标,否则会报错。
原创
发布博客 2023.01.30 ·
653 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

Git报错: Failed to connect to github.com port 443 解决方案

github git clone git config --global --get http.proxy git 报错 Failed to connect to github.com port 443 的解决办法
原创
发布博客 2022.12.16 ·
120583 阅读 ·
393 点赞 ·
68 评论 ·
666 收藏

Lua,LuaJIT,Luarocks的安装与配置-史上最详细【Linux】

Linux下Lua安装与配置,LuaJIT安装与配置,Luarocks的安装与配置-史上最详细。LuaJIT是lua的一个Just-In-Time也就是运行时编译器,就是存储热点代码直接转化为二进制,JIT是一个概念,Java 底层也有JIT编译器。Luarocks是一个 Lua 包管理工具,基于 Lua 语言开发,提供一个命令行的方式来管理 Lua 包依赖、安装第三方 Lua 包等,可以类比Java的maven/gradle
原创
发布博客 2022.06.01 ·
4100 阅读 ·
4 点赞 ·
0 评论 ·
11 收藏

Mysql 8.0.26安装,听我的6分钟让你安装成功!

注意:如果你非得要下载zip压缩包配置Mysql,那么这就不耽误你时间了,给你个优质教程入口首先去MySQL官网第二步: 进入安装页面,然后点击“go to download Page"下载installer进行安装,小白不要下载zip压缩包,小白不要下载zip压缩包,要不然你就会发现还要手动命令行安装Mysql服务,稍微不注意,你又安装两遍,在安装第二遍的时候就会提示安装失败,这时候你又慌了,是因为mysql第一个服务已经占用...
原创
发布博客 2021.09.06 ·
1008 阅读 ·
3 点赞 ·
1 评论 ·
7 收藏

JDK1.8,Java,HashMap的put()方法全过程(超详细)

先一个节点进来做hash值并取余运算,hash到对应的桶,开有没有hash冲突,如果没有直接插入,如果有就需要遍历链表,看有没有key相同的情况,如果有就进行值的替换,如果没有就插到链表尾部(哪些判断是否变为红黑树逻辑在下面进行解析,这里做个大概描述)1.7使用头插法,因为他认为先最近插入的最容易被访问,但是在并发,扩容数组的时候可能会出现死循环。因为并发扩容reHash一张新的表。扩容的时候会出现两个数组。使用头插法,且插入时不是原子性的,因此可能会出现死循环。因此1.8又变为了尾插法初始容量为
原创
发布博客 2021.01.19 ·
3370 阅读 ·
5 点赞 ·
0 评论 ·
8 收藏

Centos从0开始教你安装docker并使用docker-compose编排mysql,elasticsearch,kibana, nacos,senti,redis, rabbitmq这一篇就够了

要不是阿里云太贵续费不起我也不会再从0开始配置555,之前白嫖了半年阿里云服务器,后来到期续费没想到那么贵,实在不想用了。1核1G一月都要三十四块,嘎嘎嘎0,买完云服务器需要重置下密码,默认登录名是root,密码好像是随机的。1,为了外部能访问把你的安全组规则配置入站出战端口范围开放完都是1-65535我的是刚刚刚刚刚买的船新百度云服务器。.注意:阿里云默认没有全部开启,之开启了几个必须端口,好像是之前勒索病毒的原因。你直接开放完就完事了。反正还有防火墙呢。3,关闭防火墙,或者给防火墙开启指定端口
原创
发布博客 2020.12.27 ·
383 阅读 ·
0 点赞 ·
1 评论 ·
2 收藏

虚拟机centos磁盘扩展

一)首先通过VMware给虚拟机增大可使用空间(增加可占用电脑硬盘量)1、Vm虚拟机下Linux扩展原有磁盘空间,详细步骤如下:需注意以下几点: linux只能扩展磁盘容量而不能减小, 所填写的容量为总容量,即包含已分区的磁盘, 扩展容量时不能有快照哟,大家可以先把快照删除掉。二)上一步VMware扩大了理论上可使用的空间,但虚拟机还没有成功扩大自身可使用磁盘空间1、正常进入系统,然后“init 1”,进入到单用户模式2、fdisk -l /dev/sda,可以看到当前的磁盘分区情况如下:Dis
转载
发布博客 2020.12.20 ·
284 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多