你真的了解JAVA吗?
说明::
此文章的回答方式采用抽象的回答,只是作为一个引子,实施告诫自己 **学而时习之,不亦说乎?**具体详细答案请询问GPT等。
面向对象和面向过程
面向对象:将事务高度抽象化的变成模式。抽象成三大特性(封装,继承,多态)
面向过程:从上而下的执行代码。把问题分解为方法或可以执行代码块。
平台无关性
在计算机中不受平台约束,一次编译,到处执行!
值传递
**实参:**实际传入方法参数值
**形参:**定义方法参数值
基本数据类型
类型 字节
- byte 1
- short 2
- int 4
- long 8
- float 4
- double 8
- char 2
- boolean 1
关键字
- transient:忽略序列化
- instanceof 判断对象类型
- volatile 多线程下共享变量可见性,顺序性(禁止指令重排)
- synchronized 重量级锁
- final 常量
- static 静态
String
- 字符串的不可变型:由静态 + 常量 + 字符数组组成;所有操作字符串的方法都是新创建了一个字符串
- 可变字符串:stringBuild,stringBuffer
- string 对 “+” 的优化:语法糖 实际上应用了stringBuilder.append toString()
- string拼接的方式:build > buffer > concat > + > stringUtils.join (左边起效率最快)
- string.valueOf 和 Integer.toString的区别:string.valueOf 底层使用了 Integer.toString
- switch使用string进行比较:采用equals+hashcode实现的
- 字符串池:String str = new String(“hi”);
- 字面量:这就是 - > String str = “hi”
- Class常量池:虚拟机(JVM)在加载类的过程中为每个类创建的一个内存区域。 主要存放-1字面量 2符号引用
- string长度限制:并非固定长度,分情况
- 常用方法
自动拆箱/装箱
- 拆箱:引用类型 -> 基本类型
- 装箱:基本类型 -> 引用类型
- 基本/引用类默认值
- 自动装/拆箱缓存:引用类型有基本类型范围的缓存
- 定义boolean类型时变量名禁止使用is开头:遵循阿里开发手册-序列化带来的影响
- 定义属性时必须使用封装类
异常
- error:系统级的错误,Java虚拟机抛出的
- exception:需要捕获,处理的异常,设计程序不完善出现的
- Throwable : error,exception的父类
- 受检查异常:在程序调用时,必须进行处理(捕获或抛出)IO使用时比较多
- 非受检查异常:不会影响程序运行,例如:空指针
- try?来指定?块预防所有异常的程序;
- catch?句紧跟在 try 块后?, ?来指定你想要捕获的异常的类型;
- finally 为确保?段代码不管发?什么异常状况都要被执?;
- throw 语句?来明确地抛出?个异常;
- throws?来声明?个?法可能抛出的各种异常;
- 异常链:捕获后重新抛出一个新异常,此时即有新异常信息也能查看捕获异常信息
- try-with-resources:控制关闭资源
集合类
- Collection:list set的父接口
- Collections:包装类,实现封装方法
- set,list区别:顺序,重复,数据结构
- ArrayList 和 LinkedList 和 Vector 的区别:线程安全,数据结构,时间复杂度(增删/查询)
- fast-fail机制:arraylsit实现了(快速失败)
- vector和synchronizedList区别:1v同步方法实现 s同步代码块实现 2扩容方式不同
- hashSet和TreeSet区别:h可以存放一个null值,t不能存放null值 2数据结果不同 h:hashmap t:treemap
- HashMap 和 HashTable 有何不同? 线程不安全和线程安全
- HashMap 和 ConcurrentHashMap 的区别? 线程不安全 和 线程安全对桶数组上锁
- hashMap,ArrayLisr,LinkList源码 初始值,增删改方法,扩容机制等
- stream操作集合,常用方法:filter,map,limit,skip.collect,sort
- Copy-On-Write(COW):先对集合元素进行复制,然后操作复制后的集合
- fail-safe:与fail-fast取反,COW采用了
- ConcurrentSkipListMap:支持排序和并发问题的map,内部使用跳表。
I/O流
- 字节流:OutputStream、InputStream的子类
- 字符流:Reader、Writer的子类
- 同步:A调用B,B立马执行,并返回结果
- 异步:A调用B,A和B可以同时执行,执行完后返回结果
- 阻塞:A调用B,A等待B执行完成
- 非阻塞:A调用B,A可以不用等待B执行完成
- Linux5中IO模型:BIO,NIO,IO多路复用,信号驱动IO模型,AIO;各自实现方式。
- Netty:非阻塞I/O客户端-服务器框架
反射
- 在运行时通过反射获取类的方法或属性等
- 通过反射+工厂模式实现IOC(控制反转)
- 静态编译,动态编译:不灵活和更灵活
枚举
- 一组固定的常量建议使用枚举(Enum)
- 枚举反编译是一个final class 继承了 Enum,所以枚举不能被继承
- 枚举实现单例(需要了解设计模式)
- 枚举实现线程安全(需要了解JVM)
泛型
- 定义类或接口的时候使用参数类型
- 类型擦除:编译时会移除泛型信息,替换限定类型
- 泛型中的占位符:E(集合使用) T(Java类) K(key) V(value) N(number数字) ?(无限制通配符) Object(类的大爹)
- 限定通配符和非限定通配符:对类型进行限制(上下界限定符) | 对类型无限制例如
- 上界限定符:<? extends T> 只能使用T子类或当前类
- 下界限定符:<? super T> 只能使用T父类或当前类
- List<?>和List之间的区别是什么?List可以给<?> 但是不能给
代理
- 静态代理:在编译期间定义好了
- 动态代理:更灵活,在运行时生成代理类
- 反射是动态代理的一种实现方式。
- 动态代理的实现方式:jdk代理,cglib代理
- AOP实现通过了cglib代理和jdk代理
序列化
- 将对象转换成可传输格式的过程,反序列化就是反过来
- 相关接口和类 :Serializable,Externalizable,ObjectOutput,ObjectInput,ObjectOutputStream,ObjectInputStream
- 实现Serializable接口。需要定义serialVersionUID,不定义则默认生成。
- Externalizable继承了Serializable多了writeExternal和readExternal()抽象方法,必须重写
- serialVersionUID:不能随意修改值,可以默认为1L或者利用idea工具生成值
注解
- 元注解:定义其他注解的注解
- @Retention:表示再什么级别保存该注解信息
- @Retention:表示再什么级别保存该注解信息
- @Documented:将此注解包含再javadoc中
- @Inherited:允许子类继承父类中的注解
- java中常用注解
- spring常用注解
- 通常自定义注解都和反射搭配使用
- 定义注解 @interface关键字
单元测试
过!!!!
API & SPI
- API:应用程序编程接口
- SPI:服务提供者接口 主要由框架或系统提供给第三方开发者,以便他们能够为系统提供定制的服务实现
详细例子:想象你经营一家餐厅,需要采购食材。你向供应商们提出了一套规则和标准(比如食材质量、送货时间等)
时间处理
- 时间戳:格林威治时间到目前的总秒数,可以作为唯一值
- 格林威治时间(GMT):英国伦敦郊区时间,GMT+8表示中国的时间 比格林威治快8个小时
- SimpleDateFormat(日期转换类)线程不安全
- Date线程不安全
- ISO 8601:国际规范
- 时间格式(yyyy-MM-dd:)
编码方式
- ASCII:美国信息交换标准代码(只有256个字符)
- Unicode:万国码、国际码 可以用中文表示
- unicode-utf-8:表示存储的字节 数字英文2字节 中文4字节
- GBK:国内通用标准
语法糖
- 语法糖:不影响代码执行,简化代码操作,优化代码
- 语法糖例子;增强for lambda表达式 断言 装箱拆箱等等
- 语法盐:不算标准名词,明明可以更简写但是为了安全性写的复杂一点
lambda表达式
对函数式接口中的方法一种语法糖,与函数式接口搭配使用。
一曝十寒
“虽有天下易生之物也,一日暴之,十日寒之,未有能生者也。”其字面意思是说,即使是最容易生长的生物或事物,如果一天让它受到强烈的阳光曝晒,接下来连续十天又让它处于寒冷环境中,如此反复交替,这样的生物或事物也无法正常生长。
引申到生活、学习、工作等多方面,它常用来比喻做事没有恒心,不能持久努力,缺乏必要的连续性和稳定性。比如在教育和自我提升的过程中,如果学一阵停一阵,就像是一曝十寒那样,最终将无法取得良好的成果。因此,“一曝十寒”强调的是持之以恒的重要性,警示人们不论是求知还是修身,都应该保持连续不断的努力和积累,避免间歇性的热情和懈怠。