自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

暮色妖娆丶

Java 学习之路我和你一起行走

  • 博客(14)
  • 收藏
  • 关注

原创 一个 /error 引发两小时的 SpringMVC 源码 debug

前言最近入职新公司,先临时接手一个认证项目,对于本人这种有代码优雅强迫症的,看到不爽的代码毫无疑问就是改!改!改!然而改完之后前端给我反馈了接口总是报 401 错误。我的内心:我草?难道是我改出 bug 了?不应该吧,这么简单的东西怎么会有 bug !于是我自己测试了下,还真是有问题,但不是我的问题,下面开始分析!伪代码场景还原登录接口,模拟报错@PostMapping("/user/login")public LoginResult login(@RequestBody LoginRequest

2021-09-30 16:13:20 471

原创 面试常问的单例模式

前言前段时间面试的时候被问到单例模式没答上,这个些许有些尴尬,的确没有去关注过。只是依稀记得曾经在网上看到过相关资料,记得懒汉式、饿汉式等几个名词。虽说作为一个两年经验的开发不熟悉设计模式也无可厚非,但是对于比较简单、常用的单例模式,我认为还是很有必要掌握的,况且作为一个有架构师梦想的程序员,必须要更加超前。希望本篇文章可以对还不熟悉单例模式的朋友有所帮助。单例模式场景介绍单例模式含义就是让程序中某个类运行时只存在一个对象。比如数据库连接池不会反复创建、Spring 同一个容器中一个单例 Bean 的

2021-08-30 09:29:55 278

原创 Spring 事件发布

前言事件发布是 Spring 框架中最容易被忽视的功能之一,但实际上它是一个很有用的功能。使用事件机制可以将同一个应用系统内互相耦合的代码进行解耦,并且可以将事件与 Spring 事务结合起来,实现我们工作中的一些业务需求。和 Spring 的事务类似,Spring 事务有编程式事务、声明式事务,Spring 事件也分为编程式事件和声明式事件,本篇主要讲解使用注解实现声明式事件发布和监听。Spring 内置事件对 Spring 有点了解的话应该不陌生 Spring 的内置事件,从官网可知 Spring

2021-08-11 16:26:21 1084 1

原创 项目中自定义 SpringBoot Starter

前言作为一个有架构梦想的程序员,自定义 springboot-starter 是我们必须要掌握的技能。企业中很多项目都会有自己封装 starter 的需求。这也是我 2019 年底出去面试被问过的面试题,当时作为一个刚毕业半年的小白,只会用官方制作好的,的确没有自己去实现过。希望这篇文章能对还不会制作 starter 的同学有帮助~~什么是 springboot-starter & 工作原理我们都知道 SpringBoot 这么火的核心原因之一就是它提供了一系列的启动场景 starter ,这

2021-07-01 14:45:11 186

原创 RabbitMQ 可靠性、重复消费、顺序性、消息积压解决方案

前言上篇文章介绍了 为什么引入消息队列? 引入 MQ 给我们解决了一些问题,但同时又引入了一些复杂的问题,这些问题是大型项目中必须解决的重点,更重要的是,面试也经常问。实际上消息队列可以说是没法百分之百保证可靠性的!RabbitMQ 提供的相关机制也只是在于缩小消息丢失的概率,或者说提供了消息丢失后的我们可以记录日志的功能。 在解决这些问题时有必要明白一点,其实小公司业务量不大,并发量不高的情况下这些问题是几乎不会发生的…即使偶尔出现,开发人员手动修复数据处理就好。所以可结合公司实际业务场景看有没有必要解

2021-06-26 14:24:46 333

原创 一文带你搞懂 Java 泛型

前言最近在网上看到很多新手不太理解 Java 中的泛型,尤其是对于源码中各种通配符 “?”、“T”、“S”、“R” 等,不理解其含义,更不知如何使用泛型。本篇文章将从头开始透彻的分析 Java 中的泛型,并结合项目实际应用场景,希望对初学者有帮助。什么是泛型&为什么引入泛型在谈泛型之前,我们先来看一段 JDK5 之前没有泛型时的代码 public static void main(String[] args) { ArrayList list = new ArrayLi

2021-06-18 14:34:55 490

原创 开源自己从零开发的个人博客

前言本篇文章主要是开源自己的个人博客,先贴一下个人博客地址:孙玉超个人博客 不太适配手机端, PC 端样式还是蛮好看的。其实很久之前就有网友问我能不能开源个人博客代码,当时没有开源其实是不太好意思,感觉代码比较乱,毕竟是我刚毕业的时候开发的,准备优化优化再考虑。不过工作越来越忙,人也越来越懒…很久没有去维护了,还是直接开源出来吧,让更多有需要的人来使用,文末会贴 github 地址。说实话,这个项目代码难度虽然不怎么样,但是涉及的技术点挺多的,搭建在云服务器上,简历上绝对是面试的加分项。项目介绍这个

2021-06-18 14:17:14 183

原创 Redis 实战应用篇 — 缓存雪崩、击穿、穿透和数据一致性

前言其实缓存雪崩、缓存击穿、缓存穿透、Redis 和 MySQL 数据一致性,网上已经很多人都写过相关文章,不过博主还是决定再写一篇,想把自己的理解写出来,希望可以帮助到一些人。如果你是开发新手,对这些名词一点都不了解也千万不要害怕,这些名词看起来高大上,其实非常简单。就是开发中使用 Redis 可能会发生一些没有考虑到的问题,只不过换了个高大上的名字而已。缓存穿透在说缓存穿透之前,我们先来看一个业务场景,以我们公司 APP 为例,我们现在有一个查询物流信息的业务 /** * 通过发

2021-06-14 14:29:14 360 2

原创 参数校验神器 hibernate-validator 配合统一异常处理

传统的参数校验我相信大家在开发过程中都很头疼对前端传过来的参数进行校验,因为有时候接口需要的参数很多,在远古时代我们的校验方式应该是这样的: @PostMapping("/order/submit") public void submit(@RequestBody OrderRequest order){ if(order.getParam1() == null){ throw new XXXException("xxx不能为空");

2021-06-10 14:26:28 1055

原创 让面试官无话可说的 MySQL 索引面试

查询计划 explain面试官:我看你简历上写熟悉 SQL 优化,你们工作中是怎么优化的?我们会开启慢查询日志,捕捉到慢的 SQL,先用 explain 看下查询计划,主要看 type、possible_keys、key、rows、extra 这几列,然后进行相应优化。面试官:那你具体说说这几列吧type 是这条 SQL 性能的重要参考指标,一般来说我们至少要求是 index 级别,其次看 possible_keys、key。看下可能用到的索引,实际有没有用到,如果没有用到再具体分析原因。如果本身

2021-06-08 19:47:33 223

原创 让面试官无话可说的 Redis 面试

Redis 在业务中的使用场景面试官:我看你项目中用到了 Redis ,你们哪些业务场景使用了 Redis ?我们很多业务都用了 Redis ,这里列举几个我们 APP 的商品分类,包括一级分类,二级分类,三级分类等都存储在 Redis我们秒杀商品的信息使用 Redis 存储用户手机验证码等一定时间内会过期的数据我们也存储在 Redis所有第三方应用的 accessToken我们还使用 Redis 实现分布式锁,比如扣减库存还有其他需要高频访问的数据,且一定时间内修改频率较小的数据也存储在

2021-05-28 15:01:10 286

原创 彻底搞懂 Java String 字符串

在网上看到很多初学者对于 String 类都不太清楚,提出很多问题,然后问题下面的回答也是不清不楚。甚至有些工作了好几年的开发也没有搞懂 String 类,回答的也不清楚。所以本人呕心沥血以 JDK8 的版本尽量透彻的分析Java 的 String 类。String 与基本数据类型String 在 Java 开发中使用非常广泛,可以直接通过字面量的形式声明。但是值得注意的是它并不是基本数据类型,是引用类型。所以 String 对象存储在堆空间,它的引用在栈空间。当 Java 中对引用类型变量赋值

2021-05-21 11:05:37 176

原创 为什么使用消息队列?

我相信消息队列(MQ)对于Java程序员来说应该都不陌生,如果感到陌生,可能你接触的项目都比较小,传统项目没有拆分服务,当业务越来越多的时候就会拆分多个微服务,让我们先来看一个业务场景。以我们公司APP用户下单为例,用户请求首先到达订单服务,然后去库存服务扣减库存成功之后,通知商户执行业务,再去优惠券系统结算优惠券,然后去积分系统结算积分。假设每个微服务接口的响应时间是 200ms,那么这几个服务调用就要 600ms 的时间,加上订单服务自己的业务处理时间 200ms,整个提交订单接口就是将近

2021-05-20 10:22:30 259 5

原创 如何设计秒杀系统?

最近心血来潮,想起前段时间公司举办的线下秒杀活动不理想,想研究一下秒杀系统的优化。当时活动现场有 200+ 会员,由于我们先前没有经验,各种原因导致用户在秒杀的时候 APP 页面白屏、卡死。业务部门想把手机甩我们开发脸上......当时我刚毕业也刚入职不久,不敢发表意见。现在逐渐膨胀,是时候重新设计一套秒杀系统了......有经验的同学看到 200+ 会员都出现白屏、卡死,可能会觉得公司技术太 low 。其实不然,公司系统架构还是很好的,大佬搭建了一套 SpringCloud 组件,都是比较新的版本。这

2021-05-08 09:24:58 401 2

空空如也

空空如也

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

TA关注的人

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