大数据JAVA相关面试题(持续更新~~~)

  1. JVM虚拟机组成,堆分配内存大小

    ​ 组成:Java栈,本地方法栈,堆,方法区,程序计数器

    ​ 一般分配不超过物理内存的1/4

  2. JVM初始化类的步骤

    ​ 编译为class文件通过类加载器加载到JVM中;在JVM中验证该文件是否符合虚拟机要求;为类变量分配内存,设置初始值;将常量池中符号引用转为直接引用;初始化类变量和静态代码块

  3. GC回收机制,回收算法

    ​ GC只发生在堆和方法区,堆又分为元空间(堆外内存),新生区(伊甸园区和幸存区),养老区

    ​ 回收算法:复制算法,标记清除法,标记压缩法

  4. 锁(线程同步)

    ​ 乐观锁/悲观锁: synchronized关键字和Lock 都是悲观锁,CAS算法实现乐观锁

    ​ 公平锁/非公平锁: 公平锁指多个线程按照申请锁的顺序来获取锁, 等待队列中除第一个线程以外的所有线程都会阻塞 ; Synchronized和Lock都为非公平锁

    ​ 独享锁/共享锁: 独享锁( Synchronized, ReentrantLock )一次只能被一个线程所持有 ; Lock的 ReadWriteLock 实现读锁是共享锁,其写锁是独享锁

  5. 多线程的实现方式

    ​ 继承Thread类;继承runnable接口,重写run方法,start启动

  6. 重写和重载

  7. hashmap的底层实现(和hashtable的区别)

    ​ 当添加一个元素(key-value)时,就首先计算元素key的hash值,以此确定插入数组中的位置,若hash值相同但v值不同就添加到该数组位置下链表的后面

    ​ hashmap线程不安全,允许kv有空值;hashtable安全

  8. equals和==

    ​ ==:如果比较的是基本数据类型比较的是变量值,引用数据类型比较的是地址
    ​ equals:若没有重写比较的是两个对象的地址

  9. 反射机制

    ​ 反射就是在程序运行期间,动态的获取类或者对象中的属性。

    ​ 获取对象: 对象.getclass();类名.class; Class.forName(“test、Student”);

  10. 创建对象的几种方法

​ new关键字;反射; 实现Serializable接口,将一个对象序列化到磁盘上 ,反序列化可以将磁盘上的对象信息转化到内存中

  1. final,static,finally关键字

    ​ final:修饰的类不可继承,修饰的方法不能被覆盖,修饰的变量只能进行一次赋值操作,并且在生存期内不可以改变它的值

    ​ finally:是处理异常的一部分,一般一定会执行

    ​ static:表示静态,和类一起出现/消失,作用范围为单个文件;非静态变量作用域为整个源程序

  2. Comparable和Comparator的区别

    ​ Comparable接口中的CompareTo方法进行排序,表示一个类是有序的,有内在的前后顺序 ;Comparator用来自定义排序

  3. String,StringBuilder,StringBuffer的区别

    ​ 操作少量数据用String且对象是不可不变的,

    ​ 单线程大量数据用StringBuilder,多线程大量数据用StringBuffer且对象都是可变的

  4. 抽象类和接口的区别

    ​ 抽象类使用abstract修饰 ,不能使用new关键字来实例化对象,要被子类继承, 可以做方法实现, 定义的变量是普通变量

    ​ 接口要被类实现 ,不能使用new关键字来实例化对象, 定义的变量只能是公共的静态的常量

  5. Java的深拷贝和浅拷贝

    ​ 深拷贝:在堆中新开辟一块区域;浅拷贝:复制对象的一个引用

  6. Java中的参数传递机制

    ​ 值传递,传递的是栈中对象存放在堆中的地址, 值是放在堆内存中的 ,本质还是值传递

  7. OOM出现原因

    ​ GC 开销超过限制
    ​ 应用程序无意中保存了对象引用,对象无法被 GC 回收,应用程序过度使用 finalizer
    ​ 内存不足,无法创建新线程

  8. Java的IO和NIO

    ​ IO面向字节流

    ​ NIO面向缓冲区

  9. 构造器

    ​ 构造器和类名相同,没有返回值

    ​ 无参构造器:使用new关键字,初始化值

    ​ 有参构造器:一旦定义有参就必须显式定义无参 (alt+insert)

  10. 多态

    ​ 向上转型:子类对象直接赋给父类引用,父类的方法被子类重写 ——> Father father = new Son();
    ​ 向下转型:父类若想调用子类的方法必须强制转换 ——> Son son =(Son)father

  11. collection和collections的区别

    ​ Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

    ​ Collection是个java.util下的接口,它是各种集合结构的父接口

  12. sleep() 和 wait() 有什么区别

    ​ sleep方法属于Thread类中的静态方法,wait属于Object的成员方法。

    ​ sleep方法没有释放锁,而wait方法释放了锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值