职业经验 # 每日一道面试题 # 实现多线程并发的方式,并说明最佳方法,最佳方法?

mary for 求职面试圈 · 2017年09月30日 · 最后由 陈子昂 回复于 2017年10月01日 · 2380 次阅读

最近面了不少公司,职位测试开发。深感每家公司的侧重点不同。
某电商问题:实际场景,类似与双 11 的抢购,只剩最后几件货了,n 个人同时抢,如果这里多线程并发没处理好,会造成有人抢购成功,结果实际是没有货的。问,你了解的如果处理这种情况,及最优方式。
我一听,这就是多线程并发的处理。说了有 synchronized 方式,对在取总数的地方加上 synchronized。还有就是 lock 方式,加锁处理。问还有哪些方式,我就说了下一般都是互斥,临界量,实际其他方式不清楚。人家听了都不满意,说 lock 效率太差,体验性不好。还有么?我也憋了半天来个,设置总数 volatile,其实自己也知道,在这种情况下,volatile 是不行的,达不到数目同步的情况。可是真的不知道了呀!最优方式?听口气,对我回答的不满意。这个最佳方式是啥呢?
还有一个,简单描述下数据库索性的理解?
~不懂,只知道些 SQL 语句的用法。
然后,我们又针对项目自动化情况聊了聊,结束了面试。然后就没有然后了。

共收到 8 条回复 时间 点赞
  • 人家只是想让你谈对线程安全的理解和程序设计时应该注意什么,而不是考察你会不会用 sync 这些,比如,直接回答注意不要用线程不安全对象、不要写静态方法……性能不好,影响体验这种话估计就是托辞吧,只是因为你没答到人家心坎上……若真如此,不去也是对的,这样的面试官很纠结于自己设定的答案,不够 open~

  • 索引,值得每个 IT 从业者去深入研究学习一下,不过也不能说太多,碰到偏执狂把你问到底层算法去,就等于刨坑把自己埋了😂

槽神 回复

哈哈 小心驶得万年船

026 屏蔽了此话题:每日一道面试题,今天已经有发过了,所以暂时屏蔽 09月30日 15:52

想了想,如果是问题,我就说,把请求丢到有序队列里面,处理完一个并返回结果,再处理下一个,这样就妥了!!(不知道对不对,只是赶脚是这样,哈哈)

多线程的东西我都忘光了。。。。几年前还专门学习过一阵但一不用没多久就忘了。。。。。

线程锁 消息队列 业务逻辑约束…

假如只有一个服务端(一个端口)的话,那客户端发消息发到服务端,服务端只要一个一个地去处理就应该没问题,因为一般来说无论多少个客户端发消息给服务端,服务端的端口就只有那么一个,服务端只要按照协议,一个一个地去取消息就行了,但是这只适用于服务端和客户端之间只有一个业务的情况下
如果服务端和客户端有多个业务,服务端可以开一个线程 A,这个线程 A 按照协议把端口中的消息根据业务放到相应的池子里去,然后每个业务从各自的池子里去一个一个地取消息,处理完一个消息后,再去取下一个消息

对方问的,其实说到底你还不清楚电商秒杀的方案,你这样的回答肯定是被咔的

—— 来自 TesterHome 官方 安卓客户端

是说脏数据吧,不影响性能,就是后端在数量上写计数器,前端发起后缓存订单业务约束,后端计数器-1 后,回传前端。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册