- 博客(168)
- 收藏
- 关注
原创 SpringBoot问答
简单介绍一下 Spring?有啥缺点?为什么要有 SpringBoot?说出使用 Spring Boot 的主要优点什么是 Spring Boot Starters?Spring Boot中的Starter是一个包含很多依赖描述的集合,只要添加一个Starter,这个Starter里面约定的依赖都会被添加到项目中,Spring Boot 支持哪些内嵌 Servlet 容器?Spring Boot支持内嵌的Tomcat, Jetty和Undertow服务器,如何在 Spr..
2022-02-15 12:45:42
163
原创 ArrayList扩容机制分析
public boolean add(E e) { modCount++; add(e, elementData, size); return true; } private void add(E e, Object[] elementData, int s) { if (s == elementData.length) elementData = grow(); element...
2021-11-02 19:36:17
132
原创 js正则表达式
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>正则基本语法</title> <script type="text/javascript"> // 说明: 正则在不同语言的支持方法语法略有不同 js、java、php ... var str = "Hello Java Hello java";
2021-10-03 15:38:33
90
原创 ThreadLocal详解
ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是ThreadLocal变量名的由来。他们可以使用 get() 和 set() 方法来获取默认值或将其值更改为当前线程所存的副本的值,从而避免了线程安全问题。ThreadLocal原理Thread类源码public class Thread impl
2021-09-27 17:26:27
120
原创 对象的访问定位
主流的访问方式主要有使用句柄和直接指针两种:·如果使用句柄访问的话,Java堆中将可能会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自具体的地址信息,其结构如图2-2所 示。·如果使用直接指针访问的话,Java堆中对象的内存布局就必须考虑如何放置访问类型数据的相关 信息,reference中存储的直接就是对象地址,如果只是访问对象本身的话,就不需要多一次间接访问 的开销,如图2-3所示。这两种对象访问方式各有优势,使用句柄来访问的
2021-09-26 16:06:58
159
原创 对象的创建及对象内存布局
类加载检查当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到 一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那 必须先执行相应的类加载过程分配内存虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成 后便可完全确定,为对象分配空间的任务实际上便等同于把一块确定 大小的内存块从Java堆中划分出来。两种分配方式:假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一 边,空闲的内存被放在另一边,中间放着.
2021-09-26 16:01:26
119
原创 NIO、、
NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区 (Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的 DirectByteBuffer对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了 在Java堆和Native堆中来回复制数据。...
2021-09-26 15:24:03
65
原创 java内存区域
程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的 字节码的行号指示器。在Java虚拟机的概念模型里[1],字节码解释器工作时就是通过改变这个计数器 的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处 理、线程恢复等基础功能都需要依赖这个计数器来完成。为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程 之间计数器互不影响,独立存储,我们称这类内存区域为“线...
2021-09-26 15:20:25
68
原创 深入理解Synchronized关键字底层原理及作用
深入理解Synchronized关键字底层原理及作用1深入理解Synchronized关键字底层原理及作用2
2021-09-26 09:32:19
171
原创 易错知识点
两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?不对,两个对象的 hashCode()相同,equals()不一定 true。java 中的 Math.round(-1.5) 等于多少?等于 -1。3. String str="i"与 String str=new String(“i”)一样吗?不一样,因为内存的分配方式不一样。String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String(“i”.
2021-09-25 18:36:45
71
原创 Java核心源码之ArrayList、LinkedList:ArrayList、LinkedList的区别、扩容机制、底层数据结构、核心API源码分析
Java核心源码之ArrayList、LinkedList:ArrayList、LinkedList的区别、扩容机制、底层数据结构、核心API源码分析
2021-09-25 17:58:26
87
原创 冒泡、选择、插入、快速、归并
public class Sort { public static void main(String[] args) { List<List<Integer>> list = new ArrayList<List<Integer>>(); } static void mergearray(int arr[],int l,int m,int r,int [] temp){ int i=l,j=r, mi.
2021-09-25 17:52:34
96
原创 代理模式.
代理模式的基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代理)和 Cglib代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴) 。静态代理模式...
2021-08-03 23:17:21
96
转载 装饰者模式
星巴克咖啡订单项目(咖啡馆):咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Milk、Soy(豆浆)、Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便使用OO的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖 啡+调料组合。装饰者模式定义装饰者模式:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更 有弹性,装饰者模式也体现了开闭原则(ocp).
2021-08-03 21:08:38
82
转载 策略模式.
鸭子问题编写鸭子项目,具体要求如下:有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等)显示鸭子的信息策略模式基本介绍策略模式(Strategy Pattern)中,定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户这算法体现了几个设计原则,第一、把变化的代码从不变的代码中分离出来; 第二、针对接口编程而不是具体类(定义了策略接口);第三、多用组合/聚合, 少用继承(客户通过组合方式使用策略)。策略模式:分别封装
2021-08-03 16:08:08
67
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人