Java核心机制的知识概要

1.ORM(Object Relationship Mapping) 对象关系映射

2.动态语言:程序运行时,可以改变程序结构或变量类型,如Python、ruby等
但java不是动态语言,只是具有一定的动态性

3.获取class对象的方式:(1)使用Class.forName()获取指定名称的类
(2)使用 对象.class 获取Class(获取类的Class对象)

4.对象,接口、枚举、注解、基本类型均有Class对象与之对应

5.Class类是java的对象的类型,当JVM创建对象时,会为之创建Class对象,将对象的结构信息放入Class对象的中
。通过Class对象就可获取到类的所有信息,就像在镜子中反射一下。

6.Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

7.通过Class对象,可以获取到Constructor构造器,通过构造器newInstance(Object... initargs )实例化对象
获取Method,得到方法的信息,然后通过invoke(Object obj, Object... args )调用对象的方法,并为方法传入参数
获取Field,得到属性的信息,然后set(Object obj, Object value )设置属性的信息

8.利用反射操作泛型
blog.csdn.net/kobejayandy/article/details/11709043

9、强制类型转换(优先级高--->优先级低)
优先级低--->优先级高  会自动转换

10.java泛型总结
www.cnblogs.com/lwbqqyumidi/p/3837629.html
java泛型详解
blog.csdn.net/jinuxwu/article/details/6771121

11.java动态编译(通过调用API调用工具编译、执行)
www.cnblogs.com/snake-hand/p/3159694.html

12.java中使用脚本引擎执行javascript代码(Rhino)
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");

13.字节码操作

14.ReflectionUtils

15.Java学习之动态编译--字节码操作--javassist类库
(java代码编译完会生成.class文件,就是一堆字节码。JVM(准确说是JIT)会解释执行这些字节码(转换为机器码并执行),由于字节码的解释执行是在运行时进行的,手工编写字节码,再由JVM执行)
blog.csdn.net/haitaofeiyang/article/details/44264685
www.cnblogs.com/hucn/p/3636912.html

16.java类加载全过程
my.oschina.net/volador/blog/87194
java类加载器原理解析
blog.csdn.net/zhoudaxia/article/details/35824249

初始化:
执行类构造器<clinit>方法的过程。类构造器<clinit>方法是由编译器自动收藏的所有类变量的赋值动作和静态语句块中的语句合并产生的。

17.深入探讨java类加载器
blog.csdn.net/studyvcmfc/article/details/7720322

18.类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。    
java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。每个这样的实例用来表示一个 Java 类。通过此实例的 newInstance()方法就可以创建出该类的一个对象。

19.类缓存:一旦某个类被加载到类加载其中,它将维持加载(缓存),不过JVM垃圾收集器可以收集这些class对象

20.类加载器的树状组织结构
Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。系统提供的类加载器主要有下面三个:
引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。
扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()来获取它。

21.ClassLoader的作用:类加载器是负责加载类的对象。ClassLoader 类是一个抽象类。
java.lang.ClassLoader类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个 Java 类,即 java.lang.Class类的一个实例。除此之外,ClassLoader还负责加载 Java 应用所需的资源,如图像文件和配置文件等。

22. 类加载器的代理模式(不是所有) :双亲委派机制:当接到类加载的任务时,加载器首先将加载任务委派给父加载器,依次追朔,直到爷爷最高辈的。 如果父加载器能加载,就由父加载器执行,否则再由当前加载器加载。
     双亲委派机制为了保证java核心库的安全

23.自定义类加载器:
(1)继承classLoader
(2)判断类是否被加载过,若加载过,直接返回;若没有加载,委派父加载器加载,若加载器都没有加载,则通过io流读取文件,获取字节数组,并转换为class对象

24.自定义加密、解密类加载器
加密后出现java.lang.ClassFormatError: Incompatible magic value,因为class结构改变了,所以需要解密
 类加载按原来的规则加载class,class加密后格式变了,所以加载不了

经过编译器编译,变成JVM所能解释的.class文件。
而这个过程,在现在公开的网络技术中,利用一个反编译器,任何人都可以很容易的获取它的源文件。

25.类加载器是 Java 语言的一个创新。它使得动态安装和更新软件组件成为可能

26.blog.csdn.net/zhoudaxia/article/details/35897057
线程上线文加载器:java提供了一些服务性的接口,而接口的实现类由第三方提供,这样由于双亲加载机制就加载不了实现类,默认的线程上下文加载器是类加载器,可以指定类加载器,抛弃双亲委派机制

web容器加载器:该类加载器也使用代理模式,所不同的是它是首先尝试去加载某个类,如果找不到再代理给父类加载器。这与一般类加载器的顺序是相反的。这是 Java Servlet 规范中的推荐做法,其目的是使得 Web 应用自己的类的优先级高于 Web 容器提供的类。(每个应用有对应的加载器)

OSGI(Open Service GateWay Initative  面向java的动态模块系统)加载器:OSGi 中的每个模块都有对应的一个类加载器。它负责加载模块自己包含的 Java 包和类。当它需要加载 Java 核心库的类时(以 java开头的包和类),它会代理给父类加载器(通常是启动类加载器)来完成。当它需要加载所导入的 Java 类时,它会代理给导出此 Java 类的模块来完成加载。

27.java内部类
blog.csdn.net/qq435757399/article/details/7037007
(1)、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。
(2)、内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的 。
(3)、内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量 。

静态内部类(加载顺序 :静态属性-静态代码块-非静态属性-构造方法)
(1)静态内部类可以包含静态成员、也能包含非静态成员
(2)静态内部类,能访问外部内的静态成员,但不能访问外部内的非静态成员(静态内部类已被加载)
创建:new 外部类.内部类()

成员内部类
(1)就像成员变量存在外部类中,成员内部类可以访问外部内的所有成员
(2)成员内部类中this表示内部类对象,需要访问外部类 使用“外部类名+".this" ”
(3)成员内部类中不能包含静态成员,除非声明为final,并且是编译器可以确定的常量表达式
(4)成员内部类对象一定要绑定到外部类的对象,所以有外部类的对象,后有成员内部类的对象
创建:new 外部内().new 内部类()

方法内部类
(1)方法内部类作用和局部变量类似,所以不能用private、protected等修饰
(2)方法内部类只能包含非静态成员
(3)方法内部类只能在声明的方法中可见,需要用的话,只能自方法中进行初始化。

匿名内部类
接口式(接口中)
继承式
参数式

28.java各版本特性区别
blog.csdn.net/thunderous/article/details/5342125

29.Javassit其实就是一个二方包,提供了运行时操作Java字节码的方法。手工编写字节码,再由JVM执行
在线的应用不会频繁使用反射,因为反射的性能开销较大。其实还有一种和反射一样强大的特性,但是开销却很低,它就是Javassit。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java核心面试知识整理(架构师)是一份非常有价值的Java面试指南,此指南对于那些准备进行Java工作面试的候选者来说非常重要。该指南详细介绍了Java技术的基本概念,包括多线程、面向对象编程、JVM以及其他与Java语言相关的技术。除此之外,该指南还列出了一系列与Java技术相关的最新面试题目,并通过详细的解题思路和示例代码展示了如何解决这些问题。这对于那些想要通过Java面试的候选者来说非常有帮助。 此外,该指南还介绍了Java SE、Java EE、Spring、Hibernate等重要的框架和技术的概要以及相应的面试题目。候选人可以通过这些问题详细了解这些技术的实际应用,并为面试做好充分的准备。 总之,Java核心面试知识整理(架构师)是一份非常有用的指南,对于那些想在Java领域取得成功并通过技术面试的人来说非常有帮助。无论现在你是一个初学Java的新手,还是一位有经验的开发者或工程师,这份指南都值得一读。 ### 回答2: 《Java核心面试知识整理(架构师)》是一份重要的面试资料,涵盖了Java开发中的核心知识点和面试考察的难点,可以帮助应聘者更好地准备面试。 该资料主要分为八个章节,分别是Java基础知识、集合框架、多线程、JVM、网络编程、数据库、分布式系统和框架技术。在每个章节中,都涵盖了该领域中的重要概念、常见的面试题和优秀的回答方法,可以帮助应聘者在面试中更加从容自信地回答问题。 其中,Java基础知识和集合框架是面试中最常考察的部分,主要考察应聘者的基础扎实度和掌握程度。多线程和JVM是Java开发中的难点,需要求职者深入理解并掌握其原理,才能在面试中获得高分。网络编程和数据库相关问题则是针对应聘者的项目经验和实践经验,需要应聘者结合自己的经验和项目实践,进行深入的思考和总结。分布式系统和框架技术则是考察应聘者对当前技术潮流和趋势的了解程度,需要应聘者关注行业动态和进行充分的技术积累。 总的来说,《Java核心面试知识整理(架构师)》是一份全面、权威且实用的Java面试资料,对于想要深入了解Java开发技术和成功求职的人来说,具有非常重要的参考价值。 ### 回答3: 这份《Java核心面试知识整理(架构师版)》的文档总结了Java领域中架构师的核心面试知识。文档涵盖了Java基础、集合、多线程、JVM、设计模式、分布式微服务等方面的知识点。 在Java基础方面,文档详细介绍了Java语言的基础类型、运算符、循环结构、流程控制语句以及面向对象的特性和原则。而在集合方面,文档涵盖了Java中的各种集合类型及其特点,如List、Map、Set等。此外,文档还详细讲解了多线程的基本概念和Java中的线程安全问题,包括锁机制、线程池等。 在JVM方面,文档深入讲解了Java程序的运行原理和内存管理机制,详细分析了垃圾回收算法和优化策略,并解释了如何进行JVM性能调优。 文档还涉及了常用的设计模式及其应用场景,如单例模式、工厂模式、观察者模式等。此外,分布式、微服务等一系列架构方面的知识也被全方位地介绍和讲解。 总之,这份文档是Java架构师在面试时必备的知识点整理手册,对于正在准备面试的Java架构师和Java程序员来说具有非常重要的参考价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值