1.进程通信的方式:
|--管道:管道是一种半双工通信,数据只进行单向通信,并且要求是具有亲缘关系的进程,亲缘关系一般是父子进程间通信;
{1,如对文件进行操作,创建管道,会返回两个参数【fd[0],fd[1]】,fd[0]:用于表示:一个进程对文件进行写入操作,fd[1]:表示另一个进程进行读文件操作;}
|--有名管道:有名管道也是半双工通信,可以是不具备亲缘关系的进程;
|--信号:用于通知接收进程某个事件已经发生;是一种比较复杂的通信方式;
{如Linux中,当main函数主进程执行完毕后,需要向内核返回一个消息,表示该进程已经完成;或者中断号机制;}
|--信号量:是一种计数器,用来控制多个进程对共享资源的访问;
{如理发师问题:mutex:表示等待的理发的人数;}
|--共享内存:是由一个进程创建,多个进程都可以进行访问;通常与其他通信方式共同使用,如信号量;
{如:Linux下:主进程通过fork函数创建了子进程,父子进程共享内存;}
|--消息队列:消息队列是有消息构成的链表,存放在内核中,并且有专门的消息队列标识符标识;
{信箱机制:投递者将信放入信箱,然后接受者接收信;}
|--套接字:socket通信,是进程间进行消息通信的机制;
{如:java中聊天的程序的创建:建立socket对象和severSocket对象;}
2.网络七层模型:
|--物理层:主要是比特传输;
|--数据链路层:主要是帧传输,包含目标mac地址+源mac地址+协议类型如ip协议;如以太网;
|--网络层:主要是数据报传输,包含目标IP地址+源IP地址+协议类型如tcp or udp协议;
|--传输层:主要是进行可靠传输,包含端口号;
|--会话层:建立或者断开连接(指数据流动中的逻辑通路);
|--表示层:将数据格式的转换,如编码的统一;
|--应用层:应用程序间通信;文件传输,远程登录,电子邮件等;
3.哈夫曼树及应用
|--哈夫曼树是带权路径长度最短的树,权值越大距离根节点越近;
|--应用:哈夫曼编码和译码,压缩文件等;
4.平衡二叉树:
|--是一颗空树,或者左右子树高度之差不大于1,并且左右子树也是平衡二叉树;
|--使用:红黑树,使用TreeMap、TreeSet中;
5.计算机网络中的通信:
|--同步通信和异步通信;(都是串行通信);图解tcp、ip page104;
举个例子:(引用别人的)
同步通信:同学叫我去吃饭,我没听到,他就一直叫我,直到我听到,和她去吃饭;
异步通信:同学叫我去吃饭,叫完他就自己去吃饭了,我后来听到了,我再去吃饭;
6. jvm中的引用:
|--强引用:平常使用的(Object obj = new Object())都是强引用,只有我们不再使用该对象时,虚拟机的垃圾回收机制才会对其进行回收;
|--软引用:描述一些有用但不是必须的对象,当内存不足时,会先对软引用进行回收,如果回收之后仍然内存不足,就会报内存溢出异常;
|--弱引用:会在下一次垃圾回收机制执行时,被回收;
|--虚引用:不会影响对象生存时间,的是对引用对象进行跟踪;在跟踪的对象被回收时,系统会收到一个通知;
7.垃圾回收机制:
|--标记-清理:就是先对不在使用的对象进行标记,然后对其进行清理;
|--复制算法:将内存分为两部分,一部分进行使用,另一部分暂时不用,当第一部分内存用完时,就将第一部分中仍然在使用的对象复制到第二部分,然后,对第一部分进行清理操作;
|--标记-整理:就是将内存分为Eden+Survivor * 2;每次使用Eden和一个Survivor区域,当回收时,将Eden和Survivor中存活的对象复制到没用的那个Survivor中,然后对刚使用过的Eden和Survivor进行清理操作;
|--分代回收:一般年轻代使用复制算法,老年代使用标记-整理或者标记-清理算法;
7.一般将Java堆区分为新生代和老年代,将方法区成为永久代;
8.分派:单分派和多分派;
单分派:动态单分派;(运行时,确定实际类型,方法的接收者,调用对应的方法)
多分派:静态多分派;(编译时,确定引用的类型,以及参数的类型,方法的参数)
9.类是如何加载的;
|--1.加载类字节码文件;
|--2.装载:
|--检验:验证是否是类的字节码文件
|--准备:为类变量分配内存,给变量附上默认值;
|--解析:将符号引用替换为直接引用;
|--3.初始化:将变量附上初始值;
|--4.使用:
|--5.卸载:
10.双亲委派模型:
|--Boostrap ClassLoader:启动类;
|--Extension ClasLoader:扩展类;
|--Application ClassLoader:应用类;
|--自定义的加载器类;
如果一个类收到了类加载器的请求,在进行classload时,先将其委派给父类,如果父类能够进行加载,就让父类加载;否则,在由子类加载;