自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于 Netty 的通信组件如何解决粘包拆包问题

这节课给大家介绍了粘包拆包的解决方案。首先给大家介绍了粘包拆包的场景。然后,给大家介绍了通过设定一个完整语义的字节流长度来避免粘包拆包的问题。在生产环境上我还是建议大家用设定字节流长度方法来解决拆包粘包的问题,因为这个方案会更加的通用,而且 4 个字节长度的字节流长度也不会浪费太多流量。

2023-06-06 11:27:38 14

原创 Java如何实现去重?这是在炫技吗?

3、redis使用lua脚本来保证原子性和减少网络io的损耗 4、redis的key增加前缀做到数据隔离(后期可能有动态更换去重方法的需求) 5、把具体限流去重方法从DeduplicationService抽取出来,DeduplicationService只需设置构造器注入时注入的AbstractLimitService(具体限流去重服务)类型即可动态更换去重的方法 6、使用雪花算法生成zset的唯一value,score使用的是当前的时间戳。1、频次去重采用普通的计数去重方法,限制的是每天发送的条数。

2023-06-06 11:26:27 11

原创 Spring Boot JAVA 统一返回的信息

json复制代码{"message": "请求成功","data": {""code 表示返回的状态,我们这个可以自行定义,10000 代表成功;20000 代表某某等;message 表示接口返回的信息,是否成功了,失败的理由是什么等;data 是表示请求成功后,返回的数据,可以是数组也可以是对象等。信息返回格式,是否应该有其他字段,按照需求调整。java复制代码// ResultData.java@Data// 扩展字段,比如接口请求时间// 构造函数// 成功返回。

2023-06-06 11:24:22 11

原创 前后端分离架构下使用 Sa-Token 完成登录认证

js复制代码{此时后端如果不做任何特殊处理,框架将会把Bearer 视为token的一部分,无法正常读取token信息,导致鉴权失败。yaml复制代码sa-token:# token前缀此时 Sa-Token 便可在读取 Token 时裁剪掉 Bearer,成功获取xxxx-xxxx-xxxx-xxxx。Token前缀 与 Token值 之间必须有一个空格。一旦配置了 Token前缀,则前端提交 Token 时,必须带有前缀,否则会导致框架无法读取 Token。

2023-06-06 11:23:04 5

原创 SpringBoot + Poi-tl操作word,快速生成报表

poi-tl是一个免费开源的Java类库,是基于Apache POI的模板引擎,纯Java组件,跨平台,代码短小精悍,通过插件机制使其具有高度扩展性。因此在使用的时候需要实现设置好模板,就像Freemarker一样,但是比其简单,也易操作。

2023-06-06 11:21:10 6

原创 4月被迫毕业后,猛刷这些Java高频面试题后,怒斩offer

很多Java工程师的技术不错,但是一面试就头疼,10次面试9次都是被刷,过的那次还是去了家不知名的小公司。问题就在于:面试有技巧,而你不会把自己的能力表达给面试官。应届生:你该如何准备简历,面试项目和面试说辞?Spring底层逻辑是什么?1-3年经验的程序员:面试中你该讲哪些值钱的技术?如何用这些值钱的技术最大程度展示自己的技能?分布式组件底层逻辑是什么?3-5年经验的程序员:k8s怎么搭建实践?

2023-06-06 11:01:30 2

原创 offer来了!阿里资深架构师耗时三年整理出Java面试核心知识点原理篇文档

本文是对Java程序员面试必备知识点的总结,详细讲解了JVM原理、多线程、数据结构和算法、分布式缓存、设计模式等内容,希望读者能通过阅读本书对Java的基础原理有更深入、全面的理解。面试官通常会在短短两小时内对面试者的知识结构进行全面了解,面试者在回答问题时如果拖泥带水且不能直击问题的本质,则很难充分表现自己,最终影响面试结果。针对这种情况,本文在讲解知识点时不拖泥带水,力求精简,详细介绍了Java程序员面试时常被问及的核心知识点。

2023-06-06 10:45:30 1

原创 新圣经!阿里技术官手码的Java快速面试指南,熬夜啃完剑指大厂

而大厂所需要的程序员是有限的,高薪也只能给到少数人,所以 Java 的竞争才会如此激烈,内卷化也越来越严重。我们不能改变内卷的大形势,能做的也就只有不断提升自己,去适应市场环境,提高自身技术水平,这样才能在跳槽黄金季拿到自己心仪的 Offer!所以,为了更好的帮助一直以来支持我的粉丝朋友,更好的助力你们面试跳槽涨薪,小编今天也是在这里为大家准备了一份出自于阿里的【2023 版】Java 架构师面试参考指南。其内容涵盖了高并发,分布式,中间件,数据库,数据结构算法,设计模式等 Java 架构核心技术。

2023-06-06 10:44:15

原创 原来kafka也有事务啊,再也不担心消息不一致了

幂等性和事务。本文讲解了通过kafka事务可以实现端到端的精确一次的消息语义,通过事务机制,KAFKA 实现了对多个 topic 的多个 partition 的原子性的写入,通过一个例子了解了一下如何使用事物。同时也简单介绍了事务实现的原理,它底层必须要依赖kafka的幂等性机制,同时通过类似“二段提交”的方式保证事务的原子性。

2023-06-06 10:28:04 5

原创 2023年全网最新版Java面试突击手册PDF版开源,押题率高达97%

作为Java程序员,选择学习什么样的技术?什么技术该不该学?去招聘网站上搜一搜、看看岗位要求就十分清楚了,自己具备的技术和能力,直接影响到你工作选择范围和能不能面试成功。如果想进大厂,那就需要在Java核心技术栈上面好好准备了,具体可以分下面几个模块来学习。学习模块常见模式与工具:学习Java技术体系,设计模式,流行的框架与组件—— 常见的设计模式,编码必备, Spring5,做应用必不可少的最新框架,MyBatis,玩数据库必不可少的组件。从源码级别掌握它们,你比别人更容易进大厂。

2023-06-05 11:42:35 13

原创 每天花2小时学习Java面试题手册,进阶架构师视频,进阿里定级P7+

近期,肯定有很多小伙伴,投出去的简历HR基本上都是已读不回,甚至都没有任何回复,或者平台默认筛选,你的简历HR根本就看不到。即使有些小伙伴简历通过,收到面试邀请了,结果被通知不用面试了;还有些小伙伴,有面试机会了,甚至已经参加了面试,但是还是被刷下来了。为什么会有这样的情况发生呢?我给大家总结以下几点,只是作为参考,不喜勿喷:学历,学历这一块儿是硬伤,也是敲门砖,不够的话就自动被筛选掉了,你投简历之前最好先看要面试的公司的学历要求,如果学历符合要求,再去投递简历;

2023-06-05 11:35:19 11

原创 阿里最新产出1658页Java面试突击核心讲,全网转载40W+

现在的互联网开发岗招聘,程序员面试背八股文已经成为了不可逆转的形式,其中一个Java岗几百人在投简历也已经成为了常态!更何况一份面试题动辄七八百道,你吃透了,技术只要不是很差,面试怎么可能有大问题?但是也有尴尬的情况发生:面试八股文背的特别好(火箭造的好,螺丝拧不了),IT企业们却依然坚持用八股文来考察面试者。最重要的原因还是国内开发远远不能满足众多求职者(僧多粥少,狼多肉少),而恰恰八股文是国内现存效率最高的录人方式,现状不是我们可能改变的,所以我们只能选择顺应“她”,你背我也背!!!

2023-06-05 11:11:33 8

原创 微服务常见内存泄漏实战分析

但是也不能设太小,因为在一个热点服务的工程中,mysql连接的复用是非常重要的,可以降低连接的创建成本,这个需要根据对应服务工程的mysql调用频率进行调整。最近发现线上环境偶尔会出现Pod重启的情况,虽然重启大法(K8S会自动维护Pod数,Pod出了问题会自动重启,感兴趣的话可以去了解K8S的机制)很有效,但是终归不是根本的解决办法,我们需要了解为什么会重启,然后解决它,不单单是技术人的觉悟,更重要的还是money(狗头微笑),万一哪天重要的服务跪了影响到用户,非得被老板扒层皮。

2023-06-05 10:34:56 7

原创 深入详解Condition条件队列、signal和await

Condition的await()和signal()基于Lock,相比于基于Object的wait()和notify()方法,它提供更加灵活的等待通知的机制。支持丰富的功能如:带超时机制的await(),不响应中断的await(),以及多个等待的条件队列。Condition的await()方法会将线程包装为等待节点,加入等待队列中,并将AQS同步队列中的节点移除,接着不断检查,如果在等待队列中,就一直等着,如果signal将它移到AQS队列中,则退出循环。

2023-06-05 10:31:47 6

原创 ReentrantLock可重入独占锁详解

位于包下,是Lock接口的实现类。基本用法与相似,都具备可重入互斥的特性,但拥有更强大的且灵活的锁机制。class X {//定义锁对象// ...//定义需要保证线程安全的方法//加锁try{// 保证线程安全的代码// 使用finally块保证释放锁finally {API层面的独占锁:ReentrantLock是底层使用AQS实现的可重入的独占锁,区别于synchronized原生语法层面实现锁语义,ReetrantLock通过lock()和unlock()

2023-06-05 10:17:45 4

原创 SpringBoot怎么设计业务操作日志功能?

业务操作日志记录中包含了用户操作的功能名称、功能描述、操作人、操作时间和操作的参数报文,参数报文之所以选择存储在文件中,是因为正常情况下,是不需要知道具体的参数报文,只有在回滚操作的时候才会用到,可以根据上一次的参数报文逆向操作。

2023-06-05 10:16:01 23

原创 面试官:生成订单 30 分钟未支付,则自动取消,该怎么实现?

这样可以看出定时轮由个 3 个重要的属性参数,ticksPerWheel(一轮的 tick 数),tickDuration(一个 tick 的持续时间)以及 timeUnit(时间单位),例如当 ticksPerWheel=60,tickDuration=1,timeUnit=秒,这就和现实中的始终的秒针走动完全类似了。结合以上两个特性,就可以模拟出延迟消息的功能,具体的,我改天再写一篇文章,这里再讲下去,篇幅太长。因此,方案二不是太推荐。对上述的任务,我们给一个专业的名字来形容,那就是延时任务。

2023-06-05 10:11:14 7

原创 Spring Security安全框架在Spring Boot框架中的使用

本文详细介绍了Spring Security在Spring Boot框架中的使用,包括如何配置Spring Security、如何实现身份验证和授权、如何防止攻击等。同时,我们使用了相关代码辅助介绍,以便更好地理解Spring Security的使用。Spring Security是一个非常重要的安全框架,它可以帮助我们实现应用程序的安全性,保护用户的隐私和数据安全。

2023-06-05 10:06:29 3

原创 重学 Java 设计模式:实战建造者模式

建造者模式是一种创建型设计模式,它允许我们将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。在实际开发中,有些对象的创建过程非常复杂,可能涉及多个步骤和多个组件的组合。如果我们直接在客户端代码中进行对象的创建和配置,会导致代码变得冗长且难以维护。而建造者模式通过将对象的构建过程委派给一个独立的建造者类,使得客户端代码与具体的构建过程解耦,同时提供了更好的灵活性和可扩展性。我们首先定义一个产品类,表示装修套餐。该类包含了各种装修物料的属性和方法。

2023-06-05 09:58:01 4

原创 八位互联网架构师耗时三年总结出的Java面试手册!带你实现逆风翻盘

都说程序员工资高、待遇好,改变无数程序员职业生涯的金三银四已来,你的小目标是什么 30K、40K,还是 16 新的 20K?作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的奖励 Offer 并不算难。然而,提升 Java 核心能力最快、最有效,短期内升职加薪的方法,到底是什么?首先,你需要跳出日常工作,接触更有深度、更前沿的顶级项目。一个简单的逻辑:大厂之所以能够给到高于行业水准的薪资,正是因为即使是普通开发人员,也要应对很多复杂的场景。

2023-06-04 13:26:05 6

原创 爆赞!阿里大佬 10w 字 Java 面试核心手册,基础到高级技术专题

现在 Java 面试可以说是老生常谈的一个问题了,确实也是这么回事。Java 开发者应该是不会很容易满足的,现在拿着 20K 的工作,下一步就想着拿 50K 的 offer,甚至年薪百万都是程序员很常见的,不满足于现状,身在其位就要有担当其位的能力,不断提升技能、技术栈,都是必不可少的!其实很多人,对本身没有一个清楚的规划,甚至不知道适合什么路线,这样的话,你就会离心仪的 offer 越来越远!无论何时,都需要对自身有一个清楚的认知,你会提前规划一下自己的学习路线吗?那么我这次写这个的意义何在呢?

2023-06-04 13:21:05 13

原创 连这份Java面试八股文通关手册都没刷过,你拿什么备战

本文是为了帮大家快速回顾了Java中知识点,这套面试手册涵盖了诸多Java技术栈的面试题和答案,相信可以帮助大家在最短的时间内用作面试复习,能达到事半功倍效果。本来想将文件上传到github上,但由于文件太大有的都无法显示所以直接整理成多个PDF,供大家学习。

2023-06-04 13:15:27 10

原创 字节二面:引入RabbitMQ后,你如何保证全链路数据100%不丢失?

我们都知道,消息从生产端到消费端消费要经过3个步骤:生产端发送消息到RabbitMQ;RabbitMQ发送消息到消费端;消费端消费这条消息;这3个步骤中的每一步都有可能导致消息丢失,消息丢失不可怕,可怕的是丢失了我们还不知道,所以要有一些措施来保证系统的可靠性。这里的可靠并不是一定就100%不丢失了,磁盘损坏,机房爆炸等等都能导致数据丢失,当然这种都是极小概率发生,能做到99.999999%消息不丢失,就是可靠的了。下面来具体分析一下问题以及解决方案。

2023-06-04 11:28:50 5

原创 Spring Boot 做单元测试,真心强悍!

提供测试核心功能。:提供对测试的自动配置。Spring Boot 提供了一个一站式启动器,如以下依赖配置所示。测试启动器依赖不仅包含以上两个 Spring Boot模块,还包含 Spring Test 测试模块,以及其他第三方测试类库,如下所示。JUnit 5:Java 最主流的单元测试框架。AssertJ:一款快速断言库。Hamcrest:一款单元测试匹配库。Mockito:一款 Mock 测试框架。JSONassert:一款 JSON 断言库。

2023-06-04 11:26:54 16

原创 你还在用 BeanUtils?试试 MapStruct,优雅的对象转换解决方案!

对于代码中 JavaBean之间的转换, 一直是困扰我很久的事情。在开发的时候我看到业务代码之间有很多的 JavaBean 之间的相互转化, 非常的影响观感,却又不得不存在。我后来想的一个办法就是通过反射,或者自己写很多的转换器。第一种通过反射的方法确实比较方便,但是现在无论是 BeanUtils, BeanCopier 等在使用反射的时候都会影响到性能。虽然我们可以进行反射信息的缓存来提高性能。

2023-06-04 11:18:13 9

原创 Mybatis-Plus 自定义SQL注入器,非常实用!

我们在使用Mybatis-Plus时,dao层都会去继承BaseMapper接口,这样就可以用BaseMapper接口所有的方法,BaseMapper中每一个方法其实就是一个SQL注入器在Mybatis-Plus的核心(core)包下,提供的默认可注入方法有这些:那如果我们想自定义SQL注入器呢,我们该如何去做?比如在Mybatis-Plus中调用updateById方法进行数据更新默认情况下是不能更新空值字段的。而在实际开发过程中,往往会遇到需要将字段值更新为空值的情况。

2023-06-04 10:48:49 16

原创 如何从零实现一个简单的Spring Bean容器

在 Spring 中,Bean 是通过 XML 或注解来定义的。但是我们这里为了简化,还是采用常规的方式来定义和注册 Bean。我们定义一个 BeanDefinition 类,用于保存 Bean 的定义信息。其中包含了 Bean 的名称、类型、构造函数参数、属性等。java复制代码public class BeanDefinition {> type;

2023-06-04 10:46:45 6

原创 基于AQS的ReentrantLock实现原理

AQS提供了大量用于自定义同步器实现的Protected方法。自定义同步器实现的相关方法也只是为了通过修改State字段来实现多线程的独占模式或者共享模式。protected boolean isHeldExclusively():该线程是否正在独占资源。只有用到Condition才需要去实现它。protected boolean tryAcquire(int arg):独占方式。arg为获取锁的次数,尝试获取资源,成功则返回True,失败则返回False。

2023-06-04 10:27:45 4

原创 踩坑:以为是Redis缓存没想到却是Spring事务!

业务场景如下:用户绑定了设备,需要显示在设备列表内,并且可以查看设备信息。当用户绑定了一个设备,我需要在数据库内新增一条绑定记录。然后修改用户的策略,在用户的策略里面加上当前的设备,这样就可以查看设备信息了。如果用户再次绑定同一个设备,会将原先的记录解绑,再生成一条新的绑定记录,由于是同一个设备覆盖绑定,则不会去修改用户策略。如果在设备端或者手机端,进行解绑操作。则服务端会将绑定记录的状态变为解绑,同时用户策略也会删除当前设备。这样就看不到设备信息了。

2023-06-04 10:23:04 3

原创 2022年最新Java八股文面试题,靠这份八股文成功逆袭杀进阿里

近期,肯定有很多小伙伴,投出去的简历HR基本上都是已读不回,甚至都没有任何回复,或者平台默认筛选,你的简历HR根本就看不到。即使有些小伙伴简历通过,收到面试邀请了,结果被通知不用面试了;还有些小伙伴,有面试机会了,甚至已经参加了面试,但是还是被刷下来了。为什么会有这样的情况发生呢?我给大家总结以下几点,只是作为参考,不喜勿喷:学历,学历这一块儿是硬伤,也是敲门砖,不够的话就自动被筛选掉了,你投简历之前最好先看要面试的公司的学历要求,如果学历符合要求,再去投递简历;

2023-06-03 13:41:16 16

原创 别再看那些没用的面试题了,这份Java面试八股文才是你真正需要的

这份Java面试通关手册真的是大而全,可以很好的帮助你学习面试中经常被问到的技术,此次分享就到这里了,希望能帮助你拿到心仪的offer!限于平台篇幅原因,同时这份Java面试通关手册内容过多,只能以截图的方式展示部分内容,完整版的资料已整理打包存放网盘,有需要的朋友可以点击下方的名片自取!

2023-06-03 13:32:24 7

原创 2023互联网八股文天花板!1658页的Java面试突击核心手册

最后想说的是,无论你是小白菜鸟,还是技术大牛,日常都不能够落下学习这件事情。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。​文中资料已整理打包存放网盘,有需要的朋友可以点击下方的名片自取!

2023-06-03 13:21:30 7

原创 亿级流量短链接地址服务企业级实现方案

在我们日常生活中,短链接地址随处可见,主要可分为两大场景:短信服务发送短信和运营模版消息推送,一般都会携带链接地址。有时候链接地址很长,如:https://blog.csdn.net/weixin_44763987/article/details/106638461?

2023-06-03 11:30:39 5

原创 实战:单点登录的两种实现方式,附源码

单点登录(Single Sign-On,SSO)是一种身份验证服务,允许用户使用单个标识来登录多个应用程序或系统。如下图所示,用户只需要登陆一次就可以访问系统A、系统B和系统C。在传统的登录方式中,用户必须为每个应用程序或系统提供不同的凭据和密码。如下图所示,用户访问系统A、系统B和系统C都必须用登陆。这种方式既不方便也容易被攻击者利用,而 SSO 解决了这个问题,使得用户只需通过一次身份验证就可以无缝地访问多个应用程序或系统,从而提高了用户体验的便利性和安全性。

2023-06-03 11:30:11 14

原创 深度解析Seata AT 模式中性能优化与隔离保障的平衡之道

注意:业务二提交本地事务后,从其处理上下文来看,已经具备了写隔离性,但是不能就此打住,因为业务二所获取的全局锁还没释放,所以接下来还要再做全局事务的提交,通过提交全局事务将其所添加的全局锁释放掉。分支的回滚会一直重试,直到 tx2 的 全局锁 等锁超时,放弃 全局锁 并回滚本地事务释放本地锁,tx1 的分支回滚最终成功。从前文所介绍内容可知,在 AT 模式下避免脏写的原理也很清晰,就是仅依靠本地锁无法避免,还要依赖 Seata TC 侧的全局锁,在需要全局写隔离的场景下,加入全局锁的判断逻辑即可避免脏写。

2023-06-03 10:40:23 3

原创 编写Java代码时应该避免的6个坑

通常情况下,我们都希望我们的代码是高效和兼容的,但是实际情况下代码中常常含有一些隐藏的坑,只有等出现异常时我们才会去解决它。本文是一篇比较简短的文章,列出了开发人员在编写 Java 程序时常犯的错误,避免线上问题。

2023-06-03 10:37:48 5

原创 Java后端服务接口性能优化建议

解决服务接口性能问题,是程序员进阶的必经之路。总的来说性能优化通用方法是:从用户发起请求的整个链路分析,将分隔相关环节加上log日志,打印环节耗时,找到接口性能问题出现位置,再结合以上介绍的优化方案进行处理。以上经验都是笔者,结合工作经验总结、查询网上资料汇总的服务接口优化方案。

2023-06-03 10:32:22 7

原创 简化Mybatis分页操作,让我们来聊聊 PageHelper 及实现原理

面向关系型数据库的 SQL 查询和数据导出时,如果数据条数非常大,直接将所有数据一次性查出或者导出显然是不可行的。这时候就需要进行分页查询或分页导出,将查询或导出的数据按照指定大小分页加载或写入,从而提高查询或导出的效率。而分页查询或分页导出的实现过程比较繁琐,需要考虑很多细节问题,容易出错。因此,出现了一些支持分页查询或分页导出的插件或工具类,例如 MyBatis 的分页插件 PageHelper。

2023-06-03 10:28:20 22

原创 一文读懂Java多线程背后的故事

本文介绍了 Java 多线程的实际应用场景,包括改善用户体验、最大化利用 CPU 资源和简化代码实现等。我只是涉及了一些比较基础的应用场景介绍它,还有很多其他领域可以使用 Java 多线程进行优化。Java 多线程是 Java 程序员必备的技能之一,深入理解多线程技术的应用场景可以帮助您编写更高效、更健壮的程序,很开心能够分享这些。

2023-06-03 10:14:34 5

原创 一周吃透这份Java面试八股文,连CTO都能吊打,offer轻松拿

当今互联网行业中,Java作为一种广泛应用的编程语言,对于求职者来说仍是一项受欢迎的技能。然而,随着市场上的开发人员数量越来越多,Java面试的竞争也愈加激烈。目前Java面试有着以下现状:面试难度加大与过去相比,现在的企业对Java程序员的需求更高,因此招聘流程变得更加严格。许多公司增加了笔试环节和多轮面试,以确保他们雇佣到最适合的候选人。技术面试重点在Java面试中,重点考察的是候选人的编程能力、数据结构和算法知识、Spring框架和数据库相关知识等。此外,企业通常还会问到一些关于面向对象设计和代码优化

2023-05-31 11:38:20 21

空空如也

空空如也

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

TA关注的人

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