自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux进程信号

进程申请信号量成功 相当于预订了共享资源的一部分,可以访问这部分资源,否则就不可以,就可以实现保护共享资源的目的。所有IPC资源的第一个字段都是ipc_perm的结构,可以定义一个指针数组,不同对象,可以用相同指针数组存储。进程要执行系统调用,就从用户空间跳到内核空间后,调用内核级页表,执行系统调用。在用户态执行完handler函数后,需要返回到内核态,获取进程程序位置后,再返回到用户态进程继续执行。屏蔽恢复成功,但没有打印,因为是2信号,恢复后,进入内核态进程中止,进程不会返回用户态。

2024-11-29 15:46:44 1189

原创 Linux 共享内存

共享内存管理进程和共享内存建立映射关系叫进程和共享内存挂接。取消进程和内存映射关系叫去关联。释放共享内存叫释放共享内存。malloc创建的空间别的进程不能访问,是在自己的堆中创建的。进程间通信是专门设计的,有专门接口。共享内存是种通信方式,所有想通信的进程都可以用。系统中存在很多共享内存。让不同进程看到同一个内存块。接口:shmglg是位图结构IPC_CREAT:没有共享内存 就创建,有就获取。IPC_EXCL:1无法单独使用。

2024-10-25 20:34:52 1064

原创 Linux 进程程序替换

代码和数据都能发送写时拷贝,进程程序替换时发生代码写时拷贝。main的命令行参数是execle传的。覆盖自己的代码和数据。子进程进程替换不会影响父进程。

2024-10-20 20:46:52 327

原创 Linux 程序地址空间

父进程创建子进程 会对父进程进行拷贝,进程具有独立性,一个进程对被共享的数据进行修改,不能影响这个数据在其他进程中的内容,所以子进程对数据进行修改后,会存储在一个新的物理内存中。写时拷贝:任何一方尝试写入,操作系统先进行数据拷贝,更改页表映射,然后再让进程进行修改。地址没变 说明这里的不是物理地址,是虚拟地址(线性地址,逻辑地址)。cpu读进来的都是指令,指令内部就有虚拟地址。每个进程有自己的进程地址空间。虚拟地址空间,每一个都是虚拟地址。每个进程以为自己有4GB地址空间。可执行程序有自己的虚拟地址。

2024-10-19 11:37:53 184

原创 Linux 进程控制

echo本身也是进程 运行万上述命令后再运行echo $?结果是0.打印错误码:得到ls进程退出码为2。exit退出后,代码不继续执行。

2024-10-19 11:37:28 354

原创 Linux 环境变量

environ是二级指针**environ。不用命令行参数,也能获取到环境变量,因为命令行参数默认传的就是environ。echo是个命令,最后是一个子进程,myval是本地变量 不能被继承?ls创建子进程 通过环境变量PWD知道文件路径。本地变量只会在当前进程(bash)有效。export可以设置变量为环境变量。PATH :存储指定命令的搜索路径。Linux通过环境变量判断权限。第3个参数是环境变量参数。extern用于声明引用。命令行参数最多有3个。

2024-10-14 11:07:28 326

原创 Linux Git

git仓库本质是.git目录中的内容,push到远端就是将.git内容传到仓库中。git pull用于本地和远端资源同步,防止两端更改不一致。在.gitignore 文件中的后缀 上传到仓库时会忽略。git add .将process存储在仓库临时存储部分。仓库中文件重命名用git mv 删除用git rm。上传到远端GitHub中。下图指令将process存储到仓库中。pull用来把远端信息拉取到本地。process存储进度条程序。git log查更新日志。

2024-10-11 16:21:16 392

原创 Linux 进程

Linux数据管理的本质是数据管理管理方法是先描述再组织。理解为面向对象进行管理。

2024-10-11 16:20:49 446

原创 Linux GDB

gcc:默认动态链接 默认是release 所以gdb不能直接调试gcc生成文件。c/continue相当于 VS F5 调试运行。s/step 相当于 VS F11 逐语句。n/next相当于VS F10 逐过程。info locals 查看局部变量。r/run 运行 并在断点处停下。fin/finish执行完本函数。time显示公元到现在秒数。u/until跳转到指定行。display设置常显示。disable使断点失效。vim默认是命令模式。文件加入了调试信息。

2024-10-07 22:32:49 468

原创 Linux自动化构建工具Make/Makefile

make是一个命令 makefile是一个文件touch 创建并用vim打开makefile写入依赖对象和依赖方法mycode是目标文件第二行数依赖方法 以tab键开头make。

2024-10-05 11:59:09 612 1

原创 linux动静态链接

Linux默认生成可执行程序,默认是使用动态库。linux和Windows默认都以动态链接。去掉lib和后缀.so剩下的是库名称。pwd命令也是动态链接。查看可执行程序依赖的动态库列表。

2024-10-04 19:06:18 220

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

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

2024-09-14 11:23:42 1078

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

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

2023-05-16 08:44:46 361

原创 AVL树(C++)

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

2023-05-01 18:12:37 697

原创 java异常

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

2023-04-21 16:07:12 808

原创 数据库JDBC

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

2023-04-19 21:38:30 464

原创 [java]String类

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

2023-04-17 13:25:00 157

原创 MYSQL索引和事务

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

2023-04-17 13:24:24 183

原创 java内部类

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

2023-04-10 18:31:05 354

原创 数据库增删查改

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

2023-04-07 21:08:39 325

原创 java简单图书管理系统

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

2023-04-03 13:39:25 206

原创 java接口

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

2023-04-01 19:50:56 468

原创 JAVA抽象类

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

2023-03-30 21:55:48 173

原创 java多态

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

2023-03-29 22:11:37 497

原创 java继承

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

2023-03-28 19:50:24 324

原创 Java类和对象

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

2023-03-20 19:32:06 257

原创 数据库select操作

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

2023-03-19 22:23:39 1896

原创 JAVA方法

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

2023-03-17 14:39:16 802

原创 java程序逻辑控制

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

2023-03-12 20:00:19 308

原创 认识数据库

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

2023-03-06 17:01:35 168

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

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

2023-03-02 17:57:03 724

原创 Linux进程间通信

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

2023-02-27 22:46:01 228

原创 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 190

原创 初识java

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

2023-02-26 13:31:06 97

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

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

2023-02-26 11:17:31 339

原创 C++set和map

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

2023-02-25 16:25:17 100

原创 C++多态

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

2023-02-05 20:54:47 109

原创 Linux动静态库

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

2023-01-15 08:39:26 179

原创 C++继承

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

2023-01-10 14:24:54 170

原创 C++模板进阶

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

2023-01-09 20:35:03 83

空空如也

空空如也

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

TA关注的人

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