JAVASE总结

JAVASE总结,第1张

JAVASE总结

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/i模式,.则所有在信道上发布的消息都会分配一个唯一的ID
ack确认发送, nack未确认
实现/confirm/iCallback接口,只确认是否正确到交换机,成功到达则回调
实现ReturnCallback接口, 消息失败返回时回调

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5072944.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存