Java 基础
1. 常见概念梳理
概念 | 分析 |
---|---|
Java 是单继承多实现 | 若是多继承,多个父类中出现了重复方法,不知道调用那个; 而多实现类,都会到具体实现类中实现调用的抽象方法。 接口可以多继承 来源 |
动态代理 | JDK基于接口(Proxy.newInstnce 实现 new InvocationHandler)、 CGLIB基于继承 参考 |
同步与异步 | 针对于被调用方,执行时间长短没变; 异步即被调用方重开线程处理。 |
阻塞与非阻塞 | 针对于调用方是否阻塞, 如果未阻塞(提交到线程池中,执行下个操作) |
并行与并发 | 并行利用的是多核CPU, 并发利用的是CPU时间片 |
2.基本原理
2.1 类创建过程
对象创建过程:new对象/反射创建 a、检查类是否加载,没有则先加载类。(懒加载,会在堆区有class对象,方法区会有类的相关元数据信息)
b、分配内存。jvm根据大小分配内存空间;空闲列表(空间不规整,容易形成碎片空间)和指针碰撞方式(空间比较规整,默认使用)。并发问题,用CAS+重试机制或本地线程分配缓冲(每个线程预先分配一块堆内存)。
c、初始化。实例赋零值或null等操作。
d、设置对象头。hashcode、分代年龄、锁状态等信息。
e、执行初始化方法。对实例设置程序指定的初始值,并执行构造方法。 原文链接:https://blog.csdn.net/nalanmingdian/article/details/119607562
3.Java常见用法
4.1 Java 获取路径
//测试用例中
String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
// C:/Git/project/report-generation/target/test-classes/
// 具体 业务类中
this.classLoader.getResource("").getPath()
String pubPath = Thread.currentThread().getContextClassLoader().getResource("/").getPath();
System.out.println("pubPath = " + pubPath);
4.2 环境变量
//wins : JAvA_HOME
//linux: JAVA_HOME 基于/etc/profile 或者 .bash_profile ,修改完成之后,使用source profile或 source .bash_profile 使文件生效。