03 2022 档案
摘要:一.synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性。那么为什么会出现Lock呢? 如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取
阅读全文
摘要:一、结论 Executor, ExecutorService 都是接口,ExecutorService继承于Executor, Executors是工具类,他提供对ThreadPoolExecutor的封装产生ExecutorService的具体实现类。 二、Executor和ExecutorSer
阅读全文
摘要:一、并发容器的由来 在Java并发编程中,经常听到Java集合类,同步容器、并发容器,那么他们有哪些具体分类,以及各自之间的区别和优劣呢? 只有把这些梳理清楚了,你才能真正掌握在高并发的环境下,正确使用好并发容器,我们先从Java集合类,同步容器谈起。 二、什么是同步容器 Java的集合容器框架中,
阅读全文
摘要:https://blog.csdn.net/czp11210/article/details/51449599
阅读全文
摘要:一、ROW_NUMBER () --语法形式: ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2) --解释: 根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的) 举例说明: selec
阅读全文
摘要:一、Spring 中 Aop 的实现 如果代理对象有接口,就用 JDK 动态代理。JDK 动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法时,会先调用实现了 InvokeHandler 接口的 invoke() 方法,来实现业务增强 如果代理对象没有接口,那么就直接使用 Cglib
阅读全文
摘要:代理模式和装饰器模式很像,这里用【到咖啡馆喝咖啡】作例子来讲解。 基础实现 定义一个咖啡的接口。 public interface Coffee { /** * 打印当前咖啡里有什么 */ void printMaterial(); } 定义一个苦咖啡的实现。 public class Bitter
阅读全文
摘要:适配器模式说明:http://c.biancheng.net/view/1361.html springMVC中如何使用的适配器模式:https://www.cnblogs.com/lyh233/p/16004798.html
阅读全文
摘要:1、源码解析说明 SpringMVC 中的 HandlerAdapter, 就使用了适配器模式; 下面我们通过源码来分析SpringMVC 中的 HandlerAdapter是如何使用适配器模式的: //前端控制器DispatcherServlet类 public class DispatcherS
阅读全文
摘要:0、背景 建造模式(Builder模式) 假如有一个需求:盖房子,盖房子过程是一致的:打桩、砌墙、封顶。但是房子是各式各样的,最后盖出来的房子可能是高楼或别墅。 根据直接的思路,不用设计模式思想,我们也许会: 写一个 CommonHouse 抽象类,然后里面规定了打桩、砌墙、封顶三个方法; 让不同房
阅读全文
摘要:一、 4个隔离级别 (1)读未提交:read uncommitted (2)读已提交:read committed (3)可重复读:repeatable read (4)串行化:serializable 脏读不可重复读幻读 Read uncommitted √ √ √ Read committed
阅读全文
摘要:先祭一张图,可以思考一下为什么? 一、介绍 equals() 的作用是用来判断两个对象是否相等。 hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。 二、关系 我们以“类的用途”来将“hashCode() 和 eq
阅读全文
摘要:一、ThreadLocal简介 多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。 ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线程访问出现线程不安
阅读全文
摘要:答案: controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。正因为单例所以不是线程安全的。 简单的验证 @Controller public class ScopeTestController { private int num = 0; @RequestMappin
阅读全文
摘要:一、前言 有时我们需要对类按照类中的某一个属性(或者多个属性)来对类的对象进行排序,有两种方法可以实现, 一种方法是类实现Comparable<T>接口,然后调用Collections.sort(List)方法进行排序, 另一种方法是类不实现Comparable<T>接口,而在排序时使用Collec
阅读全文
摘要:mybatis 底层是基于 JDK 动态代理来实现 mapper 动态代理的,所以我们先来看看 JDK 动态代理。 1、回顾JDK 动态代理 1.1、定义接口 & 实现类 public interface Subject { int add(int x, int y); } public class
阅读全文
摘要:1. 前言 HashMap是基于底层叫Entry[]数组实现的一种哈希表 现在稍微深入一点,讲解HashMap里面的一个点:存取(put/get)数据的时候,Entry数组index下标的计算。 2. hashCode,hash与index的概念 a).put/get一个元素的时候,会调用该元素的h
阅读全文
摘要:一、什么是代理? 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。 代理模式UML图: 简单结构示意图: 为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看
阅读全文