11 2019 档案
摘要:一、什么是阻塞队列 阻塞队列,顾名思义,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如图所示: 当阻塞队列是空时,从队列中获取元素的操作将会被阻塞。 当阻塞队列是满时,往队列中添加元素的操作将会被阻塞。 同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他线程从队列中移
阅读全文
摘要:一、CountDownLatch1.1 概述 让一些线程阻塞直到另外一些完成后才被唤醒。 该类主要有两个方法,当一个或多个线程调用 await 方法时,调用线程会被阻塞。其他线程调用 countDown方法计数器减1(调用countDown方法时线程不会阻塞),当计数器的值变为0,因调用 await
阅读全文
摘要:一、公平锁与非公平锁1.1 概述 公平锁:是指多个线程按照申请锁的顺序来获取锁。 非公平锁:是指在多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情况下,有可能造成优先级反转或者饥饿现象。饥饿现象就是低优先级的线程可能一直拿不到锁,而一直处于等待状态
阅读全文
摘要:一、List1.1 模拟多线程环境 多线程环境下,会抛出 java.util.ConcurrentModificationException 异常 1 public static void listNotSafe() { 2 List<String> list = new CopyOnWriteAr
阅读全文
摘要:一、CAS 是什么? CAS(Compare And Swap),比较并交换,它是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更新为新的值,这个过程是原子的。 1 public class CASDemo { 2 public static void main(Strin
阅读全文
摘要:一、什么是 volatile ? volatile 是 Java 中的一个关键字,Java 虚拟机提供的轻量级同步机制。二、JMM(Java Memory Model) 为了更好的理解 volatile 关键字,应该了解了解 JMM。 JMM(Java内存模型Java Memory Model,简称
阅读全文
摘要:一、当是 POST 请求时:在 web.xml 中添加字符编码过滤器: 1 <filter> 2 <filter-name>characterEncodingFilter</filter-name> 3 <filter-class>org.springframework.web.filter.Cha
阅读全文
摘要:一、标记 - 清除算法(Mark - Sweep) 标记 - 清除算法分为“标记”和“清除”两个阶段: 首先标记出需要回收的对象,在标记完成后统一回收所有被标记的对象,它的标记过程也就是判断对象是不是垃圾对象,可以参考之前的文章 -- 判断对象是否存活https://www.cnblogs.com/
阅读全文
摘要:一、异常如下控制台日志:严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.sp
阅读全文
摘要:一、引用的定义 JDK 1.2 之前,Java 中引用的定义很传统:如果 reference 类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。这种定义很纯粹,但太过狭隘,一个对象在这种定义下只有被引用和没有被引用两种状态,对于一些“食之无味,弃之可惜”的对象显得无能
阅读全文
摘要:一、Java 堆 Java 堆(Heap)是 Java 虚拟机所管理的内存中最大的一块。Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。这个内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。但随着 JIT 编译器的发展与逃逸技术逐渐成熟,栈上分配、标量替换优化技
阅读全文
摘要:一、程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号计数器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码
阅读全文
摘要:1. 日志报错: 1 Table ’test.news_table‘ doesn’t exist。2. 解决办法: MySQL数据库方言不能使用MySQLInnoDBDialect,应使用MySQL5InnoDBDialect。 1 <!-- 配置Hibernate所使用的数据库方言 --> 2 <
阅读全文
摘要:一、问题描述: 使用 Ajax 直接发送 PUT 请求,但 Spring MVC 封装的对象中,除过 URI 中带有的 id 字段被成功封装,请求体中的数据没有被封装到对象中。 通过测试,前端传来的请求体中有数据;通过 HttpServletRequest 对象,使用 request.getPara
阅读全文
摘要:一、 方式一:将 POST 请求转化为相应的 PUT 和 DELETE 请求 1. 在 Web.xml 中添加如下配置:用于将 POST 请求转化为相应的 PUT 和 DELETE 请求。 1 <filter> 2 <filter-name>hiddenHttpMethodFilter</filte
阅读全文
摘要:1. 原因分析:按钮是发送 Ajax 请求,成功请求到数据后,使用 JQuery 动态生成的。Ajax 请求是异步刷新机制,不会等上面的代码执行完。因此给这种类型的按钮绑定点击事件时,按钮还没有被创建出,那么,click事件自然不会绑定到按钮上。 2. 解决办法: ① 在按钮创建的时候就绑定事件。
阅读全文
摘要:原文地址:https://www.jianshu.com/p/e25983256448 可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提锁对象得是同一个对象或者class),不会因为之前已经获取过还没释放而阻塞。Java中ReentrantLock
阅读全文
摘要:原因:习惯性的在 “|” 符号两边加了空格,正则表达式中不能出现多余的空格 1. 正确的正则表达式: 1 var regName = /(^[a-zA-Z0-9_-]{6,16}$) | (^[\u2E80-\u9FFF]{2,5})/; 2. 错误的正则表达式: 1 var regName = /
阅读全文

浙公网安备 33010602011771号