自定义博客皮肤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)
  • 收藏
  • 关注

原创 C++课程笔记 类和对象

用栈实现队列中,此类就不用写MyQueue构造函数,可以用MyQueue默认生成的,调用Stack默认构造函数。: 当你在类内部定义一个成员函数时,这个函数可以访问类的成员变量和成员函数。A::N,指定类域会到命名空间中找, 不指定会先到局部再到全局中找,找不到会报错。默认构造函数内置类型不处理,自定义类型使用自定义类型默认构造函数。默认拷贝构造是浅拷贝,函数释放后会free两次,会报错。,内置类型同样不会处理,自定义类型调用默认析构函数。不显示写赋值重载,默认生成的,对自定义类型会浅拷贝。

2024-09-14 11:23:42 1012

原创 JAVA集合,复杂度,泛型

需要实现一个函数,但是此时没有比较函数,因为此时array[i]从原先的E类型变成了Object类型,Object没有实现compare接口。下面定义String类型会报错,是因为String不是Number的子类。运行时没有泛型概念,编译后,泛型类型擦除为Object类型。下面想实现一个泛型方法,发现E会报错,因为此时E没有意义。1.存储数据的时候 可以帮我们进行自动的类型检查。把函数设为静态后,就可以不定义对象调用了。也可以省略类型,此时类型跟随参数类型。E是引用类型,不能通过大于号比较。

2023-05-16 08:44:46 334

原创 AVL树(C++)

插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成。二叉搜索树有其自身的缺陷,假如往树中。二叉搜索树虽可以缩短查找的效率,但。,即可降低树的高度,从而减少平均。平衡因子=右子树高度-左子树高度。因此,两位俄罗斯的数学家。

2023-05-01 18:12:37 664

原创 java异常

下面这里用了Exception后,NULL会报错,因为Expection继承了所有异常,能捕获任何异常,把它放到第一个,那么后续异常没有任何问题了。如果异常之间具有父子关系,一定是子类异常在前catch,父类异常在后catch,否则语法错误。如果捕获中没有对应异常的catch,那么异常会交给JVM,程序中断,dff也就不会打印。在程序执行期间发生的异常,称为运行时异常,也称为非受检查异常。try中存在多个异常时,捕获第一个异常。在程序编译期间发生的异常,称为编译时异常,也称为受检查异常。

2023-04-21 16:07:12 772

原创 数据库JDBC

如果请求是个 SQL 字符串,服务器是可以处理的服务器就需要对 SQL 进行解析,理解这里的含义并执行~~对于服务器的压力就比较大!数据库厂商提供一个程序来完成 API 的转换,对原生 API 封装再提供成JDBC 的形状。这个代码只是设置数据源,描述数据库服务器在哪~~还没真正和数据库服务器连接呢!JAVA程序员要想对数据库开发, 就要导入对应的数据库驱动包,才能编写代码。下面代码是把预编译过的sql语句发送给数据库服务器,由服务器进行响应。其中上面的数据是死的,最好可以灵活输入内容。

2023-04-19 21:38:30 437

原创 [java]String类

两个双引号引起来的2个对象,new了2个对象。拼接后的对象赋给str会调用toString,会创建一个string对象。subString也是不会改变原先字符串的,只是赋值给ret后去掉一部分字符串。原先的字符串会放到常量池,所有被双引号引起来的都会进常量池。一个是双引号引起来的字符串对象,new了一个String对象。str1指向的是字符串在常量池中的地址。自身的值不能改变,即不能引用其它字符数组,但是其引用空间中 的内容可以修改。str2代表指向的对象内容为空,str3代表不指向任何对象。

2023-04-17 13:25:00 132

原创 MYSQL索引和事务

由于数据都在叶子节点上,非叶子节点, 只存储 key, 导致非叶子节点占用空间是比较小的~~这些非叶子节点就可能在内存中缓存(或者是缓存一部分). 又进一步减少了 IO 的次数!一个事务A正在对数据进行修改的过程中,还没提交之前,另外一个事务B,也对同一个数据进行了读取.此时B的读操作就称为,脏读”读到的数据也称为“脏数据”上面的这个树形结构,是“索引如果这一列不能比较,就没法建立索引.幸运的是, mysql 里的各种类型,都能比较!数字,字符串,时间日期~~。5.整个树的所有数据都是包含在叶子节点中的!

2023-04-17 13:24:24 159

原创 java内部类

当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服 务,那么这个内部的完整结构最好使用内部类。内部类分为静态内部类和非静态内部类(也叫实例内部类),局部内部类,匿名内部类。非静态内部类不能定义非静态成员。下图中,我们发现静态内部类调用外部类非静态成员报错。实例内部类依赖外部类,创建时也需要依靠外部类对象。比如描述火车车厢的类放在描述火车的类的内部。因为静态内部类不用来与对象,是属于类的。局部内部类只能在所定义的方法体内部使用。内部类也是封装的一种体现。

2023-04-10 18:31:05 314

原创 数据库增删查改

以下面这种方式创建的笛卡尔积表,原表和笛卡尔积表数据是一一对应的,第一个表的记录在第二个表中都有体现,第二个表的记录在第一个表中也有体现。此时,左侧的分数,就是该同学 course id 为的分数,右侧的分数,就是 course id 为 3 的分数本来这俩分数是在两行里通过自连接,跑到两个不同的列中了!带有group的操作,select指定的列,要么是带有聚合函数的,要么就是group指定的列,不能指定非聚合,非group by的列。笛卡尔积其实就是一种排列组合,把两张表的记录,尽可能地排列出N种情况。

2023-04-07 21:08:39 292

原创 java简单图书管理系统

【代码】java简单图书管理系统。

2023-04-03 13:39:25 177

原创 java接口

子类重写接口方法时不能使用默认的访问权限,因为子类默认权限是包权限,小于public,使用会报错。接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。下面这个cc接口代表它不仅有funcc方法功能,还有A和B接口的功能。中,接口可以看成是:多个类的公共规范,是一种引用数据类型。接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是。如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类。为解决java不能多继承的问题,我们可以使用接口替代。不能先实现接口,后继承类。

2023-04-01 19:50:56 437

原创 JAVA抽象类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果 一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法。虽然普通类也可以这样使用,但是抽象类的子类不重写会报错。2.抽象类可以保护抽象方法和普通方法,但是普通类只能包含普通方法。定义抽象类用abstract,抽象类不能实例化对象。抽象类中也可以不包含抽象方法。抽象类可以不写具体的方法实现。

2023-03-30 21:55:48 132

原创 java多态

例如:若干年前的手机,只能打电话,发短信,来电显示只能显示号码,而今天的手机在来电显示的时候,不仅仅 可以显示号码,还可以显示头像,地区等。对于此时的animal来说,它不知道自己将来引用哪个对象,但是我们能确定animal将来指向的对象不同,执行的方法就不一样,这个也就是多态。对于已经投入使用的类,尽量不要进行修改。因为animal1中没有wang(),通过引用调用时,只能调用animal1类包含的方法,类中没有的方法是调用不了的。父类引用引用的对象不一样的时候,表现出的行为是不一样的,这也就是多态。

2023-03-29 22:11:37 463

原创 java继承

如果一个类的两个方法(无论是在同一个类中声明的,还是由一个类继承的,或者一个声明的和一个继承的)具有相同的名称,但签名不是重写等效的,那么方法名称被称为重载。通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到 则访问,否则编译报错。如果重名,一个有参数一个没参数(构成重载),那么传参的调用有参数的,没传参的调用没参数的。如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。this则包含继承下来的和子类原有的属性。

2023-03-28 19:50:24 285

原创 Java类和对象

person是类的成员变量,new Person()在堆上会开辟新的内存,不在test对象里,test对象里只存了person的引用,person的引用不在栈上,在对象上,对象在堆上。一个类对应一个字节码文件,字节码文件会被加载到内存中,这个内存是JVM,可以使用类加载器加载字节码文件,加载后,方法区会存字节码文件。2.eat方法的调用,需要引用进行调用,但是如果可以定义static变量,Person就可以调用。代码片段放在方法区,调用类中函数时函数会占内存,我们不用考虑类占不占内存,考虑类中成员进行。

2023-03-20 19:32:06 239

原创 数据库select操作

这个表是永久存储在服务器硬盘的,当输入命令后,客户端会把命令包装成网络请求,发给服务器,服务器收到命令请求,会操作硬盘,从硬盘中读取数据,把数据包装成响应,这个响应就是查询的结果。下面例子中,孟德英语小于70,画横线的条件不成立,但是因为和or是或的关系,他chinese大于80条件成立,所以孟德也会打印。而select * from 表名,查询的临时结果表,不是在硬盘上,而是在内存中,随着进行了输出后,数据也就被释放了。如果不指定多个列,只有指定一个列,如果结果相同,彼此之间的顺序都是不可预期的。

2023-03-19 22:23:39 1547

原创 JAVA方法

下面是arraycopy的定义,可以看出它没有写出具体的定义,因为被native修饰的方法代表是被c,c++实现了,我们看不到,它的优点是速度比较快。注意函数中的ret必须返回后赋给main中的ret才能真正获得2倍后的值,否则函数结束后数组a中的值不会改变。变量在不在栈上由变量性质决定,如果是局部变量一定在栈上,如果是实例成员变量,就不一定在栈上。第二个情况,是靠形参传的地址直接改变那里的值的,所以就能改变实参中对象的值。注意,a中第二行只赋了一个值,它不会补0,那个位置是空的,访问会报错。

2023-03-17 14:39:16 495

原创 java程序逻辑控制

break不能单独在if语句中,可以在while循环中的if语句中,break可以在switch语句中。我们尽量先输入字符串,后输入int,否则字符串会把输入int时的回车吃掉,导致程序直接结束。打了断点,这个程序就已经开始执行了,只不过当前程序停留在打断点的这一行下。下面这种情况,输入int数字后,不能输入字符串了,程序会直接结束.第一个代表调试时,一行一行执行,第二个代表遇到函数就进入函数。使用next时,输入字符串中间有空格,会报类型不匹配的错误。java中没有共同,作为保留字,准备随时可以启用。

2023-03-12 20:00:19 284

原创 认识数据库

平时提到的浮点数(float,double)都是基于IEEE标准进行使用的,基于这套标准的浮点数最大的问题是对于某些数字来说,不能确切的表示一个小数,其中,下面意思是创建后,使用特定的数据库字符集。其中DECIMAL能够精确地表示一个小数,对应的,java中使用BigDecimal实现对应的功能。的方式,也可以使用下面的方式。第一行有3列,第二行也有三列,第一行第一列是字符串,第二行第一列也是字符串。C中的fopen,r是读方式打开一个文件,rb就是读方式打开一个二进制文件。不是单引号,是反引号。

2023-03-06 17:01:35 150

原创 C/C++数组默认初始化什么时候为零

数组如果定义为局部变量,默认初始化为随机值。数组如果定义为全部变量,默认初始化为0。

2023-03-02 17:57:03 638

原创 Linux进程间通信

4.进程控制:有些进程希望控制其他进程 (如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它状态的改变。因为维护进程和文件之间的映射关系是进程找文件的,进程缺不了这个描述符表。内存级管道文件没有名字,父子进程看到同一个管道文件,是通过fork继承实现的,它俩是同一个文件描述符表,能看到同一个管道文件,fork之后,子进程继承父进程文件描述符表,struct file文件地址是一样的。管道文件只被写入,不被读取,管道文件缓冲区会被写满,写入端就会被阻塞。

2023-02-27 22:46:01 177

原创 Java数据类型与运算符

划线部分可以打印int类型的最大数即2^31 -1,其中Integer是int的plus版,是包装类。JAVA变量的命名一定是小驼峰,由数字,字母,下划线,美元组成,不能以数字开头。下面例子中java会默认10.3为double,输入给float会造成精度损失。byte是一个字节,所以存的数据大于等于-128小于等于127.否则编译报错。java中的int没有所谓的无符号类型,统一是有符号的。int取值范围是-2^31到(2^31 )-1。java中变量一定是要初始化的。long是长整形是8个字节。

2023-02-26 21:33:26 155

原创 初识java

在cmd中,转到要执行的java文件目录,使用javac 加文件名的方式回车后,就能启动文件,此时Windows目录中会产生一个同名的class文件。编译后会产生class文件, 把它叫做字节码文件,是个二进制文件。注释中有中文会报错,因为汉字一般以utf-8编码,和GBK编码冲突,解决方式可以是编译时统一以utf-8进行编码。我们目前是在sublime中写的程序,我们需要用cmd窗口进行编译,因为已经装好jdk了,所有可以用cmd编译。printfln是打印后换行,去掉ln后是打印后不换行。

2023-02-26 13:31:06 84

原创 C语言先往int数组中以%d输入数字和字符后,再向char数组输入字符串会直接跳过。

原因是输入数字的时候,输入了数字字符和字母字符,但是它%d匹配的时候,第一个printf它会拿走缓冲区的数字字符,也就是拿走这里面的23,但是字母字符还在缓冲区留着,所以说下次scanf输入%s字符串的时候,它直接看到缓冲区有数据,它就直接匹配了,就把dsa给了b[0]。这里输入23dsa后,我并没有输入字符串,它就直接如上分别打印数字和字符串了。

2023-02-26 11:17:31 300

原创 C++set和map

insert要插入的pair如果不存在就会创建,如果存在则返回创建完的迭代器。第一个箭头获得结构的指针,第二个箭头获得结构的数据。这里面最后一行是先插入后修改的,插入时第二个string插入的是缺省值。s.find是二叉树式的查找,时间复杂度是O(logN)方框的本质是这样的。Key相同,即名字相同,再此插入相同的名字就会失败。因为可能会造成插入的地方的值与该位置 不匹配。multiset中find找到的是中序的第一个。用算法中的find也可以,find是个模板。map是搜索二叉树的KV结构。

2023-02-25 16:25:17 80

原创 C++多态

func构成虚函数重写,P调用test函数,实际是A调用的,test函数中的func由this指针调用,这个this指针是A*,所以这个func属于多态调用,由于p是B*,所以它调用的是B中的func,但是重写时,子类接口用的父类,不加virtual也是虚函数,所以它缺省值用的父类,所以打印的是1。调用时,虚函数指针指向父类虚函数表,那么就调用父类的虚函数,指向子类的虚函数表,你们就调用子类的虚函数。初始化列表初始化的顺序和写的顺序没关系,是按声明顺序初始化的,在继承里面就是学先继承,谁先被初始化。

2023-02-05 20:54:47 93

原创 Linux动静态库

如果我们不想给对方我们的源代码,给对方提供.o可重定位的二进制文件 ,让对方用对方的代码链接就行,未来可以提供.o(方法的实现)和.h(有什么方法)文件。动态库和静态库在链接时和可执行程序产生关联,静态库(.a)就是在编译链接时把需要的代码和数据拷贝到可执行程序,程序运行是不需要静态库。而动态库(.so)是程序运行时才去链接动态库的代码,多个程序共享使用库的代码,把需要的代码和数据地址拷贝到程序当中。gcc默认动态链接(建议选项),对于特定的库,究竟是动还是静取决与提供的是动态库还是静态库。

2023-01-15 08:39:26 151

原创 C++继承

去掉继承方式,class默认是私有继承,子类外部不能访问继承成员,struct默认是公有继承,子类外部能访问继承成员。子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,上述代码中,Peraon叫父类,也叫基类,Student叫子类也叫派生类。子类对象 可以赋值给 父类的对象 / 父类的指针 / 父类的引用。public叫继承方式,继承方式包括公有保护和继承。子类和父类有同名成员时,子类隐藏了父类成员。赋指针也行,指针指向子类中的父类部分。我们看到父类中拷贝构造函数参数是父类。

2023-01-10 14:24:54 147

原创 C++模板进阶

同名的函数模板和普通函数可以同时存在,如果其它条件都相同,调用的时候优先调用普通函数,模板就不会产生对应的实例,如果模板可以产生一个更好匹配的函数,那么就会选择模板,如果模板产生了和普通函数的实例,则是重载的,如果需要调用的参数类型,和普通函数匹配,则函数模板不会实例化生成对应的函数。a.cpp中模板在编译阶段看不懂main.cpp中的代码,不知道是否会被调用,就不会实例化,链接阶段main.cpp中就找不到Add函数的地址,就会出错。这样就能比较日期类的地址了。特化出来的是函数,不是模板。

2023-01-09 20:35:03 63

原创 优先级队列

第三个参数虽然有对象的拷贝,,但这个对象因为只有一个成员函数,成员函数不占字节,所以这个对象只有一个字节,拷贝不会有太大影响。而如果我们传Date日期类的地址,我们发现,它会按地址进行比较,而每次运行,new出来的地址都不同,因此每次优先级排序都不同。改成引用的话,形参需要定义为const,类中的成员函数也需要定义为const。优先级队列是用vector适配的容器适配器。这也是之前优先级队列less表示大堆的原因。优先级队列是优先级高的先出队列。每个父亲大于孩子是大堆,小于孩子是小堆。默认是大数优先级高。

2023-01-08 11:39:41 103

原创 c++设计模式初步

deque底层是小段小段的数组,叫buffer,一般由多个buffer数组构成。有一个中控指针数组,存放每一个buffer的指针,每一个buffer存满后,就开辟新的buffer。deque随机查找效率较低,如果要随机查找,在第一个buffer中没有找到,就把要查找的第n个数字,的n减去第一个buffer中的数据个数,然后在第二个buffer中查找。如果要头插数据,就在第一个buffer前面新开辟buffer,并在新buffer的末尾插入数据。deque下标随机访问,有一定消耗,没有vector快。

2023-01-07 18:43:55 72

原创 [Linux]文件

前三行是向stdout中打印,它缓冲区是行刷新,在fork之前,这三个c的函数已经讲数据打印到显示器(外设)上了,我们的FILE内部,及本进程内部不存在对应的数据了,如果我们进行了重定向,要写入的文件不再是显示器stdout,而是向文件中输入,缓冲区使用的刷新策略是全刷新,之前的3条c函数虽然带了\n,但不足以把stdout缓冲区存满,数据并没有被刷新。比如保存整个分区有多少个组,起始块号是多少,结束块号是多少等等,Super Block虽然在每个group中都有,但是它保存的是整个分区的信息。

2023-01-06 09:28:44 92

原创 对卡塔尔世界杯的感想

这次世界杯,是我第一次全程关注的世界杯,不得不说,卡塔尔世界杯办的的是真的好,那2290亿美元真没有白花,整个卡塔尔被世界杯的氛围所笼罩,可谓全民世界杯。在这次世界杯之前我是不关注足球的,之前关注足球也不过是在世界杯期间从同学的口中得到消息,这是我上了大学后的第一次世界杯,我也有了机会去观看世界杯。梅西夺得了从小就梦寐以求的大力神杯,他实现了自己的梦想,以及所有支持阿根廷,支持梅西的所有球迷的梦想,他给每个人带来了温暖与力量,给每一个追梦人带来了信息与希望。祝梅西及阿根廷好运,让潘帕斯雄鹰在世界翱翔!

2022-12-20 10:58:00 158

原创 用自己编写的简易shell实现文件重定向

先看下代码命令是要给子进程来执行的,真正重定向的工作也要子进程完成。如何重定向需要父进程给子进程传递信息。包括redienum,redirname。重定向由子进程执行,这里的重定向不影响父进程。因为进程的独立性。子进程是以父进程进行拷贝产生的,所以子进程的文件描述符表也是父进程复制的,它俩不是共用一个文件描述符表。而且如果共用一张表,子进程对文件描述符标的改动,父进程的文件描述符表会进行同样的改动,显然不符合进程的独立性。但是父子进程文件描述符表存的地址是同一个文件的,父子进程是由进程管理的,文件不受

2022-12-06 11:53:23 210

原创 vector和list对比

vector优点 链表是不连续的,命中几率会变小。综上,一般大量在中间或头部插入删除会用list链表。vector和list功能互补,相互配合。

2022-12-04 12:10:39 319

原创 C++list

list中没有find()模板,需要调用algorithm库中的find。没有reserve和resize了,因为链表是按需要申请和释放空间的。用库里面sort对vector排序要比list中的sort对链表排序快。平时不用头插和头删用vector,不用的话,用list也是可以的。但erase后,pos会失效,因为此时pos位置结点已经没了。元素访问没有[]了,意味着以后大部分需要使用迭代器进行访问。它俩能够相减,需要迭代器是连续的,而链表迭代器不连续。remove一个对象中没有的数,不会报错。

2022-12-01 19:04:33 1482

原创 [Linux]基础I/O

注意,改完后,原先的log.txt要rm删掉后,再运行一下这个代码文件,再vim打开log.txt。因为文件要的是字符串的有效内容,文件不以反斜杠0结尾,输入到文件中什么内容,文件就存什么内容。打开文件需要用户进程+操作系统,用户进程用来调用接口,操作系统实现文件的打开。一个文件没有被打开,不能直接对文件进行访问。操作系统要管理对应的打开文件,必定要为文件创建对应的内核数据结构标识文件。不是所有文件都被系统打开。文件读取有两种方式,一种是文本类,一种是二进制类。文件在磁盘里,磁盘是硬件,需要操作系统访问。

2022-11-26 18:43:21 297

原创 [Linux]自我编写shell(命令行解释器)

我们发现,中间多了一行,原因是我们在fgets输入时,输入里会车,再加上\n,就多出一行,解决方式如下。如果我们去掉./exec,那么我们是不是就可以自己写一个shell?获得命令行后,我们还需要对命令行字符串进行切割,以便实现对应的功能。代码实现就是这样的,我们直接输入命令就会执行对应的命令。在外面添加while(1)循环,来获得一下效果。定义DEBUG在Makefile文件中这样定义。下面就是我们自己写的一个shell例子的代码。用myshell替换mychild。那么这个进程替换从ls开始执行。

2022-11-21 17:03:49 923

原创 [Linux]操作系统提供的函数和C库函数的区别

操作系统提供的函数,我们称之为叫做系统调用函数,它是由操作系统内核,为我们提供的那个接口(函数),C库函数 ,指的是,有一帮开发C运行时库的大佬,他给我们程序员,将系统调用函数又封装了一层,然后提供出来一些较为简单的一些函数,然后这些函数,都是被放到C运行时库也就是c.so当中的,提供给程序员进行使用,所以这一部分函数,我们称之为C库函数吧。

2022-11-21 14:57:17 346

原创 Linux操作系统进程程序替换

程序归根结底都是代码和数据,所以当数据和代码被cpu调度时,这个程序就在运行,当我们实际调用exec时,实际是把可执行程序对应的代码和数据进行程序替换,把代码和数据从磁盘向物理内存中指定的位置加载的过程叫程序替换。而execl,execlp,execv,execvp并没有传环境变量的参数,它替换的程序却能调用默认的环境变量,它就是通过environ,通过地址空间的方式,让此程序拿到的。main函数也需要被传参,所以上述程序的main函数的参数列表,是exec*中的参数传进去的。参数的个数是可变的。

2022-11-20 22:34:59 406

空空如也

空空如也

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

TA关注的人

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