Java面向对象编程:把问题分解成各个对象,为某个事物在解决整个问题的过程中所发生的行为,面向对象具有,封装、继承、多态的特性。
封装:把类的内部数据隐藏起来,对外提供统一可访问的接口。
继承:子类继承父类,子类也能有自己的行为和方法,子类还能派生子类,java支持单继承
多态:存在继承关系,子类重写父类的方法,父类引用变量指向子类对象
接口和抽象类的区别:
区别1:抽象类体现继承关系,一个类只能单继承
接口体现实现关系,一个类可以多实现
区别2:抽象是继承,is a的关系
接口是实现,like a的关系
区别3:抽象类中可以定义非抽象方法,供子类直接使用
接口的方法都是抽象,接口中的成员都有固定的修饰符
共同点:都是不断抽像出来的抽象的概念
重写和重载的区别:
1.重载:
(1)在本类中方法名相同参数列表不同,参数个数类型顺序不同与修饰符和返回值无关
2.重写:
(1)子类重写父类的方法,方法名相同,参数相同,返回类型相同
常用的集合框架有哪些?
1、collection 顶层接口 里面有集合常用的方法
2、collections 工具类 操作集合的常用方法
3、list集合 ArrayList linkedlist
4、set集合 hashset treeset
5、map集合 hashmap linkedhashmap treemap hashtable
6、queue队列
Java的设计模式:单例模式,工厂模式,代理模式,建造模式,适配器模式
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
实现单例模式的方法:懒汉模式、饿汉模式
懒汉模式:在类加载的时候不被初始化,非线程安全可以加锁来解决线程安全问题,需要手动创建
饿汉模式:在类加载的时候就完成了初始化,但是加载比较慢,获取对象比较快,是线程安全的,启动时就创建
数据库的三大范式:
1.字段不可再分
2.非主键字段依赖于主键
3.不能间接依赖主键
Spring
Spring的常用注解:
@Component:标注一个普通的Spring Bean类。
@Controller:标注一个控制器组件类。
@Service:标注一个业务层组件类。
@Repository:标注一个dao持久层组件类。
Spring:是针对bean的生命周期进行管理的轻量级容器
Spring中的Bean的生命周期:实例化Bean --> Bean的属性填充 --> 初始化Bean -->销毁Bean
Spring中bean的作用域:
(1)singleton:默认作用域,单例bean,每个容器中只有一个bean的实例。
(2)prototype:为每一个bean请求创建一个实例。
(3)request:为每一个request请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
(4)session:与request范围类似,同一个session会话共享一个实例,不同会话使用不同的实例。
(5)global-session:全局作用域,所有会话共享一个实例。如果想要声明让所有会话共享的存储变量的话,那么这全局变量需要存储在global-session中。
IOC:控制反转,把创建对象的控制权给Spring框架进行管理,并且由Spring根据配置文件去创建实例和管理各个实例
IOC的三种注入方式:构造器注入、setter方法注入、P命名空间注入(工厂方式注入)
AOP:面向切面编程,是面向对象的一种补充,将那些与业务无关的行为,全部封装为一个可重用的模块,目的就是减少代码的重复,减低模块间的耦合度,提高性能的可维护性,可用于权限认证、日志、事务处理
Myabtis
mybatis实现分页的几种方式?
借助数组进行分页:
原理:进行数据库查询操作时,获取到数据库中所有满足条件的记录,保存在应用的临时数组中,再通过List的subList方法,获取到满足条件的所有记录。
借助SQL语句进行分页:
实现:在sql语句后面添加limit分页语句。
使用RowBounds对象:
直接使用RowBounds封装起始位置(index)和数目(size)这两个参数传给xml配置文件。直接进行分页。
使用PageHelper插件:
原理实现:因为注册了PageHelper插件,它会在原生的sql后面加上limit,然后调用它的startPage方法实现分页。
Mybatis的9种动态sql标签:trim | if | where | set | foreach | when | choose | bind | otherwise
mybatis一级缓存和二级缓存的区别?
- 一级缓存(本地缓存)
一级缓存:
1.mybatis一级缓存是SqlSession级别的缓存
2.在操作数据库的时候需要构造sqlsession对象,在对象中有一个数据结构(HashMap)用于存储数据。
3.不同的Sqlsession之间的缓存数据区域是互相不影响的,是独立的
4.一级缓存是框架默认为我们开启的,我们不需要做任何配置
- 二级缓存(全局缓存)
二级缓存是mapper级别的缓存,多个Sqlsession去操作一个mapper.xml语句,多个sqlseesion共用一个二级缓存,
mybatis中如何返回增加时的主键
首先我们要确保主键是自增的,然后只需要在insert方法里添加useGeneratedKeys和keyproperty两个属性。
1.useGeneratedKeys="true"属性设置该insert语句返回主键值。
2. keyproperty=“id” 属性设置该主键对应的实体的属性。
#{}和${}的区别是什么?
#{}是预编译处理(底层使用的是PreparedStatement),防止sql注入;${}是字符串替换。
SpringMVC
SpringMVC:是一轻量级Web框架、把复杂的web应用分成逻辑清晰的几部分,M(model)--模型层、V(View)--视图层、C(Controller)--控制器层
SpringMVC的常用注解:
@Controller:声明该类为SpringMVC中的控制器类
@RequestMapping:用于请求的路径映射
@Resource:和Autowired差不多,按照name来找,没找到就按照type类型来找
@Autowired:完成自动装配的工作,按照类型type来注解
@PathVariable: 可以将 URL 中占位符参数绑定到控制器处理方法的入参中
@requestParam:url必须带有参数
@ResponseBody:将controller方法返回对象转化为json响应给客户。
@RequestBody:实现接收 http请求的json数据,将json数据转换为java对象。
SpringMVC的请求流程:
1、首先用户发送请求到前端控制器,然后委托请求给处理器
2、页面控制器接收到请求后,进行功能处理,处理完毕后返回一个模型数据
3、前端控制器收回控制权,选择相应的视图进行渲染,并把模型数据传入以便视图渲染
4、前端控制器再次收回控制权,将响应返回给用户
SpringBoot
springboot和springmvc的区别:
spring boot只是一个配置工具,整合工具,辅助工具.
springmvc是框架,项目中实际运行的代码
SpringBoot和SpringCloud的区别?
1.SpringBoot专注于快速开发单个微服务,SpringCloud是将SpringBoot开发的一个个单体微服务整合并管理起来,它是关注全局的服务治理框架(RPC远程调用技术、服务治理等);
2.SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖的关系。
用过哪些Springboot的启动器:
1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置、日志和YAML。
2)spring-boot-starter-amqp 通过spring-rabbit来支持AMQP协议。
3)spring-boot-starter-aop 支持面向方面的编程即AOP.
4)spring-boot-starter-jdbc 支持JDBC数据库。
5)spring-boot-starter-log4j 支持Log4J日志框架。
SpringBoot:用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)、简化maven配置
Springboot 有哪些优点
-快速创建独立运行的spring项目与主流框架集成
-使用嵌入式的servlet容器,应用无需打包成war包
-大量的自动配置,简化开发,也可修改默认值
Springboot自动配置的原理:
在Spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration
Spring Boot 的核心注解:@SpringBootApplication
@EnableAutoConfiguration:打开自动配置的功能
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能
yaml和properties的区别
格式不同:yaml有缩进
优先级不同:properties>yaml
执行顺序不同:yaml>properties
MybatisPlus:是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生
Spring Cloud:是一系列框架的集合,利用了Springboot的便携性对分布式的基础组件进行开发
Spring Cloud的优缺点
优点:
组件丰富,功能齐全;
微服务是跨平台,适用于任何语言
服务拆分细,耦合度低
缺点:
成本高
Spring Cloud的组成:服务注册与发现、服务网关、客户端负载均衡、服务调用、熔断限流、分布式统一配置管理
Naocs:服务注册与发现
Sentinel:是分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、熔断降级、系统负载保护等多个维度来帮助开发者保障微服务的稳定性。
Gateway:网关服务,用来保护、增强和控制对于 API 服务的访问。
OpenFeign:实现负载均衡并且可调用其他服务
Xxl-Job:任务调度,可用来发送短信,统计账单,每隔多久执行一次等等.....
SQL调优:
1.在 group by 后面增加 order by null 就可以防止排序
2.可以使用连接来替代子查询
3.在 where 及 order by 涉及的列上建立索引
4.应尽量避免在 where 子句中对字段进行 null 值判断
Nginx:是一个轻量级高性能的反向代理Web服务器
正向代理和反向代理
正向代理:一个人发送一个请求直接就到了目标服务器上
反向代理:请求统一被Ngin接收,按照一定的规矩分发给后端的业务处理服务器进行处理了
负载均衡5中配置模式:
1.轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2.weight(权重):指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3.ip_hash(访问 ip 的 hash 结果分配):每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器。
4.fair(响应时间):按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5.url_hash(按访问url的hash):按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
动静分离:静态页面与动态页面分开不同系统访问的架构设计方法。
RabbitMQ
1、什么是 rabbitmq
采用 AMQP 高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦
2、为什么要使用 rabbitmq
(1)在分布式系统下具备异步,削峰,负载均衡等一系列高级功能;
(2)拥有持久化的机制,进程消息,队列中的信息也可以保存下来。
(3)实现消费者和生产者之间的解耦。
(4)对于高并发场景下,利用消息队列可以使得同步访问变为串行访问达到一定量的限流,利于数据库的操作。
(5)可以使用消息队列达到异步下单的效果,排队中,后台进行逻辑下单
3、使用 RabbitMQ 有什么好处?
(1)服务间高度解耦
(2)异步通信性能高
(3)流量削峰
4、Linux操作系统的常用命令
1.目录操作命令:mkdir、rmdir、cd、pwd
mkdir:创建目录
rmdir:删除目录(只能删除空目录)
cd:切换当前目录(改变当前目录)
pwd:显示当前目录的路径
2.文件操作命令:cat、touch、cp、mv、rm、diff
cat:显示文件,还可以连接两个或多个文件,形成新的文件
touch:修改文件的访问时间,如果文件不存在,则可以创建该文件
cp:复制文件或目录
mv:移动文件或目录,还可以重命名
rm:删除一个目录中的一个或多个文件
diff:逐行比较两个文本文件,列出其不同之处
5.Docker容器的常用命令
1、新建并启动容器:docker run
2、容器日志:docker logs
3、删除容器:docker rm
4、启动、重启、终止容器:docker start stop restart