自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MongoDB vs MySQL,哪个更快?

本文主要是为了介绍bulkWrite()方法的使用,也就是MongoDB的批量写操作,通过实验可以看出MongoDB使用bulkWrite()方法进行大量数据的写操作比使用常规的方法进行写操作效率要高很多。文章也介绍了mysql几种写操作下批量和非批量的对比,可以看出他们批处理方式比非批处理快点,但没有MongoDB那么明显。对于MongoDB与mysql的比较,批量操作下,MongoDB插入、删除、更新都比mysql快,非批量操作下,MongoDB插入、删除、更新都比mysql慢。

2024-04-08 15:43:06 1968 1

原创 缓存穿透、缓存雪崩、缓存击穿

分析业务请求,如果是正常业务请求时发生缓存穿透现象,可针对相应的业务数据,在数据库查询不存在时,将其缓存为空值(null)或默认值。当然,除了上述方案,我们还可以限流、降级、熔断等服务层的措施,也可以考虑数据库层是否可以进行横向扩展,当缓存异常发生时,确保数据库能够抗住流量,不至于让整个系统崩溃。缓存雪崩是指只大量热点key同时失效的情况,如果是单个热点key,在不停的扛着大并发,在这个key失效的瞬间,持续的大并发请求就会击破缓存,直接请求到数据库,好像蛮力击穿一样。为什么说不得不考虑?

2024-04-07 16:33:50 280

原创 一个注解实现 WebSocket 集群方案,这样玩才爽

最后请允许我发表一点对于抽象的拙见抽象其实就和 “道生一,一生二,二生三,三生万物” 一样,根据你的顶级接口(也就是核心功能)不断的向外展开,你的顶级接口就是道(狭义的来讲)以这个库为例,ConnectionLoadBalanceConcept就是这个库的道,他的核心功能就是发送消息,至于怎么发,发给谁,不确定,像是一个混沌的状态。

2024-04-07 16:32:03 269

原创 遇到个MySQL索引长度限制的问题

前言前言我只是创建个索引而已,没想到还这些遇到个诡异的问题!😱😱话说你平时创建mysql时遇到过以下创建索引报错的情况吗?报错提示如下//需要添加索引的字段的长度太长,超过了767字节🚩什么?索引长度限制?我从没遇到过啊,MySQL还会对索引键的长度有限制?是的,一般都不会遇到,不过这个问题我一个同事就遇到了!他用,都是相同的,但是一个测试环境和一个线上MySQL版本,一个执行成功一个执行失败!

2024-04-07 16:29:02 314

原创 SpringBoot:一个注解就能帮你下载任意对象

下载功能应该是比较常见的功能了,虽然一个项目里面可能出现的不多,但是基本上每个项目都会有,而且有些下载功能其实还是比较繁杂的,倒不是难,而是麻烦。所以结合之前的下载需求,我写了一个库来简化下载功能的实现传送门:https://github.com/Linyuzai/concept/wiki/Concept-Download如果我说现在只需要一个注解就能帮你下载任意的对象,是不是觉得非常的方便@Download@Download感觉差别不大?那就听听我遇到的一个下载需求。

2024-04-07 16:27:04 320

原创 百度一面问了 3 个 ES 问题,直接干懵了

先自上而下,后自底向上的介绍ElasticSearch的底层工作原理,试图回答以下问题:为什么ElasticSearch占用很多内存?

2024-04-07 16:21:34 363

原创 WebSocket 集群解决方案

WebSocket是一种在网络应用程序中,使客户度端和服务器之间可以进行双向通信的协议。它允许数据可以在建立连接后进行实时交换,而不必依赖传统的HTTP请求-响应模式。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

2024-04-03 15:04:47 660 1

原创 缓存穿透、缓存雪崩、缓存击穿

分析业务请求,如果是正常业务请求时发生缓存穿透现象,可针对相应的业务数据,在数据库查询不存在时,将其缓存为空值(null)或默认值。当然,除了上述方案,我们还可以限流、降级、熔断等服务层的措施,也可以考虑数据库层是否可以进行横向扩展,当缓存异常发生时,确保数据库能够抗住流量,不至于让整个系统崩溃。缓存雪崩是指只大量热点key同时失效的情况,如果是单个热点key,在不停的扛着大并发,在这个key失效的瞬间,持续的大并发请求就会击破缓存,直接请求到数据库,好像蛮力击穿一样。为什么说不得不考虑?

2024-04-02 19:31:48 247

原创 RocketMQ为什么这么快?我从源码中扒出了10大原因

在传统IO中,如果想将用户缓存区的数据放到内核缓冲区,需要经过CPU拷贝mmap()sendfile()mmap()是将用户缓冲区和内核缓冲区共享,操作用户缓冲区就好像直接操作内核缓冲区,读写数据时不需要CPU拷贝Java中可以使用MappedByteBuffer这个API来达到操作内核缓冲区的效果sendfile()主要是用于文件传输,可以通过sendfile()将一个文件内容传输到另一个文件中或者是网络中。

2024-04-02 19:17:56 378

原创 微服务+多级缓存,性能起飞

另外陈某的知识星球开通了,公众号回复关键词:知识星球 获取限量20元优惠券加入只需179元,一顿饭钱,但是星球回馈的价值却是巨大,目前更新了Spring全家桶实战系列、亿级数据分库分表实战、DDD微服务实战专栏、我要进大厂、Spring,Mybatis等框架源码、架构实战22讲等....每增加一个专栏价格将上涨20元。

2024-04-02 19:14:32 364

原创 微服务Token鉴权设计的几种方案

根据需求积分服务提供了一个给用户添加积分的API,如果你的API是通过获取的当前登录用户ID增加的积分,那么面对场景二时你需要重新编写一个给用户添加积分的API,因为当前登录的是后台管理员而不是用户(代码复用率较低)缺点:A服务调用B服务时,B服务需要写一个内部调用的Controller接口A服务才能通过Fegin调用到B服务,增加了代码量(这里的设计方案是内部调用与外部调用Controller是分开的)各位服务都有自己的鉴权方式,当然也可以通过jar包的方式统一各服务的鉴权方式。

2024-04-02 19:11:05 427

原创 SpingBoot的5个扩展点,超级实用!

目录1、初始化器ApplicationContextInitializer2、监听器ApplicationListener3、Runner6、后记。

2024-04-02 17:26:01 295

原创 MySQL 的 varchar 水真的太深了!

来看极限边界情况,innodb为了记录一下varchar真实存储多少个字节,最多分配2个字节的空间去记录,2个字节16个比特位,全部为1,最大能记录的数字是2^16-1是65535个,innodb最大能记录varchar占用的字节数就是65535个,utf8mb4字符集一个字符是最大是4个字节,65535 / 4 = 16383.75,只要varchar字符数不超过16383个,innodb就可以记录真实占用的长度L,再多就记录不了了!这20字节的空间存储的是分散行的地址和占用的字节数。

2024-04-02 17:25:14 305

原创 面试官:Redis为什么默认16个数据库?

比如可以使用0号数据库存储某个应用生产环境中的数据,使用1号数据库存储测试环境中的数据,但不适宜使用0号数据库存储A应用的数据而使用1号数据库B应用的数据,不同的应用应该使用不同的Redis实例存储数据。对于db正确的理解应为“命名空间”,多个应用程序不应使用同一个Redis不同库,而应一个应用程序对应一个Redis实例,不同的数据库可用于存储不同环境的数据。Redis是一个字典结构的存储服务器,一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。以MySQL实例为例。

2024-04-02 17:24:19 298

原创 MyBatis 流式查询,真心强大!

上面的代码中,1 处我们创建了一个 TransactionTemplate 对象(此处 transactionManager 是怎么来的不用多解释,本文假设读者对 Spring 数据库事务的使用比较熟悉了),2 处执行数据库事务,而数据库事务的内容则是调用 Mapper 对象的流式查询。流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是:执行一个流式查询后,数据库访问框架就不负责关闭数据库连接了,需要应用在取完数据后自己关闭。所以,解决这个问题的思路不复杂,保持数据库连接打开即可。

2024-04-02 17:23:36 315

原创 Docker 是什么? 和 k8s 之间是什么关系?

• Docker 本质上就是一个将程序和环境打包并运行的工具软件,而 Docker 容器本质上只是个自带独立运行环境的特殊进程,底层用的其实是宿主机的操作系统内核。• Docker 软件 通过 Dockerfile 描述环境和应用程序的依赖关系, docker build 构建镜像, docker pull/push 跟 Docker Registry 交互实现存储和分发镜像,docker run 命令基于镜像启动容器,基于容器技术运行程序和它对应的环境,从而解决环境依赖导致的各种问题。

2024-04-02 17:21:50 289

原创 字节二面:如何设计一个支撑数亿用户的系统?

要设计出一套能支撑几十亿人的系统是很困难的。对于软件架构师来说,这一直是一项很大的挑战,但是,从现在开始,看完我的文章,你就会觉得容易很多了。下面是我在本文中提到的几个话题:从最简单的开始:万事合一。可扩展性的艺术:纵向扩展,横向扩展。扩展关系型数据库:主 - 从复制、主 - 主复制、联合、分片、非规范化和 SQL 调优。使用哪种数据库:NoSQL 还是 SQL?先进概念:缓存、CDN、geoDNS 等。在这篇文章里,我不打算谈论诸如容错、可靠性、高可用性等高性能计算的通用术语。

2024-04-02 17:19:56 643

原创 SpringBoot 优雅地实现文件的上传和下载

mavenspringbootmybatis-plusmysqlthymeleafbootstrap4.创建 springboot 项目这里我们主要引入以下依赖:webmybatis-plusmysql 驱动thymeleafcommons-fileuploadlombokcommons-fileupload 是一个上传文件的组件,该组件封装了一些上传文件的方法。6.修改配置文件这里主要包含数据源、thymeleaf、mybatis-plus 三个模块的配置。这里使用 mybatis-p

2023-05-26 13:53:56 353

原创 图解 Redis 分布式锁,写得太好了

分布式锁的演进。

2023-05-26 13:53:33 166

原创 重学了计算机网络,略有小成,经验全部分享出来

重学计算机网络已经有一段时间了,终于在离开大学多年后又重新拾起了一部分,时至今日已略有小成,并且写了一系列的文章了,会慢慢 发出来。我反正在学习的过程中是画了好多张图上大学的时候就想好好学习网络,梦想着以后成为一名网管。后来发现计算机网络还真是不太好学,非常非常抽象,发现有很多概念好像怎么学都学不明白。这才知道,原来更适合我的网吧管理员,而不是网络管理员。而写代码就不一样了,没那么抽象,而且写出来东西马上能看到成果,写一个方法一运行,马上能输出结果;写一个网页、一段样式,马上就能看到界面的变化。

2023-05-26 13:47:50 131

原创 分库分表经典15连问

我们去面试的时候,几乎都会被问到分库分表。田螺哥整理了分库分表的,大家看完肯定会有帮助的。公众号:捡田螺的小男孩。

2023-05-26 13:46:31 108

原创 蚂蚁 Golang 领域驱动设计(DDD)极简最佳实践

在本文中你可以看到一套较为完整的仓储层 => 领域层 => 表现层的 Golang 代码实现,但是肯定不会覆盖全部 DDD 概念,各位可以将它看作一种 Golang 中 DDD 的最佳实践来参考。01背景因为业务需求,我们当时正在用 Golang 从 0 到 1 构建一个Web 系统,由于是个新系统,所以很多东西要自己摸索,当时摆在面前的实际问题是如何更好的组织数据访问层和核心领域模型的代码。相比 Java 构建的系统,代码组织方式、分层等最佳实践已经固化在 Sprint Boot、Sofa Boot 等框

2023-05-26 13:45:04 1802

原创 优雅可拓展的登录封装,让你远离if-else

Hi,大家好,,相信各位码农朋友在搭建从0到1项目时在搭建完基建等任务后,最先去做的都是去搭建系统的用户体系,那么每一个码农朋友都会去编码属于自己系统的一套用户登录注册体系;但是登录方式极其多样,光小编一个人对接的就有google登录,苹果登录,手机验证码,微信验证码登录,微博登录等各种各样的登录;针对这么多的登录方式,小编是如何进行功能接入的呢?

2023-05-26 13:42:24 131

原创 SpringBoot核心配置全面总结

在SpringBoot核心配置文件中,除以上使用内置的配置项之外,我们还可以在自定义配置,然后采用注解方式去读取配置。

2023-05-26 13:42:20 488

原创 用好Java 8中的CompletableFuture类,程序性能起飞

CompletableFuture是Java 8中提供的一种非常方便的异步编程工具,它可以处理各种异步操作,并提供了丰富的方法来创建、操作和组合CompletableFuture对象。在实际应用中,我们可以根据实际需求选择合适的方法来使用CompletableFuture,提高代码的性能和可读性。

2023-05-26 13:40:58 201

原创 阿里 推荐的 Redis 使用规范,太优雅了 !

非字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除,同时要注意防止bigkey过期时间自动删除问题(例如一个200万的zset设置1小时过期,会触发del操作,造成阻塞,而且该操作不会不出现在慢查询中(latency可查)),查找方法和删除方法。关注公众号小黄鸭编程社区,回复关键字手册,获取最新开发手册。默认策略是volatile-lru,即超过最大内存后,在过期键中使用lru算法进行key的剔除,保证不过期数据不被删除,但是可能会出现OOM问题。

2023-05-26 13:39:55 121

原创 终于拿到了阿里2023年度九大Java技术文档——面试题+文档+白皮书

今天给大家分享一波阿里2023年度九大Java技术文档(包含面试题+文档+白皮书),希望大家能够喜欢!!需要阿里2023年度九大Java技术文档——面试题+文档+白皮书的小伙伴,可以在文末获取详情哦!

2023-05-18 13:34:36 247

原创 Java 大后端各种架构图汇总(建议收藏)

2. JVM 架构3. Java 技术体系4. 线程运行架构5. Java 体系(编译与运行)结构6. JMS 技术架构7. JMX 技术架构8. Spring 架构推荐一个 Spring Boot 基础实战教程:10. ibatis 架构11. Struts2 架构12. Struts1 架构13. JBPM14. EJB 技术架构15. Portal16. J2EE17. SmartClient Ajax 框架架构18. Oracle19. MYSQL 架构最新面试题整理好了,点击Java面试库小程序在

2023-05-13 16:27:36 659

原创 老版本Typora强制付费,试试这款开源替代品

前两天,陌溪兴高采烈的准备开始创作(水文)的时候,打开就弹出下面一段内容的老版本也不能用了?要强制收费了??因为去年月份的时候,推出版本,然后开始进行收费,但是针对老版本来说,还是可以继续使用的,所以很多升级后的小伙伴,陆陆续续的又降级到老版本继续使用,毕竟对于的新版本的更新日志,并没有看到亮眼和值得更新的功能,毕竟谁能拒绝白嫖呢。而今天,老版本也不能白嫖了,打开就提示需要下载更新最新的版本,然后进行付费购买才能继续使用,嗯。。块能在三个设备上使用。。既然不能继续使用了,那就找找替代工具吧!

2023-05-13 16:25:05 1720

原创 你的接口多少QPS?

当我们负责一个系统时,对外需要提供接口给业务方调用,我们是需要了解这个接口的指标以及对应的上下游。这样在出现的问题的时候,就可以根据历史的指标去找问题,去找上下游提醒有什么风险。面试官问到接口的性能/QPS或者压测主要是想看你是不是真的了解你所负责的内容,如果是搜索/推荐/流量的接口还比较好压测,但发送消息/订单/支付类似这类接口就不太好压测了。我们能表达出对接口的指标以及相关业务的细节,那么一般面试官也不会纠着你啦(除非这个面试官也刚好做这块业务)还想了解Austin消息推送平台什么面试问题?

2023-05-13 16:24:29 203

原创 为什么mysql的count()方法这么慢?

mysql用count方法查全表数据,在不同的存储引擎里实现不同,myisam有专门字段记录全表的行数,直接读这个字段就好了。而innodb则需要一行行去算。性能方面 count(*) ≈ count(1) > count(主键id) > count(普通索引列) > count(未加索引列),但哪怕是性能最好的count(*),由于实现上就需要一行行去算,所以数据量大的时候就是不给力。如果确实需要获取行数,且可以接受不那么精确的行数(只需要判断大概的量级)

2023-05-13 16:22:39 331

原创 Java record VS lombok谁更甚一筹?

Java的 record 关键字是Java 14中引入的一个新的语义特性。record 对于创建小型不可变的对象非常有用。另一方面,Lombok 是一个Java库,可以自动生成一些已知的模式为Java字节码。尽管它们都可以用来减少模板代码,但它们是不同的工具。因此,我们应该在特定情况下使用更适合我们需求的工具。在这篇文章中,我们将探讨各种使用情况,包括java record 的一些限制。对于每个例子,我们将看到Lombok如何派上用场,并比较这两种解决方案。

2023-05-13 16:22:28 208

原创 面试必问,如何保证接口的幂等性?

幂等性就是一个方法短时间内被多次调用,但是产生的结果和只调用一次的结果相同,那么这个操作就是幂等的。比如select操作天然幂等。为什么说它是天然的幂等呢?因为这个查询语句无论执行多少次都不会对资源造成副作用,所以可以说是天然的幂等。而这也是接口的幂等性,那么为什么接口需要幂等性呢?基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。

2023-05-13 16:20:40 159

原创 并发编程:CompletableFuture异步编程没有那么难

今天大家学到了哪些知识呢?如何优化接口性能?某些场景下可以使用多线程并行代替串行。如何实现接口并行调用?通过今天的学习可以使用 Future+Callable、FutureTask、CompletableFuture。详细介绍了CompletableFuture的强大,掌握CompletableFuture提供的函数式编程的能力,以及与JDK8流式编程结合使用,使代码更加美观优雅,写起来简洁和便利;

2023-05-13 16:20:05 247

原创 如何通过模板模式重构代码?

①、AbstractClass 抽象模板一、基本方法上面的 baseOperation() 或者 customOperation() 方法,也叫基本操作,是由子类实现的方法,并且在模板方法中被调用。基本方法尽量设计为protected类型, 符合迪米特法则, 不需要暴露的属性或方法尽量不要设置为protected类型。实现类若非必要, 尽量不要扩大父类中的访权限。二、模板方法上面的 templateMethod() 方法,可以有一个或者几个,实现对基本方法的调度,完成固定的逻辑。

2023-05-13 16:17:47 68

原创 奇怪,为什么ArrayList初始化容量大小为10?

看ArrayList源码时,无意中看到ArrayList的初始化容量大小为10,这就奇怪了!我们都知道ArrayList和HashMap底层都是基于数组的,但为什么ArrayList不像用HashMap那样用16作为初始容量大小,而是采用10呢?于是各方查找资料,求证了这个问题,这篇文章就给大家讲讲。

2023-05-13 16:13:48 102

原创 Alibaba最新Java面试突击核心讲(究极版)仅分享一次

文章到这里篇幅已经很长了,就不继续拉长篇幅了。

2023-05-13 10:14:27 126

原创 Java 中九种 Map 的遍历方式,你一般用的是哪种呢?

从上面的例子来看,当我们的集合数量很少的时候,基本上普通的遍历就可以搞定,不需要使用 JDK 8 的高级 API 来进行遍历,当我们的集合数量较大的时候,就可以考虑采用 JDK 8 的 forEach 或者 Stream 来进行遍历,这样的话效率更高。在普通的遍历方法中 entrySet() 的方法要比使用 keySet() 的方法好。

2023-05-12 14:32:20 289 1

原创 JPA的好搭档 - QueryDSL

相对于 MyBatis ,本人更喜欢 Spring Data JPA ,因为它更符合面向对象的思想,然而 JPA 对复杂的查询支持较弱,常见的有两种方式:一种方式是Repository继承JpaSpecificationExecutor接口,优点是支持复杂查询、编译期可以规避一些语法错误,缺点是语法晦涩难懂,学习成本太高。

2023-05-12 14:30:22 439

原创 MySQL主从数据不一致,怎么办?

总结一下,解决主从复制延迟一共可以有如下7种思路:读写走主库方案延迟查询方案判断主备无延迟方案判断同步位点方案等待同步位点方案半同步复制方案+等待位点组复制MGR方案其实在实际生产中,这些方案是可以混合使用的,因为一致性越强就意味着性能越低。比如业务不在乎是否查询到过期数据就可以直接查询从库,如果需要的一致性强可以选择后几种方案。

2023-05-12 14:30:14 633

空空如也

空空如也

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

TA关注的人

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