首页 课程 师资 教程 报名

最近常被关注的Java面试题汇总

  • 2019-12-17 13:43:13
  • 1950次 动力节点

 

最近常被关注的Java面试题汇总

 

  java基础以及多个“比较”

  1.Collections.sort排序内部原理

  在Java 6中Arrays.sort()和Collections.sort()使用的是MergeSort,而在Java 7中,内部实现换成了TimSort,其对对象间比较的实现要求更加严格

  2.hashMap原理,java8做的改变

  从结构实现来讲,HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的。HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全。ConcurrentHashMap线程安全。解决碰撞:当出现冲突时,运用拉链法,将关键词为同义词的结点链接在一个单链表中,散列表长m,则定义一个由m个头指针组成的指针数组T,地址为i的结点插入以T(i)为头指针的单链表中。Java8中,冲突的元素超过限制(8),用红黑树替换链表。

  3.String 和 StringBuilder 的区别

  1)可变与不可变:String不可变,每一次执行“+”都会新生成一个新对象,所以频繁改变字符串的情况中不用String,以节省内存。

  2)是否多线程安全:StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。StringBuffer和String均线程安全。

  4.Vector 与 Array 的区别

  1)ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍。

  2)Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销。

  5.HashMap 与 Hashtable 的区别

  1) 历史原因: Hashtable继承Dictonary类, HashMap继承自abstractMap

  2) HashMap允许空的键值对, 但最多只有一个空对象,而HashTable不允许。

  3) HashTable同步,而HashMap非同步,效率上比HashTable要高

  JVM

  1.JVM如何加载一个类的过程,双亲委派模型中有哪些方法

  类加载过程:加载、验证(验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害)、准备(准备阶段为变量分配内存并设置类变量的初始化)、解析(解析过程是将常量池内的符号引用替换成直接引用)、初始化。

  双亲委派模型中方法:双亲委派是指如果一个类收到了类加载的请求,不会自己先尝试加载,先找父类加载器去完成。当顶层启动类加载器表示无法加载这个类的时候,子类才会尝试自己去加载。当回到最开的发起者加载器还无法加载时,并不会向下找,而是抛出ClassNotFound异常。

  方法:启动(Bootstrap)类加载器,标准扩展(Extension)类加载器,应用程序类加载器(Application ),上下文(Custom)类加载器。意义是防止内存中出现多份同样的字节码 。

  2.GC算法(什么样的对象算是可回收对象,可达性分析),CMS收集器

  jvm是如何判断一个对象已经变成了可回收的“垃圾”,一般是两个方法:引用记数法和根搜索算法。引用记数法没办法解决循环引用的问题,所以用根搜索。从一系列的”GC Roots“对象开始向下搜索,搜索走过的路径称为引用链。当一个对象到”GC Roots“之间没有引用链时,被称为引用不可达。引用不可到的对象被认为是可回收的对象。

  几种垃圾收集器:1,Serial New/Serial Old(串行),2,Parrallel New (并行),3,Parrallel Scavenge,4,Parrallel Old,5,CMS(CMS收集器是一个以获得最短回收停顿时间为目标的收集器,它是一种并发收集器,采用的是Mark-sweep算法。),6,G1(是一款并行与并发收集器,并且可建立可预测的停顿时间模型,整体上是基于标记清理,局部采用复制)

  3.JVM分为哪些区,每一个区干吗的?

  1)方法区(method):被所有的线程共享。方法区包含所有的类信息和静态变量。

  2)堆(heap):被所有的线程共享,存放对象实例以及数组,Java堆是GC的主要区域。

  3)栈(stack):每个线程包含一个栈区,栈中保存一些局部变量等。

  4)程序计数器:是当前线程执行的字节码的行指示器。

  4.JVM新生代,老年代,持久代,都存储哪些东西?

  持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。所有新生成的对象首先都是放在年轻代的,年老代中存放的都是一些生命周期较长的对象。

  5.内存溢出和内存泄漏:

  内存溢出:程序申请内存时,没有足够的内存,out of memory;内存泄漏值垃圾对象无法回收,可以使用memory analyzer工具查看泄漏。

最近常被关注的Java面试题汇总

  并发,锁

  1.volatile关键字, Lock

  并发编程中:原子性问题,可见性问题,有序性问题。

  volatile关键字能保证可见性,字能禁止指令重排序,但是不能保证原子性。可见性只能保证每次读取的是最新的值,但是volatile没办法保证对变量的操作的原子性。在生成的会变语句中加入Lock关键字和内存屏障。

  Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题。用sychronized修饰的方法或者语句块在代码执行完之后锁自动释放,而用Lock需要我们手动释放锁

  2.MYSQL常用优化(sql优化,表结构优化等)

  SQL优化、表机构优化、索引优化、缓存参数优化

  3.java每改一点都需要重新编译打包部署,有没有更好的方法

  可以使用热加载

  4.进程间通信有哪几种方式?

  1)管道(Pipe),2)命名管道(named pipe),3)信号(Signal),4)消息(Message)队列,5)共享内存,6)内存映射(mapped memory),7)信号量(semaphore),8)套接口(Socket)

  网络、数据库

  1.TCP如何保证可靠传输?三次握手过程?

  在TCP的连接中,数据流必须以正确的顺序送达对方。TCP的可靠性是通过顺序编号和确认(ACK)来实现的。TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。第一次是客户端发起连接;第二次表示服务器收到了客户端的请求;第三次表示客户端收到了服务器的反馈。

  2. 常用的hash算法有哪些?

  1.加法hash:所谓的加法Hash就是把输入元素一个一个的加起来构成最后的结果。

  2.位运算hash:这类型Hash函数通过利用各种位运算(常见的是移位和异或)来充分的混合输入元素

  3.乘法hash:33*hash + key.charAt(i)

  3. 什么是一致性哈希?

  设计目标是为了解决因特网中的热点(Hot spot)问题,一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:1、平衡性(Balance) 2、单调性(Monotonicity) 3、分散性(Spread) 4、负载(Load)

  4. 数据库中的范式有哪些?

  第一范式----数据库中的表(所有字段值)都是不可分割的原子数据项。

  第二范式----数据库表中的每一列都和主键相关,而不能只和主键的某一部分相关。

  第三范式----数据库表中每一列数据都和主键直接相关,不能间接相关。范式是为了减小数据冗余。

 

最近常被关注的Java面试题汇总

 

       以上就是动力节点Java培训机构小编介绍的“最近常被关注的Java面试题汇总”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

 

相关推荐

最新最全java面试题及答案(初级到高级)

史上最全的中高级JAVA工程师面试题及答案汇总

Java高级开发工程师面试题

2019史上最全java面试题题库大全800题

哪有资深java工程师面试题

 

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交