- 博客(235)
- 收藏
- 关注

原创 2024java面试八股文+从入门到架构师的学习路线图+Java开发求职手册,我终于做出来了!
这几年中,我遇到了很多不同困境中的Java开发者,让我有了一个思考,在做教育这件事情上,我的目标是什么?为此,我思考了很久。然后今年有很多的粉丝或者一些学员来找我,说今年的面试很困难,不管是大企业还是小企业,都会问到一些比较深的原理层面的问题,基于这样的诉求,我制作了一套完整的面试系列视频,这套视频,主要是去帮助大家在面试前能做好准备,然后在面试过程中能从容的应对面试官提的各种问题。现在把它整理成了一份85W字的面试宝典。
2023-12-20 10:25:13
811

原创 2024春招最新30万字312道Java经典面试题52道场景题总结(附答案PDF)
最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间提升自己最快的手段就是背面试题;花了3个月的时间将市面上所有的面试题整理总结成了一份30万字的300道Java高频面试题64道场景题,分享给大家,希望大家都能拿到心仪的offer!
2023-12-13 10:58:03
2312

原创 如果Spring中有两个ID相同的Bean,会报错吗?
在Spring中,如果有两个ID相同的Bean,会不会报错?如果报错,会在哪个阶段报错?
2023-05-16 13:16:17
1257

原创 彻底讲明白Java中眼花缭乱的各种并发锁
在互联网公司面试中,很多小伙伴都被问到过关于锁的问题。今天,我给大家一次性把Java并发锁的全家桶彻底讲明白。包括互斥锁、读写锁、重入锁、公平锁、悲观锁、自旋锁、偏向锁等等等等。视频有点长,大家一定要全部看完,保证你会醍醐灌顶。
2022-11-14 20:02:55
4269

原创 雪花算法的实现原理
雪花算法英文翻译为 Snow Flake 算法,它是由Twitter开源的分布式 ID生成算法。主要应用于分库分表场景中的全局ID作为业务主键,或者生成全局唯一的订单号。那为什么要叫雪花算法呢?据相关研究表示,一般的雪花大约由10的19次方个水分子组成。在雪花形成过程中,会形成不同的结构分支,所以说大自然中不存在两片完全一样的雪花,每一片雪花都拥有自己独特的形状。雪花算法的意思是表示生成的ID如雪花一般独一无二。
2022-10-07 13:59:41
1716

原创 Java高频面试题,谈谈你对OAuth的理解,这道题你会了吗?
OAuth是一个关于授权(Authorization)的开放技术标准,在全世界得到广泛应用,它本质上是一种协议,可以在不共享用户用户名和密码的前提下,实现将授权从应用程序另一个应用程序。如图所示:咱们可以使用QQ或者微信直接登录京东APP,而无需在京东重新注册用户。相当于,用户可以在一个平台上登录,获得授权后,也可在另一平台上执行操作和查看数据。使用最为广泛的场景是SSO(单点登录)。
2022-09-08 14:16:33
941
1

原创 精选!耗时180天整理的Java面试宝典(10w字Java高级开发面试题总结和答案)!轻松斩获大厂offer!99%的大厂面试八股文,都在这里了!
大家好,我是Tom,一名工作了10多年的Java程序员。在10多年的工作生涯中,已在教育板块深耕了5年。在这几年中,我遇到了很多不同困境中的Java开发者,让我有了一个思考,在做教育这件事情上,我的目标是什么?为此,我思考了很久。 在2021年的年底,我开始在全网制作Java面试题相关的讲解与内容输出,保持日更。已经更新了100+期,并会持续制作下去。同时,我会将所有的文档免费送个大家,让每一位Java程序员在面试的不在遇到困难,并通过面试题的方式学会一个技术点。 目前全网累计播放600余万次,
2022-07-11 18:02:26
1188
4

原创 工作八年?是高级开发?竟然答不出:如何保证RabbitMQ的高可用?
一个8年工作经验的小伙伴,被问到这样一个问题,说如何保证RabbitMQ的高可用。关于这个问题呢,这位小伙伴倒是有个实操经验,就是不知道如何组织语言。所以,当时面试结果不太理想。今天,我给大家分享一下我的理解。.....................
2022-07-10 14:11:27
1685
3

原创 什么是乐观锁,什么是悲观锁?
在互联网公司面试中,很多小伙伴都被问到关于锁的理解。今天,我给小伙伴们来聊一聊我对锁的理解,不管我们互斥锁、自旋锁、重入锁、读写锁、行锁、表锁等等等等这些概念,我把他们都归纳为两种类型,乐观锁和悲观锁。1、锁的定义1)乐观锁首先来看乐观锁,顾名思义,乐观锁就是持比较乐观态度的锁。就是在操作数据时非常乐观,认为别的线程不会同时修改数据,所以不会上锁,但是在更新的时候会判断在此期间别的线程有没有更新过这个数据。......
2022-05-29 16:15:27
24939
5

原创 MySQL存储引擎MyISAM和InnoDB的区别
需要完整版PDF面试文档可扫描左侧二维码拿!你都工作3年了,怎么还不知道MyISAM和InnoDB有什么区别?一位粉丝被面试官这样一个问题。当时,这位粉丝直接回复“不知道”,这位粉丝自己也怪不好意思的。其实,面试官问他这个问题也不是随便问的,也是看了这位粉丝简历上写了熟练MySQL才提问的。其实,对于MySQL,这位粉丝可能只是非常熟练地完成建库、建表、往数据库表中读写数据这些简单的操作而已,并没有去了解建表的原理。这个面试题也给我们敲了一下警钟,对于有些技术的知识点,要是没有掌握到一定深
2022-05-20 15:30:00
11305
3

原创 ThreadLocal真的会造成内存泄漏吗?
【Java面试】并发场景中,ThreadLocal会造成内存泄漏吗?ThreadLoca在并发场景中,应用非常多。前几天有位小伙伴问我一个问题,说ThreadLocal是不是真的会造成内存泄漏?今天给大家做一个分享,个人见解,仅供参考。如果大家有其他见解可以在评论区讨论。【导航条:基本原理】(转场,屏幕黑底白字,正中央出现“1ThreadLocal的基本原理”)1、ThreadLocal的基本原理考虑到很多小伙伴可能还不太了解ThreadLocal,我先简单介绍一下Th..
2022-05-01 17:45:00
1472
4

原创 ConcurrentHashMap是如何保证线程安全的?
ConcurrentHashMap相当于是HashMap的多线程版本,它的功能本质上和HashMap没什么区别。因为HashMap在并发操作的时候会出现各种问题,比如死循环问题、数据覆盖等问题。而这些问题,只要使用ConcurrentHashMap就可以完美地解决。那问题来到了,ConcurrentHashMap它是如何保证线程安全的呢?1、JDK1.7实现原理首先,我们来看JDK1.7中ConcurrentHashMap的底层结构,它基本延续了HashMap的设计,采用的是数组加链...
2022-04-29 17:30:00
16487
7

原创 为什么HashMap会产生死循环?
HashMap死循环是一个比较常见、也是比较经典的面试题,在大厂的面试中也经常被问到。HashMap的死循环问题只在JDK1.7版本中会出现,主要是HashMap自身的工作机制,再加上并发操作,从而导致出现死循环。JDK1.8以后,官方彻底解决了这个问题。1、数据插入原理在分析原因之前,我先带大家了解一下JDK1.7中HashMap插入数据的原理,来看动画演示:由于JDK1.7中HashMap的底层存储结构采用的是数组加链表的方式。而HashM...
2022-04-28 18:00:00
10342
12

原创 Spring为何需要三级缓存解决循环依赖,而不是二级缓存?
今天给大家分享一道大厂面试真题,Spring为何需要三级缓存解决循环依赖,而不是二级缓存?我一共分为五个部分来给大家介绍:1、什么是循环依赖?循环依赖就是指循环引用,是两个或多个Bean相互之间的持有对方的引用。在代码中,如果将两个或多个Bean互相之间持有对方的引用,因为Spring中加入了依赖注入机制,也就是自动给属性赋值。Spring给属性赋值时,将会导致死循环。那么,哪些情况会出现循环依赖呢?2、哪些情况会出现循环依赖?循环依赖有三种形态:1、相互依赖,也就是A 依赖 B,B 又依赖 A,
2022-04-18 14:46:29
4418
5

原创 Spring Bean的生命周期全过程
Spring Bean的生命周期全过程 大家好,我是被编程耽误的文艺Tom。今天能给大家介绍一下Spring Bean生命周期全过程,这道题呢也是大厂高频面试题。接下来我给大家做一个详细的分析和解答。Spring生命周期全过程大致分为五个阶段:创建前准备阶段、创建实例阶段、依赖注入阶段、容器缓存阶段和销毁实例阶段。这张图呢展示了Spring Bean生命周期完整流程,其中对每个阶段...
2022-04-15 16:02:30
2836
1

原创 肝了30天总结,史上最全面透彻的Spring核心原理分析和27道高频面试题
1 什么是Spring框架,Spring框架有哪些主要模块Spring框架是一个为Java应用程序开发提供综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring框架本身也是按照设计模式精心打造的,这使得我们可以在开发环境中安心地集成Spring框架,不必担心Spring是如何在后台工作的。主要模块内容介绍可以参考之前章节的介绍。2 使用Spring框架能带来哪些好处下面列举了一些使用Spring框架带来的主要好处。
2021-12-30 13:37:29
436

原创 【紧急】Log4j又发新版2.17.0,只有彻底搞懂漏洞原因,才能以不变应万变
1 事件背景经过一周时间的Log4j2 RCE事件的发酵,事情也变也越来越复杂和有趣,就连 Log4j 官方紧急发布了 2.15.0 版本之后没有过多久,又发声明说 2.15.0 版本也没有完全解决问题,然后进而继续发布了 2.16.0 版本。大家都以为2.16.0是最终终结版本了,没想到才过多久又爆雷,Log4j 2.17.0横空出世。相信各位小伙伴都在加班加点熬夜紧急修复和改正Apache Log4j爆出的安全漏洞,各企业都瑟瑟发抖,连网警都通知各位站长,包括我也收到了湖南长沙高新区网警的通知。
2021-12-20 10:33:47
2012

原创 花了30天才肝出来,史上最全面Java设计模式总结,看完再也不会忘
本文所有内容均节选自《设计模式就该这样学》序言Design Patterns: Elements of Reusable Object-Oriented Software(以下简称《设计模式》),一书由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides合著(Addison-Wesley,1995)。这四位作者常被称为“四人组(Gang of Four)”,而这本书也就被称为“四人组(或 GoF)”书。他们首次给我们总结出一套软件开发可以反复.
2021-11-26 14:00:01
3847
2

原创 彻底搞懂Spring状态机原理,实现订单与物流解耦
本文节选自《设计模式就该这样学》1 状态模式的UML类图状态模式的UML类图如下图所示。2 使用状态模式实现登录状态自由切换当我们在社区阅读文章时,如果觉得文章写得很好,我们就会评论、收藏两连发。如果处于登录情况下,则可以直接做评论、收藏这些行为。否则,跳转到登录界面,登录后再继续执行先前的动作。这里涉及的状态有两种:登录与未登录;行为有两种:评论和收藏。下面使用状态模式来实现这个逻辑,代码如下。首先创建抽象状态角色UserState类。public abstract class Us..
2021-11-16 13:46:15
1965

原创 没有性能瓶颈的无限级菜单树应该这样设计
本文节选自《设计模式就该这样学》1 使用透明组合模式实现课程目录结构以一门网络课程为例,我们设计一个课程的关系结构。比如,我们有Java入门课程、人工智能课程、Java设计模式、源码分析、软技能等,而Java设计模式、源码分析、软技能又属于Java架构师系列课程包,每个课程的定价都不一样。但是,这些课程不论怎么组合,都有一些共性,而且是整体和部分的关系,可以用组合模式来设计。首先创建一个顶层的抽象组件CourseComponent类。/** * Created by Tom. */pub.
2021-11-04 13:01:34
3174
12

原创 1个月连载30个设计模式真实案例(附源码),挑战年薪60W不是梦
本文节选自《设计模式就该这样学》本文自2012年10月29日起持续连载,请大家持续关注....序言Design Patterns: Elements of Reusable Object-Oriented Software(以下简称《设计模式》),一书由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides合著(Addison-Wesley,1995)。这四位作者常被称为“四人组(Gang of Four)”,而这本书也就被称为“四人组(或 .
2021-10-29 20:55:27
1613
2
原创 Integer a1=100 Integer a2=100,a1==a2?的运行结果?
首先, Integer a1=100, 把一个int数字赋值给一个封装类型,Java会默认进行装箱操作,也就是调用Integer.valueOf()所以,对于这个面试题来说,两个Integer对象,因为值都是100,并且默认通过装箱机制调用了valueOf方法。其次,在Integer内部设计中,用到了享元模式的设计,享元模式的核心思想是通过复用对象,减少对象的创建数量,按照大家对于Java基础的认知,两个独立的对象用==进行比较,是比较两个对象的内存地址。但是在这个场景中,得到的结果是true。
2024-01-19 17:56:59
691
原创 能谈一下CAS机制吗?
所以呢,CompareAndSwap的底层实现中,在多核CPU环境下,会增加一个Lock指令对缓存或者总线加锁,从而保证比较并替换这两个指令的原子性。CompareAndSwap是一个native方法,实际上它最终还是会面临同样的问题,就是先从内存地址中读取state的值,然后去比较,最后再修改。这个逻辑看起来没有任何问题,但是在多线程环境下,会存在原子性的问题,因为这里是一个典型的,Read - Write的操作。否则,返回false,表示修改失败,而这个过程是原子的,不会存在线程安全问题。
2024-01-19 12:01:20
501
原创 死锁的发生原因和怎么避免
所谓按序申请,是指资源是有线性顺序的,申请的时候可以先申请资源序号小的,再申请资源序号大的,这样线性化后自然就不存在循环了。对于“不可抢占”这个条件,占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源,这样不可抢占这个条件就破坏掉了。循环等待条件,线程 T1 等待线程 T2 占有的资源,线程 T2 等待线程 T1 占有的资源,就是循环等待。(如图),死锁,简单来说就是两个或者两个以上的线程在执行的过程中,争夺同一个共享资源造成的相互等待的现象。
2024-01-19 12:01:18
453
原创 程序员:“高薪是骗局!!”,事多钱少才是真。
坐在图书馆里,看着身边一起奋斗的同学,我顿时感觉充满了力量,最后我顺利拿到了中电在线的offer,一步一步的做到了技术总监。现在出来创业,我知道很多的程序员对于自己的未来很迷茫,不知道如何突破“35岁”的大关,也不知道程序员这行还能不能赚到钱。我是一个爱谈钱的人,非得是高回报的事情我才建议大家去冲一冲,那么程序员的高回报事情是什么呢?跟大部分人一样,大一玩了整整一年,躺在宿舍床上,舍友全部都已经睡去,只有我,翻来覆去的睡不着,迷茫着自己的未来。第二天醒来,又继续想,做程序员能不能赚到钱呢。
2024-01-18 17:40:02
505
原创 new String(“hello“)之后,到底创建了几个对象?
lo存在于字符串常量池中,new String("lo")存在于堆中,String s4 = "hel" + new String("lo")实质上是两个对象的相加,编译器不会进行优化,相加的结果存在于堆中,而s1存在于字符串常量池中,当然不相等。否则,复制一份该字面量到字符串常量池并返回它的引用。接下来,JVM 会拿字面量“hello”去字符串常量池里面试图去获取它对应的 String 对象引用,如果拿不到,就会在堆内存里面创建一个”hello”的 String 对象,并且把引用保存到字符串常量池里面。
2024-01-18 11:29:05
934
原创 Dubbo的出现背景
Dubbo是阿里巴巴内部使用的一个分布式服务治理框架,2012年开源,因为Dubbo在公司内部经过了很多的验证相对来说比较成熟,所以在很短的的还是件就被很多互联网公司使用,再加上阿里出来的很多技术大牛进入各个创业公司担任技术架构以后,都以Dubbo作为主推的RPC框架使得dubbo很快成为了很多互联网公司的首要选择。服务治理主要是针对大规模服务化以后,服务之间的路由、负载均衡、容错机制、服务降级这些问题的解决方案,而Dubbo实现的不仅仅是远程服务通信,并且还解决了服务路由、负载、降级、容错等功能。
2024-01-18 11:26:12
823
原创 dubbo的应用场景与高级特性之高级用法篇
🍅 作者简介:Tom,咕泡科技的联合创始人,兼任CTO(首席技术官)。著有畅销书《设计模式就该这样学》、《Netty4核心原理与手写RPC框架实战》、《Spring5核心原理与30个类手写实战》,也是电子工业出版社“Java架构师成长丛书”长期签约作者。
2024-01-17 15:31:00
904
原创 30岁Java老炮?非大厂不进!
可长达半年的空窗期,也是真实存在的,对于30岁左右的技术人来说,这样的黄金时间,是耽误不起一点的,及时找准自己的位置,完成职场升级,对未来的职业发展也尤为重要,所以,如果大家想进入大厂,但又一直没有找到机会,不妨试试咕泡大厂私教班,老师皆为大厂的在职专家,而且至少是P7级以上的管理者,十多年左右的工作经验。又是怎么一步一步突破面试?面试的过程中,我们的私教老师,也动用了自己的个人资源,联系到正在某团工作的朋友,咨询了目前正在美团工作的工程师的建议,以及关于面试问题的相关梳理,针对性的对技术面进行了强化。
2024-01-17 15:09:00
464
原创 爆肝一个月,24年春招java面试题总计50w字(附答案)
站在面向对象的思想来说,Runnable相当于一个任务,而Thread才是真正处理的线程,所以我们只需要用Runnable去定义一个具体的任务,然后交给Thread去处理就可以了,这样达到了松耦合的设计目的
2024-01-15 18:02:32
3555
4
原创 Java开发、28岁、2个月、从离职到拿下60W+Offer
我们能理解人有惰性,为了让你们能学的会,我们会安排专门的班主任老师实时跟进你的学习情况,同时,咕泡云课堂也会记录你的学习时长,如果你在规定的时间内没有学习,那么班主任一定会及时督促。这是事实,但也不一定全对,如果你的技术达标,职场素养优秀,那么任何时候,优秀的岗位都会向你开放,但如果简历平平,技术能力不够扎实,项目学历也不拔尖,那么任何时候找工作,可能都是“困难模式”。在2023年的尾巴上,回顾一整年,在我们服务的学员中,能更快拿到结果的人,身上总有闪光的特质。大家都在说,现在内卷严重;
2024-01-05 10:56:08
901
原创 HashMap什么时候扩容,如何扩容?
在任何编程语言中,我们经常需要在内存中去临时存放一段数据,我们可以使用官方封装好的一些集合框架。比如说用List、HashMap、Set等等作为临时数据存储的容器。当我们创建一个集合对象的时候,实际上就是在内存里面一次性申请了一块内存空间。而这个内存空间的大小是在创建集合对象的时候去指定的。比如HashMap的默认大小是16。在实际开发过程中,我们需要去存储的数据量往往是大于存储容器的默认大小的。所以,出现容量默认大小不能满足需求时,就需要扩容。
2024-01-04 11:30:26
1630
原创 谈谈ArrayList、LinkedList、和Vector的存储性能及特性
关于ArrayList、Vector和LinkedList 的存性能理及特性,我从以下3个方面来分析:1)首先,ArrayList 和 Vector 的底层都是采用数组的来存储数据,而且都是根据索引来取数据,这样设计使得获取数据快而插入数据慢。另外,每次扩容都要移动数组中的元素,存储数据量较大的时候会影响读写性能。2)其次,由于Vector 中的方法都使用了 synchronized 修饰,因此 ,Vector 中对数据操作都是线程安全的,但性能上比ArrayList 差。
2023-12-30 10:10:00
1076
原创 Spring中用到了哪些设计模式?
1、工厂模式。Spring的BeanFactory类,就是使用了简单工厂模式。它主要提供getBean()方法,用来创建对象的实例;我们见得比较多的ApplicationContext也是继承自BeanFactory。2、单例模式。Spring中的Bean默认为singleton单例。我们可以通过配置Bean的作用域scope参数来进行修改。Spring Bean一共有5种内置的作用域,分别是singleton、prototype、request、session、globalSession。
2023-12-29 10:04:46
591
原创 看完这篇文章告诉你RocketMQ为什么要放弃Zookeeper?
对于分布式消息中间件而言,当不同的消息存储在不同的Broker上,生产者和消费者对于Broker的选取,路由选择会面临以下几个问题:1、生产者发一条消息,应该发到哪个Broker?消费者接收消息,从哪个Broker获取消息?2、如果Broker增加或者减少了,客户端怎么知道?3、一个新的生产者或者消费者加入,如何感知?所以,只要是跟分布式服务调用的场景,都需要一个注册中心,在RocketMQ当然也中需要有一个这样的角色来管理Broker的信息。
2023-12-28 10:50:51
1139
原创 Spring中有几种依赖注入的方式
文末整理了一些我整理的从小白到架构师的学习资料,价值很高!Spring中,依赖注入的方式主要有以下三种:1、通过构造器注入,这也是Spring官方推荐的方式,如代码所示:这种方式,在注入对象很多的情况下,构造器参数列表会很长,所以,不够灵活。当然,好处就是,对象初始化完成后,就可可获得可使用的对象。另外,还可以检测循环依赖。2、通过Setter方法注入,这种方式在日常开发中不太常见,如代码所示:这种方式是利用set方法来注入,可以确保注入前不依赖Spring容器。
2023-12-27 09:30:14
634
原创 导致Spring事务失效的原因有哪些?
文末整理了一些我整理的从小白到架构师的学习资料,价值很高!下面给大家总结一下,导致Spring事务失效的原因主要有以下8个:1、方法没有被public修饰在开发过程中,如果@Transactional事务注解添加在不是public修饰的方法上,这个时候,Spring的事务就会失效。2、类没有被Spring托管如果事务方法所在的类没有加载到Spring IoC容器中,也就是说,事务方法所在的类没有被Spring管理,从而导致Spring无法实现代理,所以,Spring事务也会失效。
2023-12-26 10:50:40
670
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人