第 9 周学习总结
数据库
连接器:建立连接,分配内存资源,开辟上下文。
语法解析器:根据 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 里面
多级阀门
好使的技术一刀解决问题,一刀封侯。
眼光要开阔,不要拿着。
评论