Architecture Phase1 Week9:Summarize
数据库得运行原理得讲解,如何避免 SQL 注入,需要了解其执行原理。
PrepareStatement 会预先提交带占位符的 SQL 到数据库进行预处理,提前生成执行计划,当给定占位符参数,真正执行 SQL 的时候,执行引擎可以直接执行,效率更好一点。PrepareStatement 可以防止 SQL 注入攻击。•select from users where username = 'Frank’;•Frank';droptable users;--•select from users where username = 'Frank';droptable users;--’;•select * from users where username = ?
JVM 虚拟机得讲解,方法区,堆区,JAVA 栈,程序计数器,执行引擎。
执行得流程
自定义类得加载器去实现不同版本得同一类得加载共存。
JVM 得垃圾回收算法,通过分代方法进行分区新生代(Eden 区,From 区,To 区),老年代,Edian 区通过复制算法复制到 From 区。如果 From 区满了,就复制到 To 区,拷贝几次后发现比较稳定就拷贝到老年代。最后垃圾回收会在新生带回收,还有一种全局回收。包含所有区。
并行垃圾回收器,分为四个阶段,分为,初始化标记,并发标记,重标记(会暂停所有线程),并发清理。
最新得版本使用 G1 垃圾回收机制。-XX:MaxGCPauseMillis,可以动态调整垃圾回收时间
Java 启动参数
标准参数,所有的 JVM 实现都必须实现这些参数的功能,而且向后兼容
•运行模式-server,-client
•类加载路径-cp,-classpath
•运行调试–verbose•系统变量–D 非标准参数,默认 jvm 实现这些参数,但不保证所有 JVM 实现都实现,且不保证向后兼容
•-Xms 初始堆大小
•-Xmx 最大堆大小
•-Xmn 新生代大小
•-Xss 线程堆栈大小非 Stable 参数,此类参数各个 jvm 实现会有所不同,将来可能会随时取消
•-XX:-UseConcMarkSweepGC 启用 CMS 垃圾回收
Java 多线程使用,需要合理并谨慎得使用多线程。注意线程得安全,方法局部变量是线程安全得,如果多个线程可以同时更新同一对象得同一成员,那就不是线程安全得。
启动线程数=【任务执行时间/(任务执行时间-IO 等待时间)】*CPU 内核数
竞态条件与临界区需要用锁来控制,保证数据一致性
ThreadLocal,通过这样得方式获得私有得变量。
通过各种异步得框架来合理架构自己得系统。加速开发及运行稳定性。
秒杀系统得设计方案,主要利用 CDN 来解决流量问题,再利用动态更新商品 id 得 js 来限制激活,通过计数器控制秒杀连接数。
版权声明: 本文为 InfoQ 作者【phylony-lu】的原创文章。
原文链接:【http://xie.infoq.cn/article/f9ecf4c0185c2a057ac134eaa】。文章转载请联系作者。
评论