自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小何代码咖啡馆

小coder的学习记录

  • 博客(157)
  • 收藏
  • 关注

原创 Linux中输入和输出基本过程

在上面的演示中,先关闭了某一个文件描述符较前的文件,再打开另一个文件,打开的这个文件所处的位置是就是被关闭的那个文件的位置,此时再使用输出语句输出内容,原本应该输出到文件描述符较前的原始文件中,比如前面的。但是,前面的代码中,只演示了关闭0号位置和2号位置的文件,如果此时关闭1号位置的文件,再打开同样的四个文件,输出每一个文件的文件描述符,从前面的规律可以推出,输出语句会因为1号位置的文件是。函数以外,其他的C语言库函数均出现两次打印的情况,本质就是因为语言级缓冲区自动刷新到系统内核级缓冲区机制,而因为。

2024-10-22 10:48:24 1220

原创 Linux文件操作基础

根据冯诺依曼体系结构,除了内存、CPU以外,其他设备均称为外设,也称为输入输出设备,而这些设备在接入计算机时,需要在计算机中安装驱动,而安装驱动的本质就是为了将对应的硬件信息加载到属于硬件的信息表中,而操作系统为了管理这些表,就需要创建一个结构体,这一个过程符合「先描述,再组织」的「描述」,此处的每一个结构体都是通过双向链表进行连接,这一个过程符合「先描述,再组织」的「组织」。在操作系统与之下的各种文件系统之间,虚拟文件系统提供了标准的操作接口,让操作系统能够很快的支持新的文件系统。

2024-10-18 20:51:50 1493 2

原创 Windows系统下在VMware中配置Ubuntu环境并通过客户端进行连接

下载Ubuntu系统镜像直接进入网站点击Download即可,主要考虑下载VMware,因为当前VMware已经被收购了,所以官网已经关闭了,上面这个是一个CDS仓库,与官网下载的内容一样,进入该网站后可以看到下面的页面。如果出现了上面的界面,则选中「自动安装Windows Hypervisor Platform(WHP)」(对应的下面的选项,可以在对应位置手动启动)此处可以在「安装位置」更改VMware的安装位置,这里不会影响后面虚拟系统安装的位置,出现下面的警告直接点击OK即可。

2024-10-17 20:55:40 883

原创 C++中的initializer_list类

return 0;输出结果:1 2 3 4 5。

2024-10-16 22:03:04 327

原创 Linux进程控制小练习|手撕一个简易版shell(Version 1.0)

命令是将指定的环境变量导入到当前进程对应的环境变量表,所以也不可以交给子进程处理,当前模拟的shell所有的环境变量均是与系统shell共享的,因为并没有修改,一旦修改,就会发生写时拷贝,为了让模拟的shell拥有自己的环境变量,可以在程序启动时,加载父进程的环境变量到当前的模拟shell程序中,再处理。需要注意的是,为了保证其他函数可以获取到输入的内容,可以定义一个数组存储输入的内容,但是这个数组不可以是一个局部变量,除非作为参数传递而不作为返回值,防止出现野指针问题。

2024-10-15 15:24:55 946

原创 C++中的STL——bitset类的基本使用

bitset类是C++标准库有关位图数据结构的类向非类型模版参数处传递一个实际无符号整数代表当前位图可以表示的数值范围,一般情况下这个数值会设置超过具体范围,例如0-40亿数据会设置为42亿如果想要设置为42亿的数值,在C++标准库中不可以直接使用-1,尽管无符号的-1在无符号整数类型中是最大值,但是可以使用UINT_MAX(无符号整数最大值)、0xFFFFFFFF如果需要使用-1,可以在堆上开辟空间int main()return 0;

2024-10-09 21:24:45 290

原创 VSCode中添加自定义代码片段

打开Visual Studio Code设置,选择Snippets在弹出的窗口中选择新建全局片段文件如果只想为当前工作目录设置片段文件则选择第二个输入新全局片段文件的名称这个文件名称与将来的快捷名称没有关系在生成的文件中输入下面的内容:"body": [","$2"],:引号中填写当前代码片段的描述文字"scope":值的引号中填语言类型文件的后缀,例如C++源文件就输入cpp,Java字节文件就输入java"prefix":值的引号中填写当前代码片段的提示词"body"[]

2024-10-09 15:27:35 761 3

原创 Linux进程控制

前面子进程在完成任务都是基于分支语句中属于子进程的代码,而进程程序替换的作用就是为了让子进程执行其他程序的代码和数据// C语言封装的接口// 系统接口:执行的目标程序的路径:如何执行目标程序,一般传入的内容与命令行执行对应程序时输入的内容相同,例如ls -a -l,参数写为(需要传入nullptr或者NULL是因为命令行参数表以nullptrNULL结尾):如何执行目标程序,与不同的是,接收的是一个数组,所以需要额外创建一个数组,而数组中的内容即为命令行参数,以nullptr或者。

2024-10-08 13:32:52 1284

原创 C++ IO流

在C++中,可以使用类对象来处理字符串与其他类型的转化问题在程序中如果想要使用,必须要包含头文件。和,分别用来进行流的输入、输出和输入输出操作,下面主要介绍一般情况下将数值类型数据格式化为字符串int main()string sa;// 将一个整形变量转化为字符串,存储到string类对象中s << a;s >> sa;s.str("");// 清空底层string对象(将s中的内容用空字符串替换)s.clear();// 清空s, 不清空会转化失败s << d;

2024-10-07 17:19:06 1240

原创 Linux进程地址空间

在Linux中,页表不仅仅有虚拟地址和物理地址的映射,还有物理地址的属性RWX以及是否有数据的标识isExistsRWX属性:代表虚拟地址对应的物理地址是否具有读(R)、写(W)和执行权限(X)。前面提到,每一个进程地址空间区域都由指定的起始值和终止值进行划分,而这些区域有的是可以写,有的不可以写只能读,但是对于物理内存来说,绝大部分的空间都是可以写的,所以对于限制指定的物理地址是否可以写入就是通过RWX属性进行控制。

2024-10-05 17:41:10 937

原创 Linux命令行与环境变量

在Linux下输入的命令首先会被Shell拿到。前面提到父进程和子进程的代码是共有的,但是二者数据是各自独立的,但是数据独立实际上只会建立在其中一个进程修改了数据,如果二者都是对变量进行只读不写,那么也没有必要单独为两个进程开辟两个数据空间对于上面的情况亦是如此,直接在终端上执行的进程,其父进程都是Shell,并且父进程和子进程都只是以只读的方式访问main函数的参数,所以就不会出现两个数据空间。从上面的过程中也可以看出,在设计操作系统、编程语言等时,相互都是存在依赖关系的。

2024-10-04 12:45:19 937

原创 Linux进程切换以及调度算法

前面提到,分时操作系统下,CPU会在多个进程中做高速切换以实现多个进程看似同时执行的,但是问题是为什么CPU可以做到多个进程来回切换而不会影响每一个进程的执行,这就是进程切换需要思考的问题基本认知:CPU切换进程是根据每一个进程对应的时间片决定切换的时间,一旦时间片到了,CPU就会切换到另一个进程,如此往复。所以,在上面的过程中,就会出现一些进程并没有执行完毕但是CPU进行了切换。

2024-09-28 15:11:29 1327

原创 Java中的Junit、类加载时机与机制、反射、注解及枚举

在Java中,Junit是一个单元测试框架,可以代替main方法去执行其他的方法,其可以单独执行一个方法,测试该方法是否能跑通因为Junit是一个第三方工具包,与Lombok一样需要先导入对应的jar包并进行解压,不同的是,Junit有两个包,并且相互依赖,所以都需要进行解压。这里可以使用一个文件夹名为lib,将两个解压包放在lib文件下,再对lib文件夹进行整体Add as Library使用时,在需要进行测试的方法上方写上@Test。

2024-09-27 21:17:04 1199

原创 Java中的JDK8及后续的重要新特性

函数式接口:接口中有且仅有一个抽象方法,但是可以有多个其他的方法检测某个接口是否是函数式接口// 只有一个抽象方法void eat();// 可以有多个默认方法// 可以有多个静态方法面向对象思想:强调对象如何完成任务函数式编程思想:强调是否完成任务(参数列表) -> {// 方法体(参数列表):表示重写的方法对应的参数,此位置可以省略参数类型保留参数名,如果只有一个参数,则还可以省去参数列表的括号()->:将参数列表传入到方法体{}:定义重写方法的方法体。

2024-09-25 23:10:38 1226

原创 Linux进程状态与进程优先级

在操作系统中,一般会存在一个进程状态转换图,例如下图:创建(new):表示进程创建运行(running):表示进程正在被执行等待(waiting):表示进程正在等待具体事件发生,也被称为阻塞状态就绪(ready):等待被调度器调度执行终止(terminated):进程完成执行。

2024-09-25 14:38:24 977

原创 Java网络编程、正则表达式、单例设计模式与Lombok

UDP协议:UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,主要用于提供不可靠但高效的网络数据传输服务无连接UDP在发送数据之前不需要先建立连接,也不需要在数据传输完成后关闭连接。这意味着UDP可以立即开始发送数据,适用于实时应用,如在线语音聊天、视频流媒体等不可靠UDP不保证数据报文的可靠传输。数据报可能丢失、重复或乱序到达,也不会有重传机制。对于不需要可靠传输的应用场景,UDP提供了更快的速度无序传输。

2024-09-24 21:37:25 1222

原创 Java的IO流(二)

Commons-io解决的问题:IO技术开发中,代码量很大,而且代码的重复率较高。如果我们要遍历目录,拷贝目录就需要使用方法的递归调用,也增大了程序的复杂度。Apache软件基金会,开发了IO技术的工具类commons-IO,大大简化IO开发。Commons-io工具包是第三方包,所以使用前需要导入包,但是这个包是jar在指定位置创建文件夹,取名为lib或者libs将准备好的jar包,放到此文件夹下对着jar包,右键 -> Add as library (如果想将lib下所有的jar。

2024-09-22 22:11:16 1059

原创 Linux进程(一)

进程的本质是在计算机内存中运行的程序,但是这一个概念太过于广泛要了解进程,首先采用前面在操作系统基础中介绍的思想「先描述,再组织」,每一个进程本质也是一个结构(一般称为PCB(Process Control Block,进程控制块),在Linux下的PCB称为。

2024-09-21 21:54:13 1482

原创 Java的IO流(一)

File类在官方文档中的描述是:文件和目录(文件夹)路径名的抽象表示File类的对象存储着文件或者目录的路径File字符输出流:对应Writer抽象类字符输入流:对应Reader抽象类。

2024-09-21 14:02:10 964

原创 Java集合(三)

在Java中,双列集合的顶级接口是MapHashMap类类TreeMap类HashTable类Properties类HashMapHashMap类是Mapkey唯一但value不唯一插入顺序与存储顺序不一定相同没有索引方式操作元素的方法线程不安全可以存null值对应的数据结构为哈希表需要注意,如果出现key重复会保留最后一个键值对的value,即「发生value覆盖」HashMapkey唯一但value不唯一插入顺序与存储顺序相同没有索引方式操作元素的方法线程不安全。

2024-09-20 17:16:49 960

原创 Java集合(二)

泛型:不明确具体类型,直到接收到具体类型再进行推导统一数据类型,防止使用时出现的数据类型转换异常定义带泛型的类,方法等,使用的时候给泛型确定什么类型,泛型就会自动推导为对应类型,使代码更灵活定义泛型的类:在类名后面添加<T>,其中<>表示泛型,T为泛型名,类似于变量名,对于类泛型来说,当该类实例化出对象时,泛型就会被替代为指定类型,格式如下:public class 类名 <T> {// 成员//定义一个数组,充当ArrayList底层的数组,长度直接规定为10。

2024-09-18 15:15:16 1041

原创 Java集合(一)

在前面已经使用了一个最基本的数据结构:数组,但是数组的缺点很明显:定长,这个缺点导致数组的增删不够方便,为了解决这个问题,可以使用Java的相关集合单列集合:集合中每一个元素只有一种元素类型多列集合:集合中每一个元素包括两种数据类型,第一个数据类型对应的元素被称为key,第二个数据类型对应的元素被称为value,二者组成的共同体被称为键值对只能存储引用数据类型的数据,而不能存储基本数据类型的数据每一种集合长度均是可变的集合中有很多使用的方法,便于调用ArrayList类是List。

2024-09-15 22:28:38 922

原创 操作系统基础

冯诺依曼体系结构如下:在上图中「输入设备」和「输出设备」一般被称为计算机的外设,而「存储器」在冯诺依曼体系结构中表示「内存」输入设备一般包括:网卡、磁盘、键盘、触摸屏等输出设备一般包括:网卡、磁盘、鼠标、触摸屏、显示器(非触摸屏)等内存的作用「内存」是中央处理器与计算机其他设备的桥梁,因为CPU的处理速度相当得快,以至于如果没有「内存」,就会导致类似「磁盘」等外设因为其速度远远小于CPU从而拖慢整机性能。

2024-09-15 16:51:36 1188

原创 Linux下的gcc与gdb

gdb(GNU调试器)是GNU项目的一部分,用于调试C、C++、Pascal、Objective-C、Ada以及其他语言编写的程序。它允许开发者执行一系列的调试操作,如启动程序、设置断点、监视变量、单步执行代码、改变程序状态等,以便于找出并修正程序中的错误在CentOS安装gdb需要查看gdbgdb。

2024-09-14 17:23:17 1132

原创 Java多线程

进程:在内存中运行的程序实例,一般一个程序代表一个进程线程:进程中最小的执行单元,一般线程负责进程中程序的运行,一个线程至少存在一个线程,也可以有多个线程,当存在多个线程时,一般称为多线程程序可以简单理解为:当一个程序加载到内存中后就会开启一个进程,当程序需要执行某一个功能时就会开辟一个线程,该线程就是程序与CPU交流的通道,一个功能对应着一个线程,一个线程对应着一个通道并发:在同一个时刻,多个CPU(多核CPU)同时执行指令任务并行:在同一个时刻,一个CPU执行多个指令任务。

2024-09-13 23:47:31 1081

原创 Java中的常用类及包装类

包装类是所有基本数据类型对应的类,将基本数据类型转成包装类,从而让基本数据类型可以使用成员等类的特点,需要注意的是,基本数据类型的包装类不可以使用进行运算基本类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharactorbooleanBoolean因为包装类具有的属性和方法基本一致,下面以Integer包装类为例介绍Integer。

2024-09-10 22:02:49 1008

原创 Java.lang中的String类和StringBuilder类介绍和常用方法

String在Java中,String属于一种引用类型,表示字符串类型。实际上,在Java中,所有字符串字面量都是作为String类的对象实例化的,即使用双引号""包裹的都是String类的对象。所以使用表示的是创建了一个String类的对象内容为"abc",而s就是对象名,示意图如下:当对象s指向了"hello"时,此时堆中存在一个空间,其内容为"hello",而接下来想在原来的字符串中拼接"world"是做不到的,所以将拼接后的结果存入一个新空间返回给s,示意图如下:因为String。

2024-09-09 22:00:27 1613

原创 Java中的Object类介绍及常用方法和经典接口

ObjectObject类是Java中所有类的父类,位于Java.lang包中,默认创建的所有对象都继承自Object类Object。

2024-09-08 21:36:29 1049

原创 Java异常类

如果想要自定义一个异常类,则自定义的类就必须继承自Exceptionpublic class 自定义异常类名 extends Exception {// 内容// 自定义异常类// 测试try {if(!如果想添加自定义异常信息,需要提供一个有参构造函数,该构造函数使用一个String类型的message构造对象,此时会调用父类的构造函数,因为Exception类中存在对应的构造函数// 自定义异常类// 测试try {if(!

2024-09-08 20:39:43 872

原创 Linux下的Makefile与进度条程序

在Linux中,Makefile是一个文件,make是一个指令,当使用make指令时,该指令会在当前目录下找Makefile文件从而执行内部的内容以前面例子中的Makefileclean:第一行中的代表依赖关系,code表示目标文件,code.c表示依赖文件列表中的文件,第二行的代表依赖方法(指令)第三行中的.PHONY表示生成一个伪目标,clean表示伪目标的名字(可以类比变量名)第四行及第五行与第一行及第二行含义一致,表示依赖关系和依赖方法,而因为clean没有需要依赖的文件,所以。

2024-09-07 21:28:59 1452

原创 Java面向对象与权限修饰符、final关键字、代码块及内部类

方法 {class 类名 {注意:局部内部类创建对象只能在内部类所在的外部类创建// 访问局部变量// 访问内部类的成员变量// 访问外部类的成员变量// 创建内部类匿名对象并在外部类方法中调用内部类方法// 测试// 创建外部类对象// 调用外部类的方法p.method();// 调用接口/抽象类重写后的方法new 接口类名/抽象类名() {// 重写抽象类/接口类方法}.重写后的方法名();接口类/抽象类名 对象名 = new 接口类名/抽象类名 {

2024-09-07 11:45:05 934 1

原创 Java面向对象与多态

在前面学习到的接口和继承中,如果父类只能使用父类的方法,子类可以使用父类和自己的方法,但是有时需要使用父类调用子类重写的父类方法,上面的思路就不再合适,此时就可以使用多态。多态的特点:使用父类引用指向子类的对象,此时父类可以调用子类重写父类的方法,但是调不到子类特有的成员访问成员变量时:看赋值符号左侧是子类还是父类,如果是父类,调用就是父类成员变量,否则调用的是子类成员变量访问成员方法时:看new。

2024-09-06 19:55:20 1011

原创 Java面向对象与接口

实现了接口,必须有对应的实现类,因为接口本身不可以实例化对象接口中的成员方法在JDK7及之前只有抽象方法,即,如果不显式写,默认成员方法也会有该修饰;在JDK8时,新增了默认方法和静态方法,即和,在接口中可以显式写default,但是在实现类中不可以显示写default;在JDK9及之后,新增了私有成员方法,但是不常用接口中的成员变量在JDK7及之前只有,被final修饰的成员变量相当于是常量,不可以修改和二次赋值,所以必须在初始化时给定初始值。

2024-09-05 22:57:31 535

原创 一篇文档教会你从JavaScript语法走进DOM,让你的网页动起来

目录JavaScript与WebAPIWebAPI简介DOM获取元素事件事件三要素常见的事件类型获取+修改元素属性基本介绍和使用案例1:实现文本框内数字计数案例2:实现“全部选中”按钮触发时相应的效果(worth trying for a freshman)获取+修改元素样式基本介绍与使用节点与其操作创建节点插入节点删除节点JavaScript分为三个部分:WebAPI就包括了DOM和BOMAPI:所谓API就是已经实现的函数或者接口,专门提供给需要使用的调用WebAPI参考文档:Web API | MDN

2024-09-04 21:57:58 1478

原创 Java面向对象与继承

访问成员变量:关注创建对象时赋值符号的左侧是子类还是父类。如果是父类,则访问的是父类成员变量,如果是子类,则访问的是父类非私有成员和子类自身的成员变量访问成员方法:关注创建对象时赋值符号的右侧是调用子类构造函数和父类构造函数。如果是父类,则访问的是父类中的成员方法,如果是子类,则访问的是父类中非私有的成员方法、子类重写的父类的方法和子类自身的成员方法super。

2024-09-03 22:31:41 1053

原创 万字文档带你走进Python的世界

变量名 = 内容# 例如a = 10def 函数名(形参列表):函数体返回语句(可选)Python中函数的形参和实参个数要一一匹配,否则会报错(不同于JavaScript)# 打印形参值print(a)输出结果:1hello1.0列表中的元素数据类型可以是任意的列表中的元素在插入后可以被修改列表中的元素是无序的使用[]创建一个列表:如果只使用[]创建列表,则此时列表为空,如果创建时给定了[]中的内容,则此时列表中即为给定的内容。

2024-09-02 22:08:14 2012

原创 8000字带你走进JavaScript的世界

使用var定义变量(不推荐)var a = 1;使用let定义变量(推荐)let a = 1;如果既没有使用var也没有使用let,则定义的变量可以认定为全局变量,例如a = 1;语句中的a可以认为是全局变量在JavaScript中,定义一个函数需要使用下面的格式function 函数名(形参列表) {函数体返回语句(可选)在JavaScript中,因为函数定义不需要显示写返回值,所以是否有返回值或者返回值类型是什么取决于返回语句的有无以及返回的数据类型,例如下面的两个函数。

2024-09-01 22:15:51 1648 1

原创 C++ 11相关新特性(using与typedef、尾置返回值类型)

尤其是当你处理模板时。在现代 C++ 代码规范中,C++11 之后,许多代码规范建议优先使用。结合对应的函数返回值放置于形参列表后方,而在原来的函数名前方需要使用。而在C++ 11中,为了更好的可读性,可以使用。都可以用来为已有的类型定义一个新的名称。这证明了在实际应用和代码维护中,二者最主要的区别在于,可以用来定义模板别名,还可以引入命名空间,而。在C++11中引入,

2024-08-30 12:46:21 411

原创 【可做课设】尚品汇静态网页设计

通过商城项目带你复习HTML+CSS知识,检验基础的时候到了!!!

2024-08-24 23:09:15 1276

原创 C++中的类型转换

内置类型如果想转换为自定义类型需要通过自定义类型的构造函数并且对应的构造函数没有被explicit// 内置类型与自定义类型相互转换class Apublic:A(int a):_a(a){}private:int _a;int main()// 隐式类型转换--通过构造函数实现内置类型转自定义类型A a = 10;return 0;如果想要实现类的构造函数被声明为explicit// 内置类型与自定义类型相互转换class Apublic::_a(a){}

2024-08-17 23:58:01 1077

MySQL基础使用笔记

MySQL基础使用PDF,一共18章,带你扫除MySQL基础使用的障碍

2024-08-29

HTML与CSS笔记.zip

最新HTML与CSS笔记,助力前端基础

2024-08-23

C语言+数据结构学期课程设计《员工管理系统》

关于一个员工管理系统的开发,详细描述了如何构建一个具备基本功能的员工信息管理软件。系统的核心目标是有效地组织和维护员工的个人及工作相关数据,确保数据的准确性和易于访问性。 系统的主要特点包括: 员工信息管理:每个员工的记录包含编号、姓名、性别、出生日期、学历、职务、电话号码和住址。 数据持久化:系统能够将员工数据保存到文件中,以便在程序关闭后数据不会丢失,并且在下次启动时能从文件中恢复这些数据。 数据检索:支持按ID或姓名查找员工的具体信息。 数据更新:允许管理员根据员工的编号修改其个人信息。 数据录入:具备添加新员工信息的功能。 数据移除:可以按员工编号删除不再在职的员工记录。 数据排序:能够按照员工的ID、姓名或出生日期对所有员工信息进行排序。 数据展示:可以列出所有员工的信息,或者展示排序后的员工列表。 在技术实现上,文档采用了C语言编程,并利用了动态顺序表作为存储结构,这使得数据的增删改查更加高效。此外,还设计了一系列函数来实现上述各项功能

2024-07-21

空空如也

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

TA关注的人

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