02 2022 档案
摘要:hreadPoolExecutor提供了四个构造方法: 我们以最后一个构造方法(参数最多的那个),对其参数进行解释: public ThreadPoolExecutor(int corePoolSize, // 1 int maximumPoolSize, // 2 long keepAliveTi
阅读全文
摘要:多线程环境下,HashMap扩容会导致死锁,下面图解过程: 并发下的Rehash(多线程)1)假设我们有两个线程,都执行以下扩容代码。 do { Entry<K,V> next = e.next; // <--假设线程一执行到这里就被调度挂起了,执行其他操作 int i = indexFor(e.h
阅读全文
摘要:Collection | ├AbstractCollection 对Collection接口的最小化抽象实现 | │ | ├List 有序集合 | │-├AbstractList 有序集合的最小化抽象实现 | │-├ArrayList 基于数组实现的有序集合 | │-├LinkedList 基于链表
阅读全文
摘要:一.java io流 概况 按照技术体系分为BIO、NIO、AIO 每种技术体系都有以下分类 1. 流内容角度分类: 1.字节流 > 输入或者输出都是字节。 2.字符流 > 输入或者输出都是字符,相比字节流,其实是多做一步,自动把字符转换成字节或者把字节转换为字符(涉及到字符集或者操作系统默认字符集
阅读全文
摘要:一.背景 java的比较器有两类,分别是Comparable接口和Comparator接口。 二.代码示例 1.Comparator代码 //构造一个排序比较器 Comparator comparator = new Comparator<String>() { @Override public i
阅读全文
摘要:1 length()字符串的长度 String a = "Hello Word!"; System.out.println(a.length); 输出的结果是字符串长度10。 2 charAt()截取一个字符 String a = "Hello Word"; System.out.println(a
阅读全文
摘要:一.背景 针对对象的某个接口,动态生成该对象的代理,增加对象被调用之前和之后的控制逻辑。 二.代码示例 public static interface Student {//接口 void exam(); } public static class MiddleSchoolStudent imple
阅读全文
摘要:一.反射概念 在运行时,对于任何一个对象能获取到其类信息,任意一个类,都能够知道这个类的所以属性和方法,根据类信息,能构建其对象; 对于任意一个对象,都能调用它的任意一个(不管是否是私有的)方法和设置其任意一个(不管是否是私有的)属性; 这种动态获取信息、动态生成对象、及动态调用对象方法的功能叫Ja
阅读全文
摘要:一.泛型代码示意: public interface List<E> extends Collection<E> {//泛型接口定义,接口名后面跟尖括号,尖括号里面的表示类型名称,相当于变量X那种感觉;泛型类和泛型接口定义格式一样 int size(); boolean isEmpty(); boo
阅读全文
摘要:示例代码如下: public class Person implements Serializable {//实现Serializable接口,就可以被序列化和反序列化 /*** *类序列化版本号 *如果类有变化,比如有个字段类型改了,就要改变这个值; *如果待反序列化的文件和类中的这个版本号不一致
阅读全文
摘要:一. Cloneable + clone方法实现拷贝 示例代码如下: static class Account implements Cloneable{ public int id; public String name; @Override protected Account clone() {
阅读全文
摘要:假设N是关键字,M是模数;考虑模M是合数的情况:假设N = kn, M = km, N和M存在最大公因数k,此时可以将N % M = r转化为公式N = Mq + r,即kn = kmq + r。其中q是商,r是余数。“表面上”r的取值范围是{0, 1, 2, …, M-1}(忽视了只有N与M最大公
阅读全文
摘要:四大核心能力: 1.架构 2.安全 3.算法 4.性能 UML算法gitjava java线程状态java 对象头23种设计模式6种设计原则面向对象3大特征jvm内存结构gc(回收算法、回收期种类、gc相关配置参数、gc root)jvm类加载机制java相关工具(jstat、jmap、jstack
阅读全文
摘要:一.HTTP1.0 1.只有三种请求头GET、HEAD、POST 2.每个域名同时最多建立4个连接,如果连接数>=4,其他请求,只能等待 3.每个连接,完成一个HTTP请求、响应后,就会被服务器断开 4.不支持断点续传 5.缓存策略单一,只有本地缓存 二.HTTP1.1 比1.0版本有哪些提升: 1
阅读全文
摘要:HTTP方法 是否幂等 是否安全 说明 引入HTTP版本 是否废弃 Get Y Y 获取资源 HTTP0.9版本 N Post N N 新增资源 HTTP1.0 N Head Y Y HEAD方法跟GET方法相同,只不过服务器响应时不会返回消息体。 一个HEAD请求的响应中,HTTP头中包含的元信息
阅读全文
摘要:upstream tomcatserver1 { server 192.168.1.9:8081 weight=2; server 192.168.1.29:8081 weight=2; } server { listen 8082; listen 192.168.1.29:8082; server
阅读全文
摘要:1.应用解耦 应用之间不用那么多的同步调用,发消息到消息队列就行,消费者可以自己消费,消费生产者不用管了,降低应用之间的耦合。 2.降低延时 应用之间用同步调用,需要等待对方响应,等待时间比较长,用消息之后,发送消息到消息队列就行,应用就可以返回了,对客户来讲降低了应用延时。 3.削峰填谷 请求比较
阅读全文
摘要:一.背景 并发包中的各种并发工具基础都是用了AQS(AbstractQueuedSynchronizer),这个工具和Synchronizer关键字提供的功能类似,但是比Synchronizer要更好用 有如下改进: 1.获取锁时,AQS时能响应中断(阻塞线程被唤醒后会检查中断标志位,来响应中断);
阅读全文
摘要:一.Synchronized使用方法 1.同步静态方法 private static synchronized t1(){ } 2.同步方法 private synchronized t2(){ } 3.同步代码块 synchronized(object){ } 4.线程同步 synchronize
阅读全文
摘要:gc中不能被回收的对象,叫做gc root,官网上说的太细了;现在大体总结一下如下: 1.SystemClassLoader加载的类(包括了静态变量) 就是appClassLoader(classpath指定的目录中的类,都能被其加载) 2.虚拟机缓存类对象 常量池(Constant Pool) 符
阅读全文
摘要:一.问题 先来一个spring aop 切面代码示例 1 @Order(1) 2 @Component 3 @Aspect 4 public class Aspect2 { 5 6 @Before(value = "test.test.PointCuts.aopDemo()") 7 public v
阅读全文
摘要:一.背景 @Autowired spring自己创造的,只有spring框架实现了该注解的处理逻辑 @Resource j2ee规范中的,支持j2ee的框架都实现了该注解的处理逻辑 两个注解都是为了实现依赖注入(DI),进而实现控制反转(IOC); 二.工作原理 i. 结论: 其实这两种注解工作原理
阅读全文