![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础知识
文章平均质量分 65
-星雨-
缘不知所起
展开
-
java8时间API
java8时间API1 例子1 例子package com.javaTechnology;import java.time.*;import java.time.temporal.ChronoUnit;import java.util.Set;/** * @author LanceQ * @date 2022年05月29日 10:54 * 任何方法都不会更改所操作的类 */public class TimeTest { public static void main(Str原创 2022-05-29 12:29:36 · 262 阅读 · 0 评论 -
BIO的了解
BIO1 BIO同步阻塞1.1 介绍1.2 代码1 BIO同步阻塞1.1 介绍Java BIO就是传统的java io编程,其相关的类和接口在java.ioBIO(blocking l/0):同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器。)BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK原创 2022-03-06 20:33:29 · 442 阅读 · 0 评论 -
java与json的转化
java与json的转化1 JsonLib示例2 Jackson示例3 Gson示例4 Fast示例5 实体类1 JsonLib示例package com.jsonDemo;import net.sf.json.JSONObject;import java.util.HashMap;import java.util.Map;/** * @author LanceQ * @date 2022年01月01日 15:40 */public class JsonLibDemo {原创 2022-01-02 13:25:46 · 760 阅读 · 0 评论 -
IDEA快捷键记录
IDEA快捷键1 快捷键1 快捷键查找快捷键 介绍Ctrl + F 在当前文件进行文本查找Ctrl + R 在当前文件进行文本替换Shift + Ctrl + F 在项目进行文本查找Shift + Ctrl + R 在项目进行文本替换Shift + Shift 快速搜索Ctrl + N 查找classCtrl + Shift + N 查找文件Ctrl + Shift + Alt + N 查找symbol(查找某个方法名)跳转切换快捷键 介绍Ctrl + E 最近文件Ctrl原创 2021-12-12 17:22:22 · 519 阅读 · 0 评论 -
Java8特性记录
Java8特性1 Lambda表达式1.1 案例一1.2 案例二2 函数式接口(functional)3 方法引用与构造器引用4 Stream API4.1 并行流4.2 串行流5 Optional类6 其他1 Lambda表达式Lambda是一个匿名函数,可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。1.1 案例一package com.java8;import原创 2021-12-04 20:20:28 · 400 阅读 · 0 评论 -
Java8 Stream
Java8 Stream1 stream介绍1.1 什么是Stream?2 实现2.1 Stream可以通过集合数组创建2.2 Optional2.3 代码案例1 stream介绍1.1 什么是Stream?Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。Stream可以由数组或集合创建,对流的操作分为两种:中间操作,每次返回一个新的流,可以有多个。终端操作,每个流只能进行一次终端操作,终端操作结束后流无法转载 2021-08-15 21:53:35 · 169 阅读 · 0 评论 -
stream()
stream()1 stream()1.1 stream().filter()1.2 stream().map()1.3 stream().sorted()2 全部代码1 stream()1.1 stream().filter()stream().filter()一般适用于list集合,主要作用就是条件查询,从集合中查询想要的数据。filter里面的参数user是指集合里面的每一项import java.util.ArrayList;import java.util.List;import ja原创 2021-08-14 20:46:06 · 3905 阅读 · 1 评论 -
查找二进制中1的个数
查找二进制中1的个数public class NumberOfBinaryOnes { public static void main(String[] args) { int a=199; //方法一 NumberOfBinary(a); //方法二 String x = Integer.toBinaryString(a); System.out.println(x); char[]原创 2021-07-16 21:16:14 · 118 阅读 · 0 评论 -
String类型的字符串与ASCII之间的转换
String类型的字符串与ASCII之间的转换public class CharToAscii { public static void main(String[] args) { CharToAscii.AscToString(); CharToAscii.StringToSAsc(); char a='0'; int b=22307; //char类型参与四则运算的时候是转化成asciii码的, 字符‘0’的asc原创 2021-07-14 21:23:21 · 4072 阅读 · 0 评论 -
String 类常用方法
String 类常用方法1 indexOf():返回指定字符的索引。2 charAt():返回指定索引处的字符。3 replace():字符串替换。4 trim():去除字符串两端空白。5 split():分割字符串,返回一个分割后的字符串数组。6 getBytes():返回字符串的 byte 类型数组。7 length():返回字符串长度。8 toLowerCase():将字符串转成小写字母。9 toUpperCase():将字符串转成大写字符。10 substring():截取字符串。11 equals转载 2021-07-13 21:25:14 · 100 阅读 · 0 评论 -
static
static静态变量:也叫类变量,属于类的。类中所以的实例都共享静态变量,也可以通过类名来访问它。静态变量在内存中只存在一份。静态方法:静态方法在类加载的时候就存在了,它不依赖于任何实例。所以静态方法必须要实现,也就是说它不能是抽象方法。只能访问所属类的静态字段和静态方法,方法中不能有this或者super关键字。静态代码块:静态代码块在类初始化的时候创建。静态内部类:非静态内部类依赖于外部类的实例,而静态内部类则不需要,静态内部类不能访问外部类的非静态变量和方法;初始化顺序:静态变量和静态代转载 2021-07-11 22:13:13 · 82 阅读 · 0 评论 -
if与else
if与else1 替换If-Else的方法1.1 完全不必要的Else块1.2 价值分配1.3 前提条件查询1.4 将If-Else的else动作封装起来—完全避免If-Else1 替换If-Else的方法 if(condition){ //do something }else if(otherCondition){ //do something else }else{ //Defaul原创 2021-07-10 13:20:59 · 687 阅读 · 0 评论 -
&与&&的区别
&与&&的区别Java中&&和&都是表示与的逻辑运算符,都表示逻辑运算符and,当两边的表达式都为true的时候,整个运算结果才为true,否则为false。&&:有短路功能,当前面的第一个表达式的值为false的时候,则不再计算第二个计算式。&:不管第一个表达式的结果是否为true,第二个都会执行。除此之外,&还可以用做位运算符:当&两边的表达式不是Boolean类型的时候,&表示位运算符。..原创 2021-07-09 22:04:27 · 112 阅读 · 0 评论 -
throw 和 throws
throw 和 throws1 throw2 throws3 区别1 throwthrow关键字,用于主动地抛出异常;正常情况下,当除数为0的时候,程序会主动抛出ArithmeticException;当时如果我们想要除数为1的时候也抛出ArithmeticException异常,就可以使用throw关键字主动地抛出异常。throw new Exception_class("异常类错误信息!");语法也非常简单,throw 关键字后跟上 new 关键字,以及异常的类型还有参数即可。pub转载 2021-07-08 20:52:37 · 442 阅读 · 0 评论 -
== 和 equals
== 和 equals== :如果比较的对象时基本数据类型,则比较的是数值是否相等;如果比较的是引用数据类型,则比较的是对象的地址是否相等。public class EqualsDemo { public static void main(String[] args) { int a=10; int b=10; StringBuilder sb = new StringBuilder(10); StringBuilder sb1 =原创 2021-07-07 21:17:33 · 52 阅读 · 0 评论 -
三次握手和四次挥手
三次握手和四次挥手1 为什么三次握手2 为什么四次挥手1 为什么三次握手三次握手的目的是为了建立可靠的通讯信道,就是双方确定自己与对方的发送和接受功能都正常。第一次握手:客户端什么都不能确认;服务端确定自己可以收到对方发送的信息,自己的接收正常。第二次握手 :客户端确认了:自己的发送和接收正常,对方的发送正常;服务端确认了:自己的接收和对方的发送正常。第三次握手:客户端确认了:自己的发送和接收正常,对方的发送和接收正常;服务端确认了:自己的发送、接收正常,对方的发送、接收正常。生活例子:就像原创 2021-07-05 21:19:48 · 79 阅读 · 1 评论 -
多线程开发
多线程开发1 多线程开发示例1.1 应用背景1.2 设计要点1.2.1 防止重复1.2.2 失败机制1.2.3 线程池选择1.2.4 核心代码2 问题2.1 什么是线程2.2 Java里怎么创建线程2.3 说说线程的生命周期和状态2.4 线程死锁2.5 怎么避免死锁呢?2.6 说说 synchronized的用法吧2.7 除了使用synchronized,还有什么办法来加锁吗?详细说一下2.8 说说synchronized和Lock的区别2.9 你提到了synchronized基于jvm层面,对这个有了解吗转载 2021-06-24 22:50:20 · 499 阅读 · 0 评论 -
List去除重复数据
List去除重复数据1 使用LinkedHashSet删除arraylist中的重复数据2 使用java8新特性stream进行List去重3 利用HashSet不能添加重复数据的特性4 利用List的contains方法循环遍历5 双重for循环去重1 使用LinkedHashSet删除arraylist中的重复数据LinkedHashSet是在一个ArrayList删除重复数据的最佳方法。LinkedHashSet实现了:删除重复数据保持添加到其中的数据的顺序在下面的示例中使用Linke原创 2021-06-19 20:25:20 · 232 阅读 · 0 评论 -
abstract和interface的区别
abstract和interface的区别抽象类可以有构造方法,接口中不能有构造方法。public abstract class AbstractDemo { public AbstractDemo() { }}public interface InterDemo { //Interface abstract methods cannot have body// public InterDemo(){// // };}抽象类中原创 2021-06-19 14:12:39 · 499 阅读 · 0 评论 -
stream().map().collect()
stream().map().collect()1 示例2 stream()优点1 示例有一个集合:List users = getList(); //从数据库查询的用户集合现在想获取User的身份证号码;在后续的逻辑处理中要用;常用的方法我们大家都知道,用for循环,List users = getList();List idcards=new ArrayList();//定义一个集合来装身份证号码for(int i=0;i<users.size();i++){ idcard转载 2021-06-18 13:49:18 · 1110 阅读 · 0 评论 -
sleep()和wait()
sleep和wait1 sleep2 wait3 区别、同1 sleep每个对象都有一个锁来控制同步访问,Synchronized关键字可以和对象的锁交互,来实现同步方法或同步块。sleep()方法正在执行的线程主动让出CPU(然后CPU就可以去执行其他任务),在sleep指定时间后CPU再回到该线程继续往下执行(注意:sleep方法只让出了CPU,而并不会释放同步资源锁!);sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,原创 2021-06-17 20:21:53 · 1094 阅读 · 1 评论 -
红黑树、BST(二叉搜索树)、AVL树(平衡二叉搜索树)
红黑树相比于BST和AVL树有什么优点?1. 红黑树(不追求绝对平衡的二叉搜索树)1.1 红黑树的应用场景2. BST(二叉搜索树)2.1 BST的搜索3. AVL(平衡二叉搜索树)4. 红黑树相比于BST(二叉搜索树)和AVL(平衡二叉搜索树)树有什么优点?1. 红黑树(不追求绝对平衡的二叉搜索树)R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树的特性:每个节点原创 2021-06-10 17:10:14 · 522 阅读 · 1 评论 -
final,finally,finalize的区别
final,finally,finalize的区别1 final1.1 修饰类1.2 修饰方法1.3 修饰变量2 finally3 finalize4 区别4.1 简单区别:4.2 中等区别:4.3 详细区别4.3.1 final4.3.1.1 定义变量4.3.1.2 定义方法4.3.1.3 定义类4.3.2 finally4.3.3 finalize1 final在java中,final可以用来修饰类、方法和变量(成员变量或局部变量)。1.1 修饰类当用final修饰类的时,表明该类不能被其他类原创 2021-06-09 23:35:30 · 187 阅读 · 0 评论 -
HashMap的实现原理
HashMap的实现原理HashMap是基于Hash算法实现的,我们通过put(key,value)存储,get(key)获取。当传入key时,HashMap会根据key.hashCode()计算出hash值,根据hash值将Value保存在bucket里。当计算出的hash值相同时,就将其称之为hash冲突。HashMap的做法是用链表或者红黑树存储相同hash值的value,当冲突的个数比较少的时候,使用链表,当链表的长度超过8的时候,HashMap会先去查看数组的大小,如果数组没有达到最大值64原创 2021-06-09 19:18:36 · 171 阅读 · 0 评论 -
正则匹配字符集
正则匹配字符集1 简写字符集2 零宽度断言(前后预查)2.1 ?=... 正先行断言(就是加判断条件,选其中满足条件的,条件在后)2.2 ?!... 负先行断言(就是加条件判断,选其中不满足条件的,条件在后)2.3 ?<= ... 正后发断言(就是加判断条件,选其中满足条件的,条件在前)2.4 ?<!... 负后发断言(就是加条件判断,选其中不满足条件的,条件在前)3 标志3.1 忽略⼤⼩写 (Case Insensitive)3.2 全局搜索 (Global search)3.3 多⾏修饰原创 2021-06-08 22:34:38 · 532 阅读 · 1 评论 -
运算符示例
运算符示例1 点运算符 .2 字符集3 否定字符集4 重复次数4.1 * 号4.2 + 号4.3 ?号4.4 {} 号4.5 (...) 特征标群4.6 | 或运算符4.7 \ 转码特殊字符4.8 锚点4.8.1 ^号4.8.2 `$`号1 点运算符 .. 是元字符中最简单的例⼦。. 匹配任意单个字符,但不匹配换⾏符。例如,表达式 .ar 匹配⼀个任意字符后⾯跟着是 a 和 r 的字符串。".ar" => The car parked in the garage.只匹配一个car"原创 2021-06-08 21:52:08 · 393 阅读 · 0 评论 -
什么是正则表达式?
什么是正则表达式?1. 什么是正则表达式?2. 基本匹配3. 元字符1. 什么是正则表达式?正则表达式是⼀组由字⺟和符号组成的特殊⽂本,它可以⽤来从⽂本中找出满⾜你想要的格式的句⼦。⼀个正则表达式是⼀种从左到右匹配主体字符串的模式。“Regular expression”这个词⽐较拗⼝,我们常使⽤缩写的术语“regex”或“regexp”。正则表达式可以从⼀个基础字符串中根据⼀定的匹配模式替换⽂本中的字符串、验证表单、提取字符串等等。想象你正在写⼀个应⽤,然后你想设定⼀个⽤户命名的规则,让⽤户名原创 2021-06-07 21:25:03 · 12614 阅读 · 2 评论 -
为什么要用线程池?
为什么要用线程池?池化技术的思想主要是为了减少每次获取资源的消耗,提高资源的利用率。池化思想的应用:线程池、数据库连接池、Http连接池等等。线程池提供了一种限制和管理资源的方法(包括执行一个任务)。每个线程池还维护一些基本统计信息,例如:已完成任务的数量。好处:降低资源的消耗:通过重复利用已创建的线程来降低线程创建和销毁时的系统资源消耗。提高响应时间:当任务到达时,任务可以不需要等待线程创建就可以立刻执行。提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗大量的系统资源,还会原创 2021-06-07 20:34:31 · 90 阅读 · 0 评论 -
synchronized 关键字和 volatile 关键字的区别
synchronized 关键字和 volatile 关键字的区别synchronized关键字和volatile关键字是两个互补的存在,而不是对立的存在。volatile关键字是线程同步的轻量级实现,而synchronized是线程同步的重量级实现,从性能上看,肯定是volatile要快一点。volatile关键字只能修饰变量,而synchronized关键字可以修饰代码块和方法。volatile关键字可以保证数据的可见性但不能保证原子性,而synchronized两者都可以保证。原创 2021-06-07 17:53:37 · 437 阅读 · 0 评论 -
判断相等 a.equals(b)和Objects.equals(a, b)
@[TOC](判断相等 a.equals(b)和Objects.equals(a, b))1. 值是null的情况a.equals(b),当a 是null时, 抛出NullPointException异常。a.equals(b), a不是null, b是null, 返回false。Objects.equals(a, b)比较时, 若a 和 b 都是null, 则返回 true, 如果a 和 b 其中一个是null, 另一个不是null, 则返回false。注意:不会抛出空指针异常。null.转载 2021-06-07 16:15:15 · 223 阅读 · 0 评论 -
GC是什么时候触发的
GC是什么时候触发的1 Scavenge GC2 Full GC3 常见的垃圾收集器 下面一张图是HotSpot虚拟机包含的所有收集器由于对象进行了分代处理,因此垃圾回收区域、时间也不一样。GC有两种类型:Scavenge GC和Full GC。1 Scavenge GC一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Scavenge GC,对Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。这种方式的GC是对年轻代转载 2021-06-04 20:30:36 · 2492 阅读 · 0 评论 -
哪些内存需要回收?
哪些内存需要回收?1 引用计数算法1.1 算法分析1.2 优缺点1.3 代码2 可达性分析算法3 Java中的引用你了解多少4 对象死亡(被回收)前的最后一次挣扎5 方法区如何判断是否需要回收 JVM的内存结构包括五大区域:程序计数器、虚拟机栈、本地方法栈、堆区、方法区。其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生、随线程而灭,因此这几个区域的内存分配和回收都具备确定性,就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而Java堆区和方法区则不一样转载 2021-06-04 20:01:11 · 271 阅读 · 0 评论 -
常用的垃圾收集算法
常用的垃圾收集算法1 标记-清除算法2 复制算法3 标记-整理算法4 分代收集算法4.1 年轻代(Young Generation)的回收算法4.2 年老代(Old Generation)的回收算法4.3 持久代(Permanent Generation)的回收算法1 标记-清除算法 标记-清除算法采用从根集合(GC Roots)进行扫描,对存活的对象进行标记,标记完毕后,再扫描整个空间中未被标记的对象,进行回收,如下图所示。标记-清除算法不需要进行对象的移动,只需对不存活的对象进行处理,原创 2021-06-04 19:26:23 · 232 阅读 · 1 评论 -
什么是面向对象?
什么是面向对象?1. 面向过程2. 面向对象3. 面向对象的三大特性:4. 六大基本原则:面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了。面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们我们使用的就是面向对象。1. 面向过程优点:性能比面转载 2021-06-01 22:06:27 · 53 阅读 · 0 评论 -
Collection
Collection1. List集合介绍:2. ArrayList底层实现原理3. Vector底层实现原理4. LinkeList原理说明:对于以上的框架图有如下几点说明所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。抽象类:5个抽象类(长虚线表示),对集合接转载 2021-05-31 16:08:20 · 98 阅读 · 0 评论 -
实现单例模式
实现单例模式public class SingletonDemo { /** * 禁止指令重排volatile */ private static volatile SingletonDemo instance = null; // private static SingletonDemo instance=null; private SingletonDemo() { System.out.println(Thread.curre原创 2021-05-28 19:18:35 · 56 阅读 · 0 评论 -
多线程、死锁
多线程1. 为什么要使用多线程?使用多线程可能带来什么问题?2. 造成线程死锁的原因有哪些?2.1 产⽣死锁必须具备以下四个条件:2.2 如何避免线程线程死锁呢?1. 为什么要使用多线程?使用多线程可能带来什么问题?使用多线程是为了提高程序的执行效率和运行速度。但是如果使用不当的话,不仅不能提高执行效率,还会造成很多问题,比如:线程不安全、内存泄露,死锁等。2. 造成线程死锁的原因有哪些?线程死锁:多个线程同时被阻塞,他们中的一个或者多个都在等待某个资源被释放。由于线程被无限期阻塞,因此程序不可能原创 2021-05-28 17:14:08 · 78 阅读 · 0 评论 -
进程和线程的区别
进程和线程的区别一个进程中可以有多个线程,多个线程共享进程中的堆和方法区(jdk1.8后的元空间)资源。但是每一个线程都有自己的程序计算器、虚拟机栈和本地方法栈。线程是进程划分出来的更小的运行单位,一个进程在其执行过程中可能会产生多个线程。线程和进程最大的区别在于基本上各个进程是独立的,而各线程则不一定,因为同一个进程中的各个线程有可能会相互影响。线程的执行开销小,但不利于资源的管理和利用,而进程的执行开销大,但是有利于资源的管理和应用。参考:JavaGuide面试突击版...原创 2021-05-28 16:16:05 · 40 阅读 · 0 评论 -
Java异常体系
Java异常体系1. Throwable2. Exception2.1 RuntimeException:2.2 非RuntimeException3. Error4. Error和Exception的区别4.1 从概念角度解析java的异常处理机制4.2 从责任角度看:1. ThrowableThrowable下分为Error和Exception2. Exception2.1 RuntimeException:NullPointerException — 空指针引用异常ClassCastEx原创 2021-05-27 15:20:51 · 68 阅读 · 0 评论 -
重载和重写的区别
重载和重写的区别1. 重载2. 重写3. 区别1. 重载重载就是同一个类中,相同名字的方法根据传入的不同参数,作出不同的选择。重载:发生在同一个类中,方法名必须相同,参数类型、参数个数、参数顺序不同,访问修饰符、方法返回值可以不同。代码如下: public Person(String name, Integer age) { this.name = name; this.age = age; } public Person(String na原创 2021-05-27 13:49:13 · 818 阅读 · 1 评论