- 博客(49)
- 收藏
- 关注
原创 HTTP、WebSocket和Socket.IO
Socket.IO 是一个封装了 Websocket、基于 Node 的 JavaScript 框架,包含 client 的 JavaScript 和 server 的 Node。其屏蔽了所有底层细节,让顶层调用非常简单。另外,Socket.IO 还有一个非常重要的好处。其不仅支持 WebSocket,还支持许多种轮询机制以及其他实时通信方式,并封装了通用的接口。
2023-02-13 17:30:46 1379 1
原创 基于go语言实现RestFul交互
RESTFUL(Representational State Transfer)是一种和,基于HTTP或HTTPS,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设计的风格。
2023-02-10 17:29:56 2003
原创 Mysql事务详解
事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据正如我们上面所说,一个MySQL数据库,可不止你一个事务在运行,同一时刻,甚至有大量的请求被包装成事务,在向MySQL服务器发起事务处理请求。而每条事务至少一条SQL,最多很多SQL。
2022-08-22 21:06:21 379
原创 Mysql索引
不用加内存,不用改程序,不用调sql,只要执行正确的create index,,查询速度就可能提高成百上千倍, 是以插入、更新、删除的速度为代价,写操作,增加了大量的IO。
2022-08-21 23:32:03 580
原创 高效IO模型
IO过程总体分为两步,第一步等接收端->接受缓冲区等待数据的递达,发送端->等待发送缓冲区有可用空间,将发送数据放入发送缓冲区;第二步拷贝接收端->将递达的数据从内核空间拷贝到用户空间的接受缓冲区,发送端->将发送的数据从用户空间的发送缓冲区拷贝至内核缓冲区;所以高效IO本质是单位时间内拷贝的频率很高,重点是缩短等待的时间。...
2022-07-31 18:49:53 293
原创 【编程题】迷宫问题
定义一个二维数组NM,如55数组如下所示:它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或者竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线,入口点为[0,0],既第一格是能走的路。输入描述:输出描述:示例:我们可以使用回溯法的方式实现寻找最短路径。具体步骤为:首先将当前点加入路径,并设置为已走判断当前点是否为出口,是则输出路径,保存结果;跳转到4依次判断当前点的上、下、左、右四个点是否可走,如果可走则递归走该点当前点推出路径,设置为可走具体代码...
2022-06-18 21:13:25 1184
原创 C++~继承
文章目录一、继承的概念与定义1.1 继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承关系和访问限定符1.2.3 继承基类成员访问方式的变化二、基类和派生类对象赋值转换三、继承中的作用域四、子类的默认成员函数五、继承与友元六、继承与静态成员七、复杂的菱形继承及菱形虚拟继承、7.1 菱形继承和虚继承7.2 虚继承的原理八、继承和组合一、继承的概念与定义1.1 继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员子在保持原有类特性的基础上进行
2022-04-16 20:35:24 347
原创 C++~类和对象(三)
前言这是类和对象系列的最后一章,这里主要是对类和对象一些语法上的补充,之后会使用这些语法在后续的各种类和对象当中,所以类和对象在这里仅仅算是开始~一、再谈构造函数1.1 构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值class Date{public: Date(int year, int month, int day) { _year = year; _month = month; _day = day; } private:
2022-04-14 22:03:44 366
原创 C++~类和对象(二)
前言前面介绍了类的定义和基本的思想,这篇文章接着上篇文章介绍类中的相关内容一、类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。而空类中并不是什么都没有,任何一个类在什么都不写的情况下,都会自动生成下面6个默认成员函数class Date {};二、构造函数2.1 概念构造函数是一个特殊的成员函数,名字和类名相同,创建类类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次class Date{ public: void Se
2022-04-13 22:46:48 552
原创 C++~类和对象(一)
前言类和对象是基于面向对象的语言的精髓所在,之前的C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。而面向对象,关注的是对象,将一件件事情拆分成不同的对象,靠对象之间交互完成一、类C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数struct Student{ void SetStudentInfo(const char* name, const char* gender, int age) { strcpy(_name,
2022-04-10 19:20:27 1031
原创 C++基础(C的补充)
前言C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生一、C++关键字(C++98)C++总计有63个关键字,C语言有32个关键字二、命名空间使用在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能
2022-04-09 21:25:55 1416
原创 C语言实现排序算法
前言这里实现几种常见的排序算法:一、插入排序把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列1.1 直接插入排序当插入第i个元素时,前面的i个元素已经排好序,此时array[i]与array[i-1],array[i-2],…进行比较,找到插入位置将array[i]插入,原来位置上的元素顺序后移具体代码实现:typedef int ISType;void InsertSort(ISType* nums, int siz
2022-04-07 21:55:53 2910
原创 C实现二叉树链式结构
前言上篇文章所实现的堆是二叉树的顺序结构,本片文章主要实现二叉树的链式结构,链式结构比较复杂,本片文章主要使用递归来实现遍历二叉树一、二叉树回顾一下二叉树的概念,二叉树是:空树非空:根节点,根节点的左子树、根节点的右子树组成的二、二叉树的遍历2.1 前序、中序以及后序遍历学习二叉树结构,最简单的方式就是遍历。所谓二叉树遍历(Traversal)是按照某种特定的规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次。访问结点所做的操作依赖于具体的应用问题。 遍历是二叉树上最重要
2022-03-31 21:46:15 260
原创 C语言实现堆
文章目录前言一、什么是树1.1 树的相关概念1.2 树的表示1.4 树在实际中的应用二、什么是二叉树2.1 特殊的二叉树2.2 二叉树的性质三、堆3.1 堆的结构3.2 堆的实现3.2.1 堆向下调整算法3.2.2 建堆3.2.3 堆的插入3.2.4 堆的删除3.2.5 数据结构和接口(声明)3.2.6 接口函数的定义(实现)3.2.7 堆的调用3.3 堆的应用3.3.1 堆排序3.3.2 TOP-K问题前言在介绍堆之前需要介绍一下树和二叉树的概念,因为堆是一种数据结构,是将集合中所有的元素按完全二叉树
2022-03-29 20:12:26 1888
原创 C实现栈和队列
文章目录前言一、栈1.1栈的概念和结构1.2 栈的实现1.2.1 数据结构和接口(声明)1.2.2 接口函数的定义(实现)1.2.3 栈的调用二、队列2.1 队列的概念和结构2.2 队列的实现2.2.1 数据结构和接口(声明)2.2.2 接口函数的定义(实现)2.2.3 队列的调用前言本片文章在之前文章所写的顺序表、链表的基础上,再介绍两种数据结构:栈和队列这两种数据结构需要用顺序表或链表去实现它们各自的功能一、栈1.1栈的概念和结构栈是一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作
2022-03-24 20:20:23 2279
原创 C实现链表
文章目录前言一、链表1.1 链表的概念和结构1.2 链表的分类二、无单非链表的实现2.1 数据结构和接口2.2 接口函数的定义(实现)2.3 接口的调用3.带双循链表的实现3.1 数据结构和接口3.2 接口函数的定义(实现)3.3 接口的调用4. 顺序表和链表的区别4.1 顺序表的优缺点4.2 链表的优缺点前言之前的文章用C实现了顺序表,而顺序表有一些缺点:中间/头部的插入删除,时间复杂度为O(N)扩容需要申请新空间,拷贝数据,释放旧空间,会有不小的性能消耗具体扩容时都是当前空间的二倍进行扩容,
2022-03-23 16:56:39 2626
原创 C实现顺序表
文章目录前言一、顺序表1.1 头文件1.2 接口实现1.3 运行结果二、例题前言线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…一、顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:静态顺序表:使用定长数据存储元素动态顺序表:使用动态开辟的数组存储1.1 头文件#pragma once
2022-03-21 22:51:40 206
原创 C的程序编译
文章目录前言一、详解编译+链接1.1 翻译环境1.2 编译1.3 运行环境二、预处理详解2.1 预定义符号2.2 #define定义标识符2.3 #define定义宏2.4 #define 替换规则2.5 #和##2.6 宏与函数对比2.7 #undef2.8 条件编译三、文件包含3.1 头文件被包含的方式:3.2 嵌套文件包含四、其他预处理指令前言在VS编译中,Debug模式下会生成.pdb文件和.exe文件,DPB文件主要存储了VS调试程序时所需要的基本信息,主要包括源文件名、变量名、函数名、FPO
2022-03-20 19:49:57 1200
原创 C语言的文件操作
文章目录前言一、什么是文件1.1 程序文件1.2 数据文件二、文件的打开和关闭2.1 文件指针2.2 文件的打开和关闭三、文件的顺序读写3.1 对比一组函数:四、文件的随机读写4.1 fseek4.2 ftell4.3 rewind五、文本文件和二进制文件六、文件读取结束的判定6.1 被错误使用的feof6.2 文件缓冲区前言之前所使用的操作,使得数据都是在运行时产生在内存中,所以当程序结束后数据就不会在存在。使用文件就可以将数据存放在电脑的硬盘上吗,做到数据的持久化。一、什么是文件一般谈的文件有两
2022-03-19 17:13:16 84
原创 C的动态内存管理
前言之前写的C代码中,如:变量、数组在内存申请的空间都是固定大小的,但是在实际应用中,所以需要的空间大小在程序运行的时候才能知道,这时候就需要一个动态内存开辟了一、动态内存函数1.1 malloc和freeC语言提供了一个动态内存开辟的函数,包含头文件stdlib.h:void* malloc(size_t size);这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查返回类型是void* ,所以具体使
2022-03-18 15:46:26 98
原创 C的自定义类型
前言本篇文章主要介绍C语言的一些自定义类型,比如:结构体、枚举、联合数组在存放数据时,数据类型要求单一,而结构体可以存放不同类型的数据一、结构体结构是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量1.1 结构体的声明例如描述一个学生struct Stu{ char name[20];//名字 int age; //年龄 char sex[5]; //性别 char id[20];学号}; 例如定义一个二叉树struct TreeNode{ int
2022-03-17 21:08:54 86
原创 字符函数和字符串函数~ C
文章目录前言一、strlen1.1 strlen的使用1.2 strlen的实现二、strcpy和strncpy2.1 strcpy和strncpy的使用2.2 strcpy和strncpy的实现三、strcat和strncat3.1 strcat和strncat的使用3.2 strcat和strncat的实现四、strcmp和strncmp4.1 strcmp和strncmp的使用4.2 strcmp的实现五、strstr5.1 strstr的使用5.2 strstr的实现六、strtok6.1 strt
2022-03-16 13:56:40 674
原创 交换整数二进制位的奇数位和偶数位
例:11 11的二进制位为: 0000 0000 0000 0000 0000 0000 0000 1011 交换后: 0000 0000 0000 0000 0000 0000 0000 0111思路: 可以先将11的奇数位保留下来,偶数位置为0: 0000 0000 0000 0000 0000 0000 0000 0001 进行交换,奇数位放到偶数位上 整体左移1 0000 000
2022-02-28 16:20:52 329
原创 atoi函数的使用和实现
文章目录一、atoi函数的定义二、atoi函数的使用三、atoi函数的实现一、atoi函数的定义int atoi(const char* string)库函数包含头文件<stdlib.h>将字符串中的数字字符转换为int类型并返回空字符返回0数字字符前有空白字符跳过数字字符前有+、-字符做整数的正、负处理数字字符前有其他字符返回0二、atoi函数的使用#include<stdio.h>#include<stdlib.h> int main
2022-02-28 16:01:48 7847
原创 offsetof函数的使用和宏实现
文章目录一、offsetof函数的定义二、offsetof函数的使用三、用宏实现offsetof一、offsetof函数的定义size_t offsetof(structName,memberName);引用头文件<stddef.h>返回结构体中一个成员在该结构体中的偏移量二、offsetof函数的使用#include<stdio.h>#include<stddef.h>struct S{ int a; char b; int c; char
2022-02-28 14:10:42 2431
原创 qsort()函数的实现
文章目录一、qsort函数二、qsort函数的使用三、通过冒泡排序实现qsort函数一、qsort函数 void qsort(void* base,size_t num,size_t width, int(_cdecl* compare)(const void* elem1, const void* elem2));包含头文件为#include<stdlib.h>二、qsort函数的使用qsort函数的作用:快速排序qsort函数的参数:无类型指针,
2022-02-19 23:14:28 735 1
原创 深入指针-C
文章目录1.字符指针2.指针数组3.数组指针3.1 数组指针3.2 数组指针的使用4.数组传参和指针传参4.1 一维数组传参4.2 二维数组传参4.3 一级指针参数4.4 二级指针参数5.函数指针6.函数指针数组7.指向函数指针数组的指针8.回调函数1.字符指针众所周知,字符指针变量是用来存放字符类型数据的地址,字符指针变量为char*,所占内存大小为 4个字节。一般使用char*:int main(){ char ch = 'w'; char* pc = &ch; return 0
2022-01-12 21:59:33 586 3
原创 刨析数据在内存中的存储
一、数据类型介绍基本的内置类型: char //字符数据类型-1个字节 short //短整型-2个字节 int //整型-4个字节 long //长整型-4-8个字节 long long //更长的整型-8个字节 float //单精度浮点数 double //双精度浮点数类型的意义:使用这个类型开辟内存空间的大小(大小决定了使用范围)如何看待内存空间的视角1.1 类型的基本归类
2021-12-16 20:33:32 136
原创 C~结构体知识
文章目录一、结构体的声明1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化二、结构体成员访问2.1 结构体变量访问成员2.2 结构体指针访问变量成员三、结构体传参一、结构体的声明1.1 结构的基础知识结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量1.2 结构的声明struct Stu{ char name[20]; //结构成员 int age; char sex[5];};1.3 结构成员的类型结构的成员
2021-12-02 12:13:25 205 2
原创 C~指针知识
一、指针是什么?指针理解的两个要点:指针是内存中一个最小单元(字节)的编号,也就是地址平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量内存指针变量可以通过&(取地址操作符)取出变量的起始内存地址,把地址可以存放在一个变量中,这个变量就是指针变量#include<stdio.h>int main(){ int a = 10; //在内存开辟一个整型空间(4个字节),将10初始化给这个空间 int* p = &a;//对变量a使用&
2021-12-02 11:49:35 500
原创 交换变量(C语言)
一、交换两个变量的三种方法 int x = 3; int y = 7;1.使用第三变量 #include<stdio.h> int main() { int x = 3; int y = 7; int temp = 0; //创建一个临时变量 //交换变量 temp = x; x = y; y = temp ; return 0; } 2.使用和运算 int main() { int x
2021-11-29 18:36:21 1507 1
原创 C~操作符知识
文章目录一、操作符分类1.算术操作符2.移位操作符3.位操作符4.赋值操作符5.单目操作符6.关系操作符7.逻辑操作符8.条件操作符9.逗号操作符10.下标引用、函数调用和结构成员二、表达式求值1.隐式类型转换2.算术转换三、操作符的属性1.操作符的优先级、结合性和求值顺序2.问题表达式一、操作符分类1.算术操作符注意: 1. 除了`%`操作符外,其他几个操作符可以作用于整数和浮点数 2. 对于`/`操作符如果两个操作数都为整数,执行整数除法。只要有浮点数执行的就是浮点数除法 3. `
2021-11-29 17:18:22 4306
原创 C-数组知识
一、 一维数组数组是存放同类型元素的集合1.创建一维数组数组类型 数组名[常量] = {value1,value2,... } ;int main(){ char arr1[20] = {0}; //创建字符数组和20个字符空间,并初始化 int arr2[10] = {0}; //创建整型数组和10个整型空间,并初始化 int arr3[] = {1,2,3,4,5}; ////创建整型数组和5个整型空间,并完全初始化 char arr4[] = "abcde"; //创
2021-11-13 21:37:35 793 6
原创 C实现递归
一、递归程序调用自身的编程技巧称为递归递归通常可以将一个大型复杂的问题层层转换为一个与原问题相似的规模较小的问题来求解递归的主要思想方式在于:把大事化小二、递归的两个必要条件存在限制条件,当满足这个限制条件的时候,递归便不再继续每次递归调用之后越来越接近这个限制条件递归时不满足上述条件,很容易报错:stack overflow(栈溢出)系统分配给程序的栈空间是有限的,但是出现了死循环,或者(死递归),会导致一直开辟栈空间,最终产生栈空间耗尽的情况,发生栈溢出错误。三、递归练习1.顺序
2021-11-10 19:42:21 932 6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人