#

  1. 工厂模式:

    总结看看理解就行

    1669636298308

  2. hashCode 和 equals 的关系

    如果两个对象的 hashCode()相等,那么他们的 equals()不一定相等。

    但是如果两个对象的 equals()相等,那么他们的 hashCode()必定相等。

  3. 计组复习:

    编译程序和解释程序最大的区别是:前者生成目标代码,而后者不生成。

  4. call by Value (值传递)/call by reference (引用传递)

  5. 哪种 Java 变量声明方式可以避免程序在多线程竞争情况下读不到正确的值?

    1.volative 会保证新值可以立即同步到主内存,以及每次使用前立即从主内存读取

    2.static volative 同理

  6. synchronized 可以修饰方法、代码块或者对象。不可以修饰变量。

  7. Object 是所有类的直接或者间接父类

  8. toString 方法是 Object 中定义的方法,不需要重写也可以使用。

  9. length 是数组的属性,length () 是 String 的方法,size () 是集合 collection 的方法

  10. 链接:

    https://www.nowcoder.com/questionTerminal/e4bf2cb7dfa2484d92152d320f128a9b

    1、jps:查看本机 java 进程信息。

    2、jstack:打印线程的信息,制作线程 dump 文件。

    3、jmap:打印内存映射,制作 dump 文件

    4、jstat:性能监控工具

    5、jhat:内存分析工具

    6、jconsole:简易的可视化控制台

    7、jvisualvm:功能强大的控制台

#

  1. == 和 equals

    1673521385763

  2. 复制的效率 System.arraycopy>clone>Arrays.copyOf>for 循环

  3. Map 集合类1674196451413

  4. try 和 finally

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

执行顺序为:
输出try里面的初始temp:1
temp=2
保存return里面temp的值:2
执行finally的语句temp:3,输出temp:3
返回try中的return语句,返回存在里面的temp的值:2
输出temp:2
public class niuke001 {

public static void main(String[] args) {
System.out.println(test());

}
public static int test(){
int temp = 1;
try{
System.out.println(temp);
return ++temp;
}catch (Exception e){
System.out.println(temp);
return ++temp;//catch部分不执行
}finally {
++temp;
System.out.println(temp);
}
}
}

1674198850307

  1. 简单记忆线程安全的集合类: 喂! SHE 喂是指 vector S 是指 stack H 是指 hashtable E 是指: Eenumeration
  2. volatile 是 java 提供的一种轻量级的同步机制,java 语言包含两种内在的同步机制:同步块和 volatile 变量。相比于 synchronized。volatile 更加轻量级。
  3. & 运算结果一定比以前的值小,| 运算一定比以前的值大。
  4. 反码公式: n=n+1 可推出 n=-n-1,例如:int i = 5 ; int j = 10 ; System.out.println (i + ~j); 运行结果是 - 6.
  5. collection: 实现或继承的有 Vector 和 ArrayList 和 Queue
  6. img

#

  1. ArrayList 线程不安全,底层是数组实现的,允许重复对象

  2. 序列化与反序列化:将数据转化为 n 个 byte 序列的过程为序列化,相反的:将 n 个 byte 转化为数据的过程为反序列化。简单理解一下就是:把看得懂的数据转化为看不懂的 byte 序列就是序列化。把看不懂的 byte 序列转化为看得懂的数据就是反序列化。

  3. 接口方法中必须是 public abstract,变量只能是 public static final,不同的 jdk 版本会有不同。

  4. 缓存的放置和删除时间,

    1
    2
    3
    三级缓存:CreateBeanInstance之后,方法名为addSingletonFactory
    二级缓存:第一次从三级缓存确定对象是代理对象还是不同对象的时候,同时删除三级缓存getSingleton
    一级缓存:生成完整对象之后放到一级缓存,删除二三级缓存:addSingleton
  5. Bean Factory 与 Factory Bean 有什么区别?

    1
    2
    相同点:都是用来创建Bean对象的
    不同点:使用BeanFactory创建对象的时候,必须要遵循严格的生命周期流程,太复杂了,
  6. 以 java8 为准,switch 支持 10 种类型基本类型:byte char short int 对于包装类:Byte,Short,Character,Integer ,String enum

  7. Java.lang.NullPointerException:变量未被初始化,对象未赋值、对象为空(俗称空指针异常)
    java.lang.NumberFormatException:数据格式转换失败(Integer的取值范围为:-128~127,超过范围都会访问false)
    java.lang.RuntimeException:运行时异常
    java.lang.ArrayindexOutOfBoundsException:数值下标越界
    
    1
    2
    3

    8.

方法名相同,参数不同:重载
方法名相同,参数相同:重写(发生于父类)

1
2
3
4

9. abstract class 表示的是”is-a"关系,interface表示的是“like- a”关系

10.
IO流有字符流和字节流
字符流:Reader和Writer
字节流:InputSream和OutputStrem
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16


# 三种移位运算符。
<<:左移运算符,向左移诺干位。x<<1相当于x乘2
(>>:)右移,相当于x除2
<br>
移位操作符实际上支持的类型只有int和long,编译器在对short、byte、char类型进行移位前,都会将其转换为int类型再操作。

**所有的整型包装类对象之间比较值,全部使用equals方法**

# 拆箱与装箱
装箱:把基本类型用其引用类型包装起来
拆箱:将包装的类型拆为基本类型
```java
Integer i = 10;//装箱
int n = i;//拆箱

Integer i = 10 等价于 Integer i = Integer.valueof (10)


int n = i 等价于 int n = i.intValue ();


# 为什么浮点数运算的时候会有精度丢失的风险?

这个和计算机保存浮点数的机制有很大关系。我们知道计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。这也就是解释了为什么浮点数没有办法用二进制精确表示。

# 如何解决浮点数运算的精度丢失问题

BigDecimal 可以实现对浮点数的运算,不会造成精度丢失。通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过 BigDecimal 来做的。


BigDecimal 使用 equals()方法不仅仅会比较值大小 value 还会比较精度。
compareTo () 方法比较会忽略精度

# 为什么重写 equals () 时必须重写 hashCode () 方法?

因为两个相等的对象的 hashCode 值必须是相等。也就是说如果 equals 方法判断两个对象是相等的,那这两个对象的 hashCode 值也要相等。


如果重写 equals () 时没有重写 hashCode () 方法的话就可能会导致 equals 方法判断是相等的两个对象,hashCode 值却不相等

# Exception 和 Error 的区别。

异常的共同祖先–Throwable 类,其中两个重要的子类 Exception 和 Error

Exception 是程序本身可以处理的异常,即可以通过 catch 进行捕获的。


Error 属于程序无法处理的错误,一般不要用 catch 进行捕获,但发生这些异常时,JVM 一般会选择线程终止。