谈谈spring boot
谈谈spring ,springmvc,spring boot 之间的区别。
Spring,一般指代的是Spring Framework,它是一个开源的应用程序框架,提供了一个简易的开发方式,通过这种开发方式,将避免那些可能致使代码变得繁杂混乱的大量的业务/工具对象,说的更通俗一点就是由框架来帮你管理这些对象,包括它的创建,销毁等,比如基于Spring的项目里经常能看到的Bean,它代表的就是由Spring管辖的对象。
这种方式对业务代码没有任何侵入,它有效的实现松耦合,大家都知道紧耦合的代码是业务发展的噩梦;同时,Spring IOC提供的远不止这些,如通过单例减少创建无用的对象,通过延迟加载优化初始化成本等
spring mvc 是前者的一部分,一种mvc 的开发模式,主要用于web 和接口的开发。
Spring 和 SpringMVC 的问题在于需要配置大量的参数,而sb它的目的在于实现自动配置,降低项目搭建的复杂度,如需要搭建一个接口服务,通过Spring Boot,几行代码即可实现,甚至不需要使用容器,只要生成jar 包即可,因为里面start web 内置了tomcat,使用sb不是说原本的配置没有了,而是他提供了一套默认的配置,算是一个通用的约定,sb的遵循的选择是约定大于配置大于代码。
是一种极其方便的依赖描述,不需要在网上拷贝一堆的配置文件和代码,然后调试,做到开箱就用。
总结,总体的说,就是spring 是一个提供了复杂的功能的一个大容器,后者都算是这个大容器中的两个小的工具。
Spring 就像一个大家族,有众多衍生产品例如 Boot,Security,JPA等等。但他们的基础都是Spring 的 IOC 和 AOP,IOC提供了依赖注入的容器,而AOP解决了面向切面的编程,然后在此两者的基础上实现了其他衍生产品的高级功能;Spring MVC是基于 Servlet 的一个 MVC 框架,主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种xml,properties处理起来比较繁琐。于是为了简化开发者的使用,Spring社区创造性地推出了Spring Boot,它遵循约定优于配置,极大降低了Spring使用门槛,但又不失Spring原本灵活强大的功能
Spring MVC和Spring Boot都属于Spring,Spring MVC 是基于Spring的一个 MVC 框架,而Spring Boot 是基于Spring的一套快速开发整合包。
谈谈spring cloud 有哪些内容
Spring Cloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖析一下其底层的工作原理。也就是Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件。
关于这些技术都有学习过,只是具体的用到,只有euraka ,和feign这两个,Spring Cloud Eureka出场了。Eureka是微服务架构中的注册中心,专门负责服务的注册与发现。
Eureka Client组件,这个组件专门负责将这个服务的信息注册到Eureka Server中。说白了,就是告诉Eureka Server,自己在哪台机器上,监听着哪个端口。而Eureka Server是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号
总结一下:
Eureka Client:负责将这个服务的信息注册到Eureka Server中
Eureka Server:注册中心,里面有一个注册表,保存了各个服务所在的机器和端口号。
Feign是如何做到这么神奇的呢?很简单,Feign的一个关键机制就是使用了动态代理。咱们一起来看看下面的图,结合图来分析:
首先,如果你对某个接口定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理
接着你要是调用那个接口,本质就是会调用 Feign创建的动态代理,这是核心中的核心
Feign的动态代理会根据你在接口上的@RequestMapping等注解,来动态构造出你要请求的服务的地址
最后针对这个地址,发起请求、解析总结一下,上述几个Spring Cloud核心组件,在微服务架构中,分别扮演的角色:
Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里
在服务注册的配置文件中需要什么?
服务名,服务注册的路径,健康检查,显示ip地址,替换应用名的instance name 。
Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台
Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
Hystrix:发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题
Zuul:如果前端、移动端要调用后端系统,统一从Zuul网关进入,由Zuul网关转发请求给对应的服务
注册服务需要配置什么?
springmvc具体流程?
第一,前端控制器,用户请求从前端发送到前端控制器。
第二,前段控制器接受到请求调用映射处理器。
第三,映射处理器通过xml和注解找到具体的处理器,生成处理器对象和拦截对象,返回给前端控制器。
第四,前端控制器再调用处理器适配器来调用适合的处理器。
第五,控制器处理完后,将结果mav返回给前端处理器,前端处理器再传给试图解析器。
第六,试图解析器解析成具体的view ,返回给前端控制器。
第七,前端控制器渲染试图,数据填充。
第八,前端控制器响应。
常用的linux有哪些?
ls 查看当前文件夹下的文件。
cd 切换路径
pwd 查看当前文件夹的路径
mkdir 创建文件夹
rm 删除文件或者文件夹
tail 查看日志文件
ssh 远程连接登录服务器。
list 集合用过哪些?
什么是redis?
它是一个key value 类型的纯内存数据库,他把数据加载到内存中,定期把数据异步刷新到硬盘中保存。
因为是纯内存,所以redis 读写速度非常快,每秒十万次的读写操作。
不仅仅是性能,还有支持多种类型的存储,单个value 的存储大小是1 g 。
缺点是他的大小收到了物理内存的限制,不能做海量数据的高性能操作,只能做较小数据的性能操作。
redis 和mencatch 的优势或者区别。
更高性能的读写操作,支持多类型存储,异步持久化到硬盘
redis支持哪些数据类型。
string list set sort set hash
Redis有哪几种数据淘汰策略?
noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但DEL和几个例外)
allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。
volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。
allkeys-random: 回收随机的键使得新添加的数据有空间存放。
volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。
volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。
查询表中重复次数最多的记录。
select deptid,count(*) from people groupby deptid order by count(*)
arraylist 集合排序,怎么扩容。
网友评论