平安某金所奇葩的面经-关于幂等和ROA设计的反思

在公司一直在做跟支付有关的项目,某日接到平安某金所一男子电话,应该是之前某猎头投的,我正好在吃早饭(也不能怪他们上班早,我们公司弹性工作制,我一般上班比较晚)。

因为饭馆信号不好,只能赶紧放下剩下的半碗馄饨(肉痛啊),走了一公里(那片移动信号真是渣)。

终于可以正常交流了。对方让我先挑一个项目说说,我一听这套路,牛啊!跟之前的阿里一样(以后找机会再聊聊那次面经),肯定是随机在我项目中找点来问了,那我就开始说,说到有个补扣款的场景,一开始设计每次客户端发差额过来,很难保证幂等性,后来设计让客户端发总额过来,幂等问题解决了。这里我重申下幂等定义啊,想必大家都知道了,就是对于一个操作,多次执行,副作用是一样的,而不是叠加的。比如我扣款,如果我无法分清客户端过来的差额是补扣还是重试,那么很可能多扣客人钱。

那么问题来了,总额模式为什么能解决问题?某金所面试官逮到机会发问,而且我注意到他的发问仿佛是循循善诱,告诉我,年轻人,你是不是不懂幂等啊,跟我这里乱讲,我知道的解决幂等的方案是不一样的喔!我当时没反应过来,觉得大牛应该不用我解释幂等吧,应该是在考校我,那么我就描述了一下场景,如果保险费原来是10元,客户端增加了10元,加一加,20元给我,那么即使这个20元给了多次,保险费还是20元不会变,是不是这个理?

然后奇葩的事情发生了,面试官开启教育模式,后面就一直是他在说,说我这个只是业务上的变动而已,并没有真正的解决幂等啊(我心想这怎么没解决幂等呢,从定义上来说解决了啊),然后又说,差额也能解决幂等问题啊,我就可以解决!我赶紧说,我也可以,就是用唯一的UUID策略,重发的话使用上次同样的UUID,那么我这边服务就不做处理落。他说,你知道为什么不说呢,这个才是技术上的正解啊,你跟我说业务上的东西干嘛啊,你说的根本解决不了问题,还是要用这方案才行。我说,这个是基础的东西,类似接口实现都会那么做啊,但是由于是老的协议,这个临时方案改动最小,也最经济。然后面试官沉默了一会儿,问我,你说说你在Java方面的心得吧,我说了一点,但是明显感觉他在敷衍了。后来就没有后来了。

说真的,这次面经真是让我深受打击,面试官到底是大牛呢,还是只知道背书的奇葩呢?但是,正是因为人家是平安某金所的总监(也许吧),我只是渣渣程序员一枚,这种地位差距导致了我对自己知识和经验的怀疑。

但是最近看到了大神Jim Webber的大作REST in Practice,我重新找回了自信心,其中介绍到HTTP的PUT方法是幂等的,为什么呢,解释是这样的(我直接打中文了),“由于PUT请求是幂等的(因为服务端状态被客户端状态整个地替代了),消费者可以安全地按照自己的需要多次重复该操作......”。

这里大神提到的其实是一种面向资源的设计理念(ROA),PUT方法实现对资源的更新,就像保险费,如果你把它看成是资源,那么每次就应该直接用新值替换(总额替代总额),而如果你把修改保险费本身看成一种操作,每次需要扣多少钱(总额减差额),那么就会破坏幂等,而我们现在大多WebService的设计都是基于操作的思维,为了实现幂等又引入一套复杂的机制,人为添加了复杂性。

时间: 2024-10-28 19:48:50

平安某金所奇葩的面经-关于幂等和ROA设计的反思的相关文章

游戏设计中的道德

最近一直在思考一些关于游戏设计方面的问题.入行已经两年了,以前跟所有刚入行的朋友一样,一直想着怎么从自己设计的游戏中赚钱.怎么让玩家为我的劳动成果买单.当然,我并不是说这样不好,因为只要形成一个良性的循环,优秀的游戏才会持续不断的出现,君不见,几年前国内还是有很多优秀的单机游戏的,但是由于破解的存在,以及中国人在几年前还有着"我都花钱买了电脑了,难道软件还要钱吗?更别提游戏了."这些众所周知的原因,现在中国的市场上已经很难看到新的优秀单机游戏的出现了,还好手游平台拓宽了国内的游戏市场,

《母子是生死之交》刷爆朋友圈,对付熊孩子霸凌要打碎权威效应

熊孩子霸凌并非批评教育或者以暴制暴能够解决的 <母子>一文得到了极大的关注,点击图片可查看全文 霸凌和开过分的玩笑当然有着本质的区别.所谓霸凌,是孩子世界里的权力不平等,"强权"的一方长期欺负弱势的一方.打闹玩笑,两方孩子都是兴奋快乐的:霸凌,则欺人者盛气凌人,被欺负者痛苦心慌,乃至精神失常. 出现霸凌,大家的第一反应一般是找老师,对欺负人的学生进行批评教育.但是,学校会不会积极处理暂且不说,欺负人的熊孩子从此会畏惧消停了吗?会不会过了风头卷土重来,变本加厉地报复老实孩子呢

Android子线程更新主界面

学习什么的还是要真正的有应用,有需求才能在最短的时间里面牢牢掌握一项技术. 今天就是这样的,产品一个需求下来,十万火急啊.然后之前只稍稍接触过,只能硬着头皮上了.最后牢牢地掌握了最简单的Handler技术,闲话不多说了! 每一个做android的人都知道,android的内存可谓是存M存金啊!然后我们自然知道,而且Google在设计的时候也充分的考虑到了这一点,所以,我们的UIThread里面一般不做耗时的工作,比如请求网络,比如执行一些比较耗时的逻辑,比如比如加载图片,比如,哦,暂时只碰到过这

夕拾朝花——我的2016

夕拾朝花--我的2016 走在北航的林间小道上,两边稀稀落落侥幸残留几片枯叶在冷风中瑟瑟抖动,北京 的冬日就是这样,异显凄凉. 我常想在纷扰中寻出一点闲静来,然而委实不容易.趁着圣诞的间隙,从快节奏的生活中偶得休憩.然而,新旧交替,身在他乡,心里总是这么芜杂.一个人的时候只剩了回忆,这种生活要算是无聊了罢,但有时竟会连回忆也没有,望着窗边熙熙攘攘的车辆无故惆怅. 回顾2016,着实过得太快了,快到我还没有抽空喘息,分析一下今年年初所定的目标是否完成,2017就让我触不及防.关于工作.生活.家庭与

不断地重新开始,是生命最基本的规律

保罗·奥斯特的小说<幻影书>的卷首,引用了夏多布里昂的一段话:"人不止有一次生命.人会活很多次,周而复始." 咀嚼了很久之后,我才明白了这段话的含义:人生不是太短了,而是太长了:人生没有一劳永逸,必须经历无数次的重新开始. 我的朋友M女士的生平,似乎可以作为这段话的注解.20年前,她从一所很普通的大学的美术系毕业,毕业前的聚餐中,这些豪情万丈的年轻人说,为什么不开个公司?大家立刻攒了一个设计公司,选她做头. 公司刚建起来,就听说有一件工程即将开始招标.她年轻.胆气豪,怕对方

疯魔余承东:四年间打造令苹果、三星敬畏的华为手机

摘要:这几年移动互联网在中国不断地发展,而且发展是势不可挡.移动互联网和移动设备相成发展,三星和苹果平分天下的局面终将会被打破.随着国内科技公司的不断成熟,国产移动设备也不断迈向一个巅峰时代.相继华为.中兴.魅族.小米.酷派以及不甘寂寞的老罗,他们势必会带给国产移动设备一个自信和创新.终有一天,中国创造也是会领跑世界. -----------------------------------------------------------------------------------------

LoRaWAN介绍 - LoRa从业者读这篇就够了

这篇介绍文章是用于团队内部培训使用,对部分内容做了删减后公开发出. 本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/ 本文是一篇LoRaWAN的科普介绍,你已经在朋友圈看过无数蜻蜓点水的LoRaWAN文章,是时候来一篇真正的技术干货了.本文先从横向介绍下LoRaWAN的背后势力和网络部署情况,然后纵向讲解了网络架构和具体的协议内容,帮助LoRa从业者系统地了解LoRaWAN协议. 1 LoRaWAN是什么 按照LoRa联盟官方白皮书<what

WEB开发中一些常见的攻击方式及简单的防御方法

WEB开发中一些常见的攻击方式及简单的防御方法 20151127 转载http://www.lvtao.net/dev/582.html SQL注入最常见的攻击方式,所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击. 跨站脚本攻击(XSS)跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取

网站文件夹结构

最近做一个项目,我是负责配合其他部门写静态页面,以及页面交互,他们自己部门有个设计,对静态页面不算特别熟练,但是也能写一些页面,只是稍微慢了点,昨天下午突然跟我说,他们管理让她把页面按照模块来整理,当时就觉得这是个很复杂的活,也没往自己的页面上想.今早SVN提交的时候,真心是好多冲突,好多奇葩各种的问题,跟他们自己的设计人员,聊了之后,突然觉得好无力.后来反思.真的是自己做项目的时候规划不够好,以至于,花很大的人力,来整理文件,还特别操心. 说说我参与开发的那个项目.挺大的,而且分好几个人开发,