JAVA基础相关面试题--01

1.执行效率最高的是机器语言。
2.Oracle公司 JDK1.8为主流 java语言1995年出版,前身是Sun公司开发

@java语言具有平台无关性,语言健壮性。为什么?
平台无关性:软件的运行不会因操作系统、处理器的变化而出现错误。
C++源程序是对平台编译的。所以会与平台密切相关。
java语言提供的编译器不针对特定的操作系统和CPU芯片进行。
java先编译后执行,程序编译之后生成一种中间代码–字节码.class文件,再由虚拟机编译成适合所在平台可以执行的机器码,所以可以在不同平台上运行。

jvm 概念性的对象要去了解(看面试题) jvm优化调优

@jvm对类的加载流程 (双亲模式)
一、加载:类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后再内存中创建一个java.lang.Class对象(规范并未说明Class对象位于哪里,HotSpot虚拟机将放在了方法区中)用来封装类在方法区内的数据结构
二、连接:
1. 验证:确保被加载的类的正确性。
2. 准备:为类的静态变量分配内存,并将其初始化为默认值。准备阶段对象还没有创建
3. 解析:把类中的符号引用转换为直接引用。
三、初始化:为类的静态变量赋予正确的初始值。对静态变量赋值
四、使用
五、卸载
双亲模式
双亲委派制就是当加载一个Class文件时会先交由上层ClassLoader来加载,如果发现已加载则直接返回,如果没有加载则去当前ClassLoader 的classes目录寻找该Class文件,找到则加载,找不到则交由下层ClassLoader来继续加载,如果直到最下层加载器都无法加载(找不到该Class文件)则抛出ClassNotFoundException异常。
简单来说:一个类加载器接收到一个类的加载请求,先吧这个请求委派交给其父类加载器来完成,如果父类加载器反馈自己无法加载此类事,才交给子类加载器去尝试加载。子类都无法完成则抛出异常。

@垃圾回收的概念
垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用,以免造成内存泄露。
垃圾回收中的垃圾是指在内存中不再被使用的对象。
C++中手动进行垃圾回收处理(谁污染谁治理)
java语言中自动垃圾回收,不是自主决定,只能根据j的内存回收原理去适应,尽量提高程序的性能。
finalize这个方法告诉进行垃圾回收
常见的垃圾回收算法:

  1. 引用计数算法: 计数归零表示不再被使用则被回收,但是无法回收循环引用(互相引用)的对象。
  2. 标记清除算法:被标记的内存则被清除,分为标记阶段和清除阶段。但是会产生内存的空间碎片
  3. 复制算法: 标记完成开始回收时,将一块内存中的对象全部复制到另一块内存中,缺点是可用内存变为一半。
    新生代:Serial、ParNew、Parallel Scavenger;
    老年代:Serial Old、Parallel Old 、CMS;
    整堆收集器:G1
    新生代上的GC实现:
    Serial:单线程的收集器,收集时会暂停其他所有工作线程
    ParNew:Serial收集器的多线程版本。(?为什么无法保证性能超越单线程?)
    Parallel Scavenger: 多线程收集器,吞吐量优先的收集器。
    吞吐量:运行用户代码时间/(运行用户代码时间 + 垃圾收集时间)
    ParNew不能超越Serial的原因:线程交互的开销、记住上一个线程的数据、指针,保存下一个线程的数据、地址指针都需要一定的开销。
    在这里插入图片描述

@在java中引用分为四种类型
强引用、软引用、弱引用、虚引用、
强引用:被刚new出来的对象所加上的运用,永远不会被回收
软引用:被声明为软引用的类,是可被回收的对象,如果jvm内存紧张则软引用被回收,否则不会被回收。为什么不被直接回收?缓存的对象可有可无,留在内存中可能被需要,所以就不需要重新被分配内存了。软引用可以加速JVM对垃圾内存的回收速度。
弱引用:弱引用的对象一定会被进行垃圾回收
虚引用:虚引用弱到可以忽略不计。跟踪记录、辅助finalize函数的使用。
其中虚引用与垃圾引用有什么关系

@代码要求写注释 注释规范 参考阿里巴巴编程规范

@ OOP 面向对象的程序设计
AOP 面向切面的编程

@@什么是版本控制 Git

@八种基本类型 分为四大类
整型:byte 1字节、short 2字节、int 4字节、long 8字节
字符型:char 2字节
浮点型:float 4字节、double 8字节
Boolean型:Boolean 1字节
每一类中要求记住他的大小和长度 1字节是8位

@Boolean类型占几个字节
由运行环境自行决定
在jvm中没有任何提供Boolean值专用的字节码指令。java语言中表达式操作的Boolean中在编译后使用int数据类型类代替,Boolean数组会被编码成byte数组。

@ [面试题] long类型与double类型谁的范围更大?为什么
double是科学技术法,浮点数的计数方式
无论是单精度还是双精度在存储中都分为三个部分,符号位、指数位、尾数部分。所以存储的话按照科学技术法的方式进行存储。
long型 和 long long型都是按位存储。所以自然比double型的范围小

@数据类型转换
1. 默认转换 :从低到高类型的转换、表达式中默认转换、 byte类型+short类型 + char类型 混合运算结果是int类型。如果结果是三种类型中的一种则有可能会产生溢出。整型会整体默认转化成float
在这里插入图片描述
强制转换 从低到高 可能会产生溢出

@ int类型一定要用4个字节表示吗?
不一定 数据类型占内存的尾数实际上与操作系统的尾数和编译器有关。编译器会根据自身硬件来选择合适大小。short和int至少为16位,long型至少为32位。但是short不能超过int型,int型不能超过long型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值