自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

雨季会来吗

滴滴滴滴滴滴哒哒哒哒~

  • 博客(27)
  • 收藏
  • 关注

原创 ConcurrentHashMap 1.7/1.8区别与优化点(手打知识核心点总结)

ConcurrentHashMap 1.7/1.8区别与优化点底层结构的区别1.71.8结构变化后带来的优化put方法对比1.71.8底层结构的区别1.7segment 继承 ReentrantLock 所以每个segment就是一段锁机制,也就是所谓的分段锁hashEntry和hashMap里的entry类似,每个segment对象里都有一个hashEnty[]数组,所以实际的数据是存储在hashEnty的的key,value中1.7本质上就是利用重入锁实现了分段锁的机制1.8抛弃了segm

2021-08-29 14:22:06 481

原创 Java中的锁

一、Lock接口在Java SE 5之后,并发包新增了Lock接口用来实现锁功能。相比于synchronize关键字:Lock虽然缺少了synchronize隐式获取释放锁的便捷性,但是多出了可操作性性。例如:可中断获取锁,超时获取锁等功能。二、重入锁公平锁和非公平锁:重入锁支持获取锁时公平性的选择。公平锁就是按照线程等待的时间来获取锁,保证绝对的公平性,减少“饥饿”的发生概率。...

2019-09-28 15:25:43 130

原创 ConcurrentHashMap的实现原理

ConcurrentHashMap结构ConcurrentHashMap由Segment数组和HashEntry数组构成。segment继承了ReentrantLock扮演锁的角色。HashEntry用于存储键值对数据。Segment的结构与HashMap类似,数组+链表+红黑树。要对HashEntry数组的数据进行修改要先获得Segment锁。ConcurrentHashMap初始化...

2019-09-28 12:07:26 155

原创 多线程细节整理

什么是线程?操作系统运行一个程序时会创建一个进程。线程是操作系统的最小调度单元,也叫轻量级进程,一个进程中可以有多个线程。为什么要使用多线程?1.利用好更多的处理器核心,提升执行的效率。2.更快的响应时间,复杂的需求通过多线程进行执行。3.更好的编程模型,Java多线程提供了良好一致的编程模型。程序一定按照线程的优先级执行吗?执行的优先级其实最终还是在于操作系统的执行策略,在mac ...

2019-09-25 10:09:53 152

原创 Java虚拟机面试题

JVM内存模型?Java虚拟机的运行时区域分为:程序计数器、虚拟机栈、本地方法栈、堆、方法区。五个部分。其中堆和方法区是线程公有的,其他部分是线程私有的。GC机制和原理?首先需要判断对象是否死亡。可以通过两种方式:引用计数算法、可达性分析算法。引用计数算法就是给每个对象分配一个引用计数器,每当对象被引用了一次,引用计数器+1。当引用计数器的值为0时,则判定为对象死亡进行垃圾回收。...

2019-04-25 22:26:11 205

原创 Java多线程面试题

线程池的原理,为什么要创建线程池?将预先创建好的线程放入线程池当中。当有线程请求时,则从线程池中调用线程,调用结束之后归还线程。当出现需要创建大量线程的情况时,反复的创建线程会造成大量的性能损耗。使用线程池能降低损耗,提高响应的速度,方便管理线程。线程的生命周期,什么时候会出现僵死进程?线程的生命周期分为五个部分。新建、就绪、运行、阻塞、死亡。什么是线程安全,如何实现线程安全...

2019-04-25 16:30:31 122

原创 面试题 HashMap底层实现原理

用过HashMap吗? 什么是HashMap?HashMap实现了Map接口,Map接口对键值对进行映射。Map接口的两个基本实现是HashMap和TreeMap。TreeMap保证了对象的排列次序,而HashMap是无序的。HashMap的键和值可以赋值为null。HashMap是非synchronized的,可以通过Collections工具类的synchronizedMap方法使得Ha...

2019-04-20 17:30:04 4774 1

原创 虚拟机类加载机制

一、类加载的时机类加载过程的第第一阶段:“加载” 对于 “加载” 的这个过程开始的情况虚拟机并没有进行约束,而是由虚拟机进行自由把握的。但是对于以下五种情况立即进行对类 "初始化” 的过程:使用new实例化对象,读取或调用静态对象,调用静态方法。使用Java.lang.reflect包下的方法对类进行反射调用初始化一个类时,先对其父类进行初始化虚拟机启动时先初始化主函数所在的类...

2019-04-16 20:37:40 115

原创 调优案例分析与实战

一、案例分析高性能硬件上的程序部署策略64位的JDK,缺点:内存回收导致长时间停顿。性能低于32位JDK。内存消耗大,例如类型对齐补白。=====================对于CUP资源敏感度高的场景,选择"吞吐量优先"收集器。对于追求低停顿的场景,选择CMS收集器。集群间同步导致的内存溢出堆外内存导致的溢出错误当JVM运行时抛出OutOfMemoryError...

2019-04-13 21:04:00 120

原创 虚拟机性能监控与故障处理工具

写在前面:明白了虚拟机的内存划分,内存的分配回收,这些理论指导知识。实际开发中对于数据利用现在学的工具进行监控与孤战处理。这就是工具的作用。一、JDK命令行工具jps:虚拟机进程状况工具jps -l :输出主类名和LVMID;jstat:虚拟机统计信息监视工具jstat -gc 2764 250 20 :监视Java堆状况,GC时间等信息jinfo:Java配置信息工...

2019-04-13 14:08:52 102

原创 垃圾收集器与内存分配策略

一、判断对象是否死亡1.引用计数算法:给对象中添加一个引用计数器。当对象实例每被引用一次计数器+1,每一个引用失效计数器-1;当计数器为0时,对象可被回收;缺点:对象相互引用时,计数器的值永不为0;2.可达性分析算法通过一系列的"GC Roots"对象作为起点,从这些节点开始向下搜索,所走过的路程称为引用链,当一个对象没有与任何引用链相连,则证明对象不可用;Java中可以作为GC Ro...

2019-04-12 20:19:08 122

原创 Java内存区域与内存溢出异常

一、运行时数据区域程序计数器:当前线程执行的字节码的行号计数器。字节码解释器工作就是通过改变计数器的值来选选取下一条需要执行的指令。线程私有!虚拟机栈:Java方法执行的内存模型。每个方法就是一个栈帧,在虚拟机中出栈入栈。线程私有!线程请求的栈深度大于虚拟机允许的栈深度,则抛出StackOverflowError;动态扩展时无法申请到足够的内存,则抛出OutOfMemoryError本...

2019-04-11 22:39:12 95

原创 字符串常量池和intern()方法

一、Java中两种创建字符串对象的方式public static void main(String[] args) { //使用字面值创建s1对象,对象实例存放于常量池; String s1 = "1"; //使用new关键字创建s2对象,对象实例存放于堆中; String s2 = new String("1"); }...

2019-04-09 12:44:22 166

原创 Java基础复习—多线程

一、线程的创建和启动

2019-04-05 20:29:26 297 2

原创 Java基础复习—输入/输出

1.File类文件名相关的方法String getName() 返回File对象的文件名String getPath() 返回File对象的相对路径File getAbsoluteFile() 返回File对象的绝对路径String getParent() 返回上一级父类名文件检测相关的方法boolean exists() 判断File对象所对应的的文件是否存在boolean...

2019-04-04 12:54:09 112

原创 Java基础复习—注解

一、注解注解根据是否有成员变量可分为两类:标签注解和元注解1.标签注解常用的基本Annotation:@Override限定重写父类标签,在对复杂父类重写时能进行限制提示;@Deprecated表示已过时,不可再调用否则将出错@SuppressWarnings抑制编译器警告@SafeVararag抑制堆污染警告,例如不同类型数据存入集合中产生的堆污染@Functiona...

2019-04-03 20:22:26 211

原创 JavaWeb复习—Nginx服务器

一、Nginx服务器的作用1、在压力测试时,解决高并发访问问题; 配置服务器集群;访问服务器时,通过Nginx服务器反向代理,把访问转发到服务器集群;通过Nginx代理服务器,实现负载均衡;2、统一访问的session;二、Nginx服务器的配置过程...

2019-04-03 16:04:27 120

原创 Java基础复习—异常处理

一、异常的处理机制1.使用try…catch捕获异常try { System.out.println(1/0); } catch (Exception e) { //打印异常的详细描述字符串 System.out.println(e.getMessage()); //打印异常的跟踪栈 ...

2019-04-01 23:38:25 138

原创 Java基础面试题 小记录

1. 浮点数精度丢失问题首先举例:下面的例子的输出值应当是0.9,但是实际输出是0.8999999……这和计算机的二进制工作原理相关,产生精度丢失;因为a + (-b) 时负数会转换成补码,小数位后面的补码导致精度丢失;//计算机进行的二进制运算,//在转换二进制时有些数字不能完全转换,只能接近double a = 2.0;double b = 1.1;System.out.pr...

2019-04-01 20:00:25 97

原创 Java基础复习—泛型

一、泛型的概念及意义我对于泛型的理解就是在一种形式类型,可以类比于形式参数。它的作用是在我们不清楚具体的类型时,做的一种形式定义。并且在这种定义下可以进行多种类型的定义。二、泛型的作用域泛型可以作用于:1.类 2.接口 3.方法;1.泛型类泛型类中最经典的就是各种容器类:set、list、map;在这些类中提供了对不同类型的相同方法。泛型类是在实例化类的时候指定泛型的具体类...

2019-03-31 18:38:14 153

原创 Java基础复习—集合

一、Collection接口和Iterator1.boolean add(Object c) 添加操作,返回布尔值表示状态;2.void clear(); 清除集合里所有的元素,集合长度变为0;3.boolean contains(Object c); 查找集合里是否有指定元素c,返回布尔值;4.boolean remove(Object c); 删除数组里指定元素c,返回...

2019-03-28 22:20:32 104

原创 Java基础复习—Arrays工具类

1.数组的复制//定义一个数组a;int[] a = new int[]{1,2,3,4};//新定义的数组b和a的内容相同;int[] b = Arrays.copyOf(a,4);2.数组的比较//数组的比较System.out.print(Arrays.equals(a, b));3.数组的查找//查找到数组自定义索引位置的值,输出为3System.out.print...

2019-03-27 21:47:58 108

原创 Java基本类库的复习

使用Scanner类读取文件public class ScannerFile{ public static void main(String[] args){ Scanner sc = new Scanner(new File("file.txt")) while(sc.hasNextLine()){ System.out.println(sc.next...

2019-03-27 17:33:36 112

原创 使用idea创建java web项目及spring项目

从eclipse转到idea在创建项目很多地方不同,在此记录一下创建java web项目1.如图新建项目2.如图新建两个包3.文件 -->项目结构,如图改成classes路径,存放.class文件如图所示用lib存放jar文件4.配置tomcat服务器信息,如图所示创建spring项目1.如图新建项目2.lib自动下载,在src下自主创建beans.xml文件...

2019-03-26 23:06:43 672

原创 Spring入门案案例—IoC及DI

IOC(控制反转):1. 创建service和serviceImpl对象;// 创建接口public interface UserService { public void addUser();}//创建接口实现类public class UserServiceImpl implements UserService{ public void addUser(){ ...

2019-03-26 22:23:28 94

原创 Java中基本类型的转换和String类型

基本类型转String类型利用String类型的重载方法; (注意这是属于String的方法)String a = String.valueOf(123);普通的连接方法;String a = “” + (123);利用包装类的toString方法 (注意这是属于包装类的方法)String a = Integer.toString(int a);String类...

2019-03-25 22:43:54 265

原创 Java继承多态总结。及this,static,super的用法。

欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体...

2019-03-25 20:57:19 209

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除