- 博客(146)
- 收藏
- 关注
原创 关于网络编程的3个问题
一、TCP 和 UDP 可以同时绑定相同的端口吗?二、多个 TCP 服务进程可以绑定同一个端口吗?三、客户端的端口可以重复使用吗?
2023-11-02 22:56:00 359
原创 15个常用网络端口解释【网络工程师必备技能】
网络端口概述端口号的范围从 0 到 65535。它们分为三个子范围:知名端口 (0-1023) – 由IANA(互联网号码分配机构)分配给特定服务。在 Linux 系统上,只有以 root 身份运行的特权程
2023-11-02 22:21:38 1931
原创 B树、B+树详解
首先,为什么要总结B树、B+树的知识呢?最近在学习数据库索引调优相关知识,数据库系统普遍采用B-/+Tree作为索引结构(例如mysql的InnoDB引擎使用的B+树),理解不透彻B树,则无法理解数据库的索引机制;接下来将用最简洁直白的内容来了解B树、B+树的数据结构另外,B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是一种树。
2023-10-11 21:26:39 1732
原创 开源许可协议:GPL、LGPL、AGPL、MPL和BSD、MIT、Apache
开源许可协议:GPL、LGPL、AGPL、MPL和BSD、MIT、Apache
2023-02-04 14:54:17 12522
原创 hiredis的pipeline实现
大多数同学一直以来对 Redis 管道有一个误解,他们以为这是 Redis 服务器提供的一种特别的技术,有了这种技术就可以加速 Redis 的存取效率。但是实际上 Redis 管道 (Pipeline) 本身并不是 Redis 服务器直接提供的技术,这个技术本质上是由客户端提供的,跟服务器没有什么直接的关系。hiredis pipeline 实现细节以及两种封装hiredis的pipeline实现使用方式发送命令通过连续调用 redisAppendCommand(context, c
2023-02-04 11:25:51 768
原创 数据库oracle表空间,表,和用户的区别
oracle中的表空间,表,和用户区别每个项目对应一个表空间,Oracle数据库是通过表空间来存储物理表的,一个数据库实例可以有N个表空间,一个表空间下可以有N张表。然后创建一个用户对应此表空间即可。所以,在做大型项目的时候,是先创建一个数据库实例,然后创建表空间,再创建用户,然后用户指定这个表空间。用户与表空间关系用户=商家表=商品表空间=仓库一个商家能有很多商品,1个商品只能属于一个商家。一个商品可以放到仓库A,也可以放到仓库B,但不能同时放入A和B。仓库不属于任何商家。
2023-02-04 11:24:10 2239
原创 SQLite学习手册(一)
一、获取表的Schema信息: 1). 动态创建表。 2). 根据sqlite3提供的API,获取表字段的信息,如字段数量以及每个字段的类型。 3). 删除该表。 见以下代码及关键性注释:#include <sqlite3.h>#include <string>using namespace std;void doTest(){ sqlite3* conn = NULL; //1. 打开数据库 ...
2023-02-04 11:14:10 1484
原创 输出sprintf snprintf sprintf_s和输入scanf sscanf函数使用详解
输出函数sprintf snprintf sprintf_s和输入函数scanf sscanf函数使用详解
2023-02-04 11:03:14 7503
原创 gcc中预定义的宏__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__
gcc中预定义的宏__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__
2023-01-26 22:59:08 1627
原创 车载通信协议-列车实时数据协议(TRDP)
TRDP(Train Real-time Data Protocol)协议是纯正的轨道交通领域的概念。其也是应用是处于编组网层次,但是该协议并不是处于数据链路层,个人理解其处于应用层。其是基于UDP、TCP的通信协议,在使用过程中终端设备在标准以太网的基础上新增TRDP协议栈即可。TRDP的软件是完全开源的,具体可以登入进行查看。TRDP是一个软实时的实时以太网,其目前已经在地铁车辆中逐步推广使用,替代原有的MVB网络,主要解决MVB网络通信的数据量太小的问题。
2023-01-26 19:33:02 14627 1
原创 设置线程分离的方法
线程分离的设置方法(1)在创建线程thread_create函数参2时设置线程分离(2)创建完线程后,通过pthread_detach函数设置线程分离
2022-11-29 17:26:03 1675 1
原创 模板 template<typename T> 和 template<class T>区别
模板 template 和 template区别以及底层刨析
2022-07-19 20:13:53 6833
原创 C++文件流fstream详细说明
C++文件流。首先需要包含头文件#include< fstream >fstream可以把它理解成一个父类,包含的子类有ifstream和ofstream等,fstream:文件输入输出类。表示文件级输入输出流(字节流);ifstream:文件输入类。表示从文件内容输入,也就是读文件;ofstream:文件输出类。表示文件输出流,即文件写。所以一般直接创建一个父类对象即可(即fstream类的对象)C++中seep()和seekg()函数功能seekg:设置输入文件流的文件流指
2022-05-28 22:29:01 9245
原创 C++ string 字符串函数详解
运算符重载+ 和 +=:连接字符串=:字符串赋值>、>=、< 和 <=:字符串比较(例如a < b, aa < ab)==、!=:比较字符串<<、>>:输出、输入字符串注意:使用重载的运算符 + 时,必须保证前两个操作数至少有一个为 string 类型。例如,下面的写法是不合法的:#include <iostream>#include <string>int main(){ string s..
2022-05-01 11:15:42 511
原创 VSCode C/C++无法跳转到定义、自动补全、悬停提示功能
无法跳转第一步首先这个C/C++ 这个插件你要有第二步打开 Extension settings,查看是否为default注意:这个时候前面的伏笔就来了,如果你装了 clang,你将无法把 C_Cpp:Intelli Sense Engine 开关设置为 Default,它会强制给你关掉,导致你配置不了 C/C++:Edit Configurations(JSON),也就不能进行调试跳转。 【解决方法】很简单,在插件栏里将 clangd 卸载、重启即可。..
2022-03-06 17:07:45 15324 7
原创 Redis 5.0 特性 Stream 实现源码分析-XREAD 消费流程
今天学习一下消费端的过程。redis stream的消费方法有几种, XREAD、XREADGROUP, 还有xrange/xrevrange, 后者比较简单,主要就是准备参数然后调用streamReplyWithRange 来根据范围读取消息内容。一、xrange 范围消息读取xrange 语法为:XRANGE key start end [COUNT < n> ]先来看一下xrange的代码,前面部分例行检查,获取start,end id范围。voidxra...
2022-01-13 19:25:20 2061
原创 struct tm和time_t使用场景
1.概念C/C++对时间的操作也有许多值得大家注意的地方。下面主要介绍在C/C++中时间和日期的使用场景和使用方法.但在这之前你需要了解一些“时间”和“日期”的概念,主要有以下几个:Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。Calendar Time: 日历时间,是用“从一个.
2021-11-25 18:48:07 1349 1
转载 Java并发编程--进阶
Java并发编程--基础进阶高级Java并发编程--基础进阶高级完整笔记。这都不知道是第几次刷狂神的JUC并发编程了,从第一次的迷茫到现在比较清晰,算是个大进步了,之前JUC笔记不见了,重新做一套笔记。目录????1.多线程--基础内容 1.Thread状态 2.Synchronized 3.Lock锁 4.总结 ????2.八锁现象(synchronized、static) 1.synchronized 2.static synchronized
2021-11-16 08:22:04 165
原创 C++ 多继承和多重继承
一、多重继承多重继承是一个类的父类也有父类,一层一层的继承父类。多重继承的对象初始化方式最高的父类到子类。A()–>B–>C()销毁时正好是初始化的反顺序。~C–>~B–>A()class A{};class B:public A{};class C:public B{};用子类初始化父类,为避免内存泄露,父类的构析函数最好用virtual 修饰。二、多继承多继承:一个子类拥有很多父类 ,一般指一个类有2个以上父类。多继承的定义:派生类的基..
2021-11-10 16:02:02 5084
原创 C++ 接口与实现相互分离的常见的两种方法
接口需求在软件开发这个行业中,一个较大的软件项目,一般由几个小组共同开发完成,为了将小组之间的影响降低到最低,定义好接口软件成为双方关注的焦点,对于要求在短时间开发完成的接口更是如此。那么如何才能定义好的接口呢? 第一,接口名字和实际的功能相符合;第二、接口要对数据进行封装,不允许客户直接操作接口之下的数据,尤其是使用new和delete在堆上操作内存数据。因为客户很容易由于操作不当造成错误,误以为是设计的接口有问题。接口与实现分离c++中实现对接口与实现进行分离有两种方法,一种是将对象的实现细
2021-11-10 11:17:36 1182
原创 友元函数和互为友元类
1、友元函数友元机制允许类授权其他函数直接访问类的private和protected成员。友元包括友元函数、友元类和友元成员函数。常用的是友元函数。友元函数的使用因为友元函数没有this指针,则参数要有三种情况:要访问非static成员时,需要对象做参数;要访问static成员或全局变量时,则不需要对象做参数;如果做参数的对象是全局对象,则不需要对象做参数.可以直接调用友元函数,不需要通过对象或指针友元函数和类的成员函数的区别1) 成员函数有this指针,而友元函数..
2021-11-03 22:11:27 1095
原创 pthread_cond_wait
为什么pthread_cond_wait需要互斥锁mutex作为参数通常的应用场景下,当前线程执行pthread_cond_wait时,一定是处于某个临界区,正在访问共享资源,存在一个mutex与该临界区相关联。因此,在阻塞前,必须释放mutex;被唤醒后,仍然处于临界区,因此需要再次获得mutex。目录为什么是pthread_cond_wait(cond, mutex)而不是pthread_cond_wait(cond)生产者和消费者问题的介绍用于同步和互斥的全局变量使用pthread..
2021-11-03 22:10:10 2731
原创 进程间的通信-消息队列
下面来说说如何用不用消息队列来进行进程间的通信一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。二、在Linux中使用消息队列Linux提供了一系列消息队列的函数接口来让我们方便地使用它.
2021-10-17 20:23:30 469
原创 Linux 软件包管理工具:rpm与dpkg
概述打造国产化操作系统就好比搭台唱戏。不同的戏曲种类需要不同的舞台场景,不同的设计理念和功能需求也催生出了不同的操作系统。单就服务器操作系统Linux的发行版来说,有基于Dpkg的Ubuntu、Debian,也有基于RPM的RHEL(Red Hat Enterprise Linux)、Fedora、CentOS,更有Arch Linux、Gentoo这样高度需要用户“自己动手,丰衣足食”的选择。国人在使用操作系统时,也会有如语言、风格、本地化(locale)等方面的需求,自然也会催生出更符合国人使用习惯
2021-10-14 13:01:47 626
原创 Oracle 11gR2 RAC安装
一、实施前期准备工作1.1 服务器安装操作系统1.2 Oracle安装介质1.3 共享存储规划1.4 网络规范分配1.1 服务器安装操作系统配置完全相同的两台服务器,安装相同版本的Linux操作系统。留存系统光盘或者镜像文件。我这里是RHEL6.2,系统目录大小均一致。对应RHEL6.2的系统镜像文件放在服务器上,供后面配置本地yum使用。1.2 Oracle安装介质Oracle 11.2.0.4版本的前3个zip包。 这个用MOS账号自己去support.oracle.co..
2021-10-08 22:20:28 378
原创 linux下获取网络接口信息
在linux下,我们知道可以通过ifconfig获取mac地址和ip地址等相关信息,如何在程序中获取这些网络信息,我们就需要使用到Linux系统所提供的一个函数ioctl(),iotec函数是对设备的i/o通道进行管理的函数。ioctl这个函数,可以用来对特殊文件的基础设备参数进行操作,它们可以完成与打开文件描述符相关联的控制功能。在程序启动时获得主机上所有接口的信息: 接口的地址、接口是否支持广播、是否支持多播等等。成功返回0,出错则返回-1。其中,struct ifreq 就是用来存储返回的接口相.
2021-08-12 11:28:50 1376
原创 C语言预处理#define 和## 运算符
预处理器查找一行中以#号开始的预处理指令。预处理器指令从#开始运行,到后面的第1个换行符为止。也就是说,指令的长度仅限于一行。1、宏定义的格式1、无参数宏定义的格式为:#define 标识符 替换列表(1)宏定义中字符串常量化运算符(#)在宏定义中,当需要把一个宏的参数转换为字符串常量时,则使用字符串常量化运算符(#)。在宏中使用的该运算符有一个特定的参数或参数列表。例如:#define PRINT(a, b) printf(#a " and " #b "\n")int
2021-08-10 15:34:31 1341
原创 使用FileZilla向ubuntu传输文件
一、配置网卡信息:使本地和虚拟机在同一个网段查看网卡信息和名称ip a方法一:打开配置文件(记得配置完重启并ping一下)sudo vim /etc/network/interface输入以下内容:# The loopback network interfacesauto loiface lo inet loopback# The primary network interfaceauto ens33iface ens33 inet s...
2021-08-05 22:22:53 1637
原创 modscan32为主设备
背景描述1、modsim做modbus设备从站2、modcan做modbus设备主站3、valid slave responses:0 也就是没有收到数据4、modbus message time out解决方案建议用modbus poll与modbus slave两个软件来做主从站测试,modscan不适合做这个,存在缺陷;...
2021-08-03 17:03:58 6342 1
原创 C++11右值引用(一看即懂)
《C++11是什么》一节中提到,在 C++98/03 标准的基础上,C++11 标准对 C++ 语言增添了约 140 个新特性。本节要讲的右值引用就是众多新特性中的一个,同时也是最重要的特性之一。很多初学者都感觉右值引用晦涩难懂,其实不然。右值引用只不过是一种新的 C++ 语法,真正理解起来有难度的是基于右值引用引申出的 2 种 C++ 编程技巧,分别为移动语义和完美转发。本节先给读者讲解什么是右值引用以及它的基本用法,至于移动语义和完美转发则放到后续章节讲解。C++左值和右值右值引用可以..
2021-07-27 23:07:05 782 1
原创 Linux系统中inode和block详解
一.inode size 定义单位:Byteinode table sample inode table是data area的索引表。Inode分为内存中的inode和文件系统中的inode,我们这里说的是文件系统中的inode。1.linux FS 可以简单分成 inode table与data area两部份。inode table上有许多的inode, 每个inode分别记录一个档案的属性与这个档案分布在哪些datablock上(也就是我们说的指针)。inode两个功能:记...
2021-07-22 19:53:47 1645
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人