- 博客(123)
- 资源 (70)
- 问答 (1)
- 收藏
- 关注

原创 设计模式专栏-策略模式
1.模式定义:策略模式(Strategy),定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。2.应用场景1、策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。2、假如系统中有很多
2020-05-19 22:30:02
216

原创 java 通过反射破坏单例模式
单例模式真的能够实现实例的唯一性吗?答案是否定的,很多人都知道使用反射可以破坏单例模式,除了反射以外,使用序列化与反序列化也同样会破坏单例。直接上例子这里通过双重校验锁的方式编写一个单例模式public class Singleton implements Serializable { private static volatile Singleton instance...
2019-12-05 16:25:26
678

原创 红黑树左旋和右旋
红黑树的左旋操作假设待左旋的结构中,X为父节点,Y为孩子节点。左旋操作后,Y节点代替X节点的位置,X节点成为Y节点的左孩子,x节点的左孩子成为y节点的右孩子。红黑树的右旋操作。假设待右旋的结构中,y为父节点,x为孩子节点。右旋操作后,x节点代替y节点的位置,y节点成为x节点的右孩子,S节点的右孩子成为P节点的左孩子。...
2019-11-21 09:44:24
582
转载 一文搞懂业务架构、应用架构、技术架构、数据架构
业务架构、数据架构、应用架构和技术架构是企业架构中的四个主要架构,它们在关注的方面和功能上有所不同,但是它们是相互关联和相互支持的,共同构成了企业的总体架构。在企业中台建设中,数据架构是核心,通过对企业的数据资源进行规划和设计,可以实现数据共享和数据治理,提高数据的价值和利用效率。数据架构:数据标准,数据采集加工,数据入湖,数据治理,数据共享服务,数据安全,数据质量,数据架构。技术架构:技术选型,框架,PaaS平台,云原生,DevOps,微服务,容器化,部署架构。
2024-08-01 20:48:20
213
翻译 vivo 全球商城:库存系统架构设计与实践
最后对库存系统进行一个总结库存系统完成服务拆分,在单一的可售库存扣减功能基础上拓展了很多功能,赋能业务的发展。完成库存架构分层,抽象多个库存类型,更灵活地满足当前业务需求。针对库存扣减防重、高并发场景下的库存扣减、库存热点问题、库存同步等技术问题,我们根据业务实际情况设计合理方案。
2024-05-13 13:39:10
461
原创 每日一面系列之如何优化大表
大数据量的表的查询优化方案有很多,例如:创建索引、优化查询语句、缓存查询结果、提升硬件配置、数据归档和分离,以及数据分片技术(分库分表)等,而这些技术通常是一起配合使用,来共同解决大数据量表的查询速度慢的问题的,其中分库分表的实现最为复杂,所以需要根据自身业务的需要酌情使用。
2023-12-07 13:57:24
228
原创 双十一备战与复盘
在大促期间的稳定性保障一般属于应急策略,因为在前期梳理系统时我详细的梳理了系统的降级预案明确操作手册,系统核心节点也有灾备能力并且在集团组织压测阶段也进行了降级演练,所以在出现问题时我们快速操作降级,在最短时间内解决了接口的性能问题。11.4日13:53分我快速操作系统的灾备开关将系统切换到备链路,在这里我给大家的建议就是一定不要犹豫,不要上来就一直追查原因快速的做出反应和判断,最小化的减少对线上用户的影响。2.在大流量情况下,如何做好系统的流量管控,保障系统的可用。
2023-11-27 13:52:38
180
原创 每日一面系列之@Component和@Configuration区别
Full 模式下,一个 @Bean 方法调用另外一个 @Bean 方法,动态代理方法会先去容器中检查是否存在该 Bean,如果存在,则直接使用容器中的 Bean,否则才会去创建新的对象。Full 模式下,会给配置类生成一个动态代理类,配置类中的所有方法都将被动态代理,因此配置类中的方法不能是 final 或者 private 的。Lite 模式下,配置类中的方法就是普通方法,可以是 final 类型,也可以是 private。Lite 模式下,不需要通过 CGLIB 生成动态代理类,所以启动速度会快一些。
2023-10-10 10:24:07
206
转载 每日一面系列之Java中有for循环为啥还有foreach
嵌套在一个循环中,便会带来更多不必要的内存消耗。会返回一个新的数组,数组的创建和赋值会导致分配内存空间,因此会带来较大的性能开销。:迭代是递归的一种特殊形式,是迭代器提供的一种方法,默认情况下是按照一定顺序。:对于forEach来说,它的函数签名中包含了参数和上下文,所以性能会低于。:for循环没有额外的函数调用栈和上下文,所以它的实现最为简单。:指的对数据结构的每一个成员进行有规律的且为一次访问的行为。是ES5提出的,挂载在可迭代对象原型上的方法,例如。方法,包含他的对象被认为是可迭代的。
2023-10-08 09:22:48
198
转载 每日一面系列之美团面试拷打:ConcurrentHashMap 为何不能插入 null?HashMap 为何可以
下面我会以此提供这两个问题的详细答案,希望对你有帮助。
2023-09-19 09:27:42
304
原创 每日一面系列之Spring中@Autowired和@Inject注解的区别?
经常在面试的时候有面试官会对spring中的常用注解解析提问,本次我们针对高频面试题 @Autowired和@Inject注解的区别。
2023-09-18 09:15:57
298
转载 库存预占架构升级方案设计-交易库存中心
伴随物流行业的迅猛发展,一体化供应链模式的落地,对系统吞吐、系统稳定发出巨大挑战,库存作为供应链的重中之重表现更为明显。近三年数据可以看出:接入商家同比增长37.64%、货品种类同比增长53.66%货品数量同比增长46.43%、仓库数量同比增长18.87%通过分析过往大促流量,分钟级流量增长率为75%,大促仓内反馈三方订单下传不及时,库存预占吞吐量和性能是导致订单积压因素之一。
2023-08-30 21:16:40
148
转载 踩坑日记-大报文问题解决方案
根据sku编号查询商品资料,往往伴随着多个sku一起查询的需求,如何设计接口?有的这样:rust复制代码由于批量接口在技术上已经满足了单个查询的功能,有的团队干脆去掉了单个查询接口,造成使用者查询单个sku时:ini复制代码应该这样:java复制代码。
2023-08-28 10:14:39
427
原创 工作中的方法论总结
但目标可实现这一点,通常容易偏高(激进一点,目标自上而下指定,缺乏讨论沟通)或偏低(悲观一点,过于夸大目标实现的难度)。R(Relevant):目标是有相关性的,要求目标是跟实际执行的事情和执行人的角色具有相关性,不能无的放矢;A(Attainable):目标是可实现的,要求目标是实际执行人能够完成实现的,必须经过充分的沟通讨论;T(Time-bound):目标是有时间限制的,要求目标的实现必须有明确的时间节点和里程碑;I(Inform):知情人,项目的进度的知晓方,通常是邮件中的抄送人;
2023-08-11 15:30:10
203
转载 规则引擎liteFlow初步尝试
LiteFlow是一个非常强大的现代化的规则引擎框架,融合了编排特性和规则引擎的所有特性。利用LiteFlow,你可以将瀑布流式的代码,转变成以组件为核心概念的代码结构,这种结构的好处是可以任意编排,组件与组件之间是解耦的,组件可以用脚本来定义,组件之间的流转全靠规则来驱动。LiteFlow拥有开源规则引擎最为简单的DSL语法。十分钟就可上手。
2023-08-02 20:29:49
513
转载 如何写好一手代码
本文主要从如何快速学习掌握编码技能展开,强调了认知对学习的重要性,提出了选择方向,树立榜样,学以致用等学习路径。同时针对成长过程中遇到的困惑和职业发展方向,做了阐述,借事成长,择时出发,避免进入一些认知误区。以代码阅读案例,直观的展现了如何在代码阅读中学习和思考。最后,介绍了重构的意义和部分原则。总体上,是按照学习成长路线来进行阐述的,希望能够减少我们路上,那些成长的烦恼!
2023-07-27 09:46:47
108
原创 架构重构实践心得
设计集成测试需要减少对其他系统(尤其是和外部第三方交互)的依赖,通过一些 Mock 工具提供稳定的测试数据,让测试结果更稳定可靠,比如使用缓存保证相同的请求能拿到相同的结果,这也能帮助后续新老版本的比对回归验证。全链路上的大规模重构往往都是长期项目,初期制定的计划也肯定会有变化调整,特别是重构过程中会有新的业务需求进入,需要调整优先级,所以计划要分成不同的阶段性里程碑目标。集成测试相比单元测试覆盖率会更大,随着覆盖率越高,覆盖剩余的测试成本也会越大,例如一些异常边界场景,用单元测试覆盖的成本会更低。
2023-07-24 12:53:05
1054
原创 工程师常用的6种最佳实践
1、功能模块的启动和结束(完整的系统由多个功能模块组成,每个模块负责不同的功能,因此需要对模块的启动和结束进行监控。你的代码会有未来的观众。该定律指出每一个过程都有其固有的复杂性,存在一个临界点,超过了这个点过程就不能再简化了,你只能将固有的复杂性从一个地方移动到另外一个地方。当然上面这种说话可能触动不了大家的心弦,这么说吧:如果没有很明确的需求,优化了也没有业绩,大家也不知道你做了,那为什么要费这个力气呢。5、关键性方法的进入和退出(一些重要业务处理的方法,在进入和结束的时候需要有日志信息进行输出)
2023-07-24 09:05:29
78
原创 每日一面之JVM参数最佳实践
3)每次GC内存是否下降:应用刚启动时,每次YoungGC内存应该回收到较低水位,随着时间推移老年代逐步增多,内存水位会逐步上涨,直到FullGC/MixedGC(G1),内存会再次回到较低水位,否则可能存在内存泄漏;-XX:ConcGCThreads=n(默认为ParallelGCThreads/4,可视情况调整至ParallelGCThreads/2)4)如果使用ParallelGC,堆内存耗尽才会触发FullGC,所以不用配置堆内存使用率告警,但需关注GC频率;-Xmx(一般为容器内存的50%)
2023-07-19 13:54:16
245
原创 每日一面系列之为什么JMV需要XMX和XMS设置一样
JVM的动态内存策略不太适合服务使用,因为每次GC需要计算Heap是否需要伸缩,内存抖动需要向系统申请或释放内存,特别是在服务重启的预热阶段,内存抖动会比较频繁。另外,容器中如果有其他进程还在消费内存,JVM内存抖动时可能申请内存失败,导致OOM。
2023-07-11 13:28:35
167
转载 每日一面系列之Mysql索引
由于order by后边没有索引,就看where条件中是否有合适的索引,查询选择器选定rx_status这个单列索引,而rx_status=5这个条件下限制的数据行在索引中是连续,即使需要的rx_id不在索引中,再回主键聚簇索引也来得及,由于order by后边没有索引,所以走磁盘级别的排序filesort,高峰积压的时候处方就1万到2万,跑到了100ms,白天低谷的时候几百单也就20ms。,由于外部的ID有的是数字有的是字符串,因而导致索引一会可以走到,一会走不到,最终导致了性能的不稳定。
2023-07-10 13:54:46
131
转载 一篇搞定向上管理--怎样管理领导
当我们做好了上面大部分内容,对我们的领导有了全面的了解,适应了他的工作模式,自如地展现了我们的专业素养和素质,就会经常发现阳光透过办公室窗户洒在你整洁的桌子边上,你坐在舒适的椅子上,轻轻地调整着你的工作日程。四种领导型态没有优劣之分,一切依情境而定,跟前面的人格特质一样的,每个人都有自己的人格特质,每个人都有自己的行为维度,所以呢,我们只有对领导有这样的一个全面的了解以后呢,我们才能对他们进行合理的管理。尽可能多地与领导进行开放式的交谈,了解他们的思考方式,他们的目标和他们对团队和公司的期望。
2023-07-06 13:48:42
161
原创 Mybatis架构总结
SimpleExecutor是一种常规执行器,每次执行都会创建一个statement,用完后关闭。ReuseExecutor是可重用执行器,将statement存入map中,操作map中的statement而不会重复创建statement。BatchExecutor是批处理型执行器,doUpdate预处理存储过程或批处理操作,commit提交事务并执行过程。StatementHandler是四大组件最重要的一个对象,负责操作Statement对象与数据库进行交流,在工作时还会使用ParameterHan
2022-12-05 22:11:30
332
原创 互联网面试第三讲聊聊线程池
1.什么是线程池?线程池的基本思想是一种对象池,在程序启动时就开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。2.为什么要使用线程池?Thread pools address two different problems: they usually provide improved performance when executing larg
2022-05-08 14:42:28
440
原创 互联网面试第二讲--聊聊Java异常
1.首先讲一下Java异常体系Java中异常中常遇到的哪些坑1.第一个坑 在finally中进行返回,此时的返回值会覆盖正常的返回值具体代码如下 public static int getReturn() { int a = 2; int b = 10; try { return ++a; } finally { return ++b; } }
2022-05-01 18:34:58
468
js post调用wcf 在centeros 发送options 后失败
2015-05-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人