• 架构面试题



    第一题作答:
    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的值。

  • 相关阅读:
    Java工作中常用到的工具
    得到区块链直播记录
    如何高效的解决问题
    pgsql数据库应用两点注意
    flask如何使模板返回大文件,又不消耗大量内存
    python内存诊断
    pycharm整体缩进的快捷键
    gdb生成的core文件位置
    gdb源码安装,指定使用的python版本
    gdb源码安装过程中的问题:no termcap library found
  • 原文地址:https://www.cnblogs.com/gispathfinder/p/9271283.html
Copyright © 2020-2023  润新知