
面试
文章平均质量分 95
面试相关
LBXX_1
学习知识,目光坚毅
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Future & CompletionService 的使用(性能优化实战)
创建线程的方式创建线程的方式一般有如下 4 种:继承 Thread 类实现 Runable 接口实现 Callable 接口利用线程池其中,直接继承 Thread 或者实现 Runnable 接口都可以创建线程,但是这两种方法都有一个问题就是:没有返回值,也就是不能获取执行完的结果。因此 java1.5 就提供了 Callable 接口来实现这一场景,配合 Future 和 FutureTask 使用。为什么需要 Callable?Runnable 的缺陷如下:不能返回一个返回值不能原创 2022-04-08 01:13:12 · 1454 阅读 · 1 评论 -
CountDownLatch、CyclicBarrier、Semaphore的用法和区别
CountDownLatchCountDownLatch(也叫闭锁)是一个同步协助类,允许一个或多个线程等待,直到其他线程完成操作集。CountDownLatch 使用给定的计数值(count)初始化。await 方法会阻塞直到当前的计数值(count)由于 countDown 方法的调用达到 0,count 为 0 之后所有等待的线程都会被释放,并且随后对await方法的调用都会立即返回。构造方法//参数count为计数值public CountDownLatch(int count) {};原创 2022-04-04 14:32:36 · 1345 阅读 · 1 评论 -
LRU 原理与算法实现(由浅入深)
什么是 LRULRU(Least Recently Used,最近最少使用)算法是一种内存数据淘汰策略,当内存不足时,需要淘汰最近最少使用的数据。其核心思想是长期不被使用的数据,在未来被使用到的几率也不大。因此,当数据所占内存达到一定阈值的时候需要淘汰掉这些数据。LRU 原理按照 LRU 的核心思想,不被使用的数据,在未来被使用到的几率也不大,那么当数据在最近一段时间经常被访问,那么它在以后也会经常被访问。这就意味着,如果经常访问的数据,我们需要然其能够快速命中,而不常访问的数据,我们在容量超出限制原创 2022-03-29 23:14:51 · 1894 阅读 · 0 评论 -
记一次 JVM 线上调优实战
问题描述很多时候我们的系统在使用过程中经常出现卡顿的情况,或者请求变慢等等情况,然后运维人员跑来给你说写的什么垃圾代码,CPU 飙升,经常 100%,内存飙升。如果你不知道怎么定位问题,觉得自己代码也找不出什么问题,那就说重启试试咯!!!当然了,这种处理方式可以解决,但并不能从根本上解决问题,试想一下如果对于高并发的系统,你重启项目肯定是不行的,所以我们要找到问题的源头,因为我们程序都是跑在 JVM 里面的,所以上面的 2 种情况很可能是我们的代码出现了问题,比如常见的死循环,递归等等,当然这种就是比原创 2022-03-23 00:27:11 · 2556 阅读 · 2 评论 -
缓存穿透利器之「布隆过滤器」
BitMap现代计算机用二进制(bit,位)作为信息的基础单位,1 个字节等于 8 位,例如big字符串是由 3 个字节组成,但实际在计算机存储时将其用二进制表示,big分别对应的 ASCII 码分别是 98、105、103,对应的二进制分别是 01100010、01101001 和 01100111。许多开发语言都提供了操作位的功能,合理地使用位能够有效地提高内存使用率和开发效率。Bit-map 的基本思想就是用一个 bit 位来标记某个元素对应的 value,而 key 即是该元素。由于采用了 b原创 2022-03-16 14:32:26 · 2153 阅读 · 0 评论 -
如何用 Redis 实现一个分布式锁
场景模拟一般电子商务网站都会遇到如团购、秒杀、特价之类的活动,而这样的活动有一个共同的特点就是访问量激增、上千甚至上万人抢购一个商品。然而,作为活动商品,库存肯定是很有限的,如何控制库存不让出现超买,以防止造成不必要的损失是众多电子商务网站程序员头疼的问题,这同时也是最基本的问题。在秒杀系统设计中,超卖是一个经典、常见的问题,任何商品都会有数量上限,如何避免成功下订单买到商品的人数不超过商品数量的上限,这是每个抢购活动都要面临的难点。针对大量的并发请求,我们可以通过 Redis 来抗,也就是说对于库存原创 2022-03-10 10:06:42 · 2679 阅读 · 6 评论 -
JVM 常见面试题汇总
1. JVM 的内存结构1.1 JVM 的主要组成部分及其作用JVM包含两个子系统和两个组件,两个子系统为 Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。Class loader(类装载):根据给定的全限定名类名(如:java.lang.Object)来装载class文件到Runtime data area中的method area。Execution e原创 2022-02-28 10:37:47 · 1602 阅读 · 0 评论 -
RabbitMQ 消息确认机制、补偿机制、消息幂等性实践
1. 场景先看这么几个面试题:如何保证消息的可靠性投递?即如何确定消息是否发送成功?如果失败如何处理(补偿机制)?如何保证消息不被重复消费?或者说,如何保证消息消费时的幂等性?2. 消息的可靠性投递消息确认消息确认包括主要生产者发送确认和消费者接收确认,因为发送消息的过程中我们是无法确认消息是否能路由等,一旦消息丢失我们就无法处理,所以需要确认消息,避免消息丢失。2.1 生产者确认我们知道生产者与消费者完全隔离的,不做任何配置的情况下,生产者是不知道消息是否真正到达 RabbitMQ,原创 2022-02-23 21:41:10 · 2924 阅读 · 2 评论 -
Java 集合高频面试题汇总
更多:Java 集合面试题汇总Java 中的集合类存放于 java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。Iterator:迭代器,可以通过迭代器遍历集合中的数据,主要方法为hasNext() 和 next();Collection:Collection 是集合 List、Set、Queue 的最基本的接口;Map:是映射表的基础接口。1. 常用的集合类有哪些,有什么区别Java 中常用的集合有 List,Set,Map,区别如下原创 2022-01-24 09:56:48 · 962 阅读 · 1 评论 -
简单了解 ConcurrentHashMap 在 JDK7 和 JDK8 中的区别
在了解 HashMap 的的原理时,对于 jdk7 和 8 的实现是不同的,同样,对于支持并发的 ConcurrentHashMap 来说其实现也不相同。其主要区别在于两者保证线程安全的机制不同,jdk7 采用的是分段锁的概念,每一个分段都有一把锁,锁内存储的着数据,锁的个数在初始化之后不能扩容。而 jdk8 的 ConcurrentHashMap 数据结构同 HashMap,通过 Synchronized+CAS 来保证其线程安全。jdk7在 jdk7 中,有一个非常重要的概念就是 Segment原创 2022-01-20 20:08:07 · 1357 阅读 · 0 评论 -
一文搞懂 HashMap 常见面试题
闲来无事,突然想了解一下 HashMap,于是有了这篇文章!!!原创 2022-01-10 09:49:23 · 1060 阅读 · 0 评论 -
Java 基础面试题汇总
Java 基础知识汇总原创 2022-01-18 23:33:30 · 1285 阅读 · 2 评论