小林code

概念

Java特点

  • 跨平台
  • 面向对象
  • 内存管理

Java的优劣势

  1. 优势:跨平台/生态系统/面向对象/内存管理/多线程/安全模型
  2. 劣势:编译开销/语法繁琐/内存消耗

Java跨平台原因

  1. Java首先被编译成.class(字节码文件)
  2. JVM将字节码翻译成机器码

JVM、JDK、JRE三者关系

  • JVM:运行环境。:将字节码直接映射到本地的cpu指令集和OS的系统调用,所以屏蔽了与操作系统相关的信息
  • JDK:开发工具包
  • JRE:JVM+Java类库

Java解释和编译都有

  • 解释:JVM方法调用计数器,当累计计数大于一定值的时候,使用JIT编译成机器码,否则就是用解释器进行解释执行
  • 编译:源代码被编译成字节码,JIT会被那编译过的机器码保存起来

解释型语言和编译型语言区别

  • 编译型语言:源代码被编译成机器码或是字节码,生成可执行文件。
  • 解释型语言:逐行解释执行源代码,不生产独立的可执行文件。在执行程序时同时进行翻译

值传递和引用传递

  • 值传递:传递实际值的副本
  • 引用传递:实际上是伪概念,更改指向同一个对象的内部数据

数据类型

基本的数据类型

  • 数值型:整型(byte short int long)、浮点型(float double)
  • 字符型:char
  • 布尔型:boolean

类型互转出现的问题

  • 数据向上转一般是安全
  • 出现的问题1.数值溢出
  • 出现的问题2.精度丢失

为什么要使用bigDecimal而不是double进行运算

  • double是使用二进制来进行的浮点运算,二进制不能精确的表示小数,比如说1/3
  • bigDecimal则是可以进行精确计算

装箱和拆箱

  • 数据类型和对应的包装类进行转换的过程
  • 弊端:频繁的自动装箱操作可能会影响到程序的性能

Java中的Integer和int

Integer

  • 优势:泛型中的应用/转换中的应用/集合中的应用
  • 是一种引用类型,需要实例化对象,就必须为对象分配内存
  • 初始化为null,如果没有进行实例化,就会导致空指针异常
  • 缓存:在Integer内部有一个静态的缓存池,用于存储特定范围内的整数值对应的Integer对象

int

  • 作为基本数据类型,在对应的内存块进行直接的数据存储,读写效率要比包装类更高
  • 而且在64位的JVM上,在开启引用压缩的情况下,一个Integer对象要占用16个字节的内存空间,一个int只占用4个字节,存储效率也更高

面向对象

如何理解封装继承多态

多态体现在哪些方面

多态解决了什么问题

面向对象的设计原则有哪些

重载和重写有什么区别

抽象类和普通类的的区别

抽象类和接口的区别

抽象类能加final修饰吗

接口里面可以定义哪些方法

抽象类可以被实例化吗

接口可以包含构造函数吗

Java中的静态变量和静态方法

非静态内部类和静态内部类的区别

编译器是如何让非静态内部类直接访问外部方法的

关键字

final的作用

static的作用

深拷贝和浅拷贝

深浅拷贝的区别

实现深拷贝的三种方法是什么

泛型

什么是泛型

对象

Java创建对象的方式

New出来的对象什么时候回收

如何获取私有对象

反射

反射是什么

反射的应用场景有哪些

注解

Java注解的原理

注解解析的底层原理是什么

Java注解的作用域

异常

介绍Java异常的种类

异常处理有哪些

抛出异常为什么不用throws

try catch中的语句运行情况

try{return 'a'} finally{return 'b}这条语句的最终返沪

object

object类有哪些方法

== 和 equals()的区别有哪些

hashcodeequals方法的关系

Java中string的常用方法有哪些

String,StringBuffer,StringBuilder之间的关系

Java新特性

Java8的新特性

Lambda表达式

Java中的stream的api 介绍

Java21知道哪些新特性

序列化

一个对象怎么从一个jvm转移到另一个jvm

序列化和反序列化让你实现你会怎么做

如何将对象转为二进制字节流

设计模式

volatilesynchronized如何实现单例模式

代理模式和适配器模式有什么区别

责任链模式应用场景

策略模式和责任链模式的分别的应用场景

I/O

Java怎么实现网络IO高并发编程

BIO、NIO、AIO的区别是什么

NIO是怎么实现的

NIO的使用场景