
深入掌握Java面试问题
文章平均质量分 93
针对大厂常见的Java中高级面试,按照分类依次各个击破,让您在面试中获得最佳表现,获取最好Offer。作者先后美团、快手工作,八年大型互联网高并发开发经验,一直担任面试官,面试数百人,了解面试官的期望和常见套路,订阅本专栏,获得更好的offer!
高级Java进阶之路
互联网大厂资深架构师,高并发专家,精通jvm、字节码、中间件
展开
-
用注解进行参数校验,spring validation介绍、使用、实现原理分析
spring validation是什么在平时的需求开发中,经常会有参数校验的需求,比如一个接收用户注册请求的接口,要校验用户传入的用户名不能为空、用户名长度不超过20个字符、传入的手机号是合法的手机号格式等等。遇到这种情况很多人会在controller接口中去写一些判断代码。但是如果我们又提供了一个修改用户信息的接口,这个接口也需要对用户的参数进行校验,那么我们的校验代码就会散落在两个地方,和真正的业务处理逻辑耦合在一起,而且如果未来要新增一种校验逻辑也需要在修改多个地方。...原创 2022-03-24 17:39:22 · 7383 阅读 · 1 评论 -
G1 GC核心原理、执行流程
今天让我们从0开始了解G1 GC。在开始之前,我们先探讨下为什么我们学习G1 GC。 要学习一些新知识,每个人可能都有不同的目的目标。 我认为学习G1GC对于Java工程师有如下收益。成为更好的Java开发工程师,在遇到服务性能问题、GC问题时,能够通过了解到的G1知识快速定位、解决相关问题在面试时GC问题也是常问的知识点,G1GC作为大多数工程师了解不是很多的知识领域,如果稍微深入理解,就能形成更大的领先优势,无论是被面试还是面试别人学习G1中的优化技巧、原理,有机会能够举一反三应用到平时原创 2022-11-21 12:31:30 · 865 阅读 · 1 评论 -
JVM字符串去重-内存优化利器
string deduplication即字符串去重是JDK在1.8提供的功能,目的是减少相同内容字符串的内存占用,相同内容是指equals为true的两个字符串。目前只有在使用G1收集器的情况下才能开启,默认不开启,开启方法为增加 启动参数。java.lang.String字符串对象的数据保存在内部的byte[] value即一个名为value的byte数组中在一次gc之后,回收的heap区域中的活对象(live objects)都会被访问一遍,对于每个string对象,我们都会查看是否能够进行de原创 2022-07-23 15:59:45 · 715 阅读 · 0 评论 -
在2022年使用Clion编译、debug、开发Java虚拟机(Mac版本)
前两年我分享过jdk的编译debug方法,不过之前的方法不是很好用,比如有很多方法字段定义无法跳转,今天我们来学习 一下最新的jdk构建debug开发方法,完美而且优雅。原创 2022-07-10 23:09:14 · 1046 阅读 · 0 评论 -
lambda表达式实现原理分析
本文将深入了解lambda表达式的实现原理和这样的实现方案的取舍权衡。Java为什么需要lambda表达式?能够提升代码简洁性、提高代码可读性。例如,在平时的开发过程中,把一个列表转换成另一个列表或map等等这样的转换操作是一种常见需求。 在没有lambda之前通常都是这样实现的。List<Long> idList = Arrays.asList(1L, 2L, 3L);List<Person> personList = new Ar...原创 2021-12-12 10:33:40 · 3461 阅读 · 2 评论 -
kafka replication, high watermark
kafka replication复制(replication)是分布式系统中常用的保证数据可靠性服务可靠性的方案,一般数据会写入到 leader节点,leader将数据按顺序复制给follower,如果leader故障,则follower会重新选举出新的leader, 新的leader因为有复制的数据,可以对外继续提供服务。例如raft、zookeper、mysql、redis等都使用了复制。kafka,同样也使用复制保证数据可靠性,在创建topic时可以指定topic的replica原创 2022-05-23 08:14:34 · 267 阅读 · 0 评论 -
kafka partitioner和消息有序性
通过本篇文章,我们能了解kafka默认的Partitioner如何决定消息的partition,以及如何保证消息的有序性。一个消息要发送到哪个partition是由producer决定的。指定partition的需求大部分来自于消息有序性的保证。 例如一个关注系统会在用户关注、取关行为后发出关注、取关的消息,另一个系统消费这个消息, 比如用来更新缓存,关注加缓存、取关删除缓存。如果顺序出现错误比如先收到了取关消息后收到关注消息,则可能导致关注的缓存状态不对。 再例如一个订单系统原创 2022-05-12 22:49:27 · 779 阅读 · 0 评论 -
kafka rebalance机制详解
首先我们回忆一下kafka的基本的架构,kafka分为producer、broker和consumer。 为了能够横向扩展提升消息发送消费性能, 通过增加partition的方式,让消息能够保存到多个broker上。 为了提升消费性能,增加了consumer group的概念,一个topic下同一个consumer group中的不同consumer实例可以共同消费提升消费能力多个consumer消费同一个topic上的不同partition,就需要对consumer进行协调,原创 2022-05-08 15:19:42 · 2334 阅读 · 0 评论 -
ReentrantReadWriteLock读写锁源码分析
ReentrantReadWriteLock是jdk提供的读写锁,读写锁类似mysql中的读写锁概念,读锁与读锁之间可以共存,但是写锁和读锁写锁之间都不能同时加锁。读写锁适用于在一些读多写少的场景下代替ReentrantLock,让读与读之间可以并发,比如现在有一个线程不安全的数据结构,读多写少,我们可以使用ReentrantReadWriteLock,在读取时加读锁,修改数据时加写锁。使用方式ReentrantReadWriteLock的使用方式为,首先创建一个共享的ReentrantReadW.原创 2022-05-06 10:37:36 · 256 阅读 · 0 评论 -
ConcurrentHashMap源码分析
为什么需要ConcurrentHashMap,HashMap为什么有线程安全问题在前面的HashMap源码分析文章中我们提到在多个线程访问同一个HashMap对象时要注意线程安全问题,那么HashMap究竟有什么样的线程安全问题呢?线程安全问题源于多个线程对共享可变变量进行并发修改读取且缺少必要的同步操作,可能导致原子性、可见性、重排序等问题。下面介绍几种可能出现的线程安全问题线程安全问题举例1: 数据丢失问题在HashMap源码分析文章中我们了解到在put方法写入key value数据时,如果没原创 2022-05-04 10:59:53 · 210 阅读 · 0 评论 -
ReentrantLock源码分析
ReentrantLock介绍ReentrantLock是java util concurrent包中提供的一个锁实现,相对于synchronized关键字锁,ReentrantLock提供了具备超时时间的tryLock、可中断的lockInterruptibly,并且能够通过newCondition创建多个等待条件。ReentrantLock能够保证和synchronized一致的内存模型规则(happen before)。ReentrantLock中的Reentrant的意思是可重入,也就是一个原创 2022-05-04 09:48:10 · 222 阅读 · 0 评论 -
AQS AbstractQueuedSynchronizer源码分析
在解决并发问题时,开发者需要各种同步功能进行线程间的通信、协调、控制,比如信号量、锁、条件等待通知等等。JDK提供了AQS作为实现这些同步器(synchronizer)的基础,jdk中的并发工具类比如ReentrantLock, Semaphore, CountDownLatch等都是使用AQS来实现各自的线程同步能力的。AQS因为方法命名比较抽象,导致很多朋友开始难以理解各个方法的作用、原理,不用担心,通过学习本文今天我们彻底掌握AQS。AQS使用AQS整体实现设计AQS把同步器的操作分成两个操原创 2022-05-03 09:56:01 · 248 阅读 · 0 评论 -
ThreadPoolExecutor线程池源码图文精讲
ThreadPoolExecutor线程池源码图文精讲ThreadPoolExecutor介绍首先我们要思考一下为什么要使用线程池。Java提供了多线程机制让我们能够同时运行多个任务,就像多个任务由多个人同时执行,而不是一个人依次执行这些任务。但是如果我们每次执行任务都创建一个线程,导致的问题有每次创建销毁线程都有一定的开销线程数量不好控制,过多的线程会导致内存占用过多,也可能超过操作系统的限制导致异常因此Java提供了默认的线程池,帮助大家解决这些问题,通过ThreadPoolExecut原创 2022-04-17 21:28:59 · 173 阅读 · 0 评论 -
HashMap使用技巧、实现原理源码精讲
HashMap是平时开发中非常常用的一个基础类,同时在面试中也会问到大量相关知识点,掌握HashMap是高级Java开发的必要技能之一。原创 2022-04-17 18:07:48 · 652 阅读 · 0 评论