后台Java基础Java的数据结构有那些StringBuffer,Stringbuilder有什么区别读写锁乐观锁互斥锁自旋锁权限修饰符自动数据类型转换Springspring 的优点?Spring事物什么是AOPAOP的优点AOP的基本概念AOP 和 OOP的区别什么是IOCIOC的优点常用注解@Autowired与@Resource的区别Spring的事务管理SpringMvcSpringMVC的流程Springmvc的优点springMVC和struts2的区别有哪些Spring MVC的异常处理SpringMVC常用的注解SpringMvc里面拦截器MyBatis什么是MyBatis$和#的差别Mybaits的优点MyBatis框架的缺点Mapper编写有哪几种方式mybatis sql 动态解析缓存一级缓存二级缓存SpringBoot为什么要用 Spring BootSpring Boot 常用注解SpringBoot读取配置注解springboot常用的starter有哪些SpringCloud核心组件Eureka(尤里卡) 服务治理注册中心Ribbon(瑞本) 负载均衡Ribbon与Nginx差别Feign 声明式服务调用Hystrix 熔断器Zuul API网关服务Config 配置中心Dubbo Dubbo优点多线程创建线程Runnable接口和Callable接口有何区别run()方法和start()方法有和区别线程安全的MapswitchJava8新特性并行流&串行流并行流JVM堆内存Java数据结构Collection(单列集合)List(有序,可重复)Set(无序,唯一)Map(双列集合)数据库MySql数据库事务的四个特性及含义三大范式数据库系统特点网状结构数据库4种视图模式sql预编译sql执行顺序Mysql索引Redis底层数据结构类型Redis支持的数据类型Redis持久化缓存过期 && 缓存淘汰缓存穿透 && 布隆过滤器缓存击穿 && 缓存雪崩服务端Tomcatnginxnginx 的 upstream目前支持 4 种方式的分配 RabbitMq优点交换机信道ElasticSearchLinuxchmodchowntar排查CPU占用前端VUEVUE的生命周期一句话回答

后台

Java基础

Java的数据结构有那些

StringBuffer,Stringbuilder有什么区别

读写锁

乐观锁

互斥锁

自旋锁

权限修饰符

名称 说明 备注
public 可以被任何类访问  
protected 可以被同一包中的所有类访问可以被所有子类访问 子类没有在同一包中也可以访问
private 只能够被 当前类的方法访问  
缺省无访问修饰符 可以被同一包中的所有类访问 如果子类没有在同一个包中,也不能访问

UTOOLS_1600606005251.png

自动数据类型转换

操作数 1 类型 操作数 2 类型 转换后的类型
byte 、 short 、 char int int
byte 、 short 、 char 、 int long long
byte 、 short 、 char 、 int 、 long float float
byte 、 short 、 char 、 int 、 long 、 float double double

Spring

spring 的优点?

Spring事物

什么是AOP

面向切面编程,常用语异常捕捉,日志记录

AOP的优点

AOP的基本概念

AOP 和 OOP的区别

也可以说 AOP 是面向业务中的动词领域, OOP 面向名词领域。

AOP 的一个很重要的特点是源代码无关性,也就是说如果我们的系统中引用了 AOP 组件,即使我们把该组件去掉,系统代码也应该能够编译通过。要实现这一点,可以使用动态 proxy 模式。

什么是IOC

控制反转,DI注入,解耦组件,注解方式引入

在设计上,Spring的IoC容器是一个高度可扩展的无侵入容器。所谓无侵入,是指应用程序的组件无需实现Spring的特定接口。

IoC 的实现原理就是工厂模式加反射机制。使用ClassName

IOC的优点

常用注解

@Autowired与@Resource的区别

 

Spring的事务管理

SpringMvc

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

SpringMVC的流程

image

Springmvc的优点

springMVC和struts2的区别有哪些

Spring MVC的异常处理

可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。

SpringMVC常用的注解

SpringMvc里面拦截器

MyBatis

什么是MyBatis

Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。

$和#的差别

#:会在预编辑阶段解析为JDBC的预编译参数标记符。在DBMS中才变量替换

$:在动态sql解析阶段就进行变量替换,会存在sql注入问题。表名称为变量时,必须使用$

Mybaits的优点

MyBatis框架的缺点

Mapper编写有哪几种方式

  1. 第一种:接口实现类继承SqlSessionDaoSupport:使用此种方法需要编写mapper接口,mapper接口实现类、mapper.xml文件
  2. 第二种:使用org.mybatis.spring.mapper.MapperFactoryBean:
  3. 第三种:使用mapper扫描器:

mybatis sql 动态解析

mybatis 在调用 connection 进行 sql 预编译之前,会对sql语句进行动态解析,动态解析主要包含如下的功能:

缓存

一级缓存

一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构用于存储缓存数据。不同的sqlSession之间的缓存数据区域是互相不影响的。也就是他只能作用在同一个sqlSession中,不同的sqlSession中的缓存是互相不能读取的。

二级缓存

MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。

SqlSessionFactory层面上的二级缓存默认是不开启的,二级缓存的开席需要进行配置,实现二级缓存的时候,MyBatis要求返回的POJO必须是可序列化的。 也就是要求实现Serializable接口,配置方法很简单,只需要在映射XML文件配置就可以开启缓存了 ,如果我们配置了二级缓存就意味着:

SpringBoot

为什么要用 Spring Boot

Spring Boot 常用注解

SpringBoot读取配置注解

springboot常用的starter有哪些

SpringCloud

核心组件

Eureka(尤里卡) 服务治理注册中心

Ribbon(瑞本) 负载均衡

Ribbon与Nginx差别

Feign 声明式服务调用

Hystrix 熔断器

Zuul API网关服务

Config 配置中心

 

Dubbo

Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。

Dubbo优点

多线程

创建线程

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口
  4. Executors[ɪgˈzɛkjʊtəz]工具类创建线程池

Runnable接口和Callable接口有何区别

相同点

  1. Runnable和Callable都是接口
  2. 都可以编写多线程程序
  3. 都采用Thread.start()启动线程

不同点

  1. Runnable接口run方法无返回值,Callable接口call方法有返回值,是个泛型,和Futrue和FutureTask配合用来获取异步执行结果。
  2. Runable接口run方法只能抛出运行时的异常,且无法捕获处理;Callable接口call方法允许抛出异常,可以获取异常信息。

Callable接口支持返回执行结果,需要调用FutureTask.get()得到,此方法会堵塞主线程继续往下执行,如果不调用就不会堵塞。

run()方法和start()方法有和区别

线程安全的Map

switch

Java8

新特性

并行流&串行流

并行流

并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。

Java 8 中将并行进行了优化,我们可以很容易的对数据进行并行操作。

Stream API 可以声明性地通过 parallel() 与sequential() 在并行流与串行流之间进行切换 。

JVM堆内存

Java数据结构

Collection(单列集合)

List(有序,可重复)

名称 结构 查询速度 增删速度 线程安全 默认容量 扩容 效率
ArrayList 数组 不安全 10 0.5(右移一位)
Vector 数组 安全 10 1(复制一份长度)
LinkedList 链表 不安全 双向链表无默认大小 0

Set(无序,唯一)

名称 结构 依赖方法
HashSet 哈希表 hashCode(),equals()
LinkedHashSet 链表加哈希表 链表保证顺序有序,哈希保证元素唯一
TreeSet 红黑树 自然排序,比较器排序

Map(双列集合)

名称 结构 实现 线程安全 允许null 备注
HashMap 哈希表,链表,红黑树(1.8,数量大于8个) hashCode ^异或 (hashCode >>> 16) 不安全 Y 默认16,临界值0.75,扩大*2
Hashtable 哈希表,链表 hashCode 安全 N 默认11,临界值0.75,*2+1所有操作加锁,效率低
TreeMap 红黑树   不安全    
ConcurrentHashMap 数组 + 链表(使用volatile修饰)   安全 不允许Null值  

数据库

MySql

数据库事务的四个特性及含义

三大范式

  1. 第一范式就是无重复的列:例:地址需要拆分成省市区
  2. 第二范式就是非主属性非部分依赖于主关键字:例:员工职位信息,与员工信息重复
  3. 第三范式就是属性不依赖于其它非主属性:例:员工职位信息不应该保存在员工信息表

数据库系统特点

网状结构

数据库4种视图模式

  1. 详细模式
  2. 大图标
  3. 小图标
  4. 列表

sql预编译

JDBC 中使用对象 PreparedStatement 来抽象预编译语句,使用预编译

image.png

sql执行顺序

  1. FROM:对FROM语句的左表和右表进行笛卡尔积(得到M*N个元组),产生虚拟表VT1。
  2. ON:对虚拟表VT1进行ON筛选,符合ON跳转的数据插入虚拟表VT2。
  3. JOIN:如指定了OUTER JOIN(如 LEFT OUTER JOIN,RIGHT OUTER JOIN)那么保留表中未匹配的行作为外部行添加到虚拟表VT2,产生虚拟表VT3。如果FROM子句包含两个以上的表,则对上一个连接生成的结果表VT3和下一个表重复执行步骤1~步骤3,直到处理完所有的表;
  4. WHERE: 对虚拟表VT3应用WHERE过滤条件,只有符合<where_condition>的记录才会被插入虚拟表VT4;
  5. GROUP By: 根据GROUP BY子句中的列,对VT4中的记录进行分组操作,产生VT5;
  6. CUBE|ROllUP: 对VT5进行CUBE或ROLLUP操作,产生表VT6;
  7. HAVING: 对虚拟表VT6应用HAVING过滤器,只有符合<having_condition>的记录才会被插入到VT7;
  8. SELECT: 第二次执行SELECT操作,选择指定的列,插入到虚拟表VT8中;
  9. DISTINCT: 去除重复,产生虚拟表VT9;
  10. ORDER BY: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10;
  11. LIMIT: 取出指定街行的记录,产生虚拟表VT11,并返回给查询用户

image.png

Mysql索引

Redis

由ANSI C编写。

底层数据结构类型

Redis支持的数据类型

Redis持久化

RDB,AOF

1、aof文件比rdb更新频率高,优先使用aof还原数据。

2、aof比rdb更安全也更大

3、rdb性能比aof好

4、如果两个都配了优先加载AOF

缓存过期 && 缓存淘汰

缓存穿透 && 布隆过滤器

缓存击穿 && 缓存雪崩

击穿是一个人的雪崩,雪崩是一群人的击穿

服务端

Tomcat

nginx

nginx 的 upstream目前支持 4 种方式的分配

RabbitMq

名称 优点 缺点
ActiveMq java编写,可做jar包形式使用,更简单 只有两种工作模式,queue:一对一,topics:广播
RabbitMq erlang编写,比较小,可以指定交换机  
kafka 号称为分布式而生。只有topics(广播)模式,每个消费需要指出自己属于哪个consumerGroup,可以读取已经消费了的消息  

 

RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

优点

交换机

UTOOLS_1600829880996.png

信道

主要是TCP连接的“昂贵”性,生产者及消费者都需要和MQ建立连接,对于操作系统来说TCP的建立和销毁都非常昂贵。

信道是建立在Connection 之上的虚拟连接。当应用程序与Rabbit Broker建立TCP连接的时候,客户端紧接着可以创建一个AMQP 信道(Channel) ,每个信道都会被指派一个唯一的ID。RabbitMQ 处理的每条AMQP 指令都是通过信道完成的。

ElasticSearch

ElasticSearch是一个基于Lucene的实时的分布式搜索和分析引擎

ES使用了倒排索引(inverted index),该结构对于全文检索非常快。

倒排索引包括一个在任意文档中出现的唯一性的词语列表,对于每个词语,都有一个它出现过的文档列表。

倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。

Linux

chmod

修改权限使用

当前用户-当前组-其他用户

r=4 w=2 x=1

chown

修改文件及目录所属组

chown user file

tar

-x 解压

-c 打包

-v 显示过程

-f 指定名称

排查CPU占用

前端

VUE

VUE的生命周期

一句话回答

粤ICP备18028111号-2 公安图标 粤公网安备 44010602006942号