一切福田,不離方寸,從心而覓,感無不通。

OSCHINA 问答合集[2]:我有一套高峰期每秒钟约有 1 万人下单的系统,遇到了关于 Java 高并发的问题

开源中国问答区新栏目“OSCHINA 问答合集”上线啦,本期收录了 5 月高热度的问题及回复(吐槽),希望能让你有所收获~!

本期问答合集收录的问题,动辄就是“千万”级别的场景,这让大家“面试造火箭”的那些本领终于可以有用武之地了。
而关于程序员职业生涯方面,有妹子问到“女生做架构师是否靠谱”,我们热心肠的 oscer 岂会袖手旁观?
不多说了,各位接着阅读大家的精彩回答吧~!

进入问答区:

你可以在技术问答版块畅聊技术
你可以在职业生涯版块寻道解惑
你可以在IT大杂烩版块和大家谈笑风生

我们希望:

这里可以成为一个能让大家有所收获的地方。因此,这里拒绝攻击、拒绝谩骂、拒绝无脑黑。
这里可以沉淀大家各种的技术问题。无论是新手的基础问题,还是高端玩家的资深问题,都是有价值的。
这是一个更纯粹讨论技术的地方,能给程序员提供一片友好交流的清净之地,不懂的可以在这里寻找帮助,懂的可以在这里帮助别人。

总之,

在这里你可以向所有人提问。
反正你的问题可能会没答案。;-)

==========分割线==========

开源中国技术问答

@飞扬的梦 :关于Java高并发的问题

我有一套系统,高峰期每秒钟约有1万人下单,平均每个用户下28件商品,系统延迟要求在30毫秒响应客户。
请问,我要怎样做才能保证库存不会超,重点是30毫秒内客户端就要响应。实测使用redis,如果集群的话,会导致库存超,不集群的话,redis没过一会就崩溃了,有时间数据会出错。
数据库用mysql的,写入没有太多的问题。现在主要问题是在redis性能上。

>>>@公孙二狗 
从问题来看,楼主应该经验不怎么丰富,但是能有这么牛逼的业务的公司,轻轻松松拿出几个亿来开发这种项目应该不是问题,大把的人才,怎么可能到论坛找方案呢。

>>>@Storm-Cai 
这个问题归根到底还是库存控制。下单过程、查商品校验啥的都没问题,redis集群能解决问题。
库存保证如果需要时间响应优先,则可以采用redis集群中原子操作,每种商品做一个k-v的库存数量,下单该商品就库存减1,如果28件商品需要写28次redis,可以并行去写。库存数量以redis中为准。

追问:公司上一代架构是这样做的,但是redis性能上限,导致每秒最多只能28万订单入库。现在改了架构了,不过变成单机版的。我在寻找一下,既可以集群高可用,速度又快的方案。

哦,看明白你的意思了。你是说即时采用库存数量全部放redis,每个redis实例存一个商品库存,一共28个商品实例,一秒也只能有28WTPS?可以这样,采用内存分区数据分段校验。以上是说,不存redis了,你项目不是集群的么,跑多少个实例,库存就分多少片。假设商品库存10000个,你跑了四个服务,那么每个服务就只能下单2500个成功,前端负载均衡策略采用轮询。

这样的方案你来多少都没啥问题,前提是预先要把库存设好,在启动抢购这类活动前,要保证每个服务进程内数据都对,不然会导致库存对不上。

假设商品A有库存10000个,你跑了四个服务,进程内每个库存数量就是2500个,采用原子递减去减库存。异步同步数据到数据库就是了。这种方案也是我采用的方案,效果杠杠的。有个不好的地方就是活动进行中服务绝对不能宕机………..

>>>@keepthinker 
采用Redis Cluster或自己搭建逻辑集群(自己做key哈希分散到不同节点),采用计数器分片(Redis incr操作),假如分片100个,总共100w个商品,那么每个分片计数器最大值为10000,假如有进程计数器对加1后超过最大值则认为没库存,一个redis 8W TPS,假如计数器平均分散到每台Redis机器,就能最多支持100 * 8W TPS的分布式计数器,Redis数量越多,那么就能无限逼近800W TPS。

对于这种写入峰值高的订单入库要求,那么当然得采用高可用队列进行削峰限流写入MySQL数据库。

>>>@Chet_W 
hash分散,将不同的商品和交易信息存在不同的redis

>>>@抢小孩糖吃 
应该做流量控制,通过流量控制分散库存请求到具体的Cache,并对竞争做队列处理,消耗库存。多一步流量控制解决具体导向哪个队列服务,降低多节点对单一Redis的竞争。

@emo奋斗 :我有一个打击物流、电商假货的app思路,请大神们提提意见

1.每个产品生产出来自动生成一个独立二维码;
2.如果有包装,每个包装(单个或集合包装)也自动生成独立二维码;
3.打包(单个或集合打包)或者拆包时对包装和产品进行关联或者解除关联;
4.产品每到一个环节的关联或解除关联,通过二维码记录时间、地点(精确定位)、主要动作(流转、打包、拆包)、关联主体;
5.每一次关联都对每个app中已记录信息进行更新;
6.下一各关联主体关联产品必须获取上一个关联主体的授权;
7.流通环节关联主体均必须获得首端主体的授权方可注册,终端环节具有查询权限,可获取所有产品流通关联信息;
8.只要保障首端不出问题,保证所有被授权流通环节出货均为正品。

>>>@程序猿猴 
产品溯源系统, 你本质就是解决信任问题,这正是区块链解决的问题。
随之带来的就是复杂的操作流程和高昂的成本。
如果产品要溯源的话,这个问题就复杂了,比如说一件衣服的溯源吧:
1. 涤纶/棉原料溯源
2. 涤纶/棉制作原料溯源
甚至还要往下追溯好几层,成本可观

现在物流体系的各个系统其实监管都还比较严格,想要造假需要几个部门的联合操作,一个物流系统可能由:omc,tms,wms等系统组成,如果想调换一个货物,则需要仓库工作人员和系统操作人员联合操作才能实现。

>>>@苍暮之星 
这一套方案可行的前提是没有内鬼,这个只能防外人,不能防止业务流上的工作人员舞弊。而这套方案偏偏又是防内鬼的,不然谁能够在物流途中更换商品?没有可行性啊。再说了,像顺丰等成熟的物流体系,人家内部本身就有这类制度,甚至有时候会故意在包裹里塞上标识物,现在出问题的都是收件环节和发件环节,也就是最小的收发点会出这种换货的可能性。

追问:从生产出来已经开始读取产品信息了,并且每个环节的有效读取和非有效读取都是有记录的,而且有效读取信息需要专门授权。至于最后的销售环节,存在掉包产品的可能性,不过正常来讲,只能通过销售代理单位销售。所以,一方面从非代理单位购买本身就难以避免假货;另一方面,流通信息可随时记录、查询,一物多卖很容易被查出;再者,在以上两个条件下,最后销售环节更换商品的代价太大,会被取消资格。

>>>@飘摇清风 
感觉像类似mes的应用,人工、管控成本过高,从成本上考虑不一定能行。不知道您是否知道用假的400电话验证假货的防伪码,一条龙服务,价格也不高,别指望每个人都会去官网验证。

追问:主要的问题是,信息关联共享。400验证码是可以复印的,这个你复印下来,只要扫描就知道流向。这个我想是适用于稍微高端的产品,买个棒棒糖就不至于了。而且,在我看来没有什么运营成本

运营成本只是成本中的一种,而我提到的人工成本不只运营人工,还包括生产人工成本、仓储人工成本。对于高附加值产品可以忽略这点成本,而对于那些低附加值的,搞这套东西只会死得更快。 我举的400例子只是想说,对于量大、火爆产品,只要利润够高,造假者能生生模拟出一套验证机制,这样你这个追溯机制直接就能跳过了。 所以说你这机制书面意义比较大,实用性还需要再研究研究。

@Death黎明 :除了spring我们还有什么?

最近在公司修改了几个旧的项目,发现这几个旧的项目都没有使用任何的框架,这对长期使用spring的我感觉到十分的吃力,艰难的完成任务后心中浮现除了这个问题:

    除了spring我们还有什么?

spring可以极大的提高我们的开发效率,这使得在培训班出身的我的眼中spring几乎成为了java的代名词。
我感觉这很不对劲,希望去学习一些可以抛开spring的东西,希望大家给我些建议。

>>>@很拽De土豆 
现在主流的java web框架,一套是以servlet为标准的spring,struts,jfinal等框架,目前主流基本都是这个。还有其它的比如actframework,playframework等无servlet的框架。
如果你使用java的话,基本离不开这2种类型。如果抛开spring的话,你可以选一种你自己喜欢的类型,自己封装一个简单的框架,理解学习,比如你可以看看smartframework,它从无到有讲解怎么写一个简单的java web框架。
以上我只用过spring和struts,其它的没用过,但是多少自己要了解一点。希望可以帮到你。

>>>@清靜無虞 
你做任何语言体系下的软件开发,不都是在使用别人提供好的api么?你说你不用第三方的spring,或者说你第三方的啥框架都不用,那你还不是在使用java本身提供的api,像java.util、java.math等。那你告诉我,你使用java.util和使用org.springframework下的api有什么本质的区别么?你要真不想用别人写好的api,想全部自己写,那你连官方api也自己写呗,完全自己建立一整套体系嘛。

So,我的问题是你首先告诉我你使用java.util和org.springframework下的api的本质区别在哪里?

>>>@魂祭心 
一直做web当然接触的比较多的都是spring这些了,如果项目大些还会有很多其他的组件可以学习使用,如果项目小那可能就只有spring+数据库了。
可以看些其他组件的开源组件,orm实现,消息中间件的,数据库的,很多很多了。

@tianyawangyou :千万数据量排序后,分页展示,怎么快速响应?

数据库表的记录在千万级别,需求就是,根据页面的过滤条件,过滤出数据,然后根据不同的排序规则,排序后,分页展示。SQL大概如下:

 

现在的问题是:

根据条件,ca和cb过滤后,数据量也在100w左右,排序条件是可变的,可以是oa,ob,oc,这样数据库排序,就要花好长时间。索引是ca和cb的联合索引,但是只对数据过滤起作用,排序还是非常的慢。
因为是要放在web端展现,所以响应需要很快才行,这种问题怎么解决?
退而求其次,如果实在无法做到实时排序,定时的预处理排序,也是可以接受的,问题是有哪些比较好的可行方案。不限数据库,求大神指点

>>>@节节草 
过滤条件及排序规则固定的情况下,建议使用redis的自带的排序功能,将数据ID存储,翻页仅从redis中取对应数量的ID,然后通过这些指定ID去数据库查询。这样基本能实现实时查询。当然,数据库数据有增删的时候,redis中存储的ID排序集合也得增删。

既然你考虑过定时预处理,那么,需求方面应该也能控制过滤条件和排序规则固定,如果这两个不能固定,那么定时预处理也就无从谈起了。

追问:过滤条件组合比较多,这个是硬需求,暂时没办法 我的思路是,根据排序字段oa,ob,oc,定时预处理,把数据排好序,存3份,存在一个地方,然后查询的时候,只需要根据查询条件,从头到尾,筛选数据就好。问题就是排好序的数据存放在哪,数据库能保存这种顺序吗,还是说,只能放缓存,自己来实现筛数据?

放缓存吧,最好缓存中只放唯一索引值,不然千万级数据全部放缓存,对内存消耗也挺大。
假设索引ID为int型,int占4个字节,一千万个int也得三四十M,建议不要把全部数据放缓存。

>>>@独孤晓琳 
建立索引,先去哪数据的主键id在去inner join 本身表获取行数据!

追问: 先筛选id,再去join 数据,这一点,非常赞同,也打算这么改,但是索引怎么建? where的字段和order by的字段是不同的?这个怎么解决

做个联合索引

职业生涯问答

@Java高级在中国,有多少程序员干到40了?那么其他人去干什么了?

>>>@haitaosoft 
客观条件限制 其中的大多数人 无法在一线继续干下去了

个人干(如ios热门时,接相关活)基本不受此限;已经做了经理、总监、老板,只为爱好或不生疏而编程,也不属于本话题(他们的数量相当少,毕竟管理位置是少数的)——这些只有5%-20%吧

年过40(因 人个人条件及外部环境不同 而异,应该说 30-45),继续奋战编程一线,是有一些客观限制

1、新技术,可能更容易掌握,也可能更看不上眼,也可能学习的动力少一点,也可能真的学得慢一些了
2、加班,持续加班肯定是不行,身体和家庭限制
3、工资要求高了:毕竟阅历多了,不容易被老板的情怀所骗,家庭的经济压力也明摆着
4、大环境要求系统能糊弄就行,赶时间完成 重于 系统精良。所以 能加班、多熬夜、即使经验不太足 的年轻人对于老板更有用,销售比技术更有用
5、大环境差,公司、老板难以有百年打算,不考虑 经验、技术积累,靠关系接到单最重要
6、家庭亲友的世俗看法:年纪这么大了还是个大头兵!同行也有讽讥:只会干重复的复制粘贴,所以才一直在一线、最底层

>>>@李太浪 
DADI做程序员有6年,从最开始没日没夜的敲代码,到后面的自己创业,中间花了4年,创业已两年有余。

从12年入行开始,DADI到第一家公司的时候进入了一个项目组,针对于航空业务的一个后台管理系统。项目组有架构师,有项目经理,测试等人员,配置非常齐全。因为刚进项目组,经常会有些问题会请教架构师和项目组的同事。一来二去跟架构师也越来越熟了(后面也找过DADI一起去创业,他没开始,DADI却开始了),他30多岁,跟DADI一个省的,看着他DADI好像看到了自己以后的样子,在心里大概的盘算了一下他现在的职位,社交圈资源,感觉离达到创业的目标还有一点距离。DADI想自己的职业规划也应该做出适当的调整了。

所以他做了这样的规划:第一步进阶是深挖技术,然后是项目经理。DADI在做技术期间非常的努力,保持对技术的热爱,因为技术是他的硬实力,哪怕以后创业失败还有个生存的技能。

前面一年多DADI每天晚上基本都是在学习新技术,熟悉各种项目中度过。这个时候有一个机会让他来做一个项目的基础架构和数据库的设计,因为不是一个很大的项目,就不需要架构师出马了,从码代码过渡到了基础建设,中间也遇到了各种问题,还是找架构师一起慢慢帮忙解决了。

在做这个项目的过程中,他已经准备好后面要转项目经理了,DADI梳理了之前的项目经理管理项目的流程和方法,自己在网上也学习了项目管理的一些知识,决定找部门老大谈一谈转岗的事情,希望有机会给一个项目让他带,没想到部门老大对DADI还是挺认可的,也答应了给项目DADI带。两个月之后有一个项目下来了,是一个航空公司的旅客投诉管理系统,部门老大通知DADI一起去跟客户方见面,做需求调研。做调研要了解一些那个行业相关的知识更好,DADI针对技术可行性和自己不懂的地方提了一些问题,整个过程DADI没说太多,都是跟这老大在学习。

然后DADI算是入门做了项目管理的一些东西了,里面的道道还是很多的,包括客户关系,需求,项目成员,工程质量,时间,人力成本等各方面的管理,把这一系列的东西串联起来。跟客户怎么沟通,跟项目组成员怎么沟通,组员有情绪怎么办,需求变更了怎么办。一个项目下来DADI也成长了不少,不再是一个纯技术思维去看一个项目了。

3年多的时间让DADI在技术和项目方面都有了一定的成长,他觉得他需要新的突破。

这个时候之前的那个架构师,另外一个项目经理的同事,还有一个朋友介绍的朋友都跟DADI说想找他一起创业,但是DADI觉得现在还不是时候。那几年的APP非常火,很多人凭一个想法就拿融资创业了。DADI觉得下一步创业应该是在互联网产品方向,所以他的下一步是去做产品的互联网公司。

DADI离开了工作3年的公司,来到一家做互联网金融产品的公司做技术经理和项目管理,对接产品经理和IOS,Android还有后台同事,期间看了人人都是产品经理和学习了一些运营的基础知识。做这个产品期间之前那个项目经理的同事告诉我,他有个项目要做售前工作,让我跟他一起去谈谈。DADI想着这个也可以学习学习,就跟着一起去了。项目谈完了之后他又跟DADI说起了创业的事情,说想一起开公司,DADI占10个点的股份,刚那个项目已经快要拿下来了。

DADI之前已经规划过自己创业的时间,其实是在两年后的,现在觉得时机也差不多了,各种项目做过了,产品也做过了,可以试一试自己积累的这些东西了。技术还只有DADI一个人,他通过一个多月的业余时间完成了第一个谈成的项目,是一个纯后台的项目,这个项目的成功让彼此更有信心了,开始组建公司,招兵买马。公司注册下来后DADI果断的从之前公司离职了,开始了艰苦的创业之路。

创业中间的艰苦创过业的大家都很清楚了,老板心态和员工心态是完全不一样的。创业过程中把DADI变成了一个打杂的技术总监兼副总,公司短短几个月就招了快20人,APP产品外包也接了好几个,多个项目并行让DADI非常的充实有干劲。

创业2年多,APP产品慢慢少了,DADI及时调整了方向,从17年开始转战小程序市场,也成功了几个项目,小程序的项目价格却远远没有APP那个高,公司也进一步的缩减了人员。

DADI在创业过程中学到了很多,接触的人也非常广泛。通过创业总结了很多运营和业务的经验,也系统的学习了运营和业务方面知识,一个公司前期靠业务和运营驱动是非常重要的一步,DADI觉得下一个目标是成为运营总监,Ta的征途是星辰大海!

@Sharon-jie :女生做架构师靠谱吗?有没有前辈给点意见?

我是一个女生,做java后台的,后期想要做架构师,但是女生在这个行业可以长久的走下去吗?
我看的大牛差不多都是男生(目前还没有见到过女生),可能是我见识太少,就想问问大家,女生在这个行业大概可以做多久开发,转架构的话,那些公司可以接受一个女架构师吗?还是有更好的建议.

>>>@Java6 
架构不仅要对技术总体把关,还要能熟练于技术实现。它是长期工作技术积累所成。架构还涉及到具体业务系统,有些业务系统需要有资深的行业背景的专业人士参与协同,才能充分考虑业务系统特性,拿出最优方案。

>>>@guyezhai 
关键不在男女,而在于架构师不是想转就能转的。我觉得“转”架构这说法不恰当,应该是“升级”成架构

>>>@nullref 
很难。
我见过一些妹子开发,共性是都不爱看书。也不能怪妹子,大多数男码畜也不爱看书。毕竟人家在玩的时候,你要坚持每天看书一个小时是很需要勇气的。工作前三年保持每天1个小时的阅读量,一年系统的看15~20本书,构建自己全面而富有深度的技术体系,工作3~7年这段时间保持总结反思和阅读习惯。

以上要求90%的码农做得不合格。

>>>@巴林的狗尾草 
建议转职。
不是要打击谁,这个实际是个比较社会的问题,如果技术不好,做架构师连自己的研发人员都威不住,你的架构怎么执行呢?所以过硬的技术是架构的前提,然后是深厚的行业知识,这两个方面已经需要一个人十年八年的沉淀了,还要有掌控力,影响力等一系列能力,最坑的是想学好技术,很多人的性格可能是缺失的,不建议女生往这个方向发展。

>>>@3535yy 
靠谱,不是能不能的问题,是你想不想的问题,又不是什么需要运气的事儿,结婚后身心全扑在孩子身上,我觉得带孩子是两个人的事儿,男女平等,家务也该平等,反正我是不会全扑在孩子身上。三岁以后可以直接幼儿园了就。

@HappyFan :30岁的IT男,技术一般,多而不精、杂而不纯,上有老,下有小,该何去何从

30岁的IT男,上有老下有小,坐标北京,在京有房有户口有贷款,普通大学硕士,工作5年,在编程技术方面提升的很慢,公司也封锁技术,让我们使用公司的库,通过配置和写很少的代码完成业务,而我们却看不到库源码,我目前的工作种类多而杂,主要有 服务器(做Raid),网络,虚拟化(ESXI,vSphere),各种数据库(redis,mongodb,hadoop/cdh,mysql)的使用和封到库中的api编写,shell脚本(自动安装我们的业务软件),C、C++等等。但没有一样精通的,甚至说没有可以很自信的用来养家糊口的技术,目前比较迷茫,不知道应该怎么办,是选一门技术继续深造(继续深造就必须要离职,否则永远得使用公司的库来写代码),还是仍然这样广泛的接触技术和业务(轨道交通)方面的知识,来提升自己。
请问大家,我该如何选择呢? 以目前的状况,更适合做什么呢?毕竟30了,上有老下有小,不能轻易换行或者裸辞

>>>@幽烛 
职业倦怠期~~~好好充电,远离安逸!不试试都不知道自己有多牛逼!!

>>>@沙发迪 
1. 找个稳定的集团大公司一直干,有技巧的干,基本到后面也可以混个副总什么的
2 .找个更注重业务和商业创新模式的创业小团队加入干(周期两年)
3. 在资金充足,人脉相对广的情况下,慢慢自己干最少三年起步(这条路异常困难,但是回报也很丰厚,做自己最擅长的也许是外包,接单)

我今年比你大一些,37,如果你现在有房贷,有老婆,有小孩,建议你找一个大型集团公司去做,不管在怎么有追求生活还是要继续。如果你还没有那么恭喜你,你还有3-5年时间可以折腾,要不做技术大牛偏向技术,要不偏向管理。赶快做决定吧,时间很快就没有了。我只能帮你到这了!

>>>@空手劈空调mk2 
架构师不适合,反而是全栈工程师这种比较适合你。
其实要在精度上提升要求也很多,学历,知识累积,机遇。
如果无法从精度上获得提升,不如试试广度上?我就是做了3年JAVA,然后又去做了3年C#,之后做了ruby和python,现在对这四种语言都能得心应手的单独完成项目。

关键点还是要脱离舒适区,尤其是还年轻的时候,哪怕上有老下有小。

>>>@极跃 
既然都到开源社区来提问题,为什么不自己开发一个开源软件呢?看自己喜欢哪个方向,自己往哪个方向专精就行,不要管太多其他杂七杂八的原因。找到方向,往前走就行。比如想学人工智能,那就从零开始学习走起。为什么不可以在当前工作的情况下,学习其他的呢?

@蓝水晶飞机 :如何看待公司内自主开发的项目,推广却被冷冷的对待?

楼主在一家年销售4个亿的定制家居企业上班,负责公司内部项目的开发,从原型、技术选型、文档、前后端开发、维护都有做。
需求首先都是经过构思和原型进行设计的,通过原型来跟需求方进行确认,确认通过之后才开始进行分析、写文档、再然后进行数据建模和编码。
就这样一个从 0 到 1 的项目诞生了,开始内测局部上线,一个月后却用不起来,他们不习惯用或者他们不愿意用。
这个情况发生,难道少数人的决定能影响我的命运吗?

做一个项目负责人兼产品真的不容易,要具备太多的知识和能力,我,这些都是有所欠缺的。

当初内部按原型的拍版呢,说好的呢,上线情况却不理想。
我想,一大原因就是没有 APP,另一个大原因就是他们不愿意走流程化的业务系统,被广大的通用型管理系统惯坏了。
以前的旧系统那么落后还用得极好,不愿意接受新系统(出自我手),说好的奖金推了推。。。

即将何去何从,还看领导如何协调处理问题。

>>>@117 
迁移是要成本的。应该是逐步改善。而不是一次性就跳转到新系统。谁敢保证新系统就没问题?谁敢保证新系统流程就一定比老系统好?不考虑人的使用习惯,学习成本。
对于自己开发的系统,都是自我觉得是最好的,至少比老系统好。实际情况是,迁移到新系统的风险成本太高了。
我都做了接近10个项目了,真正用起来的就2个。找谁说理去?  习惯就好了

>>>@魔力猫 
这难道不正常吗?需求确认那种东西有多少用处,稍微经常开发的人都知道,最多是有个初期概念。和现实估计差十万八千里。用不起来不要怪业务,而是你们设计的东西,根本就不符合业务。
确认需求的不是业务,实际干活的才没时间和你们扯皮。更不用说当时的业务和现在业务没准变了180度。
另外最后的抱怨暴露了真正的怨气所在,不是系统好坏,而是没奖金。

>>>@小小程序员 
推广新系统不是这样的,而应该先将系统完全做成老系统一模一样,待所有人切换到新系统后,停掉老系统,然后逐步从不显眼的地方改变,这样不用也得用,因为旧系统已经没了。前提是架构要设计好。

>>>@AlanShi 
少年,在大的公司里要做新系统,你做事之前得先搞定人的问题,然后再去想办法推动,至于说做出来的东西怎么样,还是另外一回事,你对这方面了解得太少了。
而对于推动,理应是集一群人推,而不是强推,看准一些可以下手的点顺势去推就好,强推这种事情一般发生在大老板的决策从上到下的做法,而不是你的做法。

@terry_nie :IT行业中相对较高收入工作和稳定工作,你会选那一个?

>>>@回去干活 
躺着收钱。

追问:躺着收钱的,那是女人。男人怎么躺?

>>>@gitOpen_1 
反面躺着

你也希望自己的提问/回答上榜?欢迎大家前往>>>技术问答区,多多提问,多多回答~!
遇到技术问题,就上开源中国问答区

 

from:https://www.oschina.net/question/2720166_2281581