架构面试题


第一题作答:
1. 数据结构如下
1)用一个循环链表来存贮终端(Agents)向服务提交的发送通知请求,其数据结构如下

public class RoundLinkedListNode {
     private string id;
    
     private int notificationTotal;
    
     private List<Notification> notificationList;

    private RoundLinkedListNode  nextRoundLinkedListNode;
}

public class Notification {

   private string message;
   
    private boolean sended;

}

2)用一个循环链表的引用指向循环链表的头部
RoundLinkedListNode roundLinkedListNodeHead;


2. 当有终端(Agents)向服务提交发送通知请求时,根据该终端的id值,在循环链表中查找是否有节点(RoundLinkedListNode)的id值与该终端(Agents)的id值相同,
1)如果有相同的,则根据发送的通知请求来构建一系列Notification对象,然后放入到找到的RoundLinkedListNode.notificationList中,并更新RoundLinkedListNode.notificationTotal信息;
2)如果没有相同的,则构建新的RoundLinkedListNode节点,放入到循环链表的尾部。
并返回信息给终端(Agents),提示已在处理发送通知的请求。

3.每间隔10s,
1)向循环链表中的所有终端(Agents)发送通知(可采用websocket技术),告知其各自的当前发送进度,发送进度为:
RoundLinkedListNode.notificationList(sended=true).length / RoundLinkedListNode.notificationTotal;

2)从循环链表roundLinkedListNodeHead指向的节点(currentRoundLinkedListNode)中取出一个Notification(其sended属性为false),
并将循环链表roundLinkedListNodeHead指向当前节点的下一个节点(currentRoundLinkedListNode.nextRoundLinkedListNode),
再从中取出一个Notification,又将循环链表roundLinkedListNodeHead指向当前节点的下一个节点(currentRoundLinkedListNode.nextRoundLinkedListNode)。。。。。。,
这样依次取出10个Notification,将这10个Notification发送给第三方框架完成通知操作,并设置这些Notification.sended = true;

4. 在从循环链表中取Notification时,如果发现RoundLinkedListNode中的Notification已经取完了,则将其从循环链表中删除掉。并通知该终端(Agents)所有通知请求已发送完成。


第二题作答:


1.主要应用localStorage将列表在客户端进行存贮,其数据结构如下:
PendingInterviews = Id,District,Job Title,Time Schedule;Id,District,Job Title,Time Schedule;Id,District,Job Title,Time Schedule......
ScheduledInterviews = .....
PendingVolunteerEvent = ....
........

2.当用户展开显示一个列表时(如Pending Interviews,假设一次显示的数据条数为7条),
首先从localStorage中取出key为PendingInterviews的值,
1)如果取出的值为undefined,则需要通过后端服务从数据库中取出一定量的(如700条记录)数据,
生成PendingInterviewInfo对象(含有的属性字段为:Id,District,Job Title,Time Schedule)的数组pendingInterviewInfoArray,
然后将该数组以示例的格式形式存贮在localStorage中,其key为PendingInterviews;
2)如果取出的值为非空字符串,则首先按;对字符串进行切分成记录,然后再按,切分出字段信息,最终组织成PendingInterviewInfo对象,并成数组pendingInterviewInfoArray。
然后从数组pendingInterviewInfoArray中取出前7条数据进行左侧列表展开的展示

3.当用户点击"Load More..."时,取出左侧列表当前展开的记录条数n,然后从pendingInterviewInfoArray中取出索引为第n到n+6的记录,
1)如果取出的结果为空,或其长度小于7,则需要通过后端服务从数据库中取出一定量的(如700条记录)数据,生成多个PendingInterviewInfo对象,
附加到数组pendingInterviewInfoArray尾部,然后将该数组以示例的格式形式刷新存贮在localStorage中,其key为PendingInterviews的值,
再又从pendingInterviewInfoArray中取出索引为第n到n+6的记录进行左侧列表展开的展示
2)如果取出的结果为不为空,且其长度不小于7,则将取出的记录进行左侧列表展开的展示。

4.当用户查询一条记录的详情时(点击左树列表中的一条记录时),通过后端服务从数据库中取出详情信息,并应用HTTP缓存(通过设置response中的header的页面缓存参数),然后再发送给客户端。

5.当用户对一条记录的详情进行了处理之后(点击"Actions"),则需要通过其id值,在数组pendingInterviewInfoArray中找到其对应的PendingInterviewInfo对象,
并将该PendingInterviewInfo对象从数组中删除,最后用数组pendingInterviewInfoArray来更新localStorage中的key为PendingInterviews的值。

原文地址:https://www.cnblogs.com/gispathfinder/p/9271283.html