![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
文章平均质量分 73
kk无敌怕
不努力学一波,你怎么知道自己不会头秃(-·)
展开
-
缓存之Redis(总结篇)
一、什么是RedisRedis是一种用C语言开发的数据库,Redis的数据是存在内存中的,也叫内存数据库,读写速度非常快,常常用来做缓存。Redis支持丰富的数据类型,除了k/v类型的数据,还支持list、set、hash、zset。Redis支持数据的持久化,可以将内存中的数据存在磁盘中,重新加载的时候再读取出来。Redis有灾难恢复机制,因为其支持持久化。Redis在内存快使用完之后,将内存中不用的数据存到磁盘中。Redis支持集群模式。Redis是单线程的IO多路复用模型。(Redis原创 2021-03-27 18:59:22 · 287 阅读 · 0 评论 -
布隆过滤器
布隆过滤器是bit向量或bit数组和一系列随机映射函数(哈希函数)组成的。它占用空间小并且插入和查询效果高,但是其返回的结果是概率性的,即某个值可能存在或一定不存在。如字符串“kk”,经过三个哈希函数计算出三个hash值,即映射到bit数组中三个下标,将这三个下标所对应的值设为1,过滤时,则先计算出“kk”的三个哈希值下标,在bit数组中查三个对应下标的值是否全部为1,若全部为1,则“kk”存在,否则不存在。但是若布隆过滤器中存的值太多的话,可能会存在下标重叠,即“kkk”,“hhh”各有一部分哈希值对原创 2021-03-27 18:15:45 · 188 阅读 · 0 评论 -
Java虚拟机(JVM)(一篇全在这了)
先上网上大神整理的一张思维导图,对整体理解JVM非常有帮助1、JVM内存区域JVM内存区域就是Java虚拟机在执行Java程序的过程中把它管理的内存划分为若干个不同的数据区域,也叫运行时数据区。jdk1.8和之前的版本有所不同。jdk1.8之前:jdk1.8:(1)jdk1.8和jdk1.7以及之前的区别jdk1.8和之前不同的是,jdk1.8彻底移除了方法区,取之的是元空间,元空间使用的是直接内存。jdk1.7以及之前,堆内存可以分为三个部分:新生代、老生代和永生代内存。而永生代也被原创 2021-03-18 17:13:15 · 399 阅读 · 1 评论 -
Java集合之ConcurrentHashMap
1、ConcurrentHashMap简介在之前分析HashMap集合的时候,可以看到HashMap并没有进行过同步相关的处理,所以HashMap是线程不安全的。ConcurrentHashMap集合则是线程安全且高效的map集合。所以在涉及多线程开发的时候,一般都用ConcurrentHashMap集合。ConcurrentHashMap集合的实现在jdk1.7和jdk1.8有所不同,本文主要解析jdk1.8的ConcurrentHashMap集合。2、ConcurrentHashMap存储结构原创 2021-03-15 12:11:42 · 600 阅读 · 0 评论 -
Java高并发之线程池
1、为什么使用线程池池化技术的思想主要是为了减少每次获取资源的消耗,提高资源的利用率;线程池、数据库连接池等都是这个设计思路。(1)降低资源的消耗;通过重复利用已经创建的线程降低线程新建和销毁时产生的消耗。(2)提高响应速度;当任务到达时,不需要等线程创建就可以直接执行任务。(3)提高线程的可管理性;线程是稀缺资源,如果无限的创建线程,不仅消耗系统资源,还会影响系统的稳定性,使用线程池可以同一个调优、分配和监控线程。2、Executor框架Java1.5之后通过Executor框架来实现线程池。原创 2021-03-12 15:13:30 · 314 阅读 · 0 评论 -
Java高并发之volatile 关键字
1、原创 2021-03-11 15:13:03 · 1358 阅读 · 13 评论 -
Volatile和Synchronized关键字实现单例模式(线程安全)
Volatile和Synchronized双重校验锁实现线程安全的单例模式package com.kk.first.thread;public class TestSingle { private static volatile TestSingle testSingle; private TestSingle() {} public static TestSingle getInstance() { if (testSingle == null) { synchroniz原创 2021-03-11 15:11:02 · 212 阅读 · 0 评论 -
Java高并发之synchronized关键字
1、synchronized 简介synchronized关键字是解决多线程之间访问资源的同步性。synchronized关键字可以保证被其修饰的方法或者代码块在同一时刻只能被一个线程访问。在JDK1.6之前,synchronized是重量级锁,开销大,因为监视器锁是依赖于底层的操作系统来实现的,Java的线程是映射到操作系统的原生线程之上的,就是是说要挂起或者唤醒一个线程,需要操作系统的帮忙,而操作系统实现线程之间的切换需要从用户空间切换到内核空间,这个切换耗时长,所有时间成本高,导致效率低下。在J原创 2021-03-10 20:18:20 · 194 阅读 · 0 评论 -
Java高并发之多线程
1、什么是多线程进程中有多个线程,对于多核cpu来说,多个线程可以同时执行,提高了cpu的利用率。2、为什么要用多线程(1)从计算机底层来说:线程是轻量级的进程,是程序的最小执行单元;对于多核cpu而言,多个线程可以同时执行,减少了线程间切换的开销,即提高了cpu的利用率,同时也提高了程序的效率。(2)从当前业务场景来说:目前动不动就要求百万级、千万级的并发量,而多线程正是开发高并发系统的基础。(3)在单核时代,多线程主要是用来提高cpu和IO设备的综合利用率。只有一个线程时,当cpu计算时,IO原创 2021-03-09 17:44:05 · 343 阅读 · 0 评论 -
Java高并发入门之进程与线程
1、什么是进程与线程(1)进程:是程序的一次执行过程,是系统运行程序的基本单位;系统的一个进程就是程序从创建、运行到消亡的过程。进程有自己独立的一块内存空间(虚空间)在Java中,当我们启动一个main函数其实就是启动了一个JVM进程,main函数所在的线程就是这个进程的一个线程,也叫主线程。更直观的就是,打开电脑的任务管理器,就可以看到当前Windows的运行进程。(2)线程:线程和进程相似,但是线程是比进程更小的一个执行单位,一个进程在执行过程中可以产生多个线程。与进程不同的是,多个线程共享进原创 2021-03-08 17:07:18 · 109 阅读 · 0 评论 -
Java集合之HashMap
1、HashMap简介原创 2021-03-07 13:48:07 · 91 阅读 · 3 评论 -
深入解析Java集合之ArrayList
1、ArrayList简介ArrayList底层是数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。ArrayList继承了AstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。所以ArrayList是支持快速访问,复制(克隆)和序列化的。实现了List接口,则ArrayList中的元素是有序的,可以重复的,也允许存入null值。ArrayList底层是使用Object[]存储的,是不同步的原创 2021-03-05 15:41:45 · 100 阅读 · 3 评论 -
I/O模型(同步阻塞I/O,同步非阻塞I/O,I/O多路复用,信号驱动I/O,异步I/O)
1、I/O是什么?根据冯·诺依曼结构,计算机结构分为5大部分:运算器、控制器、存储器、输入设备、输出设备。从计算机结构上来说,IO就是计算机系统和外部设备(输入设备、输出设备,硬盘等也属于外部设备)之间的通信的过程。从应用程序上看,为了保证操作系统的稳定性和安全性,一个进程的地址空间分为用户空间(User space)和内核空间(Kernel space)。我们平时运行的应用程序都是运行在用户空间的,只用内核空间才能进行系统态级别的资源操作,如文件管理、内存管理,进程通信等。而用户空间的程序是不能原创 2021-03-03 18:21:09 · 476 阅读 · 2 评论 -
深入解析Java代理模式(静态代理和动态代理)
1、什么是代理模式代理模式就是使用代理对象来替代真实对象的访问,这样就可以在不修改目标对象的基础上,增加新的功能操作,扩展目标对象的功能。简单来说,代理就是增强目标方法的功能。举例来说,比如一个service方法中有增删改查等诸多操作数据库的方法,每个方法在完成自己本身业务逻辑的情况下,还需要在业务逻辑前后增加开启事务和提交事务的逻辑。这样会造成大量的重复代码,这时候,我们就可以使用代理模式,把service作为目标对象,再新建一个增强类,这个类中有两个方法,开启事务和提交事务。再创建一个代理类,用来原创 2021-03-03 11:02:52 · 185 阅读 · 0 评论 -
深入解析Java反射原理
1.什么是反射Java反射就是在运行时,对于任意一个类,程序都能获取这个类的所有属性和方法。对于任意一个对象,程序都能调用它的所有方法和属性。这种动态获取类的信息和动态调用对象方法和属性的功能成为Java的反射机制。Java反射就是把类的各种成分映射成一个个Java对象要想解析一个类,首先需要获取到这个类的字节码文件对象,也就是.class文件。而且一个类有且只有一个.class文件。2.怎么获取类的字节码文件Java提供了四种方式来获取字节码文件对象。如cn.com.kk.TestClass这个原创 2021-03-02 10:23:45 · 166 阅读 · 2 评论 -
深入解析equals()和hashCode()方法之间的关系
一、hashCode()方法是干什么的hashCode()方法是获取哈希值,也就是获取散列码,实际上返回的是一个int值;这个哈希码的作用是确定该对象在哈希表中索引的位置。hashCode()方法定义在Object.java类中,也就是说Java中所有的类都包含有hashCode()方法。虽然每个类都有hashCode()方法,但是只有当创建这个类的散列表时,hashCode()方法才有作用(作用:用于确定这个类的对象在其散列表中的位置),其他情况,如单独创建这个类的对象或者创建这个类的数组对象,ha原创 2021-02-27 15:02:29 · 247 阅读 · 0 评论 -
深入解析equals()与“==”的差异
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-02-26 18:35:06 · 67 阅读 · 0 评论 -
深入解析Java数组转集合Arrays.asList()方法
String[] tem = {"aa","bb","cc"};List<String> list = Arrays.asList(tem);System.out.println(list.get(1));// bbSystem.out.println(list.add("dd"));// 报错 java.lang.UnsupportedOperationException在使用Arrays.asList()方法将数组转为集合后,调用集合的get()方法没有问题,但是add()方法就报原创 2021-02-26 10:28:15 · 352 阅读 · 0 评论 -
static关键字
一、在理解static关键字之前,首先理顺java中类的加载时机,在类初始化的时候加载类,类的初始化有以下4中常用场景来触发:(1)用new关键字来创建该类的对象时(2)读取该类的一个静态变量时(被final修饰的静态常量除外-编译期把结果放在常量池)(3)设置该类的一个静态变量时(被final修饰的静态常量除外-编译期把结果放在常量池)(4)调用该类的一个静态方法时目前存疑点:调用该类...原创 2019-06-28 19:07:07 · 147 阅读 · 0 评论