自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

无休居士的博客

握不住的沙,不如扬了它

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

原创 不只是前端,后端、产品和测试也需要了解的浏览器知识(二)

本文主要介绍了业务系统呈现给用户所经历的各个节点,以及作为技术人能在各节点中进行优化的点, 通过这些技术优化点,在研发过程中不断创新,推动产品性能、用户体验的提升,来实现业务的增长,创造可持续的价值。

2024-10-05 03:00:00 702

原创 MySQL索引机制精讲

接触MySQL数据库的小伙伴一定避不开索引,索引的出现是为了提高数据查询的效率,就像书的目录一样。某一个SQL查询比较慢,你第一时间想到的就是“给某个字段加个索引吧”,那么索引是什么?是如何工作的呢?一起静下心来,耐心看完这篇文章吧,干货不啰嗦,相信你一定会有所收获。

2024-10-05 00:20:13 865

原创 AI大模型快速生成题库-助力业务人效提升10+倍【实战落地,强烈推荐】

通过AI大模型帮助用户进行培训试题的生成,在一定程度上将用户从低效、低技术含量、大工作量中解放出来,是面向用户痛点的一次尝试。同时通过该场景将大模型的能力和业务场景及工程系统结合了起来,让用户得到感知,也便于后续更多的大模型实践场景的发掘和落地。该案例不仅用在航空领域,在其他诸多需要生成试题,生成问卷等相关场景方面都可进行参考和尝试。当前现在试题生成能力也仅是实现在从0到1的落地建设,能力需要不断的打磨和完善,后续会逐步进行1到100,100到∞的升级。

2024-10-04 06:00:00 991

原创 不只是前端,后端、产品和测试也需要了解的浏览器知识(一)

本篇文章主要介绍一下作为研发了解浏览器的必要性, 以及浏览器的基本情况和整体的发展。在考虑产品定位时(开发出一款什么样的目标产品),我们需要对浏览器有一定的了解,整篇文章对研发和产品皆有一定的参考意义。

2024-10-04 03:30:00 1109

原创 Proxyless的多活流量和微服务治理

Joylive Agent 是一个基于字节码增强的框架,专注于多活和单元化场景下的流量治理。它提供了以下功能:多活流量调度、全链路灰度发布、QPS和并发限制、标签路由、负载均衡,熔断降级,鉴权等流量治理策略。其特性包括微内核架构、强类隔离、业务零侵入等,使其在保持高性能的同时对业务代码影响最小,是面向Java领域的新一代Proxyless Service Mesh探索实现。项目地址:https://github.com/jd-opensource/joylive-agent。

2024-10-03 10:47:16 1163

原创 业务复杂度治理方法论--十年系统设计经验总结

1、小步快跑。每个迭代要能独立交付,保障每次迭代充分验证,更快看到重构效果2、先写后读。通过双写,验证新模型的可行性;通过数据一致性校验后,再逐步迁移读接口3、先轻后重。先做简单逻辑再做复杂逻辑。先迁移轻业务,有了经验后,再去迁移更复杂的重业务

2024-10-03 09:52:24 867

原创 整洁架构演进之路——京东广告投放平台实战

从去年开始京东广告投放系统做了一次以领域驱动设计为思想内核的架构升级,在深入理解DDD思想的同时,我们基于广告投放业务的本质特征大胆地融入了自己的理解和改造。新架构是从设计思想到落地框架都进行了彻底的革新,涉及内容比较多,因此我们希望通过一系列文章循序渐进地阐述本次架构升级的始末。新架构并不是一日而成的,而是经过了多次架构升级的演进,因此我们将本文作为该系列的第一篇文章,先让大家通过广告投放平台的架构演进历程来了解新架构的设计初衷。

2024-10-02 02:40:33 975

原创 「重构:改善既有代码的设计」实战篇

正确定义问题,比解决问题重要一百倍。那我们首先来搞清楚什么叫重构?作为(名词),重构是指在不改变软件外在功能的前提下,调整其内部结构的过程。这样的调整旨在提高软件的可理解性和降低修改成本。作为(动词),重构意味着通过一系列细微的步骤,不断地调整软件结构,以保持其设计的整洁和可维护性。重构是一种精练的技艺,它通过小的、计划好的修改来减少引入错误的风险。本质上,重构是对已完成的代码进行设计上的改进。

2024-10-02 02:28:59 1083

原创 《大厂算法冲锋:求解字符串数组最长公共前缀》

在互联网大厂的算法面试中,字符串处理是一个常见的考察点。其中,“查找字符串数组中的最长公共前缀”是一道经典题目。本文将通过详细讲解和代码示例,帮助你掌握如何使用Java高效地解决这个问题,并且达到最优的时间复杂度和空间复杂度。

2024-10-01 03:41:26 254

原创 《大厂算法冲锋:字符串数字求和的精妙之道》

在准备互联网大厂的技术面试时,掌握一些常见的算法问题是非常重要的。今天我们将探讨一个经典的问题:如何将两个以字符串形式表示的非负整数相加,并返回它们的和,同样以字符串形式表示。这个问题不仅考察了基本的数据类型转换能力,还涉及到了字符串处理、数学运算以及算法设计。通过这篇文章,你将学到两种高效的解决方案,并且能够深刻理解每一步背后的原理。

2024-10-01 02:37:03 296

原创 面试官:分库分表,真的有必要吗?

如上所述,引入分库分表虽然可以解决数据库瓶颈问题,但是也给系统带来巨大的复杂性,不是非必须不要使用。设计系统我们一向要本着高可拓展去设计,但是不要过度设计和超前设计。适合当前系统的设计才是最好的。

2024-09-30 06:30:00 787

原创 MySQL之分库分表后带来的“副作用”你是怎么解决的?

对于需要扩容时的情况,首先依旧把新的数据写入到老库中,然后写完之后同步给MQ一份,后续再由MQ的消费者去将新数据写到新库中,同时新库在这期间,会去同步老库中原有的数据,这个动作持续到所有旧数据全部同步完成后,再以老库作为校验基准,核对数据无误后,再将模式切换为扩容后的分库模式。这里可以看到,垂直分表虽然会有后患问题,但带来的问题本质上也不算大问题,就是读写数据的操作会相对麻烦一些,下面来看看其他的分库分表方案,接下来是真正的重头戏。其实异步双写方案,也可以用来做后续的节点扩容,但会相对来说比较麻烦一些。

2024-09-30 05:00:00 1221

原创 分库分表很常见,但这些面试问题90%的人都答不全

以上,本文介绍了分库分表的一些原因,以及如何做分库分表,并且讨论了其中比较关键的分表字段和分表算法的问题。还介绍了几款比较不错的分库分表的相关框架。最后,还有一些需要大家注意的就是分库分表会引入一些新的问题,这些问题的解决成本也都不低,所以在做技术选型的时候也要做好这方面的评估。

2024-09-28 17:09:11 940

原创 分库分表常见算法,每个高级开发必知必会?

分库分表是一种数据库设计技术,其目的是为了提高数据库的性能和扩展性。它通过将数据库的表拆分到多个数据库中来实现这一目的。要根据实际的业务情况进行组合,例如省、市;男、女;年龄;等等都可以作为策略。增加了系统的复杂性:分库分表会增加系统的复杂性,有时候需要额外的中间件(MyCat)来实现,并且需要在程序中额外处理分库分表的逻辑。分页、排序、跨节点联合查询等等问题。降低了事务的原子性:由于分库分表会将数据存储在多个数据库或表中,因此在一次事务中可能涉及多个数据库,降低了事务的原子性。如何解决跨库事务问题。

2024-09-28 16:48:55 615

原创 进阶:反转二叉树的奇数层

通过下面方法,我们可以有效地反转完美二叉树中每个奇数层的节点值。这个方法利用了层次遍历的思想,简洁且易于理解。,请反转这棵树中每个奇数层的节点值。完美二叉树是指所有叶子节点都在同一层,并且每个非叶子节点都有两个子节点。给定一棵完美二叉树的根节点。

2024-09-27 04:00:00 564

原创 精简解析:二叉树的遍历方法及其应用场景

二叉树是一种常见的数据结构,广泛应用于各种算法和数据处理任务中。遍历二叉树是访问其所有节点的过程,有多种不同的遍历方法,每种方法都有其特定的应用场景和特点。本文将详细介绍前序遍历、中序遍历、后序遍历以及层次遍历的区别和使用场景。前序遍历的顺序是:根节点 -> 左子树 -> 右子树。访问根节点。递归地对左子树进行前序遍历。递归地对右子树进行前序遍历。中序遍历的顺序是:左子树 -> 根节点 -> 右子树。递归地对左子树进行中序遍历。访问根节点。递归地对右子树进行中序遍历。

2024-09-27 02:00:00 998

原创 面试官:讲一下分析和解决JAVA 内存泄露的真实例子

一直在为Java的“内存泄露”问题纠结。Java应用程序占用的内存在不断的、有规律的上涨,最终超过了监控阈值。福尔摩斯不得不出手了!

2024-09-26 03:45:00 987

原创 快手一面:给定一棵二叉树,要求将其转换为其镜像?

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。要将一棵二叉树转换为其镜像,可以通过递归的方法来实现。

2024-09-26 01:51:17 1008

原创 美团一面:给定两棵二叉树 `A` 和 `B`,判断 `B` 是否是 `A` 的子结构?

给定两棵二叉树 A 和 B,判断 B 是否是 A 的子结构。所谓子结构是指 B 中任意节点在 A 中存在相同的结构和节点值。下面是对这段代码的题解,包括问题描述、思路分析和代码解释。

2024-09-26 01:33:09 744

原创 面试官:如何处理内存泄漏问题?我:内存泄漏是什么?

当程序未能释放未使用的资源(例如对象、数据库连接或文件句柄)时会发生内存泄漏,而当一个对象保留对另一个对象的引用时会发生引用泄漏,即使后者不再需要。这些非预期的对象引用会阻止内置的 Java 垃圾收集进程清除这些对象获取的内存。在本文中,我们研究了内存泄漏是什么、为什么会发生以及如何防止 Java 中的内存泄漏。

2024-09-25 04:45:00 704

原创 面试官:讲讲Java内存分配空间和内存分配策略

在之前的文章中,我们也介绍过,一个Java对象在堆上分配的时候,主要是在Eden区上,如果启动了TLAB的话会优先在TLAB上分配,少数情况下也可能会直接分配在老年代中,分配规则并不是百分之百固定的,这取决于当前使用的是哪一种垃圾收集器,还有虚拟机中与内存有关的参数的设置。Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点,所以,即使是一个Java的初学者,也一定或多或少的对JVM有一些了解。但是逃逸分析自身也是需要进行一系列复杂的分析的,这其实也是一个相对耗时的过程。

2024-09-25 04:00:00 665

原创 分布式环境中,接口超时到底怎么处理?

接口超时的原因多种多样,涉及到网络、服务器性能、代码逻辑、配置、资源限制等多个方面。为了减少超时的发生,可以采取以下措施:- 优化网络和服务器性能。- 合理设置超时时间。- 实现重试机制和熔断机制。- 加强监控和报警。- 优化代码和数据库查询。- 提高系统的弹性和容错能力。

2024-09-24 05:00:00 1107

原创 分布式环境中,接口超时重试带来的的幂等问题如何解决?

处理接口超时问题需要综合考虑多个方面,包括设置合理的超时时间、实现重试机制、引入熔断器、加强监控和报警、记录详细的日志、实施限流和降级策略、采用异步处理方式、优化代码和逻辑、合理管理资源以及使用缓存和负载均衡等。通过这些措施,可以有效提升系统的稳定性和可靠性。同时,确保操作的幂等性是处理重试问题的关键,可以避免因重试导致的数据不一致。

2024-09-24 05:00:00 739

原创 如何让你提供的接口满足SLA?接口性能优化技巧必看篇

接口性能优化对于从事后端开发的同学来说,肯定再熟悉不过了,因为它是一个跟开发语言无关的公共问题。该问题说简单也简单,说复杂也复杂。导致接口性能问题的原因千奇百怪,不同的项目不同的接口,原因可能也不一样。本文我总结了一些行之有效的,优化接口性能的办法,给有需要的朋友一个参考。

2024-09-23 05:00:00 1153

原创 突发!!!集群逐步失去响应?怎么办?

虽然这是个较简单的问题,排查的时候也是需要一定的思路的,尤其是发生问题的时间点并往前追溯到第一个不同寻常的日志这个点,这个往往是我们破局的手段。GuavaCache虽然是个使用非常广泛的缓存工具,但不合理的配置依旧会导致灾难性的后果。

2024-09-23 03:30:00 964

原创 【实践】分布式环境下工作中10种常用的幂等性手段?

在分布式系统中,确保接口的幂等性是至关重要的,可以防止因网络问题或重复请求导致的数据不一致。常见的实现手段包括使用唯一请求标识、分布式锁、版本控制、消息队列去重、状态机、全局唯一ID、补偿机制、幂等性设计模式和数据库约束。这些方法能够有效保证操作的一致性和可靠性,适用于支付、订单处理、日志记录等多种场景。通过合理选择和应用这些技术,可以显著提升系统的稳定性和用户体验。

2024-09-22 04:00:00 823

原创 分布式锁的几种方案对比?你了解多少种呢?

如果你需要强一致性和高可靠性,可以选择 Zookeeper;如果需要高性能和低延迟,可以选择 Redis;如果已有数据库基础设施且对性能要求不高,可以选择数据库

2024-09-22 02:06:56 1440

原创 分布式环境中解决主从延时的一些思路

主从复制,是指建立一个和主数据库完全一样的数据库环境(称为从数据库),并将主库的操作行为进行复制的过程:将主数据库的DDL和DML的操作日志同步到从数据库上,然后在从数据库上对这些日志进行重新执行,来保证从数据库和主数据库的数据的一致性。但是由于分布式环境中网络等不稳定因素存在,主从延迟基本时长发生,如何破解呢?

2024-09-22 01:14:59 971

原创 大家都在用MySQL count(*) 统计总数,到底有什么问题?

在日常开发工作中,我经常会遇到需要统计总数的场景,比如:统计订单总数、统计用户总数等。一般我们会使用MySQL 的count函数进行统计,但是随着数据量逐渐增大,统计耗时也越来越长,最后竟然出现慢查询的情况,这究竟是什么原因呢?本篇文章带你一下学习一下。

2024-09-21 05:00:00 860

原创 如何保证高并发下接口的幂等性?

接口幂等性是指一个接口无论被调用一次还是多次,其结果都是一样的,不会因为重复调用而产生不同的副作用。这种特性对于保证系统的稳定性和数据一致性至关重要,尤其是在网络不稳定或请求可能重试的情况下。实现幂等性的常见方法包括使用唯一标识符、状态机、数据库约束等,确保同一操作不会被处理多次。通过设计幂等接口,可以大大减少因重复请求导致的数据错误和系统异常。

2024-09-21 05:00:00 617

原创 为什么一定要做代码Review?

代码评审(Code Review,简称CR)是软件开发过程中的一个关键环节,对于确保代码质量、提高团队协作效率和促进知识共享至关重要。通过多双眼睛审查代码,可以发现潜在的错误和缺陷,减少bug进入生产环境的机会。此外,代码评审确保代码符合团队的编码规范和最佳实践,保持代码风格的一致性。它还促进了团队成员之间的知识交流,帮助新成员更快地了解项目结构和业务逻辑。在代码合并到主分支之前,评审可以及早发现设计和实现上的问题,避免后期更复杂的修复工作。同时,代码评审增强了团队协作,团队成员可以在评审过程中相互学习!

2024-09-20 07:30:00 1580

原创 日常开发中,如何减少bug?如何写出健壮的代码呢?(数据库篇)

本文总结了数据库优化和常见问题的多个方面,包括避免慢查询、处理字段为空、支持表情字符、谨慎使用text字段、正确处理异常、配置事务回滚、确保事务在同一线程中执行、管理主从延迟、兼容新老数据、解决大分页问题以及批量处理大数据。通过这些措施,可以提高数据库性能和稳定性,减少潜在问题。

2024-09-20 07:00:00 739

原创 知道什么是热key吗?如何排查和处理?

热 key 问题就是突然有几十万的请求去访问 redis 上的某个特定 key,那么这样会造成流量过于集中,达到物理网卡上限,从而导致这台 redis 服务器直接宕机。

2024-09-19 01:35:23 649

原创 Redis大key有什么危害?如何排查和处理?

简单来说,如果一个 key 对应的 value 所占用的内存比较大,那这个 key 就可以看作是 bigkey。具体多大才算大呢?人认为:只有影响的查询效率的Key才叫BigKey!

2024-09-19 01:08:24 1287

原创 接口设计中的幂等性你还不知道吗?

幂等性(Idempotency)指的是一个操作可以被执行多次,而结果保持不变。换句话说,对于一个幂等操作,第一次执行和后续多次执行的结果是相同的。幂等性在系统设计中扮演着重要角色,它不仅提高了系统的可靠性和用户体验,还简化了错误处理流程。理解和正确实现幂等性可以使API更加健壮和易用。

2024-09-18 23:59:40 363

原创 接口幂等性和并发安全的区别?

幂等性:关注的是同一操作的多次调用结果是否一致。并发安全:关注的是在并发环境下操作的正确性和一致性。理解这两个概念有助于设计更健壮的系统和API。

2024-09-18 23:57:18 483

原创 Redis基础数据结构之 Sorted Set 有序集合 源码解读

Redis 的有序集合(Sorted Set)是一种数据结构,它可以存储唯一的字符串成员,并为每个成员关联一个分数(score),以此来对成员进行排序。有序集合结合了集合的唯一性和分数排序的功能,使其非常适合需要按分数排序的应用场景。在Redis内部,有序集合通常使用跳跃表(skiplist)来实现,这使得插入、删除和查找操作的时间复杂度接近O(log N)。跳跃表的使用使得有序集合在处理大量数据时依然能够保持高效的性能。

2024-09-17 18:56:16 1111

原创 Redis基础数据结构之 ziplist 压缩列表 源码解读

Ziplist在存储小数据集时非常高效,但由于其紧凑存储的特性,在进行插入、删除和更新操作时可能会涉及到内存的重新分配和复制。因此,Ziplist最适合用于内存敏感的应用场景,特别是当数据集较小且操作以读取为主时。对于大型数据集或频繁的写操作,Redis可能会选择其他更适合的数据结构。

2024-09-17 06:00:00 962

原创 Redis基础数据结构之 quicklist 和 listpack 源码解读

Quicklist 是 Redis 3.2 引入的一种新的数据结构,旨在优化列表类型的存储。Quicklist 是一种链表结构,其中每个节点都是一个ziplist。这样做的目的是结合ziplist的优点(内存效率)和传统链表的优点(更好的插入和删除性能)。在Redis 7.0版本之前,quicklist是由双向链表和压缩列表构成的。然而,在Redis 7.0版本中,quicklist的底层实现由双向链表和压缩列表变为了由双向链表和listpack构成的结构。

2024-09-16 05:00:00 2246

原创 RedLock到底要不要用?看完别再问了

RedLock方案相比普通的Redis分布式锁方案可靠性确实大大提升。但是,任何事情都具有两面性,因为我们的业务一般只需要一个Redis Cluster,或者一个Sentinel,但是这两者都不能承载RedLock的落地。如果你想要使用RedLock方案,还需要专门搭建一套环境。所以,如果不是对分布式锁可靠性有极高的要求(比如金融场景),不太建议使用RedLock方案。当然,作为基于Redis最牛的分布式锁方案,你依然必须掌握的非常好,以便在有需要时(比如面试)能应付自如。

2024-09-16 04:00:00 811

空空如也

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

TA关注的人

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