摘要: 常用的缓存处理流程: 客户端发起请求,服务器端从缓存获取,获取到则返回,如果没有则从数据库获取,然后存放到缓存,最后返回结果,如果依旧没有则返回空。 缓存穿透: 缓存和数据库中均没有数据,但是客户端不断发起请求,会导致这些请求直接打到数据库上,导致数据压力增高。 可以设置空置,如果数据库获取不到的缓 阅读全文
posted @ 2018-07-05 14:20 Over_Watch 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 类加载时机 类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载7个步骤。 其中验证、准备、解析3个部分统称为连接。 加载、验证、准备、初始化、卸载5个阶段的顺序是固定的,类的加载过程严格按照整个顺序执行,而解析阶段不一定:在有些时候可以在初 阅读全文
posted @ 2018-06-27 16:44 Over_Watch 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 垃圾回收需要关注的问题:哪些内存需要回收?什么时候回收?如何回收? 判断内存是否需要回收: 1、引用计数法:缺点:循环引用,两个对象互相引用,永远无法回收,即便已经应该回收了。 2、可达性分析算法:通过一系列成为GC Roots的对象作为起始点,从这些节点开始向下搜索,所有所走过的路径称为引用链,当 阅读全文
posted @ 2018-06-27 10:43 Over_Watch 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。(图片截取自《深入理解jvm虚拟机》) 程序计数器(PC):一块较小的内存空间,用于记录当前线程执行的自己码的位置。在JVM的概念模型中,程序的分支,循环,跳转,线程恢复等都需要使用P 阅读全文
posted @ 2018-06-26 14:07 Over_Watch 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 线程安全问题主要发生在线程共享的区域,例如实例对象等。 synchronized关键字可以保证临界区的访问线程安全和变量的可见性。 synchronized的对象监视器主要有Object和Class。 多个线程访问同一个对象监视器时会同步执行。 synchronized同步非静态方法、非静态代码块, 阅读全文
posted @ 2018-06-25 09:29 Over_Watch 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 一个程序的执行代表一个进程,线程是一个进程里面的独立运行的子任务。 线程各个状态,图片截取自《Java多线程编程核心技术》。 (start顺序不代表运行启动顺序,从上图可以看出start后线程只是编程了就绪状态,具体执行顺序要看cpu分配) 线程的两种实现方式: 继承Thread类: 注意对于同一个 阅读全文
posted @ 2018-06-22 14:24 Over_Watch 阅读(912) 评论(0) 推荐(0) 编辑
摘要: MyBatis中的#{}和${}de 区别: #{}属于先生成sql,经过预编译,#{}的参数会被解析成参数标记符号?,再取值。 ${}解析sql的时候会首先获取参数值,然后拼接到sql里面。 总结: 参数是表明或者字段名用${},例如order by ${column}等。 #{}可以防止sql注 阅读全文
posted @ 2018-06-22 13:08 Over_Watch 阅读(171) 评论(0) 推荐(0) 编辑
摘要: execute和submit的实现方法对比 阅读全文
posted @ 2018-06-19 14:34 Over_Watch 阅读(3325) 评论(0) 推荐(2) 编辑
摘要: 初识git,仅列举目前项目用到的几个指令。 阅读全文
posted @ 2018-06-19 11:11 Over_Watch 阅读(179) 评论(0) 推荐(0) 编辑
摘要: Not in(a, null) 会导致获取所有非空数据而非not in子集合数据,因为not in(a, null)相当于not($=a or $=null)或者$=a and $=null导致最终结果集合错误。使用时要注意子查询集合数据去除null。 阅读全文
posted @ 2018-06-19 10:39 Over_Watch 阅读(1092) 评论(0) 推荐(0) 编辑