Java阶段复习

这篇博客主要涵盖了Java基础内容,包括数组、静态&最终&抽象的特性、Object类、集合、IO、线程、反射、设计模式、网络编程以及JVM调优。此外,还涉及了Java Web框架Spring、SpringMVC、Struts2和相关框架复习,如SSM、SpringBoot、MyBatis等。文章详细讲解了各领域的关键知识点,如HashMap、线程池、事务管理、网络七层模型、JVM内存结构和类加载机制等。
摘要由CSDN通过智能技术生成

Java基础

数组

一组连续空间,存储多个相同类型的值

特点

  • 数据类型相同
  • 长度固定

数组的扩容

  • 创建一个新数组,使用For循环将元素逐一赋值
  • System.arraycopy(原数组名,原数组起始下标,新数组名,新数组起始下标,复制的长度)
  • Java.util.Arrays.copyOf(原数组名,新数组名)

排序

  • 冒泡(相邻两个元素两两比较,互换位置)
  • 选择(固定值和其他值依次比较,互换位置)
  • 快速

查找

  • 二分法查找【递归】

静态&最终&抽象

静态static

简述
  • 可以修饰属性和方法
  • 修饰属性——>静态属性(类属性)
  • 修饰方法——>静态方法(类方法)
  • 静态成员全类所有对象共享
  • 全类就一份,不会因为创建多个对象而产生多份
  • 不必创建对象,直接通过类名进行访问
特点
  • 静态方法可以直接访问静态成员
  • 静态方法不能直接访问非静态成员
  • 可以继承,没有覆盖和多态

抽象Abstract

简述
  • 修饰类——>称为抽象类,无法New对象
    • 作用
      • 为子类提供共性的属性和方法
      • 可以声明引用,强制使用多态(分类引用指向子类对象)
  • 修饰方法——>称为抽象方法,无法直接使用
    • 作用
      • 强制子类覆盖父类中所有的抽象方法,如果不覆盖,该类必须声明为抽象类

最终Final

简述
  • 修饰类——>没有子类
  • 修饰方法——>可以继承,不能覆盖
  • 修饰变量——>只能赋值一次,不能改变,修饰变量我们称之为常量
    • 实例变量:没有默认值,必须手动赋值,赋值的时机:
      • 显示初始化
      • 动态代码块
      • 每一个构造方法
    • 静态变量:没有默认值,必须手动赋值,赋值的时机:
      • 显示初始化
      • 静态代码块
    • 局部变量
      • 基本数据类型:数值不可变
      • 引用数据类型:地址不可变
类加载过程

https://blog.csdn.net/romantic_jie/article/details/91355437

JVM原理&调优【重点】

略(后面详细介绍)

Object类

所有的父类,如果没有显示继承,那么隐式存在

作用

  • 作为形参——>可以接受所有对象
  • 作为返回值类型——>可以返回所有对象
  • Java中每一个对象多可调用Object类中的方法

Object类常用的方法有哪些?(低于5个)

  • hashCode toString getClass equals wait notify notiyAll clone fianlize等

集合

简述

Java集合类存放在java.util包中,是一个用来存放对象的容器。

注意:

  • 1.集合只能存放对象。比如你存入一个int型数据66放入集合中,其实它是自动转换成Integer类后存入的,Java中每一种基本数据类型都有对应的引用类型。
  • 2.集合存放的都是对象的引用,而非对象本身。所以我们称集合中的对象就是集合中对象的引用。对象本身还是放在堆内存中。
  • 3.集合可以存放不同类型,不限数量的数据类型。

集合和数组的区别

  • 长度
    • 数组不可变
    • 集合可变
  • 元素的数据类型
    • 数组可以存储基本类型数据和引用数据类型
    • 集合只能存储引用数据类型

集合类原理,尤其HashMap、HashTable、ConcurrentHashMap等

  • HashTable: KV都不允许为null,线程安全,效率低

  • HashMap(和HashTable相反):哈希表(Node[])、链表(Node next 解决哈希冲突)、红黑树(TreeNode 解决链表过长,效率过低问题)

  • ConcurrentHashMap:1.7版本之前 哈希表 + 链表 + 分段锁 1.8以后 哈希表 + 链表 + 红黑树

    CAS(Compare And Set): 类似于乐观锁

面试题?

List下有三个实现类的特点
	ArrayList:底层数组实现,查询快,增删慢。线程不安全,效率高。
    Vector:底层数组实现,查询快,增删慢。线程安全,效率低。
    LinkedList:底层链表实现,查询慢,增删快。
set集合
list和set区别? 
 * List:有序,可重复
 * Set:无序,不可重复
HashSet
 * 如何保证元素唯一:HashSet存储元素底层依靠两个方法hashcode() equals()
 * 	执行步骤:
 * 		hashcode先执行,会判断存储的元素哈希值是否一样
 * 			相同:执行equals判断内容
 * 				相同:不存
 * 				不同:* 			不同:存储	
 注:如果存储自定义对象,请在类中覆盖hashcode和equals。

Map和Colleciton区别
 Collection:List可重复,Set集合不可重复。光棍
 Map:键不可重复,值可重复。

IO

分类

  • 方法:输入流和输出流
  • 功能:节点流和过滤流
  • 单位:字节流和字符流

使用

对象序列化和反序列化

网络中传输的数据均为字节,保证数据能够进行网络传输

  • 实现序列化接口
  • 不需要参与对象的序列化 transient

BIO、NIO、AIO?

  • BIO:同步阻塞IO

  • NIO:同步非阻塞IO Netty

  • AIO:异步非阻塞IO

    网络编程

    阻塞和非阻塞体现在线程利用率

    阻塞:先有线程再有完整的IO操作,线程服务于一次完整的IO

    非阻塞:关注的事件,事件发生后进行事件操作,线程利用率更高

    同步和异步

request.getInputStream

线程

  • 进程:正在运行的程序。

  • cpu:单cpu一个时间点只能执行一个进程。

    • 为什么我们感觉多个进程是同时执行的?
    • 是因为cpu在做着程序之间的高效切换,让我们感觉是同时在执行。
  • 线程:在一个进程中,包含多个任务,而每一个任务就是一个线程。

  • 多线程:每一个进程想要执行必须抢到cpu才能执行,如果一个进程中线程的数量比较多,那么该进程抢到的概率就更大,但是不保证一定抢到,因为线程的执行是随机性的。

  • 并发:在一段时间内多个线程切换执行。

  • 并行:在一个时间点多个线程同时执行。

创建

  • extend Thread
  • implements Runnable
  • 线程池

运行状态

  • 初始化状态
  • 就绪状态 thread.start()
  • 运行状态
  • 阻塞状态 sleep(不会释放锁) | wait(释放锁标记)
  • 死亡状态

线程安全

多线程并发环境中操作临界资源,保证线程的安全,对临界资源加锁

同步锁
  • 同步方法
  • 同步代码块

线程池

将需要执行的任务交给线程池,线程池会分配线程去执行该任务,任务执行结束线程不会死亡,而是回到线程池中处于空闲状态,等待下一个任务。

  • FixedThreadPool
  • CachedThreadPool

反射

类对象

通过.class文件获取的对象,使用该对象中的构造方法,实例变量,实例方法。

  • getClass
  • Class.forName(推荐(将来可以将字符串写入到配置文件中))
  • 对象.class

使用

  • 反射调用方法、属性

设计模式

  • 单例(静态内部类)

    保证内存中只有一个对象

    • 私有属性方法
    • 本类提供一个对象
    • 将该类对象提供给外界使用
  • 工厂(好处 : 解耦合)

    主要解决的是对象创建的问题,工厂的职责在于创建一个对象

  • 代理(静态代理、动态代理)

    客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。

  • 适配器

    将一个类的接口转成客户期望的另外一个接口,使得原本由于接口不匹配而不能一起工作的那些类可以一起工作。

  • 责任链

    当系统需要嵌入多个独立功能模块时,可以使用责任链设计模式

    • 责任:主要负责实际功能实现。
    • :用于协调责任调度,记录调度状态。

网络

TCP/IP协议的三次握手和四次挥手

https://blog.csdn.net/qq_38950316/article/details/81087809

网络七层模型

  • 应用层 Http
  • 会话层
  • 表示层
  • 传输层 TCP/UDP 报文
  • 网络层
  • 数据链路层
  • 物理层

JavaWEB框架复习

Java 语法基础:HashMap结构,锁-分类,JVM GC策略,自定线程池参数含义,JVM内存分析指令-jmap,jstack,jstats, Java类加载策略,网络编程 阻塞IO和NIO – 高级Java开发工程师

Spring

概念:一款轻量级javaEE解决方案,众多优秀设计模式的组合

IOC(控制反转)

控制:给属性赋值的权利

反转:把给属性赋值的权利由代码反转到了配置文件中

控制反转,有容器工厂负责对象的创建销毁(生命周期)

<bean id="xxx"> 或者@Bean

DI(依赖注入)

当一个类型需要另一个类型时,可以把另一个类型作为该类型的属性,通过对应的注入方式进行赋值

set注入构造注入自动注入(ByType @Autowired | ByName @Resource)

AOP(面向切面编程)

将代码中其它功能(事务、日志、性能等)剥离出来形成独立的功能方法或者功能类,如果使用到这些功能时,通过动态代理方式生成代理类,增强普通类功能

动态代理(字节码处理技术): 原始方法 + 额外功能 = 代理类
  • JDK(默认):必须提供接口
  • CGLIB(基于父子类继承关系)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值