当前位置: 代码迷 >> 高性能WEB开发 >> 一道面试题,该如何解决
  详细解决方案

一道面试题,该如何解决

热度:154   发布时间:2013-11-11 14:02:17.0
一道面试题
mysql 5.6
现有如下场景:
 某一时间内,指定的表会被多个线程操作,每个线程都会更新表中的一部分数据。更新哪一部分数据,由用户的选择决定。就线程安全或数据库的角度,可能会出现什么问题。
 
当时回答这个问题之前,聊到了尽量少的锁表,可以提高性能。

------解决方案--------------------
这样回答估计没戏了吧
------解决方案--------------------
更新前,把所有不更新的数据,作为where条件,放到更新的语句里面,这样应该避免并发。做的事网站开发,线程这块接触的少
------解决方案--------------------
引用:
 某一时间内,指定的表会被多个线程操作,每个线程都会更新表中的一部分数据。更新哪一部分数据,由用户的选择决定。就线程安全或数据库的角度,可能会出现什么问题。


个人觉得,这类开放式命题,如果能设法跟面试人交流起来会比直接自己说一堆更合适些。

另外,听你的说法,显得你只是知道大概性理论;既然是更新就一定会锁表,所谓尽量少锁表就太空虚了。

还有,他问的问题是可能会出现什么问题,那么你至少要设法举点例子出来,设想出能出现问题的场景。


比如:
◎ 假定两个线程同时取出表中某行记录,进行计算后再更新进去;然后要怎么避免。
◎ 假定线程A取出记录X(ForUpdate)然后准备更新记录Y,而线程B则取出记录Y(ForUpdate)然后准备更新X;然后要怎么避免。
面试官估计是想看看你能举出多少例子,以及你沟通分析的逻辑请,来看看你能力情况。
  相关解决方案