写点什么

架构师训练营第九周总结

用户头像
邓昀垚
关注
发布于: 2020 年 11 月 22 日

数据库优化

Why Using PreparedStatement

  1. 效率:预编译,预先生成语法树和执行计划,所以执行效率更高

  2. 安全:由于预先生成了执行计划,可以有效防止SQL注入

数据库存储

数据库索引的存储结构为B+树,分为聚簇索引和非聚簇索引

聚簇索引:数据库记录在叶子节点上的B+树

非局促索引:数据库记录不在叶子节点上的B+树,叶子节点上为聚簇索引的地址或记录的主键

在非聚簇索引上找到记录的主键值,再去聚簇索引上根据主键找到对应对的记录,叫回表。

数据库事务

通过UNDO和REDO日志实现数据库的原子性

JVM

内存模型

堆、栈、程序计数器、方法区

垃圾回收

垃圾标记算法:可达性分析

垃圾清理算法:清理、复制、压缩

垃圾回收器

串行回收器:只用一条线程执行垃圾收集工作,它在收集的同时,所有的用户线程必须暂停

并行回收器:串行回收器的多线程版本

CMS:高并发、低停顿,追求最短GC回收停顿时间,cpu占用比较高,响应时间快,停顿时间短,多核cpu 追求高响应时间的选择

G1:G1通过在垃圾回收领域应用并行化的策略,把几块大内存块的回收问题,变成了几百块小内存的回收问题,使得回收算法可以高度并行化

启动参数

标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;

非标准参数(-X),指的是JVM底层的一些配置参数,这些参数在一般开发中默认即可,不需要任何配置。

非Stable参数(-XX),这类参数在jvm中是不稳定的,不适合日常使用的,后续也是可能会在没有通知的情况下就直接取消了,需要慎重使用。

        -Xms:设置jvm内存的初始大小

        -Xmx:设置jvm内存的最大值

        -Xmn:设置新域的大小(这个似乎只对 jdk1.4来说是有效的,后来就废弃了)

        -Xss:设置每个线程的堆栈大小(也就是说,在相同物理内存下,减小这个值能生成更多的线程)

        -XX:NewRatio :设置新域与旧域之比,如-XX:NewRatio = 4就表示新域与旧域之比为1:4

        -XX:NewSize:设置新域的初始值

        -XX:MaxNewSize :设置新域的最大值

        -XX:MaxPermSize:设置永久域的最大值

        -XX:SurvivorRatio=n:设置新域中Eden区与两个Survivor区的比值。(Eden区主要是用来存放新生的对象,而两个Survivor区则用来存放每次垃圾回收后存活下来的对象)

诊断工具

基本工具:jps、jstat、jmap、jstack

集成工具:jconsole、jvisualvm

代码优化

多线程

启动线程数=(任务执行时间/(任务执行时间-IO阻塞时间))*CPU内核数

池化

对象池、连接池、线程池

池管理算法

缩短对象生命周期

使用NIO

优先使用组合代替继承

合理使用单例

秒杀系统设计

秒杀系统需要独立设计和部署避免影响原有系统的正常运行

页面优化和静态化

将动态页面静态化

图片压缩(雪碧图)、CSS、JS压缩

避免发送Cookies

并发控制

三个环节:进入秒杀页面→填写订单→提交订单,通过阀门将每一个环节只放一部分请求进入秒杀系统

流程简化

砍掉不需要的分支流程,尽量减少数据库的直接访问

秒杀器预防

详情页的URL随机生成,确保用户不能提前进入详情页

系统优化

反向代理参数优化、JVM参数优化、中间件和基础组件采用性能更高的版本



用户头像

邓昀垚

关注

还未添加个人签名 2018.06.04 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第九周总结