摘要:
1.最基本的单例模式 2.类加载时不初始化实例的模式 上述单例模式在类加载的时候,就会生成实例,可能造成空间浪费,如果需要修改成,在需要使用时才生成实例,则可修改代码如下: 然而,上述方案虽然在类加载时不会生成实例,但是存在线程安全问题,如果线程A在执行到第10行时,线程B也进入该代码块,恰好也执行 阅读全文
摘要:
1.传统的java数据库连接 在传统的开发中,如果要建立java程序和数据库的连接,通常采用JDBC或者Apache Commons DbUtils开发包来完成。他们分别有以下特点: JDBC: 优点:1.底层连接,效率高 缺点:需要手写sql语句,代码重复多,封装结果集繁琐 DbUtils: 优点 阅读全文
摘要:
1.JVM内存分配和回收 1.1 对象分配原则 在JVM系列1:内存区域中我们谈到,JVM堆中的内存划分如下: 从中可以看出堆内存分为新生代和老年代以及永久代(在JDK1.8中已经被MetaSpace元空间替代),其中新生代又分为Eden区和Survior1区和Survior2区; 堆中分配内存常见 阅读全文
摘要:
1.悲观锁和乐观锁的基本概念 悲观锁: 乐观锁: 2.乐观锁的一种实现方式:CAS 因为乐观锁的思想是:在通常情况下都认为不会产生并发冲突,因此在对数据进行提交更新的时候,会对将要提交更新的数据进行并发冲突检测、如果冲突存在,则会返回错误信息给用户,让用户决定处理方式。 基于乐观锁的思想,我们可以知 阅读全文
摘要:
1.对象创建过程: ①.类加载检查:当java虚拟机遇到一条new指令时,首先会去检查该指令的参数能否在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析、初始化过,如果没有,则必须先执行相应的类加载过程。 ②.分配内存:类加载检查完成后,虚拟机将为新对象分配内存空间,且 阅读全文
摘要:
1.JVM运行区域内存划分 2.各内存区域详细介绍 2.1 程序计数器 程序计数器是一块很小的内存区域,它作为前线程所执行的字节码的行号指示器,指向当前class文件的执行代码的行数。字节码解释器工作时,通过改变程序计数器的数值,来选取下一条将要执行的字节码指令。分支、循环、跳转、异常处理、线程恢复 阅读全文
摘要:
1.Synchronized使用范围: 同步普通方法:锁的是当前对象 同步普通方法:锁的是当前对象 同步静态方法:锁的是当前class(类)对象 同步静态方法:锁的是当前class(类)对象 同步代码块:锁的是()中的对象,synchronized(this)代码块也是锁定当前对象 同步代码块:锁的 阅读全文
摘要:
1.Lombok的概念 Lombok项目是一种自动接通你的编辑器和构建工具的一个Java库,通过使用简单的注解符号,可以完成javaBean的get、set、toString,各种构造函数的生成,甚至可以完成日志打印。 2.Lombok的优势 使用Lombok,可以大大减少代码冗余,减少代码量,让代 阅读全文
摘要:
1.下载redis服务器端程序; 在redis.io官网完成服务器端程序下载;可下载安装版或解压版,此处我下载的是解压版,下载完成后解压。 2.配置redis密码,开启redis服务端 在redis.windows.conf中搜索requirepass,找到#requirepass 行,在下面新建一 阅读全文
摘要:
简而言之: 删除效果及速度:Drop > truncate > delete 原因: delete,逐行删除,且用日志逐行记录用于回滚,会执行删除触发器; > 只删除记录,不会释放记录和表占的空间。 truncate逐行删除,在日志中逐行记录,无法回滚。不执行删除触发器 > 删除记录,会释放空间到默 阅读全文