JAVA面试积累1
来源:互联网 发布:linux fork多个子进程 编辑:程序博客网 时间:2024/05/22 19:47
HashMap和Hashtable
A:HashMap和Hashtable两个类都实现了Map接口,二者保存K-V对(key-value对)
B:HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
C:Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
D:由所有HashMap类的“collection 视图方法”所返回的迭代器都是快速失败的:在迭代器创建之后,如果从结构上对映射进行修改,除非通过迭代器本身的 remove 方法,其他任何时间任何方式的修改,迭代器都将抛出ConcurrentModificationException。Hashtable和HashMap的区别主要是前者是同步的
Java修饰符
在Java中修饰符总共有一下几种:
1.访问控制修饰符
分别有:
public private protected,缺省
2.其它修饰符
分别有:abstract,final,static,native,synchronized,transient,volatile等
ArrayList和Vector主要区别
1) 同步性:Vector是线程安全的,也就是说是同步的 ,而ArrayList 是线程序不安全的,不是同步的 数2。
2)数据增长:当需要增长时,Vector默认增长为原来一倍 ,而ArrayList却是原来的50% ,这样,ArrayList就有利于节约内存空间。
如果涉及到堆栈,队列等操作,应该考虑用Vector,如果需要快速随机访问元素,应该使用ArrayList 。
ArrayList & LinkedList
ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别:
从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;
而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
Java运行时的数据区
Java运行时的数据区包括:(其中前两个是线程共享的)
1.方法区(Method Area) 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
2.堆(Heap) 存放对象实例,几乎所有对象实例都在这里分配内存
3.虚拟机栈(VM Stack) 描述的是Java方法执行的内存模型:每个方法在执行的同时会创建一个Stack Frame(方法运行时的基础数据结构)用于存储局部变量表、操作数栈、动态连接、方法出口等信息
4.本地方法栈(Native Method Stack) 与虚拟机栈了类似,不过则为虚拟机使用的到的Native方法服务。(有的虚拟机譬如Sun HotSpot虚拟机直接把本地方法栈和虚拟机栈合二为一)
5.程序计数器(Program Counter Register) 可看作当前线程所执行的字节码的行号的标识器
下面那些情况可以终止当前线程的运行?
a 当一个优先级高的线程进入就绪状态时
b 抛出一个异常时
c 当该线程调用sleep()方法时
d 当创建一个新线程时
答案B
当一个优先级高的线程进入就绪状态时,它只是有较高的概率能够抢到CPU的执行权,不是一定就能抢到执行权,所以A错
抛出一个异常时,该线程就终止了,所以B正确
当前线程调用sleep()方法或者wait()方法时,只是暂时停止了该线程的运行,不是终止线程,注意题目说的是“终止”,就是完全停止,所以C错误
当创建一个新的线程时,该线程也加入到了抢占cpu执行权的队伍中,但是是否能抢到,并不清楚,和A的思想一样,所以D错误
java 中的集合层次
http://blog.csdn.net/stubbornaccepted/article/details/54561957
java类加载器
1)Bootstrap ClassLoader
负责加载JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类
2)Extension ClassLoader
负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包
3)App ClassLoader
负责记载classpath中指定的jar包及目录中class
4)Custom ClassLoader
属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader
加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。
基本类型和包装类
JVM垃圾回收机制
- JAVA面试积累1
- JAVA面试积累2
- Java面试笔试试题积累(每天更新)
- 面试积累
- 面试积累
- 面试积累
- 面试积累
- 面试积累
- 面试积累
- android 面试知识个人积累1
- 面试笔试杂项积累-leetcode 1-5
- Java基础知识积累1
- Java面试所需技术知识积累要点详列
- android面试 积累
- 面试题目积累
- 面试题目积累2
- 面试题目积累3
- 面试积累日志
- 57. Insert Interval
- 【poj 1679】The Unique MST 【次小生成树 模板】
- 明远智睿i.MX6开发板EK200捡漏之二:RTC时间修改
- Win10 Microsoft IME是什么进程?占用CPU高如何解决?
- (3)基础学习:渲染
- JAVA面试积累1
- HDU 2255 KM算法—模板
- Linux基础
- 学习虫师的《web接口开发与自动化测试》第六章
- 基于深度学习的OCR-from 美團技術團隊
- Sum of Square Numbers问题描述
- CodeForces 311B/CSU 1963 Cats Transport/Feed The Rabbit(斜率优化dp)
- ssm(Mysql)+Redis的Demo
- 暑期学习记录03