Java面试题库
专门更新面试题,每天进步一点!
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
程序员的成长之路
欢迎关注我的公众号【程序员的成长之路】,回复【2048】可以领取资料。
展开
-
【Java 多线程并发】线程池原理
线程池做的工作主要是控制与逆行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等待,等其他线程执行完毕,再从队列中取出任务来执行。他的主要特点为:线程复用;控制最大并发数;管理线程。1.线程复用每一个 Thread 的类都有一个 start 方法。当调用 start 启动线程时 Java 虚拟机会调用该类的 run 方法。那么该类的 run() 方法中就是调用了 Runnable 对象的 run() 方法。我们可以继承重写原创 2020-05-31 17:04:46 · 892 阅读 · 0 评论 -
【Java 多线程并发】线程上下文切换
巧妙地利用了时间片轮转的方式,CPU 给每个任务都服务一定的时间,然后把当前任务的状态保存下来,在加载下一任务的状态后,然后服务下一任务,任务的状态保存及再加载,这段过程叫做上下文切换。时间片轮转的方式使多个任务在同一颗 CPU 上执行变成了可能。1.进程(有时候也称做任务)是指一个程序运行的实例。在 Linux 系统中,线程就是能并行运行并且与他们的父进程(创建他们的进程)共享同一地址空间(一段内存区域)和其他资源的轻量级的进程。2.上下文是指某一时间点 CPU 寄存器和程序计原创 2020-05-25 21:38:50 · 585 阅读 · 0 评论 -
【Java 多线程并发】线程的基本方法
线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等。1.线程等待(wait)调用该方法的线程进入 WAITING 状态,只有等待另外线程的通知或被中断才会返回,需要注意的是调用 wait() 方法后,会释放对象的锁。因此,wait 方法一般用在同步方法或同步代码块中。2.线程睡眠(sleep)sleep 导致当前线程休眠,与 wait 方法不同的是 sleep 不会释放当前占有的锁,sleep(long)会导致线程进入 TIMED-WA原创 2020-05-21 23:15:20 · 444 阅读 · 0 评论 -
【Java 多线程并发】Java 锁(下)—— 可重入锁、公平锁与非公平锁、ReadWriteLock 读写锁、共享锁和独占锁、重量级锁、轻量级锁、偏向锁、分段锁、锁优化
上一篇:【Java 多线程并发】Java 锁(上)—— 乐观锁、悲观锁、自旋锁【Java 多线程并发】Java 锁(中)—— Synchronized 同步锁、ReentrantLock、Semaphonre 信号量、AtomicInteger8. 可重入锁(递归锁)本文里面讲的广义上是可重入锁,而不是单指 Java 下的 ReentrantLock。可重入锁,也叫递归锁,指的是同一线程外层函数获得锁之后,内层递归函数仍然有获取该锁的代码,但不受影响。在 Java 环境下 Re.原创 2020-05-17 22:04:39 · 511 阅读 · 0 评论 -
【Java 多线程并发】Java 锁(中)—— Synchronized 同步锁、ReentrantLock、Semaphonre 信号量、AtomicInteger
4.Synchronized 同步锁synchronized 它可以把任意一个非 NULL 的对象当作锁。他属于独占式的悲观锁,同时属于可重入锁。Synchronized 作用范围1.作用于方法时,锁住的是对象的实例(this);2.当作用于静态方法时,锁住的是 Class 实例,又因为 Class 的相关数据存储在永久代 PermGen(jdk1.8 则是 metaspace),永久代是全局共享的,因此静态方法锁相当于类的一个全局锁,会锁所有调用该方法的线程;3.synchroni原创 2020-05-14 15:57:12 · 508 阅读 · 0 评论 -
【Java 多线程并发】Java 锁(上)—— 乐观锁、悲观锁、自旋锁
1.乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。Java 中的乐观锁基本都是通过 CAS 操作实现的,CAS 是一种更新的原子操作,比较当前...原创 2020-05-10 19:56:52 · 638 阅读 · 0 评论 -
【Java 多线程并发】Java 后台线程
Java 后台线程1.定义:守护线程——也称“服务线程”,他是后台线程,它有一个特性,即为用户线程提供公共服务,在没有用户线程可服务时会自动离开。2.优先级:守护线程的优先级比较低,用于为系统中的其他对象和线程提供服务。3.设置:通过 setDaemon(true) 来设置线程为“守护线程”;将一个用户线程设置为守护线程的方式是在线程对象创建之前用线程对象的 setDaemon 方法。...原创 2020-05-01 20:04:42 · 558 阅读 · 0 评论 -
【Java 多线程并发】sleep 与 wait 区别,start 与 run 区别
sleep 与 wait 区别1.对于 sleep() 方法,我们首先要知道该方法是属于 Thread 类中的。而 wait() 方法,则是属于 Object 类中的。2.sleep() 方法导致了程序暂停执行指定的时间,让出 cpu 给其他线程,但是他的监控状态依然保持着,当指定的时间到了又会自动恢复运行状态。3.在调用 sleep() 方法的过程中,线程不会释放对象锁。4.而当...原创 2020-05-01 19:30:41 · 677 阅读 · 0 评论 -
【Java 多线程并发】终止线程 4 种方式
1.正常运行结束程序运行结束,线程自动结束。2.使用退出标志退出线程一般 run() 方法执行完,线程就会正常结束。然而,常常有些线程是伺服线程。伺服线程,不间断地执行,往往在run方法中有一个死循环,监视着某些条件,只有当这些条件满足时才能结束。使用一个变量来控制循环,例如:最直接的方法就是设一个 boolean 类型的标志,并通过设置这个标志为 true 或 false 来...原创 2020-05-01 19:15:25 · 840 阅读 · 0 评论 -
【Java 多线程并发】线程的生命周期(状态)
当前线程被创建并启动以后,它既不是一启动就进入了执行后状态,也不是一直处于执行状态。当线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。尤其是当线程启动以后,它不可能一直”霸占“着CPU独自运行,所以 CPU 需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之前切换。1.新建状态(NEW...原创 2020-04-26 20:10:09 · 506 阅读 · 0 评论 -
【Java 多线程并发】4 种线程池
Java 里面线程池的顶级接口是 Executor,但是严格意义上讲 Executor 并不是一个线程池,而只是一个执行线程工具。真正的线程池接口是 ExecutorService。1.newCachedThreadPool创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 ex...原创 2020-04-26 17:08:56 · 394 阅读 · 0 评论 -
【Java 多线程并发】初探 Java 中的线程
1.Java 并发知识库需要xmind文件的可以从公众号加我微信。2. Java 线程实现/创建方式1.继承 Thread 类Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过 Thread 类的 start() 实例方法。start() 方法是一个 native 方法,它将启动一个新线程,并执行 run()...原创 2020-04-24 12:16:17 · 390 阅读 · 0 评论 -
【Java 集合】集合框架之 Map
先看来下 Map 大家族:话外音:图中关系是 UML 类图表示。实线箭头表示,继承,从一个非接口类继承。虚线箭头表示,实现实现一个接口。1.HashMap(数组+链表+红黑树)HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位它的值,因而具有很快的访问速度,但遍历顺序确实不确定的。HashMap 最多只允许一条记录的键为 null,...原创 2020-04-24 10:36:11 · 481 阅读 · 1 评论 -
【Java 集合】集合框架之 Set
Set 注重独一无二的特性,该体系集合用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。对象的相等性本质是对象 hashCode 值(Java 是依据对象的内存地址计算出的次序号)判断的,如果想要让两个不同的对象视为相等的,就必须覆盖 Object 的 hashCode 方法和 equals 方法。话外音:打开 Object.java 源码,hashCode 长下面这样。p...原创 2020-04-20 23:41:56 · 368 阅读 · 0 评论 -
【Java 集合】集合框架之 List
Java 的 List 是非常常用的数据类型。List 是有序的 Collection,它一共有三个实现类:1.ArrayList2.Vector3.LinkedList看一下它们之间的关系:话外音:途中关系是 UML 类图表示。实线箭头表示,继承,从一个非接口类继承。虚线箭头表示,实现实现一个接口。1.ArrayList(数组)ArrayList ...原创 2020-04-20 23:12:42 · 364 阅读 · 0 评论 -
【Java 集合】集合框架中接口继承关系和实现
集合类存放于 java.util 包中,主要有 3 种:set(集)、list(列表包括 Queue)和 map(映射)。1. Collection:Collection 是集合 List 、Set、Queue 的最基本的接口。2.Iterator:迭代器,可以通过迭代器遍历集合中的数据3.Map:是映射表的基础接口集合框架思维导图...原创 2020-04-20 00:06:16 · 422 阅读 · 0 评论 -
【JVM】盘一盘 JVM 的类加载机制
我们编写的代码存储在java文件中,java源代码通过编译生成Java虚拟机可识别的字节码,存储在Class文件中。运行java程序时需要将Class文件中的信息加载到Java虚拟机中,而这个过程就是类加载的过程。如上图所示,假设写一个类A存储为A.java,通过javac A.java编译生成A.class,A.class中存储了各种描述A类的信息。然后运行程序,执行java A.cla...原创 2020-04-18 14:04:26 · 417 阅读 · 0 评论 -
【JVM】Java IO/NIO 你掌握了吗?
1.Java IO包需要xmind源文件的可以从公众号加我微信获取。2.Java NIONIO 主要由三大核心部分:Channel(通道)、Buffer(缓冲区)、Selector。传统 IO 基于字节流和字符流进行擦欧总,而 NIO 基于 Chanel 和 Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用...原创 2020-04-12 17:36:46 · 579 阅读 · 0 评论 -
【JVM】Java IO 模型都有哪些?
1.阻塞 IO 模型最传统的一种 IO 模型,既在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出 CPU。当数据就绪之后,内核会将数据拷贝到用户线程,并返回结果给用户线程,用户线程才解除 block 状态。典型的阻塞 IO 模型的例子为:data = socket.rea...原创 2020-04-12 16:55:58 · 801 阅读 · 0 评论 -
【JVM】带你了解 7 大 GC 垃圾收集器
1. GC垃圾收集器Java 堆内存被划分为新生代和额老年代两部分,新生代主要使用复制和标记-清除垃圾回收算法;老年代主要是用标记-整理垃圾回收算法,因此 Java 虚拟机中针对新生代和老年代分别提供了多种不同的垃圾收集器。JDK7/8后,HotSpot虚拟机所有收集器及组合(连线),如下图:图中展示了7种不同分代的收集器:Serial、ParNew、Parallel Scav...原创 2020-04-09 11:37:59 · 491 阅读 · 0 评论 -
【JVM】必知必会的 JVM 垃圾回收与算法
1.GC 思维导图需要xmind文件可以从公众号加我微信。2.如何确定垃圾引用计数法在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单的办法就是通过引用计数来判断一个对象是否可以回收。简单...原创 2020-04-08 15:13:38 · 370 阅读 · 0 评论 -
【JVM】JVM的运行时内存是怎么样的?
Java 堆从 GC 的角度还可以细分为:新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代。1.新生代用来存放新生成对象原创 2020-04-05 12:23:49 · 348 阅读 · 0 评论 -
【JVM】JVM内存区域你了解吗?
1.JVM 内存区域该结构图 JDK 版本:JDK 1.7JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【Java 堆、方法区】、直接内存。原创 2020-04-02 17:10:06 · 840 阅读 · 0 评论 -
【JVM】JVM是什么?
1.基本概念JVM 是可运行 Java 代码的假象计算机,包括【一套字节码指令集】、【一组寄存器】、【一个栈】、【一个垃圾回收】,【堆】和【一个存储方法域】。JVM 是运行在操系统之上的,它与硬件没有直接的交互。...原创 2020-03-31 23:52:48 · 698 阅读 · 0 评论