编程学习
文章平均质量分 78
jayues_lies
工作日常技术学习、积累、总结
展开
-
Git-flow分支管理与Aone-flow分支管理对比
比如上线后的 Hotfix,正常的处理方法应该是,创建一条新的发布分支,对应线上环境(相当于 Hotfix 分支),同时为这个分支创建临时流水线,以保障必要的发布前检查和冒烟测试能够自动执行。但其实还有一种简便方法是,将线上正式环境对应的发布分支上关联的特性分支全部清退掉,在这个发布分支上直接进行修改,改完利用现成的流水线自动发布。每当开始一件新的工作项(比如新的功能或是待解决的问题)的时候,从代表最新已发布版本的主干上创建一个通常以feature/前缀命名的特性分支,然后在这个分支上提交代码修改。原创 2024-05-04 05:30:00 · 509 阅读 · 0 评论 -
git分支管理
Aone Flow 采取了另外一个思路。只存在一个 Master 分支,当要开发时,就拉出新的 Feature 分支,可以同时存在多个 Feature,当达到发布计划时,就把需要合并的多条 Feature 分支合并起来,通过后再往 Master 上合并,并且tag下来。原创 2024-05-03 05:30:00 · 476 阅读 · 0 评论 -
ACP原理
ACP原理什么是ACP原理?CAP原理是分布式系统中的核心概念,它由三个基本要素组成:一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)。CAP原理指出,在一个分布式系统中,无法同时满足这三个要求,只能在它们之间进行权衡取舍。C: 一致性(Consistency)是指在系统中的所有副本在任何时刻都具有相同的数据,即当系统中一个节点进行数据更新的同时,其他节点能够读取到更新到的最新数据;A:可用性(Availability)原创 2024-05-02 05:30:00 · 359 阅读 · 0 评论 -
RocketMQ延时消息实现
可以看到,延迟消息成功被消息,并且我们注意到,消息被Consumer消费的时间【Thu Feb 24 11:30:09 CST 2022】 - 消息存储时间【Thu Feb 24 11:29:59 CST 2022】 = 10s,发送消息的时候,指定的延迟等级也是10s,也就是消息的消费比存储时间晚10秒。由于消息一旦存储到ConsumeQueue中,消费者就能消费到,而延迟消息不能被立即消费,所以这里将Topic的名称修改为SCHEDULE_TOPIC_XXXX,并根据延迟级别确定要投递到哪个队列下。原创 2024-05-01 05:30:00 · 631 阅读 · 0 评论 -
Java事务的传播机制详解
如果当前存在事务,那么该方法将会在该事务中运行;如果当前没有事务,那么它会启动一个新的事务。NESTED传播行为在一个嵌套事务中执行,如果一个事务正在运行,那么它将在一个嵌套事务中执行。如果有一个事务正在运行,那么这个事务将会被挂起。NOT_SUPPORTED传播行为总是以非事务方式执行,如果有一个事务正在运行,那么这个事务将会被挂起。MANDATORY传播行为要求方法必须在一个现有的事务中执行,如果没有事务就抛出异常。NEVER传播行为要求方法以非事务方式执行,如果有一个事务正在运行,将会抛出异常。原创 2024-04-30 05:30:00 · 577 阅读 · 0 评论 -
什么是跨域? 出现原因及解决方法
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。XMLHttpRequest:Ajax的核心对象CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。浏览器端:不用考虑目前,所有浏览器都支持该功能(IE10以下不行)。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。原创 2024-04-29 05:30:00 · 724 阅读 · 0 评论 -
Java动态代理的实现方式
在 Spring AOP中,手动配置 强制使用 Cglib方式。使用条件:被代理类无接口且不能使用final修饰,代理对象是基于被代理对象动态生成的子对象。(1)使用条件:要求被代理类有接口,代理对象是基于接口动态生成的实现类。在Spring AOP中,目标类有接口的情况下,默认采用该代理技术。原创 2024-04-28 05:30:00 · 587 阅读 · 0 评论 -
java项目启动时加载数据
实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。为了解决这样的问题,spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。创建实现接口 CommandLineRunner 的类,通过@Component注解,就可以实现启动时加载数据项。如果需要在springapplication启动之后运行一些特定的代码,可以实现 ApplicationRunner 或CommandLineRunner 接口。原创 2024-04-27 14:25:31 · 226 阅读 · 1 评论 -
Mysql当前列的值等于上一行的值累加前一列的值
前言:公司项目需要做数据可视化,统计一些数据,比如用户增长量,按每天分组,还要计算每天累加的用户量,一开始也是想了很久,不知道怎么做,后面 百度的,找打了一个解决办法。(SELECT @total := 0) AS T1也就算是新增的一列值,然后总计的时候,就是当前值加上total1的值大概就是这样子。原创 2024-04-26 05:30:00 · 229 阅读 · 0 评论 -
分布式锁的实现方式
这里推荐一个Apache的开源库Curator,它是一个ZooKeeper客户端,Curator提供的InterProcessMutex是分布式锁的实现,acquire方法用于获取锁,release方法用于释放锁。ZooKeeper是一个为分布式应用提供一致性服务的开源组件,它内部是一个分层的文件系统目录树结构,规定同一个目录下只能有一个唯一文件名。模拟秒杀服务,在其中配置了jedis线程池,在初始化的时候传给分布式锁,供其使用。缺点:因为需要频繁的创建和删除节点,性能上不如Redis方式。原创 2024-04-24 05:30:00 · 990 阅读 · 0 评论 -
抢优惠券活动使用redis分布式锁和mysql乐观锁 redis分布式锁优化
随着互联网的快速发展,商品秒杀的场景我们并不少见;秒杀是一种供不应求的,高并发的场景,它里面包含了很多技术点,掌握了其中的技术点,虽不一定能让你面试立马成功,但那也必是一个闪耀的点!假设我们现在有一个商城系统,里面上线了一个商品秒杀的模块,那么这个模块我们要怎么设计呢?秒杀模块又会有哪些不同的需求呢?原创 2024-04-23 05:30:00 · 697 阅读 · 0 评论 -
浅析HashMap底层原理
浅析HashMap底层原理HashMap底层原理HashMap底层是基于数组+链表+红黑树。默认初始容量为(数组长度为**16),默认负载系数为0.75(这个表示的意思是扩容机制当容量达到75%的时候自动进行扩容(扩大一倍,扩容也是采用位运算【因为用乘法会影响CPU的性能,计算机不支持乘法运算,最终都会转化为加法运算[01的方式]。】),当扩容的时候,会创建新的数组,以前存放在数组中的数据将会重新通过hashCode进行排序,类似于hashCode/16取模【其实使用的是位运算,位运算效率更高】得到原创 2024-04-22 05:30:00 · 501 阅读 · 0 评论 -
Kubernetes Pod OOMKilled诊断
Container Limit ReachedLimit Overcommit通过kubectl describe pod [name]可以查看pod死亡的具体原因。查看 的最近历史事件,并尝试找出触发 错误的原因,因为只有两个常见原因:原创 2024-04-21 05:30:00 · 786 阅读 · 0 评论 -
超快速定位OOM
想主动dump出JVM的内存,有挺多方式,但不管哪种方式,主动dump内存会引发STW,请择时操作。即通过arthas提供的命令heapdump主动dump出JVM的内存,这个操作会引发FGC,背后是STW,操作时请选择好时机,不然老板可能提刀来见。堆内存不要设置的特别大,因为你设置的特别大,发生OOM时生成的dump文件就特别大,不好分析。最好是自己也去写一份与我提供的不同的,加深理解,加深印象。调优参数务必加上下面两个参数,发生OOM让JVM自动dump出内存,方便后续分析问题解决问题。原创 2024-04-20 05:30:00 · 546 阅读 · 0 评论 -
什么是OOM?如何快速定位并解决OOM?
解决OOM问题通常需要综合考虑应用程序本身的逻辑、资源管理、内存配置和代码优化等方面。定位和解决OOM问题需要仔细分析和排查,可以结合监控工具、堆转储文件和内存分析工具等辅助工具来帮助诊断和解决问题。OOM(Out of Memory)是指在计算机系统中,当可用内存耗尽时,无法满足程序或进程的内存需求,导致系统无法分配更多内存资源的情况。原创 2024-04-19 05:30:00 · 341 阅读 · 0 评论 -
Java ConcurrentModificationException 异常分析与解决方案
只要抛出出现异常,可以肯定的是代码一定有错误的地方。先来看看都有哪些情况会出现ConcurrentModificationException异常,下面以ArrayList remove 操作进行举例:使用的数据集合:异常信息如下:ItrcheckForComodificationUnknownSourceatjavautilAbstractList。原创 2024-04-18 05:30:00 · 689 阅读 · 0 评论 -
供应链复杂业务实时数仓建设之路
供应链业务是纷繁复杂的,我们既有 JIT 的现货模式中间夹着这大量的仓库作业环节,又有到仓的寄售,品牌业务,有非常复杂的逆向链路。在这么复杂的业务背后,我们需要精细化关注人货场车的效率和成本,每一单的及时履约情况,要做到这一点我们需要各粒度和维度的数据来支撑我们的精细化管理。原创 2024-04-14 05:00:00 · 1284 阅读 · 0 评论 -
大数据之ClickHouse
首先,MergeTree的分区目录并不是在数据表被创建之后就存在的,而是在数据写入过程中被创建的,也就是说,如果一张数据表没有任何数据,那么也不会有任何分区目录存在。MergeTree按照index_granularity的间隔粒度,将一段完整的数据划分成了多个小的间隔数据段,一个具体的数据段即是一个MarkRange。通过与start及end对应的索引编号的取值,即能够得到它所对应的数值区间。MergeTree数据分区的规则由分区ID决定,而具体到每个数据分区所对应的ID,则是由分区键的取值决定的。原创 2024-04-13 05:00:00 · 594 阅读 · 0 评论 -
程序员的心智与成长
程序员的心智与成长工作思考有效控制情绪,在沟通时使用适当的表情包以传达善意。无论线上还是线下,都应避免争吵。只有和气相处,我们才能推动工作的进展。在讨论具体问题之前,先进行一些预备性的交流。情绪应放在第一位,工作讨论放在第二位。如果对方情绪不好,最好选择另一个时间再进行讨论。在与他人交流时要保持初学者的态度和需求,不要用技术去怼人。进入新团队先提升自己在团队的业务能力,对整个系统有足够的了解,不要怕问问题和学习。不要新入职就想毁天灭地,指手画脚 ”这里的设计不合理,那里有性能瓶颈“。在各个事情原创 2024-04-12 05:00:00 · 937 阅读 · 0 评论 -
集群 CPU 利用率均值达 45% ,揭秘小红书规模化混部技术实践
在小红书近一年多的混部技术探索中,我们在资源效能提升方面积累了较为丰富的落地经验,并取得了不错的收益。随着公司业务规模逐步增长,场景愈发复杂,我们将会面临诸多新的技术挑战。展望未来,我们的目标是建设面向混合云架构的统一资源调度能力混合工作负载调度能力支持:为了满足小红书所有业务场景的资源调度功能、性能需求,重点发展任务型工作(包括大数据、AI等 )的负载调度能力建设。资源效能进一步提升:面向混合云架构,我们将推进更大规模的资源合池,推动 Quota 化资源交付。原创 2024-04-10 05:00:00 · 658 阅读 · 0 评论 -
定时任务原理方案综述
定时任务作为业务场景中不可或缺的一种通用能力,运用适合的定时任务能够快速解决业务问题,同时又能避免过度设计带来的资源浪费。本文旨在梳理目前定时任务的主流方案设计和原理,希望在读者在技术选型和方案重构时有所帮助,唯有落地推动业务的技术才有价值。技术永远不停变革,思考不能止步不前。转载:https://juejin.cn/post/7242333187250192443。原创 2024-04-09 05:00:00 · 684 阅读 · 0 评论 -
什么是冒烟测试
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误,回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试,在渐进和快速迭代开发中,新版本的连续发布使回归测试进行的更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是非常有意义的。原创 2024-04-08 07:56:26 · 658 阅读 · 0 评论 -
提升提测质量之研测共建
质量门禁的作用,就是从需求阶段开始,尽早的介入需求设计、产品设计和技术方案设计等环节,通过评审、提问等方式,尽可能多的发现存在的问题,通过制定科学合理符合项目实际情况的准入准出标准,来保证每个环节流转到下一环节的输出结果,质量更高。自动化测试用例建设是软件测试过程中的一个重要环节,帮助测试团队提高测试效率、减少人工测试的工作量,以及确保软件质量。测试人员,在项目结束后,要完善响应的case,通过自动化case的不断积累,来打破时间约束带来的问题。通过积累的度量数据,提供分析,改进过程的数据依据。原创 2024-04-05 05:00:00 · 1026 阅读 · 0 评论 -
Map存入的数据丢失类型任意
解决的思路很简单,就是确保无论map中提取到的对象是int还是long或其他,都要统一转换为我们想要的。,在做处理的时候就是**将这个对象也先序列化,再转换,**这样就可以确保数据类型不会丢失,达到预期。测试发现,BUG成功复现了,数据类型丢失了,Long类型被降级为INT。准备一个Map ,并将Long对象存入。取出该Long对象,并用instance of 判断该对象类型。经过测试发现,正常的存取并不会出现该问题是正常的情况。原创 2024-04-04 05:00:00 · 932 阅读 · 0 评论 -
关于java中String的长度限制详解
字符串有长度限制,在编译期,要求字符串常量池中的常量不能超过65535,并且在javac执行过程中控制了最大值为65534。在运行期,长度不能超过Int的范围,否则会抛异常。原创 2024-04-03 05:00:00 · 655 阅读 · 0 评论 -
Mysql中的 IFNULL 函数的详解
如:ifnull( dga.code ,dr.code) agentCode, 含义说明:总代code,经销商code 作为 别名agentCode的值。使用场景:当经销商上级有总代理时 使用总代理的code,否则使用经销商的code的场景。原创 2024-04-02 05:00:00 · 1045 阅读 · 0 评论 -
BeanUtil.copyProperties真的很慢吗?
CopyProperties()方法,主要通过以下步骤将source对象中与target对象同名属性写入target对象:获取目标对象类信息根据类信息从缓存中获取到该类的所有属性信息(内含readMethod和writeMethod)缓存中没有该类的信息则进行初始化遍历目标对象属性通过目标对象属性名+源对象类获取源对象属性信息类(内含readMethod和writeMethod)原创 2024-03-31 05:00:00 · 1082 阅读 · 0 评论 -
java获取Date类型的年份
在Java中,Date类是用于表示日期和时间的类。它提供了一些方法来获取和设置日期和时间的各个部分,比如年份、月份、日等。通过使用Date类的getYear()方法或使用Calendar类的get(Calendar.YEAR)方法,我们可以方便地获取一个Date对象的年份。在实际开发中,我们可以根据具体的需求选择合适的方法来获取年份。Start --> 创建一个Date对象创建一个Date对象 --> 调用getYear()方法获取年份调用getYear()方法获取年份 --> 输出年份。原创 2024-03-30 05:00:00 · 1783 阅读 · 0 评论 -
java获取指定年(月)的第一天(秒)和最后一天(秒)
【代码】java获取指定年(月)的第一天(秒)和最后一天(秒)原创 2024-03-29 05:00:00 · 149 阅读 · 0 评论 -
矢量(向量)数据库
Qdrant 是一个向量数据库,也是进行向量相似性搜索的工具。使用 Qdrant,您可以将嵌入或神经网络编码器转换为全面的应用程序,用于匹配、搜索、提出建议等任务。Pinecone 是一个托管的矢量数据库平台,专为应对与高维数据相关的独特挑战而构建。Pinecone 配备了尖端的索引和搜索功能,使数据工程师和数据科学家能够构建和实施大规模机器学习应用程序,以有效处理和分析高维数据。它允许您存储来自您喜欢的 ML 模型的数据对象和向量嵌入,并无缝扩展到数十亿个数据对象。原创 2024-03-28 05:00:00 · 1111 阅读 · 0 评论 -
听我的,日志还是得好好打!
摘要日志是一种标准化的日志文件,主要用于监控系统配置和进行离线日志分析。调用时间:记录了日志产生的具体时间。日志链路 id:包括traceId和rpcId,用于追踪请求的完整路径。线程名:记录了产生日志的线程名称。接口名:记录了被调用的接口名称。方法名:记录了被调用的方法名称。调用耗时:记录了方法调用的耗时。调用是否成功:记录了方法调用是否成功,通常用Y/N表示。错误码:如果方法调用失败,会记录相应的错误码。原创 2024-03-27 05:00:00 · 576 阅读 · 0 评论 -
服务端应用多级缓存架构方案
服务端应用多级缓存架构方案场景20w的QPS的场景下,服务端架构应如何设计?常规解决方案可使用分布式缓存来抗,比如redis集群,6主6从,主提供读写,从作为备,不提供读写服务。1台平均抗3w并发,还可以抗住,如果QPS达到100w,通过增加redis集群中的机器数量,可以扩展缓存的容量和并发读写能力。同时,缓存数据对于应用来讲都是共享的,主从架构,实现高可用。如何解决缓存热点(热key)问题但是如果出现缓存热点,比如10w流量来自同一个key,打到同一个redis实例,那么就有可能出原创 2024-03-26 05:00:00 · 341 阅读 · 0 评论 -
我重新理解了《重构》
代码的整洁度与代码质量成正比,整洁的代码质量更高,也更利于后期维护。重构本身不是目的,目的是让代码更整洁、可读性更高、易于维护,提升开发效率。因此,比起如何进行后续重构,在开发过程中意识到什么样的代码是好代码,在不额外增加太多研发成本的前提下,有意识地保持代码整洁更加重要。即使是在日常开发过程中小的优化,哪怕只有很少的代码改动,只要能让代码更整洁,仍然值得去做。原创 2024-03-25 05:00:00 · 727 阅读 · 0 评论 -
使用双异步后,从 191s 优化到 2s
通过POI读取需要导入的Excel;以文件名为表名、列头为列名、并将数据拼接成sql;通过JDBC或mybatis插入数据库;访问之后,感觉没什么反应,实际上已经在读取 + 入库了,只是比较慢而已。读取一个10万行的Excel,居然用了191s,我还以为它卡死了呢!原创 2024-03-24 05:00:00 · 829 阅读 · 0 评论 -
工具类|将Entity对象转为Vo/Bo对象,并指定字段绑定
实体类:People和Student,Student的三个字段和People意义一样,但是字段名不完全一样,要实现对象拷贝可使用如下工具类,用到了反射。原创 2024-03-23 05:00:00 · 409 阅读 · 0 评论 -
为啥不建议用BeanUtils.copyProperties拷贝数据
在业务开发时,我们可能会有部分字段拷贝的需求,被拷贝的数据里面如果某些字段有null值存在,但是对应的需要被拷贝过去的数据的相同字段的值并不为null,如果直接使用 BeanUtils.copyProperties 进行数据拷贝,就会出现被拷贝数据的null值覆盖拷贝目标数据的字段,导致原有的数据失效。上面案例中,在拷贝源和拷贝目标中各自存在一个内部类InnerClass,虽然这个内部类属性也相同,类名也相同,但是在不同的类中,因此Spring会认为属性不同,因此不会拷贝数据。原创 2024-03-22 05:00:00 · 585 阅读 · 0 评论 -
玩转MapStruct,学习就是了
MapStruct是一款基于Java注解的对象属性映射工具,使用的时候我们只要在接口中定义好对象属性映射规则,它就能自动生成映射实现类,不使用反射,性能优秀,能实现各种复杂映射。MapStruct也支持在映射前后做一些自定义操作,类似Spring的AOP中的切面。由于此时我们需要创建自定义处理方法,创建一个抽象类,通过注解自定义映射前操作,通过注解自定义映射后操作;//映射前当price原创 2024-03-21 05:00:00 · 658 阅读 · 0 评论 -
90%的程序员在编写登录接口时犯了这个致命错误!
在众多程序猿中,存在一个令人头痛的问题:为什么90%的人编写的登录接口都存在安全风险?这个问题很值得探讨。或许是因为这些开发者过于自信,认为自己的代码无懈可击,或者是因为他们缺乏安全意识,未意识到安全问题的重要性。然而,这种做法是非常危险的,因为一个不安全的登录接口可能会威胁用户的安全和隐私。那么,为什么在编写登录接口时总容易出现安全漏洞呢?很可能是因为这些程序猿过于注重代码的功能性和实现细节,却忽视了安全问题的重要性,或者对安全措施缺乏足够的了解。原创 2024-03-20 07:53:18 · 807 阅读 · 0 评论 -
阿里二面:什么情况会发生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 · 1814 阅读 · 0 评论 -
springboot自定义ClassLoader实现同一个jar支持多版本的使用场景
以上只是这一种场景的思考解决,在实际的项目中,有关该类问题jar包冲突导致的种种问题都可以使用该思想去解决,当然以上只是抛砖引玉的解决思路,在生产使用还建议结合项目实际情况结合适配器等设计模式进行封装和优化以完成生产力使用;原创 2024-03-16 05:00:00 · 1016 阅读 · 0 评论