1.反射、clone、反序列化创建对象 ,深拷贝(复制原型中对象的内存copy)和浅拷贝 (复制原型的引用)
cloneable接口 点击这里
2. 匿名内部类:
可以继承其他类,但不能用extends。
可以实现某接口,但不能用implements。
如 class A{public void a()};
class B{public void b(){new A(){重写a方法}}
3. public private
4. jre叫java运行时环境,要运行java程序,必须安装jre,这也是跨平台的保障,只有装了jre才能运行java命令,要进行开发需要安装jdk,安装了jdk才能编译java程序,也就是执行javac等命令,jdk自带jre
5.抽象方法只能在抽象类和接口中有,为什么只有内部类可以是静态的抽象类,别的抽象类不能是静态的,抽象方法都不能是静态的。static方法中不能出现this,因为this是一个对象,而static是全局的,是属于这个类的。接口中不能有变量,所有的成员都是final,抽象类可以不是为final,因为接口的目的就是里面一些不会变的东西,只能有staic和final ,所有的方法都是Public abastract
反之一个抽象类却可以没有抽象方法,你或许奇怪那这是抽的什么象呢?这种用法还是存在的,其目的是不希望这个类被实例化。这种形式在Spring源码中实现单例模式就用到了。
抽象类也可以继承实体类,也可以实现接口,没有什么特别的限制。
抽象方法,接口里的方法,必须被重写实现,所以必须是public的。接口里可以有成员变量,但是必须(默认)是public static final的。
我们会在抽象类的非抽象方法中看到this。this代表的是对象本身,是和实例化有关的。如果抽象类不能被实例化,那么方法中的this是指什么呢?static方法,抽象方法中肯定不能有this,所以普通方法中的this肯定是由实例化对象调用的,所以这里的this,就是继承抽象类的实体类本身。
ps:实际上在普通类之间的继承,子类调用父类方法时碰到this也是指之类本身。
抽象类可以是static的(内部类才能使用static),但是抽象方法却不能是static的,因为抽象方法就是为了重写。
6.子类继承父类,构造函数
1.如果父类有构造函数带参数的,则子类必须要重写父类的这个带参数的构造函数,如果没有带参数则不用重写,因为系统只会默认生成一个不参数的构造函数,带参数的是不会继承的。
2.初始化子类时,必须先调用父类的构造函数,是无参的构造函数,如果写了super,则看情况调用父类的一个构造函数
3.写子类的带有参数的构造函数时,如果父类自己写了无参的构造函数,不是默认生成的那个,是自己写的,则可以不有super,首先调用父类无参的构造函数,如果没有定义父类的无参的构造函数,则会编译错误。
4.子类没有显示调用父类构造函数,不管子类构造函数是否带参数都默认调用父类无参的构造函数,若父类没有则编译出错。
7.接口可以继承接口,在实现接口的类重写所有的方法即可。抽象类可继承具体类,但前提是具体类必须有明确?
的构造函数。
8.asset的用法
9.NAN比较
10.字节流和字符流的比较?Unicode
11.有没有哪种情况用 + 做字符串连接比调用 StringBuffer / StringBuilder 对象的 append 方法
性能更好?
如果连接后得到的字符串在静态存储区中是早已存在的,那么用+做字符串连接是优于 StringBuffer /StringBuilder 的 append 方法的。String a="111"是放在栈中,String a=new String("aaa")是放在堆中 第5章12题目
如:但是有特殊情况: String str = “abc” + “def”;StringBuffer Sb = new StringBuilder(“abc”).append(“ def”);这时这种情况下:String的速度就要比StringBuffer的速度要快,因为这时jvm认为String str = “abc” + “def”;其实是:String str = “abcdef”;所以速度当然很快,这里说的是当String保存的字符串中有其他String的字符串时,速度就会变慢。
12.序列化时哪些东西是能被序列化的?
java中的序列化时transient变量(这个关键字的作用就是告知JAVA我不可以被序列化)和静态变量不会被序列化
13.java单例,与静态类的区别???只有内部类可以是静态的啊呢
误解一:静态方法常驻内存而实例方法不是。
实际上,特殊编写的实例方法可以常驻内存,而静态方法需要不断初始化和释放。????
误解二:静态方法在堆(heap)上,实例方法在栈(stack)上。
实际上,都是加载到特殊的不可写的代码内存区域中????不知道
1) 单例可以继承和被继承,方法可以被override,而静态方法不可以。
2)静态方法中产生的对象会在执行后被释放,进而被GC清理,不会一直存在于内存中。
3.)静态类会在第一次运行时初始化,单例模式可以有其他的选择,即可以延迟加载。
4.)基于2, 3条,由于单例对象往往存在于DAO层(例如sessionFactory),如果反复的初始化和释放,则会占用很多资源,而使用单例模式将其常驻于内存可以更加节约资源。
5. 静态方法有更高的访问效率。
6. 单例模式很容易被测试。
14.Iterator的快速失败机制 点击这里 Iterator是Collection所继承的接口,因此所有的集合类都实现了这个接口,有hasNext().next(),remove()方法。源码是点击这里 ,next方法返回当前的元素,并且将指针后移一位,remove()方法删除当前的元素。并修改元素的个数 再看一下吧
15.Map的遍历 点击这里
两种:一种是把Key先转换为Set,keySet(),再把Set转换为Iterator,再遍历这个,第二种是把Key和Value一起存储在Map.entrySet()中,直接得到key和value
16.Person p = new Person();
1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。
2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,在堆内存中建立对象的特有属性。并进行默认初始化。
5,对属性进行显示初始化。
6,对对象进行构造代码块初始化。
7,对对象进行对应的构造函数初始化。
8,将内存地址付给栈内存中的p变量。
static会在第一次使用这个类时加载,再初始化则不会再加载了,如单例的懒汉式
静态方法是不能调用非静态方法和属性,前提是不能调用没有确定实例化对象的非静态方法和属性,而new Person()并不是一个单纯的非静态方法,它是在构建一个类对象及其初始化对象,返回的是一个对象实例,相当于调用的是一个以构建好的实例化对象。对象都确定了,静态方法当然可以使用了...,如果Person是一个内部类则不可以直接在外部内的静态方法中使用,因为外部类并还没有初始化,则内部类无法独立于外部类
17.comparable,comparator(可以排序,分组还没有看) 点击这里
comparable的用法:如果一个数组里面存的是一个对象,则这个对象的类需要实现comparable接口。然后重写compareTo()方法,如果要升序,则前一个数如果大于另一个数,则返回正数,降序则相反。然后用Collection.sort()方法直接对存储该对象的数组排序即可。
comparator的用法:排序。在Collection.sort(list,new Comparator())接口,然后实现它的compare()方法,与上面的一样。
18.点击这里 Enumeration(枚举)接口的作用和Iterator类似,只提供了遍历Vector和HashTable类型集合元素的功能(这两个都是线程安全的),不支持元素的移除操作。
Enumeration 速度是 Iterator 的2倍,同时占用更少的内存。但是,Iterator 远远比 Enumeration 安全,因为其他线程不能够修改正在被 iterator 遍历的集合里面的对象。同时,Iterator 允许调用者删除底层集合里面的元素,这对 Enumeration 来说是不可能的。
synchronizedList修饰的list如下:private static List TEST_LIST = Collections.synchronizedList(new ArrayList());
synchronizedList在迭代的时候,需要开发者自己加上线程锁控制代码,因为在整个迭代的过程中如果在循环外面不加同步代码,在一次次迭代之间,其他线程对于这个容器的add或者remove会影响整个迭代的预期效果,所以这里需要用户在整个循环外面加上synchronized(list);
对象初始化以后,才能得到其class.
19.泛型只在编译阶段起作用:泛型只在编译阶段有效
AyyayList a =new ArrayList();
ArrayList b =new ArrayList();
Class c1 = a.getClass();
Class c2 = b.getClass();
System.out.println(a == b);//true
所有反射的操作都是在运行时的,既然为true,就证明了编译之后,程序会采取去泛型化的措施,也就是说Java中的泛型,只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,成功编译过后的class文件中是不包含任何泛型信息的。两个class一样。泛型信息不会进入到运行时阶段。
List <String>[] lsa =new List<String>[10];错误 都不知道这是什么写法
List<?> [] lsa =new List<?>[10];用通配符正确
20。http://blog.csdn.net/q1406689423/article/details/60772217
树的概念等。深度、度、叶子节点、子节点、满二叉树、完全二叉树
21。 点击这里 类加载
程序计数器:
栈(Java虚拟机栈、本地方法栈)
堆
方法区(里面有常量池)
22.反射的使用:(把.class文件反射为.java文件,得到一个类,就可以获得它的方法、属性等)
创建一个对象
得到方法,并调用方法
利用反射改变一个对象的属性值点击这里
得到一个类的三种反射办法:
//第一种方式:
Classc1 = Class.forName("Employee");
//第二种方式:
//java中每个类型都有class 属性.
Classc2 = Employee.class;
//第三种方式:
//java语言中任何一个java对象都有getClass 方法
Employeee =newEmployee();
Classc3 = e.getClass();//c3是运行时类 (e的运行
23. http://blog.csdn.net/ochangwen/article/details/52448553 异常和错误,异常还有运行时异常和非运行时异常,非运行时必须用Try-catch 否则运行不通过。错误与代码无关,与JVM有关,如OutOfMemery
24 http://www.cnblogs.com/ivanfu/archive/2012/02/12/2347817.html 静态代码不一定装载类的时候会调用,当初始化过程为false时
25 http://blog.csdn.net/yuejingjiahong/article/details/6668265 设置Activity背景为透明的,当A>B (B为透明,则A就不会调用stop())
26.Java继承不会重写成员变量,只会重写成员函数。Parent A=Child B();
A.a//父亲的
A.a()//孩子的
27. List nameList =new ArrayList<String>();//编译通过
List <Object> nameList =new ArrayList<String>();编译失败
构造器其实就是构造对象实例的方法,无参数的构造方法是默认的,但是如果你创造了一个带有参数的构造方法,那么无参的构造方法必须显式的写出来,否则会编译失败。
28.HashMap的原理 http://www.importnew.com/10620.html
HashMap有一个Table名字的数组,里面存的是Entry类的对象,这个类是HashMap的内部类,是一个泛型类<key,value>,用来存储key-value对。存储键值对的数组靠key的hasCode()方法返回hash值,根据hash值找到对应的索引的位置。如果有两个key相同,则计算出来的索引值一样,这时候两个对象还是会存一起,但它们在该索引的位置以链表的形式存储。如果重写key的equals()方法,当两个key 的equals()判断为相等时,则Put该key时后一个会覆盖前面一个,如果不相等,则就以链表的形式存储在一起。get的时候也是这样,如果equlas()一样,则取出的为一个。当key为一个对象时,就要考虑其的hashcode()和equals()方法了。
EntrySet.Iterator().next()返回第一个元素的,类型为Entry<key,value>
HashMap有一个叫做Entry的内部类,它用来存储key-value对。
上面的Entry对象是存储在一个叫做table的Entry数组中。
table的索引在逻辑上叫做“桶”(bucket),它存储了链表的第一个元素。
key的hashcode()方法用来找到Entry对象所在的桶。
如果两个key有相同的hash值,他们会被放在table数组的同一个桶里面。
key的equals()方法用来确保key的唯一性。
value对象的equals()和hashcode()方法根本一点用也没有。
29.java的安全性,效率(可以实时编译,字节码编译成为本地的执行码):
Java 语言在安全性方面引入了实时内存分配及布局来防止程序员直接修改物理内存布局;通过字节代码验证器对字节代码的检验,以防止网络病毒及其它非法代码侵入。此外,Java 语言还采用了许多面向对象的异常处理机制,负责对一些异常事件进行处理,如内存空间不够,程序异常中止等的处理
30.Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
31. new Object(){
void show(){
System.out.println("show run");
}
}.show();//正确
//2
Object obj = new Object(){
void show(){
System.out.println("show run");
}
};
obj.show();//编译错误
1和2的写法正确吗?有区别吗?说出原因。
写法是正确,1和2都是在通过匿名内部类建立一个Object类的子类对象。 区别: 第一个可是编译通过,并运行。 第二个编译失败,因为匿名内部类是一个子类对象,当用Object的obj引用指向时,就被提升为了Object类型,而编译时检查Object类中是否有show方法,所以编译失败。
32.内部类当一个类是在一个函数中被定义时,定义在方法中,比方法的范围还小。是内部类中最少用到的一种类型。像局部变量一样,不能被public, protected, private和static修饰。只能访问方法中定义的final类型的局部变量。方法内部类在方法中定义,所以只能在方法中使用,即只能在方法当中生成方法内部类的实例并且调用其方法
33.对于继承来说,如果某一方法在父类中是访问权限是 priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效
34.接口的方法默认是 public abstract;
接口中不可以定义变量即只能定义常量(加上final修饰就会变成常量)。所以接口的属性默认是 public static final常量,且必须赋初值。
注意:final 和 abstract 不能同时出现
35.子类没有显示调用父类构造函数,不管子类构造函数是否带参数都默认调用父类无参的构造函数,若父类没有则编译出错。
35.静态内部类里面的成员变量必须是static的,但方法可以不是的,静态方法不可以使用该类的内部类,只能使用静态方法和静态成员、静态内部类。
36.https:
1)客户端发出加密请求
2)服务器端用CA的私钥加密自己的公钥(还有一些信息,如时间等等)发送给客户端(数字证书)
3) 客户端检查证书是否可信任(),用CA的公钥进行解密得到服务器端的公钥
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值。
4)用该公钥随机生成一个对称密钥(会话密钥),然后用公钥机加密该密钥,发送给服务器端
5)服务器端得到该消息,用私钥解密得到通信的会话密钥
6)以后通信都用该会话密钥加密
37.进程通信拷贝次数
消息队列和管道基本上都是4次拷贝,而共享内存(mmap, shmget)只有两次。
4次:1,由用户空间的buf中将数据拷贝到内核中。2,内核将数据拷贝到内存中。3,内存到内核。4,内核到用户空间的buf.
2次: 1,用户空间到内存。 2,内存到用户空间。
消息队列和管道都是内核对象,所执行的操作也都是系统调用,而这些数据最终是要存储在内存中执行的。因此不可避免的要经过4次数据的拷贝。但是共享内存不同,当执行mmap或者shmget时,会在内存中开辟空间,然后再将这块空间映射到用户进程的虚拟地址空间中,即返回值为一个指向一个内存地址的指针。当用户使用这个指针时,例如赋值操作,会引起一个从虚拟地址到物理地址的转化,会将数据直接写入对应的物理内存中,省去了拷贝到内核中的过程。当读取数据时,也是类似的过程,因此总共有两次数据拷贝。
Binder:
IPC 中最基本的问题在于进程间使用的虚拟地址空间是相互独立的,不能直接访问,所以要相互访问,就要借助 kernel ,就是要让数据用用户空间进入到内核空间,然后再去到另一个进程的用户空间。传统的 IPC 是这样的,其实 binder 也是这样的,不过它把内核空间的地址和用户空间的虚拟地址映射到了同一段物理地址上,所以就只需要把数据从原始用户空间复制到内核空间,把目标进程用户空间和内核空间映射到同一段物理地址,这样第一次复制到内核空间,其实目标的用户空间上也有这段数据了。这就是 binder 比传统 IPC 高效的一个原因。
38.RelativeLayout比LinearLayout效率低的原理
https://www.cnblogs.com/qitian1/p/6461473.html