一、面向过程与面向对象
面向过程:注重事情的每一个步骤及顺序,直接高效
面向对象:注重事情有哪些参与者(对象)及各自需要做什么,易于复用、扩展和维护
二、面向对象特性
①封装:内部细节对外部调用透明,外部调用无需修改或关心内部实现
②继承:子类共性的方法或者属性直接使用父类的,而不需要自己再定义,只需扩展自己个性化的
③多态:维承,方法重写,父类引用指向子类对象
三、JVM
堆:new出来的对象优先存放在此处
栈(线程):局部变量表,操作数栈,动态链接,方法出口(确定返回main方法后的执行位置),具有先进后出的特点
程序计数器:当前要运行的代码所在行的位置,在线程切换时可以使用
方法区(元空间):常量、静态变量、类信息
本地方法栈:本地方法
其中栈,本地方法栈、程序计数器是线程私有的,堆和方法区是所有线程共享的
调优工具:JDK自带的调优命令 jstack找出占用cpu最高的线程堆栈信息
Arthas:thread查看线程详细情况、. thread加上线程ID查看线程堆栈、thread -b查看 线程死锁
调优目的:减少STW(stop the world)的时间
四、JDK、JRE、JVM三者区别和联系
JDK(Java Develpment Kit):Java开发工具
JRE(Java Runtime Environment): java运行时环境JVM
JVM(java Virtual Machine): java虚拟机
JDK(JRE(bin(jvm)、lib(类库))、java工具)
五、重载和重写的区别
重载:发生在同一个类中,方法名必须粗同,参数类型不同、个数不同、顺字不同,方法返回值和访问修饰符可以不同。发生在编译时。与返回值无关。
重写:发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类。访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类就不能重写该方法。
六、字节码:供虚拟机理解的代码叫做字节码(.class文件)好处:实现了跨平台,Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效。而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。
七、GC判断对象可以被回收
①引用计数法 python语言使用,效率高
②可达性分析法 Java语言使用 GC Roots的对象:虚拟机栈(线帧中的本地变量表)中引用的对象、方法区中类静态属性引用的对象、方法区中常量引用的对象、本地方法栈中Native方法引用的对象



