导图社区 JAVA总结
JAVA总结
Java基础知识
概念
面向对象四大特性
1.封装、2继承、3多态、4抽象
java基础数据类型
byte、short、int、long、float、double、char、boolean
重写与重载
重载:同类多方法、重写:重写父类方法
访问修饰符
1.public 2.protected(受保护的类)3.default 4.private
类中初始化顺序
(静态变量>父类优先)静态变量>静态代码块>变量>代码块>构造函数
接口和抽象类异同
相同点:1.不能被实例化 2.接口和抽象类的实现类中 方法才能被实例化。
不同点:1.接口不能实现方法,抽象反之。 2.接口关键字和抽象类不同。 3.可以继承多个接口,抽象反之。
final、finally 和 finalize区别
1.final表示不可变。2.finally异常最终执行。3.finalize是object类回收对象方法。
String、Stringbuffer、stringbuilder区别
1.string不可变 2.stringbuffer线程安全 3.stringbuilder效率高
==与equals的区别
谈一下是否重写了,==:是否同一块存储空间 equals值相等
获取class对象三种方法:1.class.forName 2.实例对象.getClass() 3.类名.class
object常用方法
1.hashcode、2.equals、3.toStirng 4.clone
常用内部类
成员内部类、局部内部类、匿名内部类、静态内部类
创建线程3种方式
1继承Thread类 2.Runnable接口 3.通过Callable接口实现cell()方法
线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。notify唤醒线程
线程安全体现:原子性、可见性、有序性
集合
ArrayList:容量可变的非线程安全,随机访问块,扩容时复制到新数组。 Linklist:双项链表,插入和删除快,访问元素慢。 hashset:hashset通过hashMap实现,先比较hashcode,在比较equals LinkedHashSet:双向链表插入顺序。 TreeSet:TreeMap实现的,底层是红黑树,插入后依然有序。 hashMap:键值对,哈希冲突,被放到同一个链表。 TreeMap:红黑树实现
特殊集合
HashTable: 哈希表的线程安全版,效率低 ConcurrentHashMap:哈希表的线程安全版,效率高,用于替代HashTable Vector:线程安全版Arraylist Stack:线程安全版栈 BlockingQueue及其子类:线程安全版队列
IO流:
BIO、AIO、NIO区别
BIO:单线程堵塞、NIO:多线程非堵塞。AIO:异步完成非堵塞
jsp
jsp九大内置对象request、response、pageContext、session、application、out、config、page、exception
JSP中的四种作用域page、request、session和application
jdbc六部连接
1注册驱动 2.获取数据库连接 3.获取操作数据库对象 4.执行sql数据 5.处理结果集 6.释放资源
JVM
内存模型
1.线程私有:程序计数器、Java 虚拟机栈、本地方法栈。 2.线程共享:堆、方法区。
栈异常类型
StackOverflowError: 栈溢出。 OutOfMemoryError: 虚拟机占用内存。
类加载器
类加载过程:1.class文件加载到内存里 2.把class解析放到JRE
堆
-Xms1024m 设置:最小。-Xmx1024m:最大。
调优参数
-Xms 初始堆大小 -Xmx 最大堆大小 -XX:NewSize 年轻代大小 -XX:MaxNewSize 年轻代最大值 -XX:PermSize 永生代初始值 -XX:MaxPermSize 永生代最大值 -XX:NewRatio 新生代与老年代的比例
区域:
新生区: from区和to区 老年区: 永久区 元空间
GC调用
轻GC
重GC
内存分析器:JProfilerl
数据库
数据库三大范式
第一范式:字段原子性 第二范式:字段依赖主键 第三范式:不存在间接依赖
乐观锁和悲观锁、自旋锁
乐观锁不加锁,数据提交时验证数据是否冲突。 悲观锁:修改数据是在修改数据钱锁住,只有释放后才能数据进行加锁。 自旋锁:当锁已经被其他线程绑定,该线程会循环等待。
InnoDB和MyISAM引擎区别
InnoDB:支持事务,支持表级锁和行级锁,支持外键。 MyISAM:MyISAM不支持事务,Myisam支持表级锁,不支持行级 锁,表不支持外键
事务特性
原子性、一致性、隔离性、持久性
#和$区别
#给mysql加了双引号,#会预编译替换值
索引类型:主键索引、唯一索引、普通索引、全文索引
脏读、幻度、不可重复读区别
1.脏读:事务在读取时读取到另一个未修改数据 2.幻度:读取同一条查询语句时候,值数量不一致 3.不可重复读:读取同一个结果,结果不一致
varchar和char
varchar可变、 varchar长度大、char速度快,浪费空间
explain查询是否命中索引
优化
多表查询 on尽量命中索引 检查是否命中索引。有必要使用联合索引。 limit分页的时候使用覆盖索引(小表套大表)
INSERT INTO 表 (位置,值) update 表 set(老值 = 新值) DELETE FROM 表 where
框架
Spring
aop
ioc
常用注解
controller、RestController、component、Repositiory(dao)、Service @RequsetMapping、@Autowired @Resource @PathVariable(get方法上的),requestParam
开启事物
1.通过模板类开启事务,再去调用 2.xml配置文件配置TransactionManager的形式启动事务,通过注解方式@Transactional,
mybatis
概念
高级映射的持久层框架
实现
MapperScan进行@mapper扫描
原理
1.解析配置文件 2.根据配置文件创建会话工厂 3、在创建会话 4.通过执行器阅读xml进行操作数据库
SpringMVC
model、View、Controller
流程
1)用户发送请求至前端控制器DispatcherServlet。 2)DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3)处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 4)DispatcherServlet调用HandlerAdapter处理器适配器。 5)HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。 6)Controller执行完成返回ModelAndView。
springboot
流程
1.springboot启动类上有一个@SpringApplication 2.上面有一个@ComponenScan包扫描路径 3.先run java项目>web项目>异步项目 4.加载缓存放到集合 5.去启动main方法。 6.启动springboot直接args,通过反射去找到类初始信息
异步注解@Async
Redis
常见五大数据类型
1、string
命令一
Append 【key】【val】往已有的键值对里面追加字符串 如果没有值就会给val set val
Strlen 【key】获取当前键值对长度
incr 【key】给当前键值对加一
IncrBy 【key】【val】给当前键值对加【val】
decr 【key】给当前字符串减一
decrBy 【key】 给当签键值对减【val】
命令二
GetRange 【key】【start】【end】获取val某个范围的值
SetRange 【key】【offset】【val】将val固定的值替换掉
setex【key】【time】【val】 设置过期时间
setnx 【key】【val】 不存在过期时间的处理
mset 【key】【val】【key val 。。。】设置多个值,通过空格切分
命令三
对象 set val {key val。。。}存储一个对象,里面保存多个key val
getset 【key】【val】存在着返回值,不存在则返回null在存储
2、List
Lpush 【key】【val】给list添加值
LRange【key】【start】【end】从LIst里面取值,遵循栈的行为
Lpop 【key】移除左边的第一个
Lindex 【key】【index】获取【key】下表中的【index】的值
Llen 【key】返回列表长度
Lrem 【key】【count】【val】移除list集合指定个数的val
Ltrim 【key】【start】【end】截断指定的位置的值
RpopLpush 【key】【new key】移除一个值到放到新的key中
lset 【key】【index】【val】只能更新值,不能添加
LInsert 【key】【before|after】【val】【new val】往key的【val】前后插入值
3、set
sadd 【key】 【val】添加set集合元素
smembers【key】查看元素
sismember【key】【val】查看元素是否存在
scard 【key】获取set集合中的个数
srandMember【key】随机取出来一个值
smove 【key】【new key】 移动该元素去新的地方
SdIff 【one-key】【second-key】返回第一个集合和第二个集合差异的地方
Sinter【key】【key】取两个之间的交集
sunion【key】【key】取两者之间的并集
4、Hash(哈希)-非常适合存储对象: 格式 【key】【filed】【val】
hset 【key】【field】【val】给hash添加对象
hmset 【key】【filed】【val】。。。key添加多个对象
hget 【key】【filde】【val】在hash里面取出对象
5.Zset有序集合
zadd 【key】【index】【val】。。。给Zset有序集合添加多个值
ZRangeByScore 【key】【min】【max】按照从小到大的【val】进行排序
后面可选(withscores)显示key
ZrevRange 【key】【start】【end】【withScores】从大到小排序
zrem【key】【val】移除某一个值
zcard 【key】获取有序集合中的个数
zcount获取指定区间的成员数量
事务命令
multi 开启事务
watch【key】开启乐观锁
unwatch关闭乐观锁
数据指令
key类型指令
set和get(存储取值没啥好说的)
Exists XXX(是否存在)
move (移除指令)
key * 查询所有key
Expire 【key】【Time】 过期时间
ttl 【key】 查看过期剩余时间
SET db_number 【key】切换不同的redis库
redis主从复制
info replication #查看当前库的一些基本信息
SLAVEOF 【host】 【port】连接主机的redis
分布式缓存
缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
git
git init初始化 git diff查看文档差异 git log日志 git reset回退 git branch 查看分支 git checkout 切换分支 git
springcloud
Eureka注册中心
概念:服务提供者和服务的消费者,拥有消费者,和供应者
主要功能:服务续约(心跳机制)erueka的instance设置心跳检查时间和服务失效时 服务注册:将自身信息注册进入注册中心。 服务中心客户端:Eureka Client 会拉取、更新和缓存 Eureka Server 中的信息。
启动流程:1.引入依赖 2.拉取配置 3.在mian上加上@EnableDiscoveryClient 4.访问注册中心获取服务。
Zurl网关
启动流程:1.引入依赖 2.添加配置 3.mian上添加@EnableZuulProxy
主要功能:拦截器,没有访问权限就给拦截了(token类型就给拦截了) 负载均衡:集成了Ribbon负载均衡 熔断:集成了Hysitix熔断机制。
Hysitix熔断
启动流程:1.引入依赖 2.拉取配置 3.在main添加@HystixCommand(fallbackmethod=‘方法名’)
docker
docker命令
docker version 查看docker版本 docker info 查看docker基本信息 docker --help #万能命令 docker images 查看所有的本地的主机镜像 docker search 搜索镜像 docker --help #万能命令 docker images 查看所有的本地的主机镜像 docker rmi -f [val] 删除指定镜像 docker search 搜索镜像 docker run -it 【容器名】 bin/bash 默认启动项目
docker ps命令(所有的命令可以叠加) exit #退出当前容器 【ctrl】+【p】+【q】 # 容器不停止退出当前容器 docker rm 容器id #删除指定容器 docker ps -a -q|xargs docker rm #删除所有的容器 docker start 【Id】 #启动容器 docker restart 【Id】 #重启容器 docker stop 【Id】 #停止当前正在运行的容器 docker kill 【id】 #强制删除正在运行的容器
docker run 【可选参数】 image
参数说明
--name=“name”容器名字 ,用逗号来区分容器
--d 后台方式运行
--it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080 -p ip:主机端口:容器端口 -p 主机 端口 :容器端口 -p 容器端口
-P 随机指定端口
linux
基本命令
ls查看 cd切换目录 mkdir 可以创建(多级)目录 rm删除目录 mv移动目录
touch创建文件 cp复制目录
设计模式