
Java
海洋之心kkk
这个作者很懒,什么都没留下…
展开
-
Session设置超时的方式
方式一:在Servlet中执行HttpSession的 setMaxInactiveInterval()方法,参数单位是“秒”;方式二:<!-- 在程序中的web.xml里设置HttpSession默认失效时间,单位是“分钟” --><session-config> <session-timeout>30</session-timeout...原创 2019-08-05 20:34:57 · 319 阅读 · 0 评论 -
同步方法块和同步方法
JVM层面的不同1)同步方法,JVM采用ACC_SYNCHRONIZED标记符来实现同步详解: a.方法级的同步是隐式的,同步方法的常量池中会有一个ACC_SYNCHRONIZED标志。 b.当某个线程要访问某个方法时,会检测是否有ACC_SYNCHRONIZED,如果有,则需要先获得监视器 锁,然后开始执行方法,方法执行之后再释放监视器锁。 c.这时如果其他线程来请求执行方法,会...原创 2019-08-11 09:24:18 · 493 阅读 · 0 评论 -
Java注解-元注解
1、元注解(meta-annotation)元注解的作用就是负责注解其他注解。Java定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java定义的元注解: 1.@Target, 2.@Retention, 3.@Documented, 4.@Inherited 这些类型和它们所支持的类在java.l...原创 2019-08-10 12:03:40 · 128 阅读 · 0 评论 -
日志
一.SLF4J 简单日志门面,它是把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,并不是一个具体的可以直接单独使用的日志框架,所以最终日志的格式、记录级别、输出方式等都要通过接口绑定的具体的日志系统来实现,这些具体的日志系统就有log4j,logback,java.util.logging等,它...原创 2019-08-09 12:29:20 · 124 阅读 · 0 评论 -
公平锁与非公平锁
一.公平锁公平锁是指多个线程按照申请锁的顺序来获得锁,线程直接进入队列中排队,队列中的第一个线程才能获得锁二.非公平锁非公平锁是多个线程加锁时直接尝试获得锁,获取不到才会进入等待队列的队尾等待。但如果此时锁刚好可用,那么这个线程可以无需阻塞直接获取到锁,所以非公平锁有可能出现后申请锁的线程先获得锁的场景三.示例ReentranLock中默认使用非公平锁,也可以通过构造器显式指定...原创 2019-08-10 21:41:17 · 260 阅读 · 0 评论 -
Java反射机制及API使用
Java反射机制的作用:在运行时判断任意一个对象所属的类。 在运行时判断任意一个类所具有的成员变量和方法。 在运行时任意调用一个对象的方法 在运行时构造任意一个类的对象获取Class对象的三种方式:通过对象名.getClass()方法获取 通过类名.class方式获得 通过Class.forName()方法获得反射API 1.获取构造方法// 返回指定参数类型 p...原创 2019-08-12 22:34:32 · 169 阅读 · 0 评论 -
fail-fast
我们通常说的Java中的fail-fast机制,默认指的是Java集合的一种错误检测机制。当多个线程对部分集合进行结构上的改变的操作时,有可能会产生fail-fast机制,这个时候就会抛出ConcurrentModificationException。ConcurrentModificationException,当方法检测到对象的并发修改,但不允许这种修改时就抛出该异常 之所以...原创 2019-08-14 16:41:36 · 95 阅读 · 0 评论 -
Java 内存模型 happens-before原则
JSR-133 内存模型使用 happens-before 的概念来阐述操作之间的内存可见性。在 JMM 中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在 happens-before 关系。这里提到的两个操作既可以是在一个线程之内,也可以是在不同线程之间。与程序员密切相关的 happens-before 规则如下:程序顺序规则:一个线程中的每个操作...原创 2019-08-11 10:39:55 · 122 阅读 · 0 评论 -
如何判断一个类是废弃的类
方法区主要回收的是无用的类,那么如何判断一个类是无用的类的呢?判定一个常量是否是“废弃常量”比较简单,而要判定一个类是否是“无用的类”的条件则相对苛刻许多。类需要同时满足下面 3 个条件才能算是 “无用的类” :该类所有的实例都已经被回收,也就是 Java 堆中不存在该类的任何实例。加载该类的类加载器已经被回收。该类对应的 java.lang.Class 对象没有在任何地方被引用,无法在任...原创 2019-08-11 11:44:16 · 474 阅读 · 0 评论 -
如何判断一个对象已经无效
引用计数法给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加 1;当引用失效,计数器就减 1;任何时候计数器为 0 的对象就是不可能再被使用的。这个方法实现简单,效率高,但是目前主流的虚拟机中并没有选择这个算法来管理内存,其最主要的原因是它很难解决对象之间相互循环引用的问题。可达性分析算法这个算法的基本思想就是通过一系列的称为 “GC Roots” 的对象作为起点,从这些...原创 2019-08-11 15:30:50 · 650 阅读 · 0 评论 -
引用类型
无论是通过引用计数法判断对象引用数量,还是通过可达性分析法判断对象的引用链是否可达,判定对象的存活都与“引用”有关。 JDK1.2 之前,Java 中引用的定义很传统:如果引用类型的数据存储的数值代表的是另一块内存的起始地址,就称这块内存代表一个引用。 JDK1.2 以后,Java 对引用的概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用四种(引用强度逐渐减弱...原创 2019-08-11 20:59:45 · 309 阅读 · 0 评论 -
NIO原理详解
https://blog.youkuaiyun.com/charjay_lin/article/details/81810922转载 2019-08-20 16:56:01 · 112 阅读 · 0 评论 -
正确使用 equals 方法
Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。举个例子:// 不能使用一个值为null的引用类型变量来调用非静态方法,否则会抛出异常String str = null;if (str.equals("SnailClimb")) { ...} else { ..}运行上面的程序会抛出空指针异常,但是我们把第二行的条件判断...原创 2019-07-23 15:41:33 · 10098 阅读 · 0 评论 -
不要在 foreach 循环里进行元素的 remove/add 操作
如果要进行remove操作,可以调用迭代器的remove方法而不是集合类的 remove 方法。因为如果列表在任何时间从结构上修改,以任何方式除非通过迭代器自身remove/add方法,迭代器都将抛出一个ConcurrentModificationException,这就是单线程状态下产生的fail-fast 机制。fail-fast 机制:多个线程对 fail-fa...原创 2019-07-23 09:13:14 · 552 阅读 · 0 评论 -
乐观锁的缺点
ABA 问题是乐观锁一个常见的问题1 ABA 问题如果一个变量V初次读取的时候是A值,并且在准备赋值的时候检查到它仍然是A值,那我们就能说明它的值没有被其他线程修改过了吗?很明显是不能的,因为在这段时间它的值可能被改为其他值,然后又改回A,那CAS操作就会误认为它从来没有被修改过。这个问题被称为CAS操作的"ABA"问题。JDK 1.5 以后的AtomicStampedRefe...原创 2019-08-01 17:45:30 · 1382 阅读 · 0 评论 -
String
一.String的不可变性String被申明为final,因此它不可被继承。在java8中String内部使用char数组存储数据。在java9之后使用byte数组存储字符串,同时使用一个标识来标记使用了哪一种编码。String内部的数组被申明为final,等该数组初始化之后就不能引用其他数组了,而且String内部也没有改变数组内容的方法,因此保证了String的不可变。二....原创 2019-06-23 14:30:39 · 220 阅读 · 0 评论 -
Java如何解决多线程并发问题
一.Java如何保证原子性锁和同步常用的保证Java操作原子性的工具是锁和同步方法(或者同步代码块)。使用锁,可以保证同一时间只有一个线程能拿到锁,也就保证了同一时间只有一个线程能执行申请锁和释放锁之间的代码。与锁类似的是同步方法或者同步代码块。使用非静态同步方法时,锁住的是当前实例;使用静态同步方法时,锁住的是该类的Class对象;使用静态代码块时,锁住的是synchronized关...原创 2019-07-07 17:39:54 · 894 阅读 · 0 评论 -
JDBC详细解析流程,解读jdbc的执行过程
https://www.cnblogs.com/erbing/p/5805727.html转载 2019-06-26 20:26:18 · 106 阅读 · 0 评论 -
Servlet
一.servlet生命周期Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:Servlet 通过调用init ()方法进行初始化。 Servlet 调用service()方法来处理客户端的请求。 Servlet 通过调用destroy()方法终止(结束)。 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。in...原创 2019-07-04 16:38:27 · 123 阅读 · 0 评论 -
HashMap
一.描述HashMap是常用的Java集合之一,是基于哈希表的Map接口的实现。设计目标是尽量实现哈希表O(1)级别的增删改查效果,与HashTable主要区别为**==不支持同步和允许null作为key和value==**。二.底层实现 JDK1.8之前: 1、实现: 采用 ==数组+链表== 实现,形成一个数组带着多个桶的结构,每个数组元素就是一个桶,而数组索引就是每个桶...原创 2019-06-29 11:08:58 · 113 阅读 · 0 评论 -
锁
一、锁 定义 锁是在不同线程竞争资源的情况下用来分配不同线程执行方式的同步控制工具,只有线程获取到锁之后才能访问同步代码,否则需等待其他线程使用结束后释放锁。 synchronized 隐式锁,通常和wait(),notify(),notifyAll()一块使用。 wait:释放占有的对象锁,释放CPU,进入等待队列只能通过notify/notifyAll继续该线程...原创 2019-07-14 11:09:19 · 122 阅读 · 0 评论 -
Spring
一.Spring核心1、IOC(DI) IOC【控制反转】:即**将bean的控制权从程序员手里交到Spring IOC 容器中。**以往程序员使用到一个bean时,都需要自己手动去new出来,bean的生命周期都由自己去手动管理,如创建、赋值和销毁等,使用spring后,这些操作大部分都由Sring IOC 容器去自动完成,如bean的创建、属性赋值、依赖注入等,程序员只需要定义好 b...原创 2019-06-30 17:26:15 · 125 阅读 · 0 评论 -
hashCode 与 equals
hashCode()介绍hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用...原创 2019-07-29 17:07:31 · 98 阅读 · 0 评论 -
JMeter
https://blog.youkuaiyun.com/github_27109687/article/details/71968662转载 2019-07-22 11:49:32 · 76 阅读 · 0 评论 -
Java 中只有值传递
按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(call by reference)表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。它用来描述各种程序设计语言(不只是Java)中方法参数传递方式。Java程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,也就是说,方法...原创 2019-07-31 12:12:54 · 118 阅读 · 0 评论 -
类加载过程
Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢?系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。加载类加载过程的第一步,主要完成下面3件事情:通过全类名获取定义此类的二进制字节流将字节流所代表的静态存储结构转换为方法区的运行时数据结构在内存中生...原创 2019-08-12 16:23:31 · 136 阅读 · 0 评论