多人预定会议室?

面试题分类: Java多人预定会议室?
gxh asked 1年 ago

面试遇到的,大概题意:会议室一般整点或半点预定,比如预定10:30到12:00,怎样设计系统实现预定会议室这个功能?(设计数据库表,考虑多人同时预定的情况)

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 多人预定会议室?

FavoriteLoading添加本文到我的收藏
2 Answers
wlqswp 管理员 answered 1年 ago

一开始想的是五个列, starting time, ending time, day, month, year.  对day, month, year, startingtime复合索引 , 每次预定找出指定天的全部预定 where day=d and month=m and year= y order by starting_time, 然后结果存到一个数组里面, 用类似插入排序的(或者binary sort)的算法,根据starting time的比较, 找到要插入的位置, 然后取出要插入位置的前一个元素和后一个元素。 看看当前元素的starting time 是不是小于前一个元素的 ending time, endingtime是不是大于后一个元素的starting time, 是就报错不给预定。 但是这样的话有可能多人预定检测的时候用内存算法检测的时候都没有预定冲突,然后大家一起存的时候就可能冲突了。 
 
设计改为: 假设每次至少预定半小时,所以数据库的列改为 period, day, month, year.  period的值是0-47, 分别表示一天每个半个小时的UNIT, 所以10:30到12:00会生成3个记录也就是 period 的值是21,22,23, 我们只要对period, day, month, year 加多列唯一索引约束就可以杜绝预定冲突的情况了。

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Answer for 多人预定会议室?

FavoriteLoading添加本文到我的收藏
wlqswp 管理员 answered 1年 ago

一开始想的是五个列, starting time, ending time, day, month, year.  对day, month, year, startingtime复合索引 , 每次预定找出指定天的全部预定 where day=d and month=m and year= y order by starting_time, 然后结果存到一个数组里面, 用类似插入排序的(或者binary sort)的算法,根据starting time的比较, 找到要插入的位置, 然后取出要插入位置的前一个元素和后一个元素。 看看当前元素的starting time 是不是小于前一个元素的 ending time, endingtime是不是大于后一个元素的starting time, 是就报错不给预定。 但是这样的话有可能多人预定检测的时候用内存算法检测的时候都没有预定冲突,然后大家一起存的时候就可能冲突了。 
 
设计改为: 假设每次至少预定半小时,所以数据库的列改为 period, day, month, year.  period的值是0-47, 分别表示一天每个半个小时的UNIT, 所以10:30到12:00会生成3个记录也就是 period 的值是21,22,23, 我们只要对period, day, month, year 加多列唯一索引约束就可以杜绝预定冲突的情况了。

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Answer for 多人预定会议室?

FavoriteLoading添加本文到我的收藏

return top