zoukankan      html  css  js  c++  java
  • 面试准备&总结-Java基础篇

      在vps的服务器到期了,在hw又不能访问,直接在博客园写笔记了。


     基础篇

    1. 集合类的继承关系,源码实现原理,初始大小和如何增长。

    - list类初始大小10,加载因子为1,扩容到1.5+1。底层是个Object数组,调用 System.arraycopy进行拷贝。

    - Vector同上,扩容倍数是两倍,是同步的,线程安全。

    - HashMap初始大小16,加载因子0.75f,扩容到2倍。底层是数组+链表,调用resize()调整位置。ConcurrentHashMap分段锁,相当于若干个hashtable。

      -散列冲突:开放定址法,链地址法,最坏情况下如何优化。

    - HashTable初始大小11,加载因子0.75f,扩容到2倍+1。同步,线程安全。Hashtable不允许空key空value

    - TreeMap. 底层红黑树,能够保持有序,效率略低。

    -阻塞队列LinkedBlockingQueue,非阻塞队列ConcurrentLinkedQueue,常用在线程pipe上。

    指定大小可以提高性能。可能还会问Collections和Arrays中常用的方法。

    2.  interface和abstract class的区别

    -接口可以多重实现,抽象类不能多重继承。

    -抽象类中可以有attribute,接口只能有method。

    -接口的方法必须没有实现,抽象类可以有实现的方法。

    -接口中的方法默认且必须是public的,抽象类可以protected。

     3. 实例化一个未加载过的类的过程。 class.forName,classLoader 加载类卸载类,

    - 先加载类时触发父类静态域初始化、然后触发子类静态域,再调用父类构造函数,再调用子类构造函数。

    - Class.forName:http://www.cnblogs.com/zabulon/p/5826610.html

    - ClassLoader模型,使用:http://www.cnblogs.com/eoss/p/5992499.html 

    4.错误Error和异常Exception的分类,throws和throw的区别,return和finally的执行顺序。

    Java的异常(包括Exception和Error)分为 checked exceptions 和 unchecked exceptions :

    -checked exceptions :除了RuntimeException及其子类以外,其他的Exception类及其子类。Java编译器会检查它,并强制要求处理。

    -unchecked exceptions:包括运行时异常(RuntimeException与其子类)和错误(Error)。

     

    还有ArrayIndexOutofBoundsException、SecurityException等。

     5.Object有哪些方法?

    -toString,hashCode,equals

    -clone(浅复制),finalize,getClass

    -wait,notify,notifyAll

    6. ==、equals、hashCode的关系。有可能配合String问,有可能配合set问。

    - ==对基本类型比较值,对引用类型比较地址。

    - equals对于基本类型比较值,默认对引用类型也比较地址,(String重写了equals方法)。

    - hashCode默认返回地址,通常需要与equals一起重写。

    - String a= "abc"; String b = new String("abc"); String c = "ab"+"c";

     下面这些表达式的值为真: a!=b; a==c;  a.equals(b); a.equals(c);

     

    7.基本数据类型占的空间和范围是多少,int大小和JVM的位宽有关系吗?

    -boolean、byte、char、short、int、long

    -float、double

    无关。

    8.列举一些你用过的类、包、异常,新特性。

    10.volatile关键字的作用?

     防止编译器优化,保证cache一致性。

    11.乐观锁悲观锁,公平所不公平锁,原子类,原理实现方法。

    乐观锁:只在提交操作时检查是否违反数据完整,java中的实现为cas

    悲观所:读写全部加锁。

    12线程协作,wait、notify、notifyAll,锁和while条件检查的位置,如何实现生产者消费者模式。

    通常把synchronized放在while外面,防止信号丢失。

    synchronized(syncObject){
        while(condition){
            suncObject.wait();
        }
    }    

    还可以使用lock、await和signal实现线程协作。见:http://www.cnblogs.com/alphablox/archive/2013/01/20/2868479.html

    还可以使用blockingqueue实现。

    实现生产者消费者模式,见:https://zhuanlan.zhihu.com/p/20300609

    13.线程状态转换图,异常的处理。

     -图不贴了,比较简单。。

    -线程产生的异常需要在线程内补获,set异常处理器。

    14.string、stringbuilder、stringbuffer区别。

    String是final的,所以修改效率不高,StringBuilder是线程安全的。

    16IO和获取锁的阻塞操作能被interrupt么?

     不能抛出异常,但是会记录下,通过isInterrupted查看。

    17 BIO NIO AIO的区别

     http://blog.csdn.net/anxpp/article/details/51512200

     

    19编码UTF-8 和GBK和ANSI的区别?

     UTF-8:它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码,通用性强.

    GBK:不论中、英文字符均使用双字节来表示.

    转码使用unicode作为中转。如 String str1 = "hello"; 

    byte[] bytes = str1.getBytes("utf-8"); //可以将unicode的string转码成{"utf-8"}编码模式下的二进制编码

    String gbk = new String(bytes , "utf-8"); //将二进制编码按{"utf-8"}规则转为String。

    20.异步回调的实现。

    基于com.google.common.util.concurrent.ListenableFuture;

    redisFuture.addListener(Runnable );

    21对象序列化。

    ObjectOutoutStream.writeObjet(),

    22.

  • 相关阅读:
    sql 生成开始日期到结束日期相差天数或日期
    自定义表做存储过程变量
    [转]html 移动互联网终端的javascript touch事件,touchstart, touchend, touchmove
    [转]JQuery.Ajax之错误调试帮助信息
    解决IOS safari在input focus弹出输入法时不支持position fixed的问题
    查看 存储过程的执行时间
    ListView
    android矩阵详解
    跳出圈子 “莫忘初心,方得始终”
    Eclipse使用
  • 原文地址:https://www.cnblogs.com/kuracola/p/7440844.html
Copyright © 2011-2022 走看看