自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 SpringBoot项目部署到阿里云(转载)

SpringBoot项目部署到阿里云linux服务器全流程前言:很久没有更新博客了。因为最近公司需要部署一个SpringBoot项目到云服务器上,来来回回折腾了好久,走了很多弯路,这过程中CSDN的博客帮了我很多,所以我自己也写一篇博客上来吧,希望能帮到各位。首先用一张图来说明一下整个的部署流程然后开始进入正文1.申请阿里云服务器1.1 前往阿里云官网:https://www.aliyun.com/1.2 注册一个账号,登陆账号1.3 按如下步骤申请一个云服务器:1.4按照自己的

2020-09-06 10:15:13 797 4

原创 php中MYSQLi扩展的开启(phpmyadmin的mysqli没配置好)

      网上有很多开启mysqli等php扩展的解决方案,都是复制啊,啥的,让我们这些后来的人也不好找。我花了很长时间才弄好,下面我把具体配置php扩展的方案简单明了的告诉大家   第一步 打开你放置php的文件夹会看到一个文件夹叫做ext,这个文件夹中保存了php的各种扩展就包括mysqli扩展(你查看ext文件夹中是否有php_mysqli.dll文件,如果没有请去php官网下载php...

2018-10-27 21:28:46 5982 5

原创 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 17:44:56 1480

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

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

2023-05-10 15:27:13 607 1

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

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

2023-05-06 18:00:56 1379

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

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

2023-04-07 23:46:53 678 1

原创 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 23:36:13 228

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

结构体的声明包括两个部分:结构体的名称和结构体的成员变量。声明结构体不会分配内存空间,仅仅是为结构体类型定义了一个名字,可以用于后续的定义和声明。结构体的定义用于分配内存空间,并为结构体的成员变量赋值。定义结构体可以使用以下两种方式结构体可以通过以下几种方式进行初始化:使用成员初始化器默认初始化列表初始化通过动态内存分配方式定义结构体指针直接定义结构体变量

2023-04-07 23:24:18 1260

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

直接声明结构体类型声明结构体类型的同时定义结构体变量不指定结构体名而直接定义结构体变量使用结构体标记和类型别名直接声明结构体别名有typedef 和无typedef 关键字的区别在于,第一种方式将结构体标记和类型别名定义在一起,可以更方便地使用别名来代替结构体类型;而第二种方式直接定义结构体类型,不需要定义结构体标记,但需要使用 struct 关键字来引用结构体类型如果结构体类型没有设置类型别名,则必须在定义变量时使用结构体标记来指定变量的类型,而不能使用类型别名。。

2023-04-07 15:41:37 1213

原创 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 00:06:29 408

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

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

2023-04-06 23:51:29 841

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

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

2023-04-05 01:22:51 3165

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

在 QuickJS 中,JS_SetClassProto 方法用于设置一个类的原型对象。这个方法的作用是将一个 JavaScript 对象指定为该类的原型对象,从而定义该类的属性和方法。具体来说,JS_SetClassProto 方法的第一个参数是指向 QuickJS 引擎执行上下文的指针,第二个参数是要设置原型对象的类,第三个参数是指向原型对象的 JSValue 指针。

2023-03-27 14:49:47 461

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

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

2023-03-25 17:10:47 443

原创 Linux在线升级GCC版本

在编译Quickjs引擎时报错,发现问题是。Linux在线升级GCC版本 gcc版本过低

2023-01-31 11:10:10 564

原创 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 16:24:19 555

原创 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 11:18:25 98271 50

原创 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 00:01:48 3548

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

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

2021-09-06 23:55:44 959 1

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

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

2021-01-19 21:50:07 2949

原创 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 11:39:07 325 1

转载 虚拟机centos磁盘扩展

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

2020-12-20 13:18:17 236

原创 Mycat的几种配置

mycat的安装和配置1,mycat由Java编写,因此必须要有Java环境,具体配置省略2,上传mycat到/usr/local/software文件夹并解压tar –zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz3,启动/关闭mycat./mycat start ./mycat stop4,使用navicat连接mycat,会发现连接失败,因为mycat只是一个逻辑数据库,此时我们还没有给Mycat连接上真正的数据库,

2020-12-11 21:22:16 1149

原创 防火墙开启指定端口,查询指定端口号是否被占用

1,查看指定端口号被哪个进程占用了,注意是端口号而不是pid。例如MySQL默认占用端口号是3306lsof -i:3306#或者netstat -tunlp | grep 3306在配置远程连接阿里云上的MySQL时就遇到了个很坑的问题,之前我要么是关闭防火墙,要么是通过80端口部署的网站,操作网站数据,间接操作了MySQL。今天我既忘了关闭防火墙,又想直连MySQL,弄了一会一直连不上,才想起来端口没开放。2,查询指定端口防火墙是否对外开放了,例如查看MySQL默认端口3306是否对外开

2020-12-10 16:26:58 621

原创 Linux下查看某一进程所占用内存, cpu, pid端口号,并杀死/停止该进程的方法

Linux下查看某一进程所占用内存的方法ps -ef | grep 进程名ps -aux | grep 进程名top -p 进程号top

2020-12-10 11:43:59 537

原创 Seata 分布式事务的配置,和使用场景

Seate 处理分布式事务。微服务模块,连接多个数据库,多个数据源,而数据库之间的数据一致性需要被保证。使用步骤1,搭建订单模块:order2,库存存储模块:storage3,搭建用户模块:account案例:买手机,模拟全局事务,超时回滚如果不加全局事务,如果调用失败,由于fengn的重试机制,还可能余额被重复扣减//只需要在业务类的方法上加上该注解,name值自定义唯一即可。 @GlobalTransactional(name = "dkf-create-order", rollba

2020-11-29 17:58:44 1463

原创 SpringCloud Alibaba Sentinel整合 ribbon + open-feign + fallback 进行服务熔断。

注意,之前在降级中的配置:blockHandler = "deal_testHotKey"只是对违背了限流规则的请求设置的兜底方法。如果方法内部调用异常,还是会展现给前端页面,很不友好@SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey")因此我们可以在@SentinelResource配置fallback属性进行...

2020-11-29 16:34:00 710

原创 SpringCloud Alibaba Sentinel三种服务降级策略,以及热点key降级

熔断降级1, 降级-RT(平均响应时间)降级要求:每秒钟请求数大于5个,且每个请求要在0.2秒内处理完。后端代码:进行睡眠1秒钟效果:先然0.2秒内处理不了一个请求,且进行压测,每秒发送10个请求。最后导致服务降级失败2,降级-异常比例表示在一定时间内,请求的异常次数不能占总请求次数的比例,且每个时间窗口内的请求数要大于5次,最后在设定的时间窗口结束后,关闭降级后端代码:测试效果:我们手动产生异常,很明显异常率100%大于20%,且进行压测,每秒发送10个请求。最后导致服务降级失败

2020-11-29 11:38:31 1654

原创 SpringCloud Alibaba Sentinel服务限流-三种流控模式,和流控效果

相比于豪猪哥的优点之一:能够在后台服务不重启的情况下动态配置流量访问规则。Sentinel8080监控平台和我们的业务逻辑是分开的。一,服务限流-三种流控模式限流规则1,流控模式–直接:**限流表现:当超过阀值,就会被降级。**就是不论你点击多少次,**每秒只能由一个请求是给你通过的。**多的请求就是给你返回默认报错,默认方式为快速失败,就是返回给页面Sentinel自带的请求失败信息。原因:QPS是每秒钟的请求数量,而我们阈值为1,表明每秒请求数量最多为1,且流控模式为直接,流控效果为快速失

2020-11-29 10:47:00 1202

原创 Spring中的InitializingBean接口的使用(为什么要使用,达到了什么效果)

1,为了实现解耦,我把阿里云对象存储OOS的云账号写在了配置文件中,我通过@Value注解来获取配置文件中的配置。2,因此我想使用@Value注解那么我的这个ConstantPropertiesUtil工具类也必须交给IOC容器进行管理,因此我要在类上加注@Component注解。3,那么问题来了,如果加注了@Value注解的属性的话,是不能设置为static静态的,因为静态属性加载的太早。因此我先用非静态属性读取到配置文件的值。4,ConstantPropertiesUtil工具类中属性声明为静态,

2020-11-23 19:04:16 1061 1

原创 MybatisPlus中的乐观锁的实现方式和使用场景

主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新,就是防止多个用户同时修改同一条数据。乐观锁实现方式:取出记录时,获取当前version更新时,带上这个version执行更新时, set version = newVersion where version = oldVersion如果version不对,就更新失败(1)数据库中添加version字段ALTER TABLE `user` ADD COLUMN `version` INT(2

2020-11-17 19:17:44 657

原创 MybatisPlus中的逻辑删除配置

物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录(1)数据库中添加 deleted字段ALTER TABLE `user` ADD COLUMN `deleted` boolean(2)实体类添加deleted 字段并加上 @TableLogic 注解 和 @TableField(fill = FieldFill.INSERT) 注解@TableField(.

2020-11-17 18:41:13 4399

原创 MybatisPlus的CRUD入门操作

默认环境springboot,2.2.1.RELEASE,默认你已经完成了主启动类,并扫描了mapper包1,首先配置日志,我们好查看sql执行#mybatis日志mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl2,编写实体类@Datapublic class User { private Long id; private String name; privat

2020-11-16 21:27:31 258 2

原创 Java代码操作ElasticSearch(基础,此篇写的比较潦草,主要是我自己做个备份,嘎嘎)

首先,引入坐标这事我直接放在了本文最下面1, 在 resource 文件夹下面创建 application.yml 文件elasticsearch: host: 127.0.0.1 port: 92002,创建启动类,此处略3,创建配置类,ElasticSearchConfig,读取配置文件,创建RestHighLevelClient操作ES对象,并放入IOC容器。@Configuration@ConfigurationProperties(prefix = "elasticsear

2020-11-15 16:59:07 236

原创 ElasticSearch基础入门CRUD操作

PUT /blog/_doc/1{“id”:5,“title”:“哈哈5”}#创建索引库PUT person#查询索引库GET person#删除索引库DELETE person#查询映射/表结构GET person/_mapping#添加映射/表结构,name为字符串(keyword,不会分词/text,会分词,不支持聚合,低版本也有string),age为整型PUT person/_mapping{ "properties":{ "name":{

2020-11-13 21:09:05 235 1

原创 Eureka注册中心工作流程总结

Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址,防止注册中心宕机,提升容错,使用注册中心集群。服务提供者:启动后向Eureka注册自己的信息(地址,提供什么服务/ip地址和端口)服务消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态1、Eureka Server是服务端,负责管理各各微服务结点的信息和状态。2、在微服务上部署Eureka Client程序(即

2020-11-12 16:16:58 599

原创 微服务是什么?它是怎么演变而来的,即微服务 Spring Boot Spring Cloud 三者之间的关系(纯概念,自用,嘎嘎)

微服务是什么?微服务架构是一种架构模式或者说一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的进程中,服务之间互相协调、互相配合,为用户提供最终的价值。微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去掉耦合,每一个微服务提供单个业务功能,一个服务只做一件事。从技术角度讲就是一种小而独立的处理过程,类似与进程的概念,能够自行单独启动或销毁,可以拥有自己独立的数据库。相当于把原来的一个大进程拆分成了多个小进程。微服务优点:1.每个服务足够内聚,足够

2020-11-12 15:57:39 294 1

原创 熔断器 Spring Cloud Hystrix的配置和使用

熔断器的核心:线程隔离和服务降级。1.线程隔离:是指Hystrix为每个依赖服务调用一个小的线程池,如果线程池用尽,调用立即被拒绝,默认不采用排队。2.服务降级(兜底方法):优先保证核心服务,而非核心服务不可用或弱可用。触发Hystrix服务降级的情况:线程池已满、请求超时。线程隔离和服务降级之后,用户请求故障时,线程不会被阻塞,更不会无休止等待或者看到系统奔溃,至少可以看到执行结果(熔断机制)。局部熔断/服务降级案例注意,前提是你已经把消费者和提供者都注册到了注册中心,没有的话:(1)引入.

2020-11-09 21:09:48 400

原创 模块间通信使用RestTemplate时报错java.lang.IllegalStateException: No instances available for 127.0.0.1

我在RestTemplate的配置类里使用了 @LoadBalanced再调用restTemplate时必须使用应用名代替ip+port必须使用应用名作为代替ip:端口,http://127.0.0.1:8080/msg改为:http://应用名/msg不然会报错使用RestTemplate时报错java.lang.IllegalStateException: No instances available for 127.0.0.1总结:负载均衡模式下,会有很多同名应用,但是他们的ip+

2020-11-09 20:50:26 623

原创 配置负载均衡 Spring Cloud Ribbon,及实现原理源码探究(一步一截图,超详细)

Ribbon是Netflix发布的负载均衡器,有助于控制HTTP客户端行为。为Ribbon配置服务提供者地址列表后,Ribbon就可基于负载均衡算法,自动帮助服务消费者请求。Ribbon默认提供的负载均衡算法:轮询(默认),随机,重试法,加权。当然,我们可用自己定义负载均衡算法负载均衡配置注意,默认已经创建了Eureka服务,并且在其中添加了提供者user-provider和消费者user-consumer。不会的同学点这里,看我上篇博客。那么让我们开始吧。(1)复制user-provider为u

2020-11-09 20:17:58 128

空空如也

空空如也

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

TA关注的人

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