自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux网络编程2(理解局域网)

暂且不关心这个,先看看网络的发展吧,随着计算机的逐渐普及,很多人都想把自己电脑里的东西分享给其他人,没有网络的时候,可以靠U盘来拷贝,但是这样分享资源的时候,还要拿着U盘跑来跑去,效率太低。如果两个电脑之间可以拉一根线,通过这根线把数据传过去,就没这么麻烦了,如果你这么做了,那么恭喜你,你已经构成了最简单一个网络,如下图。我们平时有朋友,有亲人,如果仅仅两个人相互分享,那也太局限了,那其它人也想加入分享圈怎么办呢?没有关系,我们把网线延长一点,再接到新加入的电脑就可以了。如下图。

2024-08-17 17:04:37 543

原创 英语语法之句法(一)

英语语法可能是很多人童年的噩梦,笔者就是其中之一,从小学学到高中,这么多年从来没有理解过英语语法,什么谓语,非谓语,副词,状语,等等概念混淆在一起,傻傻分不清。大家仔细看,这和中文有很大的不同,中文无论是一本书还是多本书,都是“书”这个字,但是英文不一样,英文的book单数和复数之间是有形势变化的,这些针对词的变化规则就是英语中的词法。要想在实际生活中应用英语,就无法避开英语语法的学习,语法是母语人士习惯性表达的一种汇总,为了方便交流,大家都遵照相同规则说和写,就形成了固定的语法规则。

2024-02-13 00:54:25 1359

原创 C++11新特性(lambda,可变参数模板,包装器,bind)

这样看其实也能够很好理解lambda表达式,我们不是嫌弃仿函数自己手动封装类太麻烦了嘛,lambda表达式就是让编译器自动帮我们封装,我们只要把函数的具体实现传过去就可以了,不过lambda表达式的功能比仿函数还是要强大很多的,我们后面慢慢说先看看上面程序的运行结果lambda表达式会自动帮我们推导返回值的类型,所以我们没有在lambda表达式中加上返回值的类型,如果你非想要指定具体的返回值类型,使用表达式中 ->returntype参数。

2023-10-13 19:59:04 391

原创 C++11新特性(右值引用,万能转发)

由运行结果可知,mystring这个匿名对象如果作为参数传递给list,在没有移动构造的情况下,就是使用拷贝构造把这个匿名对象拷贝给list中的元素值,然后自身销毁,有了右值的概念,我们一眼就能看出这个匿名对象是一个将亡值,根本没有必要去拷贝,直接把资源转移给list中的元素值,下图是加上移动构造和移动赋值后的调用情况。这种写法,看似没有拷贝一次,但是别忘了,tmp是在test这个栈帧里创建的,返回值返回后,该栈帧即销毁,tt在引用一块已经销毁的空间,这是绝不允许的。

2023-10-12 00:01:35 380

原创 C++11新特性(语法糖,新容器)

所以C++中请使用nullptr来表示空指针。

2023-10-05 16:49:56 367

原创 C++基础语法(多态)

在一些C++书籍上是没有多态概念的,而是采用虚函数来称呼,多态一词多用于Java语言,国内叫习惯了也就这么叫了。事实上,有很多花里胡哨的名词实际上指的都是同一个东西,多是翻译的原因。但多态这个翻译,其实还挺应景,缺点是可能让同笔者一样的新手感到抽象晦涩在具体讲述多态之前,回忆一下继承中的相关概念,还记得在继承中提到的隐藏/重定义概念吗?子类和父类之间的成员如果同名的话,那么就会构成隐藏关系,而且我们也提到,子类是可以切片赋值给父类的,这个过程不涉及到类型转换。

2023-10-04 15:47:08 179

原创 C++基础语法(继承)

继承(inheritance)是类的三大特性之一,继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用继承的概念并不难理解,接下来我们举个例子来看看,继承是如何实现代码的复用的。

2023-10-02 17:06:03 285

原创 Linux系统编程6(线程互斥,锁,同步,生产消费模型)

我们前面提到过,在生产者和消费者模型中,生产者和消费者之间要有互斥和同步的关系,互斥解决方法就是加锁嘛,条件变量就是解决同步的一种常用的方法之一,上面的模型中,超市就是公共资源,消费者消费资源,生产者生产资源,当公共资源没有了,不满足消费者的条件,那么此时消费者不能再来了,老实的挂起等待,反之同理。顾客作为一个单独的个体,其购买的产品量是很低的,如果每个顾客都来,那每次开机就生产那么一点点东西,赚得钱可能连电费都付不起,同样的,顾客想去买东西,还得等你工厂开机生产,等到生产完,可能天都黑了。

2023-09-15 17:24:38 399

原创 Linux系统编程5(线程概念详解)

按照课本上的定义,线程就是进程内部的执行流,有多个执行流就意味着一个进程可以同时进行多个操作,比如视频软件,同时具备播放视频和下载视频的功能,如果只有一个执行流,那么在播放视频时就不能同时下载视频,因为播放视频和下载视频的代码是不同的以前我们一直认为进程是CPU的调度单位,现在我们要改变这个看法,被CPU调度意味着被CPU执行,也就是一个执行流,一个进程里可以有多个线程,线程才是CPU的调度单位。

2023-09-02 17:26:44 1554

原创 Linux网络编程1(网络基础定义)

网络早已成为我们日常生活的一部分,经常使用互联网的人很难长时间内离开互联网。你是否好奇你的电脑仅仅插上一根网线,你发给朋友的聊天信息就能准确无误的到达朋友的手机或者电脑上,你是否好奇为何你仅仅在浏览器输入一个网址,点击一下enter,网页图片和视频就展现在你的眼前,这一切的背后究竟是什么原理?在网络编程的系列学习中,我们将逐渐揭开网络神秘的面纱,不仅要懂网络,还知道如何编写网络程序。

2023-08-23 16:59:22 200

原创 Linux系统编程4(进程信号详解)

在进程间通信这篇文章中,我们学习过信号量这个概念,这里跟大家说一下,信号量和信号完全是两个概念,两者之间没有什么关系。那信号是什么呢?生活中我们常见的信号有信号弹,有红绿灯,看到信号弹,我们就知道了接下来要怎么行动了,看到红绿灯,我们就知道接下来是该走还是该停了,包括各位同学女朋友的脸色,脸色一变就能明白接下来该是讲道理的时间了总结一下信号,信号不仅仅是一种现象,还包括出现这种现象接下来该如何操作的方法,是对即将或者可能出现的某种现象的应对。

2023-08-18 07:15:00 247

原创 Linux系统编程3(进程间通信详解)

进程申请公共资源也是如此,首先公共资源是有限的,信号量就是用来记录公共资源数目的,进程要想访问公共资源,首先要先申请信号量,这就要求信号量本身就得能被所有的进程看到,而能被所有进程看到和使用的资源不就是公共资源嘛,因此信号量本身就是公共资源,其次,进程每申请一份资源,信号量的数目就会--,进程每释放一份资源,信号量的数目就会++,这就要保证++,--操作必须是原子性的,要么完成,要么失败。如上图,这是两个普通进程A和B在系统上工作的原理图,现在想让进程A和B之间进行通信,共享内存的方法是如何做的呢?

2023-08-10 11:04:27 463 1

原创 MySQL数据库操作篇5(索引的原理及用法)

通过前面的学习,我们了解过,在数据库中创建一个表,我们就可以往表中插入数据,然后需要数据的时候在表中查找就行了,普通用户可以直接使用数据库设计者提供的功能,不用关心如何实现查找,作为程序开发人员,我们需要关心这个问题。前面我们讲了很多MySQL中查找数据的方法,但是这些查找总得有个底层的算法实现吧,我们最容易想到的查找算法是遍历,把表中所有的数据都遍历一遍,不就可以查到想要的数据了嘛。

2023-07-24 16:20:46 792

原创 MySQL数据库操作篇4(内置函数&连接查询&子查询)

接下来我们看一下稍微有些麻烦的函数,它们是如何操作的先看看date_add()的用法,这个是往一个给定的日期中增加某个日期单位的数目,然后返回增加后的日期,例如给定一个日期为'2023-7-10',给这个日期加上6天,返回6天后的日期具体操作语句如下:

2023-07-17 22:16:18 467

原创 MySQL数据库操作篇3(聚合函数&分组查询)

目录聚合函数分组查询

2023-07-16 01:26:47 958

原创 MySQL数据库操作篇2(表的增删查改&约束)

目录表的基础插入表的约束条件 1.not null约束2. default约束 3.主键约束 复合主键 4.唯一键主键和唯一键的区别 5.comment 约束6.zerofill7. 自增长(auto_increment)8.外键 表的增删查改表中数据的查找表中数据的删除操作 表中数据的更新操作

2023-06-24 02:14:17 1020

原创 Mysql数据库操作篇1(数据类型,库&表修改操作)

当我们的表的编码是utf8时,varchar(L)的参数L最大值是65532/3=21844,因为utf8中,一个字符最多占用3个字节,如果编码是GBK,varchar(L)的参数L最大是65532/2=32766(因为gbk中,一个字符占用2字节)这种“变种”的UTF-8编码被称为“MySQL UTF-8”或“utf8mb3”float的精度损失是比较严重的,默认情况下的float小数位的精度仅为2位,最大精度位数约为7位,如果数据对小数位要求比较高,那么不建议使用float,选择使用decimal。

2023-06-17 17:33:49 2418

原创 数据库入门下篇(如何安装和登录MYSQL数据库)

(注意在sql语句结束后,要在语句末尾加上;表示语句结束)

2023-06-16 21:40:23 1546

原创 数据库入门上篇(数据库基础概念知识)

(具体的一个桌子就是一个实体,但这并不意味着实体必须在现实世界中有具体的形状,实体也可以是个抽象的物体)那么回到上述问题,要想在计算机中存储标明每个桌子,我们就得观察这些桌子的特征了,抽象出能表示出这些桌子的属性信息,例如这些桌子的长,宽,高,颜色,有几个支撑腿等,我们把这些信息一填,是不是就能够描绘出这些桌子大概是个什么样子了。

2023-06-15 16:34:44 476

原创 Linux系统编程2(基础IO详解)

文件描述符fd其实就是文件在文件描述符表中的下标值,在上面的图片中,标准输入的fd为0,因为其在文件描述符表中第一个位置,我们自己打开的文件x.txt的fd为3,因为其在文件描述符表中第四个位置文件描述符就是从0开始的小整数,当我们打开文件时,操作系统在内存中要创建相应的数据结构来描述和管理目标文件,于是就有了结构体表示一个已经打开的文件对象,而进程执行open系统调用,所以必须让进程和文件关联起来。每个进程都有一个结构体指针, 指向一个结构体。

2023-05-28 15:59:01 1729

原创 C++实践模拟(vector & list,反向迭代器)

begin表示vector元素的起始位置,_finish指向当前vector已存放的元素中的最后一个元素的下一个位置,_end指向空间的末尾,因为指针的减法结果为元素个数差,所以由_end减去_begin就能得到capacity值,由_finish减去_begin就能得到size的值。我知道这段内容有些难以理解,不理解也是没有关系的。而我们传过去的参数是iterator,iterator和const_iterator不是同一个类,故而不能直接传,这就是报没有适当转化错误的原因。

2023-05-11 02:22:49 707

原创 C++实践模拟(stack,queue & priority_queue,仿函数)

我们上面假设的是一个buffer数组中只能存放3个元素,于是我们要将要找的元素的下标值除以3,那么4/3,商就是1,说明该元素在中控数组下标为1的buffer数组中(这个下标为1是相对中控数组中已存在的位置来衡量的,deque底层有自己的算法来控制,我们不需要操心,如果感兴趣可以去查具体的底层实现细节),接着将该元素对3取模,那么4%3,结果就是1,说明该元素在已指定的buffer数组下标为1的位置,我们看这个元素是11,那么对于真个deque来说,下标为4的元素确实是11。

2023-05-06 08:45:19 284

原创 C++基础语法(内存管理)

【代码】C++基础语法(内存管理)

2023-04-17 14:57:18 454

原创 C++基础语法(模板详解)

不同于普通的函数,模板是不支持声明和定义分离的,因为模板的实例化过程是在编译的阶段完成的,也就是说在编译阶段,模板的定义和声明必须处于同一个文件中//假设我们有一个头文件 `template.h`,其中包含一个模板函数的声明://我们还有一个源文件 `main.cpp`,其中包含了对模板函数的调用:int i = 10;foo(i);return 0;

2023-04-16 16:43:30 618

原创 Linux系统编程1(进程概念详解)

Linux进程概念万字详解

2023-03-04 23:55:48 559

原创 Linux基础操作6(yum,vim,gcc,gdb,makefile)

Linux基本工具使用详解

2022-11-03 17:35:49 836 2

原创 C++基础语法(类于对象下)

C++类于对象思想总结篇

2022-11-01 18:06:55 355 1

原创 C++基础语法(类与对象中)

数万字C++类与对象总结(中篇)

2022-10-13 23:49:35 553 1

原创 C++基础语法(类与对象上)

C++类与对象详解上篇

2022-10-06 01:34:58 562 1

原创 C++基础语法(引用,内联函数)

C++基础知识详细讲解之引用和内联

2022-09-29 20:16:57 488

原创 数据结构:二叉树

二叉树入门的基本知识,零基础讲解+代码实现

2022-09-24 23:21:42 288

原创 C++基础语法(命名空间,缺省,重载)

C++基础语法知识

2022-09-21 16:09:25 396 5

原创 数据结构:栈,队列

数据结构中栈和队列的实现

2022-09-05 01:45:11 513 1

原创 算法:排序(上篇)

排序算法基础篇里包含了冒泡排序,选择排序,插入排序,希尔排序

2022-08-29 15:11:00 531

原创 数据结构:顺序表,链表,双向链表

顺序表,链表,双向链表

2022-08-12 04:12:33 960 4

原创 Linux基础操作5(用户组,权限,粘滞位)

Linux系统用户组和权限

2022-07-31 23:00:12 2167 4

原创 算法:复杂度

数据结构与算法的复杂度

2022-07-30 20:49:41 515

原创 C项目(贪吃蛇BUG解决及功能扩展)

贪吃蛇游戏Bug解析及功能扩展

2022-07-30 15:40:21 3140

原创 C基础语法(编译与预定义)

C语言程序编译环境和预定义详解

2022-07-29 22:27:17 371

原创 C陷阱与缺陷

C陷阱与缺陷和高质量C编程这两本书主要是总结一些C编程人员常犯的一些错误,常遇到的一些语法陷阱,及不良的编程风格。无论是有多年经验的编程老手还是刚入门的新手,细细品读,都会有不少的收获和感悟。此篇博客是个人读完这两本书后的一些感悟及对一些内容的记录,方便日后翻阅。 词法陷阱 多个操作字符组在一起的处理方法 编译器中负责将我们编译的命令符号进行分解的部分称为”词法分析器“,而词法分析器在工作运行时采用的处理策略为”贪心法“ 。什么意思呢?举个栗子,如这段语句a---b,编译器在运行时会

2022-07-29 12:38:41 329

空空如也

空空如也

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

TA关注的人

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