
面试题专栏
文章平均质量分 75
Java面试基础专栏
扛麻袋的少年
32了,即将被优化,找工作机会……
展开
-
【Java面试题】Spring 为何需要三级缓存解决循环依赖,而不是二级缓存
1.Spring bean生命周期2.Spring 如何解决 bean 之间循环依赖转载 2022-06-01 17:00:05 · 1672 阅读 · 1 评论 -
RSA加密、解密、签名、验签的原理及方法
一、RSA加密简介 RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。二、RSA加密、签名区别 加密和签名都是为了安全性考虑,但略有不同。常有人问加密和签名是用私钥还是公钥?其实都是对加密和签名的作用有所混淆。简单的说,加密是为了防转载 2022-04-24 10:25:54 · 6142 阅读 · 0 评论 -
【Java面试题】有三个线程 t1,t2,t3,怎么确保它们按顺序执行?
有三个线程 t1,t2,t3,怎么确保它们按顺序执行原创 2021-10-28 16:30:05 · 5100 阅读 · 18 评论 -
ArrayList.trimToSize()方法
在看《Java 核心技术卷一》时,认识到了trimToSize()这个方法。原文内容如图所示。接下来拿例子来参考一下:下文内容转载自其他博主blog,讲解的很清晰。 前几天看了Java ArrayList,没有明白trimToSize()这个方法是什么意思,所以看了一下源码并且debug一下自己的一个例子,明白了其中的含义。贴在这里。ArrayList al = new ArrayList(10);for(int i=0;i<10;i++){ al.add(i);}al.转载 2021-09-03 22:31:46 · 363 阅读 · 0 评论 -
【Java面试题】为什么会出现4.0-3.6=0.3999999999这种现象?
为什么会出现4.0-3.6=0.3999999999这种现象? 很多人都知道:浮点数值不适用于无法接受舍入误差的金融计算中,即:我们常说的丢失精度问题。 很多人还知道这样一句话:这种舍入误差的主要原因是浮点数值采用二进制系统表示, 而在二进制系统中无法精确地表示分数 1/10。这就好像十进制无法精确地表示分数 1/3—样。针对十进制,1除以3是除不尽的。很好理解,因为我们一直接触的就是十进制,等于0.333333… 很好理解但是:二进制系统中无法精确地表示分数 1/10。为啥呢。原创 2021-08-28 09:45:40 · 7536 阅读 · 37 评论 -
StringUtils.tokenizeToStringArray()
读Spring源码的时候,遇到这么个东西,记录一下BeanDefinitionParserDelegate/** * Parses the supplied {@code <bean>} element. May return {@code null} * if there were errors during parse. Errors are reported to the * {@link org.springframework.beans.factory.parsing.Pro转载 2021-03-15 16:22:01 · 2372 阅读 · 1 评论 -
分布式ID生成方案总结
ID 是数据的唯一标识,传统的做法是利用 UUID 和数据库的自增 ID,在互联网企业中,大部分公司使用的都是Mysql,并且因为需要事务支持,所以通常会使用 Innodb 存储引擎,UUID 太长以及无序,所以并不适合在 Innodb 中来作为主键,自增 ID 比较合适。 但是随着公司的业务发展,数据量将越来越大,需要对数据进行分表,而分表后,每个表中的数据都会按自己的节奏进行自增,很有可能出现 ID 冲突。这时就需要一个单独的机制来负责生成唯一 ID,生成出来的 ID 也可以叫做分布式 ID,或转载 2020-08-01 17:47:04 · 749 阅读 · 0 评论 -
为什么阿里巴巴要禁用Executors创建线程池?
看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,通过源码分析禁用的原因写在前面通过阅读本篇文章你将了解到:线程池的定义Executors创建线程池的几种方式ThreadPoolExecutor对象线程池执行任务逻辑和线程池参数的关系Executors创建返回ThreadPoolExecutor对象OOM异常测试如何定义线程池参数如果只想知道原因可以直接拉到总结那线程池的定义管理一组工作线程。通.转载 2020-08-14 11:39:03 · 1017 阅读 · 0 评论 -
Hystrix 隔离策略:线程池、信号量
记一次被问到的面试题:Hystrix系列之信号量、线程池Hystrix内部,提供了两种模式隔离策略:信号量、线程池。(默认情况下,Hystrix使用 线程池模式。)信号量隔离,适应非网络请求,因为是同步的请求,无法支持超时,只能依靠协议本身线程池隔离,即:每个实例都增加个线程池进行隔离总结:线程池隔离信号量隔离是否支持超时支持,超时直接返回不支持,如果阻塞,只能通过调用协议(如:socket超时才能返回)是否支持熔断支持,当线程池到达maxSize后,再请原创 2020-08-10 20:20:39 · 2353 阅读 · 6 评论 -
【Java面试题】线程的生命周期包括哪几个阶段?
面试官:您知道线程的生命周期包括哪几个阶段?应聘者:线程的生命周期包含5个阶段,包括:新建、就绪、运行、阻塞、销毁。新建:就是刚使用new方法,new出来的线程;就绪:就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行;运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能;阻塞:在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如sleep()、wait()之后线程就处于了阻塞状转载 2020-08-10 10:55:20 · 6871 阅读 · 4 评论 -
深入分析 TCP/UDP 协议
在分布式架构中,最基本的是:如何去完成一个远程通信。如果没有网络,就没有所谓的分布式系统。如果要涉及到系统之间的通信,就会存在我要发送消息,这个消息会被服务端所接收。消息的形式有很多种,如:字节流、字节数组、Java对象等,外部系统接收到这些数据后需要对其进行处理。在网络层中基于消息通信,有如下两种协议:基于TCP/IP协议和基于UDP/IP协议1.简单了解网络领域常用知识...原创 2019-07-22 17:26:30 · 4254 阅读 · 0 评论 -
InnoDB 事务与锁的前世今生
本文目录:写在开头1.InnoDB 支持的特性2.事务Ⅰ. 什么是事务Ⅱ. 事务的四个特性(ACID)Ⅲ. 事务并发带来的问题Ⅳ. 事务四种隔离级别Ⅴ.查看 MySQL 事务隔离级别Ⅵ.查看 MySQL 是否开启事务3.锁3.1 共享锁(S锁)3.2 排他锁(X锁)3.3 意向锁3.3.1 意向共享锁(IS锁)3.3.2 意向排他锁(IX锁)3.4 自增锁3.5 临键锁 & 间隙锁 & 记录锁3.5.1 临键锁 (InnoDB引擎默认行锁算法)3.5.2 间隙锁3.5.3 记录锁4.事务并发原创 2020-06-15 16:35:46 · 1754 阅读 · 2 评论 -
MySQL为什么没有走索引?是这些原因在搞鬼
1.列的离散性 你知道吗?即使你对数据库中你要查询的列添加了索引,它也有可能不会走索引。 这其实和一个叫 列的离散性 相关的问题。在数据库表中,MySQL 在查询时,会对表中查询的列进行离散性计算。计算出的离散性结果越大,说明这一列的离散型越好,选择性就越好。 列的离散性计算公式为:count(distinct col) : count(col)。我们来计算一下下图三列的离散性:为什么说:离散性越好,选择性就越好呢? 我们将上图 sex 列进行 B+Tree 二叉树转换(男:0 女:1)。附原创 2020-06-09 16:22:33 · 4242 阅读 · 2 评论 -
还不了解 MyISAM 和 InnoDB 的区别?看这里就够了
MyISAM 和 InnoDB 作为 MySQL 两大常用的存储引擎,经常在面试中被提及到。本文就来介绍一下它们之间的区别。 如果你想了解MySQL 存储引擎相关内容,请跳转链接:一文带你看懂 MySQL 存储引擎区别: 1.InnoDB 支持事务,MyISAM 不支持。对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务; 2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的In原创 2020-06-05 18:56:53 · 16209 阅读 · 1 评论 -
一文带你看懂 MySQL 存储引擎
本文目录:1.MySQL体系结构2.存储引擎介绍3.MySQL 存储引擎特性4.MySQL 有哪些存储引擎5.了解 MySQL 数据存储方式6.存储引擎介绍6.1 CSV存储引擎6.1.1 使用CSV存储引擎建表6.1.2 查看数据所在硬盘位置6.2 Archive存储引擎6.2.1 使用Archive存储引擎建表6.2.2 Archive对比InnoDB,使用函数批量存储1w条数据6.3.3 查看数据所在硬盘位置6.2.4 使用命令对比数据容量占用情况6.3 Memory5.【重点】InnoDB 和 My原创 2020-06-05 13:22:39 · 13719 阅读 · 2 评论 -
SQL 性能问题解决方案
MySQL笔记(六):1.什么原因导致数据库性能瓶颈问题 1.数据库连接数 2.表数据量大(你可能会加索引,加索引后,命中索引还好;如果命不中索引,将会进行全表扫描,数据量越大,效率越低)(数据库索引,是硬盘级别的索引。基础B树实现,它是存储在硬盘里面IO 操作。索引越多,树越大,查询效率也会降低) 3.硬件资源问题导致瓶颈(QPS/TPS) (每秒事务数/每秒查询数)2.数据库性能优化方案...原创 2019-11-18 09:37:40 · 2038 阅读 · 0 评论 -
MySQL 索引底层为什么选择B+Tree
MySQL笔记(七):MySQL索引 索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。为什么要使用索引索引能够大大的减少存储引擎需要扫描的数据量,无索引则进行全表扫描;索引可以把随机IO变成顺序IO(因为IO操作很耗时);索引可以帮助我们在...原创 2020-01-16 10:05:51 · 3281 阅读 · 1 评论 -
Spring IOC容器初始化后,执行一些逻辑操作的几种实现方式
本文目录:1.类继承ApplicationContextAware,重写setApplicationContext()方法2.类继承InitializingBean,重写afterPropertiesSet()方法3.在类下的方法上,添加@PostConstruct注解。(@PreDestroy注销使用)4.类继承BeanPostProcessor,重写postProcessBeforeInitialization()、postProcessAfterInitialization()方法5.SmartLif原创 2020-05-13 12:46:42 · 5182 阅读 · 4 评论 -
【Java面试题】ThreadLocal,你想了解的都在这里(进来瞧瞧不后悔)
1.什么是 ThreadLocal2.ThreadLocal源码2.1 实现思路2.2 分析前你该知道1.ThreadLocalMap 规定了 table 的大小必须是2的幂次方2.3 源码分析1.set(T value)set源码分析小结2.get()get图解get源码分析小结3.remove()remove源码分析小结3.再谈引用4.ThreadLocal使用场景5.ThreadLocal使用示例5.1 使用共享变量方式5.2 使用ThreadLocal方式6.谈谈原创 2020-05-07 17:29:33 · 873 阅读 · 0 评论 -
为什么ConcurrentHashMap的读操作不需要加锁?
1.为什么ConcurrentHashMap的读操作不需要加锁?我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢?2.ConcurrentHashMap的简介我想有基础的同学知道在 JDK 7 中是采用Segment + HashEntr...转载 2020-04-22 10:42:50 · 1944 阅读 · 5 评论 -
【Java面试题】快排原理分析
写在前面 在面试中,经常会被问到 Java 中的一些经典排序,尤以快排为最。在 Java 中的经典排序有如下常用的几种:1.冒泡排序 2.快速排序(快排) 3.插入排序 4.归并排序 5.选择排序 6.希尔排序 7.堆排序 8.基数排序,本文我们就来简单分析一下快排的原理。概念介绍 &nb...原创 2020-04-21 14:33:07 · 693 阅读 · 0 评论 -
并发和并行的区别
写在前面 并发 和 并行,它们两者只有一"字"之差,它们彼此之间有所关联又常被混淆;但是并发和并行的含义却是不同的。博主也是参考了很多篇文章之后才初露头角,勉强了解了一些。现在将其总结下来,供日后方便查看。概念 并发:是指程序含有多个逻辑上的独立执行块,他们可以独立...原创 2020-04-20 17:21:13 · 2857 阅读 · 0 评论 -
final 关键字的作用
本文目录:写在前面:final关键字的作用总结写在前面: final 关键字的作用是每次面试的时候必问求职者的两个问题之一,另外一个问题就是static 关键字。final 和static一样,都是一个小问题。但是却可以看到一个人的基础是否扎实以及平时是否有钻研精神。final关键字的作用 &nb...转载 2020-04-20 14:58:20 · 670 阅读 · 0 评论 -
static 关键字的作用
本文目录:写在前面:静态变量和静态方法: Ⅰ.static关键字最基本的用法是:写在前面: 之前讲到 final 关键字的作用是每次面试的时候必问求职者的两个问题之一,另外一个问题就是文本会写到的static。final 和static一样,都是一个小问题。但是却可以看到一个人的基础是否扎实以及平时是否...转载 2020-04-20 13:30:29 · 1364 阅读 · 0 评论 -
可重入读写锁:ReentrantReadWriteLock
可重入读写锁:ReentrantReadWriteLock原创 2020-04-14 14:55:37 · 1384 阅读 · 2 评论 -
Java 的深拷贝和浅拷贝
1.创建对象的 5 种方式通过 new 关键字 这是最常用的一种方式,通过 new 关键字调用类的有参或无参构造方法来创建对象。比如 Object obj = new Object();通过 Class 类的 newInstance() 方法 &nb...转载 2020-04-20 11:39:12 · 942 阅读 · 0 评论