面试问题4

面试问题四

1.说下springmvc工作流程?
核心类是DispatcherServlet,这个类集成了FrameworkServlet,而FrameworkServlet实现了HttpServletl里面的doget,post接口,并且最终指向了DispatcherServlet里面的doDispatch方法,因此前端的接口最终都是走到这里去执行。通过requet返回可以处理这个请求的handler,其实这是一个HandlerExecutionChain,里面含有实现了拦截器的类,以及可以执行该请求的controlller,然后通过handler获取该请求的适配器,然后执行拦截器的前置处理,接着调用适配器的方法处理请求,然后执行拦截器的后置处理方法。
最后包装适配器的返回结果返回前端。
2.@Contoller和@RestContoller区别?
@restContoller是@controller+@ResponseBody两个注解组合而成,@restContoller在返回结果的时候,会对body进行rest风格处理,
在处理返回结果的时候使用RequestResponseBodyMethodProcessor#handleReturnValue进行返回值处理
3.dubbo架构是怎么样的?
dubbo分为注册中心,消费者和服务提供者三种角色,注册中心支持使用redis,zookeeper作为注册中心,一般使用zookeeper作为注册中心,服务调用方和服务提供方在服务启动的时候将自己注册到注册中心,并且从注册中心得到服务列表,调用的时候从服务列表里面选取服务进行调用,当开始调用的时候,dubbo客户端把接口使用javassist动态代理生成代理对象,并且封装成request对象通过dubbo协议,底层是tcp协议,发送到服务提供方,服务提供方,反序列化得到调用的接口信息和参数,在调用完成后以同样的方式返回服务调用方,最终服务调用方反序列化得到调用结果。完成整个调用过程。
4.ConcurrentHashMap的数据结构,以及怎么保证线程安全的?
4.1 jdk 1.7的时候,使用Segment + Reentrantlock+数组+链表作为数据结构来保证线程安全,在初始化的时候,如果不指定并发线程级别,则会默认生成容量16的segment数组,每个segment继承了Reentrantlock,在对segment进行操作的时候先要获取到对象锁也就是trylock,这样就保证了线程安装。
4.2 jdk1.8,concurrenthashmap 使用node+cas+synchronized来保证线程安全,相对1.7锁的粒度更小了,支持的并发度也更大了。在获取node节点使用cas获取变量,替换值使用cas方式替换值。如果线程正在进行扩容,sizectl标志位为-1,则线程加入扩容操作,加快扩容速度。

总结

1.仅为个人总结,不对之处可以指出,共同进步。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值