自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 bug定位

框架报错insert sql执行失败。如果是磁盘空间不足,所有批次都会报错。如果是内存性能不够,用top查看。最可能是主键冲突导致的。

2024-05-23 12:01:56 40

原创 python 二维元祖

在Python中,元组(tuple)可以嵌套其他的元组,这意味着一个元组的元素可以是另一个元组。second_element_of_second_tuple = nested_tuple[1][1] # 获取第二个内部元组的第二个元素。first_element_of_first_tuple = nested_tuple[0][0] # 获取第一个内部元组的第一个元素。first_inner_tuple = nested_tuple[0] # 获取第一个内部元组。# 访问嵌套元组中的元素。

2024-05-23 12:01:47 88

原创 bug定位

2个环境代码相同,数据库服务器版本相同,但odbc驱动不同。把报错环境的odbc驱动升级,函数正常。证明odbc驱动导致了函数的bug。2个环境测试一个函数。

2024-05-22 09:55:40 375

原创 SQL `INSERT` 语句执行失败

如错误信息所示,如果在执行 `INSERT` 之前没有正确设置会话级选项,如 `ARITHABORT`,可能会导致插入失败。- 插入的数据量过大可能导致超出了数据库配置的限制,如 `tmp_table_size` 或 `max_allowed_packet` 参数。- 如果表名或列名是SQL关键字(如 `day`),需要使用方括号包围,例如 `[day]`,以避免解析错误。- 特殊字符(如 `'-'`)可能导致问题,尤其是在某些数据库系统或编码环境下。- 确保插入的数据与目标表列的数据类型相匹配。

2024-05-22 09:55:29 410

原创 安装glibc导致系统命令不能用

1. **版本不兼容**:新安装的glibc版本可能与系统上现有的其他库或应用程序不兼容,特别是如果新版本的glibc引入了向后不兼容的更改。2. **路径问题**:安装过程中可能改变了glibc库的搜索路径(`LD_LIBRARY_PATH`环境变量),使得系统找不到正确的库文件。3. **链接错误**:升级过程中可能没有正确地重新链接系统命令到新的glibc库,导致命令执行时找不到必要的符号。4. **损坏的链接或库文件**:安装或升级过程中可能意外损坏了glibc的链接或库文件。

2024-05-21 19:00:17 752

原创 git reset后恢复数据

如果你记得被重置提交的具体内容,可以使用 `git revert <commit>` 创建一个新的提交来撤销那次重置的效果,这里 `<commit>` 是被重置的提交的哈希值。- 如果通过 `git reflog` 找到了丢失提交的 SHA,但不想硬重置整个分支,可以使用 `git cherry-pick <commit>` 将特定的提交应用到当前分支。- 一旦找到了正确的提交,可以使用 `git reset --hard <commit>` 命令恢复到那个提交状态。

2024-05-21 19:00:08 444

原创 LAST_INSERT_ID

每个客户端连接(会话)都有其独立的 `LAST_INSERT_ID()` 值。然而,虽然 `LAST_INSERT_ID()` 能够在单个会话中保证一致性,但如果你需要跨会话维持某种关联(比如在一个事务中需要引用其他会话插入的ID),则需要额外的逻辑来协调,比如通过应用程序级别的锁、事务管理或其他同步机制来确保数据的一致性和完整性。- 当你在同一个会话中执行了一个 INSERT 操作后立即调用 `LAST_INSERT_ID()`,你将得到该会话中刚刚插入的记录的ID,而不会受到其他会话插入操作的影响。

2024-05-20 18:36:49 320

原创 mysql 序列器

在MySQL 8.0及以上版本,可以使用窗口函数(如 `ROW_NUMBER()`)或用户变量来生成序列号,但这通常适用于查询结果的序列化,而不是全局的序列生成器。创建一个专门的表用于生成序列值,每次需要新序列时,通过 `UPDATE` 和 `SELECT` 结合 `LAST_INSERT_ID()` 函数来获取新的序列值。在高并发场景下,为了提高效率,可以考虑使用独立的表或者字段来避免因 `AUTO_INCREMENT` 导致的表锁问题,尤其是在插入操作非常频繁的情况下。

2024-05-20 18:36:43 415

原创 Nginx实现负载均衡

在这个配置中,`upstream` 块定义了一个名为 `backend` 的服务器组,其中列出了多个后端服务器地址。`server` 块内的 `location` 配置段指定所有到达Nginx的HTTP请求将被代理到 `backend` 组中的某个服务器上,Nginx会根据其内置的负载均衡策略(这里默认是轮询)来选择服务器。Nginx 的负载均衡功能是通过其配置实现的。Nginx 是一个用C语言编写的高性能Web服务器和反向代理服务器,它提供了丰富的配置选项来实现各种功能,包括负载均衡。

2024-05-19 09:37:31 169

原创 C++中实现Apache Kafka的消息发送和接收

在C++中实现Apache Kafka的消息发送和接收,通常需要使用Kafka的C/C++客户端库,如`librdkafka`,这是一个流行的、高性能的Kafka客户端,支持C和C++接口。下面我将提供一个简单的示例来说明如何使用`librdkafka`进行消息的发送和接收。// 在没有偏移量或偏移量无效时从最早的偏移量开始消费。// 编译时链接librdkafka。// 创建消费者实例。

2024-05-19 09:37:21 344

原创 mysql odbc的返回值

如果插入数据,返回值通常是1,除非你使用了多行插入语法,那么返回的就是实际插入的行数。但是,值得注意的是,根据不同的驱动程序实现和配置,有时候即使没有实际的数据修改(例如尝试更新某字段为其当前值),某些ODBC驱动也可能返回1,因此最好根据具体上下文和驱动文档来准确理解返回值的意义。对于SELECT语句,由于它不直接修改数据,所以使用ODBC执行SELECT时,通常不会通过返回值来指示“影响的行数”,而是需要通过其他方式,如利用游标或`SQLRowCount()`函数在某些特定情况下获取查询到的行数。

2024-05-18 08:01:32 102

原创 mysql odbc驱动

具体来说,你需要在Windows系统上安装适用于Windows的MySQL ODBC驱动(例如MySQL Connector/ODBC),然后通过这个Windows版的ODBC驱动来配置数据源,进而实现与Unix/Linux平台上运行的MySQL数据库服务器之间的通信。当Windows版程序需要连接到Unix/Linux版本的数据库(通常指MySQL或其他数据库的Unix/Linux版本)时,实际上并不直接使用Unix/Linux版本的ODBC驱动。

2024-05-18 08:01:18 144

原创 查看Linux版本

通过上述命令的输出,你可以找到关于麒麟系统基于哪个Linux版本的具体信息,例如是基于Debian、Ubuntu还是Red Hat等。这个命令会显示一个包含操作系统名称、版本号、ID、ID_LIKE、版本代号、版本ID等信息的文件内容。sudo yum install redhat-lsb-core # 如果是基于RPM的系统。sudo apt install lsb-release # 如果是基于Debian的系统。这两个命令会显示当前系统的内核版本信息。

2024-05-16 11:39:45 239

原创 找不到动态库

对于基于Debian的系统,可以使用 `sudo apt-get install libexamplelib-dev`(将`examplelib`替换为实际库名)。有时候权限设置不当也会导致这个问题,可以使用 `ls -l /path/to/library` 查看权限,并用 `chmod` 或 `chown` 命令进行调整。- 编辑 `/etc/ld.so.conf` 文件,将库文件的目录添加进去,然后运行 `sudo ldconfig` 更新库缓存。- 确保库文件的版本与你的应用程序所要求的版本相匹配。

2024-05-16 11:37:56 516

原创 C++技术栈

熟悉STL(Standard Template Library),包括容器(如`vector`、`list`、`map`)、迭代器、算法和函数对象。- 在Linux环境下工作的C++开发者需熟悉Linux操作系统,包括文件系统操作、进程管理、线程管理、信号处理、I/O复用等。- 掌握C++标准库,如`<iostream>`、`<string>`、`<vector>`、`<algorithm>`等。- 熟练掌握C++语法,包括但不限于变量、数据类型、控制结构、函数、类与对象、模板、命名空间等。

2024-05-15 07:50:43 386

原创 C++实现redis发布订阅模式

在C++中实现Redis的发布-订阅模式,通常会使用一个Redis客户端库,如`hiredis`,这是一个广泛使用的、轻量级的C语言库,同样适用于C++项目。下面是一个使用`hiredis`实现发布和订阅功能的基本示例。这段代码展示了如何创建一个订阅线程来监听特定频道的消息,并在主线程中发布消息到该频道。订阅消息通常在一个单独的线程中进行,因为订阅操作会阻塞等待新的消息到来。首先,确保你已经安装了`hiredis`库。// 注意:在实际应用中,你可能需要添加适当的逻辑来控制程序的退出,

2024-05-15 07:50:31 424

原创 实现序列化和反序列化

在C++中实现JSON序列化和反序列化,一个常用的第三方库是RapidJSON,它是一个快速的JSON解析器及生成器,适用于效率敏感的应用场景。下面我将给出使用RapidJSON进行JSON序列化和反序列化的基础示例。请注意,以上示例假定你已经正确安装并配置了RapidJSON库。此外,对于更复杂的对象结构,你可能需要实现更复杂的逻辑来遍历和设置JSON文档的成员。### JSON反序列化(JSON字符串转换为对象)### JSON序列化(对象转换为JSON字符串)// 假设这是你要序列化的类或结构体。

2024-05-14 12:26:52 891

原创 I/O操作

根据不同的应用场景,I/O操作可以是同步的(即程序必须等待I/O操作完成才能继续执行)或异步的(程序可以在I/O操作进行的同时继续执行其他任务)。现代操作系统提供了多种I/O模型来优化这一过程,比如阻塞I/O(BIO)、非阻塞I/O(NIO)、I/O多路复用以及异步I/O(AIO),以提高系统整体的效率和响应速度。3. **从网络接收数据**:在网络通信中,接收数据包也是I/O操作的一部分,数据通过网络接口卡(NIC)进入系统,然后可能被复制到内存中。

2024-05-14 12:26:39 165

原创 redis实现滑动窗口

2. **插入元素**:使用 `LPUSH` 或 `RPUSH` 命令将新元素添加到列表头部(`LPUSH`)或尾部(`RPUSH`)。4. **清理过期元素**(可选):如果需要定期清理过期的元素,可以设置一个定时任务(如使用 Redis 的 `EXPIRE` 或 `PEXPIRE` 设置键的过期时间),或者在每次插入新元素时检查并删除超出窗口范围的旧元素。4. **查询窗口数据**:使用 `ZRANGE` 命令按分数(时间戳)从小到大获取有序集合中的元素,即当前滑动窗口内的所有元素。

2024-05-14 12:26:16 360

原创 C++11新特性

`std::lock_guard`、`std::unique_lock`、`std::scoped_lock`(C++17):RAII风格的锁包装器,确保锁的正确使用。- `std::mutex`、`std::recursive_mutex`、`std::shared_mutex`(C++17):互斥锁,用于保护共享资源。- `std::weak_ptr`:与`std::shared_ptr`配套使用,用于打破循环引用,持有弱引用而不增加引用计数。

2024-05-13 12:10:21 386

原创 工作跟不上节奏

你可以适当多要一两天的排期,用来应付突发情况,要有足够时间自己去学习项目的其他部分,这样 才能慢慢进入正向循环。还有,你需要适当加加班,可能你已经加班了,但是在加班赶进度。例如 之前给你一个小任务,问你的排期,你为了表现好,可最短的时间来说,你说两天可以搞完。没有去系统性思考,然后就说难,问哪里难,自己还不知道具体难在哪里,反正就是难。估计你可能也说不上来,就是感觉复杂,哪都复杂,具体哪复杂自己也说不清楚。,你多要个一两天,没啥影响,因为你做的任务可能也不是非常关键的。你不能把工作上的排期安排的太紧。

2024-05-13 12:09:50 490

原创 C++ 单例模式实现

Meyers Singleton 通常被认为是最简洁且高效的实现方式,但如果对资源管理有特殊要求或偏好智能指针的便利性,可以采用基于 `std::shared_ptr` 的实现。如果希望自动管理单例对象的生命周期,可以使用 `std::shared_ptr`。- 使用 `std::call_once` 和 `std::once_flag` 来确保实例的创建只发生一次,即使在多线程环境中也能保证线程安全性。### 2. **基于 `std::shared_ptr` 的单例模式**(懒汉式,线程安全)

2024-05-12 08:50:54 290

原创 线程轮流打印

/ 等待轮到自己打印。// 更新状态为下一个线程的标识。// 唤醒所有等待的线程。// 简化版线程函数,仅打印一次字符。

2024-05-12 08:50:23 380

原创 CPU和内存

1. **功能**:CPU是计算机的大脑,负责执行指令、处理数据、做出计算决策以及协调计算机的各种活动。1. **功能**:内存是计算机的临时数据存储空间,用于存放正在运行的程序及其所需的数据。2. **速度**:虽然比CPU慢,但内存的速度仍然远高于硬盘等外存储器,它提供了CPU直接快速访问的必要空间。2. **速度**:CPU是计算机中运行速度最快的组件之一,它的速度快到能够每秒处理数十亿条指令。4. **作用**:解释和执行程序代码,处理数据,控制硬件资源,确保计算机各项操作按预定顺序执行。

2024-05-11 11:33:34 336

原创 查看CPU和内存

是`top`命令的一个增强版本,提供了彩色界面和更友好的交互体验,可以水平和垂直滚动,方便查看所有进程信息。运行`top`命令后,你会看到一个不断更新的列表,展示了CPU使用率最高的进程在最上方。使用`vmstat`命令可以查看CPU使用概况,例如,`vmstat 1`命令每秒更新一次CPU和内存使用情况。- 如果你想要更详细的CPU每个核心的使用情况,可以使用`mpstat`命令,如`mpstat -P ALL 1`会每秒显示所有CPU核心的状态。- 是一个虚拟文件,包含了关于系统内存的详细信息。

2024-05-11 11:33:25 232

原创 数据库性能瓶颈

1. **CPU瓶颈**:当数据库执行复杂的查询操作,如聚合函数、排序、大量行的处理或者复杂的触发器、函数和存储过程时,可能会消耗大量的CPU资源。2. **I/O瓶颈**:数据库频繁地读写磁盘,尤其是当索引未被有效利用导致全表扫描、数据文件碎片化、日志文件增长过快或硬件I/O性能不足时,I/O操作成为性能的限制因素。如果内存不足,频繁的磁盘I/O操作会大大降低性能。8. **数据库设计与配置**:不良的数据库设计,如表结构不合理、数据冗余、缺少分区策略等,以及数据库参数配置不当,都可能成为性能瓶颈。

2024-05-11 11:33:15 474

原创 红帽系统安装软件

1. **YUM (Yellowdog Updater Modified)**: 在较旧的红帽版本(如RHEL 7及以前)中,YUM是最常用的包管理器。3. **RPM (RPM Package Manager)**: RPM是一种更底层的软件包管理方式,直接操作RPM包,不处理依赖关系自动解决。2. **DNF (Dandified YUM)**: 从RHEL 8开始,DNF替代YUM成为默认的包管理器,提供了更好的性能和依赖关系处理。如果您需要安装的软件不在默认的仓库中,可能还需要先添加额外的仓库源。

2024-05-10 19:02:56 247

原创 git reflog

执行这个命令后,Git 会显示一系列的记录,每条记录都包含了一个 SHA-1 提交哈希值、操作类型(比如 `merge`、`checkout`、`commit` 等)、操作描述以及该操作发生的时间戳。5. **恢复到特定状态**:确定了要恢复到的提交之后,你可以使用 `git reset` 或 `git checkout` 命令回到那个状态。2. **进入项目目录**:使用 `cd` 命令进入到你想要操作的 Git 仓库的根目录下。1. **打开命令行终端**:首先,你需要打开一个命令行终端窗口。

2024-05-10 17:24:57 199

原创 并行和并发

并发则是指在一段时间内宏观上多个任务交替进行,在微观上这些任务可能并不是同时执行的,而是通过任务切换来实现“同时”处理多个任务的效果。在单核处理器系统中,由于任何时刻只能执行一条指令,因此并发实际上是通过操作系统的时间片分配机制,快速地在多个任务之间切换,给用户造成“同时进行”的错觉。- **并发**关注的是在一段时间内处理多个任务的能力,不强调是否真正同时执行,而是任务之间存在交替执行的现象。- **并行**关注的是同时执行多个任务,强调的是资源的真正同时使用。### 并发(Concurrency)

2024-05-10 12:38:44 369

原创 Shell中cp和mv命令

总结来说,`cp` 用于创建源文件或目录的一个副本,而 `mv` 则是将源文件或目录移动到另一个位置或更改其名称,原位置的文件或目录会被移除(除非是重命名操作)。`mv` 代表 "move" 或 "rename",用于移动文件或目录,以及重命名文件。在Linux或Unix Shell中,`cp` 和 `mv` 是两个非常基础且常用的命令,用于文件和目录的操作。`cp` 是 "copy" 的缩写,用于复制文件或目录。- `-r` 或 `-R`:递归复制目录及其内容。- `-v`:显示详细的操作过程。

2024-05-10 12:38:22 129

原创 麒麟系统上尝试安装原本为红帽(Red Hat)系统设计的软件,导致操作系统无法正常登录

如果你在麒麟系统上尝试安装原本为红帽(Red Hat)系统设计的软件,尤其是通过直接使用RPM包或其他非官方渠道安装时,可能会遇到兼容性问题,导致操作系统无法正常登录。如果上述步骤都无法解决问题,且系统变得不稳定或无法正常工作,作为最后的手段,可能需要考虑系统还原到安装软件之前的状态,或者完全重新安装麒麟操作系统。在进行此操作前,请确保备份重要数据。定位到因安装红帽版本软件而可能导致冲突的包,尝试使用rpm或相应的包管理工具(如dnf或zypper,取决于麒麟系统使用的包管理系统)进行修复或卸载。

2024-05-10 12:38:12 200

原创 glibc-common glibc-devel区别

简而言之,`glibc-common` 更多的是面向系统运行时的支持,而 `glibc-devel` 则是面向应用程序开发者的工具集。- `glibc-devel`(有时也称为 `libc-devel` 或类似名字,具体取决于发行版)是为开发者提供的包,包含了头文件、静态库和编译链接时所需的动态库链接信息。- glibc-common 通常包含了运行时需要的共享对象文件和其他辅助数据文件,不直接面向开发者使用,而是作为 glibc 库运行的基础环境。

2024-05-09 08:35:50 190

原创 检查软件包是否安装

这些命令会列出与glibc相关的包及其版本信息。请根据您的具体需求和Linux发行版选择合适的命令。这个命令会列出所有已安装的包含"glibc"名称的软件包。

2024-05-09 08:33:41 309

原创 uniqueptr指向一个对象,普通指针可以指向那个对象吗

2. **所有权转移**:如果确实需要将 `unique_ptr` 管理的对象交给一个普通指针来长期持有,那么必须通过 `unique_ptr` 的 `release()` 成员函数来显式地转移所有权。但这并不改变所有权,`unique_ptr` 仍然保持对对象的独占控制,且当 `unique_ptr` 副作用域结束或被销毁时,该对象仍会被自动释放,此时若普通指针还保留着之前获得的地址,则会变为悬挂指针(dangling pointer),指向已释放的内存。

2024-05-08 12:27:12 193

原创 unicode与utf8

UTF-8由于其良好的兼容性(与ASCII兼容)、高效率(对于英文文本存储效率接近ASCII)、无需字节序问题(字节序只影响多字节字符,而每个字节的高位有特定模式,易于识别)以及广泛支持(互联网上最常用的文本编码),在现代计算环境中被广泛应用。- **作用**:Unicode解决了传统字符编码方案(如ASCII、ISO-8859系列)无法覆盖全球多元语言字符的问题,提供了一个全球通用的字符表示框架,使得文本数据能在不同平台上、不同程序间无障碍地交换和处理。

2024-05-08 12:26:58 190

原创 char和binary数据类型

**`CHAR`**: 定义时需指定长度(如 `CHAR(10)`),无论实际存储的字符长度是否达到最大值,MySQL都会为每个值分配固定长度的空间,并对较短的值用空格(`' '`)进行右端填充,以保持所有值的长度一致。- **`BINARY`**: 是一种固定长度的二进制类型,用于存储定长的二进制数据,如图像、声音片段的原始字节流、经过编码的字符序列(如使用某种字符编码后的文本)等。- **`CHAR`**: 是一种固定长度的字符类型,用于存储定长的字符数据,如字母、数字、标点符号等。

2024-05-08 12:26:38 349

原创 redis实现分布式锁

根据实际需求和对安全级别的要求,可以选择适合的实现方案,从简单的 `SETNX` + `EXPIRE` 到复杂的 Redlock 算法。2. **设置带有过期时间的值**:客户端将锁的值设置为一个特殊的格式,如 `(当前时间戳 + 锁的有效时间)`,这样在尝试获取锁时,不仅判断键是否存在,还检查其值是否已经过期。这条命令会设置 `myLock` 键的值为 `someValue`,并设置其过期时间为30秒(30000毫秒),只有当 `myLock` 键不存在时才会执行上述操作,即实现了原子性的加锁。

2024-05-07 18:17:12 235

原创 C++代码中设置字符集编码

**locale**:使用 `<locale>` 头文件中的 `std::locale` 类及其相关函数可以设置或查询运行时的本地化信息,包括字符编码。- **环境变量**:在某些操作系统(如Windows)上,可以通过设置环境变量(如`LC_ALL`、`LANG`或`PYTHONIOENCODING`等)来影响程序的默认字符编码。- **API调用**:在程序启动时,可能需要调用系统特定的API来设置进程级别的字符编码,如Windows下的 `_setmbcp()` 函数。

2024-05-07 18:16:30 421

原创 MySQL设置字符集编码

这里设置的是服务器的默认字符集为 `utf8mb4`(推荐使用 `utf8mb4` 而非 `utf8`,因为它能完全支持Unicode,包括表情符号和某些特殊字符),默认校对规则为 `utf8mb4_unicode_ci`。修改后,重启MySQL服务使配置生效。### **1. ** **服务器全局级别设置**### **2. ** **数据库级别设置**### **5. ** **客户端连接设置**### **3. ** **表级别设置**### **4. ** **列级别设置**### **总结**

2024-05-06 16:44:44 862

原创 MySQL生僻字插入失败(Incorrect string value)

**服务器层面**:确保MySQL服务器配置文件(如 `/etc/mysql/mysql.conf.d/mysqld.cnf` 或 `/etc/mysql/conf.d/mysql.cnf`)中的 `character-set-server` 和 `collation-server` 设置为支持生僻字的字符集,如 `utf8mb4` 和对应的校对规则(如 `utf8mb4_unicode_ci`)。如果问题得到解决,则说明配置已生效;- **列层面**:确保包含生僻字的字段也使用了正确的字符集。

2024-05-06 16:44:27 809

空空如也

空空如也

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

TA关注的人

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