java基础
youngerTree
热爱技术、热爱开发
展开
-
HashSet实现原理
1.是基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75 的HashMap。封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。2.当我们试图把某个类的对象当成 HashMap的 key,或试图将这个类的对象放入 HashSet 中保存时,重写该类的equals(Object obj)方原创 2020-06-05 23:15:06 · 289 阅读 · 0 评论 -
Enumeration接口和Iterator接口的区别
Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,Enumeration不行。函数接口不同:Enumeration只有2个函数接口。通过Enumeration,我们只能读取集合的数据,而不能对数据进行修改。Iterator只有3个函数接口。Iterator除了能读取集合的数据之外,也能数据进...原创 2020-06-05 23:03:28 · 751 阅读 · 0 评论 -
JAVA锁有哪些种类,以及区别
JAVA会涉及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。对于JavaReentrantLock而言,通过构造函数指定该锁是否是公平锁,.原创 2020-06-01 21:45:06 · 384 阅读 · 0 评论 -
Java注解的理解
java注解:注解,也叫元数据。可以声明在包、类、字段、方法、局部变量、方法参数等前面,来对这些元素进行说明,注释等。元注解:java提供了四个元注解,所谓元注解就是负责注解其他注解。1.@Target :规定注解所修饰的对象范围。ElementType.CONSTRUCTIR; 构造器声明ElementType.FIELD; 成员变量,对象,属性(包括enum实例)ElementType.LOCAL_VARIABLE; 局部变量声明ElementType.METHOD ; 方法声原创 2020-06-01 21:33:10 · 188 阅读 · 0 评论 -
sleep() 和 wait() 的区别
类的不同:sleep() 来自 Thread,wait() 来自 Object。 释放锁:sleep() 不释放锁(只是让出了CPU);wait() 释放锁。 用法不同:sleep() 时间到会自动恢复;wait() 可以使用 notify()/notifyAll()直接唤醒,sleep()方法可以在任何地方使用;wait()方法则只能在同步方法或同步块中使用;...原创 2019-05-22 21:10:03 · 213 阅读 · 0 评论 -
Class.forName()的作用
装载一个类并且对其进行实例化的操作。 装载过程中使用到的类加载器是当前类。为了详细描述,Class.forName()方法,这里使用classLoader.loadClass()进行对比描述 Class.forName(String className)使用装载当前类的类装载器来装载制定的类,因为class.forName(String name)方法内部调用了Class.fo...原创 2019-05-30 21:25:19 · 89904 阅读 · 4 评论 -
JSP 的内置对象
request:封装客户端的请求,其中包含来自 get 或 post 请求的参数; response:封装服务器对客户端的响应; pageContext:通过该对象可以获取其他对象; session:封装用户会话的对象; application:封装服务器运行环境的对象; out:输出服务器响应的输出流对象; config:Web 应用的配置对象; page:JSP 页面本身(相当于...原创 2019-05-28 22:02:34 · 152 阅读 · 0 评论 -
JSP 的 4 种作用域
page:代表与一个页面相关的对象和属性。 request:代表与客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件;需要在页面显示的临时数据可以置于此作用域。 session:代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的 session 中。 application:代表与整个 Web 应用程序相关的对象和...原创 2019-05-28 22:03:54 · 463 阅读 · 0 评论 -
session 和 cookie 有什么区别
存储位置不同:session 存储在服务器端;cookie 存储在浏览器端。 安全性不同:cookie 安全性一般,在浏览器存储,可以被伪造和修改。 容量和个数限制:cookie 有容量限制,每个站点下的 cookie 也有个数限制。 存储的多样性:session 可以存储在 Redis 中、数据库中、应用程序中;而 cookie 只能存储在浏览器中。...原创 2019-05-28 22:05:28 · 260 阅读 · 0 评论 -
删除Maven仓库的.lastUpdate文件
构建Maven项目时经常会遇到jar包下载失败的原因,主要原因为仓库链接和网络问题。但是如果存在lastUpdate文件,就算网络好时jar也会下载失败,这时需要删除这些文件。删除这些文件的步骤:1.打开cmd命令2.定位到maven仓库3.执行命令:for /r %i in (*.lastUpdated) do del %i...原创 2019-06-23 00:21:11 · 11826 阅读 · 6 评论 -
TreeMap 与 HashMap 的区别
TreeMap 实现了 SortMap 接口,其能够根据键排序,默认是按键的升序排序,也可以指定排序的比较器,当用 Iterator 遍历 TreeMap 时得到的记录是排过序的,所以在插入和删除操作上会有些性能损耗,TreeMap 的键和值都不能为空,其为非并发安全 Map,此外 TreeMap 基于红黑树实现。HashMap 是最常用的 Map,其基于哈希散列表实现,主要根据键的 hash...原创 2019-06-23 21:50:26 · 1309 阅读 · 0 评论 -
元转分工具类
import java.math.BigDecimal;import java.text.DecimalFormat;public class MoneyUtil { private final static DecimalFormat NF_YUAN = new DecimalFormat("#####################0.00"); private final st...原创 2019-08-13 20:51:25 · 453 阅读 · 0 评论 -
手机号码脱敏工具类
import org.apache.commons.lang3.StringUtils;public class PhoneUtils { /** * 手机号格式校验正则 */ public static final String PHONE_REGEX = "^1(3[0-9]|4[57]|5[0-35-9]|7[0135678]|8[0-9])...原创 2019-08-13 20:52:49 · 2708 阅读 · 0 评论 -
身份证脱敏工具类
import org.apache.commons.lang3.StringUtils;public class IdCardUtils { //身份证前三后四脱敏 public static String idEncrypt(String id) { if (StringUtils.isEmpty(id) || (id.length() < 11))...原创 2019-08-13 20:53:45 · 2412 阅读 · 0 评论 -
使用redis实现手机验证码的一个例子
@PostMapping("getYzm") @ResponseBody public Result getYzm(HttpServletRequest request) { String mobile = HttpParameterUtil.getString(request, "mobile"); Integer sguserid = CampSessionDataHelper...原创 2019-08-23 15:22:40 · 2319 阅读 · 0 评论 -
线程的状态
新建状态(NEW 尚未启动) 可运行状态(RUNNABLE 正在执行中) 阻塞状态(BLOCKED 阻塞的(被同步锁或者IO锁阻塞)) 等待状态(WAITING 等待状态) 定时等待状态(TIMED_WAITING 等待指定的时间重新被唤醒的状态) 死亡/结束状态(TERMINATED) 执行完成状态变化如下图:...原创 2019-05-22 21:07:35 · 210 阅读 · 0 评论 -
什么是守护线程
守护线程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。在 Java 中垃圾回收线程就是特殊的守护线程。 专门用于服务其他的线程,如果其他的线程(即用户自定义线程)都执行完毕,连main线程也执行完毕,那么jvm就会退出(即停止运行),此时连jvm都停止运行了,守护线程当然也就停止执行了。 换一种通俗的说法...原创 2019-05-22 21:01:18 · 5320 阅读 · 0 评论 -
String、StringBuffer、StringBuilder
最近在查漏补缺,回顾基础知识,并扩展新知识及底层原理知识,希望自己可以得到成长。String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容...原创 2019-05-22 20:55:08 · 364 阅读 · 0 评论 -
Map集合的四种遍历方式
Map集合的四种遍历方式最近开发的项目中较常用到map来处理业务逻辑,如webSocket中用静态map来存储用户ID与socket对应进行长连接操作。第一种:通过Map.keySet遍历key和value for (Integer in : map.keySet()) { //map.keySet()返回的是所有key的值 String str = map.get(in);//原创 2017-09-18 16:05:11 · 564 阅读 · 0 评论 -
Java 封装类型装箱拆箱常见问题
Long 包装类型常量 cache 为 -128 到 127 之间看如下程序Long l1 = 128L;Long l2 = 128L;System.out.print(l1 == l2); //1 false 128超出了Long的常量池System.out.print(l1 == 128L); //2 true 128L不是封装类型,会自动把lL拆成基本类型进行比较...原创 2017-10-30 19:54:22 · 1471 阅读 · 0 评论 -
clone常见的三种方式
在JAVA中克隆一个对象常见的有三种形式 1.通过自己写一个克隆方法里面 new 一个同样的对象来进行 get、set 依次赋值实现深度克隆(很繁琐且易出错); 2.通过实现 Cloneable 接口并重写 Object 类的 clone() 方法(分为深浅两种方式); 3.通过实现 Serializable 接口并用对象的序列化和反序列化来实现真正的深度克隆;第一种方法并没有什么卵用Clon原创 2017-11-08 20:35:38 · 14562 阅读 · 1 评论 -
一道题解析面向对象的特征
public class TestDT { public static void main(String[] args) { A aa = new A(); A ab = new B(); B b = new B(); C c = new C(); D d = new D(); System.out转载 2017-11-01 20:32:13 · 305 阅读 · 0 评论 -
transient关键字
最近在学习java一些底层的知识,顺便通过博客的形式做一些小笔记,方便以后的知识梳理。1. transient的作用在java中对象只要实现了Serilizable接口,这个对象就可以被序列化,序列化模式为开发者提供了很多便利,通过实现这个接口我们无需关心序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。在实际开发过程中,某些类的部原创 2017-10-16 20:13:58 · 349 阅读 · 0 评论 -
ThreadLocal介绍与使用
1.简介变量值的共享可以使用public static变量的形式,所有的线程都使用同一个被public static修饰的变量。那么如果我们想实现每一个线程都有自己的共享变量该如何解决哪?JDK提供的ThreadLocal正是为了解决这样的问题的。类ThreadLocal主要解决的就是每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放数据的盒子,盒子中可以存储每个线程的私有变量。2.转载 2017-11-30 19:54:33 · 454 阅读 · 0 评论 -
volatile关键字
volatile关键字是与Java的内存模型有关的,需要了解内存模型相关的概念和知识,该懂的人自然懂,不懂看多几次就懂。1:java内存模型的简述 计算机在执行程序时,其运行指令都是在CPU中执行的,在执行这些指令过程中会涉及数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟其相比要慢的多,如果任原创 2019-03-29 15:41:24 · 203 阅读 · 0 评论 -
HashMap、Hashtable、ConcurrentHashMap的原理与区别
HashTable底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化 初始size为11,扩容:newsize = olesize*2+1 计算index的方法:index = (hash & 0x7FFFFFFF) % tab.lengthHa...原创 2019-05-06 15:22:56 · 74 阅读 · 0 评论 -
内存溢出和内存泄露
一:基本概念:内存泄露是指你的应用使用资源之后没有及时释放,导致应用内存中持有了不需要的资源,这是一种状态描述内存溢出是指你的应用的内存已经不能满足正常使用了,堆栈已经达到系统设置的最大值,进而导致崩溃,这事一种结果描述而且通常都是由于内存泄露导致堆栈内存不断增大,从而引发内存溢出。二:类型以及解决办法:内存泄露:1)常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一...原创 2019-05-13 21:05:01 · 414 阅读 · 0 评论 -
jsp与servlet的区别与联系
jsp和servlet的区别和联系:1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,...原创 2019-05-07 21:30:10 · 225 阅读 · 0 评论 -
JDK 和 JRE 区别
JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。简单来说:如...原创 2019-05-21 13:29:25 · 231 阅读 · 0 评论 -
== 和 equals 的区别
==我们都知道对于基本类型和引用类型 == 的作用效果是不同的,如下所示:基本类型:比较的是值是否相同; 引用类型:比较的是引用是否相同;代码示例:String x = "str";String y = "str";String z = new String("str");System.out.println(x==y); // trueSystem.out.printl...原创 2019-05-22 09:21:56 · 285 阅读 · 0 评论 -
Iterator 和 ListIterator 的区别
Iterator 可以遍历 Set 和 List 集合,而 ListIterator 只能遍历 List。 Iterator 只能单向遍历,而 ListIterator 可以双向遍历(向前/后遍历)。 ListIterator 从 Iterator 接口继承,然后添加了一些额外的功能,比如添加一个元素、替换一个元素、获取前面或后面元素的索引位置。...原创 2019-05-25 16:17:28 · 321 阅读 · 0 评论 -
怎么确保一个集合不能被修改
可以使用 Collections. unmodifiableCollection(Collection c) 方法来创建一个只读集合,这样改变集合的任何操作都会抛出 Java. lang. UnsupportedOperationException 异常。示例代码如下:List<String> list = new ArrayList<>();list. add...原创 2019-05-25 16:19:20 · 4696 阅读 · 0 评论 -
jvm内存模型和内存分配
以下内容属于java虚拟机机内存模型和内存分配内容1.什么是jvm?(1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的。(2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域。(3)JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运转载 2017-09-18 14:19:53 · 696 阅读 · 0 评论