SpringBoot笔记
1.创建
使用idea提供的脚手架创建springboot项目,选上需要的模块,会自动进行导包
打成jar包,之前直接用原生的maven打包的是一个瘦jar,不能直接跑,把服务器上部署的jar排除在外了,但是现在加上打包查件,打包是一个fat jar,安装了java环境,就可以输入命令java -jar [jar包名] 就可以跑起来了(内置了tomcat)
2.原理
1.依赖管理机制:
所有创建的项目是基于一个母模块,可以看到Pom中有一个parent,就是母包,这个依赖中有全部我们需要的依赖,以及对应版本。我们需要哪一块,只需要将start包引入即可,不用填v,母依赖已经做了版本,会自动导其版本。
Build Systems :: Spring Boot
2.自动配置机制
原理:
1.添加启动器 spring-boot-start-XXX
所有的start里面都有一个spring-boot-start,这个里面又有spring-boot-autoconfigure包,里面就是所有配置类。
2.主程序的注解@SpringBootApplication上面有三个注解
其中@EnableAutoConfiguration就是告诉springboot要把哪些类放到容器中
此注解上面有@Import({AutoConfigurationImportSelector.class}),即位置,具体位置是
spring-boot-autoconfigure
下
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
一共146个配置类 名字叫XXXAutoConfiguration
如,ServletWebServerFactoryAutoConfigurationbu
3.不是全部使用,会看你导入了哪些启动类,也就是看这个类在不在,在的话我就配置。
(用条件注解@ConditionalOnxxx实现
)
怎么配置?配置类有很多@Bean,会将配置文件的有关参数读入,然后配给这个bean
就实例化成功了。
3.最佳实践思路
1.添加启动器 spring-boot-start-XXX
2.查看对应的XXXAutoConfiguration类,看里面注册了什么bean,我们可以用什么
3. 写配置 可以查看此bean用了什么配置类,此配置类用的配置文件前缀叫什么 eg.@EnableConfigurationProperties(RedisProperties.class)
这里需要我们提供什么配置,配置名叫什么
我们想要修盖哪些默认配置,在配置文件中修改
我们想要自定义哪些配置,实现WebMvcConfigurer接口
4.使用:
需要用到这些注册好的bean,直接@AutoWried
如果对springboot自动创建放到容器的bean不满意,我们可以直接写个配置类在里面写一个自己的这个Bean,加上@Order配置优先级,就会覆盖了。
@Order
注解通常用于指定某些组件的执行顺序 core包的
4.具体使用
完整版 SpringBoot3-快速入门 · 语雀
1.配置文件格式变为yaml
可以将properties改为yaml格式,更清晰
person:name: 张三age: 18birthDay: 2010/10/10 12:12:12like: truechild:name: 李四age: 20birthDay: 2018/10/10text: ["abc","def"]dogs:- name: 小黑age: 3- name: 小白age: 2cats:c1:name: 小蓝age: 3c2: {name: 小绿,age: 2} #对象也可用{}表示
2.日志
SpringBoot怎么把日志默认配置好的
- 每个
starter
场景,都会导入一个核心场景spring-boot-starter
- 核心场景引入了日志的所用功能
spring-boot-starter-logging
spring-boot-starter-logging
导入了logback + slf4j
,所以作为默认底层日志组合日志是系统一启动就要用
,xxxAutoConfiguration
是系统启动好了以后放好的组件,后来用的。- 日志是利用监听器机制配置好的。
ApplicationListener
。
可以看到在spring-boot-autoconfigure包下,找到logging相关自动配置,没有xxxAutoConfiguration文件,都是监听器
- 日志所有的配置都可以通过修改配置文件实现。以
logging
开始的所有配置。
总结:日志是系统一启动就会打印的,是用监听器机制实现的
会读spring-boot包里的文件additional-spring-configuration-metadata.json配置日志格式
(日志是springboot很底层的东西,所以在spring-boot包下写的配置,其余系统已开启就有的东西,也会放到上述的文件中,如banner就是spring图标)
常见使用
日志所有的配置都可以通过修改配置文件实现。以logging
开始的所有配置。
1.修改输出格式 logging.pattern.console
可尝试修改为
'%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} ===> %msg%n'
还可以单独修改某一部分的格式,如logging.pattern.dateformat单独修改日期格式
2.修改日志级别
由低到高:ALL,TRACE, DEBUG, INFO, WARN, ERROR,FATAL,OFF
;
只会打印指定级别及以上级别的日志
不指定级别的所有类,都使用root指定的级别作为默认级别
SpringBoot日志默认级别是 INFO,可以用logging.level.root修改
3.日志分组
将相关的logger分组在一起,统一配置。指定一些类的级别,不用root的级别了。
logging.group.mineGroup=com.yang.controller.test,com.yang.service.test
logging.level.mineGroup=debug
4.文件输出
SpringBoot 默认只把日志写在控制台,如果想额外记录到文件,可以在application.properties中添加logging.file.name or logging.file.path配置项。
如:logging.file.name=my.log 在项目底下出现my.log(路径D:\java\projects\springboot\my.log)
5.文件归档与滚动切割(防止打开log太卡了,文件太大)
归档:每天的日志单独存到一个文档中。
切割:每个文件10MB,超过大小切割成另外一个文件。
最佳实战
- 导入任何第三方框架,先排除它的日志包,因为Boot底层控制好了日志
- 修改
application.properties
配置文件,就可以调整日志的所有行为。如果不够,可以编写日志框架自己的配置文件放在类路径下就行,比如logback-spring.xml
,log4j2-spring.xml
- 如需对接专业日志系统,也只需要把 logback 记录的日志灌倒 kafka之类的中间件,这和SpringBoot没关系,都是日志框架自己的配置,修改配置文件即可
- 业务中使用slf4j-api记录日志。不要再 sout 了
3.web启动器分析(spring-starter-web)
2、SpringBoot3-Web开发 · 语雀超详细解析)
前面原理说过了,自动导入以下web相关的AutoConfiguration类
org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration
org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration
====以下是响应式web场景和现在的没关系======
org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.ReactiveMultipartAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.WebSessionIdResolverAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration
org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration
================以上没关系=================
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration
点进去每个自动配置类,都在里面注册了很多bean,然后有些bean上面绑定了配置类,配置类与配置文件绑定,有如下几个绑定的配置项。
- 1、SpringMVC的所有配置
spring.mvc
- 2、Web场景通用配置
spring.web
- 3、文件上传配置
spring.servlet.multipart
- 4、服务器的配置
server
: 比如:编码方式
分析WebMvcAutoConfiguration
静态资源访问
1.发送请求,用两个过滤器,将form表单发送的delete,put请求正确处理
2.DispatcherServle会分析此请求是否是静态资源路径,默认前缀为/**
3.如果是静态资源路径,会从存放静态资源的路径下查找,默认为
classpath:/META-INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public/
4.所有静态资源都定义了缓存规则。【浏览器访问过一次,就会缓存一段时间】,但此功能参数无默认值(静态路径在注册时,就会配置好缓存规则)
- cachePeriod: 缓存周期; 多久不用找服务器要新的。 默认没有,以s为单位
- cacheControl: HTTP缓存控制;https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Caching
- useLastModified:是否使用最后一次修改。配合HTTP Cache规则,默认为true
5.还定义了欢迎页面,一开始打开就会走欢迎页,在上述静态资源路径下查找,没有就在 templates下找index模板页
6.浏览器访问资源后会自动发请求要favicon.ico,服务器在静态资源目录下找 favicon.ico
修改配置
所有的默认配置都可以自定义,配置方式有两种,1.修改配置文件 2.实现WebMvcConfigurer接口
以修改静态资源为例
1.修改配置文件
spring.mvc:修改静态资源的前缀
spring.web:修改静态资源路径 以及 缓存机制
server.port=9000#1、spring.web: # 1.配置国际化的区域信息 # 2.静态资源策略(开启、处理链、缓存)#开启静态资源映射规则 默认也是开启的 spring.web.resources.add-mappings=true#设置缓存 #spring.web.resources.cache.period=3600 ##缓存详细合并项控制,覆盖period配置: ## 浏览器第一次请求服务器,服务器告诉浏览器此资源缓存7200秒,7200秒以内的所有此资源访问不用发给服务器请求,7200秒以后发请求给服务器 spring.web.resources.cache.cachecontrol.max-age=7200 #使用资源 last-modified 时间,来对比服务器和浏览器的资源是否相同没有变化。相同返回 304 #浏览器规定刷新就一定要访问服务器,服务器返回最后一次修改时间,一致返回304还是走缓存 spring.web.resources.cache.use-last-modified=true#自定义静态资源文件夹位置 spring.web.resources.static-locations=classpath:/a/,classpath:/b/,classpath:/static/#2、 spring.mvc ## 2.1. 自定义webjars路径前缀 spring.mvc.webjars-path-pattern=/wj/** ## 2.2. 静态资源访问路径前缀 spring.mvc.static-path-pattern=/static/**
2.实现WebMvcConfigurer接口
这种修改方式,是保留所有springboot的默认参数。自己可以额外添加规则。这中方式很常用,就是springboot中没有此规则就实现此接口,写自己的方法。springboot默认资源从static找之类的,都是生效的。只要在容器中放WebMvcConfigurer组件就会生效,原理看雷神文章。
此接口的内容:
我们配制自己静态资源规则,就要重写addResourceHandlers方法。(仿照源码来写)
@Configuration //这是一个配置类 public class MyConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {//保留以前规则//自己写新的规则。registry.addResourceHandler("/static/**").addResourceLocations("classpath:/a/","classpath:/b/").setCacheControl(CacheControl.maxAge(1180, TimeUnit.SECONDS));} }
我们也可以添加拦截器,首先实现一个
HandlerInterceptor
接口,接着用addInterceptors方法添加此拦截器。public class MainInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("我是处理之前!");return true; //只有返回true才会继续,否则直接结束}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("我是处理之后!");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {//在DispatcherServlet完全处理完请求后被调用System.out.println("我是完成之后!");} }
@Override public void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MainInterceptor()).addPathPatterns("/**") //添加拦截器的匹配路径,只要匹配一律拦截.excludePathPatterns("/home"); //拦截器不进行拦截的路径 }
补充:编写过滤器(过滤器不是spring的特性,是servlet中的,先于servlet执行)
实现Filter接口,将实现的Filter set到FilterRegistrationBean中然后设置其优先级以及拦截路径等,将FilterRegistrationBean注入到容器中。(搞明白拦截器和过滤器区别,spring特有拦截器)
访问controller层的原理
DispatcherServlet接收请求(默认支持两种:ant风格和restful风格)
会用起方法准备两个东西:
HandlerMethodArgumentResolver
:参数解析器,确定目标方法每个参数值HandlerMethodReturnValueHandler
:返回值处理器,确定目标方法的返回值该怎么处理
得到执行链对象,包括要执行的方法(Controller)和拦截器,之后执行拦截器的preHandle再执行Controller,执行完毕后会返回一个对象,之后执行拦截器的postHandle方法
紧接着,给返回对象找到一个合适的返回值处理器 HandlerMethodReturnValueHandler
之后执行处理的方法
- 如果标注了
@ResponseBody
注解,会找到一个能处理标注此注解的方法,找到对应消息处理器。有内容协商(2种方式),选择要求的处理器,如果有,返回即可;没有内容协商,默认json。 - 没标此注默认统一返回ModelAndView对象,走视图解析器,ViewResolver(视图解析器)将逻辑视图转为物理视图(加上前缀和后缀),返回一个视图对象,之后视图对象将内容转为html,对应消息转化器将html文件写入响应体,DispatcherServlet发给浏览器,完成渲染
最后执行拦截器的afterCompletion方法。
WebMvcAutoConfiguration提供几种默认HttpMessageConverters
ByteArrayHttpMessageConverter
: 支持字节数据读写StringHttpMessageConverter
: 支持字符串读写ResourceHttpMessageConverter
:支持资源读写ResourceRegionHttpMessageConverter
: 支持分区资源写出AllEncompassingFormHttpMessageConverter
:支持表单xml/json读写MappingJackson2HttpMessageConverter
: 支持请求响应体Json读写
WebMvcAutoConfiguration实现了WebMvcConfigurationSupport
WebMvcConfigurationSupport提供了很多默认配置,其中就有消息处理器添加的功能。
判断系统中是否有相应的类:如果有,就加入相应的HttpMessageConverter
jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) &&ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader);
jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader);
jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader);
所以导入jackon的xml包也就有了xml的消息转化器。在pojo类上加上
像yaml的格式,我们即使导入了转换包,也没有消息处理器,需要自己写一个。
内容协商
1.内容协商的两种方式:
1)Accept请求头,请求头要求什么格式返回什么格式,默认开启的
如:浏览器端
可以要的格式有这么多,优先text/html
像客户端,就会accpt就会是json优先
2)请求参数,需要开启【看雷神的文章去】
(格式如:application/json text/html ,也可以在springboot配置文件中自定义)
分析ErrorMvcAutoConfiguration
springboot的错误机制
SpringMVC的错误处理机制依然保留,MVC处理不了,才会交给boot进行处理,boot就是转协商转错误页面还是其他格式到。
回顾springMVC错误机制:
在某个类中写方法并标注@@ExceptionHandler(处理的异常类型.class),此类中出现此异常,都会交给此方法来处理。
也可以设置全局异常处理器类,所有的类出现对应异常都会跑到此类执行对应方法。
方法参数可以接收Exception,打印异常信息。
@ControllerAdvice
@RestController
public class AllError {@ExceptionHandler(Exception.class)public String error(Exception e) {return "error"+e.getMessage();}
}
分析ServletWebServerFactoryAutoConfiguration和EmbeddedWebServerFactoryCustomizerAutoConfiguration
容器tomcat启动就是这两,启动后ioc容器会创建web工厂,默认有tomcat所以创建了tomcat服务器
- 修改
server
下的相关配置就可以修改服务器参数 - 通过给容器中放一个
ServletWebServerFactory
,来禁用掉SpringBoot默认放的服务器工厂,实现自定义嵌入任意服务器
web最佳实践
4.数据整合
1.导入mybatis-spring-boot-starter和mysql-connector-java
2.编写数据源配置
spring.datasource.url=jdbc:mysql://192.168.200.100:3306/demo
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
3.配置mybatis,如mapper文件位置,是否开启驼峰模式等,所有在mybaits配置文件中可配的都可配
#指定mapper映射文件位置
mybatis.mapper-locations=classpath:/mapper/*.xml
#参数项调整
mybatis.configuration.map-underscore-to-camel-case=true
4.使用时,要将mapper接口代理为实现类,可以用注解@MapperScan做扫包,或者将mapper接口上添加@Mapper注解
5.编写mapper文件或者添加注解
- 使用
mybatisx
插件,快速生成MapperXML
原理:
1.jdbc场景的自动配置:
mybatis-spring-boot-starter
导入 spring-boot-starter-jdbc
,jdbc是操作数据库的场景
有DataSourceAutoConfiguration,数据源的自动配置,读配置文件,默认数据源是HikariDataSource
有DataSourceTransactionManagerAutoConfiguration,支持事务
2.MyBatisAutoConfiguration
:配置了MyBatis的整合流程(在mybaits-spring-boot-starter包中)
数据源配置好后,会配置SqlSessionFactory和SqlSessionTemplate
(要用aop功能还要导入spring-boot-starter-aop包_)
认证/授权详解,JWT
Spring Security
监听器
相关文章:
SpringBoot笔记
1.创建 使用idea提供的脚手架创建springboot项目,选上需要的模块,会自动进行导包 打成jar包,之前直接用原生的maven打包的是一个瘦jar,不能直接跑,把服务器上部署的jar排除在外了,但是现在加上打包查件&am…...
一、TensorFlow的建模流程
1. 数据准备与预处理: 加载数据:使用内置数据集或自定义数据。 预处理:归一化、调整维度、数据增强。 划分数据集:训练集、验证集、测试集。 转换为Dataset对象:利用tf.data优化数据流水线。 import tensorflow a…...
4 Hadoop 面试真题
4 Hadoop 面试真题 1. Apache Hadoop 3.0.02. HDFS 3.x 数据存储新特性-纠删码Hadoop面试真题 1. Apache Hadoop 3.0.0 Apache Hadoop 3.0.0在以前的主要发行版本(hadoop-2.x)上进行了许多重大改进。 最低要求的Java版本从Java 7增加到Java 8 现在&…...
信息学奥赛一本通 ybt 1608:【 例 3】任务安排 3 | 洛谷 P5785 [SDOI2012] 任务安排
【题目链接】 ybt 1608:【 例 3】任务安排 3 洛谷 P5785 [SDOI2012] 任务安排 【题目考点】 1. 动态规划:斜率优化动规 2. 单调队列 3. 二分答案 【解题思路】 与本题题面相同但问题规模不同的题目: 信息学奥赛一本通 1607:…...
实验六 项目二 简易信号发生器的设计与实现 (HEU)
声明:代码部分使用了AI工具 实验六 综合考核 Quartus 18.0 FPGA 5CSXFC6D6F31C6N 1. 实验项目 要求利用硬件描述语言Verilog(或VHDL)、图形描述方式、IP核,结合数字系统设计方法,在Quartus开发环境下ÿ…...
基于最近邻数据进行分类
人工智能例子汇总:AI常见的算法和例子-CSDN博客 完整代码: import torch import numpy as np from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score import matplotlib.pyplot as plt# 生成一个简单的数据…...
SpringSecurity:There is no PasswordEncoder mapped for the id “null“
文章目录 一、情景说明二、分析三、解决 一、情景说明 在整合SpringSecurity功能的时候 我先是去实现认证功能 也就是,去数据库比对用户名和密码 相关的类: UserDetailsServiceImpl implements UserDetailsService 用于SpringSecurity查询数据库 Logi…...
redex快速体验
第一步: 2.回调函数在每次state发生变化时候自动执行...
Flask框架基础入门教程_ezflaskapp
pip install flaskFlask 快速入门小应用 学东西,得先知道我们用这个东西,能做出来一个什么东西。 一个最小的基于flask 的应用可能看上去像下面这个样子: from flask import Flask app Flask(__name__)app.route(/) def hello_world():ret…...
Anaconda 全面解析:从入门到精通的操作教程
大家好,我是滔滔,欢迎来到我的空间。先简单介绍下anconda 一、环境管理 轻松创建独立的 Python 环境:可以为不同的项目创建不同的环境,每个环境可以有不同的 Python 版本和安装不同的包,避免了包冲突问题。例如&…...
3D图形学与可视化大屏:什么是材质属性,有什么作用?
一、颜色属性 漫反射颜色 漫反射颜色决定了物体表面对入射光进行漫反射后的颜色。当光线照射到物体表面时,一部分光被均匀地向各个方向散射,形成漫反射。漫反射颜色的选择会直接影响物体在光照下的外观。例如,一个红色的漫反射颜色会使物体在…...
HTML-新浪新闻-实现标题-排版
标题排版 图片标签:<img> src:指定图片的url(绝对路径/相对路径) width:图片的宽度(像素/相对于父元素的百分比) heigth:图片的高度(像素/相对于父元素的百分比&a…...
.Net / C# 分析文件编码 并将 各种编码格式 转为 另一个编码格式 ( 比如: GB2312→UTF-8, UTF-8→GB2312)
相关库 .Net 8 编码识别: github.com/CharsetDetector/UTF-unknown <PackageReference Include"UTF.Unknown" Version"2.5.1" />代码 using UtfUnknown;var dir_path "D:\\Desktop\\新建文件夹2\\新建文件夹"; var dir_new_path &quo…...
本地部署 DeepSeek-R1 大模型
本地部署 DeepSeek-R1 大模型指南 1. 引言 1.1 DeepSeek-R1 模型简介 在人工智能的世界里,大型语言模型(LLM)正如一座巨大的宝库,里面储存着丰富的信息和无限的潜力。而DeepSeek-R1,就像那扇打开智慧之门的钥匙。它…...
canvas的基本用法
canvas canvas元素简介 1.是个container元素<canvas width100 height100></canvas>,有开闭标签 2.有且只有width和height两个attribute,不需要写单位 canvas的基本使用 const canvasEl document.getElementById(canvas01) const ctx …...
力扣【416. 分割等和子集】详细Java题解(背包问题)
首先我们可以求出数组和,当我们找到一个子集中元素的和为数组和的一半时,该就说明可以分割等和子集。 对于该问题我们可以转换成背包问题,求 数组里的元素 装入 数组和的一半大小的背包 能取得的最大值。 然后注意可以剪枝的地方。 代码&…...
UE学习日志#17 C++笔记#3 基础复习3
19.2 [[maybe_unused]] 禁止编译器在未使用某些内容时发出警告 19.3 [[noreturn]] 永远不会把控制权返回给调用点 19.4 [[deprecated]] 标记为已弃用,仍然可以使用但是不鼓励使用 可以加参数表示弃用的原因[[deprecated("")]] 19.5 [[likely]]和[[un…...
c++:vector
1.使用 1.1构造函数 常见的三种构造方式:空构造,拷贝构造,指定元素构造 1.2iterator begin和end也分为正向和反向。 注意:反向迭代器可以反向遍历是因为在定义rbegin和rend函数的时候把尾地址给到了rbegin,而不是说改…...
37. RGBLCD实验
一、RGBLCD显示原理简介 1、像素点 于一个“小灯“,不管是液晶屏,还是手机,平板,RGBLCD屏幕他都是有由一个个的彩色小灯构成的。彩色点阵屏每个像素点有三个小灯,红色、绿色和蓝色,也叫做RGB。RGB就是光的…...
反馈驱动、上下文学习、多语言检索增强等 | Big Model Weekly 第55期
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 01 A Bayesian Approach to Harnessing the Power of LLMs in Authorship Attribution 传统方法严重依赖手动特征,无法捕捉长距离相关性,限制了其有效性。最近的研究利用预训练语言模型的…...
【深度分析】微软全球裁员计划不影响印度地区,将继续增加当地就业机会
当微软的裁员刀锋掠过全球办公室时,班加罗尔的键盘声却愈发密集——这场资本迁徙背后,藏着数字殖民时代最锋利的生存法则。 表面是跨国公司的区域战略调整,实则是全球人才市场的地壳运动。微软一边在硅谷裁撤年薪20万美金的高级工程师&#x…...
H. Mad City
题目链接:Problem - H - Codeforces 题目大意:给定一个带环的图, 以及a, b两点 判断再图上不断的移动, b想不与a相遇, a想捉到b, 并且二者只能移动一步。 若b跑不掉 NO 否则YES. 具体题目看链接 输入: …...
【C++】类与对象(下)
🦄 个人主页: 小米里的大麦-CSDN博客 🎏 所属专栏: 小米里的大麦——C专栏_CSDN博客 🎁 代码托管: 小米里的大麦的Gitee仓库 ⚙️ 操作环境: Visual Studio 2022 文章目录 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit 关键…...
AJAX案例——图片上传个人信息操作
黑马程序员视频地址: AJAX-Day02-11.图片上传https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p26 图片上传 <!-- 文件选择元素 --><input type"file"…...
Redis-布隆过滤器
文章目录 布隆过滤器的特点:实践布隆过滤器应用 布隆过滤器的特点: 就可以把布隆过滤器理解为一个set集合,我们可以通过add往里面添加元素,通过contains来判断是否包含某个元素。 布隆过滤器是一个很长的二进制向量和一系列随机映射函数。 可以用来检索…...
OpenCV 图像旋转
在学习 OpenCV 和 Matplotlib 处理图像时,遇到了一些关于 cv2.imread()、cv2.getRotationMatrix2D()、plt.imshow() 的问题: import cv2 import numpy as np import matplotlib.pyplot as pltimg cv2.imread(img2.png, 1) # 读取彩色图像(…...
联想Y7000+RTX4060+i7+Ubuntu22.04运行DeepSeek开源多模态大模型Janus-Pro-1B+本地部署
直接上手搓了: conda create -n myenv python3.10 -ygit clone https://github.com/deepseek-ai/Janus.gitcd Januspip install -e .pip install webencodings beautifulsoup4 tinycss2pip install -e .[gradio]pip install pexpect>4.3python demo/app_januspr…...
在线知识库创建与维护提升企业效率与知识共享能力
内容概要 在当今数字化快速发展的背景下,在线知识库逐渐成为企业管理信息的重要工具。其核心在于将知识进行系统化、结构化的整理和存储,便于员工获取和分享。这不仅提高了信息的访问效率,还促进了团队之间的协作。在线知识库的建立可以有效…...
C语言指针专题二 -- 字符指针与字符串
目录 1. 字符指针与字符串的核心原理 字符串的本质 字符串的存储 字符指针的特性 字符指针的操作 2. 编程实例 3. 常见陷阱与注意事项 4. 总结 1. 字符指针与字符串的核心原理 字符串的本质 C语言中没有独立的字符串类型,字符串本质是 以\0(空…...
玄武计划--干中学,知行合一
作为开发者转型安全领域有一定优势,但需要系统学习网络安全知识。以下是针对你的情况(Java背景 + 快速入门)的实战导向学习路径,分为基础、工具、漏洞利用和进阶四个阶段: 一、基础准备(1-2周) 网络协议与渗透基础 重点协议:深入理解 TCP/IP、HTTP/HTTPS、DNS、SMTP,用…...
处理 .gitignore 未忽略文件夹问题
本地删除缓存 例如 .idea 文件夹被其他同事误提交,那么他本地执行以下代码 git rm -r --cached .idea对应本地再提交即可...
实验七 JSP内置对象II
实验七 JSP内置对象II 目的: 1、掌握JSP内置对象的使用。 2、理解JSP的作用域 3、掌握session,application对象的使用 实验要求: 1、完成实验题目 2、要求提交实验报告,将代码和实验结果页面截图放入报告中 实验过程:…...
【Leetcode 每日一题 - 补卡】219. 存在重复元素 II
问题背景 给你一个整数数组 n u m s nums nums 和一个整数 k k k,判断数组中是否存在两个 不同的索引 i i i 和 j j j,满足 n u m s [ i ] n u m s [ j ] nums[i] nums[j] nums[i]nums[j] 且 ∣ i − j ∣ < k |i - j| < k ∣i−j∣<…...
Flask数据的增删改查(CRUD)_flask删除数据自动更新
查询年龄小于17的学生信息 Student.query.filter(Student.s_age < 17) students Student.query.filter(Student.s_age.__lt__(17))模糊查询,使用like,查询姓名中第二位为花的学生信息 like ‘_花%’,_代表必须有一个数据,%任何数据 st…...
web自动化——前端知识
<iframe> 是 HTML 中的一个元素,用于在当前网页中嵌入另一个网页或文档。它就像一个“窗口”,可以在页面中显示其他内容。 主要特点: 嵌入外部内容:可以在网页中嵌入其他网页、视频、地图等。独立上下文:嵌入的…...
计算机网络一点事(22)
地址解析协议ARP ARP:查询Mac地址 ARP表(ARP缓存):记录映射关系,一个数据结构,定期更新ARP表 过程:请求分组,响应分组 动态主机配置协议DHCP 分配IP地址,配置默认网关…...
SG算法解析
Savitzky-Golay 滤波器的核心代码主要集中在计算投影矩阵B并使用这个矩阵对输入信号进行滤波。这部分核心代码包括计算B矩阵、处理边界效应和进行实际滤波操作。以下是对核心代码的一点解释: ① 计算 Savitzky-Golay 投影矩阵B B sgolay(order, framelen, weight…...
Ubuntu Server连接wifi
背景 家里服务器放在客厅太吵了, 准备挪到阳台, 所以买了TP wifi接收器, 因此需要配置wifi连接. 刚开始买了Tenda Ax300, 结果不支持服务器系统, 买前还是得和客服交流交流. 准备 驱动安装 对于windows系统来说, 这款接收器是免驱的, 但在linux上需要安装相应型号驱动 安装…...
Linux 4.19内核中的内存管理:x86_64架构下的实现与源码解析
在现代操作系统中,内存管理是核心功能之一,它直接影响系统的性能、稳定性和多任务处理能力。Linux 内核在 x86_64 架构下,通过复杂的机制实现了高效的内存管理,涵盖了虚拟内存、分页机制、内存分配、内存映射、内存保护、缓存管理等多个方面。本文将深入探讨这些机制,并结…...
L30.【LeetCode笔记】设计链表
1.题目 707. 设计链表 - 力扣(LeetCode) 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向…...
使用Pygame制作“Flappy Bird”游戏
1. 前言 Flappy Bird 是一款“点击上浮、松手下落”的横向卷轴游戏: 场景中持续出现上下成对的管道,玩家需要让小鸟在管道之间穿行;每穿过一对管道记 1 分;若小鸟碰到管道或掉到地面,则游戏结束;一旦上手…...
PHP中配置 variables_order详解
variables_order 是 PHP 配置文件 php.ini 中的一项配置指令,决定了 PHP 在处理请求时,哪些类型的变量将被注册到全局变量空间(如 $GLOBALS)中,以及这些变量的顺序。理解和正确配置 variables_order 对于开发和维护安全…...
Go学习:运算符总结
在 Go语言中,一元运算符拥有最高的优先级,二元运算符的运算方向均是从左至右。 下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:...
JS面相对象小案例:自定义安全数组
在JS中,数组不像其他语言(java、python)中那样安全,它具有动态性和弱类型性,切越界访问没有具体的报错,而是返回空,为提升数组的安全性,我们可以自行定义一个安全数组。 一、增加报…...
将markdown文件转为word文件
通义千问等大模型生成的回答多数是markdown类型的,需要将他们转为Word文件 一 pypandoc 介绍 1. 项目介绍 pypandoc 是一个用于 pandoc 的轻量级 Python 包装器。pandoc 是一个通用的文档转换工具,支持多种格式的文档转换,如 Markdown、HTM…...
Unet 改进:在encoder和decoder间加入TransformerBlock
目录 1. TransformerBlock 2. Unet 改进 3. 完整代码 Tips:融入模块后的网络经过测试,可以直接使用,设置好输入和输出的图片维度即可 1. TransformerBlock TransformerBlock是Transformer模型架构的基本组件,广泛应用于机器翻译、文本摘要和情感分析等自然语言处理任务…...
LeetCode题练习与总结:两个列表的最小索引总和--599
一、题目描述 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。…...
IBM数据与人工智能系列 安装 IBM 编程助手
登录CPD环境 ${CPDM_OC_LOGIN} 安装编程助手 cpd-cli manage apply-olm \ --release${VERSION} \ --cpd_operator_ns${PROJECT_CPD_INST_OPERATORS} \ --componentswca cpd-cli manage apply-cr \ --componentswca \ --release${VERSION} \ --cpd_instance_ns${PROJECT_CPD…...
细说机器学习算法之ROC曲线用于模型评估
系列文章目录 第一章:Pyhton机器学习算法之KNN 第二章:Pyhton机器学习算法之K—Means 第三章:Pyhton机器学习算法之随机森林 第四章:Pyhton机器学习算法之线性回归 第五章:Pyhton机器学习算法之有监督学习与无监督…...
unity学习25:用 transform 进行旋转和移动,简单的太阳地球月亮模型,以及父子级关系
目录 备注内容 1游戏物体的父子级关系 1.1 父子物体 1.2 坐标关系 1.3 父子物体实际是用 每个gameobject的tranform来关联的 2 获取gameObject的静态数据 2.1 具体命令 2.2 具体代码 2.3 输出结果 3 获取gameObject 的方向 3.1 游戏里默认的3个方向 3.2 获取方向代…...