![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java 面试
洲洋的编程课堂
希望组件一个快乐的编程社区
展开
-
京东必考JVM 问题诊断快速入门
JVM 问题诊断快速入门JVM 全称为 Java Virtual Machine,翻译为中文 “Java 虚拟机”。本文中的JVM主要指 Oracle 公司的 HotSpot VM, 版本是 Java8(JDK8、JDK1.8 是同样的版本)。如今关于 JVM 的文章、书籍有很多。 有基础的,也有深入的。本文主要介绍各种简单工具的使用,穿插一些基本的知识点。 目的是为了让初学者快速上手,先实现...原创 2020-03-01 21:50:52 · 1232 阅读 · 0 评论 -
7天 Spring Boot从入门到精通
Spring Boot 工程化最佳实践Spring Boot 已经成为 Java 后端事实上的标准开发框架,目前已经演进到了 2.1.5 版本。在项目开发过程中,也逐渐形成了一些公认的不错的做法或者规范,本文试图将其沉淀总结为最佳实践,供后来人学习和使用。这些实践包含实际项目开发中的方方面面,包含但不限于工程实践、技术细节、规范流程、技术选型等,希望能让读者少走弯路,同时能在团队中形成相对统一的...原创 2020-03-01 21:49:54 · 419 阅读 · 0 评论 -
企业 Maven 依赖管理层次结构设计
企业 Maven 依赖管理层次结构设计准备工作既然是企业使用,那么一定要有企业的 Nexus 私服,通过私服可以加快公司内部常用第三方依赖的下载速度,最重要的还是可以将企业内部的项目 deploy 到私服供企业内部项目使用。关于搭建 Nexus 以及简单的配置等内容可以参考:《企业 Maven 依赖管理层次结构设计 - 附录》中的 1 和 3 节内容。本文是直接使用 Nexus,所以...原创 2020-02-26 20:22:58 · 496 阅读 · 1 评论 -
带你逐行分析 HashMap 源码
带你逐行分析 HashMap 源码一、写在前面相信读者也看过了不少讲解 HashMap 源码的文章了,笔者认为,一切脱离源码去讲原理的都是泛泛而谈。一些所谓的原理大都是阅读源码之后的个人概括,这些概括参差不齐,再加上没有阅读源码,读者们是很难有切身体会的。正因如此,笔者逐行分析了 HashMap 的源码后,开启了本场 Chat。笔者在阅读 HashMap 源码的时候,曾对每个内部属性,每个内...原创 2020-02-26 20:21:07 · 282 阅读 · 1 评论 -
Java 集合底层原理剖析(List、Set、Map、Queue)
Java 集合底层原理剖析(List、Set、Map、Queue)温馨提示:下面是以 Java 8 版本进行讲解,除非有特定说明。一、Java 集合介绍Java 集合是一个存储相同类型数据的容器,类似数组,集合可以不指定长度,但是数组必须指定长度。集合类主要从 Collection 和 Map 两个根接口派生出来,比如常用的 ArrayList、LinkedList、HashMap、Hash...原创 2020-02-19 15:52:00 · 6967 阅读 · 0 评论 -
Java 工程师核心基础修炼
Java 工程师核心基础修炼1 Java 的异常分类及处理1.1 异常分类Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Error 和 Exception。 Error 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。Exception 又有两个分支,一个是运行时...原创 2020-02-19 15:51:16 · 146 阅读 · 0 评论 -
聊聊 Java String 源码的排序算法
聊聊 Java String 源码的排序算法前言Q:什么是选择问题? 选择问题,是假设一组 N 个数,要确定其中第 K 个最大值者。比如 A 与 B 对象需要哪个更大?又比如:要考虑从一些数组中找出最大项?解决选择问题,需要对象有个能力,即比较任意两个对象,并确定哪个大,哪个小或者相等。找出最大项问题的解决方法,只要依次用对象的比较(Comparable)能力,循环对象列表,一次就能解决。...原创 2020-02-19 15:49:48 · 124 阅读 · 0 评论 -
带你全面了解高级 Java 面试中需要掌握的 JVM 知识点
带你全面了解高级 Java 面试中需要掌握的 JVM 知识点JVM 内存划分与内存溢出异常概述如果在大学里学过或者在工作中使用过 C 或者 C++ 的读者一定会发现这两门语言的内存管理机制与 Java 的不同。在使用 C 或者 C++ 编程时,程序员需要手动的去管理和维护内存,就是说需要手动的清除那些不需要的对象,否则就会出现内存泄漏与内存溢出的问题。如果你使用 Java 语言去开发,你就...原创 2020-02-19 15:49:17 · 255 阅读 · 0 评论 -
JDK8 新特性最全讲解,囊括面试高频知识点
JDK8 新特性最全讲解,囊括面试高频知识点序言JDK 8 日渐成为项目开发中的主流。但平时在和很多小伙伴的交流和面试中,发现很多人仍停留在 JDK 7 及以前的认知层面,Lambda 表达式、方法引用、Stream 流、default 关键字,很少使用,甚至还有不少小伙伴不知道怎么用!!不客气地说,不掌握 JDK 8 的新特性,面试通过基本很难很难。换位思考,若不掌握,你面试不慌吗?本...原创 2020-02-19 15:17:05 · 1189 阅读 · 0 评论 -
多线程,设计模式,Netty 实战,带你手写一个分布式消息队列
多线程,设计模式,Netty 实战,带你手写一个分布式消息队列开题什么是 MQ ?MQ 就是 Message Queue 的简写,消息队列中间件。用过 MQ 的同学应该都知道,MQ 的主要作用是应用程序的解藕和异步。如果我们在更高的层面去想,MQ 是不是可以理解为一种应用层的通信协议,它实现了多个应用之间的异步通信,同时 MQ 对于用户屏蔽了底层通信协议的实现,我们不管它的 HTTP,TC...原创 2020-02-19 15:16:01 · 567 阅读 · 0 评论 -
并发编程解惑之线程
并发编程解惑之线程一、线程与进程进程是资源分配的最小单位,每个进程都有独立的代码和数据空间,一个进程包含 1 到 n 个线程。线程是 CPU 调度的最小单位,每个线程有独立的运行栈和程序计数器,线程切换开销小。Java 程序总是从主类的 main 方法开始执行,main 方法就是 Java 程序默认的主线程,而在 main 方法中再创建的线程就是其他线程。在 Java 中,每次程序...原创 2020-02-19 15:15:04 · 260 阅读 · 0 评论 -
Java 分布式框架面试题合集
Java 分布式框架面试题合集1.什么是 ZooKeeper?答:ZooKeeper 是一个开源的分布式应用程序协调服务,是一个典型的分布式数据一致性解决方案。设计目的是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的系统,并以一系列简单易用的原子操作提供给用户使用。2.ZooKeeper 提供了哪些功能?答:ZooKeeper 主要提供以下功能:分布式服务注册与订阅...原创 2020-02-08 08:28:25 · 1739 阅读 · 0 评论 -
Java 中的各种锁和 CAS + 面试题
Java 中的各种锁和 CAS + 面试题如果说快速理解多线程有什么捷径的话,那本文介绍的各种锁无疑是其中之一,它不但为我们开发多线程程序提供理论支持,还是面试中经常被问到的核心面试题之一。因此下面就让我们一起深入地学习一下这些锁吧。乐观锁和悲观锁悲观锁和乐观锁并不是某个具体的“锁”而是一种并发编程的基本概念。乐观锁和悲观锁最早出现在数据库的设计当中,后来逐渐被 Java 的并发包所引入。...原创 2020-02-08 08:28:11 · 4003 阅读 · 0 评论 -
java.io 包下的类有哪些 + 面试题
java.io 包下的类有哪些 + 面试题IO 介绍IO 是 Input/Output 的缩写,它是基于流模型实现的,比如操作文件时使用输入流和输出流来写入和读取文件等。IO 分类传统的 IO,按照流类型我们可以分为:字符流字节流其中,字符流包括 Reader、Writer;字节流包括 InputStream、OutputStream。传统 IO 的类关系图,如下图所示:I...原创 2020-02-08 08:27:57 · 497 阅读 · 0 评论 -
JDK 原生动态代理是怎么实现的 + 面试题
JDK 原生动态代理是怎么实现的 + 面试题反射反射机制是 Java 语言提供的一种基础功能,赋予程序在运行时自省(introspect)的能力。简单来说就是通过反射,可以在运行期间获取、检测和调用对象的属性和方法。反射的使用场景在现实中反射的使用场景有很多,比如以下几个。使用场景一:编程工具 IDEA 或 Eclipse 等,在写代码时会有代码(属性或方法名)提示,就是因为使用了反射。...原创 2020-02-08 08:27:43 · 501 阅读 · 0 评论 -
MyBatis 核心组件 + 面试题
MyBatis 介绍MyBatis 是一款优秀的 ORM(Object Relational Mapping,对象关系映射)框架,它可以通过对象和数据库之间的映射,将程序中的对象自动存储到数据库中。它是 Apache 提供的一个开源项目,之前的名字叫做 iBatis,2010 年迁移到了 Google Code,并且将名字改为我们现在所熟知的 MyBatis,又于 2013 年 11 月迁移到了...原创 2020-02-08 08:27:24 · 278 阅读 · 0 评论 -
Redis 面试题汇总
Redis 面试题汇总1.Redis 使用场景有哪些?答:Redis 使用场景如下:记录帖子点赞数、点击数、评论数缓存近期热帖缓存文章详情信息记录用户会话信息2.Redis 有哪些功能?答:Redis 功能如下:数据缓存功能分布式锁的功能支持数据持久化支持事务支持消息队列3.Redis 支持哪些数据类型?答:Redis 支持的数据类型如下:String 字...原创 2020-02-08 08:27:01 · 147 阅读 · 0 评论 -
Spring 核心功能演示 + 面试题
Spring 核心功能演示Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 SpringBoot,也是基于 Spring 实现的,SpringBoot 的诞生是为了让开发者更方便地使用 Spring,因此 Spring 在 Java 体系中的地位可谓首屈一指。当然,如果想要把 Spring 所有...原创 2020-02-08 08:26:44 · 220 阅读 · 0 评论 -
Spring MVC 核心组件 + 面试题
Spring MVC 介绍Spring MVC(Spring Web MVC)是 Spring Framework 提供的 Web 组件,它的实现基于 MVC 的设计模式:Controller(控制层)、Model(模型层)、View(视图层),提供了前端路由映射、视图解析等功能,让 Java Web 开发变得更加简单,也属于 Java 开发中必须要掌握的热门框架。执行流程Spring MV...原创 2020-02-08 08:26:27 · 756 阅读 · 0 评论 -
ThreadLocal 有什么用 + 面试题
什么是 ThreadLocal?ThreadLocal 诞生于 JDK 1.2,用于解决多线程间的数据隔离问题。也就是说 ThreadLocal 会为每一个线程创建一个单独的变量副本。ThreadLocal 有什么用?ThreadLocal 最典型的使用场景有两个:ThreadLocal 可以用来管理 Session,因为每个人的信息都是不一样的,所以就很适合用 ThreadLocal ...原创 2020-02-08 08:26:11 · 314 阅读 · 0 评论 -
Java 并发包中的高级同步工具 + 面试题
Java 并发包中的高级同步工具Java 中的并发包指的是 java.util.concurrent(简称 JUC)包和其子包下的类和接口,它为 Java 的并发提供了各种功能支持,比如:提供了线程池的创建类 ThreadPoolExecutor、Executors 等;提供了各种锁,如 Lock、ReentrantLock 等;提供了各种线程安全的数据结构,如 ConcurrentHa...原创 2020-02-08 08:25:39 · 1049 阅读 · 0 评论 -
消息队列面试题汇总
消息队列面试题汇总1.消息队列的应用场景有哪些?答:消息队列的应用场景如下。应用解耦,比如,用户下单后,订单系统需要通知库存系统,假如库存系统无法访问,则订单减库存将失败,从而导致订单失败。订单系统与库存系统耦合,这个时候如果使用消息队列,可以返回给用户成功,先把消息持久化,等库存系统恢复后,就可以正常消费减去库存了。削峰填谷,比如,秒杀活动,一般会因为流量过大,从而导致流量暴增,应用挂...原创 2020-02-08 08:25:06 · 317 阅读 · 0 评论 -
线程池之 ThreadPoolExecutor + 面试题
线程池之 ThreadPoolExecutor + 面试题线程池介绍线程池(Thread Pool):把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销。为什么要使用线程池?可重复使用已有线程,避免对象创建、消亡和过度切换的性能开销。避免创建大量同类线程所导致的资源过度竞争和内存溢出的问题。支持更多功能,比如延迟任务线程池(newSchedu...原创 2020-02-07 11:57:46 · 1690 阅读 · 0 评论 -
线程池之 Executors + 面试题
线程池之 Executors + 面试题线程池的创建分为两种方式:ThreadPoolExecutor 和 Executors,上一节学习了 ThreadPoolExecutor 的使用方式,本节重点来看 Executors 是如何创建线程池的。Executors 可以创建以下六种线程池。FixedThreadPool(n):创建一个数量固定的线程池,超出的任务会在队列中等待空闲的线程,可...原创 2020-02-07 11:57:08 · 782 阅读 · 0 评论 -
线程安全之 synchronized 和 ReentrantLock + 面试题
线程安全之 synchronized 和 ReentrantLock + 面试题前面我们介绍了很多关于多线程的内容,在多线程中有一个很重要的课题需要我们攻克,那就是线程安全问题。线程安全问题指的是在多线程中,各线程之间因为同时操作所产生的数据污染或其他非预期的程序运行结果。线程安全1)非线程安全事例比如 A 和 B 同时给 C 转账的问题,假设 C 原本余额有 100 元,A 给 C 转账...原创 2020-02-07 11:56:32 · 1138 阅读 · 0 评论 -
为什么要使用泛型和迭代器 + 面试题
为什么要使用泛型和迭代器 + 面试题泛型1)为什么要用泛型?在泛型没有诞生之前,我们经常会遇到这样的问题,如以下代码所示:ArrayList arrayList = new ArrayList();arrayList.add("Java");arrayList.add(24);for (int i = 0; i < arrayList.size(); i++) { St...原创 2020-02-07 11:55:58 · 228 阅读 · 0 评论 -
为什么需要线程 + 面试题
为什么需要线程 + 面试题线程介绍线程(Thread)是程序运行的执行单元,依托于进程存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化,因而也被称为轻量级的进程。什么是进程进程(Processes)是程序的一次动态执行,是系统进行资源分配和调度的基本单位,是操作系统运行的基础,通常每一个进程都拥有自己独立的内存空间和系统...原创 2020-02-07 11:55:13 · 691 阅读 · 0 评论 -
算法常用面试题汇总
算法常用面试题汇总1.说一下什么是二分法?使用二分法时需要注意什么?如何用代码实现?二分法查找(Binary Search)也称折半查找,是指当每次查询时,将数据分为前后两部分,再用中值和待搜索的值进行比较,如果搜索的值大于中值,则使用同样的方式(二分法)向后搜索,反之则向前搜索,直到搜索结束为止。二分法使用的时候需要注意:二分法只适用于有序的数据,也就是说,数据必须是从小到大,或是从大到小...原创 2020-02-07 11:54:30 · 910 阅读 · 0 评论 -
数组和排序算法的应用 + 面试题
数组和排序算法的应用 + 面试题数组的定义与使用数组是 Java 编程中最重要的数据结构之一,也是最基本的数据结构,Java 中的常用集合 ArrayList、HashMap 等内部的实现都使用到了数组结构。数组是只能用来存储一种类型的集合,可以通过下标访问数值中的所有元素。数组的声明方式有以下两种,如整数型数组,请参考下面代码:方式一:int[] arr;方式二:int arr[];...原创 2020-02-07 11:53:13 · 751 阅读 · 0 评论 -
数据结构之队列的使用 + 面试题
数据结构之队列的使用 + 面试题队列(Queue):与栈相对的一种数据结构, 集合(Collection)的一个子类。队列允许在一端进行插入操作,而在另一端进行删除操作的线性表,栈的特点是后进先出,而队列的特点是先进先出。队列的用处很大,比如实现消息队列。Queue 类关系图,如下图所示:注:为了让读者更直观地理解,上图为精简版的 Queue 类关系图。本文如无特殊说明,内容都是基于 Ja...原创 2020-02-07 11:52:40 · 746 阅读 · 0 评论 -
设计模式常见面试题汇总
设计模式常见面试题汇总1.说一下设计模式?你都知道哪些?答:设计模式总共有 23 种,总体来说可以分为三大类:创建型模式( Creational Patterns )、结构型模式( Structural Patterns )和行为型模式( Behavioral Patterns )。**分类** **包含** **关注点** 创建型模式 工厂模式、抽象工厂模式、单例模式、建造者模式、...原创 2020-02-07 11:52:04 · 431 阅读 · 0 评论 -
类与 Object 的应用 + 面试题
类与 Object 的应用 + 面试题类介绍Java 程序是由若干个类组成的,类也是面向对象编程思想的具体实现。以下为类的基本使用:public class Cat { // 私有属性 private String name; private int age; // 构造方法 public Cat() { } // 普通方法 ...原创 2020-02-07 11:51:13 · 185 阅读 · 0 评论 -
克隆和序列化应用 + 面试题
克隆和序列化应用 + 面试题克隆在开始学习克隆之前,我们先来看看下面的代码,普通的对象复制,存在什么问题?class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { // 等号赋值( 基本类型) int number = 6;...原创 2020-02-07 11:49:51 · 158 阅读 · 0 评论 -
集合详解之 Map + 面试题
集合详解之 Map + 面试题集合有两个大接口:Collection 和 Map,本文重点来讲解集合中另一个常用的集合类型 Map。以下是 Map 的继承关系图:Map 简介Map 常用的实现类如下:Hashtable:Java 早期提供的一个哈希表实现,它是线程安全的,不支持 null 键和值,因为它的性能不如 ConcurrentHashMap,所以很少被推荐使用。HashMa...原创 2020-02-07 11:49:13 · 898 阅读 · 0 评论 -
集合详解之 Collection + 面试题
集合详解之 Collection先来看看集合的继承关系图,如下图所示:其中:外框为虚线的表示接口,边框为实线的表示类;箭头为虚线的表示实现了接口,箭头为实线的表示继承了类。为了方便理解,我隐藏了一些与本文内容无关的信息,隐藏的这些内容会在后面的章节中进行详细地介绍。从图中可以看出,集合的根节点是 Collection,而 Collection 下又提供了两大常用集合,分别是:...原创 2020-02-07 11:48:23 · 2545 阅读 · 0 评论 -
各种内部类和枚举类的使用 + 面试题
各种内部类和枚举类的使用 + 面试题内部类不仅经常出现在各种面试题中,还会在 Java 源码中频频出现,因此只有搞明白了 Java 内部类,才能搞定面试和看懂各种 Java 源码。内部类Java 内部类,分为以下四种:成员内部类静态成员内部类局部内部类匿名内部类下面分别来看这些内部类的使用。成员内部类定义在一个类中定义了另一个类,则将定义在类中的那个类称之为成员内部类。成...原创 2020-02-07 11:47:34 · 534 阅读 · 0 评论 -
对数据库的基本操作步骤 + 面试题
对数据库的基本操作步骤 + 面试题MyBatis 最初的设计是基于 XML 配置文件的,但随着 Java 的发展(Java 1.5 开始引入注解)和 MyBatis 自身的迭代升级,终于在 MyBatis 3 之后就开始支持基于注解的开发了。下面我们使用 Spring Boot + MyBatis 注解的方式,来实现对数据库的基本操作,具体实现步骤如下。MyBatis 注解版1)创建数据表...原创 2020-02-07 11:45:37 · 1131 阅读 · 0 评论 -
抽象类和接口的应用 + 面试题
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。原创 2020-02-07 11:37:40 · 480 阅读 · 1 评论 -
深入了解 Java 中的异常处理 + 面试题
深入了解 Java 中的异常处理在程序开发中,异常处理也是我们经常使用到的模块,只是平常很少去深究异常模块的一些知识点。比如,try-catch 处理要遵循的原则是什么,finally 为什么总是能执行,try-catch 为什么比较消耗程序的执行性能等问题,我们本讲内容都会给出相应的答案,当然还有面试中经常被问到的异常模块的一些面试题,也是我们本篇要讲解的重点内容。异常处理基础介绍先来看...原创 2020-02-06 08:40:01 · 296 阅读 · 0 评论 -
深入理解字符串 + 面试题
深入理解字符串 + 面试题字符串介绍字符串是程序开发当中,使用最频繁的类型之一,有着与基础类型相同的地位,甚至在 JVM(Java 虚拟机)编译的时候会对字符串做特殊的处理,比如拼加操作可能会被 JVM 直接合成为一个最终的字符串,从而到达高效运行的目的。1 String 特性String 是标准的不可变类(immutable),对它的任何改动,其实就是创建了一个新对象,再把引用指向该对...原创 2020-02-06 08:37:32 · 438 阅读 · 0 评论