自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 收藏
  • 关注

原创 JVM—加载到方法区的Class文件长什么样?

原文作者:zhaohong_bo原文地址:深入理解 JVM Class文件格式(一)目录一、JVM体系结构二、class格式文件概述三、class文件详细介绍一、JVM体系结构二、class格式文件概述class文件是一种8位字节的二进制流文件, 各个数据项按顺序紧密的从前向后排列, 相邻的项之间没有间隙, 这样可以使得class文件非常紧凑, 体积轻巧, 可以被JVM快速的加载至内存, 并且占据较少的内存空间。 我们的Java源文件, 在被编译之后, 每个类(或者接.

2021-02-27 17:36:19 520 1

原创 JVM—方法区到底是怎么保存函数方法的?

原文作者:博_采_众_长原文地址:JVM --方法区(超详细)目录HotSpot中方法区的演进方法区的内部结构运行时常量池 vs 常量池方法区的演进细节StringTable为什么要调整最近想深入了解Java多太的重载和重写机制是如何实现的,既然说到重载,那肯定要了解函数是如何加载的,加载到哪里,加载之后的形式是什么,如何保存在内存中的?只有了解了函数的加载,才能谈重载是什么?于是就有了此篇文章,这篇文章主要解答的事后面两个问题,即加载之后的形式是什么,如何保存在内存中的.

2021-02-27 15:08:10 355

原创 JVM—如何利用虚拟机栈进行函数调用?

原文作者:老马说编程原文地址:Java编程的逻辑 (12) - 函数调用的基本原理目录栈变量的生命周期数组和对象递归调用函数调用的成本小结读后有收获可以支付宝请作者喝奶茶栈我们之前谈过程序执行的基本原理:CPU有一个指令指示器,指向下一条要执行的指令,要么顺序执行,要么进行跳转(条件跳转或无条件跳转)。基本上,这依然是成立的,程序从main函数开始顺序执行,函数调用可以看做是一个无条件跳转,跳转到对应函数的指令处开始执行,碰到return语句或者函数结尾的...

2021-02-27 14:41:10 346

原创 设计模式—工厂模式之简单工厂模式

1. 简单工厂模式简介简单工厂模式(Simple Factory),又被称为"静态工厂方法模式"。它属于"创建模式"(创建对象的模式),并且是"工厂方法"模式的一种特殊实现。通常,我们利用简单工厂模式来进行类的创建。例如,获取线程池对象,就是通过简单工厂模式来实现的。它的结构图如下所示:工厂:工厂是简单工厂模式的核心,提供了对外接口。客户端或其它程序要获取Product对象,都是通过Factory的接口来获取的。 抽象产品:抽象产品是(许多)不同产品抽象出来的。Product可以是接口或者抽象

2021-02-26 15:11:24 109

原创 java.lang包—枚举类Enum

原文作者:山高我为原文地址:java enum的用法详解目录一、enum关键字二、Enum类源码三、疑问四、Enum常见用法一、enum关键字enum关键字是在Java1.5也就是Java SE5之后引入的一个新特性:它通过关键字enum来定义一个枚举类,这个被定义的枚举类继承Enum类,这个枚举类算是一种特殊类,它同样能像其他普通类一样拥有构造器、方法,也能够实现接口,但是它不能再继承其他别的类,因为它的直接父类是Enum类,并且因为它默认的修饰符有final的存在,因.

2021-02-25 16:10:06 1771

原创 java.lang包—基本类型的封装类

目录一、java为什么需要对各种类型提供封装类?二、8大基础类型和对应的封装类型三、基础类型与封装类的区别四、"=="和"equal()"方法五、Integer.valueOf函数六、常见面试题总结一、java为什么需要对各种类型提供封装类?在刚刚学习java的时候,老师不止一次的说过java是一种面向对象的语言,万物皆对象。对于java中的基础数据类型,由于为了符合java中面向对象的特点,同样也有其封装类。这篇文章对其有一个认识。二、8大基础类型和对应的封装类型

2021-02-25 12:05:52 789 5

原创 java.lang包—对象基类Object

原文作者:Boblim原文地址:Java:Object类详解Java的一些特性会让初学者感到困惑,但在有经验的开发者眼中,却是合情合理的。例如,新手可能不会理解Object类。这篇文章分成三个部分讲跟Object类及其方法有关的问题。上帝类什么是Object类?Object类存储在java.lang包中,是所有java类(Object类除外)的终极父类。当然,数组也继承了Object类。然而,接口是不继承Object类的,原因在这里指出:Section 9.6.3.4 of t..

2021-02-25 00:32:07 797

原创 java.lang包—类加载器ClassLoader类

一、什么是ClassLoader?大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,则会引发系统异常。而程序在启动的时候,并不会一次性加载程序所要用的所有class文件,而是根据程序的需要,通过Java的类加...

2021-02-25 00:30:08 941 4

原创 java.lang包—类Class

原文作者:一人浅醉-原文地址:Java中的Class类目录生成Class对象的三种方式Class常用方法解释总结Class 类是在Java语言中定义一个特定类的实现。一个类的定义包含成员变量,成员方法,还有这个类实现的接口,以及这个类的父类。Class类的对象用于表示当前运行的 Java 应用程序中的类和接口。 比如:每个数组均属于一个 Class 类对象,所有具有相同元素类型和维数的数组共享一个Class 对象。基本的 Java 类型(boolean, byte, char, .

2021-02-24 23:20:12 922

原创 Java并发编程—Thread类的start()方法是如何启动一个线程的?

目录一、前言二、线程的状态三、上下文切换四、Thread类中的方法五、以下是线程属性相关的方法五、多线程并发实践六、FAQ一、前言  位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态、上下文切换,然后接着介绍Thread类中的方法的具体使用。二、线程的状态在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态

2021-02-24 20:29:07 1451

原创 Java并发编程—什么是线程?

原文作者:way_more原文地址:Java 多线程常见基础面试题总结,面试必看!目录一、什么是线程和进程?二、简要描述线程与进程的关系三、FAQ一、什么是线程和进程?1.1. 何为进程?进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。如下图所示,在 .

2021-02-24 17:31:04 86

原创 Java并发编程—为什么wait/notify操作要先获取到锁?

首先,我们要清楚的是wait/notify操作是一种线程间同步机制。为什么要同步?因为多个线程要并发的访问同一共享变量,所以需要线程间同步,防止他们之间相互冲突。同步的关键字是synchronized,并没有明确的锁的语义。下面是一张线程的生命周期的图:wait的原理图:是释放锁以后再进入等待队列,还是进入等待队列以后再释放锁?这里有一个疑问。我们看一下ObjcetMonitor.cpp源码中,我们发现wait的源码如下:我们发现其实是需要先把线程加入到等待队列,然后再释放锁。那么

2021-02-24 15:30:03 1447

原创 Java并发编程—线程间协作方式wait()/notify()/notifyAll()原理分析

原文作者:tom有了cat原文地址:java并发编程基础之等待通知机制wait/notify原理分析一个线程修改了一个对象的值,而另一个线程感知了变化,然后进行了相应的操作,整个过程开始于一个线程,结束于另一个线程。前者是生产者,后者是消费者,这种模式在功能层面上实现了解耦。有下面一段代码,大家可以根据执行的结果和注释很清晰的明确这个wait和notify的工作机制,wait等待释放锁。代码如下,不再做具体描述:package juc.waitsleep; /** * @Descri.

2021-02-24 15:26:47 274

原创 Java并发编程—Atomic原子类

目录Atomic1. AtomicIntegera. 多线程并发访问问题b. 用 AtomicInteger 类解决2. AtomicIntegerArraya. 多线程并发访问问题b. 用 AtomicIntegerArray 类解决相关问题Atomic在 java.util.concurrent.atomic 包下定义了一些对“变量”操作的“原子类”,它们可以保证对“变量”操作的:原子性、有序性、可见性:java.util.concurrent.atomic.

2021-02-24 10:23:32 264

原创 Java并发编程—常见面试题

建议:学习java并发前需要先掌握JVM知识 关于下面问题档案的详细解析都在后面推荐的相关系列文章中一、线程安全相关1、什么叫线程安全?线程安全就是说多线程访问同一代码,不会产生不确定的结果。2、为什么会存在线程安全的问题?共享性:多个线程操作同一个类实例时,类属性是共享的。 互斥性:为保证数据安全性,同一时刻只有一个线程可以修改数据3、如何保证线程安全?原子性:针对代码块 可见性:数据从线程工作内存刷新到JVM主存中这个动作必须是同步的 有序性:指令重排,操..

2021-02-23 17:24:41 567 1

原创 Java并发编程—自旋锁CLHLock原理

原文作者:知识铺原文地址:Java知识进阶-程序员必懂的自旋锁CLHLock原理一、CLHLock原理内部实现的是一种基于原子操作的链表,特点:可扩展、高性能、公平的自旋锁。线程是在自身本地变量上自旋,不断轮询它的链表前一个节点状态。解决问题:避免多个线程一起来,一起竞争的不公平性问题,提供了一种先来先服务的公平性;如 银行的取号机。简单源码演示:二、获取锁步骤:第一个线程: 第一次来获取锁,立刻获取到锁第二个线程: 线程一还没有处理完,就要加入到队列,并关心它的.

2021-02-23 14:29:28 246

原创 Java并发编程—JUC的Lock锁

一、Lock (JUC锁)JUC 锁位于java.util.concurrent.locks包下,为锁和等待条件提供一个框架,它不同于内置同步和监视器。CountDownLatch,CyclicBarrier 和 Semaphore 不在包中属于并发编程中的工具类,但也是通过 AQS(后面会讲) 来实现的。因此,我也将它们归纳到 JUC 锁中进行介绍。 1、Lock Lock实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作。 2、R...

2021-02-23 14:21:23 409 1

原创 Java并发编程—锁的基本概念

在学习或者使用Java的过程中进程会遇到各种各样的锁的概念:公平锁、非公平锁、自旋锁、可重入锁、偏向锁、轻量级锁、重量级锁、读写锁、互斥锁等待。下边总结了对各种锁的解释1、公平锁/非公平锁公平锁是指多个线程在等待同一个锁时按照申请锁的先后顺序来获取锁。相反的非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。公平锁的好处是等待锁的线程不会饿死,但是整体效率相对低一些; 非公平锁的好处是整体效率相对高一些,但是有些线程可能会饿死或者说很早就在等待锁

2021-02-23 12:48:44 133

原创 Java并发编程—AQS原理分析

目录一、AQS原理简述二、自定义独占锁及共享锁三、锁的可重入性四、锁的公平性五、惊群效应AQS全称AbstractQueuedSynchronizer,它是实现JCU包中几乎所有的锁、多线程并发以及线程同步器等重要组件的基石, 其核心思想是基于volatile int state这样的一个属性同时配合Unsafe工具对其原子性的操作来实现对当前锁的状态进行修改 。一、AQS原理简述AQS内部维护着一个FIFO的CLH队列(无锁队列:Concurrent Lock-free .

2021-02-23 10:54:24 561

原创 Java 并发编程—有锁互斥机制及AQS理论

原文作者:Java并发编程原文地址:AQS这样学就很简单了目录一、有锁互斥机制二、AQS如何实现互斥三、结语如果你是道格李,你要实现一套机制来保证线程互斥,你会如何实现呢?你肯定不会一上来就写代码对吧,你会想有哪些场景会出现线程互斥、针对每个场景抽象出需要实现的功能、针对这些功能底层选择什么样的数据结构什么算法……这其实是一种非常好的学习方法,回归到问题本身去思考问题,然后带着问题去找答案,而不是一上来就一头扎进代码中。一、有锁互斥机制1、核心功能如果你要实现一套机制.

2021-02-23 10:43:33 144

原创 Java并发编程—Synchronized底层优化(偏向锁、轻量级锁)

原文作者:Matrix海 子原文地址:Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)目录一、重量级锁二、轻量级锁三、偏向锁四、其他优化五、总结一、重量级锁上篇文章中向大家介绍了Synchronized的用法及其实现的原理。现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到..

2021-02-22 23:21:17 280 5

原创 Java 并发编程—Synchronized关键字

原文作者:liuxiaopeng原文地址:Java并发编程:Synchronized及其实现原理一、Synchronized的基本使用Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。从语法上讲,Synchronized总共有三种用法:修饰普通方法 修饰静态方法 修饰代码块接下来我就通过几个例子程序来说..

2021-02-22 22:57:46 171

原创 Java并发编程—线程间协作方式wait()、notify()、notifyAll()和Condition

原文作者:Matrix海 子原文地址:Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition目录一.wait()、notify()和notifyAll()二.Condition三.生产者-消费者模型的实现在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消.

2021-02-22 19:50:39 205 1

原创 Java 并发编程—核心理论

原文作者:liuxiaopeng原文地址:Java 并发编程:核心理论目录一、共享性二、互斥性三、原子性四、可见性五、有序性六 总结并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为.

2021-02-22 19:23:59 135 6

原创 Java并发—锁的四种状态

目录无锁偏向锁轻量级锁重量级锁总结锁的四种状态:无锁、偏向锁、轻量级锁和重量级锁无锁无锁就是没有真正意义上的上锁,所有的线程还是能访问并修改同一个资源,但是通过算法控制,实现同时只有一个线程修改成功。CAS原理及应用即是无锁的实现。无锁无法全面代替有锁,但无锁在某些场合下的性能是非常高的。比如,CAS全称 Compare and Swap(比较与交换),是一种无锁算法。在不使用锁的情况下(没有线程被阻塞),实现多线程的变量同步。CAS算法主要涉及到3个操作数:①需要进行读

2021-02-22 18:56:51 226

原创 Java并发编程—无锁互斥机制及CAS原理

目录一、CAS简介二、AtomicInteger代码演示三、CAS 实现四、弊端一、CAS简介在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。这是作为单个原子操作完成的。 原子性保证新值基于最新信息计算; 如果该值在同一时间被另一个线程更新,则写入将失败。操作结果必须说明是否进行替换; 这可以通过一个简单的布尔响应(这个变体通常称为比较和设置),

2021-02-22 17:41:46 324

原创 分布式实时计算—从霍普金大学数据错误谈谈如何保证实时计算数据准确性

原文作者:实时流式计算原文地址:从霍普金大学数据错误谈谈如何保证实时计算数据准确性作为全球新冠疫情数据的实时统计的权威,约翰斯·霍普金斯大学的实时数据一直是大家实时关注的,也是各大媒体的主要数据来源。在今天早上的相当一段长的时间,霍普金斯大学的全球疫情分布大屏中显示,全球确诊人数已经突破200万。有图有真相随后相关媒体也进行了转发,不过这个数据明显波动太大,随后该网站也修改了数据约翰斯·霍普金斯大学系统科学与工程中心就制作了“全球新冠病毒扩散地图”,用于实时可视化和跟踪报告..

2021-02-18 22:49:17 765

原创 分布式实时计算—实时数据质量如何保障?

原文作者:阿里巴巴文娱技术原文地址:算法基石-实时数据质量如何保障?目录一、现状分析二、实时数据质量保障体系方案三、线下质量四、线上质量五、质量效能六、产品体验实时自动化保障优酷视频搜索是文娱分发场最核心的入口之一,数据源多、业务逻辑复杂,尤其实时系统的质量保障是一个巨大挑战。如何保障数据质量,如何衡量数据变化对业务的影响?本文会做详细解答。一、现状分析搜索数据流程如下图所示,从内容生产到生成索引经历了复杂的数据处理流程,中间表多达千余张,实时数据消费即消失,.

2021-02-18 22:32:52 1626

原创 Java并发编程—线程同步类

原文作者:洲洋1984原文地址:Java 并发包中的高级同步工具Java 中的并发包指的是 java.util.concurrent(简称 JUC)包和其子包下的类和接口,它为 Java 的并发提供了各种功能支持,比如:提供了线程池的创建类 ThreadPoolExecutor、Executors 等; 提供了各种锁,如 Lock、ReentrantLock 等; 提供了各种线程安全的数据结构,如 ConcurrentHashMap、LinkedBlockingQueue、DelayQu.

2021-02-18 18:31:52 1100

原创 JVM—内存模型JMM

原文作者:qzqanlhy1314原文地址:jvm 内存模型目录一、jvm 内存模型划分二、虚拟机栈三、堆一、jvm 内存模型划分根据JVM规范,JVM 内存共分为方法区、虚拟机栈、本地方法栈、堆、程序计数器五个部分。jvm 1.8 内存区域划分方法区(线程共享)被所有方法线程共享的一块内存区域。用于存储已经被虚拟机加载的类信息、常量、静态变量等。这个区域的内存回收目标主要针对常量池的回收和堆类型的卸载。Java堆(线程共享)被所有线程共享的一块内.

2021-02-18 17:58:41 181

原创 JVM—内存可见性

原文地址:内存可见性什么是可见性可见性:一个线程对共享变量值的修改,能够及时地被其他线程看到 共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量Java内存模型(JMM)的介绍Java内存模型(Java Memory Model)描述了Java程序中各种变量(共享变量)的访问规则,及在JVM中将变量存储到内存和从内存中读取出变量的底层细节所有的变量都存储在主内存中 每个线程都有自己独立的工作内存,里面保存该线程使用到的变量的副本(主内存中该.

2021-02-18 17:40:12 1030 2

原创 分布式服务常见问题—分布式事务

原文作者:程序员小灰原文地址:漫画:什么是分布式事务?有趣有内涵的文章第一时间送达!————— 第二天 —————假如没有分布式事务,在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交易业务为例子:上图中包含了库存和订单两个独立的微服务,每个微服务维护了自己的数据库。在交易系统的业务逻辑中,一个商品在下单之前需要...

2021-02-18 17:22:29 788 1

原创 基本概念—监督与非监督

原文作者:python猫娘原文地址:监督学习与非监督学习​一、监督学习(supervised learning)监督学习(supervised learning)的任务是学习一个模型,使模型能够对任意给定的输入,对其相应的输出做出一个好的预测。即:利用训练数据集学习一个模型,再用模型对测试样本集进行预测。例如kaggle上的泰坦尼克号比赛。​官方提供旅客数据——数据集1(姓名,年龄,性别,社会经济阶层,是否生存等),要求参赛选手建立一个预测模型来回答“另外418名乘客...

2021-02-18 17:02:37 2887

原创 基本概念—回归、分类、聚类

原文作者:机器之心原文地址:回归、分类与聚类:三大方向剖解机器学习算法的优缺点在本教程中,作者对现代机器学习算法进行了简要梳理。虽然类似的总结有很多,但是它们都没有真正解释清楚每个算法在实践中的好坏,而这正是本文希望完成的。因此本文力图基于实践中的经验,讨论每个算法的优缺点。文末给出了这些算法的具体实现细节。目录1、回归方法1.1 线性回归(正则化)1.2 回归树(集成方法)1.3 深度学习1.4 最近邻算法2、分类方法2.1 Logistic 回归(正则化)

2021-02-18 16:55:13 7121

原创 分布式系统保障—混沌工程—初识

原文作者:朱小厮的博客原文地址:混沌工程(Chaos Engineering)初识 编辑推荐: 本文主要介绍什么是混沌工程、混沌工程的五大原则、混沌工程成熟度模型(CMM)以及混沌工程的目标——韧性架构,希望对您的学习有所帮助。 本文来自公众号:朱小厮的博客,由火龙果软件Alice编辑、推荐。 目录一、概述二、混沌工程的五大原则三、混沌成熟度模型(Chaos Maturity Model)四、混沌工程的目标——韧性架构五、混沌工程..

2021-02-18 11:58:59 956

原创 分布式计算—MapReduce、Spark、Storm、Flink分别适用什么场景

作者:ezaya链接:https://www.zhihu.com/question/403840013/answer/1317631316著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。目录一、MapReduce二、Spark三、Flink & Storm四、总结这四个项目能放在一起比较的背景应该是分布式计算的演进过程。一、MapReduce开源分布式计算的第一个流行的框架是 Hadoop 项目中的 MapReduce 模块。它将所有计算抽.

2021-02-18 00:00:36 6412 4

原创 分布式实时计算—实时计算相关问题及解决方案

原文作者:孟知之原文地址:实时计算相关问题及解决方案目录1. 怎么处理 Spark structured streaming 慢速变化数据 join 的问题?2. Kafka不稳定导致Spark Streaming不稳定3. Flume当中出现了流量瓶颈4. Kafka的流量问题1. 怎么处理 Spark structured streaming 慢速变化数据 join 的问题?问题:从 MySQL 的一个表里面提取 metadata 然后和 structured s.

2021-02-17 23:43:38 518 2

原创 分布式服务常见问题—访问量统计如何做?

原文作者:逖靖寒的世界原文地址:分布式实时统计系统--RAINBIRD最近Twitter开发了一款分布式实时统计系统Rainbird。Rainbird可以用于实时数据的统计:统计网站中每一个页面,域名的点击次数 内部系统的运行监控(统计被监控服务器的运行状态) 记录最大值和最小值性能要求作为大型网站的分布式应用,需要具备以下性能:极高的写入性能,可以达到100,000的WPS 非常高的读取性能,可以达到10,000s的RPS 高度的可扩展性,包括读取和存储等等,能够扩展到..

2021-02-17 23:25:13 2174 4

原创 Java基础—8大数据类型

第一类:逻辑型booleanboolean类型数据只允许取值true或false,不可以0或非0的整数替代true和false,这点和C语言不同。第二类:字符char1、JAVA中,char占2字节,16位。可在存放汉字2、char赋值char a='a'; //任意单个字符,加单引号。char a='中';//任意单个中文字,加单引号。char a=111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。注:只能放单个字符。3...

2021-02-17 23:05:28 286

原创 Java集合—Set集合去重机制

原文作者:不知道取啥昵称原文地址:Java Set集合去重机制关于java里面的集合,大家经常利用到Set集合没有重复数据的特性,来进行数据的去重,那么去重的原理是怎么样的呢?最近面试了几个人,其间有聊到集合的东西,所以就顺便问了一下这个问题,但是都是只知道这么用,而没有去看看底层代码的去重原理(而恰恰有可能这些基础原理会被用来设计其他一些场景实现),所以在此文章记录一下,希望能帮助到一些人。下面是Set集合的类图:下面我们来跟踪一下执行的过程:1. 首先我们实例化一个set对象.

2021-02-17 22:51:05 1419

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除