SpringBoot中对SpringMvc的特殊定制
SpringBoot中对SpringMvc的特殊定制
- 1、自定义拦截器
- 2、CORS跨域请求
- 2.1、全局配置
- 2.2、单个配置
- 3、Json
- 3.1、Jackson的使用
- 3.2、自定义json的序列化与反序列化
- 4、国际化
- 4.1、通过浏览器设置的语言参数,在请求头中获取实现国际化
- 4.1.1、添加国际化资源文件
- 4.1.2、配置messageResource 设置国际化文本
- 4.1.3、通过去解析请求头中的accept-language 或者 解析url参数中?local=
- 4.1.4、直接通过MessageSource类调用
- 4.2、根据传递参数的形式实现国际化
- 4.2.1、添加国际化拦截器(在MyWebMvcConfiguration类中,自定义的)
- 4.2.2、覆盖掉之前的获取国际化标识的方法(在MyWebMvcConfiguration类中,自定义的)
- 4.2.3、测试
- 10、其它
- 10.1、WebMvcConfigurer原理
在SpringMvc的自动配置类中有很多的@Bean,SpringBoot就是根据这些类去自动配置一些SpringMvc的默认属性,我们可以覆盖掉这个@Bean去自定义一些我们自己特殊化的东西。
自动配置类名称:WebMvcAutoConfiguration
在大多数情况下,SpringBoot在自动配置中标记了很多@ConditionalOnMissingBean(xxx.class)(意思就是如果IOC容器中没有,当前的@Bean才会生效),如果我们自己配置了xxx.class,就会覆盖掉SpringBoot的默认配置。
实现一个自定义WebMvcAutoConfiguration类,让其实现于WebMvcConfigurer接口并注册到IOC容器中,在其中写相应代码就会覆盖掉默认配置。
1、自定义拦截器
package cool.ale.config;import cool.ale.interceptor.TimeInterceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Component
public class MyWebMvcConfiguration implements WebMvcConfigurer {/*** 添加拦截器* @param registry*/@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new TimeInterceptor()) // 添加一个拦截器.addPathPatterns("/**"); // 拦截映射规则,拦截所有请求//.excludePathPatterns("") // 设置排除的映射规则}
}
实现拦截器具体的类:
package cool.ale.interceptor;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.Duration;
import java.time.LocalDateTime;public class TimeInterceptor implements HandlerInterceptor {Logger logger = LoggerFactory.getLogger(TimeInterceptor.class);LocalDateTime start;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 开始时间start = LocalDateTime.now();return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// 结束时间LocalDateTime end = LocalDateTime.now();// 计算两个时间差Duration between = Duration.between(start, end);// 获得相差毫秒long millis = between.toMillis();logger.info("当前请求:" + request.getRequestURI() + ":执行时间:" + millis + "毫秒。");}
}
2、CORS跨域请求
2.1、全局配置
就比如说我们两个系统模块之前的请求,就称之为跨域请求。
首先我在一个模块写一个ajax请求来请求另一个模块,本模块目前设置其它端口:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>rest首页</title><script src="https://cdn.staticfile.org/jquery/1.10.0/jquery.min.js"></script>
</head>
<body><button id="restButton">请求跨域请求</button>
</body><script type="text/javascript">$("#restButton").click(function () {$.ajax({url:'http://localhost:8080/user/1',type:'GET',success:function (result) {alert(result)}});})</script>
</html>
然后我们启动服务,按照图片中的方式操作时报错,如下:
如果我们需要访问成功的话,我们需要在跳转后的模块添加上跨域访问的配置,步骤如下:
在我们自定义的SpringMvc类中重写跨域请求的方法,如下操作:
/*** 跨域请求处理(全局的配置)* @param registry*/
@Override
public void addCorsMappings(CorsRegistry registry) {registry.addMapping("/user/*") // 映射本服务器中哪些http接口可以进行跨域请求.allowedOrigins("http://localhost:8101") // 配置哪些来源有权限跨域.allowedMethods("GET","POST","DELETE","PUT"); // 配置允许跨域请求的方法}
就可以成功了!
2.2、单个配置
在上面的基础上,我们可以去掉自定义类中的跨域请求配置,在相应的controller方法上添加@CrossOrigin注解即可。
/*** 查询* @param id* @return*/
@GetMapping("/{id}")
@ApiOperation("根据用户id查询相应的用户信息")
@CrossOrigin
public Result getUser(@PathVariable Integer id){User user = userService.getUser(id);return new Result<>(200,"查询成功!",user);
}
3、Json
SpringBoot默认提供了三种JSON映射库(Gson、Jackson、JSON-B)的继承,默认的是jackson。
3.1、Jackson的使用
注解 | 含义 |
---|---|
@JsonIgnore | 排除json序列化,将它标注在属性上将不会进行json格式化 |
@JsonFormat(pattern = “yyyy-MM-dd hh:mm:ss”, locale = “zh”) | 进行日期格式化 |
@JsonInclude(JsonInclude.Include.NON_NULL) | 当这个字段不为null时,给它进行json序列化 |
@JsonProperty(“ha”) | 可以通过这个属性给字段设置别名 |
3.2、自定义json的序列化与反序列化
首先顶一个一个序列化的类,必须加上注解@JsonComponent。
接着指定需要序列化的对象,在静态类的泛型上直接指定即可,代码示例如下:
package cool.ale.config;import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.*;
import cool.ale.entity.User;
import org.springframework.boot.jackson.JsonComponent;
import org.springframework.boot.jackson.JsonObjectDeserializer;
import org.springframework.boot.jackson.JsonObjectSerializer;import java.io.IOException;@JsonComponent
public class UserJsonCustom {public static class Serializer extends JsonObjectSerializer<User> {@Overrideprotected void serializeObject(User user, JsonGenerator jgen, SerializerProvider provider) throws IOException {jgen.writeObjectField("userId",user.getId());jgen.writeObjectField("addR",user.getAddress());}}public static class deserializer extends JsonObjectDeserializer<User>{@Overrideprotected User deserializeObject(JsonParser jsonParser, DeserializationContext context, ObjectCodec codec, JsonNode tree) throws IOException {User user = new User();// 这里的反序列化相当于是请求进来的id会进行json封装user.setId(tree.findValue("id").asInt());return user;}}
}
4、国际化
国际化我们一般有两种方式,一种是根据浏览器目前设置的语言去国际化,还有一种是传递相应的国际化标识参数来实现国际化。
下面两种都进行说明一下
4.1、通过浏览器设置的语言参数,在请求头中获取实现国际化
在SpringBoot中进行国际化文本的操作我们需要进行以下几个步骤:
4.1.1、添加国际化资源文件
4.1.2、配置messageResource 设置国际化文本
SpringBoot中提供了MessageSourceAutoConfiguration,所以我们不需要去配置messageResource。
但是他并没有生效,我们可以通过设置debug=true参数在控制台看到以下信息
下面我们通过代码分析一下为什么没有生效:
@Configuration(proxyBeanMethods = false
)
// 如果自己配置了@Bean名字叫messageSource的bean,就会用自定义的
@ConditionalOnMissingBean(name = {"messageSource"},search = SearchStrategy.CURRENT
)
@AutoConfigureOrder(-2147483648)
// @Conditional自定义条件匹配,会传入一个实现了Condition接口的类ResourceBundleCondition
// ResourceBundleCondition 会重写matches方法,自定义匹配规则,如果该方法返回true,则代表匹配成功
@Conditional({MessageSourceAutoConfiguration.ResourceBundleCondition.class})
@EnableConfigurationProperties
public class MessageSourceAutoConfiguration {
调用下面的matches方法,然后返回匹配结果
public final boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {String classOrMethodName = getClassOrMethodName(metadata);try {// 具体的匹配规则在 getMatchOutcome 方法里面ConditionOutcome outcome = this.getMatchOutcome(context, metadata);this.logOutcome(classOrMethodName, outcome);this.recordEvaluation(context, classOrMethodName, outcome);return outcome.isMatch();} catch (NoClassDefFoundError var5) {throw new IllegalStateException("Could not evaluate condition on " + classOrMethodName + " due to " + var5.getMessage() + " not found. Make sure your own configuration does not rely on that class. This can also happen if you are @ComponentScanning a springframework package (e.g. if you put a @ComponentScan in the default package by mistake)", var5);} catch (RuntimeException var6) {throw new IllegalStateException("Error processing condition on " + this.getName(metadata), var6);}
}
getMatchOutcome方法代码如下:
public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {// 获取配置文件中 spring.messages.basename 属性的值,默认值为 messagesString basename = context.getEnvironment().getProperty("spring.messages.basename", "messages");ConditionOutcome outcome = (ConditionOutcome)cache.get(basename);if (outcome == null) {outcome = this.getMatchOutcomeForBasename(context, basename);cache.put(basename, outcome);}return outcome;
}
getMatchOutcomeForBasename方法代码如下:
private ConditionOutcome getMatchOutcomeForBasename(ConditionContext context, String basename) {Builder message = ConditionMessage.forCondition("ResourceBundle", new Object[0]);String[] var4 = StringUtils.commaDelimitedListToStringArray(StringUtils.trimAllWhitespace(basename));int var5 = var4.length;for(int var6 = 0; var6 < var5; ++var6) {String name = var4[var6];Resource[] var8 = this.getResources(context.getClassLoader(), name);int var9 = var8.length;// 根据 message 获取 该类路径下的所有 properties 的资源文件// 当如果这个路径下有属性资源文件时,匹配结果将会是truefor(int var10 = 0; var10 < var9; ++var10) {Resource resource = var8[var10];if (resource.exists()) {return ConditionOutcome.match(message.found("bundle").items(new Object[]{resource}));}}}return ConditionOutcome.noMatch(message.didNotFind("bundle with basename " + basename).atAll());
}
所以,根据以上的代码跟踪,MessageSourceAutoConfiguration没有匹配到是因为系统没有找到相应的国际化文本属性资源文件,所以,根据刚才代码的逻辑,有以下两种解决方式:
1、将文件夹i18n的名称改为messages。
2、在配置文件中配置spring.messages.basename属性,指定i18n文件夹的位置。
我们再次重启观察控制台,如下所示:
4.1.3、通过去解析请求头中的accept-language 或者 解析url参数中?local=
在WebMvcAutoConfiguration类中有一个解析请求头中的accept-language方法localeResolver
@Bean
@ConditionalOnMissingBean(name = {"localeResolver"}
)
public LocaleResolver localeResolver() {// 当配置文件中有 spring.mvc.locale-resolver=fixed// 就会去配置文件里面找 spring.mvc.locale,这里相当于设置了一个固定值if (this.webProperties.getLocaleResolver() == org.springframework.boot.autoconfigure.web.WebProperties.LocaleResolver.FIXED) {return new FixedLocaleResolver(this.webProperties.getLocale());} else if (this.mvcProperties.getLocaleResolver() == org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties.LocaleResolver.FIXED) {return new FixedLocaleResolver(this.mvcProperties.getLocale());} else {// 如果上面没有设置fixed,则会以AcceptHeaderLocaleResolver 类去解析// 将配置文件里面的这个参数当成一个默认值,如果请求头没有的话,则会去取这个默认值AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();Locale locale = this.webProperties.getLocale() != null ? this.webProperties.getLocale() : this.mvcProperties.getLocale();localeResolver.setDefaultLocale(locale);return localeResolver;}
}
AcceptHeaderLocaleResolver类的解析方法,代码如下:
public Locale resolveLocale(HttpServletRequest request) {Locale defaultLocale = this.getDefaultLocale();// 先去请求头的Accept-Language参数去找,如果没有,则会找配置文件里面默认的if (defaultLocale != null && request.getHeader("Accept-Language") == null) {return defaultLocale;} else {Locale requestLocale = request.getLocale();List<Locale> supportedLocales = this.getSupportedLocales();if (!supportedLocales.isEmpty() && !supportedLocales.contains(requestLocale)) {Locale supportedLocale = this.findSupportedLocale(request, supportedLocales);if (supportedLocale != null) {return supportedLocale;} else {return defaultLocale != null ? defaultLocale : requestLocale;}} else {return requestLocale;}}
}
4.1.4、直接通过MessageSource类调用
在需要使用的类中先注入MessageSource类,然后通过这个类调用相应的国际化文本信息。
package cool.ale.controller;import cool.ale.entity.Result;
import cool.ale.entity.User;
import cool.ale.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/user")
@Api("用户控制类")
public class UserController {@AutowiredUserService userService;@AutowiredMessageSource messageSource;/*** 查询* @param id* @return*/@GetMapping("/{id}")@ApiOperation("根据用户id查询相应的用户信息")public Result getUser(@PathVariable Integer id){String message = messageSource.getMessage("user.query.success",null, LocaleContextHolder.getLocale());User user = userService.getUser(id);return new Result<>(200,message,user);}
}
4.2、根据传递参数的形式实现国际化
传递参数的形式也就类似于在页面搞一个下拉列表,当选择中文页面就显示中文,当选择英文页面就展示英文。
我们在上面的基础上有以下几个步骤需要操作:
4.2.1、添加国际化拦截器(在MyWebMvcConfiguration类中,自定义的)
/*** 添加拦截器* @param registry*/
@Override
public void addInterceptors(InterceptorRegistry registry) {// 添加国际化拦截器registry.addInterceptor(new LocaleChangeInterceptor()).addPathPatterns("/**"); // 拦截映射规则
}
4.2.2、覆盖掉之前的获取国际化标识的方法(在MyWebMvcConfiguration类中,自定义的)
/*** 重写localeResolver方法,让其在 url 中取参数设置国际化文本* @return*/
@Bean
public LocaleResolver localeResolver() {CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver();// 设置过期时间,设计一个月cookieLocaleResolver.setCookieMaxAge(60*60*24*30);cookieLocaleResolver.setCookieName("locale");return cookieLocaleResolver;
}
4.2.3、测试
http://localhost:8080/user/2?locale=en_US
10、其它
10.1、WebMvcConfigurer原理
其实在SpringMvc的自动配置类WebMvcAutoConfiguration里面有一个静态类也实现了WebMvcConfigurer类,也是通过与上面同样的配置来对一些默认配置的扩展,我们自己只需要扩展一些其它的东西来完善我们的系统。
但是现在有一个问题就是,我们虽然重写了这个接口,但是SpringBoot的配置依然生效,那么这些配置相互之前是如何配合的,需要接下来来研究。
在WebMvcAutoConfiguration类上我们导入了一个EnableWebMvcConfiguration类,如下所示:
@Import({WebMvcAutoConfiguration.EnableWebMvcConfiguration.class})
EnableWebMvcConfiguration类又继承于DelegatingWebMvcConfiguration类,在这个类中会将所有的实现了WebMvcConfigurer接口的类组成一个list存储到delegates委派器中。
private final WebMvcConfigurerComposite configurers = new WebMvcConfigurerComposite();public DelegatingWebMvcConfiguration() {
}@Autowired(required = false
)
public void setConfigurers(List<WebMvcConfigurer> configurers) {if (!CollectionUtils.isEmpty(configurers)) {this.configurers.addWebMvcConfigurers(configurers);}}
在调用这个方法时,会去循环刚才存储的委派器,进行获取。如下所示:
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {Iterator var2 = this.delegates.iterator();while(var2.hasNext()) {WebMvcConfigurer delegate = (WebMvcConfigurer)var2.next();delegate.configureDefaultServletHandling(configurer);}}
注意:我们在自定义的SpringMvc类上千万不能加上@EnableWebMvc注解,因为当我们加上这个注解之后,WebMvcAutoConfiguration类中的扩展方法将会失效。
失效原理:
当我们进入@EnableWebMvc注解的实现的时候,会发现它导入了DelegatingWebMvcConfiguration类
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({DelegatingWebMvcConfiguration.class})
public @interface EnableWebMvc {
}
然而DelegatingWebMvcConfiguration又继承于WebMvcConfigurationSupport类。
而再次看到我们的WebMvcAutoConfiguration类只有在IOC容器中不存在WebMvcConfigurationSupport类的时候才生效,所以,这个时候WebMvcAutoConfiguration类就失效了。
@Configuration(proxyBeanMethods = false
)
@ConditionalOnWebApplication(type = Type.SERVLET
)
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
@AutoConfigureOrder(-2147483638)
@AutoConfigureAfter({DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class})
public class WebMvcAutoConfiguration {
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- RPA项目总失败?送你6条黄金法则
RPA的增长是非常惊人的,尤其是当它与人工智能(AI)一起用于推动智能自动化(IA)时,或者当它与其他技术捆绑时被Gartner称为超自动化。尽管过去经济面临疫情形势严峻的挑战,但85%的Gartner客户表示…...
2024/4/13 13:18:25 - flink 1.10.1 java版本kafka sink写入处理结果到kafka
本文的基础环境可以参考flink 1.10.1 java版本wordcount演示 (nc socket),在此基础上增加输出结果到kafka。 1. 添加依赖 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-kafka_2.11</artifactId>&…...
2024/4/13 13:18:35 - SpringBoot的热部署和日志
SpringBoot的热部署和日志1、SpringBoot中devtools热部署1.1、什么是热部署1.2、如何开启SpringBoot热部署2、SpringBoot日志简介2.1、门面2.2、门面日志2.2.1、log4j的门面日志2.2.2、jul的门面日志2.3、统一日志3、SpringBoot日志集成3.1、SpringBoot默认日志集成3.2、Spring…...
2024/4/15 16:25:36 - 牙龈回缩线行业研究及十四五规划分析报告
2021年全球牙龈回缩线市场规模大约为 亿元(人民币),预计2028年将达到 亿元,2022-2028期间年复合增长率(CAGR)为 %。未来几年,本行业具有很大不确定性,本文的2022-2028年的预测数据是…...
2024/4/7 21:39:32 - 达梦数据库动态增加实时备库
一、原有主备信息 新增加的备库信息 二、前期数据准备 1、数据准备(对主库进行联机备份) SQL> backup database full backupset /opt/dm8/backup; 2、初始化备机数据库 ./dminit path/opt/dm8/data DB_NAMEdmtest INSTANCE_NAMEdmtest 3、还原恢复…...
2024/4/7 21:39:32 - 简单说k8s-Taints(污点)和Tolerations(容忍)
Taint 和 Toleration Taint 和 toleration 相互配合,可以用来避免 pod 被分配到不合适的节点上。 每个节点上都可以应用一个或多个taint ,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接的。 如果将 toleration 应用于 pod上&…...
2024/4/13 13:18:30 - 汇编——16位汇编调试一些练习代码
编译:ml 1.asm调试:debug 1.exe调试命令: r 查看当前位置代码;p 单步步过;t 单步步入;u 查看附近代码 d 0b3b 查看0b3b位置内存;g 运行程序16位汇编代码基本结构 assume cs:code,ds:datadata s…...
2024/4/7 21:39:29 - Docker安装和基本命令
文章目录一级目录二级目录三级目录一、安装1、移除系统自带Docker2、配置yum源3、安装docker4、启动并开机启动5、配置加速镜像二、Docker使用命令1、镜像操作命令2、容器操作命令3、进入容器内部修改文件4、从容器创建一个新的镜像5、共享镜像到其他主机6、容器和主机文件挂载…...
2024/4/15 9:53:44 - Linux so加载顺序
背景 使用gcc8.2编译a.out,机器安装默认的版本为gcc3.4。使用ldd打印so依赖列表,此时libstdc.so位于/usr/lib64目录下 打印程序运行时加载的so库列表,显示加载的是/home/xxx/gcc-8.2/lib/目录下的libstdc.so 使用默认版本编译的程序…...
2024/4/17 22:10:42 - 二叉树前中后序遍历(循环实现)
前序遍历 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res new ArrayList<>();Stack<Integer> stack new Stack<>();while(root ! null || !stack.isEmpty()){if(root ! null){res.push(root.val…...
2024/4/13 13:18:50 - where
$typeNumber str_enhtml($this->input->get(typeNumber,TRUE)); $skey str_enhtml($this->input->get(skey,TRUE)); $where (isDelete0) and typeNumber".$typeNumber."; $where . $skey ? and name like "%.$skey.%" : ;...
2024/4/13 13:19:20 - macos12 homebrew maven openjdk报错
更新完macos12.1以后运行mvn-v等指令时提示jre报错,根本原因是maven依赖的openjdk与最新的mac系统不兼容,我们可以执行下面的命令查看依赖关系: brew deps --tree --installed 解决办法 我们只需要更新一下openjdk至最新版本即可࿰…...
2024/4/7 21:39:24 - Java中的重载 / 重写 / 继承 / 多态
1.前言 最近在用Java编程,一开始我觉得自己对重载(Overload)、重写(Override)还是分得清的,对于继承和多态还是有所了解的。但实践中突然发现了几个问题:静态成员是否可以继承、静态成员是否可以呈现出多态的性质、重载是不是多态。这些问题…...
2024/4/18 0:57:47 - vue单向数据流
vue单向数据流的理解? 父组件向子元素传值,子组件无法直接修改父元素传过来的数据,即子组件无法直接修改props里面的值 为什么要使用单向数据流? 父组件传来的值可能会不断发生变化,例如:父组件传了一个8&a…...
2024/4/17 22:41:36 - Python读取文件时,出现SyntaxError: (unicode error) ‘unicodeescape‘ codec can‘t decode bytes in position 2-3
简短代码如下: import pandas as pd url C:\Users\lic\Desktop\data\mp\1.csv df pd.read_csv(url) print(df) 运行错误:SyntaxError: (unicode error) unicodeescape codec cant decode bytes in position 2-3: truncated \UXXXXXXXX escape 解决办…...
2024/4/13 13:19:35 - MySQL 视图——检查选项(cascaded、local)
视图的检查选项:当使用WITH CHECK OPTION子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如 插入,更新,删除,以使其符合视图的定义。 MySQL允许基于另一个视图创建视图,它还会检查依赖视…...
2024/4/15 16:25:52 - WMS和TMS的三种主要集成方式
WMS和TMS通常都同过OMS或者企业ERP集成,OMS/ERP->WMS->TMS的交互顺序,但是在订单处理、运输计划上差别较大,适合不同的应用行业。 1、基本集成. WMS拣货完成至暂存区后,发送订单至TMS,优点:简单高效准确,缺点:浪…...
2024/4/13 13:19:25 - (3.6B)首字母大写
题目: 代码: #include<stdio.h> #include<string.h> int main(){char str[110];while(fgets(str,110,stdin)!NULL){int lenstrlen(str);for(int i0;i<len;i){if(i0){if(str[i]>a&&str[i]<z){//判断字母就这么简单就好&…...
2024/4/5 2:45:51 - 接口指南,快递鸟物流开放平台API对接,极兔速递
什么是快递鸟? 快递鸟是深圳快金数据的一个接口服务品牌,整合1600多家国内外快递物流公司系统,形成统一标准接口,为电商平台、自营商城、打单工具、WMS仓储系统、APP等需要发货的场景,提供专业的物流跟踪、电子面单等API接口服务…...
2024/4/5 2:45:50 - 新培训学校招生运营营销策划(市场调研+实战资料+招生策划人力资源管理),共7160份,7.88G,附件中为网盘链接
新培训学校招生运营营销策划(市场调研实战资料招生策划人力资源管理),共7160份,7.88G,附件中为网盘链接。 下载地址:https://download.csdn.net/download/mengchensubi/79503785 文档列表内容:…...
2024/4/16 19:57:15
最新文章
- pandas 中的 tolist() 和 to_list()
在使用pandas的时候,有时候会需要将pandas中的数据类型转换为python中的list,而pandas也提供了tolist()和to_list()这两个方法来实现这一需求 几乎可以认为pandas中的tolist()和to_list()用法没有差别 还顺便介绍了numpy中的tolist()方法,其…...
2024/4/18 3:43:03 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - Go语言中如何实现继承
完整课程请点击以下链接 Go 语言项目开发实战_Go_实战_项目开发_孔令飞_Commit 规范_最佳实践_企业应用代码-极客时间 Go语言中没有传统意义上的类和继承的概念,但可以通过嵌入类型(embedded types)来实现类似的功能。嵌入类型允许一个结构…...
2024/4/17 17:03:33 - 【stm32】I2C通信协议
【stm32】I2C通信协议 概念及原理 如果我们想要读写寄存器来控制硬件电路,就至少需要定义两个字节数据 一个字节是我们要读写哪个寄存器,也就是指定寄存器的地址 另一个字节就是这个地址下存储寄存器的内容 写入内容就是控制电路,读出内容就…...
2024/4/17 22:18:29 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/18 0:33:31 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/17 20:29:59 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/15 9:18:15 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/17 2:33:17 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/17 7:50:46 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/15 9:17:44 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/15 13:52:20 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/16 1:58:32 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/16 20:03:42 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/17 1:38:19 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/17 21:50:30 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/15 13:53:08 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/15 9:16:52 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/15 13:53:31 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/16 20:03:44 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/15 9:16:31 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/15 13:54:27 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/15 23:28:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/17 0:53:22 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/15 13:54:53 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) 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 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在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