小米Java面经-2

一面

1、static关键字:类成员,代码块、静态内部类、静态导包

2、ThreadLocal是什么?
线程的局部变量,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本
从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思
原理:在ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本

3、wait()与sleep()方法的区别
wait();线程通信方式的一种
是什么?--》Object的一个方法;
作用:--》当前线程释放资源,进入阻塞状态,等待被notify() 或 notifyAll()方法唤醒
sleep();
是?--》Thread类中的一个方法,让当前正在执行的方法等待指定时间,进入阻塞状态,不释放锁,等到了时间,再次进入就绪状态

4、接口与抽象类的区别:
相同点:1、不实例化;2、含抽象方法
不同点:
1、大的层面:接口强调的功能的实现;抽象类强调的是所属关系
2、变量常量:接口中只能定义静态常量,不能定义普通成员变量;抽象类都可以
3、继承与实现:一个类可以实现多个接口,但只能继承一个类

二面

1、equals() 与 “ == ”的区别
先讲是什么
区别(作用上的区别),

2、String类有哪些常用方法
length():字符串长度
charAt():求某一位置上的字符
concat():连接两个字符串
equals():判断内容是否相等
hashCode():获得哈希码
indexOf(char c):字符c第一次出现的位置
split(String regex):拆分字符串

3、实现多线程的方式
继承Thread类
实现Runnable接口、Callable接口
线程池

4、垃圾回收机制
在Java中采取了 可达性分析法来进行垃圾标记,该方法的基本思想是通过一系列的“GC Roots”对象作为起点进行搜索,如果在“GC Roots”和一个对象之间没有可达路径,则称该对象是不可达的,不过要注意的是被判定为不可达的对象不一定就会成为可回收对象。被判定为不可达的对象要成为可回收对象必须至少经历两次标记过程,如果在这两次标记过程中仍然没有逃脱成为可回收对象的可能性,则基本上就真的成为可回收对象了

GC Roots对象有哪些:

垃圾收集算法:1、标记-清除;2、复制、3、标记-整理;4、分代收集算法
垃圾收集器:1、Serial / Serial Old;2、ParNew;3、Parallel Scavenge;4、Parallel Old、5、CMS;6、G1

5、新生代与老年代
对象的内存分配:
对象的内存分配,往大方向上讲就是在堆上分配,对象主要分配在新生代的Eden Space和From Space,少数情况下会直接分配在老年代。如果新生代的Eden Space和From Space的空间不足,则会发起一次GC,在GC的过程中,会将Eden Space和From Space中的存活对象移动到To Space,然后将Eden Space和From Space进行清理。如果在清理的过程中,To Space无法足够来存储某个对象,就会将该对象移动到老年代中。在进行了GC之后,使用的便是Eden space和To Space了,下次GC时会将存活对象复制到From Space,如此反复循环。当对象在Survivor区躲过一次GC的话,其对象年龄便会加1,默认情况下,如果对象年龄达到15岁,就会移动到老年代中。

  一般来说,大对象会被直接分配到老年代,所谓的大对象是指需要大量连续存储空间的对象,最常见的一种大对象就是大数组

  byte[] data = new byte[410241024]

  这种一般会直接在老年代分配存储空间

posted @   紫薇哥哥  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示