自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(974)
  • 收藏
  • 关注

原创 金九银十如何抱佛脚?2023最新大厂 Java 面试真题合集(附完整答案解析)

2021 秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法,但国内大环境如此,你不背,你就找不到满意的工作,很现实的一个事情。当然,你可以选择出淤泥而不染,身体力行的表示反抗,对推动国内互联网陋习改革出一份力,那我还是很佩服的。这些面试资料都是我通过各种渠道收集到的大厂面试真题,并附有最新的权威答案,绝不是网络上那些已经是几年前甚至十几年前的面试题所能媲美的,,争取早日上岸,拿到 offer 后别忘了回来给我点个。

2023-09-01 16:07:37 354 1

原创 万字解析!Java - ThreadPoolExecutor源码

首先ThreadPoolExecutor中,一共提供了7个参数,每个参数都是非常核心的属性,在线程池去执行任务时,每个参数都有决定性的作用。但是如果直接采用JDK提供的方式去构建,可见设置的核心参数最多就两个,这样就会导致对线程池的控制粒度很粗。所以在阿里规范中也推荐自己创建自定义线程池。自定义构建线程池,可以细粒度的控制线程池,去管理内存的属性,并且针对一些参数的设置可能更好的在后期排查问题。1234567publicint// 核心工作线程(当前任务执行结束后,不会销毁)int。

2023-09-01 14:08:14 353

原创 万字超详细解析!Spring之基于注解的声明式事务

try {// 开启事务:关闭事务的自动提交// 核心操作// 提交事务// 回滚事务}finally{// 释放数据库连接编程式事务的缺陷:细节没有被屏蔽:所有细节都需要程序员自己来完成,比较繁琐。代码复用性不高:每次实现功能都需要自己编写代码,代码没有得到复用。编程式:自己写代码实现功能声明式:通过配置让框架实现功能因为没有使用事务,图书的库存更新了,但是用户的余额没有更新。

2023-09-01 14:05:29 634

原创 7K字详解换上 HikariCP 连接池到底有多快?

接下来介绍了数据库连接池中速度很快的 HikariCP ,它在池化技术之上,又通过编码技巧进行了进一步的性能提升,HikariCP 是我重点研究的类库之一,我也建议你加入自己的任务清单中。数据库是我们工作中经常使用到的组件,针对数据库设计的客户端连接池是非常多的,它的设计原理与我们在本文开头提到的基本一致,可以有效地减少数据库连接创建、销毁的资源消耗。我们再来介绍一下对象的生成过程,如下图,对象在进行获取时,将首先尝试从对象池里拿出一个,如果对象池中没有空闲的对象,就使用工厂类提供的方法,生成一个新的。

2023-09-01 13:54:54 132

原创 2023汇总Java 面试题 1300 问,刷完直接拿大厂offer!

前三者 LZ 将淋漓尽致地挥毫于这篇文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题的过程中有没有去思考,刷题只是次之,这又是一个层次了,这里暂时不提后面再谈。现在大厂内卷现象泛滥,而且 996 的传统依旧肆虐。但没有哪位程序员能架得住互联网大厂的高薪职位诱惑。特别是我还有一位在阿里工作 7 年多的老表,在其耳旁风之下,不断将大厂描绘的美丽风景刻画在我脑海中,也让我一直有着想进大厂镀金的梦想。

2023-08-31 17:27:57 76

原创 【干货分享】18 个一线工作的常用 Shell 脚本,建议收藏!

假设服务器环境为 lnmp,近期访问经常出现 502 现象,且 502 错误在重启 php-fpm 服务后消失,因此需要编写监控脚本,一旦出现 502,则自动重启 php-fpm 服务。加个死循环,如果IP可用就退出,不可用提示继续输入,并使用awk判断。应用场景:希望将执行结果或者位置参数赋值给变量,以便后续使用。方法1:EOF标准输出作为expect标准输入。方法1:根据访问日志(Nginx为例)方法3:将expect脚本独立出来。方法2:通过TCP建立的连接。方法2:通过日志获取登录状态。

2023-08-31 17:10:21 94

原创 Java与es8实战:用JSON创建请求对象(比builder pattern更加直观简洁)

接下来要验证的是用字符串来创建请求对象,这个比较实用,用字符串创建请求对象,给我们的应用开发提供了很大的自由度,废话少说,开始写代码。使用者可以用三种方式将JSON内容传给Builder,再由Builer根据传入的内容生成CreateIndexResponse实例。来看看CreateIndexResponse的builder的源码,集成了父类,也实现了接口,单元测试代码中也增加一个方法,用于验证刚才写的create方法。该项目源码的仓库地址,https协议。该项目源码的仓库地址,ssh协议。

2023-08-31 17:06:16 253

原创 字节面试官:一个 SpringBoot 项目能处理多少请求?(有坑)

这篇文章是基于“一个 SpringBoot 项目能同时处理多少请求?”这个面试题出发的。但是经过我们前面简单的分析,你也知道,这个问题如果在没有加一些特定的前提条件的情况下,答案是各不一样的。比如我再给你举一个例子,还是我们的 Demo,只是使用一下 @Async 注解,其他什么都不变:再次启动项目,发起访问,日志输出变成了这样:同时能处理的请求,直接从 Tomcat 的默认 200 个变成了 8 个?因为 @Async 注解对应的线程池,默认的核心线程数是 8。

2023-08-31 17:00:03 75

原创 微信支撑 10 亿用户背后核心技术:百亿级流量 Java 并发与网络编程实战教程

OSI 与 TCP/IP 网络模型实战远程调用的设计模式─代理模式使用网络编程实现分布式远程调用远程调用两大方案一 RMI 与 RPC综合案例:通过底层技能实现 RMI。

2023-08-30 17:00:30 83

原创 超详细解析!Redis的五大数据类型的数据结构

数据类型和底层数据结构对应关系每种数据结构特性不一样,操作时间也不一样。数据结构的时间复杂度。

2023-08-30 16:53:46 606

原创 2K字解析!靠Java NIO 图解 Netty 服务端启动的过程

了解整体Netty常用的核心组件后,并且对比了传统IO模式。在对比过程中,找到了传统IO对应Netty中是如何实现的。最后我们了解到在netty中常用的那些组件。本文在了解下这些核心组件的前提下,进一步了解组件如何在整个服务器启动过程如何被创建,如何组件之间配合来使用。首先也是先了解下大概服务端的启动过程,并且在了解过程中我们带着自己的问题去在学习过程中探寻答案。netty服务端启动是如何设置非阻塞模式的?服务端启动后事件是如何注册到selector上?整体了解到netty服务端的启动过程。

2023-08-30 16:49:16 56

原创 Github标星45.6K!阿里P8大佬深入讲解 Java 虚拟机,把 GC 算法与实现讲得通俗易懂

我们都知道 Java 在运行时内存分为了五个部分:程序计数器、虚拟机栈、本地方法栈、堆、方法区。其中程序计数器、虚拟机栈、本地方法栈所占用的内存是不需要垃圾收集的,这三个区域的内存随着线程生,随着线程死,我们需要关注的其实只有堆和方法区这两块内存的垃圾收集。这时候就需要用到 GC 技术了。对于垃圾回收概念,它一出现常常伴随着一连串的问题:GC 具体做了什么?哪些内存需要回收?什么时候回收?怎么回收?垃圾回收算法 &垃圾回收器有哪些?......如果你是一个新手,这些问题扑面而来的时候你肯定会一脸懵逼,不知道

2023-08-29 16:45:26 62

原创 无语死!Quartz 重复调度问题,你遇到过么?

就我个人而言,为了学Quartz,刚开始去翻一个2.4MB大小的源码是毫无头绪,并且效率低下的,所以立刻转换方向,先了解这个框架的运行模式,在做什么,有哪些模块,是怎么做的,再找主线,翻相关的源码。也就是说,传入的callback方法在执行的过程中是携带了指定的锁,并开启了事务,注释也提到,lockName就是指定的锁的名字,如果lockName是空的,那么callback方法的执行不在锁的保护下,但依然在事务中。调度线程会一次性拉取距离现在,一定时间窗口内的,一定数量内的,即将触发的trigger信息。

2023-08-29 16:37:04 1108

原创 一文带你深入理解HashMap源码

HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。数组 + 链表数组 + 链表 / 红黑树思考:为什么1.8之后,HashMap的数据结构要增加红黑树?

2023-08-29 16:28:23 42

原创 灵魂一问:一万八千条线程,线程为啥释放不了?

其实这个算比较低级的错误,很简单的并发问题,但是一不注意就容易写出来。但是排查难度挺高的,因为大量的线程都是没有我们一点业务代码堆栈,根本不知道线程是从哪里创建出来的,和以往的排查方法算是完全不同。这次是属于运气爆棚然后找到的代码,排查完问题我也想过,有没有其他的方法来定位这么多相同的线程是从哪里创建出来的呢?我试着用内存快照去定位,确实有一点线索,但是这属于是马后炮了,是我先读过源码才知道内存快照可以定位到问题,有点从结果来推过程的意思,没啥好说的。

2023-08-29 16:19:41 136

原创 离谱了,昨晚做梦面试官问我三色标记算法

因为白色对象还没被访问过,怎么能算所有引用都扫描过了呢,所以他就不可能是黑色。

2023-08-28 16:49:37 41

原创 起飞!20天等待,申请终于通过,安装和体验IntelliJ IDEA新UI预览版

另外,我当前的电脑中已经装了正版的IDEA的2022.1.2 (Ultimate Edition),接下来使用预览版的时候,可以两个版本同时打开,做即时的对比,如果您也想免费使用IDEA Ultimate Edition,可以参考。下图是本文的重点,左侧是正式版,右侧是新UI的体验版,都打开了项目、终端、源码、maven等窗口,大家对比看看效果吧,有的按钮位置变了,但还是能找到...IDEA会启用新的UI,这事情之前已经在多位大佬的博客中有提到了,当时我也按照大佬们的文章去递交了试用体验版的申请。

2023-08-28 16:40:13 129

原创 重磅!Spring Boot 3 大版本齐发,Java 8 版本马上要退出历史舞台了

虽然如此,我觉得现在还是有很多公司大量在使用 Spring Boot 3.0 以下,甚至 2.0 及以下的版本,因为版本更新太快,升级兼容太麻烦了,也怕影响线上业务,公司都是求业务稳定,除非是遇到重大漏洞或者影响业务,一般都会保守升级。另外,还要看公司的整体环境,比如必须考虑的 JDK 版本,如果已经升级到了 JDK 17,完全可以升级到 Spring Boot 3.x,如果执着 JDK 8,那只能保持在 Spring Boot 2.7.x 及以下版本。元上车,一次订阅,永久学习,永久免费提供更新。

2023-08-28 16:36:15 993

原创 2023版Java面试的“葵花宝典”重磅开源!5天时间Github飞速霸榜

项目原型曾在杭州上线运行。(含:Java 基础,异常,NIO,HashMap,Tomcat,JVM 堆栈,内存模型,调优,GC,老年代,新生代,垃圾回收,面试题等...)(含:spring 原理,周期,ioc 原理,MVC 事务,AOP 原理,Boot 配置,安全,监视器,面试题等...)(含:mybtis 缓存,运用原理,分页,Redis 事务,主从架构,缓存,穿透,穿击,降级面试题等...)(含:数据库基础,数据类型,引擎,索引,事务,锁,视图,sql 语句,优化,mysql 锁,面试题等...)

2023-08-26 16:20:06 156

原创 起飞!终于可以彻底告别手写正则表达式了

君子善假于物也,虽然我很菜,但是工具好用啊,我+好用的工具,等于我也很厉害了。欢迎捧场,赶紧用一用吧,觉得好用的话,可以推荐给身边的小伙伴也用一下。

2023-08-26 16:14:27 755

原创 问题排查后,nginx的反向代理感觉失效了一样

vnc登录进去后,根据端口号找到对应的进程,发现是Apache HTTP Server,这个东西我也不熟悉,知道它类似于nginx,功能类似,但是几乎一直没用过,所幸,在程序的根目录下,找到了一个配置文件,配置文件中配置了反向代理,将请求反向代理到了服务器C:8088端口。看我上图标红的下面那一行,是我们服务端nginx往客户端发的,68个字节,也有个重传字样,看起来,意思是我们也发生了重传,重传了哪个包呢,就是包2,也就是握手时候的我方回复的syn+ack那个包。查看,我看了我们机器,值为128;

2023-08-26 15:43:36 756

原创 20000字硬核拆解!AQS源码

AQS即的简称,翻译过来就是抽象队列同步器的意思,由Doug Lea大神开发的。说他抽象是因为它提供的是一个基于队列的同步器框架,定义了一些基础功能方法(控制状态变量,获取和释放同步状态方法以及入队出队操作等),具体场景使用只需要根据需要实现对应的方法即可。我们在锁(比如ReentrantLock)、并发工具类(比如CountDownLatch)都可以看到内部类继承了,也就是说AQS才是这些类的基石。说了这么多,感觉把抽象说的越抽象了,下面我们从几个栗子入手吧。

2023-08-26 14:58:31 33

原创 7K字详解!Spring Boot + Druid 实现监控 MySQL 性能,既简单又实用

我们都使用过连接池,比如,虽然HikariCP的速度稍快,但Druid能够提供强大的监控和扩展功能,也是阿里巴巴的开源项目。Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括等等,秒杀一切。Druid可以很好的监控DB池连接和SQL的执行情况,天生就是针对监控而生的DB连接池。Spring Boot默认数据源与。

2023-08-25 15:26:20 973

原创 离谱了!公司来了个大佬,把 FullGC 40 次/天优化为 10 天 1 次?

就在我还在调查入口流量的问题时,另外一个同事找到了根本的原因,原来是在某个条件下,会查询表中所有未处理的指定数据,但是由于查询的时候 where 条件中少加了模块这个条件,导致查询出的数量达 40 多万条,而且通过 log 查看当时的请求和数据,可以判断这个逻辑确实是已经执行了的,dump 出的内存中只有 4W 多个对象,这个是因为 dump 时候刚好查询出了这么多个,剩下的还在传输中导致的。在优化的过程中,我们的主管发现了有个对象 T 在内存中有一万多个实例,而且这些实例占据了将近 20M 的内存。

2023-08-25 14:42:19 42

原创 【工具推荐】Github14.4K Star,一款外观漂亮、运行快速、动画细腻的开源免费UI组件库

之前给大家推荐了很多后台模版,有读者希望推荐一些跟通用的好看组件,毕竟出了后台还有很多其他场景嘛。

2023-08-25 14:34:27 83

原创 Github又一巅峰神作!14 年工作经验大咖出品“JVM&G1 GC 深入学习手册”

通过本章的学习,你能够了解以下内容:什么是 Serviceability Agent 工具?了解相关概念、工具的基本功能及实践介绍。了解工具的扩展功能、插件介绍。对一些常见问题作出总结。总的来说,没有一招鲜式的性能调优秘籍或包罗万象的性能百科,能让你摇身一变成为老练的 GC 性能调优专家。相当数量的 GC 性能问题还需要专门的知识技能才能解决。性能调优在很大程度上是一门艺术。解决的 GC 性能问题越多,技艺才会越精湛。我们不只要关心 GC 的持续演进,也要积极地去了解它的设计原理和设计目标。

2023-08-25 14:21:17 31

原创 面试造火箭?GitHub 飙升“2023(Java 岗)面试真题汇总”头条转载 40 万

在 it 行业迅速发展的现在,技术越来越高深复杂。随之而来的就是面试的难度跟知识的存储了,要背越来越多的八股文了问的越来越细了,越来越广泛,和越来越底层了。现在的面试摆明了就是让我们“而现在又恰逢是金三银四了,面试或者跳槽的小伙伴相信这段时间应该有很多。可能有在面试路上的也有在准备跳槽的,或多或少心里都想着怎样才能顺顺利利的入职。为了帮助到大家 我把我这些年觉得非常实用的 Java 面试题合集分享出来,涉及知识点非常全面!面中率极高实战效果绝对可以的。

2023-08-24 15:51:39 34

原创 都2023了,Spring容器获取Bean的这9种方式你都知道吗?

随着SpringBoot的普及,Spring的使用也越来越广,在某些场景下,我们无法通过注解或配置的形式直接获取到某个Bean。比如,在某一些工具类、设计模式实现中需要使用到Spring容器管理的Bean,此时就需要直接获取到对应的Bean。本文为大家整理汇总了常见的获取Bean的方式,并提供一些优劣分析,方便大家在使用到时有更好的选择。同时,也会为大家适当的普及和拓展一些相关知识。

2023-08-24 15:36:32 663

原创 4K字详解JVM虚方法表和方法调用

当父类引用指向子类对象时,JVM是如何知晓调用的是哪个子类的方法?

2023-08-24 15:30:45 60

原创 万字解析!springboot优雅的统一返回格式 + 全局异常处理

RC400(400, "请求失败,参数错误,请检查后重试。"),RC404(404, "未找到您请求的资源。"),RC405(405, "请求方式错误,请检查后重试。"),RC500(500, "操作失败,服务器繁忙或服务器错误,请稍后再试。");// 自定义状态码// 自定义描述return msg;该枚举类为我们和前端约定好的返回状态码和描述信息,可根据自己的需求修改状态码和描述@Data//状态码//提示信息//数据//接口请求时间return r;

2023-08-24 14:27:01 457

原创 想要掌握未来嘛?这份腾讯高工总结的 Redis 实战笔记就告诉你什么是未来!

并且,国内外很多大型互联网公司都在使用 Redis,比如 Twitter、YouPorn、暴雪娱乐、Github、腾讯、阿里、京东、华为、新浪微博等等,已成为当下中高级后端开发者绕不开的必备技能。

2023-08-23 15:26:25 28

原创 太强了!阿里专家手码 23 版 Java 面试三件套,Github 星标直线狂飙

最近看到某脉上的一个动态让我思考许久:不禁感叹到在如今这大行业里,了。随着今年的落幕,大伙都在感叹的工作,分分钟一个岗位。甚至有时候觉得自己 Offer 稳拿的时候,结果半路就杀出个程咬金,把到嘴边的鸭子抢走了,。?于是乎,为了帮助大伙在,今天小编带来了能解决观众老爷遇到的问题的“”,,由前任的——《,内含以及!别被他们忽悠了,技术才是硬道理~

2023-08-23 15:19:40 35

原创 【万字解析】从头到尾说一次 Spring 事务管理

methodB();// ...// ...这种多个方法调用链中都有事务的场景,就是嵌套事务。不过要注意的是,并不是说多个方法使用一个事务才叫嵌套,哪怕是不同的事务,只要在这个方法的调用链中,都是嵌套事务。那调用链中的子方法,是用一个新事务,还是使用当前事务呢?这个子方法决定使用新事务还是当前事务(或不使用事务)的策略,就叫事务传播。在 Spring 的事务管理中,这个子方法的事务处理策略叫做事务传播行为(Propogation Behavior)。

2023-08-23 11:28:30 44

原创 2K字解析!使用 IDEA 远程 Debug 调试,简直不要太实用了

如果把上述插入数据库的逻辑,换成调用远程的接口,在dropframe后,再次执行相同的代码,会不会导致远程接口被执行了2次?会的。好像感觉远程调试的用处也不是那么大,不能作为长期使用的调试工具。只能作为临时调试的手段。难保证本地代码和远程一致,而且你也很难判断是否一致通过远程调试发现了bug,但是又不能立即修复后继续调试,只能修复后部署后继续远程调试。

2023-08-23 11:24:38 41

原创 从此告别混乱代码!这份 Spring Boot 后端接口规范来得太及时了

接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响应数据(response)。虽然说后端接口的编写并没有统一规范要求,而且如何构建这几个部分每个公司要求都不同,没有什么“一定是最好的”标准,但其中最重要的关键点就是看是否规范。一个接口一般对参数(请求数据)都会进行安全校验,参数校验的重要性自然不必多说,那么如何对参数进行校验就有讲究了。一般来说有三种常见的校验方式,我们使用了最简洁的第三种方法业务层校验Validator + BindResult校验。

2023-08-23 11:21:28 145

原创 【6K字干货分享】业务让我实现一个排队导出功能

业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所以对服务器的性能会影响的比较大;结合以上原因,对导出操作进行排队;刚开始拿到这个需求,第一时间想到就是需要维护一个FIFO先进先出的队列,给定队列一个固定size,在队列里面的人进行排队进行数据导出,导出完成后立马出队列,下一个排队的人进行操作;

2023-08-19 15:44:43 108

原创 灵魂一问:ForkJoinPool 你真的明白和用对了吗

是一个功能强大的 Java 类,用于处理计算密集型任务,使用分解计算密集型任务,并并行执行它们,能够产生更好的性能。它的工作原理是将任务分解成更小的子任务,使用分而治之的策略进行操作,使其能够并发地执行任务,从而提高吞吐量并减少处理时间。ForkJoinPool 的独特特性之一是它用于优化性能的工作窃取算法。当工作线程完成分配的任务时,它将从其他线程窃取任务,确保所有线程都有效地工作,并且不会浪费计算机资源。ForkJoinPool 在 Java 的并行流和中广泛使用,允许开发人员轻松地并发执行任务。

2023-08-19 15:37:29 105

原创 万字剖析:Java消息队列基础和RabbitMQ相关概念

在一个队列中如果有多个消费者,那么消费者之间对于同一个消息的关系是竞争的关系。Work Queues对于任务过重或任务较多情况使用工作队队列可以提高任务处理的速度。例如:短信服务部署多个,只需要有一个节点成功发送即可。

2023-08-19 15:32:19 50

原创 终于有清华大牛把 Java 面试高分 Guide 总结得如此系统,堪称傻瓜式笔记总结

不少人准备技术面试,都会借助网上的“Java 面试笔试题”,但这些资料大多专注于具体问题,解答也是点到即止,更有甚者连准确性都值得商榷,更不要说举一反三的讲解了。学习还是要脚踏实地,逐—梳理 Java 相关技术的核心与要点,并找到高效归纳自己知识体系的方法。备战 2023 金三银四 Java 面试,拿到理想 offer,从任何时候开始,都不算晚。

2023-08-18 16:44:42 40

原创 【干货分享】真是有趣的时间轮

如果有一个需求,一个任务执行失败后需要重试,重试的次数和时间点是可配置的,那么需要怎么实现呢?一个不错的方法就是通过时间轮来实现。

2023-08-18 16:37:32 210

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除