SpringMVC具体执行流程

在这里插入图片描述

  1. 用户发送请求至前端控制器DispatcherServlet

  2. DispatcherServlet收到请求调用处理器映射器HandlerMapping
    处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet

  3. DispatcherServlet根据处理器Handler获取处理器适配器
    HandlerAdapter,执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作

  4. HandlerAdapter执行处理器Handler(Controller,也叫页面控制器)
    Handler执行完成返回ModelAndView, 将执行结果ModelAndView返回到DispatcherServlet

  5. DispatcherServlet将ModelAndView传给ViewReslover视图解析器
    ViewReslover解析后返回具体View

  6. DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)

  7. DispatcherServlet响应用户

一个URL请求执行流程

  1. 执行 HttpServlet 的 service(HttpServletRequest req, HttpServletResponse resp) 方法
protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{String method = req.getMethod();if (method.equals(METHOD_GET)) {long lastModified = getLastModified(req);if (lastModified == -1) {// servlet doesn't support if-modified-since, no reason// to go through further expensive logicdoGet(req, resp);} else {long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);if (ifModifiedSince < lastModified) {// If the servlet mod time is later, call doGet()// Round down to the nearest second for a proper compare// A ifModifiedSince of -1 will always be lessmaybeSetLastModified(resp, lastModified);doGet(req, resp);} else {resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);}}} else if (method.equals(METHOD_HEAD)) {long lastModified = getLastModified(req);maybeSetLastModified(resp, lastModified);doHead(req, resp);} else if (method.equals(METHOD_POST)) {doPost(req, resp);} else if (method.equals(METHOD_PUT)) {doPut(req, resp);} else if (method.equals(METHOD_DELETE)) {doDelete(req, resp);} else if (method.equals(METHOD_OPTIONS)) {doOptions(req,resp);} else if (method.equals(METHOD_TRACE)) {doTrace(req,resp);} else {//// Note that this means NO servlet supports whatever// method was requested, anywhere on this server.//String errMsg = lStrings.getString("http.method_not_implemented");Object[] errArgs = new Object[1];errArgs[0] = method;errMsg = MessageFormat.format(errMsg, errArgs);resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);}}
  1. 执行demo请求 HttpServlet的doGet(HttpServletRequest req, HttpServletResponse resp)方法 子类 FrameworkServlet
    @Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {process(request, response);}
  1. FrameworkServlet的process方法
	protected final void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {。。。。。。。doService(request, response);。。。。。。。}
  1. FrameworkServlet 子类 DispatcherServlet 的doService(HttpServletRequest request, HttpServletResponse response)方法
protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception {.......doDispatch(request, response);.......
}
  1. DispatcherServlet的doDispatch(HttpServletRequest request, HttpServletResponse response)方法 主方法(重点)
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {HttpServletRequest processedRequest = request;HandlerExecutionChain mappedHandler = null;boolean multipartRequestParsed = false;WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);try {ModelAndView mv = null;Exception dispatchException = null;try {//文件上传相关processedRequest = checkMultipart(request);multipartRequestParsed = (processedRequest != request);// DispatcherServlet收到请求调用处理器映射器HandlerMapping// 处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)// 并返回给DispatcherServletmappedHandler = getHandler(processedRequest);if (mappedHandler == null) {noHandlerFound(processedRequest, response);return;}// DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapterHandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());// Process last-modified header, if supported by the handler.  HTTP缓存相关String method = request.getMethod();boolean isGet = HttpMethod.GET.matches(method);if (isGet || HttpMethod.HEAD.matches(method)) {long lastModified = ha.getLastModified(request, mappedHandler.getHandler());if (new ServletWebRequest(request, response).checkNotModified(lastModified) && isGet) {return;}}// 前置拦截器if (!mappedHandler.applyPreHandle(processedRequest, response)) {// 返回false就不进行后续处理了return;}// 执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作// 执行处理器Handler(Controller,也叫页面控制器)// Handler执行完成返回ModelAndView// HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServletmv = ha.handle(processedRequest, response, mappedHandler.getHandler());if (asyncManager.isConcurrentHandlingStarted()) {return;}// 如果没有视图,给你设置默认视图json忽略applyDefaultViewName(processedRequest, mv);//后置拦截器mappedHandler.applyPostHandle(processedRequest, response, mv);}catch (Exception ex) {dispatchException = ex;}catch (Throwable err) {// As of 4.3, we're processing Errors thrown from handler methods as well,// making them available for @ExceptionHandler methods and other scenarios.dispatchException = new NestedServletException("Handler dispatch failed", err);}// DispatcherServlet将ModelAndView传给ViewReslover视图解析器// ViewReslover解析后返回具体View// DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)// DispatcherServlet响应用户processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);}catch (Exception ex) {triggerAfterCompletion(processedRequest, response, mappedHandler, ex);}catch (Throwable err) {triggerAfterCompletion(processedRequest, response, mappedHandler,new NestedServletException("Handler processing failed", err));}finally {if (asyncManager.isConcurrentHandlingStarted()) {// Instead of postHandle and afterCompletionif (mappedHandler != null) {mappedHandler.applyAfterConcurrentHandlingStarted(processedRequest, response);}}else {// Clean up any resources used by a multipart request.if (multipartRequestParsed) {cleanupMultipart(processedRequest);}}}}
默认的HandlerMapping根据URL匹配选择合适的
RequestMapping
HandlerMapping
SimpleUrlHandler
MappingBeanNameUrlHandlerMapping默认的HandlerAdapter根据mappedHandler选择合适的
HttpRequestHandlerAdapter
SimpleControllerHandlerAdapter
RequestMappingHandlerAdapter
HandlerFunctionAdapter@RequestMapping解析与请求映射
参考流程图: https://www.processon.com/view/link/615ea79e1efad4070b2d6707
执行处理器Handler
  1. 执行处理器Handler, 以RequestMappingHandlerAdapter为例
    执行:
    mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
	@Overrideprotected ModelAndView handleInternal(HttpServletRequest request,HttpServletResponse response, HandlerMethod handlerMethod) throws Exception {ModelAndView mav;// 检查当前请求的method是否为支持的method(默认Null,可通过继承AbstractController设置supportedMethods)// 检查当前请求是否必须session  (默认false,可通过继承AbstractController设置requireSession)checkRequest(request);/*** 判断当前是否需要支持在同一个session中只能线性地处理请求* 因为锁是通过 synchronized 是 JVM 进程级,所以在分布式环境下,* 无法达到同步相同 Session 的功能。默认情况下,synchronizeOnSession 为 false*/if (this.synchronizeOnSession) {// 获取当前请求的session对象HttpSession session = request.getSession(false);if (session != null) {// 为当前session生成一个唯一的可以用于锁定的keyObject mutex = WebUtils.getSessionMutex(session);synchronized (mutex) {// 对HandlerMethod进行参数等的适配处理,并调用目标handlermav = invokeHandlerMethod(request, response, handlerMethod);}}else {// 如果当前不存在session,则直接对HandlerMethod进行适配mav = invokeHandlerMethod(request, response, handlerMethod);}}else {// *如果当前不需要对session进行同步处理,则直接对HandlerMethod进行适配mav = invokeHandlerMethod(request, response, handlerMethod);}//判断当前请求头中是否包含Cache-Control请求头,如果不包含,则对当前response进行处理if (!response.containsHeader(HEADER_CACHE_CONTROL)) {// 如果当前SessionAttribute中存在配置的attributes,则为其设置过期时间。// 这里SessionAttribute主要是通过@SessionAttribute注解生成的if (getSessionAttributesHandler(handlerMethod).hasSessionAttributes()) {applyCacheSeconds(response, this.cacheSecondsForSessionAttributeHandlers);}else {// 如果当前不存在SessionAttributes,则判断当前是否存在Cache-Control设置,// 如果存在,则按照该设置进行response处理,如果不存在,则设置response中的// Cache的过期时间为-1,即立即失效prepareResponse(response);}}return mav;}
  1. 对HandlerMethod进行适配
	@Nullableprotected ModelAndView invokeHandlerMethod(HttpServletRequest request,HttpServletResponse response, HandlerMethod handlerMethod) throws Exception {// 把我们的请求req resp包装成 ServletWebRequestServletWebRequest webRequest = new ServletWebRequest(request, response);try {// 获取容器中全局配置的InitBinder和当前HandlerMethod所对应的Controller中// 配置的InitBinder,用于进行参数的绑定WebDataBinderFactory binderFactory = getDataBinderFactory(handlerMethod);// 获取容器中全局配置的ModelAttribute和当前HandlerMethod所对应的Controller 中配置的ModelAttribute,// 这些配置的方法将会在目标方法调用之前进行调用ModelFactory modelFactory = getModelFactory(handlerMethod, binderFactory);// 封装handlerMethod,会在调用前解析参数、调用后对返回值进行处理ServletInvocableHandlerMethod invocableMethod = createInvocableHandlerMethod(handlerMethod);if (this.argumentResolvers != null) {// 让invocableMethod拥有参数解析能力invocableMethod.setHandlerMethodArgumentResolvers(this.argumentResolvers);}if (this.returnValueHandlers != null) {// 让invocableMethod拥有返回值处理能力invocableMethod.setHandlerMethodReturnValueHandlers(this.returnValueHandlers);}// 让invocableMethod拥有InitBinder解析能力invocableMethod.setDataBinderFactory(binderFactory);// 设置ParameterNameDiscoverer,该对象将按照一定的规则获取当前参数的名称invocableMethod.setParameterNameDiscoverer(this.parameterNameDiscoverer);// ModelAndView处理容器ModelAndViewContainer mavContainer = new ModelAndViewContainer();// 将request的Attribute复制一份到ModelMapmavContainer.addAllAttributes(RequestContextUtils.getInputFlashMap(request));// *调用我们标注了@ModelAttribute的方法,主要是为我们的目标方法预加载modelFactory.initModel(webRequest, mavContainer, invocableMethod);// 重定向的时候,忽略model中的数据 默认falsemavContainer.setIgnoreDefaultModelOnRedirect(this.ignoreDefaultModelOnRedirect);// 获取当前的AsyncWebRequest,这里AsyncWebRequest的主要作用是用于判断目标// handler的返回值是否为WebAsyncTask或DeferredResult,如果是这两种中的一种,// 则说明当前请求的处理应该是异步的。所谓的异步,指的是当前请求会将Controller中// 封装的业务逻辑放到一个线程池中进行调用,待该调用有返回结果之后再返回到response中。// 这种处理的优点在于用于请求分发的线程能够解放出来,从而处理更多的请求,提高吞吐。// 只有待目标任务完成之后才会回来将该异步任务的结果返回。AsyncWebRequest asyncWebRequest = WebAsyncUtils.createAsyncWebRequest(request, response);asyncWebRequest.setTimeout(this.asyncRequestTimeout);// 封装异步任务的线程池、request、interceptors到WebAsyncManager中WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);asyncManager.setTaskExecutor(this.taskExecutor);asyncManager.setAsyncWebRequest(asyncWebRequest);asyncManager.registerCallableInterceptors(this.callableInterceptors);asyncManager.registerDeferredResultInterceptors(this.deferredResultInterceptors);// 这里就是用于判断当前请求是否有异步任务结果的,如果存在,则对异步任务结果进行封装if (asyncManager.hasConcurrentResult()) {Object result = asyncManager.getConcurrentResult();mavContainer = (ModelAndViewContainer) asyncManager.getConcurrentResultContext()[0];asyncManager.clearConcurrentResult();LogFormatUtils.traceDebug(logger, traceOn -> {String formatted = LogFormatUtils.formatValue(result, !traceOn);return "Resume with async result [" + formatted + "]";});invocableMethod = invocableMethod.wrapConcurrentResult(result);}// *对请求参数进行处理,调用目标HandlerMethod,并且将返回值封装为一个ModelAndView对象invocableMethod.invokeAndHandle(webRequest, mavContainer);if (asyncManager.isConcurrentHandlingStarted()) {return null;}// 对封装的ModelAndView进行处理,主要是判断当前请求是否进行了重定向,如果进行了重定向,// 还会判断是否需要将FlashAttributes封装到新的请求中return getModelAndView(mavContainer, modelFactory, webRequest);}finally {webRequest.requestCompleted();}}
  1. 对请求参数进行处理,调用目标HandlerMethod,并且将返回值封装为一个ModelAndView对象 ServletInvocableHandlerMethod
    invocableMethod.invokeAndHandle(webRequest, mavContainer)
public void invokeAndHandle(ServletWebRequest webRequest, ModelAndViewContainer mavContainer,Object... providedArgs) throws Exception {/*真正的调用我们的目标对象 很重要 很重要*/Object returnValue = invokeForRequest(webRequest, mavContainer, providedArgs);// 设置相关的返回状态setResponseStatus(webRequest);// 如果请求处理完成,则设置requestHandled属性if (returnValue == null) {if (isRequestNotModified(webRequest) || getResponseStatus() != null || mavContainer.isRequestHandled()) {disableContentCachingIfNecessary(webRequest);mavContainer.setRequestHandled(true);return;}}// 如果请求失败,但是有错误原因,那么也会设置requestHandled属性else if (StringUtils.hasText(getResponseStatusReason())) {mavContainer.setRequestHandled(true);return;}mavContainer.setRequestHandled(false);Assert.state(this.returnValueHandlers != null, "No return value handlers");try {// 遍历当前容器中所有ReturnValueHandler,判断哪种handler支持当前返回值的处理,// 如果支持,则使用该handler处理该返回值this.returnValueHandlers.handleReturnValue(returnValue, getReturnValueType(returnValue), mavContainer, webRequest);}catch (Exception ex) {if (logger.isTraceEnabled()) {logger.trace(formatErrorForReturnValue(returnValue), ex);}throw ex;}}
  1. 真正的调用我们的目标对象 很重要 很重要
    Object returnValue = invokeForRequest(webRequest, mavContainer, providedArgs);
	@Nullablepublic Object invokeForRequest(NativeWebRequest request, @Nullable ModelAndViewContainer mavContainer,Object... providedArgs) throws Exception {//*获取我们目标方法入参的值Object[] args = getMethodArgumentValues(request, mavContainer, providedArgs);if (logger.isTraceEnabled()) {logger.trace("Arguments: " + Arrays.toString(args));}//真的的调用我们的目标方法return doInvoke(args);}

doInvoke(args) 反射调用

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. linux中systemd服务介绍

    Systemd是Linux系统工具也是系统基础组件的集合用来启动守护进程。提供了一个系统和服务管理器&#xff0c;是系统启动的启动第一个程序、运行为 PID 1&#xff0c;并负责启动其它程序其中systemctl是systemd的管理控制工具 查看systemd程序文件位置信息 [rootlocalhost ~]# wh…...

    2024/4/20 10:15:53
  2. The Sandbox 和 NFT 平台 Ethernity 建立战略伙伴关系

    The Sandbox 与世界首家经过认证授权的 NFT 平台 Ethernity 建立了战略合作伙伴关系。 准备好与全世界的明星和品牌合作&#xff0c;获得独特的体验、稀有的收藏品和增强虚拟化身的可穿戴设备了吗&#xff1f; Ethernity 将把它的世界级授权 IP 库带到 The Sandbox 元宇宙&…...

    2024/4/28 20:16:03
  3. 商标侵权一般罚款多少钱

    商标侵权一般罚款多少钱 商标侵权的罚款标准是根据侵权情节确定的&#xff0c;工商行政管理部门处理时认定侵权行为成立的&#xff0c;责令立即停止侵权行为&#xff0c;没收、销毁侵权商品和主要用于制造侵权商品、伪造注册商标标识的工具&#xff0c;罚款标准如下&#xff1…...

    2024/4/28 5:27:28
  4. IDEA之【Mark Directory as】选项详解

    Sources Root&#xff1a;让IDEA知道这个文件夹及其子文件夹中包含源代码&#xff0c;是需要编译构建的一部分。设置后后出现Unmark as Sources Root,点击可撤回。如果导入其他包中的py文件出现错误&#xff0c;无法显示需要导入包的文件&#xff0c;可以尝试使用此方法让IDEA知…...

    2024/4/28 7:07:50
  5. 序列特征在推荐算法中的应用

    简介&#xff1a;行为序列特征在推荐&#xff0c;广告等领域中有着广泛应用&#xff0c;最近几年涌现了很多有关行为序列的研究论文&#xff0c;讲解如何将行为序列应用到实际场景中。但是论文中的实际思想距离落地还有一段距离&#xff0c;因此本文先介绍一些论文中的序列特征…...

    2024/4/28 22:06:38
  6. MongoDB 数据采集

    MongoDB的ChangeStream为用户提供了非常便利的获取变化数据接口&#xff0c;在这里为大家提供一种使用思路和实现方式。 前置条件 数据库必须是复制集群模式&#xff0c;可以是单节点&#xff0c;但不能是standalone 官方提供了复制集群模式的配置方式&#xff1a; https://do…...

    2024/4/14 3:02:28
  7. 数据结构篇01、动态数组,android开发视频播放器

    我们通过使用java中的静态数组封装一个动态数组&#xff0c;底层的核心原理类似于java标准库中的ArrayList&#xff1b; 1、构造函数与常规函数 定义一个静态数组data和一个容量size&#xff1b; 定义三个构造方法&#xff0c;一个传入容量capacity&#xff0c;一个无参构造…...

    2024/4/29 0:32:56
  8. 部分data2text模型整理

    Learning Neural Templates for Text Generation 本文主要是对decoder进行了改进&#xff0c;使用隐半马尔科夫HSMM模型作为解码器&#xff0c;并用神经网络实现其中所有概率项的参数化。在完成模型训练后&#xff0c;可以利用Viterbi算法推断出隐状态序列&#xff0c;并将其获…...

    2024/4/28 8:17:23
  9. 【小记】logback日志框架的配置和使用

    2021-07-01 日志在项目中必不可少&#xff0c;目前流行的日志框架有log4j、log4j2、logback&#xff0c;其中logback和log4j作者是同一个人。logback是SpringBoot默认集成的日志框架&#xff0c;效率高&#xff0c;能适应诸多的运行环境&#xff0c;是SLF4J门面框架的一种实现…...

    2024/4/28 16:05:16
  10. 算法面试机器学习树模型,集成学习必准备

    前阵子面试数据挖掘岗位被问到了是否了解集成学习&#xff0c;以及它们之间的区别&#xff0c;结果因为没有好好做准备&#xff0c;没有答上来。 事实上&#xff0c;在实际应用与很多比赛中&#xff0c;树模型&#xff08;随机森林、GBDT、XGBOOST等&#xff09;应用十分广泛&a…...

    2024/4/28 6:40:40
  11. 数据结构学习,链栈

    目录 预先要引用的头文件以及宏定义 所使用栈的结构 其基本操作接口 初始化链栈 销毁链栈 判断栈是否为空&#xff0c;空返回TRUE&#xff0c;否则返回FALSE 元素e压入栈&#xff08;入栈&#xff09; 栈S的栈顶元素出栈并用e返回&#xff08;出栈&#xff09; 取栈S的…...

    2024/4/28 1:41:37
  12. 运维面试问道 网站出现502 如何排查

    502错误定义&#xff1a;根据我工作多年基本都是后端 挂了 故障基本无非就是这几种&#xff1a; 1、网络不同&#xff0c; 不能访问web服务器&#xff0c; 有可能断网&#xff0c; 开启了防火墙等&#xff0c; 可以通过ping命令来定位 2、tomcat服务器没有启动&#x…...

    2024/4/27 21:35:44
  13. Glide VS Coil

    原文地址&#xff1a; https://medium.com/healthify-tech/coil-vs-glide-3f488f4de72a 在这篇文章中&#xff0c;我们将会对Glide 和Coil做一个对比&#xff0c;来理解一下到目前为止&#xff0c;哪一个图片加载框架是更好的。 Glide是一个Android平台的快速高效开源的图片加…...

    2024/4/28 7:19:21
  14. HTML与H5

    HTML与H5简介标签元信息标记meta标题前的小图标加载资源HTML 链接HTML 图像刷新层标记列表标签常用属性表格form表单以及input下拉框多行文本框\标记HTML 视频HTML 音频滚动字幕基底网址标记特殊字符补充标记窗口的分割与设置frameset网页元素分组fieldset内部框架iframe其它离…...

    2024/4/28 16:15:51
  15. 谈谈为何需要将类的成员函数声明为private

    1 析构函数声明为私有&#xff0c; 有些资源必须要在析构前释放掉&#xff0c;则将析构函数声明为私有&#xff0c;然后另外再定义一个公有的destroy函数&#xff0c;先做释放资源操作&#xff0c;再调用析构函数。 delete this. 2 当类成员中有文件描述符&#xff0c;锁之类的…...

    2024/4/28 5:02:51
  16. 1/26(VLAN、trunk、路由器)

    VLAN&#xff08;virtual lan虚拟局域网&#xff09; vlan 2 #创建vlan2 display vlan #查看vlan undo vlan 4 #删除vlan4 ]interface ethernet 0/0/3 //进入3接口 port link-type access //设置接口类型为接入链路 port default vlan 2 //将接口加入vlan2 1.批量创建vlan v…...

    2024/4/28 16:16:25
  17. OpenHarmony轻量系统开发【9】WiFi之STA模式连接热点

    摘要&#xff1a;本文简单介绍Hi3861WiFi操作&#xff0c;怎么连接到热点&#xff0c;查看IP&#xff0c;ping服务器等 适合群体&#xff1a;适用于润和Hi3861开发板 文中所有代码仓库&#xff1a;https://gitee.com/qidiyun/hihope-3861-smart-home-kit 9.1AT指令操作WiFi 我…...

    2024/4/28 12:21:27
  18. JavaScript--------JavaScript数组

    JavaScript 数组用于在单一变量中存储多个值。 数组的创建 使用数组文本是创建 JavaScript 数组最简单的方法。 语法: var array-name [item1, item2, ...]; 实例: var cars ["大众", "雪铁龙", "丰田"]; //创建了一个名为cars的数组…...

    2024/4/7 17:34:41
  19. 拦截器相关知识点

    ajax是一种无需重新加载整个页面的情况下&#xff0c;更新数据。 过滤器&#xff08;Filter&#xff09;&#xff1a;当你有一堆东西的时候&#xff0c;你只希望选择符合你要求的某一些东西。定义这些要求的工具&#xff0c;就是过滤器。&#xff08;理解&#xff1a;就是一堆…...

    2024/4/14 3:03:24
  20. YGG 购买了 AAA 级第三人称射击游戏《Nyan Heroes》的 Genesis NFT

    Yield Guild Games&#xff08;YGG&#xff09;已经购买了《Nyan Heroes》的Genesis NFT&#xff0c;《Nyan Heroes》是一款建立在 Solana 区块链上的第三人称射击游戏&#xff0c;玩家在控制他们的 Nyans 和 Nyans 的巨型机器人对手时相互战斗。Genesis NFT 授予 YGG 早期土地…...

    2024/4/15 9:32:13

最新文章

  1. 程序员缓解工作压力的技巧

    程序员在紧张的工作之余&#xff0c;放松自己是非常重要的。我了解到有几种方法可以帮助他们缓解压力、恢复精力。 首先&#xff0c;运动是个不错的选择。无论是去健身房锻炼身体&#xff0c;还是进行户外跑步、散步&#xff0c;都可以让程序员暂时忘记工作&#xff0c;释放压力…...

    2024/4/29 2:09:57
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 【Java】假如把集合体系看作购物中心

    购物中心入口&#xff1a;Java集合框架 “Java集合广场”的购物中心&#xff0c;这是一个集合了各种奇特商店的地方&#xff0c;每个商店都充满了不同的宝藏&#xff08;数据结构&#xff09;。 一楼&#xff1a;基础集合区 - Collection接口 一楼是基础集合区&#xff0c;这…...

    2024/4/24 3:27:38
  4. ssm框架中各层级介绍

    1、Spring&#xff08;业务逻辑层&#xff09;&#xff1a; Spring框架提供了依赖注入&#xff08;DI&#xff09;和面向切面编程&#xff08;AOP&#xff09;等功能&#xff0c;可以帮助管理Java应用程序中的对象依赖关系和提供横切关注点的支持。 在SSM框架中&#xff0c;S…...

    2024/4/27 13:24:33
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/28 13:52:11
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/28 13:51:37
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/28 15:57:13
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57