您的位置:首页 > 职场人生

面试问题记录-ali

2017-03-09 21:43 197 查看
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时,先将其委派给父类,如果父类能够进行加载,就让父类加载;否则,在由子类加载;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: