写点什么

第 9 周学习总结

用户头像
饭桶
关注
发布于: 2020 年 11 月 23 日

数据库

连接器:建立连接,分配内存资源,开辟上下文。

语法解析器:根据 sql 构建抽象语法数。

语义分析与优化器:将葛总负载嵌套的 SQL 进行语义等价转化,等到有限几种关系代数计算结构,并利用所以等信息进一步进行优化。

执行计划


Row:需要处理的行数

Possible_keys:潜在可以利用的索引


prepareStatemnt 好处:

1,预先进行优化;

2,防止 SQL 注入攻击;因为语法树已经生成了,数据库不会再次生成数据树。

聚簇索引:数据库记录和所以存储在一起。

非聚簇索引:叶子节点记录的是 ID(聚簇索引)。根据非聚簇索引找到聚簇索引,这个操作叫做回表。


不要盲目添加索引,尤其在生产环境


删除不用的索引,避免不必要的增删开销


使用更小的数据类型创建索引


数据库如何实现事务的

首先它需要记录更新前的数据(UNDO 日志,便于回滚),然后需要记录更新后的数据(REDO 日志,便于重复执行操作)。最后有事务决定是需要提交呢,还是回滚。


JVM

JVM 组成架构:类加载器,运行期数据区,执行引擎

方法区:字节码(共享)。类字节码,静态变量,静态方法。广义来说,其实是堆中的一部分。

堆:对象实例(共享),每个 jvm 唯一一个堆空间。

程序计数寄存器:记录代码执行的位置。(线程独享)

Java 栈:每个线程独享的空间,比如局部变量。(线程独享)。对象的引用在栈里面。


不同的 classloader 加载同一个类,可以实现隔离。


jvm 堆里面不在被使用对象清理掉。


可达性分析算法识别垃圾对象。


回收方法:

清理、压缩、复制


方法内部创建的对象是安全的。


Threadlocal

(1)根据 thread 拿到 threadlocalmap;

(2)根据 threadlocal 对象拿到 threadlocalmap 中的 value。


合理使用线程池和对象池

1,复用线程或者对象资源,避免在程序的生命周期中创建和删除大量对象

2,池管理算法(记录那些对象是空闲的,那些对象正在使用)

3,对象内容清楚(threadlocal 的清空)


缩短对象生命周期,加速垃圾回收

减少对象驻留内存的时间

在使用常见对象,用完释放

创建对象的步骤(静态代码段-静态成员变量-父类构造函数-子类构造函数)


使用 I/O buffer 以及 NIO

延迟写与提前读策略

异步无阻塞 IO 通信(多路复用,用最少的线程来解决问题)


有限使用组合代替继承

减少对象耦合

避免太深的继承层次带来的对象创建性能损失


合理使用单例

无状态对象

线程安全


秒杀系统

单独实现功能。做隔离。

静态化

秒杀时间到的时候,才将购买 url 写入到 js 里面

多级阀门

好使的技术一刀解决问题,一刀封侯。

眼光要开阔,不要拿着。


用户头像

饭桶

关注

还未添加个人签名 2020.07.27 加入

还未添加个人简介

评论

发布
暂无评论
第9周学习总结