java面试题1

数据库语句是如何优化的?

1)尽量不适用select * 根据业务使用需要的列
2) 添加索引
1.什么是索引
帮助快速高效查询数据的一种数据结构
缺点:增加删除慢,因为索引文件需要更新,增加内存
2.避免索引失效的条件
模型数空运快
模:模糊查询在like关键字中%放在前面会使索引失效
型:数据类型有变化的时候不能使用索引
数:索引列套用函数的时候索引会失效
空:索引列有空值使用is null 会使索引失效(MySQL 有这个问题 oracle 没有问题)
运:索引列有数字运算的时候不能使用索引
快:当表的数据量不大时使用全表查询比索引快,优化器就不会使用索引

你使用SpringBoot的时候各种配置文件是怎么引入的

springBoot 是基于约定的,可以使用application.properties进行配置

你看底层代码吗?说说你看过的底层代码

说说你做过的项目和你主要负责的模块。

最近做的网上教育平台,由讲师远程上课,使用 springcloud 微服务架构开发,用户登录注册,搜索课程,浏览课程,下单,购买课程,评论等服务
主要负责课程的搜索服务,单独做了一个搜索服务,首先是对es进行初始化,先判断索引是否存在,存在就删除当前索引然后再创建索引,再调用的course课程服务的一个九表查询,通过bluk批量插入到es中,
然后前端是一个多条件查询,我们选择了es的bool查询的fliter查询,将条件加进去,然后对过滤的数据进行一个order排序,再设置一个from和size进行分页

讲讲Redis,你在项目中有用过Redis吗?

readis是一种非关系型数据库 ,是基于内存的,并且提供了一定的持久化,还支持一定的事务能力
主要数据类型有:String list hash set zset
redis 提供了两种方式进行持久化,一种RDB持久化,另一种的AOF持久化,RDB持久化是指定的时间间隔将数据集快照写入磁盘中,AOF持久化是以日志的形式记录服务器所处理的每一个写删除的操作,以文本方式记录

数据库建表的时候int(1)和int(2)的区别

显示的宽度不同 int(2)如果保存的是1 会显示01

#和$的区别

#号是通过占位符来进行预编译 $符号是进行的字符串拼接
#能有效防止SQL注入

Springmvc的执行流程

用户发起请求,到前端控制器,前端控制器将请求发给处理器映射器,处理器映射器返回前端控制器一个handler对象,前端控制器将这个handler对象发送给处理器适配器,处理器适配器执行这个handler对象后返回一个modelAndView(逻辑视图),前端控制器将逻辑视图个月视图解析器进行视图解析,然后返回前端控制器一个View,前端控制器进行渲染,响应给用户

讲讲ioc

spring 的Ioc 主要是控制反转,
控制:就是控制JavaBean的创建
反转:以前创建一个对象有开发者来完成,现在创建一个对象交给容器完成然后转交给开发者
spring提供了两个容器接口,一个BeanFactory 一个ApplicationContext,BeanFactory 称之为低级容器,使用Key来存放BeanName value存放Bean的实列通常就提供了两个功能put和get
ApplicationContext 称为高级容器,他实现了BeanFactory等多个接口,因此具备更多的功能,该接口定义了一个refresh的方法来刷新整个容器,即重新加载刷新所有bean

Jvm参数

1、跟踪参数:跟踪、监控JVM状态,用于程序员JVM调优及故障排查

2、堆分配参数:分配堆内存

3、栈分配参数:分配栈内存

反射的三种创建方式

通过类.classClass c1=Foo.class;
通过对象.getClass Class c2 = foo1.getClass();
通过包的路径获取对象Class.forName(“Foo的相对路径”);

Arraylist和linkedlist的区别

1)ArrayList是数组结构,linkedList是链表结构
2)ArrayList单独访问快,linkedList增加删除快

Arraylist一次扩容多少

一次扩容1.5倍,

Vector是如何实现的安全的

Vector的get() 、remove()、size()方法都是同步的,在方法上加了synchronized,但是在多线程环境下,如果不在方法调用端做额外的同步措施,使用这段代码仍然是不安全的。
如果一个线程恰好删除一个元素,导致序号i 已不可再用,get()方法就会抛出一个ArrayIndexOutOfBoundsException 。

讲讲你知道哪些排序方法,并说下他们的时间复杂度

冒泡排序:从数组中第一个数开始,依次遍历数组中的每一个数,通过相邻比较交换,每一轮循环下来找出剩余未排序的最大数放在数列前端 时间复杂度是o(n^ 2)
插入排序:从待排序的n个记录中的第二个记录开始,依次与前面的记录比较并寻找插入的位置,每次外
循环结束后,将当前的数插入到合适的位置。时间复杂度:O(n ^ 2)

mysql的优化

题目重复

stringbuild跟stringbuffer的区别

StringBuild是非线程安全的,StringBuffer是线程安全的,
在单线程情况下使用StringBuild,多线程情况下使用StringBuffer

hashmap跟hashtable区别

Hashtable是线程安全的,hashmap是非线程安全的
HashMap允许有null建null值,hashTable不允许
HashMap的效率要高于HashTable

一些常见集合的区别

List集合:有序,可插入重复数据
ArrayList:数组结构,默认容量10,超过后扩容1.5倍,查询快增删慢,
LinkedList:线性链表(1.5之前,单向链表,1.5之后双向链表)
查询比较慢,增删比较快
Vector:线程同步数组,方法上加了synchronized,来实现线程同步
Set集合:无序,不可重复的
HashSet:HashSet的值存在HashMap的键中,一维数组(默认容 量16)+单向链表+红黑树,当数组容量达到整个数组的0.75时就会进行扩容
TreeSet:TreeSet的值保存在TreeMap的键中,有序,红黑树
Map集合:以键值对保存元素
HashMap:一维数组+单向链表+红黑树
默认容量:1<<4 16
链表的最大长度是8(1.8以后超过8会转换成红黑树)
加载因子:0.75
HashTable:hashmap跟hashtable区别(同上题)
ConCurrentHashMap:即可以线程安全,又保证了性能
采用分段锁

vue子父项目怎么实现请求同步

css类选择器

标签.

es的使用为什么要用

分布式的实时文件存储,每个字段都被索引并可被搜索分布式的实时分析搜索引擎可以扩展到上百台服务器,处理PB(内存单位)级结构化或非结构化数据高度集成化的服务,你的应用可以通过简单的 Restful API、各种语言的客户端甚至命令行与之交互,
上手Elasticsearch非常容易。它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。它拥有开瓶即饮的效果(安装即可使用),只需很少的学习既可在生产环境中使用

redis为什么要用请添加图片描述

当遇到结果不频繁变动的sql时,这个时候就适合存储在缓存中,来减少连接数据库的查询次数,优化查询速度,

redis的几种问题跟解决方案

缓存穿透:要查询的数据根本就不存在!当业务系统发起查询时,按照流程,首先会前往缓存中查询,由于缓存中不存在,然后再前往数据库中查询。由于该数据压根就不存在,因此数据库也返回空。这就是缓存穿透。如果存在海量请求查询压根就不存在的数据,那么这些海量请求都会落到数据库中,数据库压力剧增,可能会导致系统崩溃
将数据库查询结果为空的key也存储在缓存中,并且针对这类数据设置一个较短的过期时间,让其自动剔除
缓存雪崩:如果缓存因为某种原因宕机,或者同一时间大量缓存失效,此时就又大量请求打在数据库上
使用缓存集群,保证缓存高可用,
缓存击穿:当查询热点较高并且在缓存没有的数据时,大量请求会去访问数据库,然后更新缓存,数据库一下子就会接受大量请求造成击穿
上锁:

消息队列的用法

异步:多个业务可以分发多个消息来异步处理业务,提高效率
解耦:传统处理业务,如:用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口存在耦合性,
订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功,库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作这样实现一个业务解耦
削锋:用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。秒杀业务根据消息队列中的请求信息,再做后续处理

常见的设计模式知道几种

单例模式:一个类只有一个实例,该类能自行创建,且能对外提供一个访问单例的全局访问点的一种模式
简单工厂模式:建立一个工厂类,并定义一个接口对实现了同一接口的产品类进行创建
装饰者模式:可以动态给对象添加一些额外的职责从而实现功能的拓展,在运行时选择不同的装饰器,从而实现不同的行为
代理模式:通过代理对象来访问真实对象,通过建立一个对象代理类,由代理对象控制原对象的引用,从而实现对真实对象的操作

spring跟springcloud区别

Spring是一个生态体系,它包含了Spring Boot、Spring Cloud等
SpringCloud:Spring Cloud是一整套基于Spring Boot的微服务解决方案,提供了很多工具:配置管理、注册中心、服务发现、限流、网关等

vue的生命周期

1、beforeCreate(创建前)
表示实例完全被创建出来之前,vue 实例的挂载元素 e l 和 数 据 对 象 d a t a 都 为 u n d e f i n e d , 还 未 初 始 化 。 2 、 c r e a t e d ( 创 建 后 ) 数 据 对 象 d a t a 已 存 在 , 可 以 调 用 m e t h o d s 中 的 方 法 , 操 作 d a t a 中 的 数 据 , 但 d o m 未 生 成 , el和数据对象 data 都为 undefined,还未初始化。 2、created(创建后) 数据对象 data 已存在,可以调用 methods 中的方法,操作 data 中的数据,但 dom 未生成, eldataundefined2createddatamethodsdatadomel 未存在 。
3、beforeMount(挂载前)
vue 实例的 $el 和 data 都已初始化,挂载之前为虚拟的 dom节点,模板已经在内存中编辑完成了,但是尚未把模板渲染到页面中。data.message 未替换。
4、mounted(挂载后)
vue 实例挂载完成,data.message 成功渲染。内存中的模板,已经真实的挂载到了页面中,用户已经可以看到渲染好的页面了。实例创建期间的最后一个生命周期函数,当执行完 mounted 就表示,实例已经被完全创建好了,DOM 渲染在 mounted 中就已经完成了。
5、beforeUpdate(更新前)
当 data 变化时,会触发beforeUpdate方法 。data 数据尚未和最新的数据保持同步。
6、updated(更新后)
当 data 变化时,会触发 updated 方法。页面和 data 数据已经保持同步了。
7、beforeDestory(销毁前)
组件销毁之前调用 ,在这一步,实例仍然完全可用。
8、destoryed(销毁后)
组件销毁之后调用,对 data 的改变不会再触发周期函数,vue 实例已解除事件监听和 dom绑定,但 dom 结构依然存在。

list去重,返回去重结果

使用List的集合的contains

请添加图片描述

常用的函数

Math.PI 圆周率
math.abs() 绝对值
Math.ceil(double a); 大于该数的最小整数
Math.floor(double a); 小于该数字的最大整数
Math.max(a,b); 最大值
Math.min(a,b);最小值

jq选择器,如何选中元素

使用Id选择器,class选择器

spring事务配置的具体流程

事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。
(2):事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。
COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。
ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,滚回到事务开始的状态

java常见的设计模式

题目重复

面向对象6大原则

单一职责原则、开闭式原则、迪米特原则、里氏替换原则、依赖倒置原则以及接口隔离原则

springMVC执行流程

题目重复

RabbitMQ的用途

1.解耦,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!

2.异步,将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度

3.削峰,并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常

创建线程的三种方式

继承Thread类,重写run方法,创建Thread子类的实例,调用start()方法
定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。调用线程对象的start()方法来启动该线程。

创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。使用FutureTask对象作为Thread对象的target创建并启动新线程。调用FutureTask对象的get()方法来获得子线程执行结束后的返回值

采用实现Runnable、Callable接口的方式创见多线程时,优势是:
线程类只是实现了Runnable接口或Callable接口,还可以继承其他类。Callable有返回值

线程中常用的方法

getId 当前线程的唯一ID
getName 当前线程的名字
setName 设置名字
sleep 睡眠
.join() 合并线程

list set map集合特性

题目重复

Spring mvc执行流程

题目重复

Jdk8比以前有什么新特性

jdk8新增函数式接口,一个接口只有一个实现方法,就是函数接口
新增lambda表达式,实现一些函数式接口
新的本地日期API LocalDate 、LocalTime、 LocalDateTime

map 和 list

Map以键值对存储数据,List存放有序可重复的数据

Vue的特性

两大特性:指令-用来操作DOM
组件–组件是html css js等的一个聚合体

elasticsearch有什么查询

模糊查询,范围查询,精确查询等

Spring boot有什么注解

@Configuration
用于定义配置类,指出该类是 Bean 配置的信息源
@ComponentScan
组件扫描。让spring Boot扫描到Configuration类并把它加入到程序上下文。@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。
@Repository
用于标注数据访问组件,即DAO组件。
@Service
一般用于修饰service层的组件
@RestController
用于标注控制层组件(如struts中的action),表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器;它是@Controller和@ResponseBody的合集。
@ResponseBody
表示该方法的返回结果直接写入HTTP response body中

Redis的作用

配合关系型数据库做高速缓存

缓存高频次访问的数据,降低数据库io

分布式架构,做session共享

Hashmap什么时候触发红黑树

hashmap的数据结构时:一维数组+单向链表+红黑树
当单向链表的长度超过8时会生成红黑树

面向对象的理解

主要特点是:封装 继承 多态
1.封装:比如:造人,因为人的数量很庞大,所以我需要找别人帮我一起造人,但是我不想让他知道我造人的技术(人的脸需要用多少克泥巴,需要怎么用手去捏鼻子等等),我可以把我的造人的技术封装起来,别人只需要知道他要做什么样的人类就好了。
2.继承:
当我自己造人的时候,我可能造着造着就累了,我可能就要用我之前造出来的某个泥人作为模板“复制”,“粘贴”了
用模板创出来的泥人具有模板的特征,就像孩子一样具有父母的性状。我们称这个过程为继承
多态:
但是呢 好多泥人都是我后来偷懒用模板复制出来的,为了让人类更丰富多彩一些,我对他们又进行了改变。这个过程可以叫多态

Linux常用命令

cd 目录 进入目录
ls 当前目录中的文件
tar -xvf 压缩包 解压
wq 保存退出

数据库优化

题目重复

mysql 跟Oracle的区别

Oracle是大型数据库,mysql是小型数据库,
Oracle支持大并发,大访问量,
Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可

MySQL 的优化

题目重复

ArrayList跟LinkList区别

题目重复

css有那些选择器

标签选择器
clsss选择器
id选择器

nginx在项目中具体怎么使用

Spring Boot有哪些注解

题目重复

Radis怎么实现数据同步

当用户查询某条数据时,会先在Radis中查找,如果找不到就回去数据库进行查找,查找到后将数据更新到Radis中,然后返回数据

rabbitMQ消息队列

rabbitMQ主要作用是:解耦,异步,消峰(同上)
主要有三个组件:
交换器 (Exchange):消息代理服务器中用于把消息路由到队列的组件。
队列 (Queue):用来存储消息的数据结构,位于硬盘或内存中。
绑定 (Binding):一套规则,告知交换器消息应该将消息投递给哪个队列。
交换机有三种类型:
fanout:把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中。
direct:把消息路由到BindingKey和RoutingKey完全匹配的队列中。
topic
有物种消息模型:
一对一 模型,简单的一对一
工作队列模型 ,一个生产者将消息分发给多个消费者
发布/订阅模型 ,生产者发布消息,多个消费者同时收取
路由模型 ,生产者通过关键字发送消息给特定消费者
主题模型 ,路由模式基础上,在关键字里加入了通配符

Vue怎么用

新建vue对象
数据绑定
事件绑定
表单控件绑定

Vue怎么实现中英文七日换,用什么实现

在src目录下创建lang文件夹,用于存放中英文切换所需文件
创建所需要的语言包文件 en.js和zh.js
英文配置文件 en.js

const en = {
    首页: 'first',
    下拉刷新: 'pullDownRefresh',
    上拉加载: 'pullUpLoad',
    切换成功: 'Switch success',
    语言: 'language'
}
export default en

中文配置文件 zh.js

const
    zh = {
        首页: '首页',
        下拉刷新: '下拉刷新',
        上拉加载: '上拉加载',
        切换成功: '切换成功',
        语言: '语言'
    }
export default zh

在lang/index.js中配置语言文件

import Vue from 'vue'
import VueI18n from 'vue-i18n'
// 引入各个语言配置文件
import zh from './zh' //中文
import en from './en'//英文
Vue.use(VueI18n)

// 创建vue-i18n实例 i18n
const i18n = new VueI18n({
    // 设置语言
    locale: localStorage.getItem('locale') || 'zh', // 语言标识
    // 添加多语言(每一个语言标识对应一个语言文件)
    messages: {
        zh,//中文
        en,//英文
    }
})
// 暴露 i18n
export default i18n

在main.js中引入 i18n

import i18n from './lang'  //国际化 中英文切换

new Vue({
  el: '#app',
  router,
  i18n, //i18n
  components: { App },
  template: '<App/>'
})

单点登录怎么实现的

之前项目中做单点登录时,先是再gateway网关做了一个全局拦截,设置了一个白名单,对一些不需要拦截登录的请求进行放行,比如:登录请求,登出请求等,用户进行登录的时候后放行到登录服务,使用Springsecurity进行验证,验证成功后通过JWT对用户信息生成一个token,返回给前端,前端设置了一个全局请求拦截,每次请求都会带着tokan去gateway网关进行验证,gateway网关解析token成功后会进行放行,解析失败就会对请求进行拦截

项目开发是为什么想到要用es,怎么用

题目重复

mybatis 缓存机制

mybatis分为一级缓存和二级缓存
一级缓存的生效范围是一个SqlSession(会话)中,二级缓存生效的范围是SqlSessionfatroy(工厂)中,
默认开启的时一级缓存,二级缓存需要手动配置开启
当用户查询数据的时候,会先查一级缓存,一级缓存没有就回去二级缓存查,二级缓存没有就会去数据库查,然后更新二级,一级缓存,返回数据,用户做增删时会清楚缓存

#和$的作用

题目重复

在jdbc中是使用什么实现占位符

jsbc中使用PrepareedStatement实现占位符,防止SQL注入

vue的生命周期

题目重复

手写list去重的方法需要有返回去重集合

题目重复

springmvc的执行流程,三层的注解

题目重复

mybaits常用注解

@Select,映射查询语句
@Insert ,增加
@Update,更新
@Delete。删除

消息队列的作用

题目重复

常见的设计模式一人2个

单例模式:一个类只有一个实例,该类能自行创建,且能对外提供一个访问单例的全局访问点的一种模式
简单工厂模式:建立一个工厂类,并定义一个接口对实现了同一接口的产品类进行创建

Redis的执行原理

第一步是建立连接阶段,响应了socket的建立,并且创建了client对象;第二步是处理阶段,从socket读取数据到输入缓冲区,然后解析并获得命令,执行命令并将返回值存储到输出缓冲区中;第三步是数据返回阶段,将返回值从输出缓冲区写到socket中,返回给客户端,最后关闭client

常见的函数

题目重复

三个集合的特性

题目重复

创建线程的方式

继承Thread类,重写run方法,创建Thread子类的实例,调用start()方法
定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。调用线程对象的start()方法来启动该线程。

创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。使用FutureTask对象作为Thread对象的target创建并启动新线程。调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
使用线程池创建线程:
线程池有五个参数:
corePoolSize:线程池的核心线程数,默认情况下,核心线程会在线程池中一直存活,即使它们处于闲置状态
maximumPoolSize:线程池所能容纳的最大线程数,当活动线程数达到这个数值后,后续的新任务将会被阻塞
keepAliveTime:非核心线程闲置时的超时时长,超过这个时长,非核心线程就会被回收
unit:用于指定keepAliveTime参数的时间单位
workQueue:阻塞队列,线程池中的任务队列

线程中常用方法

题目重复

spring的事务

索引的作用

1,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
2,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。
3,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
4,在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
5,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

sql语句的优化

题目重复

linux常用指令

题目重复

控制反转和注入方式

控制反转:将javabean的创建由开发者转交给容器(beanFarcy)来管理,
注入方式:
setter注入:设置注入是通过setter方法注入被调用者的实例。该方式简单、直观,而且容易理解,所以Spring的设置注入被大量使用。
构造注入:利用构造方法来设置依赖注入的方式称为构造注入。

linux查看日志文件

/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息

为什么要用fastDFs?相比其他图片上传有什么优势

是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
相比其他图片上传:
适合小文件存储
需要的计算资源少
支持在线扩容
主备Tracker服务,增强系统的可用性

什么是线程

线程是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。

创建线程的几种方式

题目戳你功夫

sleep和wait的区别

调用对象不同:wait由锁对象调用,sleep由当前线程调用
锁使用不同:执行wait()后自动释放锁,sleep会占用锁
唤醒机制不同:执行wait可被通知唤醒,sleep只能等待睡眠时间唤醒

深拷贝和浅拷贝的区别

深拷贝,拷贝后的对象与原来的那个对象引用地址不同,
浅拷贝,拷贝后的对象与原来的那个对象引用地址相同

redis是什么,怎么持久化的

reids是一种非关系型数据库,主要是为了减少查询数据库的次数提高效率,持久化的方式:
AOF模式:把写操作指令,持续的写到一个类似日志文件里
RDB模式:RDB 是一个非常紧凑的文件,它保存了 Redis 在某个时间点上的数据集

为什么使用elstisearch

题目重复

ribbitMQ的工作模式

Hello World 模型,简单的一对一
工作队列模型 ,一个生产者将消息分发给多个消费者
发布/订阅模型 ,生产者发布消息,多个消费者同时收取
路由模型 ,生产者通过关键字发送消息给特定消费者
主题模型 ,路由模式基础上,在关键字里加入了通配符

mysql的连接方式左连接和右连接是什么概念

LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

代码连接mysql的工具是什么,mybatis的sql语句放在哪

mapper文件里

单点登录怎么实现的

在gateway网关进行一个拦截,设置了一个白名单,
登录的时候账号密码验证成功后,会用JWT的REs生成一个token,返回给前端,前端将token存到local,前端设置一个全局拦截,每次请求都会在请求头中携带token,然后在gateway网关验证这个token ,解析成功就好放行,解析失败就拦截

gateway服务怎么跳转到别的服务的,普通用户登录后怎么访问的页面

在gateway网关的配置文件中设置routes的url可以设置跳到的服务中去,

下单是你负责的吗,具体考虑过怎么实现的吗

seata用到了吗,怎么实现的

SpringSecurity的使用流程

创建一个配置类SecurityConfig继承自WebSecurityConfigurerAdapter,重写里面的configure(HttpSecurity http)这个方法,配置好需要认证的登录url,以及提交表单的url,这里除了登录url不需要认证之外,其他的url都需要认证才能访问,并且formLogin表名这是一个表单提交,loginprocessingUrl中是设置的提交登录表单的url。
我们需要继承一个UserDetailSevice接口并且加入到容器中,实现loadUserByUsername方法,里面的逻辑通常是从数据库查找出对应用户名的密码然后构造一个UserDetail对象,spring security会根据返回的这个带有正确用户信息的对象和前台传过来的用户名密码进行比对来判断是否认证通过。

SpringBoot自动配置原理

在Spring-boot-autoConfigure包下保存这大量自动配置的类
类名都保存在factotiries文件下,自动配置类生效需要一定的条件,如:ConditionOnLass(引入某些类时触发)
在启动类上有一个springBootApplication的复合注解
包含包的扫描,定义配置类,启动自动配置等注解

SpringMvc的执行流程

题目重复

elasticsaerch的使用流程

题目重复

ssm对数据库表的增删改查

单点登录除了用JWT和RSA之外,还有什么方法实现,为什么要用JWT和RSA

SpringBoot的事务怎么配置

SpringCloud的组件了解多少

Eureka:注册中心,负责服务的注册和发现
Feign:调用其他服务,无需自己建立连接、构造请求、解析响应的代码,直接就是用注解定义一个 FeignClient接口,然后调用那个接口就可以了
Ribbon:负载均衡
Hystrix:熔断降级

SpringMvc的执行流程

题目重复

Mybatis中的#和$的区别

题目重复

事务是不是只要出现异常就一定会回滚

不是,出现异常捕获后,不向上抛出就不会回滚

es用的什么分词器

ES中的分词器主要有standard(ES的默认分词器,将单词转成小写形式,去除标点符号,支持中文【单字分割】)、simple(通过非字母的字符分割文本,将单词转为小写形式,同时去除数字类型的字符)和whitespace(仅去除空格,不支持中文)。当然ES中的分词器不止这些,这里不再一一列举。

java容器

List,Set,Map
题目重复

说说你的这个权限功能怎么实现的,用的那些技术

具体的权限实现步骤

String常用的方法有那些

length()得到一个字符串的字符个数
getByte() 将一个字符串转换成字节数组
toCharArray()将一个字符串转换成字符数组
split(String)将一个字符串按照指定内容劈开
equals()判断两个字符串的内容是否一样

怎么实现字符串的反转

调用StringBuffer的 reverse()方法可以实现字符串反转

说说你的搜索功能

题目重复

消息队列的消息出现的异常怎么处理

生产者发送消息到交换机出现消息异常,confim手动确认机制处理消息
交换机到消息队列,用return机制,出现异常回滚消息
消息队列到消费者,消息没发送,持久化解决异常问题,消息发送出去了,使用手动确认机制

什么是字段和属性?

项目的开发阶段有几个,作用是什么?

序列化和反序列化的应用场景?

①、在分布式系统中,此时需要把对象在网络上传输,就得把对象数据转换为二进制形式,需要共享的数据的 JavaBean 对象,都得做序列化。

②、服务器钝化:如果服务器发现某些对象好久没活动了,那么服务器就会把这些内存中的对象持久化在本地磁盘文件中(Java对象转换为二进制文件);如果服务器发现某些对象需要活动时,先去内存中寻找,找不到再去磁盘文件中反序列化我们的对象数据,恢复成 Java 对象。这样能节省服务器内存。

你熟悉的页面传值的方式?

HttpServletRequest 使用setAttribute()方法传值
创建一个ModelAndView
ModelMap 使用 addAttribute方法传值
HttpSession

什么是事件委托?

如果你开发的模块出现问题,你会怎么应对?

什么是存储过程?有什么优点?

什么是feign?

之前使用Ribbon+RestTemplate时,利用RESTTemplate请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,有偶遇对于服务依赖的调用可能不止一处,往往一个借口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务借口的定义

单点登录

在gateway网关进行一个拦截,设置了一个白名单,
登录的时候账号密码验证成功后,会用JWT的REs生成一个token,返回给前端,前端将token存到local,前端设置一个全局拦截,每次请求都会在请求头中携带token,然后在gateway网关验证这个token ,解析成功就好放行,解析失败就拦截

如何理解单点登录中的单点

int和Integer的区别

int是基本数据类型,Integer是引用数据类型;
int默认值是0,Integer默认值是null;
int类型直接存储数值,Integer需要实例化对象,指向对象的地址。

数据库的优化

题目重复

项目中是数据库的压力大还是服务器的压力大

spring启动类和Tomcat的区别(内置Tomcat和Tomcat的区别)

1.内置的tomcat没有tomcat的主页页面http://localhost:9999/,而我们平时用的外置的tomcat是有的

2.内置的tomcat可以用main跑项目,而如果要用外置的tomcat就需要把项目打成war包,然后拷贝到webapp下进行运行

访问修饰符Protected的作用

nginx的作用

nginx能做反向代理
正向代理:某些情况下,代理我们用户去访问服务器,需要用户手动的设置代理服务器的ip和端口号。
反向代理:是用来代理服务器的,代理我们要访问的目标服务器。
代理服务器接受请求,然后将请求转发给内部网络的服务器(集群化),
并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器。
Nginx在反向代理上,提供灵活的功能,可以根据不同的正则采用不同的转发策略
负载均衡:多在高并发情况下需要使用。其原理就是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,多台服务器(集群)共同完成工作任务,从而提高了数据的吞吐量。

主方法里面的那个参数有什么用

static的作用

修饰成员方法
修饰成员变量
静态代码块

Java的三大特征是什么

题目重复

JWT有哪些部分组成

一个JWT由三个部分组成:header,payload,signature。分别保存了不同的信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

微信支付流程

kafka、ActiveMq,RabbitMq,RocketmQ有什么区别

在这里插入图片描述

hashmap和hashTable的区别

题目重复

linkedlist和arrayList的区别

题目重复

讲讲Java的集合框架

题目重复

数组 链表

数组:
在内存中,数组是一块连续的区域,数组需要预留空间,在数组起始位置处,插入数据和删除数据效率低,随机访问效率很高,时间复杂度可以达到O(1),数组开辟的空间,在不够使用的时候需要进行扩容;扩容的话,就涉及到需要把旧数组中的所有元素向新数组中搬移。
链表:
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的
查询相对于数组困难,增加和删除容易。

常见的排序算法知道那些

冒泡排序:从数组中第一个数开始,依次遍历数组中的每一个数,通过相邻比较交换,每一轮循环下来找出剩余未排序的最大数放在数列前端 时间复杂度是o(n^ 2)
插入排序:从待排序的n个记录中的第二个记录开始,依次与前面的记录比较并寻找插入的位置,每次外
循环结束后,将当前的数插入到合适的位置。时间复杂度:O(n ^ 2)

springCloud与Springboot的区别

SpringBoot专注于快速方便的开发单个个体微服务。
SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,
为各个服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、精选决策、分布式会话等集成服务。
SpringBoot可以离开SpringCloud独立开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系。
SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架

Springcloud的组件及作用

Eureka:注册中心,负责服务的注册和发现
Feign:调用其他服务,无需自己建立连接、构造请求、解析响应的代码,直接就是用注解定义一个 FeignClient接口,然后调用那个接口就可以了
Ribbon:负载均衡
Hystrix:熔断降级
config:配置中心,统一管理配置文件

Eureka时如何发现服务的

负载均衡是什么,作用是什么

1、负载均衡可以优化访问请求在服务器组之间的分配,以此消除服务器之间的负载不平衡,从而达到提高系统的反应速度和总体性能的目的。

2、负载均衡能够监控服务器的运行状态,如果发现运行有异常情况的服务器,将会及时将访问的请求转移到其他可以正常工作的服务器上,以此提高整个服务器组的可靠性。因此采用了负载均衡设备之后,可以根据业务量的大小灵活增加服务器的数量,将系统的扩展能力提高,同时也能简化管理。

负载均衡的优势对于有两台及以上的服务器来说好处还是很明显的。然而负载均衡也分种类,并且不同种类之间也有些许差别。

讲讲Nginx

题目重复

断路器的作用,谈谈雪崩效应

微服务之间的相互关系往往比较复杂,最普遍的就是网状结构,
最常见的场景就是当负载过高时,如果某个服务的性能或抗压能力不好,那么当请求到这个服务时就需要等待或直接出现超时、不可用等情况,一旦出现这种情况服务之间就会发生雪崩
断路器就是为了解决这种问题的,当一个服务出现长时间等待就会使用断路器,熔断这个服务,然会返回一个兜底的数据,防止服务之间的雪崩

说一下关系数据库Mysql和非关系数据库Redis的区别

1.mysql和redis的数据库类型
mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。
redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限
2.mysql的运行机制
mysql作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O操作,如果反复频繁的访问数据库。第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;第二:反复的访问数据库也会导致数据库的负载过高,那么此时缓存的概念就衍生了出来。
3.缓存
缓存就是数据交换的缓冲区(cache),当浏览器执行请求时,首先会对在缓存中进行查找,如果存在,就获取;否则就访问数据库。
缓存的好处就是读取速度快

内连接和左连接的区别

内连接时取两张表的交集
左连接:只要左边表中有记录,数据就能检索出来,而右边有的记录必要在左边表中有的记录才能被检索出来

讲讲最熟悉的项目

项目的重点难点,

事务再项目中怎么用的

在需要使用事务的service的方法上写上@Transactional
比如:下单后减库存,减余额等操作

分布式锁怎么实现的

类与对象

类:类是现实世界在计算机中的反映,它将数据和对这些数据的操作封装在一起
对象:类的实例

类相当于盖楼房的图纸一样,虽然定义了有哪些成员,但并没有实际的空间
类可以实例化出多个对象,实例化出的对象占有实际空间(用来存储成员变量)

集合

题目重复

hashSet

HashSet:HashSet的值存在HashMap的键中,一维数组(默认容 量16)+单向链表+红黑树,当数组容量达到整个数组的0.75时就会进行扩容

静态Syschronized和实例的区别

一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念),一个是全局锁(该锁针对的是类,无论实例多少个对象,那么线程都共享该锁)。
static 说明了该类的一个静态资源,不管new了多少个对象,只有一份,所以对该类的所有对象都加了锁!

线程的生命周期

新建状态
就绪状态
运行状态
阻塞状态
1.等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;

2.同步阻塞 – 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;

3.其他阻塞 – 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

死亡状态

sleep和wait的区别

题目重复

Java中有那些集合

题目重复

数据库的存储过程

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它

数据库的左连接和右连接

左连接:只要左边表中有记录,数据就能检索出来,而右边有的记录必要在左边表中有的记录才能被检索出来
右连接:右连接是只要右边表中有记录,数据就能检索出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值