![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
文章平均质量分 89
a1405
这个作者很懒,什么都没留下…
展开
-
Java实现100万+并发
Java实现百万级并发,需要注意的,三大核心问题,你知道吗?并发编程并不是一项孤立存在的技术,也不是脱离现实生活场景而提出的一项技术。相反,实现百万级并发编是一项综合性的技术,同时,它与现实生活中 的场景有着紧密的联系。转载 2022-10-01 19:19:45 · 271 阅读 · 0 评论 -
30分钟彻底弄懂 synchronized 锁升级过程
些线程安全问题,这里面可能会产生一些预想不到的问题,所以下边我整理了一系列关于JDK中锁的问题,帮助大家更加深入地了解它们。转载 2022-07-31 07:42:17 · 6524 阅读 · 1 评论 -
一文详解 JDK1.8 的 Lambda、Stream、LocalDateTime
Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。StreamAPI可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选,排序,聚合等。不是数据结构它没有内部存储,它只是用操作管道从source(数据结构、数组、generatorfunction、IOchannel)抓取数据。注意事项。...转载 2022-07-18 10:24:17 · 265 阅读 · 0 评论 -
Java 枚举7种常见用法
JDK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。在JDK1.5 之前,我们定义常量都是:public static fianl…. 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。用法二:switchJDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。用法三:向枚举中添加新方法如果打算自定义自己的方法,那么必须在enum实例序列的最后转载 2022-07-07 11:15:12 · 348 阅读 · 0 评论 -
Optional的使用
前言相信不少小伙伴已经被java的NPE(Null Pointer Exception)所谓的空指针异常搞的头昏脑涨,有大佬说过“防止 NPE,是程序员的基本修养。”但是修养归修养,也是我们程序员最头疼的问题之一,那么我们今天就要尽可能的利用Java8的新特性 Optional来尽量简化代码同时高效处理NPE(Null Pointer Exception 空指针异常)认识Optional并使用简单来说,Opitonal类就是Java提供的为了解决大家平时判断对象是否为空用 会用 null!=ob转载 2022-04-11 21:06:48 · 2242 阅读 · 0 评论 -
java中的各种锁详细介绍
前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录:1. 乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此转载 2022-03-02 10:15:54 · 279 阅读 · 0 评论 -
对 volatile 关键字讲解最好的一篇文章
volatile 的作用大家都应该知道 volatile 的主要作用有两点:- 保证变量的内存可见性 - 禁止指令重排序那么,什么是内存可见性,什么是指令重排序,以及它们涉及了那些机制呢?下面就让我们来看看吧。可见性问题在理解 volatile 的内存可见性前,我们先来看看这个比较常见的多线程访问共享变量的例子。/** * 变量的内存可见性例子 * * @author star */public class VolatileExample { /** *转载 2022-02-28 11:43:26 · 109 阅读 · 0 评论 -
超过1W字深度剖析JVM常量池
面试题:String a = “ab”; String b = “a” + “b”; a == b 是否相等面试考察点考察目的:考察对JVM基础知识的理解,涉及到常量池、JVM运行时数据区等。考察范围:工作2到5年。背景知识要回答这个问题,需要搞明白两个最基本的问题 String a=“ab”,在JVM中发生了什么? String b=“a”+“b”,底层是如何实现? JVM的运行时数据首先,我们一起来复习一下JVM的运行时数据区。为了让大家有一个全局的视.转载 2021-12-06 17:00:35 · 108 阅读 · 0 评论 -
看一遍就理解:IO模型详解
什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll跟IO模型有什么关系?有几种经典IO模型呢?BIO、NIO、AIO到底有什么区别的?如果这些问题,你都能很好答上的话,那恭喜你,你对IO的掌握已经很棒啦!如果你对这些问题模棱两可的话,那也没关系,看完这篇文章,就理解啦!什么是IO呢?IO,英文全称是Input/Output,翻译过来就是输入/输出。平时我们听得挺多,就是什么磁盘IO,网络IO。那IO到底是什么呢?是不是有种懵懵懂懂的感觉呀,好像大转载 2021-12-06 15:01:57 · 143 阅读 · 0 评论 -
Java 8 一行代码解决了空指针问题,太厉害了...
在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException.假设我们有两个类,他们的UML类图如下图所示在这种情况下,有如下代码user.getAddress().getProvince();这种写法,在user为null时,是有可能报NullPointerException异常的。为了解决这个问题,于是采用下面的写法。if(user!=null){Addressaddress=user.getAddre...转载 2021-09-22 21:01:51 · 126 阅读 · 0 评论 -
从“设计思想”到“源码解读”,一步一步深入解析Java线程池!
01 初识线程池我们知道,线程的创建和销毁都需要映射到操作系统,因此其代价是比较高昂的。出于避免频繁创建、销毁线程以及方便线程管理的需要,线程池应运而生。1.1 线程池优势 降低资源消耗:线程池通常会维护一些线程(数量为 corePoolSize),这些线程被重复使用来执行不同的任务,任务完成后不会销毁。在待处理任务量很大的时候,通过对线程资源的复用,避免了线程的频繁创建与销毁,从而降低了系统资源消耗。 提高响应速度:由于线程池维护了一批 alive 状态的线程,当任务到达时,不需要转载 2021-05-28 10:06:55 · 100 阅读 · 0 评论 -
万字长文+思维导图帮你梳理 Java IO 流,还学不会你来打我(值得收藏)
File在正式的介绍IO流之前,我觉得应该介绍一下File类,该类主要是对文件和目录的抽象表示,因为学习io流第一反应就是文件,该类提供了对文件的创建、删除、查找等操作。主要有以下特点 java的世界万物皆对象,文件和目录就可抽象为File对象 对于File而言,封装的并不是真正的文件,封装的仅仅是一个路径名,磁盘文件本身可以存在,也可以不存在 文件的内容不能用File读取,而是通过流来读取,File对象可以作为流的来源地和目的地 File类的常用构造方法构造方法转载 2021-05-15 10:58:56 · 2466 阅读 · 3 评论 -
一篇文章带你深入了解 JVM 堆中的新生代、老年代、永久代、元空间
一、JVM 内存结构Java虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》的规定,Java 虚拟机所管理的内存将会包括以下几个运行时数据区域:为了更细化的讲解,我们将该图进行进一步的优化调整。针对java7及以前版本的细化:堆和方法区连在了一起,但这并不能说堆和方法区是一起的,它们在逻辑上依旧是分开转载 2021-05-10 13:27:08 · 690 阅读 · 0 评论 -
代码简洁之道
前言古语有云:道为术之灵,术为道之体;以道统术,以术得道。其中:“道”指“规律、道理、理论”,“术”指“方法、技巧、技术”。意思是:“道”是“术”的灵魂,“术”是“道”的肉体;可以用“道”来统管“术”,也可以从“术”中获得“道”。在拜读大佬“孤尽”的文章《Code Review是苦涩但有意思的修行》时,感受最深的一句话就是:“优质的代码一定是少即是多的精兵原则”,这就是大佬的代码精简之“道”。工匠追求“术”到极致,其实就是在寻“道”,且离悟“道”也就不远了,亦或是已经得道,这就是“工转载 2020-09-12 12:12:59 · 582 阅读 · 0 评论 -
13 张图解 Java 中的内存模型
目录1. 内存模型 & 分区Java虚拟机在运行Java程序时,会管理着一块内存区域:运行时数据区在运行时数据区里,会根据用途进行划分: Java虚拟机栈(栈区) 本地方法栈 Java堆(堆区) 方法区 程序计数器 下面,我将详细介绍每个内存模型分区2. Java堆3. Java虚拟机栈4. 本地方法栈十分类似Java虚拟机栈,与Java虚拟机区别在于:服务对象,即Java虚拟机栈为执...转载 2020-09-10 12:18:38 · 259 阅读 · 0 评论 -
这篇让你吃透Java集合框架!
一、集合框架图简化图:说明:对于以上的框架图有如下几点说明1、所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。2、集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。3、抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。4、实现类:8个实现类(实线表示),对接口的具体实现。转载 2020-07-24 14:56:54 · 236 阅读 · 0 评论 -
Java线程池的使用
前言在Java中,我们可以利用多线程来最大化地压榨CPU多核计算的能力。但是,线程本身是把双刃剑,我们需要知道它的利弊,才能在实际系统中游刃有余地运用。在进入主题之前,我们先了解一下线程池的基本概念。线程池,本质上是一种对象池,用于管理线程资源。在任务执行前,需要从线程池中拿出线程来执行。在任务执行完成之后,需要把线程放回线程池。通过线程的这种反复利用机制,可以有效地避免直接创...转载 2020-03-14 10:55:03 · 138 阅读 · 0 评论 -
牛逼哄哄的 Lambda 表达式,简洁优雅就是生产力!
1、什么是Lambda?我们知道,对于一个Java变量,我们可以赋给其一个“值”。如果你想把“一块代码”赋给一个Java变量,应该怎么做呢?比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的Java变量:在Java 8之前,这个是做不到的。但是Java 8问世之后,利用Lambda特性,就可以做到了。推荐:JDK8新特性之Lambda表达式。当然,这个...转载 2019-08-30 21:31:13 · 138 阅读 · 0 评论 -
JavaSE知识总结(二)
java语法基础1.关键字:其实就是某种语言赋予了特殊含义的单词。 保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词。2.标示符:其实就是在程序中自定义的名词。比如类名,变量名,函数名。包含 0-9、a-z、$、_ ; 注意: 1)数字不可以开头。 2)不可以使用关键字。3.常量:是在程序中的不会变化的数据。4.变量:其实就是内存中的...转载 2018-12-11 11:32:31 · 108 阅读 · 0 评论 -
JavaSE知识总结(三)
面向对象特点:1:将复杂的事情简单化。2:面向对象将以前的过程中的执行者,变成了指挥者。3:面向对象这种思想是符合现在人们思考习惯的一种思想。 过程和对象在我们的程序中是如何体现的呢?过程其实就是函数;对象是将函数等一些内容进行了封装。 匿名对象使用场景:1:当对方法只进行一次调用的时候,可以使用匿名对象。2:当对象对成员进行多次调用时,不能使用匿名对象...转载 2018-12-11 12:17:14 · 149 阅读 · 0 评论 -
集合Collection总览
一、集合(Collection)介绍1.1为什么需要CollectionJava是一门面向对象的语言,就免不了处理对象 为了方便操作多个对象,那么我们就得把这多个对象存储起来 想要存储多个对象(变量),很容易就能想到一个容器 常用的容器我们知道有-->StringBuffered,数组(虽然有对象数组,但是数组的长度是不可变的!) 所以,Java就为我们提供了集合(Colle...转载 2019-01-18 10:18:06 · 131 阅读 · 0 评论 -
集合Collection--List
前言现在这篇主要讲List集合的三个子类: ArrayList 底层数据结构是数组。线程不安全 LinkedList 底层数据结构是链表。线程不安全 Vector 底层数据结构是数组。线程安全 这篇主要来看看它们比较重要的方法是如何实现的,需要注意些什么,最后比较一下哪个时候用哪个~一、ArrayList解析首先,我们来讲解的是ArrayL...转载 2019-01-18 11:28:53 · 222 阅读 · 0 评论 -
集合Collection--Map集合、散列表、红黑树介绍
一、Map介绍1.1为什么需要Map前面我们学习的Collection叫做集合,它可以快速查找现有的元素。而Map在《Core Java》中称之为-->映射..映射的模型图是这样的: 那为什么我们需要这种数据存储结构呢???举个例子 作为学生来说,我们是根据学号来区分不同的学生。只要我们知道学号,就可以获取对应的学生信息。这就是Map映射的作用! 生活中...转载 2019-01-18 12:06:02 · 155 阅读 · 0 评论 -
集合Collection--HashMap
一、HashMap剖析首先看看HashMap的顶部注释说了些什么:再来看看HashMap的类继承图:下面我们来看一下HashMap的属性:成员属性有这么几个:再来看一下hashMap的一个内部类Node:我们知道Hash的底层是散列表,而在Java中散列表的实现是通过数组+链表的~再来简单看看put方法就可以印证我们的说法了:数组+...转载 2019-01-18 14:39:45 · 231 阅读 · 0 评论 -
Java多线程和并发基础面试问答
1、进程和线程之间有什么不同?一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源。2、多线程编程的好处是什么?在多线程程序中,多个线程被并发的执行以提高程序的效率,C...转载 2019-05-26 09:52:35 · 103 阅读 · 0 评论 -
Java多线程学习(吐血超详细总结)
首先讲一下进程和线程的区别:进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程。线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。多进程是指操作系统能同时运行多个任务(程序)。多线程是指在同一程序中有多个顺序流在执行。...转载 2019-06-24 10:54:36 · 139 阅读 · 0 评论 -
漫画:通俗易懂的理解进程与线程
进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任...转载 2019-07-14 17:19:01 · 148 阅读 · 0 评论 -
深入理解Java的接口和抽象类
对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。一、抽象类在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式...转载 2019-07-12 15:45:17 · 84 阅读 · 0 评论 -
刷了一个月算法,终于拿到了double的offer
本文采用Java语言来进行描述,帮大家好好梳理一下数据结构与算法,在工作和面试中用的上。亦即总结常见的的数据结构,以及在Java中相应的实现方法,务求理论与实践一步总结到位。常用数据结构数组数组是相同数据类型的元素按一定顺序排列的集合,是一块连续的内存空间。数组的优点是:get和set操作时间上都是O(1)的;缺点是:add和remove操作时间上都是O(N)的。Java中,A...转载 2019-08-02 16:08:15 · 115 阅读 · 0 评论 -
如果把线程当作一个人来对待,所有问题都瞬间明白了
问题究竟出在哪里?一个线程执行,固然是安全的,但是有时太慢了,怎么办?老祖宗告诉我们,“一方有难,八方支援”,那不就是多叫几个线程来帮忙嘛,好办呀,多new几个不就行了,又不要钱。这样能管用吗?继续往下看。俗话说,“在家靠父母,出门靠朋友”。有了朋友的帮助,就会事半功倍。是这样的吗?不一定,如果朋友“不靠谱”,结果竟是在“添乱”。于是就演变为,“不怕神一样的对手,就怕猪一样的队友”...转载 2019-08-02 21:19:01 · 114 阅读 · 0 评论 -
java多线程-知识点整理
一、进程和线程的区别:进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程。(进程是资源分配的最小单位)线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。多进程是指操作系统能同时运行多个任务(程序)...转载 2019-08-13 14:36:39 · 82 阅读 · 0 评论 -
图文详解 Java 字节码,想不懂都难!
JVM 数据类型Java是静态类型的,它会影响字节码指令的设计,这样指令就会期望自己对特定类型的值进行操作。例如,就会有好几个add指令用于两个数字相加:iadd、ladd、fadd、dadd。他们期望类型的操作数分别是int、long、float和double。大多数字节码都有这样的特性,它具有不同形式的相同功能,这取决于操作数类型。JVM定义的数据类型包括:基本类型:数值类型:...转载 2019-08-17 19:27:05 · 228 阅读 · 0 评论 -
聊下JVM内存模型
1.JVM内存模型2. 程序计数器(PC)每个线程都会有自己私有的程序计数器(PC)。可以看作是当前线程所执行的字节码的行号指示器。也可以理解为下一条将要执行的指令的地址或者行号。字节码解释器就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、 循环、 跳转、 异常处理、 线程上下文切换,线程恢复时,都要依赖PC.如果线程正在执行的是一个Java方法,PC值为正...转载 2019-08-18 13:41:03 · 130 阅读 · 0 评论 -
JavaSE知识总结(一)
一:java概述:1991 年Sun公司的James Gosling(詹姆斯·高斯林)等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器;1994年将Oak语言更名为Java; Java的三种技术架构:JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发;JAV...转载 2018-12-11 11:04:28 · 168 阅读 · 0 评论