
解决方案
文章平均质量分 80
Android_la
Java入门到进阶级别
展开
-
电商项目之如何判断线程池是否执行完所有任务
先给出解决方案,文末再贴出详细代码面试突击35:如何判断线程池已经执行完所有任务了?原创 2024-07-28 01:29:10 · 528 阅读 · 0 评论 -
电商项目之有趣的支付签名算法
这次遇到一种比较有趣的签名算法,笔者认为是基于第(2)的变种,渠道方要求针对请求参数中的字段,如果该字段是对象类型,那么该字段里面的字段也要按字典升序排序进行拼接,相当于是递归字典升序,困难度有一点提升。遍历队列的每一元素,元素从队头出队,再遍历元素中的字段是否是对象类型或者数组类型,使用一个容器存起来,要按字典。(2)针对请求参数中的字段(仅针对第一层的字段,不需要针对字段里面的字段,即不需要递归),进行字典升序排序,用格式。入队,每一次从队头遍历,那么每一次遍历都是升序遍历。,存完后使用头插法入队。原创 2024-05-25 21:06:09 · 512 阅读 · 0 评论 -
电商项目之Web实时消息推送(附源码)
文章参考自Web 实时消息推送的 7 种实现方案针对一些比较重要的方式,我都会尽量敲出一份完整的demo代码,享受其中的编程乐趣。在SSE方式中,笔者延申思考,将他应用于电商支付的场景中,给出了比较合理的解决方案,但并未在生产环境中验证,仍待考证。消息推送是指服务端将消息推送给客户端。常见的场景有:有人关注公众号,公众号推送消息给关注者;站内消息通知;未读邮件数量;监控告警数量等等。原创 2023-11-30 22:00:51 · 923 阅读 · 0 评论 -
电商项目之Java8函数式接口落地实践
本文的代码中,可能有些类型没有给出代码,不需要纠结,主要了解函数式接口怎么应用即可。原创 2023-11-09 23:56:40 · 327 阅读 · 0 评论 -
电商项目之如何扣减库存
本文旨在阐述生产环境如何在高并发的场景下可靠地扣减库存,有其他解决方案的伙伴可以在评论中分享出来。原创 2023-10-08 21:56:01 · 1315 阅读 · 0 评论 -
Java初级到中级:技术提升的策略与方法
本篇内容倾向从方法论的角度去介绍如何提升,基本不涉及代码,不涉及具体要学习哪些技术栈。方法论是从高级开发(称得上是资深级别的开发,技术牛、业务强,用技术支撑业务)那里得来的,笔者基于此调整为适合自己的方法论,希望对大家有帮助,同时也希望大家给出更佳的建议。笔者从事跨境电商领域,所以本文可能会涉及电商场景偏多,且都是生产环境,日活量有十万级别,页面浏览量有百万级别。电商场景复杂,应该算是能覆盖市面上很多的技术。原创 2023-09-24 22:53:53 · 367 阅读 · 2 评论 -
技术广度必备——高并发设计之分布式锁的实现方式
本文参考过的文章有分布式锁的几种实现方式方式大致分为3种:基于磁盘存储的关系型数据库MySQL;基于内存的数据库Redis;基于Zookeeper。原创 2023-08-14 22:21:45 · 291 阅读 · 0 评论 -
代码优化之函数式编程的实践
业务中经常使用Http调用接口,由于网络抖动,时常会出现调用失败、连接超时、读取超时、远程服务器关闭连接等情况。因此会在使用HTTP调接口的地方加上重试逻辑。这就导致了很多业务逻辑代码都有重试逻辑,代码不够简洁,可重用性也不高。因此需要进一步优化代码,将重试逻辑抽成一个工具类(静态方法)。的那行代码(业务逻辑的代码,需要重试的代码)以及一些HTTP响应实体类,其余代码基本都是公用逻辑,所以可以将公用逻辑抽取到工具方法里面,会变的标记。所在的代码以及响应实体类交给静态方法的入参以及函数式编程实现。原创 2023-08-06 13:28:44 · 212 阅读 · 0 评论 -
电商高并发设计之SpringBoot整合Redis实现布隆过滤器
本篇的代码都是参考SpringBoot+Redis布隆过滤器防恶意流量击穿缓存的正确姿势,可以先看看该篇文章。本篇的行文思路分别由以下几个模块构成:布隆过滤器原理、使用场景、基础中间件搭建、如何实现布隆过滤器阅读本篇前,需要知道布隆过滤器的原理、简单的Docker知识,阅读起来能更加高效。效果:上面代码中,可以看见底层使用的是redis的bitmap,120w数据存在Redis仅需8M。查询一次仅需几十毫秒。优点:空间效率高;;查询时间快;支持高并发。缺点:存在一定的误判率;原创 2023-08-02 17:44:19 · 1266 阅读 · 0 评论 -
电商项目之海量操作日志的实现
本文阐述的是企业级电商解决方案,非自学项目或者八股文或者小demo,解决方案中的任何细节都是站在企业级开发的角度去思考的。解决方案都会尽量从可读性、易用性、高扩展性、统一管理性去考虑。操作日志讲述的是在B端的任何操作都需要持久化起来,非C端。原创 2023-05-18 22:48:46 · 797 阅读 · 1 评论 -
电商项目之Redis实现限制接口调用次数
本方案是笔者自己想出来的,还未经过生产环境的考验,如有不正确的地方欢迎在评论区中指出。原创 2023-03-30 23:17:37 · 705 阅读 · 0 评论 -
电商项目之Feign与Dubbo技术选型
笔者阐述的都是真实案例场景,不是八股文或者面试题。如果作为后端开发技术人员,怎么独立思考去做决策呢?怎么做技术选型,要考虑什么东西?今天来理顺并总结一下。dubbo协议追求的是数据量小,小则快,协议的设计也符合dubbo框框架的理念,适用与内部服务之间的数据交互。既然dubbo协议适用于服务之间的互相调用。spring cloud的feign内部为什么使用http协议呢?大概是架构的需要,例如服务A是java写的,服务B是python写的。这个时候dubbo协议就跑不通了。只能用http这种标准协议来交互。原创 2023-02-21 21:59:47 · 1873 阅读 · 0 评论 -
电商项目之电子账户的收单模式
本篇文章适合具有支付场景的业务知识或者对电商支付有兴趣的小伙伴。关于电商项目是如何对接信用卡的,可以看看笔者写的电商系统对接支付渠道的解决方案PayPal可以类比成国内的支付宝,他有一个电子账户,可以存余额,也可以关联银行卡。而信用卡本质就是银行卡,是一张卡。可以理解成卖家是怎么收到款的。每种收单模式都有不同的实现方式。原创 2023-02-16 22:15:07 · 809 阅读 · 0 评论 -
电商项目之Mailgun邮件退信率升高
本文阐述的是笔者遇到的真实案例,非八股文或者自己玩玩的小demo。本文适合对电商业务感兴趣的小伙伴本文将着重以整体解决方案叙述作为一名Java开发者应该如何去处理生产级别的故障,不会手把手教你写代码,更多的是偏向于方法论、思考、技术设计落地。原创 2023-02-01 22:02:09 · 909 阅读 · 0 评论 -
电商项目之同一笔单多次收款成功
本篇为笔者遇到的真实案例发生生产级别的问题,先不要慌,要从业务角度、技术角度思考什么场景会导致该问题发生?有解决方法吗?运用任何数据去分析排查并结合现有情况给出解决方案。处理问题的方法论见电商项目之处理生产级别问题的方法论。原创 2023-01-24 22:05:30 · 1775 阅读 · 0 评论 -
电商项目之处理生产级别问题的方法论
本篇博客仅供笔者总结使用,如有不正确的地方请指出笔者从事电商业务,时时刻刻都会有人在生产环境下单支付,笔者总结的方法论适合这样一种生产场景一切都是以项目组利益为核心,才有了上面提到的方法论,一切决定以及做法都是由项目组利益出发。保持这样的想法,自然就能深入体会为什么要这样做。要时常与业务部门沟通,和领导多沟通,态度保持积极,要有主人翁意识,这样的话,在很多事情上可操作的空间会很大。原创 2023-01-20 09:55:41 · 160 阅读 · 0 评论 -
电商项目之如何迁移千万级别的数据表
此博客非面试题,而是真实遇到的场景,如果没接触过这种场景,还真不知道要怎么搞。因为生产环境正在使用着这张千万级的表,不能简单地认为操作navicat将数据导出然后再导入。稍有不慎,就会导致生产级别的故障。原创 2023-01-14 17:42:44 · 709 阅读 · 0 评论 -
电商项目之域名解析中的a记录cName记录mx记录
本博客阐述的都是电商生产环境上发生的真实场景,不是那种八股文或者自学的小demoA 记录:设置域名到 IP 的映射CNAME 记录:设置域名到域名的映射MX 记录:设置邮件服务器的映射。原创 2023-01-10 23:13:03 · 380 阅读 · 0 评论 -
电商之收单系统的webhook推送重试机制
本博客讲述的是生产环境真实遇到的场景,不是那种八股文或者小打小闹的demo。原创 2022-12-16 16:13:17 · 912 阅读 · 0 评论 -
电商项目亿级数据量之深度分页解决方案
实战!聊聊如何解决MySQL深分页问题中阐述的解决方案,笔者确实在企业级项目中看到有运用。原创 2022-11-01 17:33:19 · 366 阅读 · 0 评论 -
解决并发请求的幂等操作解决方案
解决幂等操作有很多种,本篇博客着重详细讲解简易版本的解决方案。原创 2022-11-01 16:31:46 · 1030 阅读 · 0 评论 -
ab站的应用场景
本文都是笔者在生产环境的真实案例的总结本篇基本不涉及代码,仅从产品层面做阐述与总结,为提供解决方案引入一个思路A站通常是卖商家的商品 ,B站只是为了做给支付渠道看的。即买家在A站浏览商品并购买,然后支付的时候,电商系统会使用B站的信息去收款并把这些信息发给渠道方。卖家使用一个绑定到一个站点(A站)。收款的时候却是使用这个B站。原创 2022-09-22 08:53:56 · 455 阅读 · 1 评论 -
电商项目之百万级别的临时订单数据补偿解决方案
买家再次访问保存的地址时,弹出无法找到该笔订单的商品信息。原因是订单是在A站产生的,商品也是属于A站的。当域名绑到B站后,再次访问域名,就会解析到B站,而B站是没有订单上的商品ID的,因此无法找到该笔订单的商品信息。造成上面的原因是因为结算页的临时订单信息表是没有存储站点主键ID,导致加载结算页仍会继续去寻找订单上的商品。根据结算页对应的token去寻找结算页的临时订单信息表,找到。,暂且不用管他,因为这个已经是笔者实现了的解决方案,已完成数据补偿。,更加轻量,也不会影响生产环境的主业务。原创 2022-09-18 13:48:51 · 703 阅读 · 0 评论 -
电商系统对接支付渠道的解决方案
本篇文章会涉及到部分代码,不管是产品人员还是开发者都无需过多关注代码,只需关注整个解决方案是如何实现即可。本篇文章仅陈述出笔者在企业级开发中接触到的解决方案,不代表是行业标准,但是技术实现基本大同小异。笔者只参与过信用卡的对接,本文的解决方案基本围绕信用卡对接做例子。不管是银行卡对接、信用卡对接、电子钱包对接,前后端交互流程基本大同小异。考虑到以产品岗位和开发者的角度去做总结,笔者将先以业务解决方案给出方法论,然后再给出技术实现细节阐述对接过程中的核心要素。原创 2022-09-14 22:15:04 · 2699 阅读 · 0 评论 -
0基础了解电商系统如何对接支付渠道
文章目录1 问题背景1 问题背景临时被拉去做支付了,对电商的支付业务是0基础。经过多位开发大佬的指导,终于把需求做完了。现自我整理下并总结下做支付过程中的知识。阅读对象是支付0基础的小伙伴。......原创 2022-06-26 22:39:20 · 724 阅读 · 0 评论 -
电商缓存之如何更新20万个商品缓存
文章目录1 问题背景2 前言3 详细背景4 解决方案1 问题背景需要在商品缓存中新增2个字段,redis中已存在20万个商品缓存,如何更新这20万个商品缓存2 前言本博客是笔者在真实的生产环境遇到的问题,非自学的demo或者单纯地研究理论。本博客仅供笔者自己总结参考,如有不正确的地方请指出。3 详细背景假如在redis中有如下结构的商品缓存:{ id: 1, title: "Iphone", skus: [ { id: 1001, .原创 2022-02-15 23:21:34 · 1437 阅读 · 0 评论 -
电商营销活动的优惠金额精度问题
文章目录1 问题背景2 前言3 子优惠金额的累加值与总优惠金额不相等的影响4 如何解决4.1 思想1 问题背景电商为了提高销量,常常会做一些优惠活动,吸引顾客购买。优惠活动的优惠金额会存在精度问题。比如,购买A商品3件、B商品5件、C商品7件,享受满额打折、满件减价、满额赠送等等的优惠活动。那么生单的时候需要记录A商品的优惠金额、B商品的优惠金额、C商品的优惠金额,整个订单的总优惠金额。此时每种商品的优惠金额加起来是否等于总的优惠金额呢?如果不相等要怎么处理?2 前言本博客是笔者在真实的生产.原创 2022-02-10 22:26:43 · 890 阅读 · 0 评论 -
电商缓存的设计思想
1 问题背景在电商领域,分为B端和C端。B端是提供给卖家使用的,主要用于商品上下架、库存、订单、营销等等。C端主要是面向广大买家,用于展示商品、商品评论、购物车、结算页、活动展示、推荐商品等等。缓存在电商中的地位尤其重要,今天阐述电商的缓存设计思想。2 前言本博客阐述的内容来自笔者工作中,是真实的生产环境,非自学的demo那种或本地搭建虚拟机环境那种。仅供笔者自己做笔记总结使用,如有不正确之处请指出。3 业务背景卖家在B端修改了商品的售价,点击保存。买家在C端浏览商品,点击购买。此时的问原创 2022-02-01 14:58:34 · 2333 阅读 · 1 评论 -
浅拷贝与深拷贝的实现
文章目录1 问题背景1 问题背景实现业务的时候,需要在旧的方法上做添加,但是又不能改变原有的数据,所以要采用深拷贝。简单研究了浅拷贝深拷贝的解决方案。参考自原创 2021-07-07 15:20:19 · 251 阅读 · 0 评论 -
批量更新或插入数据到数据库的意义
文章目录1 问题背景2 单体项目3 分布式4 意义1 问题背景进行数据库操作时,项目中常常见到批量插入或批量更新,而不是用Java的for循环执行DML操作。为什么要批量操作?其意义在哪里2 单体项目以前的老项目通常是单体项目,即一个服务器上面部署了Web应用、数据库、Redis、文件系统、消息队列等等。此种方式,各种组件之间的调用都不需跨越服务器,并发量不大的情况下能得到很快的响应。因此在单体项目上,无论是批量操作还是for循环操作,都不会有很多时间耗费。3 分布式当并发量加大,考虑到性能原原创 2021-05-08 18:17:25 · 500 阅读 · 0 评论 -
用设计模式解决电商项目的更新库存业务
文章目录一. 问题背景二. 前言三. 场景介绍四. 思路五. 解决方案一. 问题背景可以先了解关于电商库存的读取。加载完sku信息后,如果订单号还没有创建(即还没有创建订单)就会校验库存。更新订单时,不需要再判断库存。关于库存更新的业务用了命令设计模式+模板方法设计模式。二. 前言技术栈:SpringBoot,Redis设计模式:工厂模式,命令模式,模板方法。(关于设计模式,详情可参考gmall-learing项目的gmall-design-strategy模块的readme.md文件)原创 2021-03-13 17:56:30 · 656 阅读 · 3 评论 -
关于电商库存的读取
文章目录一. 问题背景二. 前言三. 创建订单四. 加载sku信息并锁库存五. 获取库存的代码六. 为什么获取库存的时候要用分布式锁?七. 为什么要做两个判null?八. Redis分布式锁一. 问题背景背景起因在单例模式之懒加载模式。对懒加载不熟悉的伙伴推荐先阅读单例模式之懒加载模式。此篇只对电商库存做分析。二. 前言电商的库存是用redis做缓存来解决的,估计是应对秒杀活动时页面流量很高,频繁读取数据库效果不佳,也会出现超卖现象。三. 创建订单获取库存的缘于创建订单,如下是创建订单涉及到的原创 2021-03-12 15:04:48 · 448 阅读 · 0 评论 -
关于电商项目的库存
文章目录一. 问题背景二. 前言三. 库存3.1 可销售库存(S)3.2 订单占用库存(O)3.3 锁定库存(L)3.4 虚库存(V)3.5 调拨出占用库存(T)3.6 调拨中库存(A)3.7 不可销售库存3.8 库存公式一. 问题背景在看公司的电商项目中,关于创建订单的流程,涉及到加载sku信息,而加载sku信息涉及到了sku库存,数据库也有sku的库存表单独存在,其中的字段有可用库存、锁定库存、是否追踪库存、库存政策(是否允许超卖)等。所以去了解一下关于电商项目的库存概念以及业务场景参考自:电原创 2021-03-11 10:55:53 · 943 阅读 · 0 评论 -
用设计模式解决电商项目的折扣优惠类型业务
文章目录一. 问题背景二. 前言三. 解决方案3.1 没有用设计模式3.2 用设计模式3.2.1 设计接口3.2.2 设计折扣计算实现类的选择器3.2.3 设计折扣计算基类3.2.4 折扣优惠实现类3.2.4.1 默认折扣3.2.4.2 满减折扣3.2.4.3 买N件第N+1件打折四. 源码一. 问题背景场景:电商项目中的折扣优惠类型,有若干种,用策略模式做业务逻辑,提高系统的扩展性。注意:笔者采用lombok写代码,所以代码块中会少了很多getter、setter、构造函数。技术栈:Sp原创 2021-03-10 09:47:11 · 1340 阅读 · 5 评论 -
关于电商商品的SPU-SKU模型
文章目录一. 问题背景二. SPU和SKU三. SPU与SKU的区别一. 问题背景公司做电商项目,数据库表设计采用分库,关于商品的表涉及到了spu、sku的概念。今天了解一下二. SPU和SKUSPU,Standard Product Unit,标准化产品单元。通俗地讲,特性相同的商品可以称为一个SPU。SKU,Stock Keeping Unit,库存量单位。即库存进出的计量单位,可以是以件、盒、托盘等为单位。SKU是物理上不可分割的最小存货单元。在鞋类、服装商品中使用最多最普遍。三. S原创 2021-03-13 14:10:10 · 1843 阅读 · 0 评论 -
如何访问docker nginx
文章目录一. 问题背景二. 前言一. 问题背景用docker方式把nginx部署在阿里云上面,在阿里云上面启动自己的应用程序(端口8083)。想要实现的效果是用nginx做反向代理,本地电脑发送请求,nginx收到请求后转发到8083的应用程序。但是一直无法正确访问nginx,做不出效果。二. 前言本篇只讲述...原创 2021-03-09 14:58:34 · 1203 阅读 · 0 评论 -
SpringBoot多模块引用报错
文章目录一. 问题背景二. 前言三. 解决方案四. maven-compiler-plugin与spring-boot-maven-plugin的区别4.1 maven-compiler-plugin4.2 spring-boot-maven-plugin五. 报错的原因一. 问题背景如下图所示,gmall项目里面有common、portal、redis3个模块。gmall项目为pom,portal模块为jar,portal引用common模块中的某些类。 把portal运行在Linux服务器上面,.原创 2021-03-07 21:44:35 · 1222 阅读 · 0 评论 -
Java实现构建树状菜单栏
文章目录一. 问题背景二. 解决方案2.1 核心算法2.1.1 用动态数组构建树2.1.2 用队列构建树2.2 核心思路一. 问题背景在公司做项目遇到一个需求是要返回一颗树状菜单栏的数据结构给前端。效果类似如下:二. 解决方案这里先直接给出核心算法的代码,有兴趣研究的可以前往gitee页面下载或者直接用git下载项目源码git@gitee.com:zilianggan/build-tree.git,搭建该项目的所有资源(包括源码、sql表结构、表数据都在项目里面)都在里面,部署方法可参考里面的re原创 2020-12-17 16:58:38 · 669 阅读 · 2 评论