09 2021 档案
摘要:#字典 字典,类似于map,是一种用于保存键值对(key-value)的抽象数据结构 在redis的字典中,每个键都是独一无二的。 字典在Redis中的应用非常广泛,比如Redis的底层数据结构就是使用字典来实现的,对数据库的增删改查也是构建在对字典的操作之上的。 举个🌰,当我们执行命令: set
阅读全文
摘要:#链表 链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点灵活调整链表的长度。 链表在Redis中应用非常广泛,比如列表的实现方式之一就是链表 #链表实现 typedef struct listNode{ //前置节点 struct listNode *prev; //后置
阅读全文
摘要:Redis Redis即远程字典服务,是当下最热门的Nosql技术之一 redis能干嘛? 数据库 缓存 消息中间件 1.内存存储,持久化,因为内存是断电即失的,因此持久话(rdb,aof)十分重要 2.效率高,可以用于高速缓存 3.发布订阅系统 4.地图信息分析 5.计时器,计数器(浏览量) ..
阅读全文
摘要:#SDS Redis底层并没有使用C语言的传统字符串(以空字符结尾的字符数组),而是自定义了一种简单的动态字符串类型(SDS) 在Redis里,C字符串只会作为字符串字面量用在一些无需对字符串值进行修改的地方,比如打印日志。其余地方使用的都是SDS 比如 set msg "hello world"
阅读全文
摘要:#模板方法模式 模板方法模式在面向对象中经常使用,只不过我们可能没有意识。 模板方法模式指的是把一些公用的方法放在父类,一些方法放在子类中实现 举个🌰 父类Animals public abstract class Animals{ private String name; public void
阅读全文
摘要:Springboot版本:1.5.9 #问题背景 在一次项目中发现,js,css等静态资源被拦截了,html可以正常访问。看下目录结构: 其中 templates存放html文件,static存放js,css文件,js和css文件被SpringMVC拦截了(404)! #解决方法 ##1 首先由于我
阅读全文
摘要:#docker是什么 我们写程序时可能依赖于各种运行环境比如mysql,redis等等,如果我们需要程序在不同的电脑上运行就要分别为电脑安装运行环境还很容易出现版本不一致的问题,使用docker我们可以将运行环境上传到docker容器中,其他电脑只需要使用容器。 docker容器是相互隔离的,每个容
阅读全文
摘要:#原型模式 原型模式就是通过clone()方法,进行拷贝原型对象。需要注意的是我们通过clone()方法获得的对象是可以定制的。 举个例子: 假如我们有个Person类 public class Person{ String name; int age; public Person(String n
阅读全文
摘要:对于「表达式计算」这一类问题,你都可以使用这套思路进行解决。我十分建议你加强理解这套处理逻辑。 对于「任何表达式」而言,我们都使用两个栈 nums 和 ops: nums : 存放所有的数字 ops :存放所有的数字以外的操作 然后从前往后做,对遍历到的字符做分情况讨论: 空格 : 跳过 ( : 直
阅读全文
摘要:#简单工厂模式 简单工厂模式会定义一个工厂类,会根据不同的参数返回不同类的实例(一般利用多态返回父类),但这些类都有一个共同的父类。 现在想一个例子:如果我们要实现一个简单的计数器(+,-,*,/)应该怎么做? 第一种方法:就是把所有的方法揉在一起,根据传入的运算符进行相应计算 switch (op
阅读全文
摘要:#主内存与工作内存 Java内存模型规定了所有的变量都存储在主内存中(物理上仅是虚拟机内存的一部分),每条线程还有自己的工作内存,线程的工作内存中保存了被该线程使用的变量的主内存副本,线程对变量的所有操作(读取,赋值等)都必须在工作内存中进行,而不能直接读写主内存中的数据,不同线程之间也无法直接访问
阅读全文
摘要:#类加载器 JAVA虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何获取所需的类。实现这个动作的代码被称为“类加载器”(Class Loader)。 类加载器虽然只用于实现类的加载动作,但它在Jav
阅读全文
摘要:LRU算法是内存换出算法,只不过实现代价比较大,我们可以使用Clock算法。 public class LRUCache { class DLinkedNode { int key; int value; DLinkedNode prev; DLinkedNode next; public DLin
阅读全文
摘要:由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪
阅读全文
摘要:#为什么不适用二叉平衡树(AVL树,红黑树) 1.二叉平衡树每个节点有两个子节点,这意味着树的高度更高,IO次数更多 2.查询效率不稳定,如果要查询的数据在叶子节点,需要进行多次IO 3.磁盘IO是以页为单位的,一页=4k,如果使用二叉平衡树,每个节点只存储两个子节点的引用(两路),也就是一次IO操
阅读全文
摘要://这道题关键在于如何判断两个分数相等,这里采用除以gcd化为最简,然后构造成字符串。 class Solution { public long interchangeableRectangles(int[][] rectangles) { long res=0; HashMap<String,In
阅读全文
摘要:阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元
阅读全文
摘要:Java中实际上提供了java.util.Stack来实现栈结构,但官方目前已不推荐使用,而是使用java.util.Deque双端队列来实现队列与栈的各种需求.如下图所示java.util.Deque的实现子类有java.util.LinkedList和java.util.ArrayDeque.顾
阅读全文
摘要:HashSet底层是基于Hashmap实现的,不指定的话初始容量为16,负载因子0.75,其扩容什么的都是和HashMap一样的。 方法也都是调用的Hashmap方法 add()方法,把要添加的对象当做key,value是一个Object,如果对象已经存在,则返回false
阅读全文
摘要:之前介绍了Java内存运行时区域的各个部分,其中程序计数器,虚拟机栈,本地方法栈这3个区域随线程而生随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作,因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要过多考虑如何回收的问题,当方法结束或线程结束的时候,内存就
阅读全文
摘要:#对象的创建 ##1.类加载检查 虚拟机遇到⼀条 new 指令时,⾸先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引⽤,并且检查这个符号引⽤代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执⾏相应的类加载过程。 ##2.分配内存 假设Java堆中内存是绝对规整的,所有被使用过的
阅读全文
摘要:线程私有:虚拟机栈,本地方法栈,程序计数器 线程共享:方法区,堆 #程序计数器 当前线程所执行的字节码的行号指示器。 如果线程执行的是Java方法,则这个计数器记录的是正在执行的虚拟机字节码指令的地址,如果执行的是Native方法,这个计数器值应为空(Undefined) #虚拟机栈 虚拟机栈描述的
阅读全文
摘要:#LinkedHashMap LinkedHashMap是一个有序的HashMap,它继承了HashMap, 其顺序有两种:按照访问的顺序和按照存储的顺序。顺序是由accessOrder字段控制,若accessOrder=true则说明是按照访问的顺序。若accessOrder=false则说明是按
阅读全文