Java常见问答题及答案1 -- JAVA 小结

来源:互联网 发布:娇兰黄金复原蜜 知乎 编辑:程序博客网 时间:2024/04/29 13:39

  1. 说出ArrayList,Vector, LinkedList的存储性能和特性?什么情况下选择使用哪个?
存储性能和特性:
1.ArrayList和Vector都是使用数组实现的,查询效率较好,不适合做增删操作。
2.ArraryList 和Vector的区别是:Vector是线程安全的,而ArrayList是线程不安全       的。
3.LinkedList类使用双向链表结构实现,查询效率较低,适合做增删改的操作。
使用环境:
需要进行大量查询的时候,可以考虑使用ArrayList和Vector,如果有并发操作,可以       使用线程安全的Vector。LinkedList则使用于查询操作较少,增删操作较多的情况。
  1. StringStringBuffer的区别? String s=new String(“xyz”),创建了几个String Object?
String是final类,每次操作都会创建一个新的对象,如果进行频繁的操作就可能会引起GC,影响性能。而StringBuffer是对自身进行操作,不会每次都去创建一个对象。并且是线程安全的,而String是线程不安全的。
如果,”xyz”已经存在常量池中,则只会创建一个String对象,如果没有存在常量池中,则会创建两个String对象。
  1. HashMapHashtable的区别?
hashMap是线程不安全的,Hashtable是线程安全的。
HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。
  1. 垃圾回收的优点和原理,以及虚拟机是如何实现回收的?
优点:程序员可以不用自己进行垃圾回收处理工作,交给系统即可。
原理:使用垃圾回收机制,通过垃圾回收算法进行判断,然后进行回收工作。
实现:在Java中使用分代算法,年轻代(存活时间短的对象),年老代(存活时间长          对象),在年轻代中能够,使用复制算法进行回收,而在年老的对象使用标记-清除算法。
6. c
首先根据hashCode()方法,去判断返回值是否相等,相等的条件下再调用equals(Object o)进行判断,如果不相等则放入集合,否则不能存入。
7. 写一个Singleton例子.
public class Singleton { 
    private static class SingletonHolder { 
        private static final Singleton INSTANCE = new Singleton(); 
    } 
    private Singleton (){} 
    public static final Singleton getInstance() { 
        return SingletonHolder.INSTANCE;
    } 
}
8. Sql语言中,left join  inner join 以及right join三者的区别是什么?
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
9.谈谈你对Android消息处理机制的理解(比如UI Thread如何和其他Thread协同工作)?
Android的消息机制,主要由Handler、MessageQueue和Looper三个类来实现。
首先,在UI线程中创建一个Handler对象h,然后,在子线程通过h的post方法发送消息,post会把消息传递到MessageQueue,UI线程中自带的Looper会去 MessageQueue中取出这条消息,然后再把消息交给h处理(在handleMessage方法中进行处理)。这样便实现了从子线程跳转到主线程。
10.原码、反码、补码、移码

原码:
如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1。剩下的n-1位表示概数的绝对值。
例如: X=+101011 , [X]原= 00101011    X=-101011 , [X]原= 10101011 
位数不够的用0补全。
PS:正数的原、反、补码都一样:0的原码跟反码都有两个,因为这里0被分为+0和-0。
反码:
知道了什么是原码,那反码就更是张飞吃豆芽——小菜一碟了。知道了原码,那么你只需要具备区分0跟1的能力就可以轻松求出反码,为什么呢?因为反码就是在原码的基础上,符号位不变其他位按位取反(就是0变1,1变0)就可以了。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100
补码:
补码也非常的简单就是在反码的基础上按照正常的加法运算加1。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]补=11010101
PS:0的补码是唯一的,如果机器字长为8那么[0]补=00000000。
移码:
移码最简单了,不管正负数,只要将其补码的符号位取反即可。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]补=11010101,[X]移=01010101


( 1 )对于外部类而言,它也可以使用访问控制符修饰,但外部类只能有两种访问控制级别: public 和默认。因为外部类没有处于任何类的内部,也就没有其所在类的内部、所在类的子类两个范围,因此 private 和 protected 访问控制符对外部类没有意义。( 2 )内部类的上一级程序单元是外部类,它具有 4 个作用域:同一个类( private )、同一个包( protected )和任何位置( public )。( 3 ) 因为局部成员的作用域是所在方法,其他程序单元永远不可能访问另一个方法中的局部变量,所以所有的局部成员都不能使用访问控制修饰符修饰。



原创粉丝点击