一些面试问题

  1. OOM原因:

    1. 一个启动类大量加载了第三方jar包
    2. Tomcat部署了太多应用
    3. 大量动态生成反射类,不断被加载,直到内存溢出
  2. OOM解决办法:

    1. 尝试扩大内存: -Xmx:1024m -Xms:1024m -XX:+PrintGCDetails看看是不是堆内存不足
    2. 分析打印信息
    3. 内存快照工具
      1. JProfiles
      2. Idea在VM Option中设置:-Xmx:8m -Xms:1m -XX:+DeapDumpOnOutOfMemoryError
      3. 分析
  3. 字符串常量池、静态变量都在堆中
    运行时常量池在 堆里面的 元空间的 方法区中

  4. 内存泄漏
    不再会被使用的对象的内存不能被回收,就是内存泄露

(ps: 心态崩了 痛哭 更新了一大堆 结果没自动保存。。只剩下这么点了 当教训了 以后还是先用软件写)

  1. Spring MVC的工作原理
    1. 客户端的所有请求都交给前端控制器DispatcherServlet来处理
    2. DispatcherServlet收到请求后,将根据请求的信息(包括URL、HTTP协议方法、请求头、请求参数、Cookie等)以及HandlerMapping的配置找到处理该请求的Handler(任何一个对象都可以作为请求的Handler)
    3. 在这个地方Spring会通过HandlerAdapter对该处理器进行封装
    4. HandlerAdapter是一个适配器,它用统一的接口对各种Handler中的方法进行调用
    5. Handler完成对用户请求的处理后,会返回一个ModelAndView对象给DispatcherServlet,ModelAndView顾名思义,包含了数据模型以及相应的视图的信息
    6. ModelAndView的视图是逻辑视图,DispatcherServlet还要借助ViewResolver完成从逻辑视图到真实视图对象的解析工作
    7. 当得到真正的视图对象后,DispatcherServlet会利用视图对象对模型数据进行渲染
    8. 客户端得到响应,可能是一个普通的HTML页面,也可以是XML或JSON字符串,还可以是一张图片或者一个PDF文件

 

  1. SpringMVC的运行机制

    1. 先从DispathcherServler的doService方法开始,在该方法中会将ApplicationContext、localeResolver、themeResolver等对象添加到request中,紧接着就是调用doDispatch方法
    2. 进入该方法后首先会检查该请求是否是文件上传的请求(校验的规则是是否是post并且contenttType是否为multipart/为前缀)即调用的是checkMultipart方法;如果是的将request包装成MultipartHttpServletRequest
    3. 然后调用getHandler方法来匹配每个HandlerMapping对象,如果匹配成功会返回这个Handle的处理链HandlerExecutionChain对象,在获取该对象的内部其实也获取我们自定定义的拦截器,并执行了其中的方法。
    4. 执行拦截器的preHandle方法,如果返回false执行afterCompletion方法并理解返回
    5. 通过上述获取到了HandlerExecutionChain对象,通过该对象的getHandler()方法获得一个object通过HandlerAdapter进行封装得到HandlerAdapter对象
    6. 该对象调用handle方法来执行Controller中的方法,该对象如果返回一个ModelAndView给DispatcherServlet。
    7. DispatcherServlet借助ViewResolver完成逻辑试图名到真实视图对象的解析,得到View后DispatcherServlet使用这个View对ModelAndView中的模型数据进行视图渲染。
  2. session的销毁有两种情况

    1. session超时(可以在web.xml中通过/标签配置超时时间)
    2. session对象的invalidate()方法
  3. DNS的寻址过程
    (1)检查浏览器缓存、检查本地hosts文件是否有这个网址的映射,如果有,就调用这个IP地址映射,解析完成。

    (2)如果没有,则查找本地DNS解析器缓存是否有这个网址的映射,如果有,返回映射,解析完成。

    (3)如果没有,则查找填写或分配的首选DNS服务器,称为本地DNS服务器。服务器接收到查询时:

    如果要查询的域名包含在本地配置区域资源中,返回解析结果,查询结束,此解析具有权威性。

    如果要查询的域名不由本地DNS服务器区域解析,但服务器缓存了此网址的映射关系,返回解析结果,查询结束,此解析不具有权威性。

    (4)如果本地DNS服务器也失效:

    如果未采用转发模式(迭代),本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后,会判断这个域名(如.com)是谁来授权管理,并返回一个负责该顶级域名服务器的IP,本地DNS服务器收到顶级域名服务器IP信息后,继续向该顶级域名服务器IP发送请求,该服务器如果无法解析,则会找到负责这个域名的下一级DNS服务器(如http://baidu.com)的IP给本地DNS服务器,循环往复直至查询到映射,将解析结果返回本地DNS服务器,再由本地DNS服务器返回解析结果,查询完成。

    如果采用转发模式(递归),则此DNS服务器就会把请求转发至上一级DNS服务器,如果上一级DNS服务器不能解析,则继续向上请求。最终将解析结果依次返回本地DNS服务器,本地DNS服务器再返回给客户机,查询完成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值