主题
面试速答(先看这里)
**一句话结论:**在Controller中会进行业务逻辑的执行,可能会调用下层的Service以及持久层进行数据的CRUD。
60秒标准回答:
URL解析 ,对URL自动编码,然后检查长度,之后根据url查看浏览器是否缓存了该页面 DNS 查询,依次通过浏览器缓存,OS hosts缓存,路由器缓存,ISP缓存和根域名服务器去查询对应的ip 浏览器将请求封装为 HTTP 报文,在client和server建立连接之前,会进行 TCP三次握手 之后将报文从外到里封装为 以太网首部+ip首部+tcp首部+http首部经过 网关和路由器 发送给server 对于淘宝来说,请求会先到 nginx服务器 上,然后nginx采用默认的轮询算法进行 负载均衡 ,携带原来browser的ip把报文发送给 Serv…
在Controller中会进行业务逻辑的执行,可能会调用下层的Service以及持久层进行数据的CRUD
对Controller进行处理并返回ModelAndView
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
**记忆锚点:**Controller → response → HTTP → ModelAndView → Servlet → server
追问准备:
- 围绕「Controller」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「response」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「HTTP」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
- URL解析,对URL自动编码,然后检查长度,之后根据url查看浏览器是否缓存了该页面
- DNS查询,依次通过浏览器缓存,OS hosts缓存,路由器缓存,ISP缓存和根域名服务器去查询对应的ip
- 浏览器将请求封装为HTTP报文,在client和server建立连接之前,会进行TCP三次握手
- 之后将报文从外到里封装为 以太网首部+ip首部+tcp首部+http首部经过网关和路由器发送给server
- 对于淘宝来说,请求会先到nginx服务器上,然后nginx采用默认的轮询算法进行负载均衡,携带原来browser的ip把报文发送给Servlet容器
- Servlet容器接收到请求之后会解析请求行,请求体,请求头,然后交给MVC处理
- DispatcherServlet接收到请求后,通过请求路径返回相应的拦截器和Controller;
- 在Controller中会进行业务逻辑的执行,可能会调用下层的Service以及持久层进行数据的CRUD。
- 对Controller进行处理并返回ModelAndView;然后在通过ViewResolve对ModelAndView进行处理,返回View视图;最后一步是进行渲染View,产生response
- 浏览器接收response,HTTP响应报文的头部包含了状态码(Status-Code),并进行缓存和解码
- 浏览器渲染页面