JavaProGuide系列
文章平均质量分 88
作为一份Java学习、面试指南,致力帮助大家理清Java进阶的学习路线。该指南涵盖了你成为更好的Java选手、拿下Java Offer所需掌握的核心知识、面试重点。
Java指南针
我是南哥,JavaGetOffer作者。南就南在Get到你的有趣评论点赞关注
展开
-
我以为我对Spring MVC很了解,直到我遇到了...
所有人都知道Spring MVC是是开发的,却鲜有人知道Spring MVC的理论基础来自于1978 年提出MVC模式的一个老头子,他就是Trygve Mikkjel Heyerdahl Reenskaug,挪威计算机科学家,名誉教授。Trygve Reenskaug的MVC架构思想早期用于图形用户界面(GUI) 的软件设计,他对MVC是这样解释的。MVC 被认为是解决用户控制大型复杂数据集问题的通用解决方案。最困难的部分是为不同的架构组件想出好的名字。模型-视图-编辑器是第一个。原创 2024-07-10 17:22:06 · 944 阅读 · 1 评论 -
【Apache ShenYu源码】如何实现负载均衡模块设计
整个模块为ShenYu提供了什么功能。我们可以看下上文我们提到的工厂对象。/***/核心方法很清晰,我们传入Upsteam列表,通过这个模块的负载均衡算法,负载均衡地返回其中一个对象。这也就是这个模块提供的功能。原创 2024-03-21 17:20:54 · 1274 阅读 · 1 评论 -
超越源码阅读之shenyu网关-响应参数插件
超越源码阅读之shenyu网关-响应参数插件原创 2024-02-20 22:29:20 · 865 阅读 · 0 评论 -
【源码阅读最轻松的方法】之shenyu网关-扩展性优化
那我们好奇本次优化的点究竟是什么呢,我们看下旧代码的实现可以找到答案,其实本次优化是为了后续可扩展性,把重复的代码抽象起来。可以看到ZooKeeper、Nacos、Concus的数据同步都有重复的入参,且这3个实现类实现相同的功能竟然没有一个父类来承接。我们回顾AbstractDataChangedInit提到的,这步就是一个优化了,把重复的SyncDataService入参抽象到父类AbstractDataChangedInit,同时让实现相关功能的类都有相同的父类来进行归类。原创 2024-02-21 17:39:48 · 1032 阅读 · 0 评论 -
【想进大厂还不会阅读源码】ShenYu源码-替换ZooKeeper客户端
ShenYu源码阅读。相信大家碰到源码时经常无从下手,不知道从哪开始阅读😭。我认为有一种办法可以解决大家的困扰!至此,我们发现自己开始从大量堆砌的源码中脱离开来😀。ShenYu是一个异步的,高性能的,跨语言的,响应式的 API 网关。原创 2024-02-22 21:31:38 · 1815 阅读 · 0 评论 -
【想进大厂还不会阅读源码】ShenYu源码-接入注册中心发现服务
ShenYu源码阅读。相信大家碰到源码时经常无从下手🙃,不知道从哪开始阅读😭。我们先思考下我们的阅读线索,贡献者是怎么添加发现服务的。这些发现服务是怎么和项目集成的,让ShenYu网关能从注册中心获取节点信息?原创 2024-02-24 17:31:10 · 1373 阅读 · 0 评论 -
【想进大厂还不会阅读源码】ShenYu源码-重构同步数据服务
ShenYu源码阅读📚。我们看下PR的标题和Concersation的头一句,大概意思就是重构注册中心数据同步到ShenYu网关的方式。大家看看重构了有没好处呢?不仅获得了知识,还获得了一次开源贡献,何乐而不为呢原创 2024-02-27 15:37:55 · 1240 阅读 · 0 评论 -
【想进大厂还不会阅读源码】ShenYu源码-支持motan协议
ShenYu源码阅读📚。原来的插件只支持 motan2 协议,并且是硬编码的,本次修改使MotanRpcExt 得到增强。我们可以通过以上的线索来思考我们本次的阅读线索,贡献者是做了什么实现了增强motan插件、这个motan的插件的功能是什么。原创 2024-02-29 22:39:09 · 854 阅读 · 0 评论 -
【还不会Spring源码】单例创建期间进行同步可能会导致死锁?
通过这个标题我们就可以思考本次的阅读线索了,看起来可以学到不少东西。1. 旧代码的死锁是怎么产生的。2. 贡献者通过改变什么来解决本次PR的问题呢?而阅读线索2的答案也显而易见,就是上文提到的通过后台线程来创建Micrometer单例...原创 2024-03-10 14:41:35 · 1402 阅读 · 1 评论 -
【Apache ShenYu源码】看看贡献者如何实现支持提醒通知设计
在阅读中,还发现了有个html文件忘记加了开源协议,我们提下PR修复下,又收获了一次开源贡献!!PR提交戳这。原创 2024-03-19 17:40:49 · 1263 阅读 · 0 评论 -
【Spring源码】Bean采用什么数据结构进行存储
我们再来看看中间新加入的阅读线索4,不知大家忘记了没。我们可以对照图片1的代码组织结构,发现这些没存储在包里的功能类都是比较杂乱的,想必是Spring觉得目前这些功能类还构不成一个包的体系,可能后面规模更大会统一集成起来管理。原创 2024-03-26 20:19:16 · 1274 阅读 · 0 评论 -
【Spring源码】WebSocket做推送动作的底层实例
我们都知道WebSocket可以主动推送消息给用户,那做推送动作的底层实例究竟是谁?我们先整体看下整个模块的组织机构。可以看到handleMessage方法定义了每个消息格式采用不同的消息处理方法,而这些方法该类并**没有实现**,而是留给了子类去实现。原创 2024-03-29 18:12:46 · 1601 阅读 · 0 评论 -
【Spring源码】JDBC数据源访问实现
我们再来看看阅读线索三,这方面我们从设计模式进行入手。阅读线索三:从这个模块可以学到什么我们看下以下代码,PreparedStatement实例的是由PreparedStatementCreator实现的。再来看看PreparedStatementCreator接口,一共有三个子类实现。也就是说PreparedStatement的三种不同实现被封装到三个子类中,而具体需要哪种实现,只需要传入不同。原创 2024-04-11 17:12:50 · 1425 阅读 · 2 评论 -
你们公司用的限流方案,可以讲讲吗
面试官:听说你是公司技术一号位,那我就考考你吧😊。对于ip的限流,我们是直接使用了Nginx的限流,Nginx的limit_req_zone可以设置每个IP地址在单位时间内所允许发起的请求数。原创 2024-03-18 17:39:31 · 1289 阅读 · 0 评论 -
【产品系列】你们公司产品创造了什么价值?
例如在知识付费领域《极客时间》、《知乎大学》,你会发现大部分讲师都不是该领域最顶尖的专家,反而是最优秀的内容输出者。因为从用户角度来说,他们需要的是能否轻松有效地获取知识。原创 2024-03-30 15:38:31 · 904 阅读 · 0 评论 -
【产品系列】你觉得一个产品要怎么落地?
面试官:你觉得一个产品要怎么落地?我觉得分三步走吧。一是深刻认知你产品的用户价值、产品价值;二是明确供给侧的价值;三是积极对产品进行迭代升级。原创 2024-04-01 17:06:27 · 918 阅读 · 0 评论 -
再有人问你WebSocket为什么牛逼,就把这篇文章发给他!
再有人问你WebSocket为什么牛逼,就把这篇文章发给他!2008年6月诞生了一个影响计算机世界的通信协议,原先需要二十台计算机资源才能支撑的业务场景,现在只需要一台,这得帮"抠门"老板们省下多少钱,它就是大名鼎鼎的WebSocket协议。很快在下一年也就是2009年的12月,Google浏览器就宣布成为第一个支持WebSocket标准的浏览器。WebSocket的推动者和设计者就是下面的Michael Carter,他设计的WebSocket协议技术现在每天在全地球有超过的设备在使用。原创 2024-07-05 17:47:03 · 547 阅读 · 1 评论 -
全网把Kafka概念讲的最透彻的文章,别无二家
消息队列老大哥Kafka在官网的介绍是这么说的,真是霸气:全球财富前100强公司有超过80%信任并使用Kafka。Kafka目前在GitHub目前也已经有star数27.6k、fork数13.6k。大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们开启新的一篇Java进阶指南,本期的对象是Kafka。Kafka历史Star趋势图本文收录在我开源的《Java学习面试指南》中,一份涵盖Java程序员所需掌握核心知识、面试重点的Java指南。希望收到大家的 ⭐ Star ⭐支持。原创 2024-07-03 16:23:39 · 831 阅读 · 0 评论 -
我们后端程序员不是操作MyBatis的CRUD Boy
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们接着新的一篇Java进阶指南。为啥都戏称后端是CRUD Boy?难道就因为天天怼着数据库CRUD吗?要我说,是这个岗位的位置要的就是你CRUD,你不得不CRUD。哪有公司天天能给你搭建高并发、高可用、大数据框架的活呢,一条业务线总要成长吧,慢慢成熟了就要装修工来缝缝补补、美化美化,也就是CRUD的活。不能妄自菲薄CRUD Boy,我们是后端工程师。今天来指南下操作数据库之MyBatis框架。原创 2024-06-29 16:00:56 · 784 阅读 · 0 评论 -
考考你Redis主从,就知道有没深入Redis
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天继续给大家带来新的一篇Java进阶指南。如果是单机版的数据库,像MySQL、Redis,看起来实现并不复杂。只要支持保存一条数据,同时要能够查询出来。但如果是多机版的数据库呢,各个节点的配合联调是比较复杂的过程,看起来就不是那么简单喽。要考你对Redis深不深入理解,问问Redis多机版相关的问题就知道了。我们今天就来指南下Redis主从架构。原创 2024-06-24 18:02:46 · 828 阅读 · 0 评论 -
不懂索引,简历上都不敢写自己熟悉SQL优化
大家好,我是南哥。今天给大家带来MySQL索引相关核心知识。对MySQL索引的理解甚至比你掌握还重要,索引是优化SQL的前提和基础,我们一步步来先打好地基。当MySQL表数据量不大时,缺少索引对查询性能的影响都不会太大,可能都是0.0几秒;但当表数据量逐日递增时,建立一个合适且优雅的索引就至关重要了。原创 2024-06-20 16:03:35 · 1244 阅读 · 0 评论 -
Java大佬必知必会——MySQL主从复制
如果你现在有两台MySQL,一台版本是03年的MySQL5.0,另一台是18年的MySQL8.0.11。新版本可以作为老版本的从服务器,但反过来是不可行的。如果二进制文件包含了已存在的数据,就会造成数据重复了。如果从服务器复制该二进制文件后的数据库状态是混乱无序的,那整个复制的过程就没有意义了。如果主、从服务器存储数据的顺序不一样,就会导致每次执行删除的数据都是不同的。,老版本可能无法解析新版本的新特性,甚至复制的文件格式都差异太大。MySQL从库只会复制它本身缺失的最新数据,利用二进制文件里的。原创 2024-06-17 18:07:16 · 1194 阅读 · 0 评论 -
你能不能手敲出Spring框架?
Spring最成功的地方在于创始人Rod Johnson提出的,反而不是其本身的技术。技术上今天可以有Spring春天,明天就可以有Autumn秋天。核心理念有多重要?就如1871年巴黎公社的失败。公社在对抗法国zf和普鲁士占领军的背景下成立,最初成功掌握了巴黎。然而,,加上对外部威胁的应对不足,公社最终被镇压,存在时间不足可怜的三个月。本文收录在我开源的《Java学习面试指南》中,一份覆盖Java程序员所需掌握的Java核心知识、面试重点。希望收到大家的 ⭐ Star ⭐支持。原创 2024-06-14 16:44:06 · 1489 阅读 · 0 评论 -
你的公司是怎么利用埋点来赚钱的?
举个电商产品的例子。在每个页面及页面的各个弹窗、按钮都添加进入页面、展示、点击的埋点,我们就可以获取PV(页面浏览量)、UV(独立访客数)及用户的行为数据,从而分析出每个页面、每个步骤之间的。埋点是非常频繁的数据,每1个用户使用1分钟产品,可能触发的埋点行为有上百个,业务高峰下可能一分钟就产生了上百万个请求。了,我们不知道是在下单服务节点失败的,还是在支付服务节点失败的,如果一个个节点去查日志所花费的时间是较长的。首先埋点是涉及各个部门的,包括不限于H5端、客户端、后端、运维,埋点的架构流程也分为多步。原创 2024-06-11 16:23:56 · 1217 阅读 · 0 评论 -
【面试官】知道synchronized锁升级吗
线程A获取了某个对象锁,但在线程代码的流程中仍需再次获取该对象锁,此时线程A可以继续执行不需要重新再获取该对象锁。既然获取锁的粒度是线程,意味着线程自己是可以获取自己的内部锁的,而如果获取锁的粒度是调用则每次经过同步代码块都需要重新获取锁。此时synchronized重量级锁就回归到了悲观锁的状态,其他获取不到锁的都会进入阻塞状态。来获得锁,CAS操作不需要获得锁、释放锁,减少了像synchronized重量级锁带来的。轻量级锁通过CAS自旋来获得锁,如果自旋10次失败,为了减少CPU的消耗则锁会膨胀为。原创 2024-06-08 18:33:55 · 1419 阅读 · 0 评论 -
问你为什么选择Kafka,你会怎么回答?
可靠的含义在百度百科的解释是:可以信赖、可以相信、可靠的朋友。那Kafka究竟是不是一个可靠的朋友呢?既然全世界绝大部分高可用系统都有Kafka的支持,Kafka必定有其过人之处,跟着我来分析分析。另外多提一嘴Kafka在GitHub目前已有star数27.6k、fork数13.6k。本文收录在我开源的《Java学习面试指南》中,一份覆盖Java程序员所需掌握的Java核心知识、面试重点。希望收到大家的 ⭐ Star ⭐支持。,相信你看了一定不会后悔。原创 2024-06-06 18:12:45 · 1454 阅读 · 0 评论 -
线程会很感谢你的,给它一个可以通信的传话筒
每个Java线程开始运行,按照你写的逻辑一步步的执行着,就像一个可怜的脚本,孤独地活着!只有它们内部的栈空间、程序计数器在陪伴着它们。大家给可怜的单线程多加几个玩伴吗?创建一个多线程环境,给它们一个传话筒,让它们可以互相通信、互相问好、嬉皮打闹,看来单线程会很感谢你的。原创 2024-05-30 16:59:26 · 1250 阅读 · 0 评论 -
我们竟然都中了编译器施的“迷魂药“
相信在座各位都中过编译器施的”迷魂药”,表面你以为你写的程序按你的意志在顺序执行着,看了看程序执行结果,没错确实是自己期望的结果。偷偷告诉你,这都是编译器给你造成的幻觉。编译器可不会告诉你,他为了提高你写的程序性能,下了多少功夫。编译器:下点迷魂药不过分吧?原创 2024-05-21 18:09:15 · 1160 阅读 · 0 评论 -
不懂这些,简历上都不敢写自己熟悉Redis
无论大中小公司,只要属于互联网公司,那公司的服务器必定安装着一台Redis服务器。为啥这么多公司如此青睐Redis?难道是别人有部署Redis我就要跟着有嘛,肯定不是的。既然有那么多公司青睐Redis,那它的业务场景又是什么。跟着我一起来看看看Redis有什么引人入胜的吸引力~原创 2024-05-17 17:06:08 · 1293 阅读 · 0 评论 -
先有JVM还是先有垃圾回收器?很多人弄混淆了
是先有垃圾回收器再有JVM呢,还是先有JVM再有垃圾回收器呢?或者是先有垃圾回收再有JVM呢?历史上还真是垃圾回收更早面世,先有垃圾回收再有JVM。下面我们就来刨析刨析JVM的垃圾回收~原创 2024-05-14 14:12:21 · 1449 阅读 · 4 评论 -
你写的每条SQL都是全表扫描吗
你写的每条SQL都是全表扫描**吗?如果是,那MySQL可太感谢你了,每一次SQL执行都是在给MySQL上压力、上对抗。MySQL有苦难言:你不知道索引吗?你写的SQL索引都失效了不知道吗?慢查询不懂啊?建那么多索引干嘛呢。。。原创 2024-05-10 18:00:57 · 1342 阅读 · 0 评论 -
熟悉Redis吗,那Redis的过期键删除策略是什么
对于Redis,我们业务开发一般都只关心Redis键值对的查询、修改操作,可能因为懒或者只想能用就行,呵呵。很少关心键值对存储在什么地方、键值对过期了会怎么样、Redis有没什么策略处理过期的键、Redis处理过期键又有什么作用?但这些问题却是Java程序员在Redis上进阶的必备知识,不要埋怨Java要学习的系统知识为什么这么多,因为这些确确实实是进阶的程序员所必须掌握的。我们往下看看~原创 2024-05-08 16:42:00 · 1321 阅读 · 2 评论 -
ZooKeeper数据模型你懂吗?
ZooKeeper数据节点你懂吗?那数据节点有什么类型?数据节点的版本呢?听说ZooKeeper还有事务ID,你知不知道啊?还有Watcher机制呢?ZooKeeper作为一个典型的分布式数据一致性的解决方案,ZooKeeper的技能点是Java程序员进阶所必须掌握。如果上面的问题你还不懂的话,不妨看看下文对这些概念的解析~原创 2024-05-04 17:56:14 · 1084 阅读 · 4 评论 -
Java线程池让使用线程变得更加高效
使用一个线程需要经过创建、运行、销毁三大步骤,如果业务系统每个线程都要经历这个过程,那会带来过多不必要的资源消耗。线程池就是为了解决这个问题而生,需要时就从池中拿取,使用完毕就放回去,池化思想通过复用对象大大提高了系统的性能。线程池、数据库连接池、对象池等都采用了池化技术,下面我们就来学习下线程池的核心知识、面试重点~原创 2024-04-27 16:42:28 · 1222 阅读 · 0 评论 -
【大厂面试官】知道Redis集群和Redis主从有什么区别吗
集群节点之间的故障检测和Redis主从中的哨兵检测很类似,都是通过PING消息来检测的。。。面试官抓抓脑袋,继续看你的简历…得想想考点你不懂的😰。原创 2024-03-12 15:46:40 · 1018 阅读 · 1 评论 -
Java程序员必须掌握的数据结构:HashMap
HashMap底层原理实现是每个Java Boy必须掌握的基本技能,HashMap也是业务开发每天都需要遇到的好伙伴。如此基础且核心的底层数据结构,JDK也给其赋予了线程安全的功能,我们来看看~原创 2024-04-25 18:14:47 · 1192 阅读 · 10 评论 -
Redis奔溃了快看看有没开启持久化
Reis作为一个内存数据库,整个数据库状态都存储在内存里,如果在运行过程中发生崩溃,那整个数据库状态可就完全不见了,相当于整个服务器被初始化。Redis在这方面肯定有所作为,我们来看看它做了什么功夫~原创 2024-04-19 17:07:37 · 1193 阅读 · 0 评论 -
MySQL事务的性情很“原子“,要么执行要么不执行
各位小伙伴有没遇到这个奇葩情况:业务逻辑对两个表加了事务操作,A表的存储引擎是InnoDB,B表的存储引擎却是MyISAM。事务要回滚时,麻烦就来了hhh,B表它回滚不了,那小伙伴打算要怎么处理~原创 2024-04-18 17:26:48 · 1107 阅读 · 0 评论 -
Java NIO,高效操作I/O流的必备技能
是这样的,在NIO零拷贝出现之前,一个I/O操作会将同一份数据进行多次拷贝。可以看下图,一次I/O操作对数据进行了四次复制,同时来伴随两次内核态和用户态的上下文切换,众所周知上下文切换是很耗费性能的操作。原创 2024-04-16 20:36:12 · 1238 阅读 · 0 评论 -
【Java IO】那字节流和字符流有什么区别?
而如果使用缓存流,一次性从文件里读取多个字节到缓存中,可以减少系统调用同时也减少了磁盘读取,提高了读取的效率。所以字符流是一个很方便的流了,没有必要把一个方便的流转换成一个不方便的流。,涉及到用户空间和内核空间之间的上下文切换,这些切换是很昂贵的。从输入流读取下一个数据字节,值字节以0到255范围内的。好的面试官,Java IO有两个参与对象,一个是。,这个基类提供了3个方法可以来读取字节流。,同样是提供了3个方法来支持字符流读取。好的,有这些不同之处,主要是3个方面。是这样的,虽然字节流比字符流的。原创 2024-04-15 15:08:34 · 1463 阅读 · 0 评论