JAVASE总结

本文详细介绍了Java的基础知识,包括数据类型、运算符、方法签名、多态的概念和实现、内存管理的堆栈区划分、面向对象的特性。深入讲解了IO流,特别是RandomAccessFile的使用,以及线程同步中的互斥锁。还涉及了集合、数据结构、反射机制、序列化与反序列化、XML和String的相关方法。此外,文章提到了Spring框架的IOC和AOP概念,以及Spring Bean的生命周期。最后讨论了异常处理和TCP/UDP协议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

int类型4个字节.范围-21亿-21亿
float 4字节,.double 8字节
char 存储"字符"数据,2个字节,Unicode字符集编码格式
运算符: 算数,关系,逻辑.赋值,字符串连接.条件(三目)

方法签名: 方法名+参数列表
向上造型: 超类引用指向派生类对象,能点出来什么,看引用的类型 —自动类型转换
重写规则: 两同两小一大
返回值类型,抛出异常.///访问权限修饰符

访问控制修饰符
public
protected(受保护的) 本类,派生类,同包类中可以访问
private(仅在本类中访问)
default默认的 本类,同包类中访问
类的访问修饰符可以是public或默认的,类中的成员访问修饰符可以是任意的

多态:
同一类型的引用指向不同对象时有不同的实现
同一个对象被造型为不同的类型时有不同的功能

内存管理: 划分为三块区域: 堆,栈,方法区
面向对象三个特征
String.valueOf() 将其他类型转字符串类型
重写toString()方法 返回的字符串包含当前对象的属性信息,将当前对象转换为字符串

JDK5 自动拆装箱
IO 流
RandomAccessFile能对文件内容进行读写操作
File类不能操作文件的内容,RandomAccessFile能对文件的内容进行任意的读写
复制文件, 配合write和read,复制指定文件到指定位置
单字节读是一种随机读写方式
一组字节读是一种快读取方式

它既可以读取文件内容,也可以向文件输出数据,与普通的输出/输入流不同的是,RandomAccessFile支持"随机访问"的方式,程序可以直接跳转到文件的任意地方来读写数据。

由于RandomAccessFile可以自由的访问文件的任意位置,所以如果只需要访问文件的部分内容,而不是把文件从头读到尾,使用RandomAccessFile是更好的选择

IO操作
节点流,处理流
序列化,反序列化—对象流

字符流 char针对文字传输.
InputStreamReader 字符流.转换流
PrintWriter 缓冲字符流
在这里插入图片描述

线程; 就是一组任务执行序列:
进程 在某段时间内并发执行多个任务序列

线程同步;

 synchronized (同步监视器对象){ 
 	需要多线程同步执行的代码片段
 }

互斥锁:当使用synchronized锁定多个代码片段 ,并且指定的同步监视器对象是同一个时,这些代码[]片段就是互斥的,多个线程不能同时执行他们

集合只能存放引用类型,并且存放的是元素的引用
迭代器在遍历集合的过程中,是不可以通过集合的方法删除元素的

数据结构
队列 先进先出 Queue
双向队列 两端都可以进出队的队列 Deque
栈 先进后出 Deque stack=new LinkedList<>();

xml可扩展性标记语言

反射: 主要是指程序可以访问、检测和修改它本身状态或行为的一种能力
获取反射三种方式
通过类名实现反射 class,
通过路径实现反射 Class.forName(包名.类名)
通过new对象实现反射 new A.getClass()

方法区 JDK1.8之前称为永久态,持久态,
JDK1.8后称为元空间
StringBuffer,builder初始容量16

抽象类is a 类本质抽象.行为抽象
接口 like a 行为抽象,约束行为的有无

ArrayList 初始容量10 扩容 1.5倍

LinkedList jdk1.6是双向循环链表,jdk1.7之后就变成了双向链表
hashmap扩容,初始容量为16,加载因子0.75

ConcurrentHashMap 分段锁
hashtable的synchronized是全局锁

JDK7
数据结构:
ReentrantLock+Segment+HashEntry, 一个Segment中包含一个HashEntry数组,每个HashEntry又是一个链表结构
元素查询: 二次hash, 第一次hash定位到Segment, 第二次hash定位到元素所在的链表头部
锁: Segment分段锁,Segment继承了ReentrantLock,锁定操作的Segment,其他的Segment不受影响,并发度为Segment的个数,可以通过构造函数指定,数组扩容不会影响其他的Segment
get方法无法加锁.,Volatile保证

JDK8
数据结构
synchronized+CAS+Node+红黑树
Node的val和next都用 volatile修饰,保持可见性
CAS 乐观锁
查找.替换,赋值操作都使用CAS
锁: 锁链表的head结点,不影响其他元素的读写,锁粒度更细,效率更高. 扩容时,阻塞所有的读写操作,并发扩容

读操作无锁:
Node的val和next都使用volcatile修饰,读写线程对该变量可见
数组用volatile修饰,保证扩容时被线程通知,

双亲委派: 为了安全性String 类 和避免类的重复加载

Object o=new Object(): 空对象8个,引用4个 java中的内存8倍数分的

ThreadLocal原理和使用场景?
每一个Thread都有一个ThreadLocalMap类型的成员变量threadlocals变量. key为弱引用的ThreadLocal实例,value为线程变量的副本

并发的三大特性:
原子性: 一个操作
可见性 一个线程对共享变量的修改,另外一个线程可以看到
有序性: 程序按照代码的先后顺序执行。编译器为了优化性能,有时候会改变程序中语句的先后顺序,重排性,
但是不会影响最终的执行结果。但是有可能出现线程安全问题. volatitle,synchronized,

线程池参数?
核心线程
最大线程
线程空闲时间: 超出核心线程数之外的空闲存活时间会被清除
工作队列
线程工厂
拒绝策略

AOP,IOC 理解?
IOC 容器概念,控制反转,依赖注入
IOC 容器,map.kv,里面存放各种对象.xml里配置的bean节点,在项目启动时会读取配置文件的所有bean节点,根据全限定类名根据反射创建对象到map里面.扫描到通过注解还是通过反射到map里面

用Map来存,用key为类名,value就是要放在容器中进行管理的类的信息了,

控制反转
依赖注入: 获得依赖的对象被反转了’.
DI依赖注入是实现IOC的方法,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中

BeanFactory和ApplicationContext有什么区别?
beanfactory 延迟加载注入bean,再需要的时候再获取bean.getBean(), 才对bean进行加载实例化,不能发现存在spring中的配置问题—以编程的方式创建—手动注册

application 是容器启动就创建所有的bean对象, 有利于检查依赖属性是否注入,占用内存空间.程序启动慢,
以声明的方式创建.,ContextLoader—自动注册

AOP 安全,日志,事务,将程序中的业务逻辑, 封装成一个切面注入到目标对象中.具体业务逻辑中去 AOP可以对某个对象或某个方法进行业务逻辑增强

41 Spring的bean的生命周期?

解析类得到 BeanDefintion -----确定好bean的生命周期并进行实例化
属性注入,spring按照bean的属性信息进行属性注入
如果bean类有实现 BeanNameAware,BeanFactoryAware,工厂调用bean的setbeanname,方法传递bean的id, 工厂调用setBeanFactory()方法传入工厂自身。
调用beanPostProcessor进行初始化前的方法
调用初始化方法
调用beanPostProcessor进行初始化后的方法,在这里进行AOP
如果创建对象是单例的,则会把对象放入单例池中,使用bean
spring容器关闭时,.会调用DisposableBean 的 destory方法

spring框架中用到了哪些设计模式?

简单模式,单例模式,. 适配器模式,装饰器模式.,(态的给一个对象添加额外的职责,.) 动态代理,.策略模式,.

spring事务实现方式以及隔离级别?

spring事务隔离级别就是数据库隔离级别?
读未提交
读已提交 oracle
可重复读 mysql
串行化

spring事务的传播机制?

A调用B事务
required 默认级别,没有,则创建,有则加入事务
supports 存在事务,则加入,没有则以非事务方式执行
mandatory 存在加入,不存在,则泡池异常
required_new 创建一个新事务 ,如果当前存在事务,则挂起事务,
not_supported 以非事务方式执行,如果当前存在事务,则挂起当前事务, A和B可以都没事务
nerver 不使用事务,如果当前事务存在,则抛出异常
nested 如果当前事务存在,则在嵌套事务中执行,否则required操作一样(新建一个事务)

spring事务什么时候失效?
发生自调用,不是代理类,而是对象本身.
方法不是public
数据库不支持事务 myisam
没有被spring容器管理

什么是bean的自动装配? 5种
bean的xml中的标签的autowired属性中定义
ref,value手动装配
byName 通过bean的属性名
bytype 通过bean的类型
byconstructor 通过构造方法
autodetect 构造器,类型

SpringBoot,SpringMVC,Spring有什么区别?
springmvc的工作流程?
springmvc的主要组件?
handlerexceptionResolver 对异常进行处理,根据异常设置modelandview

SpringBoot的自动配置原理?如何做到开箱即用?

简述redis事务实现?
watch,multi ,将客户端的状态flag 为true,
exec

sentinel 哨兵,保证数据不丢失
cluster 集群,服务器的sharding技术

分布式架构下,session共享有哪些方案?
jwt,token 无状态服务.,

session怎么保存用户信息的?
2,session 默认被存在在服务器的一个文件里(不是内存)
3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
4,session 可以放在 文件、数据库、或内存中都可以。
5,用户验证这种场合一般会用 session

RPC.RMI?

86.分布式锁的解决方案?
在这里插入图片描述

分布式解决方案?
ZAB协议?
原子广播协议

zk和eureka的区别?
什么是 hystrix? 断路器

kafka设计?
kafka日志收集,
消费者组
topic
partition 为了实现扩展性,提高并发能力.,一个topic以多个partition分配到多个broker…每个partition是一个有序序列.
在这里插入图片描述
offset
zookeeper

kafka消息丢失场景以及解决方案?
ack=0 不重试,生产者发送消息,不管结果,如果发送失败,也就丢失了
ack=1 生产者发送完消息,只等待写入成功就返回,生产者宕机了,从节点没来得及同步,消息丢失

kafka高性能原因?
不急于内存,硬盘存储,.堆积强.利用磁盘顺序访问接近 内存.,都是append,有序,减少寻址时间.批量操作,减少次数,

实现接口的幂等性?
在这里插入图片描述
AOP代理模式?
106.简述RabbitMQ的架构设计?

broker 服务节点
扇形交换机: 交换机不需要指定路由键,只需要绑定键,把消息发送到队列 ----忽略路由键,交换机会放到交换机所绑定的所有队列
direct 直连交换机 ,一对一 Routingkey和bindingkey 点对点交换机
topic 交换机,. 会通过路由键和binding key进行路由. ----一对多

RabbitMQ 如何确保消息发送?消息接收?

RabbitMQ有一个信道, 将信道设置为confirm模式,.则所有在信道上发布的消息都会分配一个唯一的ID
ack确认发送, nack未确认
实现ConfirmCallback接口,只确认是否正确到交换机,成功到达则回调
实现ReturnCallback接口, 消息失败返回时回调

TCP和UDP协议?什么是三次握手,四次挥手?

SYN SYN+ACK ack
FIN(F1). ACK,(F2) ,FIN,ACK(F4)

final 修饰的变量叫常量.常量必须初始化.初始化之后值不能被修改.

107.接口是什么? 为什么要使用接口而不是直接使用具体类?
接口用于定义API ,定义了类必须遵循的规则,.定义了一种抽象,因为客户端只使用接口,可以有多重实现,List接口,使用它可随机访问的ArrayList,也可以使用方便插入和删除的linkedlist. 接口中不允许写代码,以此来保证抽象.但是java8,可以在接口声明静态的默认方法,这种方法是具体的,

108.常见的异常类有哪些?
NullPointerException 空指针异常
ClassNotFoundException 指定类不存在
NumberFormatException 数字转换异常
FileNotFoundException 文件找不到异常
ClassCastException 类型转换异常
IndexOutOfBoundsException 数组下标越界异常
NoSuchMethodException 方法不存在异常
IOException IO异常
SocketException socket异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值