摘要:一、相关依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </par
阅读全文
摘要:volatile 是一个类型修饰符。volatile 的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略 volatile 的特性 保证共享变量的可见性:使用volatile修饰的变量,任何线程对其进行操作都是在主内存中进行的,不会产生副本,从而保证共享变量的可见性。 防止局部指令重排序:
阅读全文
摘要:一、数据结构与算法——跳表 什么是跳表 跳表全称为跳跃列表,它允许快速查询,插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是通过维护一个多层次的链表,且每一层链表中的元素是前一层链表元素的子集(见右边的示意图)。一开始时,算法在最稀疏的层次进行搜
阅读全文
摘要:一、synchronized的特性 1.1 原子性 所谓原子性就是指一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。但是像i++、i+=1等操作字符就
阅读全文
摘要:一:ThreadPoolExecutor的重要参数corePoolSize:核心线程数核心线程会一直存活,及时没有任务需要执行当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭que
阅读全文
摘要:一、解决SpringBoot MongoDB插入文档默认生成_class字段问题 @Configuration public class SpringMongoConfig{ @Bean public MongoTemplate mongoTemplate() throws Exception {
阅读全文
摘要:1、什么是Redis? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Ke
阅读全文
摘要:1、java中会存在内存泄漏吗,请简单描述。 会。自己实现堆载的数据结构时有可能会出现内存泄露。 2、64 位 JVM 中,int 的长度是多数? Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位。意思就是说,在 32 位 和 64 位 的 Java 虚拟机中,int 类
阅读全文
摘要:一、相关依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> <version>2.0.1.RELEASE</vers
阅读全文
摘要:一、 SpringCloud 中 Feign 核心原理 如果不了解 SpringCloud 中 Feign 核心原理,不会真正的了解 SpringCloud 的性能优化和配置优化,也就不可能做到真正掌握 SpringCloud。 本章从Feign 远程调用的重要组件开始,图文并茂的介绍 Feigh
阅读全文
摘要:一、数据库配置 spring: datasource: name: soMysql type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver #基本属性 url: jdbc:mysql:
阅读全文
摘要:事务 事务实现应该是具备原子性、一致性、隔离性和持久性,简称 ACID。 原子性(Atomicity),可以理解为一个事务内的所有操作要么都执行,要么都不执行。 一致性(Consistency),可以理解为数据是满足完整性约束的,也就是不会存在中间状态的数据,比如你账上有400,我账上有100,你给
阅读全文
摘要:LinkedBlockingQueue是一个基于已链接节点的,范围任意的blocking queue 此队列按FIFO(先进先出)排序元素 新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素 链接队列的吞吐量通常要高于基于数组的对列(ArrayBlockingQueue),但是在大多数
阅读全文
摘要:LockSupport 的功能 LockSupport 是JDK 中提供的一个工具类,用来挂起和唤醒线程,这个类是 JDK 中所有同步类的基础,JDK 中 AQS 的实现也是基于此; LockSupport 类是通过操作 Unsafe 类来实现的,而线程在使用时,被挂起和唤醒都是因为这个类的两个方法
阅读全文
摘要:一、相关依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <
阅读全文
摘要:线程封闭:当访问共享的可变数据时,通常需要同步。一种避免同步的方式就是不共享数据。如果仅在单线程内访问数据,就不需要同步,这种技术称为线程封闭(thread confinement) 线程封闭技术一个常见的应用就是JDBC的Connection对象,JDBC规范并没有要求Connection对象必须
阅读全文
摘要:线程状态 NEW(初始化状态) 线程通过new初始化完成到调用start方法前都处于等待状态。 RUNNABLE(可执行状态) 线程执行start方法后就处于可以行状态。 BLOCKED(阻塞状态) notify方法被调用后线程被唤醒,但是这时notify的synchronized代码段并没有执行完
阅读全文
摘要:如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。 接下来讨论的收集器
阅读全文
摘要:Oracle 递归查询 在 Oracle 中是通过 start with connect by prior 语法来实现递归查询的。按照 prior 关键字在子节点端还是父节点端,以及是否包含当前查询的节点,共分为四种情况。 prior 在子节点端(向下递归) 第一种情况: start with 子节
阅读全文
摘要:从定时任务说起 自然界中定时任务无处不在,太阳每天东升西落,候鸟的迁徙,树木的年轮,人们每天按时上班,每个月按时发工资、交房租,四季轮换,潮涨潮落,等等,从某种意义上说,都可以认为是定时任务。大概很少有人想过,这些“定时”是怎样做到的。当然,计算机领域的同学们可能对此比较熟悉,毕竟工作中的定时任务也
阅读全文