Java学习
文章平均质量分 52
明心_前进
这个作者很懒,什么都没留下…
展开
-
servlet无法访问WEB-INF目录下的jsp
servlet无法访问WEB-INF目录下的jsp原创 2022-09-21 20:49:48 · 803 阅读 · 0 评论 -
java并发之ConcurrentHashMap
我们之前了解了HashMap这一容器,但是这个容器并不是并发安全的,为了解决这个问题,JUC为我们提供了支持并发安全的HashMap,即ConcurrentHashMap。 和HashMap一样,ConcurrentHashMap也是有着默认值的,并且也是懒加载机制。默认长度为16,但是如果你在创建的时候有设置初始值,那么我们会创建比你的初始值大的2的幂次方的长度的ConcurrentHashMap。private final Node<K,V>[] initTable() { //默认初原创 2021-07-18 20:07:53 · 639 阅读 · 1 评论 -
java高并发之ReentrantLock
我们经常会遇到一个问题,就是lock和synchronized有什么区别?我们首先可以通过代码发现,lock是一个接口,而sychornized是一个修饰符public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws I原创 2021-07-16 22:22:22 · 157 阅读 · 0 评论 -
transient关键字
被transient关键字修饰后的变量不再是持久化的一部分。!!!只修饰变量原创 2021-06-03 16:34:03 · 91 阅读 · 0 评论 -
String 几兄弟
关于String类、StringBuilder和StringBuffer首先String类不是一个基本类型,它是一个引用类型。并且String类型是不可变的,每次我们对它进行修改时,都会创建一个新的String对象,然后将新的值放入新对象String类的compareTo方法返回的是两个字符串的ASCII码的差值,即两字符串从头开始比,如果第一个就不等则直接返回差值,否则继续StringBuffer类型是线程安全的,而StringBuilder类型不是线程安全的,具体表现为StringBu原创 2021-06-03 16:33:32 · 92 阅读 · 0 评论 -
spring AOP
aop全称:Aspect Oriented Programming即面向切面编程一些专有名词:通知: advice 定义你想要的功能连接点: joinpoint 每个方法的前后都可以是连接点切入点: pointcut 从连接点中选择进行切入切面: 通知和切入点的结合引入: introduction 允许我们向现有的类添加新的方法目标: 引入当中的目标类织入: 把切面应用到目标对象来创建代理对象的过程 那么spring是如何实现使用代理类包裹切面,把他们织入spring管理的bean里面原创 2021-06-03 16:31:00 · 57 阅读 · 0 评论 -
object的了解
Object类是所有类的父类其中主要有以下几个方法:public final native Class<?> getClass();//这个方法用来获得生成当前对象的类对象public native int hashCode();//计算当前类的hash值,一般重写equals都会重写hashCode方法public boolean equals(Object obj) { return (this == obj); }// 判断两个对象是否相等pr原创 2021-06-03 16:26:38 · 76 阅读 · 0 评论 -
java IOC 和DI
IOC:全名 Inversion Of Control,即控制反转。就是将你设计好的对象交给Spring容器进行管理,不是在自己的对象内部进行控制,这样的控制关系的反转叫做控制反转。注: 以前是我们自己在对象内部创建我们所需要的对象,现在是容器通过依赖注入的方式,将你想要的对象给你。DI:全名Dependency Injection,即依赖注入。就是容器动态的将依赖关系注入到组件中。谁依赖谁: 我们的程序依赖容器为什么依赖: 我们的程序需要容器给我们提供外部资源谁注入谁: 容器注入依赖原创 2021-06-03 16:25:47 · 232 阅读 · 0 评论 -
CAS理解
CAS 即 compare and swap,比较替换 CAS中主要用的有三个操作数:内存地址v,旧的预期值A,修改的新值B。 当我们更新一个变量的时候,只有当变量地址v的值是预期值A的时候,才会将内存地址v的对应值修改为B。但是我们使用CAS时会遇见ABA的问题即当我们想要修改的值在之前已经被改为了B,然后重新改为A,此时我们使用CAS是无法进行判断的。public static void main(String[] args) { final AtomicInteger a原创 2021-06-03 16:25:01 · 131 阅读 · 0 评论 -
HashMap小结
HashMap小结首先定义的我们的初始表的大小为16,这里是将1左移四位变成10000,即16;然后是我们的最大容量,负载因子0.75以及链表转换为树的长度8. 这里6是表示我们在进行扩容后选择要不要将红黑树转化为链表的阈值。64则是我们的初始表大小容量达到64是才会选择在链表过长的地方将他们改造成红黑树。我们在hash表中主要存放的是NODE节点,它有以下属性,分别是hash值,key值,value值以及next指针。static final int hash(Object key) {原创 2021-03-26 19:10:21 · 150 阅读 · 0 评论 -
ArrayList扩容小结
ArrayList小结 首先ArrayList是我们List接口的一个实现类,是线性非安全的。优点是访问数据快,复杂度为O(1),缺点是对数据进行删除和添加的话不方便,时间复杂度在最好的情况下为O(1),最坏的情况下为O(n)。那么接下来我们就来看看ArrayList在jdk中是如何实现的:第一个参数是10,是ArrayList在加入元素时会进行,扩容的长度。然后是两个默认的空数组。接下来我们就可以来看一下ArrayList的初始化,以及它是如何进行元素的添加和扩容的。首先是两个构造方法,分别是原创 2021-03-25 23:10:46 · 356 阅读 · 0 评论 -
Java学习Collection
Collecton集合的多态使用最近在学习java的过程中发现了使用Collection进行多态操作时返回了不同的返回值如上图所示,都是new 一个Arraylist对象但是当他们调用remove方法时返回的是不一样的返回值,但是我一开始记得是:编译看左,运行看右。所以一开始我认为既然运行看右那么他们都应该调用的是Arraylist中的方法,为啥会不一样呢。于是我查看了jdk的api这是...原创 2020-03-08 10:44:09 · 93 阅读 · 0 评论