赞
踩
如何在10亿数中找出前1000大的数(经典topN)
排序算法然后去除前1000个数
部分排序
堆
分治
三方登录某系统,使用其他系统的用户,实现本系统登录的方式
Ticket Cookie
fiddler下载
https://sm.myapp.com/original/Development/FiddlerSetup-5.0.20173.50948.exe
Springboot入门
@SpringBootApplication 启动类(Auto自动启动一些、导入@Import一些)
@ConfigurationProperties 和 @Value 区别 (Auto自动)
@configuration 配置类
@Bean 给spring容器添加组件
@EnableWebMvc SpringMVC全面支持 (@WebMvcCon?gurationSupport基础支持)
@Conditional 条件 派生注解
@Component
@Autowired
@RestController ----》@Controller + @RequestBody
@ReqeustMapping---》GetMaping、PostMaping、PutMaping、DeleteMaping
@Mapper或者mapperScan
@Select()
@Delect()
@Options(useGeneratedKeys = true,keyProperty = "id")
@Insert()
@Update()
一、Spring Boot简介
1、什么是SpringBoot
简化Spirng应用的一个框架
真个Spring技术栈的整合
J2EE开发的一站式解决方案
2、微服务
架构风格、小型服务、可以通过HTTP的方式进行互通
单体应用(一个war)all in one---》
每个功能元素最终都是一个可独立替换和独立升级的软件单元
3、配置文件
【application.yml】(key :空格value)
【application.properties】(默认格式和设置的格式有个能不同)(key=value)
可以使用${random.uuid}随机数
占位符获取之前的配置值,如果没有可以使用 :后跟上指定的默认值
4、【@ConfigurationProperties】和【@Value】区别
都是把配置文件中的配置和对象的属性进行绑定
@ConfigurationProperties 批量注入配置文件中的属性、支持松散绑定,支持JSR3030数据校验、支持复杂类型封装
@Value 一个一个指定、支持SpEL
5、@PropertySource&@ImportResource&@Bean
@PropertySource:指定属性文件,让自定义属性文件被spring加载进来和bean对象的属性进行一一映射。
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效。
@ImportResource(locations = {"classpath:beans.xml"})
【@configuration】
【@Bean】给spring容器添加组件
SpringBoot推荐给容器中添加组件的方式:使用全注解的方式
1)配置类@Configurtion---->Spring配置文件
2) 使用@Bean给容器中添加组件
6、Profile
多Profile文件配置
1)在配置文件中指定 spring.pro?les.active=dev
2)命令行:java -jar spring-boot-02-con?g-0.0.1-SNAPSHOT.jar --spring.proiles.active=dev; 可以直接在测试的时候,配置传入命令行参数
3)虚拟机参数;-Dspring.proiles.active=dev
7、测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloWorldTest{}
@Test
public void helloTest{}
8、配置文件优先级
file./config ----> file ---> classpath./config --->classpath 高优先级会覆盖地优先级的,
四个位置全部查看,互补
还可以通过spring.config.location来改变默认的配置文件位置,和默认的配置共同加载起作用,形成互补配置
9、外部配的加载顺序
1)命令行参数 --servers.port=8087
所有的配置都可以在命令行上进行指定
java -jar spring-boot-02-con?g-02-0.0.1-SNAPSHOT.jar –server.port=8087 –server.context-path=/abc
多个配置用空格分开; –配置项=值
2)来 自 java:comp/env 的 JNDI 属 性
3)Java系统属性(System.getProperties())
10、自动配置原理
1)SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration
利用EnableAutoConfigurationImportSelector给容器中倒入一些组件
可以查看selectImports()方法的内容
List con?gurations = getCandidateCon?gurations(annotationMetadata, attributes);获取候选的配置
类路径下 META-INF/spring.factories 里面配置的所有EnableAutoCon?guration的值加入到了容器中;
@Conditional派生注解(Spring注解版原生的@Conditional作用)
作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置里面的所有内容才生效;
1)、SpringBoot启动会加载大量的自动配置类
2)、我们看我们需要的功能有没有SpringBoot默认写好的自动配置类;
3)、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件有,我们就不需要再来配置了)
4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这 些属性的值;
xxxxAutoConfgurartion:自动配置类; 给容器中添加组件
xxxxProperties:封装配置文件中相关属性;
//Aspect
debut=true 开启
AUTO‐CONFIGURATION REPORT Positive matches:(自动配置类启用的)
Negative matches:(没有启动,没有匹配成功的自动配置类)
三、日志
1、日志框架
市面上的日志框架;JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j….
SLF4j 不知接调用日志的实现了,而是调用日志抽象(Aba)层里面的方法
https://www.slf4j.org
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
配置文件还是做成日志实现框架自己本身的配置文件
(slf4j+logback): Spring(commons-logging)、Hibernate(jboss-logging)、MyBatis、xxxx
总结
1)springboot底层也是使用【slf4j+logback】的方式进行日志记录
2)Springboot也把其他的日志都替换成了slf4j
3)中间替换包
4)如果我们引用了其他框架?一定要把这个默认的日志框架溢出掉
logback.xml:直接就被日志框架识别了;
logback-spring.xml:日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot
的高级Pro?le功能
templates模板
三种引入公共片段的th属性:
th:insert:将公共片段整个插入到声明引入的元素中
th:replace:将声明引入的元素替换为公共片段
th:include:将被引入的片段的内容包含进这个标签中
springmvc auto -configuration
springboot自动配置好了springmvc
自己添加的格式化器转换器,我们只需要放在容器中即可
HttpMessageConverter:SpringMVC用来转换Http请求和响应的;User—Json
如何修改SpringBoot的默认配置
1)SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(@Bean、@Component)如果有就用
用户配置的,如果没有,才会自动配置;如果有些组件可以由多个(ViewResolver)将用户配置的自己默认的组合起来
2)、在SpringBoot中会有非常多的xxxCon?gurer帮助我们进行扩展配置
3)、在SpringBoot中会有很多的xxxCustomizer帮助我们进行定制配置
国际化
LocaleResolver获取区域信息对象
Locale区域信息对象
RequestMapping
PostMapping
GetMapping
PutMapping
DeleteMapping
登录
1、禁用缓存 2、页面修改完成后ctrl+f9重新编译
【Restful】CRUD emp---GET emp---POST emp/{id}---PUT emp/{id}---DELETE
普通CRUD getEmp addEmp?xxx updateEmp>id=xxx deleteEmp?id=xxx
整合Mybaits
整合SpringJPA
SpringData
1)【统一标准】统一的API来对数据访问层进行操作,主要是Commons项目来实现
2)统一的【Respostory接口】
3)统一xxxTemplate:模板 MongoTemplate、RedisTemplate
JPA(规范)@Entity
JPA(ORM Object Relational Mapping)
1)编写一个实体类与数据库
2)public interface UserRepository extends JpaRepository<User, Integer>{}
3)基本配置
jpa:
hibernate:
#更新或者创建数据结构表
ddl-auto: updata
#控制台显示sql
show-sql: true
启动流程
几个重要的时间回调机制
配置在META-INF/spring.factories
ApplicationContextlnitializer
SpringApplicationRunListener
只需要放在ioc容器中
ApplicationRunner
CommandLineRunner
1)、创建SpringApplication对象
initialize(source);
从类路径下 META-INF/spring.factories 找
2)、run()
自定义starter
1)、这个场景需要使用到的依赖是什么
2)、如何编写自动配置
@Configuration //指定这个类是一个配置类
@ConditionalOnxxx //指定条件成立的情况下自动配置类生效
@AutoConfigureAfter //指定自动配置类的顺序
@Bean //给容器中添加组件
@ConfigurationProperties //结合相关的xxxProperties类来绑定相关的配置
@EnableConfigurationProperties //让xxxProperties生效加入到容器中
配置在META-INF/spring.factories
Docker
1、什么是Docker
是一个开源的应用容器引擎,基于Go语言,遵循apache2.0协议开源
Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使 用这个镜像;
运行中的这个镜像称为容器,容器启动是非常快速的。
2、核心概念
docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
docker客户端(Client):连接docker主机进行操作;
docker仓库(Registry):用来保存各种打包好的软件镜像;
docker镜像(Images):软件打包好的镜像;放在docker仓库中;
docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
操作系统环境变量
RandomValuePropertySource配置的random.*属性值
由jar包外向jar包内进行寻找;优先加载带pro?le
jar包外部的application-{pro?le}.properties或application.yml(带spring.pro?le)配置文件
jar包内部的application-{pro?le}.properties或application.yml(带spring.pro?le)配置文件
再来加载不带pro?le
jar包外部的application.properties或application.yml(不带spring.pro?le)配置文件
jar包内部的application.properties或application.yml(不带spring.pro?le)配置文件
10.@Con?guration注解类上的@PropertySource
11.通过SpringApplication.setDefaultProperties指定的默认属性所有支持的配置加载来源;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。