Java基础知识
文章平均质量分 50
包容集合,多线程,并发等,持续更新。
hello_cmy
这个作者很懒,什么都没留下…
展开
-
Java校验ip格式--正则表达式
今天写的一个小需求,校验ip格式。自然就会想到用正则表达式。话不多说,直接上代码。 String ipReg = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."原创 2021-08-17 14:31:09 · 1427 阅读 · 0 评论 -
SpringBoot实现上传图片
最近有一个需求:上传图片。这里简要介绍一下核心代码。//上传图片public BaseResponse uploadPicture(MultipartFile file, HttpServletRequest request, HttpServletResponse response) { File targetFile = null; String url = "";//存储路径 String fileName = file.g原创 2021-03-17 11:12:24 · 873 阅读 · 0 评论 -
HashMap的三种遍历方式
集合在应用以及面试中都占有很重要的位置,今天就说说HashMap的遍历方式,偶然在一次面试中被问到的。关于具体的实现,可以看源码。import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class Test { public static void main(String[] args) { HashMap<String, String> hashMap =原创 2021-03-09 17:11:13 · 12089 阅读 · 4 评论 -
我来学习B树(B-树)、B+树了
目录一、B树(B-树)1、概念2、定义3、结构介绍4、构建B树过程5、范围查找过程二、B+树1、定义2、特征3、结构介绍4、创建B+树过程5、范围查找过程6、B+树的优势一、B树(B-树)1、概念 在计算机科学中,B树(英语:B-tree)是一种自平衡的树,能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。B树,概括来说是一个一般化的二叉查找树(binary search tree)一个节点可以拥有2个以上的子节点。与自平衡二叉查找树不同,B树适用于原创 2021-01-13 17:05:22 · 446 阅读 · 0 评论 -
Java 8 stream().filter()过滤器的使用
需求现在有这么一个需求,在一个list数组里面存了一些数据,我想要取出特定条件下的数据。比如我想取出学生的年龄在10岁以上的,再比如想取出张三这个人的一些信息。思路解决如果想要拿到一组list中的一些数据,就是对数据进行一些筛选,我们的原生方法就是遍历list数组,然后作判断,拿出相应条件的数据。这是一种很麻烦的方法,所以在Java 8 就出现了一种很简单的方法,过滤器。只需要很简单的一行,就可以拿到你想要的数据。具体代码讲解package com.cc;public class .原创 2020-08-17 21:12:37 · 14505 阅读 · 0 评论 -
搞定ConcurrentHashMap!
目录1、JDK7中数据结构2、形象理解 ConcurrentHashMap3、核心源码分析4、JDK8的改进5、涉及的其他问题1、JDK7中数据结构ConcurrentHashMap是由Segment数组与HashEntry数组构成。每个ConcurrentHashMap持有一个Segement数组。而每个Segment对象由一个HashEntry数组构成。HashEntr数组其实就是一个小的...原创 2020-04-26 20:55:56 · 474 阅读 · 0 评论 -
解决ABA问题,原子引用
解决ABA问题,原子引用整体思想是乐观锁。一般的实现乐观锁的方式就是记录数据版本。 线程在提交前,根据版本号来判断是否冲突。看代码:package com.cc.cas;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicStampedReference;public cla...原创 2020-04-22 15:22:54 · 466 阅读 · 2 评论 -
CAS问题
CAS什么是CAScompareAndSet的缩写,比较并交换。如果达到期望值,那么就更新,否则,就不更新。通过例子来解释一下:package com.cc.cas;import java.util.concurrent.atomic.AtomicInteger;public class CASDemo { public static void main(String...原创 2020-04-22 14:40:03 · 321 阅读 · 0 评论 -
生产者与消费者问题(synchronized版和JUC版)
生产者和消费者问题synchronized版package com.cc.pc;/*** 线程之间的通信问题:生产者和消费者问题! 等待唤醒,通知唤醒* 线程交替执行 A B 操作同一个变量 num = 0* A num+1* B num-1*/public class A { public static void main(String[] args) { ...原创 2020-04-20 16:54:08 · 262 阅读 · 0 评论 -
HashMap与HashTable续---快速失败(fail-fast)机制
HashMap在面试中是必问的,那么提到HashMap的线程是否安全问题,就会提到HashTable 跟 ConcurrentHashMap 的一系列相关问题,那么今天来梳理一下ConcurrentHashMap 。HashMap允许key或value为null的,但是 Hashtable不允许键或值为 null 的, 这是为什么呢?因为Hashtable在我们put 空值的时候会直接抛空...原创 2020-04-16 10:34:52 · 2107 阅读 · 4 评论 -
HashTable和HashMap区别
1、继承的父类不同Hashtable继承自Dictionary类。HashMap继承自AbstractMap类。但二者都实现了Map接口。public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {}public...原创 2020-03-27 13:01:37 · 203 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier 和 Semaphore
CountDownLatch、CyclicBarrier 和 Semaphore可以参考JDK1.8的帮助文档。1、CountDownLatchpackage com.cc.add;import java.util.concurrent.CountDownLatch;public class CountDownLatchDemo { public static void m...原创 2020-04-15 11:37:29 · 116 阅读 · 0 评论 -
创建线程的四种方式
有四种方式创建线程:继承Thread类实现Runnable接口实现Callable接口创建线程池(重要,单独讲解)继承Thread类public class MyThread extends Thread { @Override public void run() { System.out.println(Thread.currentThread...原创 2020-04-15 10:46:40 · 173 阅读 · 0 评论 -
帮你轻松搞定ArrayList问题!
目录1、简单说一下ArrayList用来干嘛的?2、LinkedList、 Vector 与ArrayList3、ArrayList扩容机制4、ArrayList怎么进行新增操作的5、 ArrayList(int initialCapacity)会不会初始化数组大小?6、ArrayList怎么进行删除操作的?1、简单说一下ArrayList用来干嘛的?ArrayList是数组列表,主要用来装载...原创 2020-04-14 13:58:00 · 177 阅读 · 0 评论 -
解决集合List、set、Map不安全问题
目录1、 List不安全2、 Set不安全3、 Map不安全1、 List不安全package com.cc.unsafe;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.UUID;import java.util.concurrent.Co...原创 2020-04-11 12:49:28 · 205 阅读 · 0 评论 -
并发编程的三个重要特征
并发编程的三个重要特征原子性 : 一个操作或者多次操作,要么所有的操作全部都得到执行并且不会收到任何因素的干扰而中断,要么所有的操作都执行,要么都不执行。synchronized 可以保证代码片段的原子性。可见性 :当一个变量对共享变量进行了修改,那么另外的线程都是立即可以看到修改后的最新值。volatile 关键字可以保证共享变量的可见性。有序性 :代码在执行的过程中的先后顺序,Java...原创 2020-04-08 13:08:39 · 1288 阅读 · 0 评论 -
Lock锁
Lock锁经典卖票例子传统Synchronized来实现。package com.cc.demo1;/** * 真正的多线程开发,公司中的开发,降低耦合性 * 线程就是一个单独的资源类,没有任何附属的操作! * 1、 属性、方法 */public class SaleTicketDemo1 { public static void main(String[] arg...原创 2020-04-08 13:01:20 · 160 阅读 · 0 评论 -
Synchronized关键字
Synchronized关键字1、对Synchronized的了解synchronized关键字解决的是多个线程之间访问资源的的同步性。synchronized可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。2、使用synchronized修饰实例方法:作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁。修饰静态方法: 访问静态 synchronized 方...原创 2020-04-08 12:22:39 · 119 阅读 · 0 评论 -
volatile
volatile1、保证可见性2、不保证原子性3、禁止指令重排1、保证可见性package com.cc.tvolatile;import java.util.concurrent.TimeUnit;public class JMMDemo { //不加 volatile 程序就会死循环 //加 volatile 可以保证可见性 private vo...原创 2020-04-07 12:59:21 · 134 阅读 · 0 评论 -
线程池
三大方法,7大参数,4中拒绝策略池化技术程序的运行,本质:占用系统的资源! 优化资源的使用!=>池化技术线程池、连接池、内存池、对象池///… 创建、销毁。十分浪费资源池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。线程池的好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创...原创 2020-04-06 15:17:43 · 194 阅读 · 0 评论 -
为什么调用start()方法,不直接调用run()方法
为什么调用start()方法,不直接调用run()方法new 一个 Thread,线程进入了新建状态; 调用 start() 方法,会启动一个线程并使线程进入了就绪状态,当分配到时间片后就可以开始运行了。 start() 会执行线程的相应准备工作,然后自动执行 run() 方法的内容,这是真正的多线程工作。 而直接执行 run() 方法,会把 run 方法当成一个 main 线程下的普通方法去执...原创 2020-04-04 11:47:06 · 599 阅读 · 0 评论 -
并发与并行的区别
并发与并行的区别并发:同一时间段,多个任务都在执行(单位时间内不一定同时执行)并行:单位时间内,多个任务同时执行。原创 2020-04-04 10:35:52 · 214 阅读 · 0 评论 -
再理解进程与线程
进程进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序就是一个进程从旁创建,运行到消亡的过程。在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。线程线程是比进城更小的执行的单位。一个进程在其执行过程中可以产生多个线程。但是与进程不同的是,同类的多个线程共享进...原创 2020-04-04 09:57:17 · 136 阅读 · 0 评论 -
HashSet如何检查重复
HashSet如何检查重复当把对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,同时也会与其他加入的对象的hashcode值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同hashcode值的对象,这时会调用equals()方法来检查hashcode相等的对象是否真的相同。如果两者相同,HashSet就不...原创 2020-04-03 16:57:30 · 3642 阅读 · 3 评论 -
HashMap和HashSet的区别
HashMap和HashSet的区别学习源码,是再正确不过的方式了。咱们看一下HashSet的源码,底层是基于HashMap实现的。HashSet的源码很少,除了clone()、writeObject()、readObject() 是HashSet不得不自己实现,其他都是调用HashMap方法。HashMapHashSet实现了Map接口实现Set接口存储键值...原创 2020-04-03 10:57:21 · 167 阅读 · 0 评论 -
Java中的异常处理
Java异常类层次结构图在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。Throwable: 有两个重要的子类:Exception(异常) 和 Error(错误) ,二者都是 Java 异常处理的重要子类,各自都包含大量子类。Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示...原创 2020-04-03 09:48:02 · 160 阅读 · 0 评论 -
final、finally、finalize的区别
final、finally、finalize的区别1、final修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。例如:String 类、Math类等。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重写,但是能够...原创 2020-04-02 16:45:39 · 167 阅读 · 0 评论 -
static关键字详解
static关键字static 可以修饰变量,方法,代码块和内部类。1 、static修饰变量static修饰成员变量时:static修饰成员变量时,那么该成员变量的数据就是一个共享的数据.静态成员变量的访问方式:方式一: 使用对象进行访问。对象.属性名方式二:可以使用类名进行访问。类名.属性名注意:非静态成员变量不能类名直接访问,只能使用对象进行访问。千万不要为...原创 2020-04-01 13:15:29 · 170 阅读 · 0 评论 -
为什么重写equals方法要重写hashCode方法
为什么重写equals方法要重写hashCode方法这两个方法都是Object类中的。首先先解释一下这两个方法。上源码吧。equals()public boolean equals(Object obj) { return (this == obj);}可以看到,该方法就是判断两个对象是否是同一个对象。底层是使用 == 来实现的。咱们也知道,== 作用于引用类型,比较的是两个对...原创 2020-03-29 18:18:56 · 130 阅读 · 0 评论 -
String, StringBuffer与StringBuilder的区别
String, StringBuffer与StringBuilder的区别先看一下整体的继承结构:可知, StringBuilder与 StringBuffer都继承自 AbstractStringBuilder。1. 可变与不可变从源码中,我们可以看到String类中是使用字符数组来保存字符串的。private final char value[];此字符数组用final来修...原创 2020-03-29 15:04:34 · 85 阅读 · 0 评论 -
Java 面向对象三大特性:封装 继承 多态
Java 面向对象三大特性:封装 继承 多态封装封装指的是属性私有化,根据需要提供setter和getter方法来访问属性。即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问级别。封装目的:增强安全性和简化编程,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员。继承继承是指将多个相同的属性和方法提取出来,新建一个父类。Java中一个类只能继承一个父类,且只能继...原创 2020-03-29 11:52:04 · 193 阅读 · 0 评论 -
多线程经典问题:多个窗口卖票问题
前情提示:一共有三个窗口,共卖100张票。package piao;/** * className:Thread * Package:piao * Description: * * @Date:2019/12/3 9:29 * @Author:cc */public class Ticket implements Runnable { //将票数用stati...原创 2019-12-03 10:57:23 · 872 阅读 · 0 评论 -
进程与线程的区别?
1.什么是进程?是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是系统中正在运行的一个程序,程序一旦运行就是进程。进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间...原创 2019-12-03 09:02:38 · 328 阅读 · 0 评论 -
sleep()和wait()有什么区别?
sleep() 是 Thread 类的静态本地方法;wait() 是Object类的成员本地方法 sleep() 方法可以在任何地方使用;wait() 方法则只能在同步方法或同步代码块中使用,否则抛出异常Exception in thread "Thread-0" java.lang.IllegalMonitorStateException sleep() 会休眠当前线程指定时间,释放 CPU...原创 2019-12-02 11:36:49 · 156 阅读 · 0 评论 -
java中多线程执行时,为何调用的是start()方法而不是run()方法?
Thead类中start()方法和run()方法的区别 :1,start()用来启动一个线程,当调用start()方法时,系统才会开启一个线程,通过Thead类中start()方法来启动的线程处于就绪状态(可运行状态),此时并没有运行,一旦得到CPU时间片,就自动开始执行run()方法。此时不需要等待run()方法执行完也可以继续执行下面的代码,所以也由此看出run()方法并没有实现多线程。...原创 2019-12-02 10:36:32 · 205 阅读 · 0 评论 -
Java小项目-----学生信息管理系统
看完Java课本之后,我就开始着手写个小项目,时间也挺长的,里面有不足的望之后再改进吧。这个小项目使用的是以下版本:eclipse其他版本当然也可以运行。在安装之前要配置一下环境,具体可百度。这里就不提供了。JDBC驱动这里用的是Mysql数据库你可以在官网下载按着步骤来安装,这里有一个很简单的mysql安装,可以自行下载。链接:https://pan.bai...原创 2019-07-12 14:21:37 · 1304 阅读 · 0 评论 -
Java------Vector的使用
Vector 可实现自动增长的对象数组。java.util.vector提供了向量类(Vector)以实现类似动态数组的功能。创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。对于预先不知或者不愿预先定义数组大小,并且需要频繁地进行查找,插入,删除工作的情况,可以考虑使用向量类。向量类提供了三种构造方法:...原创 2019-07-09 17:17:35 · 326 阅读 · 0 评论 -
Java------JTable的使用
JTable,表格。JTable 是用来显示和编辑常规二维单元表。表格组件和其他普通组件一样,需要添加到中间容器中才能显示,添加表格到容器中有两种方式:添加到普通的中间容器中(如上面代码实例所示的添加到JPanel),此时添加的jTable只是表格的行内容,表头(jTable.getTableHeader())需要额外单独添加。此添加方式适合表格行数确定,数据量较小,能一次性显...原创 2019-07-09 16:53:35 · 3938 阅读 · 0 评论 -
Java基础知识
关键字:都是小写特殊:main不是关键字标识符:就是给类,接口,方法,变量等起名字组成规则:英文大小写字母数字字符_和$注意事项:不能以数字开头不能是关键字Java语言中严格区分大小写常见的命名规则:见名知意包:就是文件夹,用于把相同的类名进行区分全部小写类或者接口:一个单词:单词的首字母必须大写多个单词:每个单词的首字母必须大写方法或者变量:...原创 2019-07-09 14:22:06 · 122 阅读 · 0 评论 -
JFrame —添加背景图片
添加背景图片有两种方法:1.Jpanel类的paintComponent(Graphics g)重新绘制背景图片2.利用LayeredPane为Swing控件增加了深度, 由低到高的层次是:Default,Palette,Modal,PopUp,Drag。方法一:package examplee;public class Java_JFrame { public stat...原创 2019-04-01 20:08:32 · 2476 阅读 · 0 评论