自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 表达式必须具有类类型,但它具有。类定义问题

类的定义需不需要加括号,看有无参数传递,如果没有参数传递,不能加括号。test类想定义对象使用fc函数时,如果定义加括号,会编译出错。解决方法为不加括号,如果类有参数传递,才能加括号传入。如果定义对象是new的指针类型,则不会出现这种问题。报错类的类型,识别为了函数类型,所以不能调用。

2024-12-07 08:55:53 464

原创 完整http服务器

http协议被广泛使用,从移动端,pc浏览器,http无疑是打开互联网应用窗口的重要协议,http在网络应用层中的地位不可撼动,是能准确区分前后的重要协议、对http协议的理论学习,从零开始完成web服务器开发,作用下三层协议,从技术到应用,让网络难点无处遁形采用C/S模型,编写支持中小型应用的http,并结合mysql,理解常见互联网应用行为,完全理解从上网开始,到关闭浏览器的所有操作中的技术细节网络编程(TCP/IP协议,socket流式套接字,http协议)多线程技术cgi技术线程池cents

2024-11-19 22:18:59 890

原创 01 Qt概述

Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供了建议艺术级图形界面所需的功能。是完全面向对象,很容易扩展。Qt为开发者提供了一种基于组件的开发模式,可以通过简单的拖拽和组合实现复杂的应用程序:指采用图形方式显示的计算机操作用户界面,是计算机与其使用者之间的对话接口,是计算机系统的重要组成部分。如下是Android手机图形用户界面和IOS手机图形用户界面。

2024-10-08 19:20:53 928

原创 05 跳表

skiplist本质上也是一种查找结构,用于解决算法的查找问题,跟平衡搜索树和哈希表的价值是一样的,可以作为Key或者Key/Value的查找模型。那么相对比而言它的优势是什么?skiplist是由William Pugh发明的,最早出现于他在1990年发表的论文《Skip Lists: AProbabilistic Alternative to Balanced Trees》。对细节感兴趣的同学可以下载论文原文来阅读。skiplist,顾名思义,首先它是一个list。

2024-09-30 21:29:52 935

原创 04 B-树

B树:有序数组+平衡多茶树B+树:有序数组链表+平衡多叉树B*树:一颗丰满的,空间利用率更高的B+树内存查找B树没有优势:1.空间利用率低。消耗高2.插入删除数据时,分裂和合并节点,必然挪动数据3.虽然高度更低,但是在内存而言,和哈希和平衡搜索树还是一个量级mysql是目前非常流行的开源关系型数据库,不仅是免费的,可靠性高,速度也比较快,而且拥有灵活的插件式存储引擎索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式不同注意:索引是基于表的,而不是基于数据库的。

2024-09-29 23:11:05 1055 1

原创 03 LRU Cache

LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache, 内存与硬盘之间也有Cache,乃至在硬盘与网络之间也有某种意义上的Cache── 称为Internet临时文件夹或网络内容缓存等。

2024-09-27 16:21:48 462

原创 02 图结构

图是由顶点集合及顶点间的关系组成的一种数据结构:G=(V,E),其中:顶点集合V={x | x属于某个数据对象集} 是有穷非空集合E= {(x,y) | x,y属于V}或者E={,x,y属于V && Path(x,y)}是顶点间关系的有穷集合,也叫做边的集合顶点和边:图中节点称为顶点,第i个顶点记作Vi,两个顶点vi和vj相关联成称作顶点vi和顶点vj之间有一条边,图中的第k条边记作ek,ek=(vi,v)或有向图和无向图:在有向图中,顶点对是有序的,顶点对

2024-09-26 10:32:30 653

原创 01 并查集

在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于哪个集合的运算。适合于描述这类问题的抽象数据类型称为比如:公司全国招10人,西安招4人,成都3人,武汉3人,10人来自不同的地区,每个人都是一个独立的小团体,现给这些学生编号{0,1,2,3,4,5,6,7,8,9},给以下数组用来存储小集体,数组中的数字代表:该小集体中有成员的个数(负号下文解释)

2024-09-14 09:52:23 582

原创 17 连接池原理

提前建立一个连接池,这里面创建线程池,和mysql建立连接,维护一个任务队列。有任务到来时,将任务放入任务队列,任务结构是要执行的sql语句和需要的回调函数,可以将结果返回。连接池组件有hicar之类的。在网页中的mysql,首先请求进行注册,网站提取参数形成命令,mysql的服务器有很多个,中间可以搭一个软件层来选择要访问的数据库在哪个服务器,同时做负载均衡。可以设计一个mysql的连接池,提高效率。

2024-09-04 20:07:59 296

原创 16 C语言连接

初始化mysql_init()要使用库,先进行初始化如:MYSQL* mfp = mysql_init(NULL)连接数据库mysql_real_connect初始化完毕后,必须先连接数据库,在进行后续操作(mysql网络部分是基于TCP/IP的)//建立好链接之后,获取英文没有问题,如果获取中文是乱码://设置链接的默认字符集是utf8,原始默认是latin1。

2024-09-04 19:45:09 869

原创 15 用户管理

如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用mysql的用户管理张三只能操纵mytest这个库,李四只能操纵msg这个库,如果给他们root账户,就可以操纵所有库,风险太大。

2024-09-03 22:05:12 1109 1

原创 14 视图

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

2024-09-03 11:37:45 504

原创 13 隔离性

读-读:不存在任何问题,也不需要并发控制读-写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读写-写:有线程安全问题,可能存在更新丢失,比如第一类更新丢失,第二类更新丢失。

2024-09-01 17:58:51 978

原创 12 事务

事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。mysql提供一种机制,保证我们达到这样的效果,事务还规定了不同的客户端看到的数据是不同的事务就是要做或所做的事情,主要用于处理操作量大,复杂度高的数据。假设一种场景,毕业了,学校教务系统不需要你的数据,要删除基本信息,也要删除其他信息,成绩表现等。这样,就需要多条mysql语句,这些操作组合起来,就构成了一个事务。

2024-09-01 08:49:34 919

原创 11 索引

不过,现在不关心细节,逻辑自洽起来即可。索引的本质就是数据结构,叶子结点保存数据,路上节点没有,非叶子节点,不要数据,只要目录项,可以存储更多的目录项,管理更多的page,就是一个矮胖型的树,途径的路上节点减少,找到目标需要更少的io,每一个节点都有目录项,可以大大提高效率。不用加内存,不用改程序,不用调sql,只要执行正确的create index,查询速度就可能提高成百上千倍,但是查询速度的提升是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的IO,所以它的价值在于提高海量数据的检索速度。

2024-08-28 22:44:46 913

原创 10 内外连接

表的连接分为内连和外连。

2024-08-26 10:00:06 344

原创 09 复合查询

前面的查询都是对一张表进行查询,但这远远不够。

2024-08-25 23:02:45 936

原创 08 内置函数

如果是多字节字符则计算多个字节数,如果是单字节字符算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)select concat(name, ‘的语文是’,chinese,‘分,数学是’,math,‘分’) as ‘分数’ from。select replace(ename, ‘S’, ‘上海’), ename from emp;ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值。在日期的基础上加日期。在日期的基础上减日期。

2024-08-23 22:54:42 1072

原创 07 基本查询

上面select筛选出来的是表,分组后的也是表,最后显示的是对分组条件再筛选后的表。分组的目的是为了分组后方便聚合统计,指定列名,根据该列不同的数据分组,分组的条件在组内一定是相同的,可以被聚合压缩。建议:对未知表进行查询时,最好加一条LIMIT1,避免因为表中数据过大,查询全表数据导致数据库卡死,按id进行分页,每页3条记录,分别显示第1、2、3页。SELECT name, chinese, math, english, chinese + math + english 总分。

2024-08-23 12:14:02 883

原创 06 表的约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性和可预期性,从业务逻辑角度保证数据的正确性。本质是通过技术手段,倒逼程序员插入正确的数据,反过来,对于mysql,凡是插入进来的数据,一定是符合约束的。比如有一个字段是email,要求是唯一的表的约束很多,这里主要介绍如下几个:null/not null,default,comment,zerofill,primary key,auto_increment,unique key。

2024-08-19 21:39:47 866

原创 高并发内存池-TCMalloc

当前项目是实现一个高并发的内存池,它的原型是google的一个开源项目tcmalloc,全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程管理,用于替代系统的内存分配函数(malloc、free)我们这个项目式简化了之后的,模拟实现一个自己的高并发内存池,目的是学习tcmallco的精华,这种方式类似STL容器的学习,但是相比STL,代码量和复杂度都上升了很多,要有心里准备。

2024-08-19 00:07:50 1500

原创 05 数据类型

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值,而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值对应如下数字:1,2,4,8,16,32…hobby set(‘登山’,‘游泳’,‘篮球,‘武术’’), --注意,使用数字标识每个爱好的时候,想想linux权限,采用比特位和set中的爱好对应。有一个调查表votes,需要调查人的喜好,比如(登山,游泳,篮球,武术)中去选择(可以多选)(男,女)[单选]--注意,使用数字标识的时候,就是正常的数组下标。

2024-08-09 00:48:13 695

原创 04 表的操作

ALTER TABLE tablename MODIFY (column datatype [DEFAULT expr][,column datatype]…) // 修改列,需要完整定义。alter table users add assets varchar(100) comment ‘图片路径’ after birthday;在实际开发中,经常修改某个表的结构,比如字段名字,字段大小,类型,表的字符集类型,表的存储引擎等。character set 字符集,如果没有指定,以数据库的字符集为准。

2024-08-04 11:27:03 1105

原创 03 库的操作

创建数据库时有两个编码集,分为数据库编码集和校验集,编码集市数据库存储数据时使用的,椒盐基支持数据库比较使用的编码,本质是一种读取数据库中采用的编码格式。创建一个数据库,校验规则用utf8_general_ci[不区分大小写],下面的操作是创建数据库,创建person表,插入四条数据。备份有最直接的方法,将数据库文件拷贝,但是这样遇到版本不同的sql可能会出现错误,mysql提供了备份的方法。打开备份文件,里面都是数据库操作的语句,建库,建表,导入数据的语句都在里面。

2024-08-04 00:32:22 764

原创 64 epoll服务器 (ET模式)

基于LT模式修改,并加入前面的应用层计算器,实现稍完整的服务器功能1.修改tcp_socket.hpp,新增非阻塞读和非阻塞写接口2.对于accept返回的new_sock加上EPOLLET这样的选项注意:此代码暂时未考虑listen_sock ET的情况,如果将listen_sock设为ET,则需要非阻塞轮询的方式accept,否则会导致同一时刻大量的客户端同时连接的情况,只能accept一次的问题。

2024-08-03 00:40:02 1085

原创 63 多路转接epoll

当返回值大于0时说明有事件就绪,调用分配函数。例如,典型的一个需要处理上万个客户端的服务器,例如各种互联网app的入口服务器,这样的服务器很适合epoll,如果只是系统内部,服务器和服务器之间通信,只有少数几个连接,这种情况下用epoll不合适,具体根据需求和场景决定使用哪种io模型。多线程或多进程环境下,多个线程同时监听socket,当新链接请求到来,os不知道派哪个线程处理,干脆将其中几个线程都唤醒,实际上只有一个线程能成功处理accept,其他线程都失败,错误码EAGAIN,这种现象称为。

2024-08-02 00:26:25 1092

原创 62 多路转接poll

/ pollfd结构int fd;fds是一个poll函数监听的结构列表,每一个元素中,包含了三部分内容:文件描述符,监听的事件集合,返回的事件集合nfds表示数组fds的长度timeout表示poll函数的超时时间,单位是毫秒(ms),每隔多少秒检测一次,0非阻塞,-1阻塞events是用户需要关心的事件,用户告诉内核,renents是关心事件就绪情况,内核告诉用户返回结果返回值小于0,表示出错返回值等于0,表示poll函数等待超时。

2024-07-30 18:11:38 470

原创 61 多路转接select

系统提供select函数实现多路复用输入/输出模型。

2024-07-28 23:46:02 806

原创 60 阻塞和非阻塞IO

一个简单的用户输入回显功能,在用户未输入内容时,会一直阻塞住。

2024-07-27 23:18:39 393

原创 59 高级IO

理解五种io模型的基本概念,重点是io的多路转接掌握select模型,实现select版本的tcp服务器掌握poll模型,实现poll版本的tcp服务器掌握epoll模型,实现epoll版本的tcp服务器理解epoll的LT模型和ET模式理解select和epoll的优缺点对比。

2024-07-27 21:16:35 635

原创 02 数据库基础 (重点)

存储数据用文件就可以了,为什么还要数据库?文件提供了数据的存储功能,但没哟扛很好的数据管理能力:1.文件的安全性问题2.文件不利于数据查询和管理3.文件不利于存储海量数据4.文件在程序中控制不方便数据库存储介质: 磁盘 内存为了解决上述问题,设计了更有利于管理数据的东西–数据库,能更有效的管理数据。数据库的运用是衡量水平的重要指标数据库本质mysql提供了一套存储数据和服务的网络程序,数据库一般指在磁盘或内存中存储的特定结构的数据,将来在磁盘上存储的一套数据库方案。

2024-07-27 16:17:30 701

原创 58 数据链路层

数据链路层的作用:两个设备(同一种数据链路节点)之间进行传递数据以太网是一种技术,既包含了数据链路层的内容,也包含了一些物理层的内容,例如:规定了网络拓扑结构,访问控制方式,传输速率等以太网帧格式理解mac地址理解arp协议理解mtu。

2024-07-25 23:41:02 696

原创 57 网络层

理解网络层的作用,深入理解IP协议的基本原理对整个TCP/IP协议有系统的理解对TCP/IP协议体系下的其他重要协议和技术有一定的了解。

2024-07-22 19:15:30 1713

原创 01 安装

安装和卸载中,用户全部切换为root,一旦安装,普通用户也能使用初期不进行用户管理,全部用root进行,使用mysql语句。

2024-07-18 23:59:29 1027

原创 56 TCP协议

全称为“传输控制协议(Transmission Control Protocol),可以对数据的传输详细的控制在应用层定义的缓冲区是用户级缓冲区,每创建一个连接,tcp创建发送缓冲区和接收缓冲区,保证可以在发送的同时接收,做到全双工。应用层只需要将需要发送的数据交付给传输层,至于数据什么时候发送?发多少?出错怎么办?都由tcp自主决定。发送数据其实和read,write文件io操作一样,将数据拷贝到缓冲区内。

2024-07-18 17:27:53 1061

原创 55 UDP协议

udp协议采用定长报头,前8字节的端口号是发送的一方填写的,16为udp长度表示整个报文的长度,这样就可以将数据和报头分离,报文和报文之间有明显的界限划分。校验和验证数据的正确性,如果失败,直接丢弃,不通知不保证可靠性。

2024-07-15 10:45:39 480

原创 54 传输层

作用:负责数据能够从发送端传输接收端。

2024-07-14 23:35:49 400

原创 40 空间配置器(补充)

空间配置器,顾名思义就是为各个容器高效的管理空间(空间的申请与回收的),在默默的工作。虽然在常规使用STL时,可能用不到它,但原理可以了解一下有很大的帮助。

2024-07-10 10:14:53 916

原创 39 线程库

在c++11之前,涉及到多线程问题,都是和平台相关的,如windows和linux下各有自己的接口,这使得代码的可移植性差。c++11中最重要的特性就是对线程支持,使得c++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库的线程,必须包含头文件。C++11线程类函数名功能thread()构造一个线程对象,没有关联任何线程函数,即没有启动任何线程构造一个线程对象,并关联线程函数fn,args1,args2,…为线程函数的参数get_id获取线程id。

2024-07-09 17:39:44 986

原创 38 IO流

c语言中,想要将一个整形变量的数据转化为字符串格式,怎么做1.使用itoa()函数2.使用sprintf函数但是两个函数在转化时,需要先给出保存结果的空间,空间给多大,不好界定,而且转化格式不匹配时,可能会得到错误的结果甚至程序崩溃//c++如果是sql2+=的对象是自定义结构体,不支持这个操作。想把结构体转为字符串可以对每个成员单独转,有些麻烦c++可以使用stringstream避开此问题。必须要包含头文件。

2024-07-06 20:36:03 1058

空空如也

空空如也

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

TA关注的人

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