超全Java面试题(精简版)持续更新....

一、基础篇

1、 Java类型是什么? Java8大基本数据类型是什么?

byte、short 、int、long、float、double、boolean、char

2、什么是装箱?什么是拆箱?

装箱就是 自动将基本数据类型转换为包装器类型

拆箱就是 自动将包装器类型转换为基本数据类型

3、== 和 equals 方法究竟有什么区别?

==是判断俩个值的结果是否相等, 或者判断俩个内存地址是否相同

equals是判断值内容是否相等,不比较内存地址

4、为什么重写equals方法后,一定要重写hashcode?

因为只重写equals,不重写hashcode的话,就算比较这俩个值的内容相等, HashCode也不一定相等

5、final, finally, finalize 的区别是什么?

final 它是用于声明属性不可变,方法不可被重写,类不可被继承

finally 它是写在try{}cache{}后面的,表示有无异常都会执行

finalize 是Object 类的一个方法, 当垃圾回收机制不定时去回收垃圾的时候,就会调用这个方法

6、静态变量和实例变量的区别?

静态变量可以直接用类名.点来引用, 实例变量必须创建对象才能使用

7、static修饰的方法能否调用非static方法的?

static方法不能访问非static方法, 非static方法可以访问static方法

8、面向对象的三种状态?

封装、继承、多态

9、重载与重写区别?

重载是指同一类中, 方法名相同,参数列表不同,重写是指子类重写父类的方法

10、接口与抽象类的区别?

接口的关键字是interface, 抽象类的关键字是abstract

接口和抽象类都不能被实例化(new)

接口中不能有私有成员(private), 抽象类中可以有私有成员

接口中定义成员都是public static final 修饰的, 抽象类没有

接口中不能有静态方法和构造函数, 抽象类中可以有静态方法和构造函数

11、object类常用的方法有哪些?你用过的object类的直接子类有哪些?

clone方法、getClass方法、toString方法、finalize方法、equals方法、hashCode方法、wait方法、notify方法、notifyAll方法

12、数组有没有length() 这个方法? String有没有length() 这个方法?

数组没有length() 这个方法,有length的属性,String有length() 这个方法。

13、Java序列化的作用是什么?序列化的协议有哪些?

序列化是将一个对象序列化到硬盘中,反序列化是从硬盘中反序列化对象;json、hessian

14、Error 和Exception的区别是什么?

Error和Exception都是继承Throwable类, Error是java运行中不可预料异常, Exception是指java程序运行中可以预料的异常情况

15、运行时异常和一般异常有什么区别?

运行时异常就是在代码运行时报错,一般异常就是编译时报错

16、 JDK 和 JRE 有什么区别?

JDK 其实包含了 JRE,如果需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK

17、String 类的常用方法都有那些?

indexOf()、charAt()、replace()、trim()、split()、getBytes()、length()、toLowerCase()、toUpperCase()、substring()、equals()

18、抽象类能使用 final 修饰吗?

不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,不能修饰抽象类

19、如何实现数组和 List 之间的转换?

List转换成为数组:调用ArrayList的toArray方法。

数组转换成为List:调用Arrays的asList方法。

20、迭代器 Iterator 是什么?

迭代器是一种设计模式,是一个对象,它可以遍历并选择序列中的对象,因为创建它的代价小所以迭代器通常被称为“轻量级”对象。

21、什么是哈希表?

哈希表由数组+链表进行组成的

22、单向链表和双向链表的区别是什么?

单向链表是元素尾存了下一个元素的地址,双向链表是头和尾都存在上一个和下一个元素的地址;

23、List、Map、Set 三个接口,存取元素时,各有什么特点?

list: 有序、重复的 set: 无序 不可以重复

map:是一种以键值对形式存储的集合,key不能重复,value可以重复

24、列举几个常用的java设计模式

单例模式、简单工厂、工厂方法、抽象工厂、建造者模式、原型模式

25、懒汉式与饿汉式区别?

饿汉就是类一旦加载,就初始化完成,而懒汉就是只有当调用的时候,才会去初始化。


二、JavaWeb

1、doGet和doPost的区别?

doGet和doPost都是接受用户请求的方法,doGet处理get请求,doPost处理post请求,doGet用于地址栏提交,doPost用于表单提交,get请求提交的数据会在地址栏显示,post不显示,所以post比get安全.

2、Jsp的重定向和转发有什么区别? 转发是一次请求一次响应,重定向两次请求和两次响应

重定向时可以转发到项目以外的任何网址,转发只能在当前项目里转发

重定向的地址栏会发生变化,转发的地址栏不变

重定向路径需要加工程名,转发的路径不需要加工程名

重定向不可以往页面带参数它会导致request对象信息丢失,转发可以往页面带参数

3、Jsp和servlet的区别?

jsp在最后会编译成servlet, Jsp 本质上是servlet,用jsp实现的页面用servlet也能实现。

4、Jsp的九大内置对象

pageContext、Request、Session、Application、Out、Response、Config、Page、Exception

5、Jsp的三大指令

Page、Include、Taglib

6、Jsp的七大动作

Forward、Param、Include、Plugin、useBean、setProperty、getProperty

7、session和cookie的区别?

cookie和session都是会话跟踪技术

cookie存储数据是存在客户端的,它保存的数据有大小个数有限制,cookie不是很安全,别人可以通过拦截或者本地文件找到你cookie进行攻击

session存储数据是在服务端的,默认失效时间是30分钟,保存的数据没有大小限制;如果访问次数过多会增加服务器的压力,考虑到性能可以使用cookie

将登录信息等重要信息存放为session,其他需要保留的信息放在cookie中

8、Tomcat默认是多少个线程? 200个

9、TCP三次握手过程?

首先发起HTTP请求,响应HTTP请求并得到HTML代码,然后浏览器解析HTML代码对页面进行渲染呈现给用户;

10、DNS域名解析过程?

先查找本地的host文件是否有配置域名解析,本地没有的情况下,就去运营商查询;

11、Http和Https的区别?

Https使用的是SSL安全通信线路+认证+完整性保护,传统的Http协议不安全;

12、动态网站与静态网站区别

在浏览器中打开一个网站,点击鼠标右键查看源码,多次请求后如果源码不产生变化就是静态网站,变化就是动态网站;

13、动静分离与前后分离区别

动静分离是将静态资源和动态资源存放在不同服务器中,前后分离是将前端和后台分离,前端通过api调用后台接口;

14、什么是网站动静分离架构模式?

动静分离架构模式就是将静态资源和动态资源分开到不同的服务器部署。

静态资源: css、 img、视频、js的等;

动态资源: api接口后端代码;

15、Web前端有哪些优化方案?

  1. 网站框架实行动静分离;

  2. 在访问静态资源时在Url后缀加上时间戳,防止访问资源的与浏览器本地缓存资源存在冲突;

  3. 页面减少HTTP请求,合并静态资源(如js或者css)并进行压缩;

  4. 使用CDN内容分发,缓存静态资源,让用户访问最近的服务器,减少宽带之间的传输;


三、线程相关

1、线程的6个状态是什么?

新建、就绪、阻塞、等待、计时等待、超时

2、sleep()和 wait()有什么区别?

sleep是让当前线程指定休眠时间,然后继续工作;wait是让当前线程等待,直到有线程通知才会重新工作。

3、JMM是什么,你谈谈?

是java内存模型

4、什么是多线程?好处?

每条线程同时执行不同的任务,提高程序效率,速度更快

5、什么是线程同步、异步?

线程同步表示,当前线程执行完后下一个线程接着执行。

线程异步表示,在一个应用程序中,有多个不同的执行路径。

6、线程之间如何同步?

线程之间同步使用 synchronized、wait 与 notify //森困耐资的 no特fai

7、并行和并发有什么区别?

并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。

8、线程和进程的区别?

进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执行 。

9、什么是线程不安全?如何解决?

就是在多个线程共享同一个数据会受到其他线程的干扰

解决:synchronized或者lock锁、java并发包cas无锁机制去保证线程安全问题

10、并发包cas无锁机制干吗用的?

cas无锁机制是乐观锁(synchronized与lock锁 是悲观锁),他是通过比较的形式去实现上锁,不会阻塞;

11、volatile是什么意思? (我累泰嗷

是java虚拟机提供的轻量级同步机制,volatile集合可以禁止重排序;

12、synchronized和volatile的区别? (森困耐资的 我累泰嗷)

  1. volatile关键字可以保证可见性, 但是不能保证原子性, 不能保证线程安全问题

  2. synchronized既可以保证原子性, 也可以保证可见性

13、你们项目中那些地方有使用到多线程?

  1. 异步发送短信,2. 第三方支付

14、服务器端使用多线程实现异步操作有那些优缺点?

优点:提高效率,缺点:无法保持数据的一致性,占用的cpu资源降低服务器性能

15、如何创建一个线程?有几种方法?

JDK1.5之前:

第一种继承Thread类;

第二种实现Runnable接口重写run()方法

JDK1.5以后:

第一种是实现Callable接口

第二种是线程池创建

启动一个线程用**start()**方法

16、使用Runnable接口好?还是继承Thread类好?

是实现Runnable接口好,因为实现的接口还可以继续继承。如果继承了Thread类不能在继

17、为什么用线程池?线程池的优势

线程可以复用, 控制最大并发数, 方便管理

18、最大线程数怎么配?

第一种, CPU密集形, CPU核数+1~2

第二种, IO密集形, CPU核数

19、 线程池里面放不下了,应该放到哪里?

如果核心线程放不下了,就会进入等待队列里面去,如果等待队列满了,再新建一个非核心的线程去执行任务,如果最大的线程都用完就会有一个拒绝策略。

20、JDK自带的四种拒绝策略?

1.直接丢弃 2.抛异常 3.由调用者在调用者的线程执行 4.丢弃阻塞队列里面等待时间最长的一个线程


四、高并发与高可用

1、什么是高可用?

一台服务挂了, 另一台仍然可用;

2、什么是高并发?

高并发是系统运行过程中短时间内遇到大量操作请求的情况;

3、什么是集群?

将一个微服务放在多台服务器上做相同的事情;

4、nginx有了解过吗? 有哪些作用?

nginx可以做反向代理、负载均衡、故障转移、解决跨域、静态资源的缓存、服务器的限流(nginx+lua+openresty) ddos攻击、黑名单白名单等。

5、Nginx中如何配置负载均衡

在upstream中配置多个server,在location的proxy_pass配置为http://+upstream名称

6、负载均衡有哪些策略?

轮询, ip绑定, 权重机制

7、lvs作用?

lvs的作用是linux的虚拟vip技术,阿里云购买的linux云服务器默认的情况下不支持虚拟vip技术,使用lvs可以管理我们的nginx的集群;

8、keepAlived作用?

keepAlived是一个心跳脚本的检测软件可以间隔的发送我们心跳检测我们的tomcat是否有宕机,如果宕机的情况下keepAlived帮助我们自动去重启脚本,如果重启多次还是失败的情况下,会发送邮件告诉给运维人员。

9、如果nginx宕机之后,如何保证服务可用?

Nginx是我们tomcat服务器请求的入口,如果单台nginx宕机的情况下,可能会导致整个tomcat无法访问,所以最好采用集群模式部署,建议搭建方案采用nginx+lvs+keepAlived;

10、说明nginx+lvs+keepAlived分别的作用?

nginx作用: 核心反向代理请求的入口;

lvs作用: 虚拟yip技术管理我们的nginx服务器;

Keepalived作用: 实现心跳检查;

11、LVS与Nginx区别

LVS是四层反向代理,基于TCP和UDP协议,可用于管理Nginx集群,抗负载能力强;

Nginx是七层反向代理,基于HTTP协议,用于管理真实服务器集群;

12、四层负载均衡与七层负载均衡区别

四层负载均衡基于TCP和UDP协议,通过IP+端口号接受请求并转发到服务器。七层负载均衡基于HTTP协议,通过url或主机名接收请求并转发到服务器。

13、负载均衡有那些算法

轮询算法 :是对后端web服务器进行简单的轮询,将请求按顺序发给后端服务器;

随机算法 :每来一个请求,从后端服务器中随机地选择一个服务器处理请求;

源地址哈希法 :对客户端的IP地址做一个Hash,然后对服务器列表的大小取模,得到处理该请求的服务器;

加权轮询法 :该方法是在轮询的基础上加一个权重,权重高的服务器处理的请求就多 ;

加权随机法:该算法是在随机算法的基础上加一个权重 ;

最小连接法:该算法是检测那一台服务器上的连接数最小,就将请求发给那一台服务器 ;

14、CDN分发加速是什么意思?

相当于把一个节点部署在最近的宽带进行访问,能够减轻宽带传输速度;

15、服务路由和负载均衡的区别?

服务路由是路由不同的微服务, 而负载均衡针对的是一个微服务的集群;

16、@LoadBalanced注解的作用?

开启客户端负载均衡


五、SSM

1、Spring注入有那些方式?

Set注入、构造器注入、静态工厂的方法注入、实例工厂的方法注入

2、列举Spring的常用注解?

@Autowired(按类型注入)

@Resource(按名称注入)

@Service(在类上面标示为服务层)

@Controller(标识控制器bean id)

@RequestMapping(表示映射URL路径)

3、简述Spring的优缺点?

优点:减低程序的耦合性,提供了AOP技术

缺点:使用到了大量反射机制,反射机制会自动帮我们实例化类,非常占内存

4、介绍一下SpringBean的注入过程?

是通过xml映射加反射去注入的,首先读取xml文件获取到bean,如果有扫描器就扫描注解,再反射他的类路径生成bean;

5、SpringMVC执行流程?

首先从客户端请求提交到DispatcherServlet ,

再由DispatcherServlet控制器查询HandlerMapping,

找到HandlerMapping并分发到指定的Controller中,

Controller调用业务逻辑处理后,返回ModelAndView ,

然后DispatcherServlet找到ModelAndView指定的视图,将结果显示到客户端

6、说出 Spring MVC 常用的 5 个注解

@RequestMapping: 映射的URL路径

@PathVariable: 用于接收地址栏{}花括号里参数

@RequestParam: 用于接收?问号后面的参数

@RequestBody: 接受http请求的json数据, 将json数据转换为java对象

@ResponseBody: 将controller方法return返回的对象转换为json响应

7、struts2和springMVC的区别?

  1. springMVC入口是Servlet前端控制器,而Struts2的入口是filter过滤器;

  2. struts2是类级别的拦截,springMVC是方法级别的拦截;

  3. struts2默认是多例的,springmvc默认是单例的;

  4. springMVC集成了Ajax,只需要@ResponseBody就可以实现返回json数据,Struts2虽然也集成了,但还是需要代码实现,比较麻烦

8、MyBatis执行流程?

1、读取Mybatis配置文件

2、根据读取到的配置文件生成SqlSessionFactory

3、创建SqlSession对象(开启事务)

4、操作目标数据库

5、提交事务

6、关闭SqlSession

9、${}和#{}的区别?

#{}是经过预编译的,是安全的;${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入;

10、Mybitis和Hibernate的区别?

hibernate 是对SQL进行了高度的封装,它有自己的HQL语句,它开发速度比较快,一般用在中小型项目

mybatis 保留了对数据库灵活的操作,需要自己写sql语句,方便优化,性能相对比较高

11、你能跟我谈一谈你对mybatis的见解吗?

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

12、MyBatis中的#

#会将传入的内容当做字符串,而会直接将传入值拼接在sql语句中,所以#可以在一定程度上预防sql注入攻击;


六、SSH

1、 Hibernate工作原理?

原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory3.打开Session 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory

2、struts是什么 struts1和struts2的区别?

struts1是基于JSP和servlet的一个开源的Web应用框架,使用的是MVC的设计模式;

struts2是基于webwork技术的框架,struts2和struts1没有任何关系,是一个全新的框架;

3、hibernate是什么?

hibernate是基于ORM对象关系映射实现的,做数据持久化的工具;

4、JSF是什么?

JavaServer Face是基于组件的web开发框架,跟sturts差不多的框架;

5、如何优化Hibernate?

  1. 使用双向一对多关联,不使用单向一对多
  2. 灵活使用单向一对多关联
  3. 不用一对一,用多对一取代
  4. 配置对象缓存,不使用集合缓存
  5. 一对多集合使用Bag,多对多集合使用Set
  6. 继承类使用显式多态
  7. 表字段要少,表关联不要怕多,有二级缓存撑腰

6、简介Struts2执行流程

Struts2的工作流程与WebWork框架基本相同,所以说Struts2是WebWork的升级版本

简要流程如下:

  1. 客户端浏览器发出HTTP请求。
  2. 根据web.xml配置,该请求被FilterDispatcher接收。
  3. 根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton。
  4. Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
  5. Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
  6. 返回HTTP响应到客户端浏览器。

8、为什么要用Hibernate

  1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

  2. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

  3. hibernate映射的灵活性很出色,它支持各种关系数据库,从一对一到多对多的各种复杂关系


七、SpringBoot

1、什么是SpringBoot?

Spring Boot是Spring开源组织下的子项目,是Spring组件一站式解决方案,主要是简化了使用Spring的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手;

2、SpringBoot优点?

快速高效开发,快速整合,配置简化、内嵌服务容器 ;

3、SpringBoot与SpringCloud的区别?

回答方式1:

SpringBoot:是一个快速开发框架,通过用MAVEN依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化,简化XML配置,内置服务器(Tomcat,Jetty)

SpringCloud: 是一套目前完整的微服务框架,它是是一系列框架的有序集合。

回答方式2:

SpringBoot是快速开发的Spring框架,快速整合第三方常用框架,SpringCloud是完整的微服务框架,SpringCloud依赖于SpringBoot。

4、SpringBoot与SpringMVC的区别

spring boot是一个快速开发框架,其中spring就是最核心的内容之一,当然包含spring mvc;

spring mvc 是只是spring 处理web层请求的一个模块

因此他们的关系大概就是这样:springboot > spring > spring mvc

5、SpringBoot自动配置的原理?

  1. SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration
  2. 每一个自动配置类进行自动配置功能
  3. 所有在配置文件中能配置的属性都是在xxxxProperties类中封装,可以参照功能对应的属性类
  4. 我们能配置的属性都是来源于Properties
  5. 一但配置类生效,配置类会给容器中添加各种组件,组件的属性是从对应的properties类中获取的properties类里面的每一个属性又是和配置文件绑定的

6、 运行 Spring Boot 有哪几种方式?启动方式

  1. 打包用命令或者放到容器中运行
  2. 用 Maven/ Gradle 插件运行
  3. 直接执行 main 方法运行

7、SpringBoot中用那些注解

@EnableAutoConfiguration 自动扫描并添加jar包依赖

@SpringBootApplication 是一个组合注解,相当于@EnableAutoConfiguration和@ComponentScan

8、SpringBoot中热部署使用什么?原理是什么?

devtools和 Spring Loaded ,原理:主要依赖java的类加载机制,在实现方式可以概括为在容器启动的时候起一条后台线程,定时检测类文件的时间戳变化,如果类的时间戳改变,则重新加载整个应用的class文件,同时重启服务,重新部署。

9、SpringBoot多数据源事务如何管理

  1. 在service层的@TransactionManager中使用transactionManager指定DataSourceConfig中配置的事务

  2. 使用jta-atomikos实现分布式事务管理

10、SpringBoot如何实现打包?

在控制台输入mvn clean package,clean是清空已存在的项目包,package进行打包

11、SpringBoot装配Bean的原理

通过@EnableAutoConfiguration自动获取配置类信息,使用反射实例化为spring类,然后加载到spring容器

12、什么是SpringBootStater?

Starter主要用来简化依赖用的 ,starter可以继承也可以依赖于别的starter,starter负责配置好与spring整合相关的配置和相关依赖(jar和jar版本),使用者无需关心框架整合带来的问题

13、Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件;
application:主要用于 Spring Boot 项目的自动化配置;
bootstrap:添加连接到配置中心的配置属性来加载外部配置中心的配置信息; 一些固定的不能被覆盖的属性;一些加密/解密的场景

14、Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?

配置变更、JDK 版本升级、第三方类库升级、响应式 Spring 编程支持、HTTP/2 支持、配置属性绑定等…

15、什么是YAML?

YAML是一种人类可读的数据序列化语言,它通常用于配置文件, YAML文件更加结构化,而且更少混淆;

16、如何使用Spring Boot实现异常处理?

Spring提供了一种使用ControllerAdvice处理异常的非常有用的方法,我们通过实现一个ControlerAdvice类,来处理控制器类抛出的所有异常

17、Spring Boot 可以兼容老 Spring 项目吗,如何做?

可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。

18、保护 Spring Boot 应用有哪些方法?

在生产中使用HTTPS 使用Snyk检查你的依赖关系, 启用CSRF保护使用内容安全策略防止XSS攻击;

19、Spring Boot 中的监视器是什么?

Spring boot actuator 是 spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态;

20、Spring Boot 有哪几种读取配置的方式?

Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量


八、微服务

1、分布式事务出现的场景?

1.不同微服务之间 2.同一工程不同数据库 3.不同微服务不同数据库

2、什么是CAP定理?

C:一致性 //数据一致

A:可用性 //每个服务都可以用(服务未宕机)

P:网络分区容错性 //每个服务不在同一个网络内,整个服务仍可用

3、网站架构演变过程

传统架构→分布式架构→SOA架构→微服务架构

4、什么是springClound?

是一套完整的微服务解决方案框架

5、注册中心有哪些?

Zookeeper、Eureka、Nacos、Consul(go语言编写)

6、微服务间远程交互的过程?服务注册发现原理

服务注册: 生产方会把自己的服务名ip端口号注册到注册中心,

服务发现: 然后消费方会从注册中心列表获取服务信息

7、如何解决分布式Session一致性问题

1.使用Nginx反向代理

2.使用数据库,但性能不高

3.tomcat内置了对Sssion同步的支持,但可能会产生延迟

4.使用Spring-Session框架,相当于把Session放到redis中

5.使用token令牌代替Session

8、Eureka和Nacos的区别?

Nacos性能更强, 它不仅有注册中心还有个config配置中心, 而且Nacos是直接独立运行的, 你用Eureka的话还要创建一个单独的微服务

9、Nacos的配置中心作用是什么?

动态更改配置信息不需要再重启项目

10、什么是ZooKeeper?

分布式协调工具

11、ZooKeeper应用场景?

1.服务中心

2.利用临时节点特性解决分布式锁

3.分布式配置中心

4.基于哨兵机制实现选举策略

5.实现本地负载均衡

6.基于节点事件通知特性可做消息中间件

7.分布式事务

12、ZooKeeper中临时节点与持久节点区别?

持久节点是持久化在硬盘上,会话断开后节点也能查到;

临时节点与会话保持连接,会话在节点在,会话断开,节点也会删除;

13、使用Zookeeper实现服务Master选举原理?

多个服务器在启动时候,会在Zookeeper上创建相同的临时节点,谁如果能够创建成功,谁就为主。如果主服务器宕机,其他备用节点获取监听信息,重新创建节点,选出主服务器;

14、ZooKeeper集群选举原理?

每台Zookeeper服务器启动时会发起投票,每次投票后,服务器统计投票信息,如果有机器获取半数以上的投票数则leader产生;

15、Hystix解决雪崩问题的手段有两个

1.线程隔离 2.服务熔断

16、为什么做服务降级?

服务不可用或者雪崩的时候,它不会直接调接口,直接返回友好提示给客户端,防止用户一直发送请求;

17、谈谈微服务雪崩效应?

雪崩效应是在大型互联网项目中,当某个服务发生宕机后,调用这个服务的其他微服服务也会发宕机导致一连串的雪崩效应;(大量的数据在同一时间失效)

18、谈谈服务降级、熔断、服务隔离?

服务降级:防止客户端一直等待,不会处理业务逻辑代码,直接返回一个友好的提示给客户端;

服务熔断:当在一个统计时间范围内的请求失败数量达到设定值,或当前的请求错误率达到设定的错误率阈值时,开启断路,之后的请求直接走fallback方法,在设定时间后尝试恢复;

20、SpringCloud有几种调用接口方式?

使用Feign和RestTemplate和SpringCloudDubbo

21、网关的作用?

网关可以拦截客户端所有请求,对该请求进行权限控制、负载均衡、路由转发、监控、安全控制黑名单和白名单等

22、过滤器和网关有什么区别?

过滤器是拦截单个tomcat服务器请求,网关是拦截整个儿微服务的请求


九、前端方面

1、 常用那几种浏览器测试?有哪些内核

  1. 浏览器:IE,Chrome,FireFox,Safari,Opera。
  2. 内核:Trident,Gecko,Presto,Webkit。

2、说下行内元素和块级元素的区别?

行内元素:会在水平方向排列,不能包含块级元素,设置width无效,height无效(可以设置line-height),margin上下无效,padding上下无效。
块级元素:各占据一行,垂直方向排列。从新行开始结束接着一个断行。

3、清除浮动有哪些方式?比较好的方式是哪一种?

(1)父级div定义height;
(2)结尾处加空div标签clear:both;
(3)父级div定义伪类:after和zoom;(比较好)
(4)父级div定义overflow:hidden;
(5)父级div定义overflow:auto;
(6)父级div也浮动,需要定义宽度;
(7)父级div定义display:table;
(8)结尾处加br标签clear:both;

4、HTML5 为什么只需要写 ?

HTML5不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为;

5、页面导入样式时,使用link和@import有什么区别?

(1)link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;
(2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
(3)import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题。

6、介绍js的基本数据类型

Undefined、Null、Boolean、Number、String

7、 js有哪些内置对象?

答:数据封装类对象:Object、Array、Boolean、Number 和 String

其他对象:Function、Arguments、Math、Date、RegExp、Error、

8、null和undefined的区别?

null是一个表示"无"的对象,转为数值时为0;

undefined是一个表示"无"的原始值,转为数值时为NaN ;

9、HTTP状态码知道哪些?

100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息

200 OK 正常返回信息

201 Created 请求成功并且服务器创建了新的资源

202 Accepted 服务器已接受请求,但尚未处理

301 Moved Permanently 请求的网页已永久移动到新位置。

302 Found 临时性重定向。

303 See Other 临时性重定向,且总是使用 GET 请求新的 URI。

304 Not Modified 自从上次请求后,请求的网页未修改过。

400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。

401 Unauthorized 请求未授权。

403 Forbidden 禁止访问。

404 Not Found 找不到如何与 URI 相匹配的资源。

500 Internal Server Error 最常见的服务器端错误。

503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。

10、JSON 的了解?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小。 格式:采用键值对,例如:{‘age’:‘12’, ‘name’:‘back’}


十、数据库

1、事务的特性(ACID)是指什么?

1)原子性(Atomic): 事务中的各项操作,要么全做要么全不做。

  1. 一致性(Consistent): 事务结束后系统状态是一样的。

3)隔离性(Isolated): 并发执行的事务彼此无法看到对方的中间状态。

4) 持久性(Durable):事务完成后,即使发生灾难性故障,通过日志和同步备份可以在故障发生后重建数据。

2、Mysql数据库与Oracle 数据库有什么区别?

Mysql 是中小型应用的数据库,Oracle 属于大型数据库 , MySQL有自动增长的数据类型,Oracle 没有自动增长的数据类型;

3、比较truncate和delete命令

两者都可以用来删除表中所有的记录。区别:truncate是DDL语句,它移动HWK,不需要rollback segment。而delete是DML语句,需要rollback segment且花费时间较长。

4、Oracle 中字符串用什么连接?

Oracle 中使用 || 这个符号连接字符串 如 ‘abc’ || ‘d’ 的结果是 abcd;

5、Oracle 中是如何进行分页查询的?

Oracle 中使用 rownum 来进行分页, 这个是效率最好的分页方法,hibernate 也是使用 rownum 来进行分页的;

6、 Oracle跟SQL Server 2005的区别?

oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windows平台的稳定性和安全性影响了sql server的稳定性和安全性
oracle使用的脚本语言为PL-SQL,而sql server使用的脚本为T-SQL

7、如何使用Oracle的游标?

  • oracle中的游标分为显示游标和隐式游标
  • 显示游标是用cursor…is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;
  • 隐式游标是在执行插入 (insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由PL/SQL自动定义的

8、sql语句分类

  • DDL:数据定义语言(create drop)
  • DML:数据操作语句(insert update delete)
  • DQL:数据查询语句(select )
  • DCL:数据控制语句,进行授权和权限回收(grant revoke)
  • TPL:数据事务语句(commit collback savapoint)

9、delete、drop、truncate区别

  • truncate 和 delete只删除数据,不删除表结构 ,drop删除表结构,并且释放所占的空间。
  • **删除数据的速度:**drop> truncate > delete

10、说一下乐观锁和悲观锁?

  • 乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁
  • 悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁

11、如何做 mysql 的性能优化?

  • 为搜索字段创建索引。
  • 避免使用 select *,列出需要查询的字段。
  • 选择正确的存储引擎。

12、什么是索引?

索引是一种数据结构,可以帮助我们快速的进行数据的查找.

13、在建立索引的时候,都有哪些需要考虑的因素呢?

建立索引的时候一般要考虑到字段的使用频率,经常作为条件进行查询的字段比较适合.如果需要建立联合索引的话,还需要考虑联合索引中的顺序;

14、同时有多个事务在进行会怎么样呢?( 脏读 、 不可重复读 、 幻读 )

  • 脏读: A事务读取到了B事务未提交的内容,而B事务后面进行了回滚.
  • 不可重复读: 当设置A事务只能读取B事务已经提交的部分,会造成在A事务内的两次查询,结果竟然不一样,因为在此期间B事务进行了提交操作.
  • 幻读: A事务读取了一个范围的内容,而同时B事务在此期间插入了一条数据.造成"幻觉".

15、为什么要尽量设定一个主键?

主键是数据库确保数据行在整张表唯一性的保障,即使业务上本张表没有主键,也建议添加一个自增长的ID列作为主键,可以加快增删改查操作,确保操作数据范围安全。

16、字段为什么要求定义为not null?

null值会占用更多的字节,且会在程序中造成很多与预期不符的情况


十一、其他问题

1、你项目遇到bug,怎么查问题?

​ 到了bug,会查询日志,通过日志定位到某个类的行数,判断是否有代码问题 ;

2、项目是怎么发布的?

企业当中项目都是发布在linux环境上;

小公司:使用maven编译好通过打war包,放入到tomcat的webapps文件下;

大公司:使用自动部署系统jenkins直接关联svn地址自动打包、自动部署等;

3、线上服务器CPU100%服务器爆满??

第1种情况,被攻击了,就比如被别人注入挖矿程序

第2种情况,并发量特别高,同时有大量请求去访问我们的服务器

第3种情况,代码写死循环

第4种情况,定时任务比较多的情况,会内存饱满

4、你们项目中如何处理异常?

使用全局统一异常处理类, 分为 自定义异常 和 统一异常

原创文章 6 获赞 10 访问量 262

猜你喜欢

转载自blog.csdn.net/ShaoTo/article/details/105855486
今日推荐