写点什么

架构师训练营第九周学习笔记

发布于: 2020 年 11 月 23 日

数据库基本原理

使用 PreparedStatement 必要性:

  • 复用

  • 防止 SQL 注入

聚簇索引和非聚簇索引:

  • 聚簇索引:聚簇索引的数据库记录和索引存储在一起。MySQL 数据库的主键就是聚簇索引,主键 ID 和所在的记录行存储在一个 B+树中。

  • 非聚簇索引:非聚簇索引在叶子节点记录的就不是数据行记录,而是聚簇索引,也就是主键。通过非聚簇索引找到主键索引,再通过主键索引找到行记录的过程也被称作回表。

使用合理的索引:

  • 不要建大量索引:每个索引都是一棵树。有多个索引时,执行 ALTER 操作,需要更新每棵树,耗时长,在此期间所有的增删改都会阻塞。对应用而已,由于连接不能释放,所以查询也会被阻塞。

  • 用更小的数据类型建立索引

数据库事务:

事务特性 ACID:

  • 原子性(Atomicity):事务要么全部完成,要么全部取消。如果事务崩溃,状态回到事

务之前(事务回滚)。

  • 隔离性(Isolation):如果 2 个事务 T1 和 T2 同时运行,事务 T1 和 T2 最终的结果是相同

的,不管 T1 和 T2 谁先结束,隔离性主要依靠锁实现。

  • 持久性(Durability):一旦事务提交,不管发生什么(崩溃或者出错),数据要保存在数

据库中。

  • 一致性(Consistency):只有合法的数据(依照关系约束和函数约束)才能写入数据库。


事务日志:

如果全部记录都更新成功,那么事务正常结束,如果过程中某条记录更新失败,那么整

个事务全部回滚,已经更新的记录根据事务日志中记录的数据进行恢复,这样全部数据

都恢复到事务提交前的状态,仍然保持数据一致性。

  • UNDO:取消本次操作的方法,按照此方法回滚

  • REDO:重复本次操作的方法

JVM 虚拟机架构原理

  • 类加载器

  • Java 栈区:程序运行的时候,实际上是以线程为单位运行的,当 JVM 进入启动类的 main 方法的时候,就会为应用程序创建一个主线程,main 方法里的代码就会被这个主线程执行,每个线程有自己的 Java 栈,栈里存放着方法运行期的局部变量

  • 方法区:主要存放从磁盘加载进来的类字节码

  • 堆:程序运行过程中创建的类实例则存放在堆里

  • 程序计数寄存器:当前线程执行到哪一行字节码指令,这个信息则被存放在程序计数寄存器

JVM 垃圾回收性能分析

参考本周的命题作业


Java 代码优化技巧与原理

允许被多个线程安全执行的代码称作线程安全的代码。

方法局部变量

  • 局部变量存储在线程自己的栈中。也就是说,局部变量永远也不会被多个线程共享。所以, 基础类型的局部变量是线程安全的。

方法局部的对象引用

  • 如果在某个方法中创建的对象不会逃逸出该方法,那么它就是线程安全的。

对象成员变量

  • 对象成员存储在堆上。如果两个线程同时更新同一个对象的同一个成员,那这个代码就不是 线程安全的。


ThreadLocal:

ThreadLocal 类是全局共享的,它为每个线程都分配了一个 map。通过给当前 Thread 绑定一个 map,用于存放当前线程相关的信息。

秒杀系统要点

参考本周的命题作业


发布于: 2020 年 11 月 23 日阅读数: 27
用户头像

还未添加个人签名 2018.07.26 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第九周学习笔记