如来 • 卷一 : Java 基础

前言: 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 基础)