Java学习
文章平均质量分 74
Java学习中一些学习笔记,个人心得
爱上布洛格的鸭鸭
这个作者很懒,什么都没留下…
展开
-
Java8新特性 CompletableFuture
Java8新特性 CompletableFuture原创 2022-11-17 16:41:08 · 471 阅读 · 0 评论 -
Java注解+AOP在项目中的使用
主要介绍了java注解,Aop相关定义以及注解和Aop在项目中的配合使用原创 2022-08-19 16:43:33 · 2108 阅读 · 0 评论 -
Kafka学习笔记_day01
Kafa中间件的学习笔记汇总原创 2022-07-17 17:22:11 · 435 阅读 · 0 评论 -
Java定时任务的几种实现方式
java中完成定时任务的几种实现方式归纳总结原创 2022-07-16 15:54:54 · 1166 阅读 · 0 评论 -
JVM常见面试题汇总笔记
文章目录第一章:JVM虚拟机的介绍1.1虚拟机的分类1.2Java虚拟机的整体架构1.3 Java代码的执行流程1.4 Java的架构模型1.5 Java的生命周期1.6 JVM的发展历程(重点几个JVM)第二章 类加载子系统篇章2.1 类加载子系统的相关概念类的加载过程2.2 类加载器的分类2.3 类加载器的其他问题第三章 运行时数据区概述及其过程第四章 程序计数器(PC寄存器)4.1 相关概念介绍4.2常见面试问题第五章 Java虚拟机栈5.1 虚拟机栈的概述5.2 栈的存储单位5.3 局部变量表(Lo原创 2021-10-12 19:54:38 · 709 阅读 · 0 评论 -
String的常见面试难点汇总
String的常见面试题1. String的基本特性String:字符串,使用一对""引起来进行表示两种实例化的方式:String str1 = "abc";//字面量的方式String str2 = new String("ABC");//new对象的方式String声明为final的,不可以被继承Spring实现了Serializable接口:表示字符串是支持序列化的,Spring实现了Comparable接口:表示String是可以进行比较的String在jdk8即以前内部定义了原创 2021-10-09 20:39:02 · 195 阅读 · 0 评论 -
HashMap集合的常见面试题汇总以及源码分析
HashMap集合的常见面试题汇总以及源码分析1.HashMap集合简介 HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突**(两个对象调用的hashCode方法计算的哈希码值一致导致计算原创 2021-09-29 10:31:28 · 405 阅读 · 0 评论 -
Java基础知识面试题汇总
文章目录Java概述部分什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系JVMJREJDK什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么?采用字节码的好处:先看下java中的编译器和解释器:什么是Java程序的主类?应用程序和小程序的主类有何不同?Java和C++的区别Oracle JDK 和 OpenJDK 的对比Java基础语法部分Java有哪些数据类型基本数据类型引用数据类型switch 是否能作用在 byte 上,是否能作用在 long原创 2021-09-24 14:33:55 · 883 阅读 · 0 评论 -
Java多线程面试题汇总
Java多线程面试笔记文章目录Java多线程面试笔记1. 基本概念问题线程问题为什么要使用并发编程(并发编程的优点)并发编程有什么缺点进程和线程的比较概念:为什么会有线程的概念?进程和线程的区别什么是多线程,多线程的优劣?多线程的好处:多线程的劣势:什么是线程安全? 如何保证线程安全?什么是线程安全?多线程编程的三个核心概念(important!)如何能够保证线程安全?第一种方式 : 互斥同步PS:Synchronized(重量级锁)的实现原理同步方法对象头知识点Monitor对象知识点Synchroni原创 2021-09-24 09:30:22 · 162 阅读 · 0 评论 -
Java后端学习路线图
原创 2021-09-17 11:00:20 · 231 阅读 · 0 评论 -
Java的面向对象知识点梳理
Java的面向对象知识点梳理1. 面向对象和面向过程面向过程:面向过程就是把一个问题按照从左到右,从上到下的解决方案分解成N个小步骤然后挨个去执行,自顶向下,逐步细化面向对象:面向对象和面向过程思想完全不同,它是需要根据问题先抽象一个模型(即我们通常说的类),然后把这个模型实例化(也就是我们通常说的对象)来使用,其中在模型中我们封装了解决问题需要的一些属性和方法,通过将该模型实例化成对象,然后调用模型中的方法来解决.面向对象和面向过程的比较面向过程简单直接,易于入门理解,模块化程度较低。面向原创 2021-09-06 21:49:50 · 462 阅读 · 0 评论 -
Java的异常处理
Java的异常处理基本介绍异常对象都是派生于Throwable类的一个实例,如果我们的内置的异常类不能满足需求,我们可以自定义异常进行处理所有的异常都是由Throwable继承而来的,在下一层分为两个部分:Error类Exception类其中,Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误而我们重点关注的是Exception层次结构。这个层次结构又分解为了两个部分:RuntimeException其他异常划分标准为:由程序错误导致的异常属于RuntimeEx原创 2021-09-04 21:45:56 · 113 阅读 · 0 评论 -
java内部类的相关知识点
Java的内部类1. 内部类的介绍依据《Java核心技术》中所说,内部类即是一个定义在另一个类中的类,使用内部类的主要原因在于:内部类的方法可以访问该类定义所在的作用域中的数据,包括私有的数据内部类可以对同一个包中的其他类进行隐藏起来如果我们想要定义一个回调函数,而又不想编写大量的代码,那么我们可以使用匿名内部类比较便捷我们首先来看一个简单的内部类的例子package com.feng;public class OuterClass { private int age = 10原创 2021-09-03 14:51:49 · 205 阅读 · 0 评论 -
Static关键字
static关键字static能够修饰的结构:属性方法代码块内部类static修饰属性:静态变量静态变量是由类中的对象所共享的。当其中的一个对象修改了静态变量以后,会导致其他对象调用此静态变量的时候,也是修改过了的静态变量会在类加载过程中的链接阶段进行初始化操作,其中:准备阶段进行默认零值的初始化初始化阶段进行静态变量的赋值操作需要注意的点:静态变量随着类的加载而加载,可以通过类名.静态变量的方式进行调用静态变量的加载早于对象的创建,在上面已经提到了由于类只会加原创 2021-09-03 10:29:51 · 84 阅读 · 0 评论 -
synchronized
Synchronized笔记1. Java内存模型(JMM)Java内存模型是一套规范,描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取变量这样的底层细节,Java内存模型是对共享数据的可见性、有序性、和原子性的规则和保障。2. synchronized 保证三大特性[可见性、有序性、和原子性]synchronized能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。synchronized(锁对象) {原创 2021-08-28 10:04:37 · 405 阅读 · 0 评论 -
Map的合并操作
两个Map的合并操作两个map进行合并有多种方式实现,以下列举出几种常见的合并方式:方式1:使用map的merge()方法进行合并public class MergeTwoMaps { public static void main(String[] args) { Map<Integer,Integer> map1 = new HashMap<>(); map1.put(1,1); map1.put(2,2);原创 2021-08-17 15:23:57 · 4664 阅读 · 0 评论 -
阻塞队列和非阻塞队列
Java阻塞队列和非阻塞队列1. 什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。JDK7 提供了 7 个阻塞队列。分别是:ArrayBlockingQueue :一个由数组结构组成的有界原创 2021-08-17 14:57:46 · 1149 阅读 · 0 评论 -
Java8 Stream流
Stream流介绍Stream流是一种数据渠道,是用于操作数据源(集合,数组等)生成的元素序列。Stream主要用于对于集合迭代器的增强,使之能够完成更加高效的聚合操作(例如:过滤,排序,统计分组等等),或者大批量数据的操作。此外Stream流和lambda表达式的结合使用可以大大增强编码的效率,可读性很强。注意:流是一次性的,它自己不会存储元素流不会改变源对象,相反,他们会返回一个持有结果的新的Strean流流操作时延迟执行的,这就意味着他们会等到需要结果的时候才去执行流不可以重复使用原创 2021-08-13 15:17:27 · 374 阅读 · 0 评论 -
Lambda表达式
Lambda表达式一、Lambda表达式简介什么是Lambda?Lambda是 JAVA 8添加的新特性,说白了,Lambda是一个匿名函数同时,它也称为闭包,Lambda表达式允许把函数作为一个方法的参数(函数作为参数传递到方法中)为什么使用Lambda使用Lambda表达式可以对一个接口的方法进行非常简洁的实现Lambda对接口的要求虽然可以使用Lambda表达式对某些接口进行简单的实现,但是并不是所有的接口都可以用Lambda表达式来实现,要求接口中定义的必须要实现的抽象方法只能是一个原创 2021-08-13 15:16:27 · 136 阅读 · 0 评论 -
Map按照Value值进行排序的实现
Map按照Value值进行排序的实现map.entrySet().stream().sorted(Comparator<? super T> comparator)给定一个map,存储一个nums数组中每一个数字存储的次数,最后将这个map按照value值,即出现的次数进行排序第一种方式:返回的是降序以后的新的map@Testpublic void test04() { int[] nums = {1,2,3,1,3,4,6,7,9,9,1,3,4,5}; Map&l原创 2021-08-12 16:37:56 · 4201 阅读 · 1 评论 -
Map的getOrDefault(Object key, defaultValue)方法使用
Map的getOrDefault(Object key, defaultValue)方法使用v getOrDefault(Object key, defaultValue);例如:我们定义一个HashMap,用来存储一个数组中的数字已经其出现的次数@Testpublic void test01() { //定义一个hashmap,我们存储一个数组中的数字已经其出现的次数 int[] nums = {1,2,3,1,3,4,6,7,9,9,1,3,4,5}; //1. 存储&原创 2021-08-12 16:34:41 · 240 阅读 · 0 评论 -
Map的几个高级技巧性使用方法
Map的几个高级技巧性使用方法高级使用1:v getOrDefault(Object key, defaultValue);例如:我们定义一个HashMap,用来存储一个数组中的数字已经其出现的次数@Testpublic void test01() { //定义一个hashmap,我们存储一个数组中的数字已经其出现的次数 int[] nums = {1,2,3,1,3,4,6,7,9,9,1,3,4,5}; //1. 存储<k,v>时,如果key不存在,则设置原创 2021-08-12 16:33:28 · 670 阅读 · 0 评论 -
int数组,Integer数组以及List<Integer>之间的相互转换
int数组,Integer数组以及List之间的相互转换List转成Integer数组list.toArray(new Integer[list.size()])@Testpublic void test01() { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); Integer[] array = list.toArray(原创 2021-08-12 15:28:57 · 1322 阅读 · 0 评论 -
两个集合使用流 + Lambda表达式进行多项操作【包括交集,差集,并集等等】
两个集合使用流 + Lambda表达式进行多项操作定义两个Integer类型的集合list1和list2,我们使用Lambda表达式进行多项操作:List<Integer> list1 = new ArrayList<>();list1.add(1);list1.add(1);list1.add(2);list1.add(4);list1.add(5);List<Integer> list2 = new ArrayList<>();list2原创 2021-08-12 15:24:52 · 879 阅读 · 0 评论 -
多线程的闭锁和栅栏
多线程的闭锁和栅栏JAVA并发包中有三个类用于同步一批线程的行为,分别是闭锁(Latch),信号灯(Semaphore)和栅栏(CyclicBarrier)。这里我们主要来介绍一下:闭锁(Latch)闭锁即是一种同步方法,可以延迟线程的进度直到线程到达某个终点状态。通俗的讲就是,一个闭锁相当于一扇大门,在大门打开之前所有线程都被阻断,一旦大门打开所有线程都将通过,但是一旦大门打开,所有线程都通过了,那么这个闭锁的状态就失效了,门的状态也就不能变了,只能是打开状态。也就是说闭锁的状态是一次性的,它确保原创 2021-08-01 13:37:32 · 611 阅读 · 0 评论 -
创建线程的几种方式
创建线程的几种方式方式1:继承Thread类实现多线程run()为线程类的核心方法,相当于主线程的main方法,是每个线程的入口一个线程调用 两次start()方法将会抛出线程状态异常,也就是的start()只可以被调用一次run()方法是由jvm创建完本地操作系统级线程后回调的方法,不可以手动调用(否则就是普通方法)public class MyThread1 extends Thread{ @Override public void run() { Syst原创 2021-07-31 15:56:08 · 191 阅读 · 0 评论 -
双亲委派机制以及打破双亲委派机制
双亲委派机制以及打破双亲委派机制双亲委派机制Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存中生成class对象,而且加载某个类的class文件时,Java虚拟机采用的是双亲委派模式,即把请求交由父类处理,它是一种任务委派模式.双亲委派机制的优点:1、避免类的重复加载2、保护程序的安全性,防止核心API随意被篡改沙箱安全机制:保证对Java信息源代码的保护何为沙箱安全机制?即如果我们自己建立和源代码相同的包,例如java/原创 2021-07-31 15:42:38 · 1598 阅读 · 0 评论