今天忙着写毕业设计任务书,实战视频看了多半天的,明天一起记
(太晚了一点多了,错的先放着,明天再写详解。。明天好像也没时间,那就后天)
1. has a 和 is a
组合和继承
2.线程如何同步和通讯
synchronized修饰方法或代码块,多个线程访问这个被修饰的方法或代码块。
少了,明天细看。补充:如果另外一个线程也想获得这把锁运行就需要使用wait() 和notify()/notifyAll()方法来进行线程通讯了。
3.classLoader如何加载class
好像有三个类加载器一个jvm实现 两个实际上也是继承了ClassLoader的java类 ,三个类加载器就记得一个最基本jdk类,一个加载lib下扩展目录下的类还有一个一点想不起来了
Bootstrp加载器(用C++语言写的)加载rt.jar包含Java.*、javax.*包,org.*包(据说java9以后开始模块化,因为我是1.8)
ExtClassLoader由Bootstrploader加载,主要加载%JAVA_HOME%/jre/lib/ext
AppClassLoader 加载引用类 classpath 指定目录下或jar包中的类
4.servlet生命周期
实例化 init service service service… destory
5.抽象类作用
应该是实现部分接口功能。。
6.ArrayList 如何实现数据按自定义方式有序存放
不会 让数据类型实现Comparable,实现Comparable接口 给Collections.sort传参
7.分层设计的好处?
解耦,重用,逻辑清晰,
8.序列化接口的id有什么用
不糊对类对象序列化的时候分配一个serialVersionUID,修改类的是否修改类自身的serialVersionUID,需要反序列化的时候根据这个版本号来判断是否可以进行反序列化,防止序列化以后的类对象类结构和当前类结构不匹配
9.StringBuffer和StringBuilder
后者性能更好但是线程不安全。
10hasCode方法的作用
就知道是返回一个经过运算的物理位置地址,在不可重复集合(set)中很有用,具体怎么用明天调试在细说。先睡了耳鸣了都。。。
下面的话来自JDK:
hashCode:
public int hashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。
hashCode 的常规协定是:
在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)