你真的了解JAVA吗?

发布时间:2024年01月10日

你真的了解JAVA吗?

说明::

此文章的回答方式采用抽象的回答,只是作为一个引子,实施告诫自己 **学而时习之,不亦说乎?**具体详细答案请询问GPT等。

面向对象和面向过程

面向对象:将事务高度抽象化的变成模式。抽象成三大特性(封装,继承,多态)

面向过程:从上而下的执行代码。把问题分解为方法或可以执行代码块。

平台无关性

在计算机中不受平台约束,一次编译,到处执行!

值传递

**实参:**实际传入方法参数值

**形参:**定义方法参数值

基本数据类型

类型 字节

  1. byte 1
  2. short 2
  3. int 4
  4. long 8
  5. float 4
  6. double 8
  7. char 2
  8. boolean 1

关键字

  1. transient:忽略序列化
  2. instanceof 判断对象类型
  3. volatile 多线程下共享变量可见性,顺序性(禁止指令重排)
  4. synchronized 重量级锁
  5. final 常量
  6. static 静态

String

  1. 字符串的不可变型:由静态 + 常量 + 字符数组组成;所有操作字符串的方法都是新创建了一个字符串
  2. 可变字符串:stringBuild,stringBuffer
  3. string 对 “+” 的优化:语法糖 实际上应用了stringBuilder.append toString()
  4. string拼接的方式:build > buffer > concat > + > stringUtils.join (左边起效率最快)
  5. string.valueOf 和 Integer.toString的区别:string.valueOf 底层使用了 Integer.toString
  6. switch使用string进行比较:采用equals+hashcode实现的
  7. 字符串池:String str = new String(“hi”);
  8. 字面量:这就是 - > String str = “hi”
  9. Class常量池:虚拟机(JVM)在加载类的过程中为每个类创建的一个内存区域。 主要存放-1字面量 2符号引用
  10. string长度限制:并非固定长度,分情况
  11. 常用方法

自动拆箱/装箱

  1. 拆箱:引用类型 -> 基本类型
  2. 装箱:基本类型 -> 引用类型
  3. 基本/引用类默认值
  4. 自动装/拆箱缓存:引用类型有基本类型范围的缓存
  5. 定义boolean类型时变量名禁止使用is开头:遵循阿里开发手册-序列化带来的影响
  6. 定义属性时必须使用封装类

异常

  1. error:系统级的错误,Java虚拟机抛出的
  2. exception:需要捕获,处理的异常,设计程序不完善出现的
  3. Throwable : error,exception的父类
  4. 受检查异常:在程序调用时,必须进行处理(捕获或抛出)IO使用时比较多
  5. 非受检查异常:不会影响程序运行,例如:空指针
  6. try?来指定?块预防所有异常的程序;
  7. catch?句紧跟在 try 块后?, ?来指定你想要捕获的异常的类型;
  8. finally 为确保?段代码不管发?什么异常状况都要被执?;
  9. throw 语句?来明确地抛出?个异常;
  10. throws?来声明?个?法可能抛出的各种异常;
  11. 异常链:捕获后重新抛出一个新异常,此时即有新异常信息也能查看捕获异常信息
  12. try-with-resources:控制关闭资源

集合类

  1. Collection:list set的父接口
  2. Collections:包装类,实现封装方法
  3. set,list区别:顺序,重复,数据结构
  4. ArrayList 和 LinkedList 和 Vector 的区别:线程安全,数据结构,时间复杂度(增删/查询)
  5. fast-fail机制:arraylsit实现了(快速失败)
  6. vector和synchronizedList区别:1v同步方法实现 s同步代码块实现 2扩容方式不同
  7. hashSet和TreeSet区别:h可以存放一个null值,t不能存放null值 2数据结果不同 h:hashmap t:treemap
  8. HashMap 和 HashTable 有何不同? 线程不安全和线程安全
  9. HashMap 和 ConcurrentHashMap 的区别? 线程不安全 和 线程安全对桶数组上锁
  10. hashMap,ArrayLisr,LinkList源码 初始值,增删改方法,扩容机制等
  11. stream操作集合,常用方法:filter,map,limit,skip.collect,sort
  12. Copy-On-Write(COW):先对集合元素进行复制,然后操作复制后的集合
  13. fail-safe:与fail-fast取反,COW采用了
  14. ConcurrentSkipListMap:支持排序和并发问题的map,内部使用跳表。

I/O流

  1. 字节流:OutputStream、InputStream的子类
  2. 字符流:Reader、Writer的子类
  3. 同步:A调用B,B立马执行,并返回结果
  4. 异步:A调用B,A和B可以同时执行,执行完后返回结果
  5. 阻塞:A调用B,A等待B执行完成
  6. 非阻塞:A调用B,A可以不用等待B执行完成
  7. Linux5中IO模型:BIO,NIO,IO多路复用,信号驱动IO模型,AIO;各自实现方式。
  8. Netty:非阻塞I/O客户端-服务器框架

反射

  1. 在运行时通过反射获取类的方法或属性等
  2. 通过反射+工厂模式实现IOC(控制反转)
  3. 静态编译,动态编译:不灵活和更灵活

枚举

  1. 一组固定的常量建议使用枚举(Enum)
  2. 枚举反编译是一个final class 继承了 Enum,所以枚举不能被继承
  3. 枚举实现单例(需要了解设计模式)
  4. 枚举实现线程安全(需要了解JVM)

泛型

  1. 定义类或接口的时候使用参数类型
  2. 类型擦除:编译时会移除泛型信息,替换限定类型
  3. 泛型中的占位符:E(集合使用) T(Java类) K(key) V(value) N(number数字) ?(无限制通配符) Object(类的大爹)
  4. 限定通配符和非限定通配符:对类型进行限制(上下界限定符) | 对类型无限制例如
  5. 上界限定符:<? extends T> 只能使用T子类或当前类
  6. 下界限定符:<? super T> 只能使用T父类或当前类
  7. List<?>和List之间的区别是什么?List可以给<?> 但是不能给

代理

  1. 静态代理:在编译期间定义好了
  2. 动态代理:更灵活,在运行时生成代理类
  3. 反射是动态代理的一种实现方式。
  4. 动态代理的实现方式:jdk代理,cglib代理
  5. AOP实现通过了cglib代理和jdk代理

序列化

  1. 将对象转换成可传输格式的过程,反序列化就是反过来
  2. 相关接口和类 :Serializable,Externalizable,ObjectOutput,ObjectInput,ObjectOutputStream,ObjectInputStream
  3. 实现Serializable接口。需要定义serialVersionUID,不定义则默认生成。
  4. Externalizable继承了Serializable多了writeExternal和readExternal()抽象方法,必须重写
  5. serialVersionUID:不能随意修改值,可以默认为1L或者利用idea工具生成值

注解

  1. 元注解:定义其他注解的注解
  2. @Retention:表示再什么级别保存该注解信息
  3. @Retention:表示再什么级别保存该注解信息
  4. @Documented:将此注解包含再javadoc中
  5. @Inherited:允许子类继承父类中的注解
  6. java中常用注解
  7. spring常用注解
  8. 通常自定义注解都和反射搭配使用
  9. 定义注解 @interface关键字

单元测试

过!!!!

API & SPI

  • API:应用程序编程接口
  • SPI:服务提供者接口 主要由框架或系统提供给第三方开发者,以便他们能够为系统提供定制的服务实现
    详细例子:想象你经营一家餐厅,需要采购食材。你向供应商们提出了一套规则和标准(比如食材质量、送货时间等)

时间处理

  1. 时间戳:格林威治时间到目前的总秒数,可以作为唯一值
  2. 格林威治时间(GMT):英国伦敦郊区时间,GMT+8表示中国的时间 比格林威治快8个小时
  3. SimpleDateFormat(日期转换类)线程不安全
  4. Date线程不安全
  5. ISO 8601:国际规范
  6. 时间格式(yyyy-MM-dd:)

编码方式

  1. ASCII:美国信息交换标准代码(只有256个字符)
  2. Unicode:万国码、国际码 可以用中文表示
  3. unicode-utf-8:表示存储的字节 数字英文2字节 中文4字节
  4. GBK:国内通用标准

语法糖

  1. 语法糖:不影响代码执行,简化代码操作,优化代码
  2. 语法糖例子;增强for lambda表达式 断言 装箱拆箱等等
  3. 语法盐:不算标准名词,明明可以更简写但是为了安全性写的复杂一点

lambda表达式

对函数式接口中的方法一种语法糖,与函数式接口搭配使用。

一曝十寒

“虽有天下易生之物也,一日暴之,十日寒之,未有能生者也。”其字面意思是说,即使是最容易生长的生物或事物,如果一天让它受到强烈的阳光曝晒,接下来连续十天又让它处于寒冷环境中,如此反复交替,这样的生物或事物也无法正常生长。

引申到生活、学习、工作等多方面,它常用来比喻做事没有恒心,不能持久努力,缺乏必要的连续性和稳定性。比如在教育和自我提升的过程中,如果学一阵停一阵,就像是一曝十寒那样,最终将无法取得良好的成果。因此,“一曝十寒”强调的是持之以恒的重要性,警示人们不论是求知还是修身,都应该保持连续不断的努力和积累,避免间歇性的热情和懈怠。
文章来源:https://blog.csdn.net/m0_62649352/article/details/135486864
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。