PCB: 进程控制块process control block,一个数据结构,进程存在的唯一标志. 系统通过PCB来了解进程的状态信息,以便控制和管理。
事务:指一个单元的工作,要么全做,要么全不做,保证一组数据的修改要么全部执行,要么全部不执行。
事务的特点: ACID: 原子性(要么都做,要么都不做),一致性(运行中发生故障,必须回滚),隔离性(一个事务不能被其他事务干扰),持续性(事务一旦提交,对数据库的改变应该是永久性的)。原隔一尺(持)。
多态: 接口的多种不同的实现方式. (允许将子类类型指针赋值给父类类型指针)
继承: 一个类继承另一个类的功能, 可以直接使用其属性和方法.并可以添加
Java单继承, c++可以多继承(多个爹)
封装: 隐藏对象的属性和细节, 仅对外提供公共访问方式.(控制属性的读和修改的访问级别)
虚函数:在某基类中声明为 virtual, 允许被一个或多个派生类中重写的成员函数,以实现多态。
Virtual 函数类型 函数名
纯虚函数:在基类中声明的虚函数,在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚数的方式是在函数原型后面加“=0”。
抽象类:包含纯虚数的类是抽象类。
指令是内核态的多还是用户态的多?
内核态,CPU可以访问内存所有数据,用户态下是受限访问,只能访问自己空间中的内存。
FAT: 文件配置表file allocation table: 分配给文件的所有盘块号都放在该表中,记录了文件所在位置。
文件系统:负责管理和存储文件信息的软件机构,由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性
文件系统类型: Windows中有FAT32,NTFS,Linus中有ext2,ext3,ext4
括号匹配:在很多字符串处理的场景中时常被用到,编译器编译时检查应该成对出现的括号是否符合要求等
栈应用---括号匹配:
设置一个栈,每读入一个左括号,则将该括号压入栈内;如果读到右括号,则与栈顶的左括号进行匹配检验,若成功,则栈弹出一个元素,否则整个式子匹配失败,结束。
算法思想:设置一个栈,当读到左括号时,左括号进栈。当读到右括号时,则从栈中弹出一个元素,与读到的左括号进行匹配,若匹配成功,继续读入;否则匹配失败,返回FLASE。另外,在算法的开始和结束时,栈都应该是空的.所以匹配到最后还要判断栈是否为空,若非空,则说明匹配失败。
进程和线程(thread)的区别
线程是独立调度的基本单位, 本身没有资源, 进程是资源分配的基本单位, 同一进程中的线程共享进程的地址空间(放着各种资源: 进程代码段, 全局变量, 打开的文件), 但是, 一个线程的栈指针对其他线程透明(心里的客栈, 只对自己开放)
进程为什么是资源分配的基本单位?
进程是一个程序对某个数据集的一次运行活动,创建进程的时候要分配CPU和内存等资源。
OSI/RM开放系统互连参考模型的全称
Open System Interconnection Reference Model.
OSI七层
物理层physical layer,数据链路层data link layer,网络层network layer,传输层transport layer,会话层session layer,表示层presentation layer,应用层application layer
二叉排序树转换成排序的双向链表
用递归的方法。二叉排序树特点一个结点的左子树比它小,右子树比它大,中序遍历得到一个递增的序列。
在中序遍历时,让指向左子树的指针变为链表中指向前一个结点的指针,指向右子树的指针变为链表中指向后一个结点的指针。
内存交换(对换)/对换(交换):多个进程之间
把处于等待状态的程序从内存中移出, 把准备好竞争CPU的程序移入内存交换区。
提高并行:多道程序设计
中断:解决处理器速度和硬件速度不匹配,是多道程序设计的必要条件。每个中断都有自己的数字标识,当中断发生时,指令计数器PC和处理机状态字PSW中的内容自动压入处理器堆栈,同时新的PC和PSW的中断向量也装入各自的寄存器中。这时,PC中包含的是该中断的中断处理程序的入口地址,它控制程序转向相应的处理,当中断处理程序执行完毕,该程序的最后一条iret(中断返回),它控制着恢复调用程序的环境。
中断和系统调用的区别:
中断是由外设产生, 无意的, 被动的
系统调用是由应用程序请求操作系统提供服务产生, 有意的, 主动的。要从用户态通过中断进入内核态。(联系)
中断过程:中断请求 中断响应 断点保护 执行中断服务程序 断点恢复 中断返回
系统调用过程:应用程序在用户态执行时请求系统调用,中断,从用户态进入内核态,在内核态执行相应的内核代码。
中断之后保存什么?保存pc, psw, 通用寄存器。Pc程序计数器program count,存放下一条指令所在的单元的地址。Psw,program status word程序状态字,指处理器的状态。
二叉树:
先序二叉树:若二叉树为空,什么也不做,否则,访问根结点,然后先序遍历左子树,最后先序遍历右子树。
中序二叉树:若二叉树为空,什么也不做,否则,中序遍历左子树,然后访问根结点,最后中序遍历右子树。
后序二叉树:若二叉树为空,什么也不做,否则,后序遍历左子树,后序遍历右子树,最后访问根结点。
先中后序,递归,用栈实现,因为每个结点都只访问一次,时间复杂度O(n),递归工作栈的深度恰好是树的深度,最坏情况下,n结点,n层,时间复杂度O(层数)。
层次遍历:若二叉树为空,什么也不做,否则,访问根结点,然后逐层遍历。
用队列。先+中,后+中,层+中序遍历都可以唯一确定一棵二叉树。
平衡二叉树(AVL树):树上任一结点的左子树和右子树的深度之差不超过1。
栈stack [stæk] 堆heap [hip]
The character of stack is first in last out. we can insert [ɪnˈsɜrt] or delete [diˈlit] elements [ˈɛləmənts] in the same direction.
The character of heap is first in first out. We can insert elements in one direction, but delete delements in the other direction.
野指针:指向不可用内存区域的指针。
指针变量未初始化(会乱指,可能存储关键信息,一下子就比修改了),指针释放后未置空,指针操作超越变量作用域造成。对野指针进行操作很容易造成程序错误,甚至可能直接引起崩溃。
野指针与空指针不同,野指针无法通过简单地判断是否为NULL避免.
如何避免?指针变量初始化置null,指针释放后置null.
饥饿与死锁:
死锁:这种多个进程因竞争资源而造成的僵局,两个或多个进程因无限等待一个事件, 而该事件只能由这些等待进程之一来产生若如外力,进程都无法向前推进。
饥饿: 进程等待永远不会分配给自己的资源.
相同点: 都是因为竞争资源引起的
不同点: 死锁至少涉及两个进程, 一定有循环等待, 且等待永远不会释放的资源(好几个在环里不释放)
饥饿可以只涉及一个进程, 不一定有循环等待, 等待会释放但不会给自己的资源.
给你一组N个数字(比如 vector num), 然后给你一个常数(比如 int target) ,我们的goal是在这一堆数里面找到K个数字,使得这K个数字的和等于target。
2sum: 先对数组中的数进行排序,再设置两个指针,一个指向头,一个指向尾。判断两数和是否等于想要的数,如果是则在结果集添加这个数组;如果小了说明左边指针指向的数小了,因此左指针右移;反之如果大了则右指针左移。
3sum: 同样先对数组排序,设置三个指针p,q,r,p指针指向第一个数x,则q,r要指向数组中剩余数中的两个,并且指向的两数和为-x,从而转化为两数和问题。对p指向第一个数的情况分析完毕后,不可能再有满足题意且包含x的情况,于是p右移。这样一直分析到p指向数组中倒数第三个数的情况。
3sum时间复杂度O(n^2),排序(nlogn)
最外层遍历一遍,等于选出一个数, 之后的数组中转化为找和为target-nums[i]的2SUM问题。
时间复杂度:
(1)Θ(西塔):紧确界。相当于"="
(2)O (大欧):上界。相当于"<="
欧,牛,达到最大了
(3)o(小欧):非紧的上界。相当于"<"
(4)Ω(大欧米伽):下界。相当于">="
(5)ω(小欧米伽):非紧的下界。 相当于">"
折半插入:O(lon2n)
折半查找: O(n^2)因为同一往后移要O(n)
打开open文件:系统调用open,指明文件名,通过索引找到指定文件,将文件的属性(包括在外存的物理地址)从外存拷贝到内存打开文件表中,并返回给用户一个文件描述符(open文件时产生的一个整数,用来标识文件,起到索引作用)。
读read文件:系统调用read,指明文件名称和要读入文件的内存地址,通过搜索目录找到文件位置,系统维护一个读位置的指针,每当发生读操作时,更新读指针。
(根据open返回的文件描述符,找到文件位置)
写write文件:系统调用,指明文件名和要写入文件的内容,通过搜索目录找到文件位置,系统维护一个写位置指针,每当发生写操作,更新该写指针。
HashMap和HashTable都是基于哈希表来实现键值映射的工具类,通过单链表9(拉链法)解决冲突问题,容量不足(超过了阀值)时,都会自动增长。
区别: Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。
Hash 表最坏情况下相当于一个单链表。所有的关键字通过函数得到的结果都一样时。
哈希表也即是哈希数组,根据关键词直接进行访问的数据结构,建议了关键字和存储地址之间的一种直接映射的关系。与表中元素个数无关,时间复杂
数据库存储数据的方式: