- 博客(306)
- 收藏
- 关注
原创 mysql索引详解
性能低、执行时间太长、等待时间太长、连接查询、索引失效。(1)用户表(2)部门表(3)未触发索引(4)触发索引(5)结果分析explain中第一行出现的表是驱动表。指定了联接条件时,满足查询条件的记录行数少的表为[驱动表]未指定联接条件时,行数少的表为[驱动表]对驱动表直接进行排序就会触发索引,对非驱动表进行排序不会触发索引。(1) id: SELECT识别符。这是SELECT的查询序列号。SIMPLE:简单SELECT(不使用UNION或子查询)PRIMARY:最外面的SELECT。
2023-09-04 17:16:10
358
原创 Redisson——联合锁和红锁
联合锁和红锁放在一起来分析,是因为这两种锁实现在Redisson中,关联密切。红锁是官方提出的一个锁方案,大概如下:假设redis集群有5个节点,一个客户端申请锁时,会向所有的节点申请锁,只有大于一半的节点数量返回成功,且耗费的总时间小于锁有效时间,才会判定为拿锁成功,否则会被认定为失败,需要将已经成功的节点锁释放掉。
2023-09-04 17:08:03
1316
原创 运行在JVM上的编程语言,认为只有java你就狭隘了
当您运行 lein self-install 命令时,它会自动从 Leiningen 的官方仓库下载最新版本的 Leiningen JAR 文件,并将其安装到本地的 Leiningen 目录中。安装完成后,您可以在命令行中直接使用 lein 命令来执行各种 Leiningen 的任务,如创建新的 Clojure 项目、编译和运行代码、管理依赖项等。Clojure 是由 Rich Hickey开发的,它结合了函数式编程的思想和强大的并发性能,提供了一种简洁、可扩展和可靠的编程语言。
2023-09-04 17:02:05
375
原创 Java远程热部署插件HotSeconds的使用
HotSecondsServer安装HotSecondsClient安装在Plugins->Marketplace中搜索HotSecondsClient,下载安装即可安装完后可以看到三个区域,工具栏(Debug旁边),Run菜单栏和HotSecondsClient控制台HotSecondsClient控制台的有所有的菜单功能,所以后面以HotSecondsClient控制台为准进行介绍。IDEA最新版的UI在Debug旁边看不到按钮了,HotSecondsClient控制台和Run菜单都是有的。
2023-09-04 11:26:50
935
原创 常见的负载均衡策略有哪些?
负载均衡策略是实现负载均衡器的关键,而负载均衡器又是分布式系统中不可或缺的重要组件。使用它有助于提高系统的整体性能、可用性、可靠性和安全性,同时支持系统的扩展和故障容忍性。对于处理大量请求的应用程序和微服务架构来说,负载均衡器是不可或缺的重要工具。
2023-09-02 10:04:07
277
原创 Java 内存管理最佳实践
在这篇文章中,我们讨论了避免内存泄漏和优化 Java 内存使用的最佳实践。通过遵循这些实践,开发人员可以提高 Java 应用程序的性能和可靠性。请记住使用不可变对象、最小化对象创建、使用适当的数据结构并正确关闭资源以避免内存泄漏。
2023-09-02 09:55:13
92
原创 Minio生产环境实战经验分享
数据安全:数据防丢失,即便磁盘损坏,只要不严重都能恢复数据迁移:快速方便的迁移磁盘数据数据扩容:磁盘容量满了也可以快速灵活的扩容数据上云:自建的存储机房成本受限,可以快速上云,比如阿里云OSSMinio的部署有很多种方式,我们根据上面列出的几点功能来实际说明。
2023-09-02 09:49:24
938
原创 Mybatis中方法和sql语句的桥梁——MapperProxy
事实上,Mybatis中getMapper获取实例对象的背后的逻辑就是通过动态代理的方式生成一个实现该接口的代理类。进一步,调用该实例对象执行对应sql的背后的逻辑也全部交给了SqlSession来处理。至于SqlSession中是如何执行sql的且听后续分解~~读源码,分析源码本身就是一件枯燥的事情。作者在行文排版上已经尽可能减少代码的的排版,因为作者觉得大段的粘贴代码只会降低行文的可读性。事实上,作者更喜欢用图示的信息来展现代码间的调用逻辑。希望文章中的图能对你理解MyBatis有所帮助。
2023-09-02 09:40:38
254
原创 既然有Map了,为什么还要有Redis?
代码更清晰,处理逻辑更简单;不用考虑各种锁的问题,不存在加锁和释放锁的操作,没有因为可能出现死锁而导致的性能问题;不存在多线程切换而消耗CPU;无法发挥多核CPU的优势,但可以采用多开几个Redis实例来完善;Redis是一个key-value存储系统,支持10种数据类型,总结了为何要用Redis替代map作为程序缓存、Redis为什么是单线程的、Redis的优缺点、Redis的常用场景,做了一次Redis的快速入门。
2023-09-01 15:01:04
97
原创 优秀的后端应该有哪些开发习惯?
毕业快三年了,前后也待过几家公司,碰到各种各样的同事。见识过各种各样的代码,优秀的、垃圾的、不堪入目的、看了想跑路的等等,所以这篇文章记录一下一个优秀的后端 Java 开发应该有哪些好的开发习惯。本篇文章简单介绍我日常开发的习惯,当然仅是作者自己的见解。暂时只想到这几点,以后发现其他的会更新。
2023-09-01 11:02:47
92
原创 Dubbo服务接口详解
Dubbo 服务接口的实现方式包括两种:基于 Spring 的 XML 配置方式和基于注解的方式。(1)基于 Spring 的 XML 配置方式需要在 XML 配置文件中配置服务接口的信息,包括接口名称、实现类、协议、端口等;(2)基于注解的方式则需要在接口和实现类上添加相应的注解来配置服务接口信息。以下是Dubbo服务接口的注册机制的时序图:服务消费方向注册中心订阅所需的服务列表。注册中心查询注册的服务列表。服务提供方向注册中心注册服务。注册中心将服务列表返回给服务消费方。
2023-09-01 10:54:04
483
原创 用了这么久SpringBoot却还不知道的一个小技巧
你可能调第三方接口喜欢启动application,修改,再启动,再修改,顺便还有个不喜欢写JUnitTest的习惯。你可能有一天想要在SpringBoot启动后,立马想要干一些事情,现在没有可能是你还没遇到。那么SpringBoot本身提供了一个小技巧,很多人估计没用过。其实,能用的地方挺多,我最后再举个例子,netty启动时,往往是绑定了端口并以同步形式启动。
2023-09-01 10:44:25
79
原创 如何设计一个高质量的 API 接口?
API执行的功能可以很丰富、很强大,但API声明和用法一定要尽量的简单,不能将功能的丰富通过复杂的用法来实现,这会导致API功能不单一,演进不可控。无意义的接口不仅增加了维护的难度,更重要是对于程序的可控性的大大降低,接口也会十分臃肿。功能模棱两可,诸多特殊逻辑的API肯定不是个优雅的API,且会造成功能类似重复的API。API要具备统一的命名、统一的入/出参规范、统一的异常规范、统一的错误码规范、统一的版本规范等。扩展参数应当是便利的,保证后续类似的需求,可以在已有的API上通过兼容扩展的方式实现。
2023-09-01 10:18:15
108
原创 AI时代!程序员不能错过的100条ChatGPT代码提示词
ChatGPT 可以是一个有价值的工具,既可以查找你自己的代码中的错误,也可以快速生成简单的编码程序。ChatGPT可以为各种编程语言生成代码,包括Python,JavaScript,C++,Java,Ruby,C#,PHP,Swift,Perl,Go,Shell,R,Lua,Rust,Scala,TypeScript,Kotlin,Dart和Elixir。ChatGPT 是一个强大的工具,可以快速准确地生成代码,但它仍然是一个相对较新的模型,可能缺乏人类编码人员所拥有的经验和对上下文的理解。
2023-09-01 10:12:27
1568
原创 工作6年了日期时间格式化还在写YYYY疯狂给队友埋雷
哈喽小伙伴们好久不见,今天来个有意思的雷,看你有没有埋过。日期时间格式统一使用yyyy小写;日期格式要规定大家都引用定义好的工具类,避免有人手误打错。
2023-08-31 15:31:59
81
原创 Java并发编程(线程池篇)
线程池是一种多线程的一种处理形式,处理过程中可以将任务添加到队列中,然后创建线程后自动启动这些任务。比如:线程池、字符串常量池、数据库连接池。
2023-08-31 11:39:00
92
原创 Java单元测试及常用语句
编写单元测试在开发中的地位举足轻重。在开发过程中,避免不了优化或重构历史代码。单元测试,在一定程度上可以帮助测试更新后逻辑,以及潜在调用链。另外也分享一些链接,希望可以帮助大家完成从0到1的搭建。
2023-08-31 11:20:24
136
原创 Java和Lua的完美结合:实现Java程序的动态扩展和脚本自动升级
Lua是一种轻量级的脚本语言,常用于游戏开发和嵌入式系统中。它与Java不同,Lua不支持多线程和原生GUI编程。因此,在一些场景下,我们需要将Java和Lua结合起来使用,以弥补两者的不足。本篇博文将介绍如何在Java程序中使用Lua代码,并且在Lua中调用Java代码。
2023-08-31 10:16:57
807
原创 面试官:什么是ThreadLocal?底层原理?
作为一枚应届毕业菜鸟,在面试中经常被考察的题目:什么是 ThreadLocal?ThreadLocal 的底层原理?以及在实际开发项目过程中,经常用到保存用户信息的类就是 ThreadLocal。ThreadLocal 是 Java 编程语言中的一个线程本地变量,它为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程。那么 ThreadLocal 到底解决了什么问题,又适用于什么样的场景?以及 ThreadLocal 一些细节!
2023-08-31 09:52:45
289
原创 Java错误信息详解与解决方式
认真阅读错误信息,注意错误类型和描述。查看堆栈跟踪以定位错误发生的位置。推断错误原因,了解错误信息的含义。使用调试工具调试代码或添加日志语句。在互联网上搜索相关错误信息,寻找解决方案。阅读文档和参考资料以获取更多信息。寻求他人帮助和交流,分享问题和错误信息。
2023-08-30 17:17:48
1148
原创 揭秘Java五大特性,你不容错过
Java是一种跨平台、面向对象、高效的编程语言。它的五大特性分别是:封装、继承、多态、抽象和接口。这五个特性为Java带来了很多优势,包括代码重用性、灵活性、可维护性、可扩展性等。本文将介绍这五个特性的概念和作用,以及如何在实际编程中应用它们。我们将通过示例代码来说明它们的用法,并提供测试用例来验证代码的正确性。最后,我们将总结这些特性在Java中的作用,并指出它们为什么是Java成功的重要因素之一。本文提供了五个示例代码,分别对应Java的五大特性。
2023-08-30 17:07:36
415
原创 MySQL索引之基本概念
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。那么我们可以得出索引的本质:本质就是,索引是一种数据结构。索引的目的在于提高查询效率,可以类比字典。可以理解为:排好序的快速查找数据结构。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。也就是说。
2023-08-30 11:34:27
58
原创 树形菜单的实现方式
以上我们介绍了三种在Java中实现树形菜单的方法,从基础的递归法、队列法到使用Map进行优化。根据实际需求和数据量大小,你可以选择合适的方法进行实现。不过,无论使用哪种方法,都要确保理解树形结构的基础原理和具体实现细节,以确保代码的正确性和效率。还有一种是路径枚举方式的一个简单例子,它已经足够用于实际应用。当然,还有许多细节可以优化,如路径长度限制、节点移动等。而其他的树形编号方法,如嵌套集模型和闭包表,会有更复杂的逻辑。但总的来说,理解核心概念并将其应用于实际代码是关键。
2023-08-30 11:30:25
848
原创 JVM锁优化:Java原生锁的背后!
本文首先简单介绍了Java中锁的两种实现方式:synchronized和Lock接口。然后分别从JVM级别进行解析:synchronized的优化主要包括:偏向锁、轻量级锁和重量级锁等;而Lock接口的优化主要包括:公平锁和非公平锁等。本文最后给出了相应的代码示例和测试用例,最终得出结论:JVM对Java的原生锁做了很多优化,这些优化大大提升了锁的性能和效率。
2023-08-30 11:22:00
86
原创 京东技术团队破局主键重复问题的坎坷路
伴随着业务的不断发展,逐渐由单库单表向分库分表进行发展。在这个过程中不可避免的一个问题是确保主键要的唯一性,以便于后续的数据聚合、分析等等场景的使用。在进行分库分表的解决方案中有多种技术选型,大概分为两大类客户端分库分表、服务端分库分表。例如 Sharding-JDBC、ShardingSphere、 MyCat、 ShardingSphere-Proxy、Jproxy(京东内部已弃用)等等。在这个燥热的夏天,又突然收到告警,分库分表的主键冲突了,这还能忍?不,坚决不能忍,必须解决掉!
2023-08-30 11:13:43
89
原创 守护线程和普通线程的区别
如果用户线程全部结束意味着程序需要完成的任务已经结束了,守护线程随着 JVM 一同工作setDaemon(true) 必须在 start() 之前设置,否则会报异常。
2023-08-29 15:51:23
106
原创 【深入浅出系列】之代码可读性 | 京东云技术团队
一句话:见名知其义。有人说好的代码必然有清晰完整的注释,我不否认;也有人说代码即注释,是代码简洁之道的最高境界,我也不否认。但我都不完全接受,如果照搬前者,有人会在每个方法、每个循环、每个判断都添加大量注释,对于一个表达不严谨的coder来说,代码与汉字可能词不达意;而且,一旦代码逻辑发生变化,注释改不改?对于后者,英语水平可能也就是个半吊子,动词名词不区分,真能做到代码即注释的有多少人?
2023-08-29 15:48:38
95
原创 最新出炉!备注2023金九银十,Java中高级面试208问
我想说的是,没有天生失败的人,只有甘愿失败的人!一直隔岸观火,没有作为是无法让自己成功的,只能一辈子当个普普通通的打工人,在35岁(可能到不了35岁)被后辈拍死在沙滩上,然后呢?去当个滴滴司机?去送外卖?你能够接受这样的自己吗?能够接受从年薪20w-80w,变成月薪2k?我想没有人愿意吧!所以提升自己的技术才是我们身为技术人员在互联网的潮流中站稳脚跟的关键,只要你的技术能够足够,什么35岁中年危机根本就和你没有关系,你去看看阿里P8有几个不是35+?
2023-08-29 14:05:25
159
原创 Java Proxy类创建代理类实现原理源码剖析
现在,我们可以来回答最初提到的那个问题了。传入类加载器是因为生成代理类的字节码文件后,需要类加载器才能将字节码文件加载到JVM中去执行。我们日常编写的Java类不需要这样显式的指定类加载器来加载,是因为在编译时,就执行了上面的类加载过程。而现在的代理类是在Java运行时动态创建的,因此需要显式传入类加载器来加载。而传入interfaces参数就更好理解了,实际上就是指定我们的代理类要去代理哪些类。通过上面的源码分析我们也已经知道了,代理类在生成时,会创建指定interfaces参数相应类的所有方法。
2023-08-29 10:00:55
134
原创 Java之自定义异常与NullPointerException的处理
现在我们应该知道,Java中的异常是指在程序运行时出现的错误或意外情况,例如无效的参数、空指针引用、数组越界等。Java提供了一些内置的异常类,比如NullPointerException、ArrayIndexOutOfBoundsException等。但如果我们想抛出自己定义的异常,就需要自定义异常类了。另外Java中的异常都继承自Throwable类,Throwable类又分为Error和Exception两种。其中Error表示严重的系统级错误,一般不会被程序员处理;
2023-08-29 09:49:22
180
原创 按这个方法打java17的镜像,直接减少70%
本文主要通过介绍JDK和JRE的简单区别,并从Java1.8 和Java17两个重要的版本来切入,帮助各位业务开发者以及运维人员来了解Java基础镜像的构建过程。希望能给各位开发者带来帮助。
2023-08-29 09:45:03
1345
原创 研究良久,终于发现了他代码写的快且bug少的原因
读者诸君,今日我们适当放松一下,不钻研枯燥的知识和源码,分享一套高效的摸鱼绝活。我有一位程序员朋友,当时在一个团队中开发Android应用,历经多次考核后发现:他的任务量略多但他的bug数量和严重度均低但他加班的时间又少于其他人不禁令人产生好奇,他是如何做到代码别的又快,质量又高的经过多次研究我终于发现了奥秘。为了行文方便我用"老L"来代指这位朋友。听完老L的思路,我若有所思,若有所悟。借用SPI等技术思路,可以轻易的解决 "Mock 模块集成与移除" 的问题。
2023-08-28 13:36:02
53
原创 IO系列 | 一文掌握OKHTTP中的OKIO为什么这么OK
本篇是IO系列的第4篇,前三篇文章中,我们已经对JAVA经典IO设计、JAVA-NIO内容、操作系统IO架构基础概念、Zero-Copy做了较为系统的回顾。而绝大部分Android应用中都会涉及到网络模块,RetrofitOkhttp几乎是必用的框架,Okio作为Okhttp中的重要模块,原先用于处理网络模块中的IO问题,随着其项目发展,Okio也开始面向其他问题。这一篇,我们一同对OKIO做一次系统的梳理,搞明白OKIO为什么OK,做到在面试中自如的吹牛批、在日常工作中灵活使用。
2023-08-28 13:28:26
347
原创 Kafka为什么这么快?
Kafka 是一个基于发布-订阅模式的消息系统,它可以在多个生产者和消费者之间传递大量的数据。Kafka 的一个显著特点是它的高吞吐率,即每秒可以处理百万级别的消息。那么 Kafka 是如何实现这样高得性能呢?本文将从七个方面来分析 Kafka 的速度优势。以下是对本文中使用得一些英文单词得解释:Broker:Kafka 集群中的一台或多台服务器统称 brokerProducer:消息生产者Consumer:消息消费者zero copy:零拷贝。
2023-08-28 13:22:30
64
原创 MybatisPlus拥抱Spring大腿,轻松实现数据动态可配置热脱敏
本文主要是思路的剖析,并没有将每个案例都完成的代码呈现出来,因为在项目中也不可能同时使用上述所有的场景。我仅讲核心代码提供,部分辅助型的如有需要可以下方留言给你提供思路。mybatis-plus 功能已经很强大了。基本上我们主流的需求都存在,但是保不齐我们项目需要定制化开发。上述的功能基本上都是在 mybatis 的基础上进行额外的扩展,技术无好坏,主要是符合项目最重要。
2023-08-28 13:21:13
329
原创 解析SPI机制:实现灵活插件式架构
是Java中一种服务提供者接口的设计模式,它提供了一种机制,允许组件在不同的实现之间进行插拔,从而实现松耦合的架构。SPI通常用于实现插件化、可扩展的应用程序,使开发人员能够轻松地添加、替换或定制系统中的功能模块。当服务的提供者提供了一种接口的实现之后,需要在classpath下的目录里创建一个以服务接口命名的文件,这个文件里的内容就是这个接口的具体的实现类。当其他的程序需要这个服务的时候,就可以通过查找这个jar包(一般都是以jar包做依赖)的。
2023-08-28 13:18:19
194
原创 如何在业务代码中优雅的使用策略模式
假设你正在开发一个电商平台,其中涉及到商品的折扣策略。优惠策略有很多种可能,如领取优惠券抵扣、返现促销、拼团优惠等。最初的实现可能会在购物车类中嵌入各种折扣逻辑,导致代码的可维护性和扩展性下降。下面代码在业务开发中经常遇到,代码满足了业务需求,客户可根据自己的需求选择不同的优惠策略。但是,经过一段时间的业务积累,促销活动会越来越多。于是,程序员就开始经常加班,每次上活动之前都要通宵改代码,而且要做重复测试,判断逻辑可能也会变得越来越复杂。此时,我们要思考代码是否需要重构。下面我们看下策略模式。
2023-08-28 13:15:59
73
原创 揭秘 | RocketMQ文件清理机制~
最近在公司的MQ论坛里,看到好几次Broker扩容消息,我心里就在想RocketMq是有文件清理机制的,咱们的MQ消息就那么多吗,hh~虽然我知道RocketMQ存在文件清理机制,但是具体的清理策略却不是很清楚,本文就来整理一下RocketMQ的清理机制及源码源码学完总结一下首先Broker启动的时候会开启定时任务每隔10s去清理过期文件,其中包含三种文件先清除commitLog,当满足以下条件时,可执行commitLog删除逻辑定时删除,达到符合删除的时间节点,即可触发达到阈值,阈值分为三种。
2023-08-25 13:21:08
893
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人