基础第二章
# 四
-
工厂模式:
总结看看理解就行
-
hashCode 和 equals 的关系
如果两个对象的 hashCode()相等,那么他们的 equals()不一定相等。
但是如果两个对象的 equals()相等,那么他们的 hashCode()必定相等。
-
计组复习:
编译程序和解释程序最大的区别是:前者生成目标代码,而后者不生成。
-
call by Value (值传递)/call by reference (引用传递)
-
哪种 Java 变量声明方式可以避免程序在多线程竞争情况下读不到正确的值?
1.volative 会保证新值可以立即同步到主内存,以及每次使用前立即从主内存读取
2.static volative 同理
-
synchronized 可以修饰方法、代码块或者对象。不可以修饰变量。
-
Object 是所有类的直接或者间接父类
-
toString 方法是 Object 中定义的方法,不需要重写也可以使用。
-
length 是数组的属性,length () 是 String 的方法,size () 是集合 collection 的方法
-
链接:
https://www.nowcoder.com/questionTerminal/e4bf2cb7dfa2484d92152d320f128a9b
1、jps:查看本机 java 进程信息。
2、jstack:打印线程的栈信息,制作线程 dump 文件。
3、jmap:打印内存映射,制作堆 dump 文件
4、jstat:性能监控工具
5、jhat:内存分析工具
6、jconsole:简易的可视化控制台
7、jvisualvm:功能强大的控制台
# 五
-
== 和 equals
-
复制的效率 System.arraycopy>clone>Arrays.copyOf>for 循环
-
Map 集合类
-
try 和 finally
1 |
|
- 简单记忆线程安全的集合类: 喂! SHE ! 喂是指 vector , S 是指 stack , H 是指 hashtable , E 是指: Eenumeration
- volatile 是 java 提供的一种轻量级的同步机制,java 语言包含两种内在的同步机制:同步块和 volatile 变量。相比于 synchronized。volatile 更加轻量级。
- & 运算结果一定比以前的值小,| 运算一定比以前的值大。
- 反码公式: n=n+1 可推出 n=-n-1,例如:int
5
;int j =
10;
System.out.println (i + ~j); 运行结果是 - 6. - collection: 实现或继承的有 Vector 和 ArrayList 和 Queue
# 六
-
ArrayList 线程不安全,底层是数组实现的,允许重复对象
-
序列化与反序列化:将数据转化为 n 个 byte 序列的过程为序列化,相反的:将 n 个 byte 转化为数据的过程为反序列化。简单理解一下就是:把看得懂的数据转化为看不懂的 byte 序列就是序列化。把看不懂的 byte 序列转化为看得懂的数据就是反序列化。
-
接口方法中必须是 public abstract,变量只能是 public static final,不同的 jdk 版本会有不同。
-
缓存的放置和删除时间,
1
2
3三级缓存:CreateBeanInstance之后,方法名为addSingletonFactory
二级缓存:第一次从三级缓存确定对象是代理对象还是不同对象的时候,同时删除三级缓存getSingleton
一级缓存:生成完整对象之后放到一级缓存,删除二三级缓存:addSingleton -
Bean Factory 与 Factory Bean 有什么区别?
1
2相同点:都是用来创建Bean对象的
不同点:使用BeanFactory创建对象的时候,必须要遵循严格的生命周期流程,太复杂了, -
以 java8 为准,switch 支持 10 种类型基本类型:byte char short int 对于包装类:Byte,Short,Character,Integer ,String enum
-
Java.lang.NullPointerException:变量未被初始化,对象未赋值、对象为空(俗称空指针异常) java.lang.NumberFormatException:数据格式转换失败(Integer的取值范围为:-128~127,超过范围都会访问false) java.lang.RuntimeException:运行时异常 java.lang.ArrayindexOutOfBoundsException:数值下标越界
1
2
3
8.
方法名相同,参数不同:重载
方法名相同,参数相同:重写(发生于父类)
1 |
|
IO流有字符流和字节流
字符流:Reader和Writer
字节流:InputSream和OutputStrem
1 |
|
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 一般会选择线程终止。