自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 浅谈MySQL

MySQL介绍MySQL是目前非常流行的开源关系型数据库,不仅是免费的,可靠性高,速度也比较快,而且拥有灵活的插件式存储引擎。MySQL是一个C/S模型,启动MySQL后,本地会启动mysqld服务进程,客户端通过mysql连接服务器,进行数据存储查询。存储引擎存储引擎是数据库系统管理数据,存储数据的核心方法,MySQL核心就是插件式存储引擎,支持多种存储引擎,本文主要介绍两种存储引擎:MyISAM、InnoDB。MySQL在5.58版本之前默认使用MyISAM,从5.58开始默认使用InnoDB,

2020-10-03 10:08:59 201

原创 在线OJ系统

在线OJ系统模块划分:在线译器模块题目管理模块在线编译器模块将代码通过网页提交到服务器上使用第三方库 cpp-httplib 搭建http服务器调用gcc、g++编译代码

2020-08-10 15:08:51 1697

原创 排序算法之堆排

堆的概念如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆堆的性质堆中某个节点的值总是不大于或不小于其父节点的值堆总是一棵完全二叉树堆排算法分析1、创建堆例如,给出

2020-07-10 09:48:28 160

原创 C++模板

1.泛型编程如何实现一个通用的 swap 函数呢?void Swap(int &a, int &b){ int tmp = a; a = b; b = tmp;}void Swap(double &a, double &b){ double tmp = a; a = b; b = tmp;}...使用函数重载可以实现,但有以下缺点:重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数代码的可维护性比较

2020-07-07 09:49:07 354

转载 C/C++程序内存的分配

一、一个C/C++编译的程序占用内存分为以下几个部分:栈区(stack):由编译器自动分配与释放,存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等。其操作类似于数据结构中的栈。堆区(heap):一般由程序员自动分配,如果程序员...

2020-07-06 10:08:54 119

原创 四个好用的网络字节序转换函数

端口转换函数htons()函数原型:uint16_t htons(uint16_t hostshort);作用:将本地端口字节序转换为网络字节序ntohs()函数原型:uint16_t ntohs(uint16_t netshort);作用:将网络端口字节序转换为本地字节序注意:使用上面函数需要包含头文件 #include <arpa/inet.h>IP地址转换函数inet_addr()函数原型:in_addr_t inet_addr(const cha

2020-06-26 20:21:13 878

原创 IO多路转接之EPOLL(使用EPOLL实现TCP服务器)

epoll按照man手册的说法: 是为处理大批量句柄而作了改进的poll.它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44)它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法.epoll相关的系统调用epoll_create()int epoll_create(int size);创建一个epoll句柄自从linux2.6.8之后,size参数是被忽略的

2020-06-26 20:00:25 269

原创 IO多路转接之select(使用select实现TCP服务器)

select函数原型#include<sys/select.h>select(int nfds, fd_set *readfds, fd_set * writefds, fd_set *exceptfds, struct timeval *timeout);nfds代表最大文件描述符值+1readfds、writefds、exceptfds分别代表可读、可写、异常事件集合timeout代表等待时间timeout参数:NULL:select阻塞等待0:仅检测文件描述符状态,

2020-06-24 22:38:29 232

原创 打开网页的时候到底发生了什么?

当在浏览器中输入一个URL后到底发生了什么?浏览器做了什么组织HTTP请求域名解析内核协议栈做了什么建立连接封装数据传输数据CDN加速网络服务当输入 https://www.baidu.com/index.html ,浏览器就会进行URL解析,https代表web服务器,www.baidu.com是web服务器的域名,index.html是要请求的资源;浏览器根据解析结果会组织一个http请求:GET /index.html HTTP/1.1 <!-- 请求行 -

2020-06-20 12:00:35 389

原创 网络层&&数据链路层

1.网络层网络层功能可以总结为:地址管理路由选择1.1 IP协议4位版本号:指定IP协议版本,例如IPv4、IPv64位首部长度:表示IP头部的长度是多少个32bit,也就是length * 4 字节,4位能表示最大数为15,所以IP头部最大为 15 * 4 = 60 字节8位服务类型:前3位已经弃用,4位TOS字段,1位保留位(必须置0),4位TOS分别表示:最小延时、最大吞吐量、最高可靠性、最小成本。四者相互冲突,只能选择一位16位总长度:IP数据报整体占多少个字节16位标识:

2020-06-17 23:16:36 637

原创 初识UDP/TCP协议

1.UDP协议1.1 UDP协议格式1.2 UDP协议特点无连接:知道对端IP和端口号就可以传输数据,无需建立连接不可靠:没有确认应答、超时重传等机制面向数据报:不够灵活的控制读写数据的次数和数量1.3 UDP缓冲区UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,由内核将数据传输给网络层协议进行后续传输UDP具有接受缓冲区,但并不保证接受数据的顺序;如果缓冲区满了,数据就会被丢弃1.4 基于UDP的应用层协议NFSDNSDHCPTFTP2. TCP

2020-06-13 09:58:40 339

原创 初识HTTP协议

HTTP(超文本传输协议)URLURL就是平常说的 “网址”,其组成如下:协议方案名称://用户名:密码@服务器IP地址:端口/请求资源的路径?查询字符串#片段标识符urlencode:对提交字符串中的特殊字符进行转义编码,防止产生歧义urldecode:对已编码的URL进行解码HTTP协议格式HTTP协议格式分为四个部分:首行、头部、空格、正文首行:请求首行:由请求方法 、URL、协议版本三部分组成,由空格间隔,并且以 \r\n结尾请求方法:POST/GET/HEAD/PUT/DEL

2020-06-12 16:54:10 183

原创 单例模式(饿汉懒汉方式实现)

饿汉方式template<class T>class Singletion{public: static T *GetInstance() { return &data; }private: static T data;}只要通过Singletion这个包装类来使用T对象,则进程中只有一个T对象实例懒汉方式template<class T>class Singletion{public: static T *GetInstance()

2020-06-12 12:29:07 107

原创 MySQL学习总结(三)

1.复合查询使用oracle 9i的经典测试表进行测试1.1 多表查询案例:显示雇员名、雇员工资以及所在部门的名字select EMP.ename, EMP.sal, DEPT.dname from EMP, DEPT where EMP.deptno = DEPT.deptno;显示部门号为10的部门名,员工名和工资select dname,ename,sal from EMP, DEPT where EMP.deptno=DEPT.deptno and DEPT.deptno=1

2020-05-29 16:08:31 181

原创 MySQL学习总结(二)

1.表的约束真正约束字段的数据类型,但数据类型约束会很单一,需要一些额外的约束,更好的保证数据的合法性1.1 空属性null(默认)not null注意:数据库默认字段基本都是空的,在实际开发中,尽可能保证字段不为空,空数据无法参与运算1.2 默认值某一种数据会经常性的出现某个具体的值,可以在一开始使用 default 指定好,在需要的时候直接使用默认值mysql> create table t1( name varchar(20) not null, -> gend

2020-05-28 22:53:55 150

原创 MySQL学习总结(一)

1.基本使用1.1链接服务器mysql -h 127.0.0.1 -P 3306 -u root -p注意:如果没有写 -h 127.0.0.1默认是连接本地如果没有写 -P 3306 默认是连接3306端号2.库的操作2.1创建数据库语法:CREATE DATABASE [IF NOT EXISTS] db_name[create_specification [, create_specification]…]create_specification:[DEFAULT]

2020-05-26 17:18:26 201

原创 二叉树非递归前序中序后序层序遍历

我家门前有两棵树,一棵是二叉树,另一棵也是二叉树 QAQ先看一棵树前序遍历:ABDECFG中序遍历:DBEAFCG后序遍历:DEBFGCA层序遍历:ABCDEFG本文只实现非递归遍历,并且利用C++提供的栈和队完成遍历树节点的定义:typedef int DataType;struct TreeNode{ struct TreeNode *left; struct...

2020-02-20 16:07:23 189

原创 C++多态

声明:本篇博客中的所以代码及解释都是在vs2013下的x86程序中实现的概念多态:多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。可以理解为去完成某个行为,当不同的对象去完成时,会产生出不同的状态定义及实现在继承中构成多态有两个条件:必须通过基类指针或者引用调用虚函数被条用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写那什么是虚函数,什么是重写呢?虚函...

2019-12-26 16:30:51 107

原创 C++中的继承

继承1. 概念及定义1.1 概念继承机制是面向对象程序设计使代码可以复用的重要手段,它允许程序员在 保持原有类特性的基础上进行扩展,增加功能,产生的新类,叫派生类。继承呈现了面向对象程序设计的层次结构,继承是类设计层次的复用1.2 定义class Base{};class Derived : public Base//派生类以public方式继承基类{};注意:class默认...

2019-12-23 17:38:36 111

原创 二叉搜索树的插入与删除

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2019-12-22 20:50:20 272

原创 C++中string类的模拟实现

string类中涉及资源管理,若使用默认构造,拷贝构造等函数,可能会出现内存泄漏的问题,所以用户必须自定义这些函数。以构造函数,拷贝构造函数,赋值运算符重载,析构函数为例:传统写法:#include<iostream>#include<string.h>class string{public: //构造函数 string(char *str = ""...

2019-11-03 14:02:43 83

原创 C++类与对象2

构造函数作用:构造初始化函数特性:名字与类名相同无返回值在对象的生命周期内只调用一次若用户未显示定义,则编译器会调用默认构造函数创建类对象时编译器自动调用可以重载class Date{public: Date()//空构造函数,也可以是默认构造函数 {} Date(int year, int month, int day)//带参构造函数 { _year =...

2019-10-22 10:46:12 63

原创 C++类与对象1

类的定义C语言中结构体的定义:struck struckname{ ...//结构体成员变量};C++中类的定义:class classname{ ...//结构体成员变量和函数 };C++类中,可以定义函数,而C语言结构体中无法定义函数类的访问限定符与封装访问限定符访问限定符publicprotectedprivatepublic 修饰的成员可在类外被直接访问...

2019-09-26 10:20:00 57

原创 C++入门

命名空间有些函数,变量存在于全局作用域中,可能会发生冲突,所以引入命名空间,命名空间是对标识符的名称进行本地化,以避免命名冲突或污染。namespace N{ //....}注意:命名空间内部可以定义变量也可以定义函数命名空间可以嵌套namespace N1{ namespace N2 { //... }}命名空间的使用有三种方式:加命名空间及...

2019-09-24 22:09:35 69

原创 c语言 求两个数的平均值

方法一两个数相加,除以2求平均值这种方法最直观,但存在问题,a,b在计算机内存储有限,当a,b很大时可能会出现溢出。方法二思路:计算a,b差值,除以2,再加上a或b就是a,b的平均值。方法三思路:我们通过一个列子推导6的二进制为:0000 0000 0000 0000 0000 0000 0000 01104的二进制为:0000 0000 0000 0000 0000 000...

2019-04-23 22:08:11 12551

原创 c语言操作符总结

1>分类:算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式2>算术操作符操作符功能+加-减*乘/除%求余数(取模)3>移位操作符操作符功能<<左移操作符>>右移操作符左移操作符规则:左边抛弃

2019-04-16 00:05:32 69

空空如也

空空如也

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

TA关注的人

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