JAVA
文章平均质量分 88
翻滚de蛋炒饭
改名了,之前叫 咸鱼翻弱鸡
展开
-
java复习系列[6] - Java集合
Java集合ArrayList的扩容在add()、addAll()方法中判断是否需要扩容使用 grow() 函数以 1.5 倍的方式进行扩容HashMapHashMap扩容流程(1.7 与 1.8 ) public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } final V putVal(int hash, K key, V value, boole原创 2021-12-01 21:50:54 · 319 阅读 · 0 评论 -
Redis复习系列
文章目录RedisRedis底层原理基本数据类型内部数据结构stringlisthashsetzsetziplist字典(dict) + 跳表(skiplist)跳表应用场景单线程单线程的优势Redis为什么很快BIO,NIO,IO复用,AIO,同步,异步,阻塞,非阻塞I/O模型阻塞式I/O非阻塞式I/OI/O多路复用Select, Poll, Epoll信号驱动I/O异步I/O总结Redis缓存问题缓存击穿缓存雪崩缓存穿透Redis事务持久化RDB(Redis DataBase)触发方式savebgsav原创 2021-12-01 20:51:39 · 849 阅读 · 0 评论 -
java复习系列[5] - Java 中的设计模式
文章目录Java中的设计模式设计原则迭代器模式 + Iterator适配器模式 + HandlerAdapter代理模式 + AOP单例模式 + Spring Bean模板方法模式 + AQS工厂模式简单工厂工厂方法建造者模式桥接模式 + JDBCJava中的设计模式设计模式的核心:可重用可扩展高内聚低耦合设计原则开闭原则依赖倒置迪米特法则组合复用里氏替换单一职责接口隔离迭代器模式 + Iterator适配器模式 + HandlerAdapter代理模式 +原创 2021-12-01 20:35:20 · 736 阅读 · 0 评论 -
java复习系列[4] - Java IO
文章目录Java IOIO传输IO读写流程IO类型IO的访问方式缓存IO(标准IO、传统IO)直接IO内存映射总结Java中IO与NIO的区别Java NIO流与缓冲管道为什么NIO比IO更快BIO,NIO,IO复用,AIO,同步,异步,阻塞,非阻塞I/O模型阻塞式I/OC10K问题,大量客户端访问非阻塞式I/OI/O多路复用单路对应 -> 多路复用多路复用Select, Poll, Epoll**Select**Select处理流程poll**epoll**总结Select底层实现信号驱动I/O异步原创 2021-12-01 20:28:56 · 686 阅读 · 0 评论 -
java复习系列[3] - Java虚拟机
文章目录Java虚拟机JRE 和 JDK整体工作原理类加载class文件结构类加载过程双亲委派机制运行时内存区域整体划分PC (Program Counter)JVM栈局部变量表(Local Variables)操作数栈(Operate Stack)动态链接(Dynamic Linking)方法返回地址(Return Address)**在栈中可能的异常**本地方法栈JVM堆内存分配 & 对象在不同分区的转移**GC类型**GC触发对象分配过程:TLAB堆并不是对象分配 唯一选择逃逸分析逃逸分析优化原创 2021-12-01 20:09:22 · 1380 阅读 · 0 评论 -
java复习系列[2] - Java多线程
文章目录JUCthread线程状态sleep() 与 wait() 的异同点wait() 与 阻塞 的异同点Some Question !!!有了**sleep()**为什么还要有**wait(time)**?线程中断中断示例线程占用的内存Some Question !!!线程上下文切换?JMM的三大特性volatile怎么保证可见性?MESI协议**功能:****四个状态:**流程示例:怎么保证有序性?为什么不保证原子性?CASCAS缺陷ABA问题synchronized 与 CASsynchronize原创 2021-12-01 20:08:05 · 459 阅读 · 0 评论 -
java复习系列[1] - Java 基础
文章目录Java 基础finalstaticJava的switch支持的数据类型goto (扫盲 - 一般不用)String不可变不可变的优势序列化序列化的 *serialVersionUID* 问题序列化代码IO流是什么?类型多个IO流需要关闭而重复嵌套try-catch-finally传统的BIO与NIO注解和反射注解反射获取注解信息注解实例1. 构建注解2. 自定义注解使用3. 运行时注解处理元注解Hash哈希函数:hashcode()为什么要重写hashcode()HashMap中红黑树的排序方式冲原创 2021-12-01 20:05:14 · 1062 阅读 · 0 评论 -
Spring容器的底层实现
文章目录1. 容器构建2. getBean() 方法核心流程3. BeanDefinition 的注册 + 实例化4. Xml配置 + BeanFactory这儿有一部分截图,在持续更新,【原创图解 - Spring容器的底层实现】1. 容器构建2. getBean() 方法核心流程3. BeanDefinition 的注册 + 实例化4. Xml配置 + BeanFactory持续更新。。。原创图解 - Spring容器的底层实现...原创 2021-10-12 22:14:56 · 244 阅读 · 0 评论 -
Spring事务
Spring事务在 JDBC 时代我们需要这样手动的处理事务。这种属于编程式事务;// 获取连接 connconn.setAutoCommit(false); 设置提交方式为手工提交 // 业务代码// 减钱// 加钱conn.commit(); 提交事务// 出现异常 conn.rollback(); 回滚事务编程式事务 :将事务管理代码嵌入到业务方法中来控制事务的提交和回滚,在编程式管理事务当中,必须在每个事务操作中包含额外的事务管理代码,繁琐,不便。因此,提出声明式事务。原创 2021-05-07 20:32:31 · 238 阅读 · 1 评论 -
Spring (Bean, IoC, AOP, SpringMVC)
这里写自定义目录标题Spring核心容器AOP 和 InstrumentationAOP消息(Messaging)数据访问/集成(Data Access/ Integration)WebTestSpringMVC图解体现主要流程的部分源码servletSpringSpring框架是一种分层架构,它包含了一系列的功能,大概由20种模块组成。 这些模块分为:核心容器(Core Container),数据访问/集成(Data Access/Integration),Web,AOP,工具(Instr原创 2021-04-29 22:30:55 · 1157 阅读 · 1 评论 -
IDEA + Maven创建SpringMVC项目和XML配置
IDEA + Maven +SpringMVC + XML配置1. 运行出默认 index.jsp 页面1.1 构建Maven项目1.2 设置pom.xml1.3 设置Spring MVC框架支持1.4 进行 tomcat 相关配置1.4.1 在 Project Structure的Artifact中进行修改1.4.2 配置Tomcat1.5 运行默认页面2. 运行自己的Controller2.1 重新构建目录2.2 配置 `web.xml`2.3 配置 `dispatcher-servlet.xml`2原创 2021-04-22 21:47:20 · 1423 阅读 · 0 评论 -
Java数组的转换和拷贝
文章目录集合、数组互转集合 --> 数组1. 循环添加2. toArray数组 --> 集合1. 循环添加2. asList()集合 <--> 集合1. 构造方法2. addAll() 方法数组的拷贝1. for2. clone()3. System.arraycopy()4. Arrays.copyOf()tips基本数据类型集合、数组互转集合 --> 数组1. 循环添加 List<String> mlist = new ArrayList(); mli原创 2021-04-08 13:25:46 · 667 阅读 · 1 评论 -
Java拷贝(赋值、浅拷贝、深拷贝)
文章目录拷贝直接赋值浅拷贝实现方式特殊情况深拷贝实现方式多层克隆拷贝直接赋值直接赋值的方式没有生产新的对象,只是生新增了一个对象引用浅拷贝如果原型对象的成员变量是值类型,将复制一份给克隆对象,也就是说在堆中拥有独立的空间;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。换句话说,在浅克隆中,当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制。实现方式被复制类需要实现原创 2021-04-06 22:30:13 · 3783 阅读 · 0 评论 -
Java多线程
文章目录Java多线程内存空间程序、进程、线程程序进程线程生命周期线程安全Synchronized工作内存和主内存示例volatile死锁创建线程join\wait\yield\sleependJava多线程内存空间程序、进程、线程程序程序是含有指令(代码)和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。进程运行的程序,一个动态的过程(产生、存在、结束),存在生命周期。系统运行的基本单位;系统资源分配的最小单位。线程线程是一个比进程更小的执行单位原创 2021-04-06 21:51:30 · 607 阅读 · 0 评论 -
红黑树
文章目录平衡二叉树红黑树红黑树的变换旋转和颜色变换规则:示例:代码AVL树 & 红黑树的区别平衡二叉树平衡二叉树(Self-balancing binary search tree) 自平衡二叉查找树 又被称为AVL树(有别于AVL算法)平衡因子(平衡度):结点的平衡因子是结点的左子树的高度减去右子树的高度。(或反之定义)平衡二叉树: 每个结点的平衡因子都为 1、-1、0 的二叉排序树。或者说每个结点的左右子树的高度最多差1的二叉排序树。目的: 平衡二叉树的目的是为了减少二叉查找原创 2021-04-04 22:16:52 · 149 阅读 · 0 评论 -
Java的单例模式
文章目录单例模式饿汉式懒汉式反射介入静态内部类单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。实现方法:懒汉式饿汉原创 2021-04-02 10:15:08 · 226 阅读 · 0 评论 -
Java枚举类型
枚举枚举为什么可以实现单例如果是枚举类型,则不能通过反射创建枚举对象!那我们试试,是否是真的:enum EnumSingle{ INSTANCE; public EnumSingle getInstance(){ return INSTANCE; }}class Test{ public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationT原创 2021-04-02 10:01:57 · 308 阅读 · 0 评论 -
Hash哈希(hashCode、HashSet 、HashMap)
文章目录HashHashMap类hashCode()方法hashCode() 与 equals() 的关联情况1(不重写hashCode()和equals() 方法)情况2(仅仅重写hashCode()方法)情况3(重写hashCode()和equals() 方法)Hash哈希表基础:hash函数:Index = hash(key)除留取余 :index = key MOD p折叠法平方取中…哈希冲突开放定址链地址法再散列法HashMap类HashMap使用的原创 2021-03-30 10:49:32 · 1229 阅读 · 3 评论 -
Java的String理解
文章目录Java的字符串String、StringBuilder、StringBufferString赋值问题final 与 不可变相关方法Java的字符串String、StringBuilder、StringBufferString 不可变StringBuilder 可变StringBuffer 可变、线程安全如果要操作少量的数据用 String;单线程操作字符串缓冲区下操作大量数据 StringBuilder;多线程操作字符串缓冲区下操作大量数据 StringBuf原创 2021-03-29 22:24:39 · 86 阅读 · 0 评论 -
排序算法 -- 待增加
文章目录排序算法快速排序思想图解代码排序总结总结表基数排序数据结构----排序排序算法快速排序思想从序列中,选一个记录k作为轴值pivot选择策略:第一个元素、最后一个元素、中间元素、随机选择将剩余的元素,分割成 左子序列 L 和 右子序列 RL 中所有元素都 < k, R 中所有元素都 > k对 L 和 R递归进行快排,直到子序列中有 0 个 或者 1 个元素,退出图解代码public class Main { public static原创 2021-03-28 15:45:21 · 134 阅读 · 0 评论 -
堆、优先队列的实现
文章目录堆 Heap特点基本操作堆的创建增加结点删除结点去除堆顶去除任意结点向上调整向下调整示例代码堆 Heapheap 是一个抽象的数据结构,或者说是逻辑上的数据结构,并不是一个物理上真实存在的数据结构。heap 其实有很多种实现方式,比如 binomial heap, Fibonacci heap 等等。但是面试最常考的,也是最经典的,就是二叉堆,也就是用一棵完全二叉树来实现的。Java中的优先队列PriorityQueue的实现就是使用的 堆。特点完全二叉树任意节点都优于它的所原创 2021-03-28 13:25:35 · 306 阅读 · 0 评论 -
二分搜索、折半查找
文章目录二分法Alg.1 : [left, right]Alg.2 : 左侧边界(有序数组中小于 target 的数的数目)Alg.3 : [left, right)二分法二分法存在多种写法!!!Alg.1 : [left, right]查找数组中某一个数据 data,存在返回下标,不存在返回 -1;public int binary(int[] arr, int target) { int min = 0; int max = arr.length - 1;原创 2021-03-23 15:22:12 · 212 阅读 · 0 评论 -
java函数的参数传递
java的函数参数传递参数传递java是:值传递(直接复制一个副本)对于基础数据类型,直接复制新的对应基础类型数据。对于引用类型,复制的是对象的引用。在不改变对象引用的情况下改变形参的成员变量数据,会影响到实际参数的变化。知乎 - 第二个回答实验package com.company;class User{ String name; int age; public String getName() { return name; }原创 2020-11-15 15:25:24 · 598 阅读 · 0 评论 -
Java虚拟机 —— 内存和线程
java虚拟机内存区域对象创建类 是否存在方法区的常量池中;不存在,则执行类加载过程new:内存分配初始化零值必要的设置(哪个类的实例、如何查询元数据信息)() : 初始化(构造)对象的内存布局对象头(Header)运行时候对象数据类型指针实例数据(Instance Data)各种类型的字段对齐填充(Padding)不一定存在,只是占位符。任何对象的起始地址必须是8字节的整数倍。...原创 2020-11-05 16:56:22 · 406 阅读 · 0 评论 -
JAVA多态性
java多态多态存在的三个必要条件:一、继承; 二、重写; 三、父类引用指向子类对象。好处: 可替换性(substitutability) 多态对已存在代码具有可替换性 可扩充性(extensibility) 多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功...原创 2018-07-31 23:00:35 · 276 阅读 · 0 评论 -
Java集合总结
Java集合集合简介:1.定义:一系列储存数据的接口和类,位于Java.until包中。 2.作用:可以解决复杂数据问题,任何一个集合可以储存不同类型的数据且长度动态可变。java集合结构: 图片引用自百度 Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。...原创 2018-08-03 22:57:29 · 460 阅读 · 0 评论