程序员小富

其他

好好的系统,为什么要分库分表?

水平(横向)两种纬度进行拆分。下边我们以经典的订单业务举例,看看如何拆分。垂直拆分1、垂直分库垂直分库一般来说按照业务和功能的维度进行拆分,将不同业务数据分别放到不同的数据库中,核心理念
2022年11月23日
其他

如何防止订单重复支付?

我们来看看,电商订单支付的简要流程:订单钱包支付流程从下单/计算开始:下单/结算:这一步虽然不是直接的支付起点,但是支付相关的金额等等信息都来自结算,此时订单的状态是未支付申请支付:用户选择申请支付,客户端调用支付服务,此时在系统内产生一笔支付流水,这笔流水的状态是未支付发起支付:支付服务调用三方支付,通常这种钱包类的支付,在发起支付这一步,会响应一些支付的链接,客户端会对链接进行对应的处理。钱包支付:用户进行支付,通常是通过对应的钱包进行的,大家可以回忆一下自己在购物中,支付的过程,不同的端,对钱包支付的处理是不太一样的:京东PC端支付页APP端:
2022年7月14日
其他

我有 10种 保证接口数据安全的方案

大家好呀,我是小富~我们日常开发中,如何保证接口数据的安全性呢?个人觉得,接口数据安全的保证过程,主要体现在这几个方面:一个就是数据传输过程中的安全,还有就是数据到达服务端,如何识别数据,最后一点就是数据存储的安全性。今天跟大家聊聊保证接口数据安全的10个方案。1.数据加密,防止报文明文传输。
2022年7月5日
其他

40 个 SpringBoot 高频使用注解,开发效率利器

}@ConditionalOnResource此注解用于检测当某个配置文件存在使,则触发被其标注的方法,下面是使用此注解的代码示例:@ConditionalOnResource(resources
2022年6月22日
其他

不会一致性hash算法,劝你简历别写搞过负载均衡

大家好,我是小富~这两天看到技术群里,有小伙伴在讨论一致性hash算法的问题,正愁没啥写的题目就来了,那就简单介绍下它的原理。下边我们以分布式缓存中经典场景举例,面试中也是经常提及的一些话题,看看什么是一致性hash算法以及它有那些过人之处。构建场景假如我们有三台缓存服务器编号node0、node1、node2,现在有3000万个key,希望可以将这些个key均匀的缓存到三台机器上,你会想到什么方案呢?我们可能首先想到的方案,是取模算法hash(key)%
2022年1月11日
其他

25 张图吃透「偏向锁」,这个 JVM又爱又恨的崽

0如果只是一个线程获取锁,再加上「偏心」的机制,是没有理由撤销偏向的,所以偏向的撤销只能发生在有竞争的情况下想要撤销偏向锁,还不能对持有偏向锁的线程有影响,所以就要等待持有偏向锁的线程到达一个
2021年12月29日
其他

11 张图总结下,微服务增量拉取

分钟的增量数据没有拉取到,那么相当于丢失了一次增量数据,这个时候,就不是完整的注册表信息了。有没有既方便又准确的比对方式呢?有的,那就是哈希比对。哈希比对的意思就是将两个对象经过哈希算法计算出两个
2021年11月12日
其他

面试官问:订单30分钟未支付,自动取消,该怎么实现?

大家好,我是小富!今天给大家继续上一盘硬菜,并且是支付中非常重要的一个技术解决方案,有这块业务的同学注意自己试一把了哈!在开发中,往往会遇到一些关于延时任务的需求。例如生成订单30分钟未支付,则自动取消生成订单60秒后,给用户发短信对上述的任务,我们给一个专业的名字来形容,那就是延时任务。那么这里就会产生一个问题,这个延时任务和定时任务的区别究竟在哪里呢?一共有如下
2021年10月21日
其他

Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)

大家好!我是小富~这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号、密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小。说起这个我是比较有感触的,之前我TM被删库的经历,到现在想起来心里还难受,我也是把数据库账号明文密码误提交到GitHub,然后被哪个大宝贝给我测试库删了,后边我长记性了把配置文件内容都加密了,数据安全问题真的不容小觑,不管工作汇还是生活,敏感数据一定要做脱敏处理。如果对脱敏概念不熟悉,可以看一下我之前写过的一篇大厂也在用的6种数据脱敏方案,里边对脱敏做了简单的描述,接下来分享工作中两个比较常见的脱敏场景。配置脱敏实现配置的脱敏我使用了Java的一个加解密工具Jasypt,它提供了单密钥对称加密和非对称加密两种脱敏方式。单密钥对称加密:一个密钥加盐,可以同时用作内容的加密和解密依据;非对称加密:使用公钥和私钥两个密钥,才可以对内容加密和解密;以上两种加密方式使用都非常简单,咱们以springboot集成单密钥对称加密方式做示例。首先引入jasypt-spring-boot-starter
2021年8月2日
其他

大厂怎么解决MySQL死锁问题?差点被坑到享年

出现死锁的几个要素为:两个或者两个以上事务每个事务都已经持有锁并且申请新的锁锁资源同时只能被同一个事务持有或者不兼容事务之间因为持有锁和申请锁导致彼此循环等待InnoDB
2021年7月28日
其他

给你一个亿的keys,Redis如何统计?

大家好,我是小富~不知你大规模的用过Redis吗?还是仅仅作为缓存的工具了?在Redis中使用最多的就是集合了,举个例子,如下场景:签到系统中,一天对应一系列的用户签到记录。电商系统中,一个商品对应一系列的评论。交友系统中,某个用户的一系列的好友。Redis中集合的特点无非是一个Key对应一系列的数据,
2021年7月22日
其他

13张图 | 硬核讲解:递归的前世今生

大家好,我是小富~之前有老弟说弄不懂递归,今天给大家讲讲递归。什么是递归?递归:就是函数自己调用自己。子问题须与原始问题为同样的事,或者更为简单。递归通常可以简单的处理子问题,但是不一定是最好的解决方式。对于递归要分清以下概念:递归是自己调用自己递归通常不在意具体操作,只关心初始条件、结束条件和上下层的变化关系。递归函数需要有临界停止点(结束条件),即递归不能无限制的执行下去。通常这个点为必须经过的一个数。递归可以被栈替代。有些递归可以优化。比如遇到重复性的可以借助空间内存记录而减少递归的次数认识递归,递归函数通常看起来简易但是对于初学者可能很难去理解它,拿一个递归函数来说。static
2021年7月16日
其他

阿里面试这样问:Nacos配置中心交互模型是 push 还是 pull ?(原理+源码分析)

大家好,我是小富~对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服务发现、配置管理,非常好用的一个工具。然而这样的技术用的人越多面试被问的概率也就越大,如果只停留在使用层面,那面试可能要吃大亏。比如我们今天要讨论的话题,Nacos在做配置中心的时候,配置数据的交互模式是服务端推过来还是客户端主动拉的?这里我先抛出答案:客户端主动拉的!接下来咱们扒一扒Nacos的源码,来看看它具体是如何实现的?配置中心聊Nacos之前简单回顾下配置中心的由来。简单理解配置中心的作用就是对配置统一管理,修改配置后应用可以动态感知,而无需重启。因为在传统项目中,大多都采用静态配置的方式,也就是把配置信息都写在应用内的yml或properties这类文件中,如果要想修改某个配置,通常要重启应用才可以生效。但有些场景下,比如我们想要在应用运行时,通过修改某个配置项,实时的控制某一个功能的开闭,频繁的重启应用肯定是不能接受的。尤其是在微服务架构下,我们的应用服务拆分的粒度很细,少则几十多则上百个服务,每个服务都会有一些自己特有或通用的配置。假如此时要改变通用配置,难道要我挨个改几百个服务配置?很显然这不可能。所以为了解决此类问题配置中心应运而生。配置中心推与拉模型客户端与配置中心的数据交互方式其实无非就两种,要么推push,要么拉pull。推模型客户端与服务端建立TCP长连接,当服务端配置数据有变动,立刻通过建立的长连接将数据推送给客户端。优势:长链接的优点是实时性,一旦数据变动,立即推送变更数据给客户端,而且对于客户端而言,这种方式更为简单,只建立连接接收数据,并不需要关心是否有数据变更这类逻辑的处理。弊端:长连接可能会因为网络问题,导致不可用,也就是俗称的假死。连接状态正常,但实际上已无法通信,所以要有的心跳机制KeepAlive来保证连接的可用性,才可以保证配置数据的成功推送。拉模型客户端主动的向服务端发请求拉配置数据,常见的方式就是轮询,比如每3s向服务端请求一次配置数据。轮询的优点是实现比较简单。但弊端也显而易见,轮询无法保证数据的实时性,什么时候请求?间隔多长时间请求一次?都是不得不考虑的问题,而且轮询方式对服务端还会产生不小的压力。长轮询开篇我们就给出了答案,nacos采用的是客户端主动拉pull模型,应用长轮询(Long
2021年7月2日
自由知乎 自由微博
其他

大厂千万级数据量 Redis 缓存该如何设计?学费了

miss。由于DB的吞吐性能较差,会严重影响系统的性能,甚至影响正常用户的访问。解决方案:方案一:查存DB
2021年6月7日
其他

拉仇恨!webhook + 企业微信 给同事做了个代码提交监听工具

sha256=68bde5bee18bc36fd95c9b71b4a89f238cb01ab3bf92fd67de3a1de12b4f5c72最后我们选择由哪些事件来触发webhook回调,push
2021年6月1日
其他

避繁就简,分享 50个让你代码更优雅的小技巧

...}❝因为如果定义为static,即类静态常量,在每个实例对象中,它只有一份副本。如果是成员变量,每个实例对象中,都各有一份副本。显然,如果这个变量不会变的话,定义为静态常量更好一些。❞13.
2021年5月20日
其他

10个解放双手的 IDEA 插件,这些代码真不用手写(第二弹)

API的调试,可以清晰的看到每一步操作数据的变化过程。easy_javadoceasy_javadoc一个可以快速为Java的类、方法、属性加注释的插件,还支持自定义注释样式,IDEA自身的Live
2021年5月8日
其他

发现了 ConcurrentHashMap 源码中的两个BUG

x);相应的语义为:如果对象o起始地址偏移量为offset的值等于expected,则将该值设为x,并返回true表明更新成功,否则返回false,表明CAS失败初始化public
2021年4月27日
其他

我TM被人删库了

,几天没打开这是什么局面?又接连尝试连了几次未果,我就有种不好的预感用的云数据库不是本地,而且我好些天没操作,误删的几率不太大赶紧登上云服务器,发现MySQL服务还在,
2021年4月5日
其他

干掉前端!3分钟纯 Java 注解搭个管理系统,我直接好家伙

听着好像还挺流批的,到底是不是有这么魔幻,咱们一起用起来感受下。首先来搭建一下环境,目前Erupt支持Java版本1.8.0及以上、Spring
2021年3月26日
其他

大厂也在用的 6种 数据脱敏方案,别做泄密内鬼

动态数据脱敏(DDM):静态数据脱敏静态数据脱敏(SDM):适用于将数据抽取出生产环境脱敏后分发至测试、开发、培训、数据分析等场景。有时我们可能需要将生产环境的数据
2020年12月8日
其他

对比 5 种分布式事务方案,还是宠幸了阿里的 Seata(原理 + 实战)

强制技术部加班到十点,晚上孩子隔两三个小时一醒,基本没睡囫囵觉的机会,天天处于迷糊的状态,孩子还时不时起一些奇奇怪怪的疹子,总让人担惊受怕的。本就不多的写文章时间又被无限分割,哎~
2020年11月26日
其他

一文快速入门分库分表(必修课)

,指定该订单应该在哪个数据库中操作。水平分库2、水平分表水平分表是在同一个数据库内,把一张大数据量的表按一定规则,切分成多个结构完全相同表,而每个表只存原表的一部分数据。例如:一张
2020年9月25日
其他

未读消息(小红点),前端 与 RabbitMQ 实时消息推送实践,贼简单~

页面的未读消息(小红点)怎么实现比较简单,刚好本周手头有类似的开发任务,索性就整理出来供小伙伴们参考,没准哪天就能用得上呢。之前在
2020年9月8日
其他

一口气说出 OAuth2.0 的四种授权方式

简单理解就是一种授权机制,它是在客户端和资源所有者之间的授权层,用来分离两种不同的角色。在资源所有者同意并向客户端颁发令牌后,客户端携带令牌可以访问资源所有者的资源。OAuth2.0
2020年7月7日
其他

开源项目迈出第一步,10 选 1?页面模板成了第一个绊脚石

早前在粉丝群里说过,想要从零开始开发一个开源项目,这个项目的目的很简单:新人可以练手,一步一步搭建项目,把时下流行的技术整合进来,在用这些技术的特性来实现具体业务功能,而对于有经验的老鸟可以把自学的技术在项目中得以实践。在这里插入图片描述琢磨了挺长时间,前段时间工作比较忙、家中事情也比较多,导致最近才着手弄。感兴趣的同学可以关注一波,项目进度可能会缓慢,但脚步绝不会停止作为一个后端程序员,虽然平时也会做一些管理后台的页面,可那都是本着能用就行的原则,美观都是次要的。但项目要对外开源这可是门面,不美美哒多没面子,所以选一个酷炫的页面模板成了首要任务,选了10个模板出来,大伙给参谋下。1这是一个基于Bootstrap4.1.3,响应式后台管理模板,自适应分辨率,兼容PC端和移动端,全套模板,包括仪表盘、小部件、UI元素、按钮、日历、范围滑块、时间轴、发票、用户、邮件收件箱、邮件撰写、图标、基本表格、表单、图表、地图、轮廓、定价表、注册、登录等HTML后台模板页面。2一款基于
2020年7月2日
其他

我也没想到 springboot + rabbitmq 做智能家居,会这么简单

前一段有幸参与到一个智能家居项目的开发,由于之前都没有过这方面的开发经验,所以对智能硬件的开发模式和技术栈都颇为好奇。智能可燃气体报警器产品是一款可燃气体报警器,如果家中燃气泄露浓度到达一定阈值,报警器检测到并上传气体浓度值给后台,后台以电话、短信、微信等方式,提醒用户家中可能有气体泄漏。用户还可能向报警器发一些关闭报警、调整音量的指令等。整体功能还是比较简单的,大致的逻辑如下图所示:但当我真正的参与其中开发时,其实有一点小小的失望,因为在整个研发过程中,并没用到什么新的技术,还是常规的几种中间件,只不过换个用法而已。技术选型用rabbitmq
2020年6月21日
其他

看了 100多份简历后,想给找工作的程序员几点建议

送给小伙伴们。关注公众号回复【666】自行领取。和一些小伙伴们建了一个技术交流群,一起探讨技术、分享技术资料,旨在共同学习进步,如果感兴趣就加入我们吧!往期精彩回顾一口气说出
2020年5月29日
其他

面试官:不会看 Explain执行计划,简历敢写 SQL 优化?

:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html#jointype_index_merge总结上边只是简单介绍了下
2020年5月20日
其他

10个 解放双手的 IDEA 插件,少些冤枉代码

送给小伙伴们。关注公众号回复【666】自行领取。和一些小伙伴们建了一个技术交流群,一起探讨技术、分享技术资料,旨在共同学习进步,如果感兴趣就扫码加入我们吧!往期精彩回顾我司用了
2020年5月14日
其他

我司用了 6 年的 Redis 分布式限流器,可以说是非常厉害了!

spring.redis.host=127.0.0.1spring.redis.port=63794、配置RedisTemplate实例@Configurationpublic
2020年4月26日
其他

redis 分布式锁的 5个坑,真是又大又深

poolredis线程池已经没有空闲线程来处理客户端命令。解决的方法也很简单,只要我们细心一点,拿到锁的线程处理完业务及时释放锁,如果是重入锁未拿到锁后,线程可以释放当前连接并且sleep一段时间。
2020年4月22日
其他

一口气说出 4种 “附近的人” 实现方式,面试官笑了

英里。WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。距离的单位和用户给定的范围单位保持一致。WITHCOORD:将位置对象的经度和维度也一并返回。WITHHASH:以
2020年4月15日
其他

一口气说出 6种 @Transactional 注解失效场景

catch了B方法的异常,那这个事务还能正常回滚吗?答案:不能!会抛出异常:1org.springframework.transaction.UnexpectedRollbackException:
2020年3月19日
其他

面试被问分布式ID怎么办? 滴滴(Tinyid)甩给他

}8485}nextId、nextIdSimple都是获取下一个ID,nextSegmentIdSimple、getNextSegmentId是获取下一个可用号段。区别在于接口是否有返回状态。
2020年3月14日
其他

面试被问分布式事务(2PC、3PC、TCC),这样解释没毛病!

:务执行前后,数据从一个状态到另一个状态必须是一致的(A向B转账,不能出现A扣了钱,B却没收到)。Isolation(隔离性):多个并发事务之间相互隔离,不能互相干扰。Durablity(持久性)
2020年3月12日
其他

基于 Java 实现的人脸识别功能(附源码)

后台解析前端传过来的图片,提取人像特征存入数据库,人像特征的提取主要是靠FaceEngine引擎,顺着源码一路看下去,自己才疏学浅实在是没懂具体是个什么样的算法。
2020年3月7日
其他

为了不复制粘贴,我被逼着学会了JAVA爬虫

受疫情影响一直在家远程办公,公司业务进展的缓慢,老实讲活并没有那么多,每天吃饭、睡觉、逛技术社区、写博客,摸鱼摸得爽的很。早上本来还想在来个回笼觉,突然部门经理的语音消息就过来了。
2020年3月3日
其他

面试总被问分库分表怎么办?这些知识点你要懂

N))的切分方式比较常见,还拿User表举例,对数据库从0到N-1进行编号,对User表中userId字段进行取模,得到余数i,i=0存第一个库,i=1存第二个库,i=2存第三个库….以此类推。
2020年2月25日
其他

一口气说出 9种 分布式ID生成方式,面试官有点懵了

('values');当我们需要一个ID的时候,向表中插入一条记录返回主键ID,但这种方式有一个比较致命的缺点,访问量激增时MySQL本身就是系统的瓶颈,用它来实现分布式服务风险比较大,不推荐!
2020年2月16日