自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Clarence的博客

打造个人的思想空间,共同学习进步

  • 博客(76)
  • 资源 (2)
  • 收藏
  • 关注

原创 C++ 强制类型转换总结

c++ 四种强制类型转换总结

2024-06-13 18:10:54 437

原创 c++ 智能指针使用注意事项及解决方案

对智能指针的总结

2024-06-13 17:39:47 608

原创 在加载第三方库过程中,无法加载到库的问题(使用readelf, patchelf命令)

–replace-needed LIBRARY NEW_LIBRARY] // 替换需要的动态库。[–remove-needed LIBRARY] // 删除需要的动态库。[–add-needed LIBRARY] // 添加需要的动态库。[–set-rpath RPATH] // 设置 rpath。[–no-default-lib] // 不链接默认的动态库。[–force-rpath] // 强制使用 rpath。[–print-rpath] // 打印 rpath。

2024-01-11 16:18:54 1482

原创 GDB 调试技巧

当gdb调试时使用bt查看堆栈信息,都显示?时,通常时由于库搜索路径错误导致的,可在启动调试后使用set sysroot、set solib-absolute-prefix、set solib-search-path来指定库搜索路径。

2024-01-11 15:05:29 869

原创 Linux同一客户端多个git账号的配置

多个git账号配置1. 用ssh-keygen命令生成一组新的id_rsa_new和id_rsa_new.pub。2. 配置~/.ssh/config文件,以我自己的机器为例3. 执行ssh-agent让ssh识别新的私钥。4. 在git网页上添加id_rsa_gitee.pub的内容5. 使用命令进行测试连接在进行下列步骤前需要先查看git全局配置git config --list并清除共有的name, email, password的配置git config --global --unset

2022-05-09 13:30:57 3375

原创 ssh配置vscode实现一台电脑连接多台服务器进行开发

这里写目录标题背景操作步骤1. 安装 SSH2. 安装插件3. 配置SSH密钥1、使用如下命令,在本机生成 SSH 公钥文件。如果已经生成,则可直接使用,跳到步骤二。2、一般生成的密钥文件,路径为:C:\Users\user\.ssh ,找到公钥文件 id_rsa.pub ,复制到远程服务器 根目录 的 .ssh 文件夹中。3、生成 authorized_keys 文件。这样后续在使用 Remote 插件时,不需要密码,就可以直接登录到服务器。4、在 cmd 窗口,再次尝试如下,可以看到无需密码,直接连上服

2021-12-23 14:30:31 13100 1

原创 epoll LT/ET 剖析

目录EPOLL事件的两种模型ET还是LT?EPOLL事件的两种模型Level Triggered (LT) 水平触发socket接收缓冲区不为空 有数据可读 读事件一直触发socket发送缓冲区不满 可以继续写入数据 写事件一直触发符合思维习惯,epoll_wait返回的事件就是socket的状态Edge Triggered (ET) 边沿触发socket的接收缓冲区状态变化时触发读事件,即空的接收缓冲区刚接收到数据时触发读事件socket的发送缓冲区状态变化时触发写事件,即满

2021-08-27 19:32:46 2048

原创 TCP连接中TCP_NODELAY,Socket中SO_REUSEADDR、SO_REUSEPORT

目录TCP连接中TCP_NODELAYSocket中SO_REUSEADDRSocket中SO_REUSEPORTTCP连接中TCP_NODELAYTCP/IP协议中针对TCP默认开启了Nagle算法。Nagle算法通过减少需要传输的数据包,来优化网络。在内核实现中,数据包的发送和接受会先做缓存,分别对应于写缓存和读缓存。在c/c++中启动的方式int nodelay = 1;int ret = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char*)&

2021-08-26 14:38:48 618

原创 Reactor 设计模式

网络IO,会涉及到两个系统对象,一个是用户控件调用IO的进程或者线程,另外一个是内核控件的内核系统,比如发生IO操作read时,它会经历两个阶段:等待数据准备就绪将数据从内核拷贝到进程或者线程因为在以上两个阶段上各有不同的情况,所以出现了多种网络IO模型。一、概念参考:https://www.jianshu.com/p/458e4b276607什么是阻塞和非阻塞?阻塞和非阻塞是针对于IO操作的就绪状态;阻塞和非阻塞是针对于进程在访问数据时,根据IO操作的就绪状态而采取的不同方式,简单

2021-08-17 19:22:07 478

原创 环形缓存区ringbuffer

目录概念原理代码及测试案列概念环形缓冲器(ringr buffer),也称作圆形队列(circular queue),循环缓冲区(cyclic buffer),圆形缓冲区(circula buffer),是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流。原理设计一种结构,包含一个标识读位置、写位置、已存储数据量、最大存储空间、内存空间写入数据时,判断内存中是否有足够的空间用来写入,没有则写入数据失败,有则写入数据并且移动写标识,并处理已存储数据量变量读取数据时,判断内存中

2021-08-13 18:22:04 422

原创 多线程编程

目录概念线程相关函数说明头文件创建线程终止线程执行pthread_exit()pthread_exit()和return结束线程的区别pthread_cancel()pthread_setcancelstate()函数pthread_setcanceltype()函数获取线程函数的返回值线程同步解决方案互斥锁1) 互斥锁的初始化2) 互斥锁的“加锁”和“解锁”3) 互斥锁的销毁信号量1) 初始化信号量2) 操作信号量的函数条件变量1) 初始化条件变量2) 阻塞当前线程,等待条件成立3) 解除线程的“阻塞”状

2021-08-06 14:41:15 1203

原创 线程池原理浅析、java线程池

目录线程池概念线程池原理线程池的工作流程线程池的C实现java线程池线程池的生命周期线程池参数解析线程池的工作流线程池的拒绝策略线程池概念线程池(thread pool)是一种线程使用模式。线程过多或者频繁创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着管理器分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价,以及保证了线程的可复用性。线程池不仅能够保证内核的充分利用,还能防止过分调度。线程池原理预先创建预定数量的线程,将多个任务加入到任务

2021-08-06 09:22:27 293

原创 nginx线程池浅析

目录nginx线程池nginx线程池简化流程数据结构分析任务队列线程池代码分析入口函数ngx_thread_pool_init_worker线程池初始化ngx_thread_pool_init线程运行函数主线程post任务通知主线程函数ngx_thread_pool_handler线程池结束函数销毁线程池thread_pool线程池的使用示例nginx线程池源代码在ngx_thread_pool.c中nginx线程池简化流程A线程准备任务—>post任务—>线程池唤醒一个线程处理–&

2021-08-05 15:04:25 2003 1

原创 排序算法总结

目录算法分类算法的相关概念算法的复杂度比较类排序交换排序冒泡排序算法描述(对n个数进行从小到大排序, 其中seq为第几次遍历序列):算法的c实现:适用场景代码优化快速排序算法描述算法的c实现:适用场景插入排序简单插入排序算法描述算法的c实现适用场景希尔排序算法描述算法的c实现适用场景选择排序简单选择排序算法描述算法的c实现适用场景*堆排序*算法描述算法的c实现适用场景归并排序算法描述二路归并排序算法描述算法的c实现适用场景非比较类排序计数排序算法描述算法的c实现适用场景桶排序算法描述算法的c实现适用场景基数

2021-08-05 12:41:29 919

原创 第十篇 进程

进程结构一般由3部分组成:代码段、数据段和堆栈段代码段:用来存放程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段;数据段:用于存放程序的全局变量、常量和静态变量;堆栈段:栈–用于函数调用,它存放着函数的参数、函数内部定义的局部变量还包括了进程控制块(Process Control Block, PCB)一般程序转换为进程分以下几个步骤:(1)内核...

2021-08-05 10:41:04 90

原创 redis专栏

一. 环境介绍redis6.0 + vscodecentos 7 + vscode(wsl插件)二.编译安装 redis$ cd redis-6.0.3$ makemake 之后就编译完成了。有时间还可以 make test$ sudo make install默认安装到/usr/local/bin/目录,对应的命令redis-server 是服务器程序redis-cli 是客户端程序查看版本命令:$ redis-server -v显示:Redis server v=6.0.3 s

2021-08-05 10:13:13 692

原创 C++ 基础知识点

第一章课后练习题一.基础题(必做)请说出C++语言的优点,缺点,和主要用途?优点强大的抽象封装能力:这让C++语言具备了强大的开发工程能力,封装的同时让C++最大程度的保留了高性能;高性能:运行快,快并且占用资源少一直是C++语言的追求;低功耗:特别适合在各种微型的嵌入式设备中运行高效的程序;缺点语法相对复杂,细节比较多,学习曲线比较陡;需要一些好的规范和范式,否则代码很难维护;主要用途大型桌面应用程序(如Google Chrome和Microsoft Offic

2021-08-05 10:11:58 852

原创 C10M问题

C10M性能问题 一、引言 随着互联网的高速发展,内容量的提升以及对内容智能的需求、云产业的快速突起,作为互联网的计算基石服务器的形态以及使用成为了炙手可热的话题,全球各家大型互联网公司都持续的在服务器平台上有非常大的动作,譬如facebook的OCP等,而整个服务器的生态链也得到了促进和发展。随着服务器硬件性能的提升和网络硬件的开放,传统PC机的处理性能甚者可以和网络设备相媲美。另一方面SDN技术的发展,基础架构网络逐渐偏向基于通用计算平台或模块化计算平台的架构...

2021-08-05 10:10:53 560

原创 解决哈希冲突的三种方法(拉链法、开放地址法、再散列法)

目录开放定址法线性探测再散列二次探测再散列伪随机探测再散列再哈希法链地址法建立公共溢出区优缺点开放散列(open hashing)/ 拉链法(针对桶链结构)封闭散列(closed hashing)/ 开放定址法通过构造性能良好的哈希函数,可以减少冲突,但一般不可能完全避免冲突,因此解决冲突是哈希法的另一个关键问题。创建哈希表和查找哈希表都会遇到冲突,两种情况下解决冲突的方法应该一致。下面以创建哈希表为例,说明解决冲突的方法。常用的解决冲突方法有以下四种:开放定址法这种方法也称再散列

2021-08-05 10:09:05 4626

原创 初识ffmpeg

ffmpeg音视频处理流程ffmpeg命令分类查询命令参数内容命令参数内容-version显示版本-bsfs显示可用比特流filter-buildconf显示编译配置-protocols显示可用的协议-formats显示可用格式(muxers+demuxers)-filters显示可用的过滤器-muxers显示可用复用器-pix_fmts显示可用的像素格式-demuxers显示可用解复用器-layo

2021-08-05 10:05:09 284

原创 Linux守护进程(Daemon)介绍与实现

1. 守护进程简介守护进程(deamon)是生存期长的一种进程。它们常常在系统引导装入时启动(如果需要守护进程随系统自启动,需要在/etc/init.d目录下放置响应的启动脚本,或者利用systemctl来控制,还有一些其他方法如supervisor等),仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。  从daemon的启动和管理方式区分,可以将daemon分为两大类:可独立启动的daemon(stand alone)和由一个超级daemon(super daemon)来统一管理

2021-08-05 09:58:53 1853

原创 CMake专栏

基本语法规则变量使⽤${}⽅式取值,但是在IF 控制语句中是直接使⽤变量名指令(参数1 参数 2…)参数使⽤括弧括起,参数之间使⽤空格或分号分开。指令是⼤⼩写⽆关的,参数和变量是⼤⼩写相关的。但,推荐你全部使⽤⼤写指令。指令PROJECTPROJECT 指令的语法是: PROJECT(projectname [CXX] [C] [Java])你可以⽤这个指令定义⼯程名称,并可指定⼯程⽀持的语⾔,⽀持的语⾔列表是可以忽略的,默认情况表 示⽀持所有语⾔。这个指令隐式的定义了两个 cma

2021-08-05 09:53:58 109

原创 go build遇见“module *** found, but does not contain package ***”

在实际项目中编译版本时遇见以下问题:common/middleware/sentinel.go:4:2: module github.com/alibaba/sentinel-golang@latest found (v1.0.2), but does not contain package github.com/alibaba/sentinel-golang/adapter/gin解决方案:首先进入github.com/alibaba/sentinel-golang切换tag,查看最新的包含p

2021-07-30 17:50:44 17427

原创 Nginx专栏

Nginx 特性NGINX 使用可扩展的事件驱动架构,而不是更传统的过程驱动架构。这需要更低的内存占用,并且当并发连接扩大时,使内存使用更可预测。NGINX 开发的目标是实现 10 倍以上的性能,优化服务器资源的使用,同时也能够扩展和支持网站的动态增长。 因此,NGINX 成为最知名的模块化,事件驱动,异步,单线程 Web 服务器和 Web 代理之一。nginx的三大主要功能静态web服务器反向代理负载均衡Nginx配置文件解析#user nobody;user root;wo

2021-07-29 18:56:12 272

原创 gdb调试--基础

目录gdb1. 文档2. 作用3. 调试GDB的cpp源代码4. 调用GDB的方式1. **直接使用 gdb 指令启动 GDB 调试器**:2. **调试尚未执行的程序**:gdb program3. **调试正在执行的程序**4. **调试执行异常崩溃的程序**GDB调试器启动可用参数常用命令断点break命令tbreak命令rbreak命令watch/rwatch/awatch命令查看当前建立的观察点的数量注意watch命令的实现原理catch命令注意condition命令ignore命令禁用和删除断点

2021-07-29 16:26:35 325

原创 GDB 高级调试-多线程、后台调试、多进程、反向调试

目录调试多线程GDB调试多线程程序常用命令查看所有线程调整当前线程为特定线程设置断点设置线程锁GDB non-stop 模式后台执行调试命令暂停后台线程执行多进程调试GDB多进程调试常用命令GDB attach命令调试进程显式指定要调试的进程detach-on-fork选项反向调试GDB反向调试的常用命令handle命令:信号处理查看栈信息frame命令选定要查看的栈帧查看当前栈帧中存储的信息backtrace命令调试多线程GDB调试多线程程序常用命令调试命令功 能info thr

2021-07-29 16:26:21 4728 2

原创 关系型数据库的设计范式

**第一范式(1NF)**用来确保每列的原子性,要求每列(或者每个属性值)都是不可再分的最小数据单元(也称为最小的原子单元)。**第二范式(2NF)**在第一范式的基础上更进一层,要求表中的每列都和主键相关,即要求实体的唯一性。如果一个表满足第一范式,并且除了主键以外的其他列全部都依赖于该主键,那么该表满足第二范式。**第三范式(3NF)**在第二范式的基础上更进一层,第三范式是确保每列都和主键列直接相关,而不是间接相关,即限制列的冗余性。如果一个关系满足第二范式,并且除了主键以外的其他列都依赖于主键列

2021-07-28 17:19:00 74

原创 MySQL 集群方案

目录官方 MySQL 集群方案MySQL Replication相比于单个的 mysql,一主多从下的优势如下:就各个集群方案来说,MySQL Replication的优势MySQL Replication的劣势MySQL FabircMySQL Fabirc优势MySQL Fabirc劣势MySQL ClusterMySQL Cluster优势MySQL Cluster劣势第三方集群方案MMM(Master Replication Manager for MySQL)MMM优势MMM劣势MHA(Maste

2021-07-28 16:14:13 521

原创 MySQL函数

目录字符串函数数字函数日期函数高级函数字符串函数函数描述实例实例说明ASCII(s)返回字符串 s 的第一个字符的 ASCII 码。SELECT ASCII(CustomerName) AS NumCodeOfFirstChar FROM Customers;返回 CustomerName 字段第一个字母的 ASCII 码:CHAR_LENGTH(s)返回字符串 s 的字符数SELECT CHAR_LENGTH(“0VOICE”) AS LengthOfStrin

2021-07-28 13:56:45 168

原创 MySQL优化

目录mysql优化的方法SQL 语句及索引的优化SQL优化索引优化mysql优化的方法SQL 语句及索引的优化数据库表结构的优化系统配置的优化硬件的优化四条从效果上第一条影响最大,后面越来越小SQL 语句及索引的优化SQL优化对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。应尽量避免在 where 子句中对字段进行 n

2021-07-28 09:26:56 95

原创 MySql 常用命令实例

目录创建数据库创建数据库创建表插入数据查询数据修改显示宽度查询数据显示宽度查询数据添加中文乱码数据查询数据修改字符编码添加数据修改数据删除数据修改字段名增加字段名删除字段表复制1. 创建表t12. 创建表t2(学习t1表的结构)3. 复制表(两个表的结构完全一致)4. 复制表(两个表的结构可能不一致)运算符1. 算术运算符(1)加(2)减(3)乘(4)除(5)商(6)取余比较运算符1. 等于2. 不等于3. 安全等于4. 小于,小于等于5. 大于, 大于等于6. BETWEEN7. IN,NOT IN8.

2021-07-27 18:40:05 623

原创 MySQL存储引擎、锁类型、并发事务问题、日志文件、数据文件

目录存储引擎相关查询行级锁、表级锁和页级锁各存储引擎介绍MyISAM 存储引擎MyISAM 主要特性MyISAM存储格式InnoDB 存储引擎场景MERGE 存储引擎场景MEMORY 存储引擎场景ARCHIVE 存储引擎场景CSV 存储引擎场景BLACKHOLE 存储引擎场景PERFORMANCE_SCHEMA 存储引擎场景Federated 存储引擎InnoDB 和 MyISAM 的对比日志文件数据文件存储引擎相关查询# 查看当前mysql支持的存储引擎mysql> show engines;

2021-07-27 18:36:21 464

原创 MySQL高级操作之视图、自定义函数、存储过程、触发器、事务

目录视图语法语法说明视图和临时表的区别作用实例自定义函数语法创建删除实例函数与存储过程的区别存储过程语法创建存储过程调用存储过程删除存储过程参数类型实例优点触发器查看触发器信息语法事务事务的自动提交开启事务提交事务回滚事务事务的特性(ACID)命令设置事务的隔离级别MySQL 事务隔离级别不可重复读和幻读的区别及解决方案视图MySQL视图是一个虚拟表语法CREATE VIEW <视图名> AS <SELECT 语句>语法说明<视图名>:指定视图的名称。该名

2021-07-27 17:22:32 961

原创 MySQL高级操作之序列、正则表达式、临时表、复制表、预编译

目录序列使用AUTO_INCREMENT获取 AUTO_INCREMENT 值重置序列设置序列的开始值正则表达式实例临时表实例删除临时表用查询直接创建临时表复制表实例预编译语法定义预处理语句执行预处理语句删除(释放)定义通过 max_prepared_stmt_count 变量来控制全局最大的存储的预处理语句执行预编译预处理 SQL 使用注意点序列MySQL 序列是一组整数:1, 2, 3, …,由于一张数据表只能有一个字段自增主键, 如果 你想实现其他字段也实现自动增加,就可以使用 MySQL 序列

2021-07-27 15:11:53 127

原创 mysql常用命令及基础知识-定时任务、备份、导入导出数据(二)

目录MySql定时任务开启event_scheduler关闭event_scheduler查看当前是否已开启事件调度器定时任务例子关闭事件任务开启事件任务查看事件任务MySql备份语法直接将MySql数据库压缩备份备份MySql数据库某个(些)表同事备份多个MySql数据库仅仅备份数据库表结构备份服务器上所有数据库还原MySql数据库的命令还原压缩的MySql数据库MySql定时任务自 MySQL5.1.6 起,增加了一个非常有特色的功能-事件调度器(Event Scheduler),可以用 做定时执

2021-07-27 12:35:43 925

原创 c++ mysql 开发

目录c++库函数原型c++库libmysql函数原型

2021-07-23 14:38:32 1335

原创 C/C++ 头文件以及库的搜索路径

目录头文件1. #include “headfile.h”2. #include 头文件1. #include “headfile.h”搜索顺序为:①先搜索当前目录②然后搜索-I指定的目录③再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使用的是C_INCLUDE_PATH)④最后搜索gcc的内定目录/usr/include/usr/local/include/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include各目录存在相同文件时

2021-07-23 14:14:01 1868

原创 centos mysql安装mysql-devel报错

问题执行yum install mysql-devel,安装开发环境时报错[root@VM-0-17-centos software]# yum install mysql-develLoaded plugins: fastestmirror, langpacksLoading mirror speeds from cached hostfile * centos-sclo-rh: mirrors.163.com * centos-sclo-sclo: mirrors.163.comResol

2021-07-23 11:33:17 3753 1

原创 mysql常用命令及基础知识--命令、慢查询、原理、问题(一)

目录命令登录MySQL查看数据库选择 mysql 数据库查看当前选中数据库中所有表MySQL外部连接MySQL字符集查看字符集显示 MYSQL 字符集编码查看 MySQL 数据库服务器和数据库字符集查看当前安装的 MySQL 所支持的字符集查看数据库编码查看表编码查看表编码查看系统的编码字符设置MySQL默认字符集MySQL 创建设置字符集和修改字符集创建数据库指定数据库的字符集创建表时指定字符集创建字段时指定字符集修改数据库字符集把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字

2021-07-22 18:55:00 1205 1

原创 常用shell命令

目录netstatnetstat用途:在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询参数说明  -t : 指明显示TCP端口  -u : 指明显示UDP端口  -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)  -p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。  -n : 不进行DNS轮询,显示IP(可以加速操作)

2021-07-22 17:29:26 2416 1

暗黑风格-C++八股文-小贺-v1.0.pdf

暗黑风格-C++八股文-小贺-v1.0.pdf

2021-08-17

Qt编程书籍

qt编程,轻轻松松成为qt界面编程高手,学一门好的技术走遍天下

2014-09-26

空空如也

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

TA关注的人

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