涂鸦智能1面

涂鸦智能1面


1.自我介绍;

2.RIP-22和顺序消息多读写队列打散,有什么区别?
打散之后,对于一个queue也是单条单条的消费,RIP-22对于queue是分批并发消费,另外RIP-22做了消息分流(不需要保证顺序,就直接并发消费)。

3.消费成功,如何提交?
把阶段的消费进度提交到stageOffsetStore,stageOffsetStore只存储阶段的下标;比如阶段1为1-3,阶段2为3-10,阶段1的下标为0。

4.扩展的线程池,是如何维护的?
管理了2个线程池,1个线程池用于把消息转发到优先级缓存(其实就是一个ConcurrentSkipListMap,key是优先级,value是队列,队列的泛型是Runnable)中,第2个线程池用于具体消费优先级缓存中的消息,消费时是用单线程遍历优先级缓存来保证优先级的顺序,再配合CompletableFuture并发消费同一优先级的任务。

5.消费失败,如何回滚?
没有回答好。。。

阶段下标不动,重新消费当前阶段的所有剩余消息直到这些消息都成功消费为止(需要业务方做好幂等)。比如说阶段1是1-3,阶段2是4-7,比如拉到4条消息,会把第4条消息,也就是阶段2的消息重新放回到processQueue里,这样就能保证只消费阶段1的消息,而同一个阶段的消息消费失败,不管它是哪一条失败,都是没有关系的。

6.核心线程数10,最大线程数20,队列100,提交了15个执行无限慢的任务,放在队列里的5个任务,是不是一直不执行的?
是一直不执行的。

7.有3个任务ABC,ABC都包含自己的子任务,需要ABC顺序执行,但是ABC内部的子任务并发执行,如何用java并发容器实现?
CyclicBarrier、CountDownLatch(补充)、CompletableFuture。

8.任务进去,如何判断它是否执行完了?
Future有个isDone方法。

9.open jdk没有.h头文件,它如何声明native方法?
jdk里有编译好的文件,在linux下是so,在mac下是dylib,在windows下是dll。

10.说下springmvc是如何处理用户请求的?
忘了。。。

客户端请求提交到DispatcherServlet。
由DispatcherServlet 控制器寻找一个或多个HandlerMapping(最优匹配),找到处理请求的Controller。
DispatcherServlet将请求提交到Controller。
Controller调用业务逻辑处理后返回ModelAndView。
DispatcherServlet寻找一个或多个ViewResolver视图解析器,找到 ModelAndView指定的视图。
视图负责将结果显示到客户端。

11.说下springmvc如何初始化的?
没有回答好。。。

根据配置的包名,扫描类,并封装成BeanDefinition,合并BeanDefinition,初始化非懒加载的Bean实例,回调各种Aware接口,比如BeanNameAware、BeanClassLoaderAware、BeanFactoryAware,利用BeanPostProcessor的postProcessAfterInitialization()进行DI注入和AOP的处理。
初始化springmvc的9大组件,有印象的是HandlerMapping(负责映射用户的URL和对应的处理类)、HandlerAdapter(具体处理用户请求)、HandlerExceptionResolver(全局异常处理器)、ViewResolver(视图处理器)。

结论:挂。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值