美文网首页
如来 • 卷一 : Java 基础

如来 • 卷一 : Java 基础

作者: 罗塞塔石 | 来源:发表于2017-07-14 11:21 被阅读0次

    前言: 2017.04 月份,朋友推荐了一份面试题给我看,后面在简书上也搜索到了一样的题,发表时间是2016年,比我拿到的早,我把题目和我做的答案贴出来,答案有不完整的,和大家一起完善一下.

    1.实例方法和静态方法有什么不一样?

    静态方法是所有实例共享的,可以不创建实例调用,存放在 xxx区

    实例方法需要创建对象,通过对象引用才能调用,存放在 xxx区

    2.Java 中的异常有哪几类,分别怎么使用?

    编译时异常和运行时异常

    3.常用的集合类有哪些?比如 List 如何排序?

    4.ArrayList 和 LinkedList 内部的实现大致是怎样的?他们之间的区别和各自的适用场景是什么?

    5.内存溢出是怎么回事?

    OOM Error  :  PermGen space  永久区的大小不够,  加载不了那么多的jar 和 class

    OOM Error  :  Java heap space  堆空间  ,  创建了太多对象,在垃圾回收之前已用满了,两个思路:  一个是查看程序是否存在重复创建对象;  二是启动时加大堆空间  Xms(初始) ,  Xmx(最大)

    OOM Error  :  unable to create new native thread

    创建的线程数过多,超出了系统限制  Linux  使用  ulimit -u  查看

    给虚拟机分配的内存过大,

    6.ClassLoader 有什么用?

    类加载器  : BootstrapClassLoader  -- jre    ;  extension classloader  扩展类    app classloader  应用类  customer classloader  自定义加载器

    使用了双亲委托模型 ,  app  -> extension -> bootstrap

    7.== 和 equals 的区别?

    == 对基本数据类型,进行的是值的比较  , 对于引用类型,只在引用地址一致时为true

    equals 是对象进行比较  , Object中是 ==  ,可进行重写自定义 equals

    8.hashCode 方法的作用?

    在 Map 读取时,会根据hashCode值进行散列,  需要注意 hashCode 冲突,选择合适的属性进行散列

    9.Object 类中有哪些方法?列举三个以上.

    clone

    toString

    equls    hashCode

    getClass

    notify  notifyAll  --  有什么作用?

    10.NIO 是什么?适用于何种场景?

    相对标准的IO 基于字节流和字符流进行操作的,NIO 是基于通道 Channel  和 缓冲区(Buffer) 进行操作,数据从 Channel 读取写到 Buffer ,  或者从Buffer 读取,写入Channel

    服务器  web  java 后端  : Tomcat ,  Jetty  ,Netty

    文件读写  :  FileChannel

    11.HashMap 数据结构、扩展策略,Hash 冲突攻击如何防范,如何实现线程安全的 HashMap?

    结构:  数组加链表  :  java8 中链表长度超过8 时, 会改成平衡树实现

    扩展: resize  ,  当超过loadfactor 因子时,默认 0.75  ,  触发扩展,rehash , 将旧的元素迁移到新的

    hash collision attack :  修改hash 非随机算法,  限制post 参数个数,大小  ,  防火前检测异常请求

    使用 ConcurrentHashMap  :  CHM 实现采用了 segment 锁  ,  8 之后采用的 CAS 技术

    哈希冲突解决方法:  链表法(java 当前实现),建立公共溢出区 , 开发定址法(? 不明白)

    12.JVM 内存结构,GC 算法,CMS、G1 的原理

    13.NIO 模型, select/epoll 的区别,多路复用的原理

    14.Java 中一个字符占多少个字节,扩展问int,long,double占多少字节

    一个字符占 2 个字节

    int  4 个字节

    long  8 个字节

    double 16 个字节

    15.创建一个类的实例都有哪些办法?

    new 关键字

    Class 类的 newInstance 方法

    使用 Constructor 类的 newInstance 方法

    使用 clone 方法

    使用反序列化

    16.final/finally/finalize 的区别?

    17.LinkingBlockingQueue 与 ArrayBlockingQueue 的区别,他们的使用场景?

    18.Session/Cookie 的区别?

    cookie 数据保存在客户端,session 数据保存在服务器端

    结合 session id 来说 , cookie 可以临时(或保存若干时间) 服务器的 session id

    19.String/StringBuffer/StringBuilder 的区别,扩展再问他们的实现?

    String  -- 字符串常量池  ,内部使用 char[]  ,  是 final 类,  subString  replace  会创建新的String

    StringBuilder  --  使用在字符串拼接场景,不用重复new String 对象,append 底层采用了 System.copyarray ,不发生内存拷贝

    StringBuffer  --  相比StringBuilder  是一个线程安全的类,操作加上了锁

    20.Servlet 的生命周期?

    21.如何用 Java 分配一段连续的 1G 的内存空间? 需要注意些什么?

    没有一个确定行的思路

    分配直接内存:  ByteBuffer  allocateDirect()  底层调用 DirectByteBuffer  ?

    需要注意什么  ?

    22.Java 有自己的内存回收机制,但为什么还存在内存泄露问题呢?

    内存回收机制,不能回收掉未被应用使用到的对象.  如创建一些  static map  list  ,  而不注意管理集合中的对象,就容易导致内存泄露

    联系回收算法: 可达性分析算法  , 经过至少两次标记不可达,  f-queue 队列中 ,  Finalizer 线程

    23.Java 里面用对象作为 Key 需要注意些什么? 如何实现 hashCode?

    24.Java 关键词的发音: synchronized  volite

    相关文章

      网友评论

          本文标题:如来 • 卷一 : Java 基础

          本文链接:https://www.haomeiwen.com/subject/fzunhxtx.html