这是我朋友最近的一个面试问题:
您将如何处理用户在屏幕上输入一些数据并假设其中有 5 个在相同时间单击提交按钮的情况?*
(同一时间,面试官坚称它们是纳秒级的)
我的回答只是使处理请求的方法同步,并且在给定时间只有一个请求可以获取该方法的锁。
但看起来面试官一直坚持有一个“更好的方法”来处理它。
在数据库级别处理锁定的另一种方法,但我认为它不是“更好”。
有没有其他方法。这似乎是一个相当普遍的问题。
这是我朋友最近的一个面试问题:
您将如何处理用户在屏幕上输入一些数据并假设其中有 5 个在相同时间单击提交按钮的情况?*
(同一时间,面试官坚称它们是纳秒级的)
我的回答只是使处理请求的方法同步,并且在给定时间只有一个请求可以获取该方法的锁。
但看起来面试官一直坚持有一个“更好的方法”来处理它。
在数据库级别处理锁定的另一种方法,但我认为它不是“更好”。
有没有其他方法。这似乎是一个相当普遍的问题。
如果你只有一张网卡,你一次只能有一个请求下来。;)
他可能正在寻找的答案是
我更喜欢做的是让服务如此之快,它可以在下一个请求到来之前做出响应。;) 虽然我不需要担心 Java EE 或数据库的开销。
他们同时点击是否重要,例如他们是否都在更新数据库上的同一条记录?
同步方法不会削减它,特别是如果它是一个分布在多个 JVM 中的 webapp。同步方法也可能会阻塞,但是其他线程会在第一次完成后触发,并且您会丢失写入。
因此,在数据库级别锁定似乎是这里的选项,即如果记录已更新,则向第一次更新后服务的用户报告错误。
您不必担心这一点,因为 Web 服务器会在隔离线程中启动每个请求并对其进行管理。
但是如果你有一些共享资源,比如一些用于记录的文件,那么你需要实现并发并在请求和请求间对其进行线程锁定