整理

八大基本数据类型

flot short double int long byt boolean char

 

string线程不安全

stringbuffer线程安全

stringbuilder线程不安全

String被final修饰不能被改变

string a = "1"; 直接赋值不会浪费空间

string a = new string("1");会开辟两块堆空间,其中一块会被垃圾回收,而且不能都进入常量池。

 

引用类型与基本类型

引用类型就是Interger Boolean等,可以为null值,提供了。valueOf(),praseInt等方法。

Integer a = 0;但是int a 不能等于null;这个就是我们常说的装箱拆箱的

 

final:被final修饰的类不能被继承,方法不能被重写,变量只初始化一次;常与static连用,一旦给static final赋值就不能改变可以通过类名访问

fianlly:与try catch连用,像在进行io流操作的时候需要在finally中关闭流,try catch中有return关键字,finally中的方法在return之前执行。但是有一种特殊情况不会执行finally里的 system.exit()

finalize:手动垃圾回收,建议不使用,因为有很大的不可预测性

 

error:系统出现不可恢复的错误

exception:分为可检查与不可检查两种;可检查就是说需要捕获或者抛出异常;不可检查就像我们经常遇到的空指针异常。

 

throws throw trycatch

throws是方法中可能会抛出异常的声明

throw主动抛出的异常

 

程序计数器:是指当前线程所执行字节码的行号指示器。分支、异常处理、线程恢复都需要依赖这个

堆:线程共享,是比较大的一个内存空间。主要存放对象实例以及数组

栈:线程私有。每个方法在执行的同时会创建一个栈帧用于存储局部变量表。每个方法从开始执行到完成,都相对象入栈到出栈的过程。局部变量表主要存放基本数据类型,对象引用类型

本地方法栈:与虚拟机栈类似。为虚拟机提供Navicat服务

方法区:线程共享。类信息,常量,静态变量

运行时常量池:用于存放编译时生成的字面量和符号引用。

 

垃圾回收:

标记-清除

会存在内存碎片,

复制

将内存分为两块,每次只用一块,将存活的对象复制到另一块内存中。

标记-整理

将存活的对象移到另一端,将标记可回收的对象移动到另一端

 

分代算法:

年轻代:一个eden区两个S区,比例时8:1:1。

当eden区满了,会将存活的对象放进s0中,清空eden;当s0和eden都满了,会将s0和eden存活的对象放入到s1,并清空s0和eden,这是s0和s1调换,保持s1时空;当eden s1 s0都满了会将存活的对象放入老年代,当老年代满了会触发full gc

 

CMS收集器基于标记清除算法

过程

初始标记

重新标记

并发标记

并发清除

优点:低停顿,并发收集

缺点:cpu资源敏感、产生大量碎片空间提前fullGC、无法处理浮动垃圾

 

G1收集器整理上看是基友标记-整理算法,实际上是复制算法

初始标记

并发标记

最终标记

筛选回收

优点:低停顿、高吞吐量、并行与并发

 

多线程:

实现Runnable、callable接口

二者区别是有无返回值

获取当前线程的方法thread.currcentThread

还可以继承其他的类

 

继承Threa类

不能继承其他的类

 

start()是实现真正上意义的多线程而run()只是thread中的一个普通方法

yeild()线程让步

wait()线程等待

notify()随机唤醒某个线程

notifyAll()唤醒全部线程

sleep()线程睡眠个固定时长

 

线程状态:

new

running

lock pool

time wait

wait

结束

 

 

类的加载

加载

将java文件编译成.class文件

验证

是否符合java语法规范

准备

将变量初始化

解析

将接口名字,变量名等指定到内存地址

初始化

将变量值赋值

卸载

被JVM回收,

 

类加载器:

bootstrop

extension

application

 

双亲委派

当一个类被加载的时候他会先从bootstrop的类加载器下找jre/lib/rt.jar;如果没找到又回到extension中找jre/lib/ext,如果还没找到再去application指定的classpath中找

 

servlet生命周期

创建servlet实例,调用init方法和destroy方法,servlet实例保存在内存中,调用它的service方法,为接收到请求服务

 

mybatis

1.读取核心配置文件mybatis-config.xml并返回InputStream流对象。

2.根据InputStream流对象解析出Configuration对象,然后创建SqlSessionFactory工厂对象

3.根据一系列属性从SqlSessionFactory工厂中创建SqlSession

4.从SqlSession中调用Executor执行数据库操作&&通过解析生成具体SQL指令

5.通过TypeHandler(数据库与java类型转换)对执行结果进行二次封装

6.提交与事务处理

 

 

 

redis能做什么?

1.缓存

2.数据库

3.订阅pub/sub

4.排序

5.去重

6.hash存储

7.消息队列

 

redis分布式锁:

先用sentx来争抢锁,在加expier;可以通过set指令吧sentx和expire合成一条指令

 

查找固定开头的key

scan指令无阻赛的取出key

 

使用redis做异步队列

rpush生产消息,lpop消费消息,blpop阻塞知道消息到来

pub/sub缺点:会丢失消息

延时队列的时候使用soredset

 

缓存哨兵,高可用,slave自动提升为master

cluster,扩展性,内存不足,使用cluster进行分片存储

 

redis缓存

雪崩:同一时间缓存大量失效

解决:过期策略和内存淘汰机制;失效时间错开;加锁;备份缓存

 

穿透:模拟用户请求数据库不存在的数据

解决:互斥锁排队;接口限流、熔断、降级;布隆过滤器bloomfilter(快速判断一个key是否存在,不存在就返回)

 

击穿:货物爆款,在大并发的情况下突然失效,直接访问数据库

解决:将一些比较火的商品设置为永久不过期的,加互斥锁

 

redis持久化:RDB和AOF同时使用,

AOF保证数据不会丢失,作为数据恢复的第一选择

RDB做不同程度的冷备份

 

 

https://www.jianshu.com/nb/6137390

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/Pirvate/blog/3100499

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值