自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(757)
  • 资源 (1)
  • 收藏
  • 关注

原创 分布式锁的实现方式

这里推荐一个Apache的开源库Curator,它是一个ZooKeeper客户端,Curator提供的InterProcessMutex是分布式锁的实现,acquire方法用于获取锁,release方法用于释放锁。ZooKeeper是一个为分布式应用提供一致性服务的开源组件,它内部是一个分层的文件系统目录树结构,规定同一个目录下只能有一个唯一文件名。模拟秒杀服务,在其中配置了jedis线程池,在初始化的时候传给分布式锁,供其使用。缺点:因为需要频繁的创建和删除节点,性能上不如Redis方式。

2024-04-24 05:30:00 880

原创 抢优惠券活动使用redis分布式锁和mysql乐观锁 redis分布式锁优化

随着互联网的快速发展,商品秒杀的场景我们并不少见;秒杀是一种供不应求的,高并发的场景,它里面包含了很多技术点,掌握了其中的技术点,虽不一定能让你面试立马成功,但那也必是一个闪耀的点!假设我们现在有一个商城系统,里面上线了一个商品秒杀的模块,那么这个模块我们要怎么设计呢?秒杀模块又会有哪些不同的需求呢?

2024-04-23 05:30:00 686

原创 浅析HashMap底层原理

浅析HashMap底层原理HashMap底层原理HashMap底层是基于数组+链表+红黑树。默认初始容量为(数组长度为**16),默认负载系数为0.75(这个表示的意思是扩容机制当容量达到75%的时候自动进行扩容(扩大一倍,扩容也是采用位运算【因为用乘法会影响CPU的性能,计算机不支持乘法运算,最终都会转化为加法运算[01的方式]。】),当扩容的时候,会创建新的数组,以前存放在数组中的数据将会重新通过hashCode进行排序,类似于hashCode/16取模【其实使用的是位运算,位运算效率更高】得到

2024-04-22 05:30:00 493

原创 Kubernetes Pod OOMKilled诊断

Container Limit ReachedLimit Overcommit通过kubectl describe pod [name]可以查看pod死亡的具体原因。查看 的最近历史事件,并尝试找出触发 错误的原因,因为只有两个常见原因:

2024-04-21 05:30:00 774

原创 超快速定位OOM

想主动dump出JVM的内存,有挺多方式,但不管哪种方式,主动dump内存会引发STW,请择时操作。即通过arthas提供的命令heapdump主动dump出JVM的内存,这个操作会引发FGC,背后是STW,操作时请选择好时机,不然老板可能提刀来见。堆内存不要设置的特别大,因为你设置的特别大,发生OOM时生成的dump文件就特别大,不好分析。最好是自己也去写一份与我提供的不同的,加深理解,加深印象。调优参数务必加上下面两个参数,发生OOM让JVM自动dump出内存,方便后续分析问题解决问题。

2024-04-20 05:30:00 534

原创 什么是OOM?如何快速定位并解决OOM?

解决OOM问题通常需要综合考虑应用程序本身的逻辑、资源管理、内存配置和代码优化等方面。定位和解决OOM问题需要仔细分析和排查,可以结合监控工具、堆转储文件和内存分析工具等辅助工具来帮助诊断和解决问题。OOM(Out of Memory)是指在计算机系统中,当可用内存耗尽时,无法满足程序或进程的内存需求,导致系统无法分配更多内存资源的情况。

2024-04-19 05:30:00 318

原创 Java ConcurrentModificationException 异常分析与解决方案

只要抛出出现异常,可以肯定的是代码一定有错误的地方。先来看看都有哪些情况会出现ConcurrentModificationException异常,下面以ArrayList remove 操作进行举例:使用的数据集合:异常信息如下:ItrcheckForComodificationUnknownSourceatjavautilAbstractList。

2024-04-18 05:30:00 678

原创 供应链复杂业务实时数仓建设之路

供应链业务是纷繁复杂的,我们既有 JIT 的现货模式中间夹着这大量的仓库作业环节,又有到仓的寄售,品牌业务,有非常复杂的逆向链路。在这么复杂的业务背后,我们需要精细化关注人货场车的效率和成本,每一单的及时履约情况,要做到这一点我们需要各粒度和维度的数据来支撑我们的精细化管理。

2024-04-14 05:00:00 1129

原创 大数据之ClickHouse

首先,MergeTree的分区目录并不是在数据表被创建之后就存在的,而是在数据写入过程中被创建的,也就是说,如果一张数据表没有任何数据,那么也不会有任何分区目录存在。MergeTree按照index_granularity的间隔粒度,将一段完整的数据划分成了多个小的间隔数据段,一个具体的数据段即是一个MarkRange。通过与start及end对应的索引编号的取值,即能够得到它所对应的数值区间。MergeTree数据分区的规则由分区ID决定,而具体到每个数据分区所对应的ID,则是由分区键的取值决定的。

2024-04-13 05:00:00 575

原创 程序员的心智与成长

程序员的心智与成长工作思考有效控制情绪,在沟通时使用适当的表情包以传达善意。无论线上还是线下,都应避免争吵。只有和气相处,我们才能推动工作的进展。在讨论具体问题之前,先进行一些预备性的交流。情绪应放在第一位,工作讨论放在第二位。如果对方情绪不好,最好选择另一个时间再进行讨论。在与他人交流时要保持初学者的态度和需求,不要用技术去怼人。进入新团队先提升自己在团队的业务能力,对整个系统有足够的了解,不要怕问问题和学习。不要新入职就想毁天灭地,指手画脚 ”这里的设计不合理,那里有性能瓶颈“。在各个事情

2024-04-12 05:00:00 922

原创 集群 CPU 利用率均值达 45% ,揭秘小红书规模化混部技术实践

在小红书近一年多的混部技术探索中,我们在资源效能提升方面积累了较为丰富的落地经验,并取得了不错的收益。随着公司业务规模逐步增长,场景愈发复杂,我们将会面临诸多新的技术挑战。展望未来,我们的目标是建设面向混合云架构的统一资源调度能力混合工作负载调度能力支持:为了满足小红书所有业务场景的资源调度功能、性能需求,重点发展任务型工作(包括大数据、AI等 )的负载调度能力建设。资源效能进一步提升:面向混合云架构,我们将推进更大规模的资源合池,推动 Quota 化资源交付。

2024-04-10 05:00:00 645

原创 定时任务原理方案综述

定时任务作为业务场景中不可或缺的一种通用能力,运用适合的定时任务能够快速解决业务问题,同时又能避免过度设计带来的资源浪费。本文旨在梳理目前定时任务的主流方案设计和原理,希望在读者在技术选型和方案重构时有所帮助,唯有落地推动业务的技术才有价值。技术永远不停变革,思考不能止步不前。转载:https://juejin.cn/post/7242333187250192443。

2024-04-09 05:00:00 674

原创 什么是冒烟测试

回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误,回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试,在渐进和快速迭代开发中,新版本的连续发布使回归测试进行的更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是非常有意义的。

2024-04-08 07:56:26 652

原创 提升提测质量之研测共建

质量门禁的作用,就是从需求阶段开始,尽早的介入需求设计、产品设计和技术方案设计等环节,通过评审、提问等方式,尽可能多的发现存在的问题,通过制定科学合理符合项目实际情况的准入准出标准,来保证每个环节流转到下一环节的输出结果,质量更高。自动化测试用例建设是软件测试过程中的一个重要环节,帮助测试团队提高测试效率、减少人工测试的工作量,以及确保软件质量。测试人员,在项目结束后,要完善响应的case,通过自动化case的不断积累,来打破时间约束带来的问题。通过积累的度量数据,提供分析,改进过程的数据依据。

2024-04-05 05:00:00 1013

原创 Map存入的数据丢失类型任意

解决的思路很简单,就是确保无论map中提取到的对象是int还是long或其他,都要统一转换为我们想要的。,在做处理的时候就是**将这个对象也先序列化,再转换,**这样就可以确保数据类型不会丢失,达到预期。测试发现,BUG成功复现了,数据类型丢失了,Long类型被降级为INT。准备一个Map ,并将Long对象存入。取出该Long对象,并用instance of 判断该对象类型。经过测试发现,正常的存取并不会出现该问题是正常的情况。

2024-04-04 05:00:00 923

原创 关于java中String的长度限制详解

字符串有长度限制,在编译期,要求字符串常量池中的常量不能超过65535,并且在javac执行过程中控制了最大值为65534。在运行期,长度不能超过Int的范围,否则会抛异常。

2024-04-03 05:00:00 630

原创 Mysql中的 IFNULL 函数的详解

如:ifnull( dga.code ,dr.code) agentCode, 含义说明:总代code,经销商code 作为 别名agentCode的值。使用场景:当经销商上级有总代理时 使用总代理的code,否则使用经销商的code的场景。

2024-04-02 05:00:00 1001

原创 BeanUtil.copyProperties真的很慢吗?

CopyProperties()方法,主要通过以下步骤将source对象中与target对象同名属性写入target对象:获取目标对象类信息根据类信息从缓存中获取到该类的所有属性信息(内含readMethod和writeMethod)缓存中没有该类的信息则进行初始化遍历目标对象属性通过目标对象属性名+源对象类获取源对象属性信息类(内含readMethod和writeMethod)

2024-03-31 05:00:00 1065

原创 java获取Date类型的年份

在Java中,Date类是用于表示日期和时间的类。它提供了一些方法来获取和设置日期和时间的各个部分,比如年份、月份、日等。通过使用Date类的getYear()方法或使用Calendar类的get(Calendar.YEAR)方法,我们可以方便地获取一个Date对象的年份。在实际开发中,我们可以根据具体的需求选择合适的方法来获取年份。Start --> 创建一个Date对象创建一个Date对象 --> 调用getYear()方法获取年份调用getYear()方法获取年份 --> 输出年份。

2024-03-30 05:00:00 1726

原创 java获取指定年(月)的第一天(秒)和最后一天(秒)

【代码】java获取指定年(月)的第一天(秒)和最后一天(秒)

2024-03-29 05:00:00 133

原创 矢量(向量)数据库

Qdrant 是一个向量数据库,也是进行向量相似性搜索的工具。使用 Qdrant,您可以将嵌入或神经网络编码器转换为全面的应用程序,用于匹配、搜索、提出建议等任务。Pinecone 是一个托管的矢量数据库平台,专为应对与高维数据相关的独特挑战而构建。Pinecone 配备了尖端的索引和搜索功能,使数据工程师和数据科学家能够构建和实施大规模机器学习应用程序,以有效处理和分析高维数据。它允许您存储来自您喜欢的 ML 模型的数据对象和向量嵌入,并无缝扩展到数十亿个数据对象。

2024-03-28 05:00:00 1099

原创 听我的,日志还是得好好打!

摘要日志是一种标准化的日志文件,主要用于监控系统配置和进行离线日志分析。调用时间:记录了日志产生的具体时间。日志链路 id:包括traceId和rpcId,用于追踪请求的完整路径。线程名:记录了产生日志的线程名称。接口名:记录了被调用的接口名称。方法名:记录了被调用的方法名称。调用耗时:记录了方法调用的耗时。调用是否成功:记录了方法调用是否成功,通常用Y/N表示。错误码:如果方法调用失败,会记录相应的错误码。

2024-03-27 05:00:00 569

原创 服务端应用多级缓存架构方案

服务端应用多级缓存架构方案场景20w的QPS的场景下,服务端架构应如何设计?常规解决方案可使用分布式缓存来抗,比如redis集群,6主6从,主提供读写,从作为备,不提供读写服务。1台平均抗3w并发,还可以抗住,如果QPS达到100w,通过增加redis集群中的机器数量,可以扩展缓存的容量和并发读写能力。同时,缓存数据对于应用来讲都是共享的,主从架构,实现高可用。如何解决缓存热点(热key)问题但是如果出现缓存热点,比如10w流量来自同一个key,打到同一个redis实例,那么就有可能出

2024-03-26 05:00:00 335

原创 我重新理解了《重构》

代码的整洁度与代码质量成正比,整洁的代码质量更高,也更利于后期维护。重构本身不是目的,目的是让代码更整洁、可读性更高、易于维护,提升开发效率。因此,比起如何进行后续重构,在开发过程中意识到什么样的代码是好代码,在不额外增加太多研发成本的前提下,有意识地保持代码整洁更加重要。即使是在日常开发过程中小的优化,哪怕只有很少的代码改动,只要能让代码更整洁,仍然值得去做。

2024-03-25 05:00:00 721

原创 使用双异步后,从 191s 优化到 2s

通过POI读取需要导入的Excel;以文件名为表名、列头为列名、并将数据拼接成sql;通过JDBC或mybatis插入数据库;访问之后,感觉没什么反应,实际上已经在读取 + 入库了,只是比较慢而已。读取一个10万行的Excel,居然用了191s,我还以为它卡死了呢!

2024-03-24 05:00:00 818

原创 工具类|将Entity对象转为Vo/Bo对象,并指定字段绑定

实体类:People和Student,Student的三个字段和People意义一样,但是字段名不完全一样,要实现对象拷贝可使用如下工具类,用到了反射。

2024-03-23 05:00:00 393

原创 为啥不建议用BeanUtils.copyProperties拷贝数据

在业务开发时,我们可能会有部分字段拷贝的需求,被拷贝的数据里面如果某些字段有null值存在,但是对应的需要被拷贝过去的数据的相同字段的值并不为null,如果直接使用 BeanUtils.copyProperties 进行数据拷贝,就会出现被拷贝数据的null值覆盖拷贝目标数据的字段,导致原有的数据失效。上面案例中,在拷贝源和拷贝目标中各自存在一个内部类InnerClass,虽然这个内部类属性也相同,类名也相同,但是在不同的类中,因此Spring会认为属性不同,因此不会拷贝数据。

2024-03-22 05:00:00 566

原创 玩转MapStruct,学习就是了

MapStruct是一款基于Java注解的对象属性映射工具,使用的时候我们只要在接口中定义好对象属性映射规则,它就能自动生成映射实现类,不使用反射,性能优秀,能实现各种复杂映射。MapStruct也支持在映射前后做一些自定义操作,类似Spring的AOP中的切面。由于此时我们需要创建自定义处理方法,创建一个抽象类,通过注解自定义映射前操作,通过注解自定义映射后操作;//映射前当price

2024-03-21 05:00:00 648

原创 90%的程序员在编写登录接口时犯了这个致命错误!

在众多程序猿中,存在一个令人头痛的问题:为什么90%的人编写的登录接口都存在安全风险?这个问题很值得探讨。或许是因为这些开发者过于自信,认为自己的代码无懈可击,或者是因为他们缺乏安全意识,未意识到安全问题的重要性。然而,这种做法是非常危险的,因为一个不安全的登录接口可能会威胁用户的安全和隐私。那么,为什么在编写登录接口时总容易出现安全漏洞呢?很可能是因为这些程序猿过于注重代码的功能性和实现细节,却忽视了安全问题的重要性,或者对安全措施缺乏足够的了解。

2024-03-20 07:53:18 802

原创 阿里二面:什么情况会发生Full GC?如何避免频繁Full GC?

Full GC(Full Garbage Collection)是Java虚拟机中进行垃圾回收的一种操作,它的目标是清理整个Java堆内存,包括年轻代(Young Generation)、年老代(Old Generation或Tenured Generation)、以及永久代(在Java 8及之前的版本中,而在Java 8及之后的版本中由Metaspace取代,所以这里可以理解为元空间Metaspace)。

2024-03-17 05:00:00 1798

原创 springboot自定义ClassLoader实现同一个jar支持多版本的使用场景

以上只是这一种场景的思考解决,在实际的项目中,有关该类问题jar包冲突导致的种种问题都可以使用该思想去解决,当然以上只是抛砖引玉的解决思路,在生产使用还建议结合项目实际情况结合适配器等设计模式进行封装和优化以完成生产力使用;

2024-03-16 05:00:00 1002

原创 hbase和es的选取 hbase与es结合

HBase与ElasticSearch是现代应用在处理海量数据的技术架构会经常被使用的两款产品,其中HBase是一个分布式KV系统,具有灵活Schema、水平扩展、低成本、高并发的优势,但在复杂查询、分析能力方面相对比较弱,特别适合海量半结构化、结构化数据的低成本存储和在线高并发查询。而ElasticSearch是一个分布式搜索引擎,具有灵活Schema、水平扩展、检索快的优势,但在成本、查询并发、一致性方面相对不足,特别适合海量半结构化、结构化数据的复杂查询和全文检索。

2024-03-15 05:00:00 654

原创 记一次生产慢sql索引优化及思考

将以上的索引数据映射成常见的用户表user的索引为例,上面的聚簇索引就是以id字段为主键的索引,name字段为非聚簇索引,还有age等其他表字段是非索引字段,示例sql:select * from user where id = 1;这条 SQL 语句就不需要回表。原因是根据主键的查询方式,则只需要搜索 id聚簇索引这棵 B+ 树,就可以查到对应的数据。但当我们使用非聚簇索引 name 这个索引来查询 name = b 的记录时就要用到回表。

2024-03-14 05:00:00 980

原创 CompletableFuture在异常处理方面的一些常见问题和解决方案,建议牢记!

CompletableFuture是Java 8引入的一个类,位于包下。它提供了一种方便的方式来进行异步编程,尤其是在处理一系列并发任务时非常有用。CompletableFuture支持链式调用和组合多个异步任务。我们可以通过调用各种方法来注册回调函数,在任务完成时获取结果或处理异常。CompletableFuture提供了强大的功能来处理异步编程中的结果和异常。然而,在处理异常时,我们需要注意一些常见的陷阱。这包括异常被吞噬、异常处理丢失、堆栈追踪丢失和异常处理过于冗长。

2024-03-13 05:00:00 1067

原创 post为什么会发送两次请求?

同源策略是一个重要的安全策略,它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。如果两个 URL 的协议、主机和端口都相同,我们就称这两个 URL 同源。协议:协议是定义了数据如何在计算机内和之间进行交换的规则的系统,例如 HTTP、HTTPS。主机:是已连接到一个计算机网络的一台电子计算机或其他设备。网络主机可以向网络上的用户或其他节点提供信息资源、服务和应用。使用 TCP/IP 协议族参与网络的计算机也可称为 IP 主机。

2024-03-12 05:00:00 849

原创 集合拆分Lists.partition的使用

使用场景:list集合中数据量过大,可根据需要进行拆分,进而通过循环或者多线程来处理数据。Lists.partition方法,根据传入的size,对list进行拆分。

2024-03-08 05:00:00 356

原创 史上最全ThreadLocal 详解

ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。ThreadLocal 提供了线程本地的实例。它与普通变量的区别在于,每个使用该变量的线程都会初始化一个完全独立的实例副本。

2024-03-07 05:00:00 1661 1

原创 数组转成set的底层实现

要将Java数组转换为Set集合,可以使用Java集合框架中的HashSet或TreeSet。HashSet是基于哈希表的实现,不保证元素的顺序,而TreeSet是基于红黑树的实现,可以将元素按照一定顺序进行排序。

2024-03-06 05:00:00 422

原创 为什么不要在foreach循环里进行元素的remove/add操作?

此问题出现的原因就是调用了list的remove(Object)方法而不是采用迭代器itr.remove()方法进行元素移除。遍历集合时需要对集合进行增删操作,统一采用迭代器的方式进行。所有的元素操作都是通过迭代器进行的,因此要进行并发操作时对迭代器加锁是比较合适的一种手段。

2024-03-05 05:00:00 1073

原创 谨用ArrayList中的subList方法

在 subList 场景中,高度注意对原集合元素的增加或删除,均会导致子列表的遍历、增加、删除产生 ConcurrentModificationException 异常。SubList并没有重新创建一个List,而是直接引用原有的List,只不过对原来List做截取而已。subList返回的集合在调用add/remove方法时,会将modCount进行更新。注:更新操作只更新原集合,因为subList不会重新创建新集合。调用subList方法返回的集合保存了ArrayList的modCount。

2024-03-04 05:00:00 1080

day01_项目介绍和工程搭建.md

day01_项目介绍和工程搭建.md

2021-09-04

空空如也

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

TA关注的人

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