Java面试

spring,springmvc和springboot的区别

spring是一个容器,是将对象的创建由程序员改变成spring容器,解决了MVC模式的一个耦合度过高的问题。
springmvc是一个基于spring的mvc框架,m代表业务逻辑层,v是代表视图,c是代表控制层,将代码进行 分层,进行解耦,和spring无缝结合。
springboot是一个约定优于配置框架,解决了传统框架臃肿的配置,嵌入一些tomcat,serlvelt,可以独立运行,不需要配置xml。

springboot的优点

框架内嵌入一些tomcat,serlvelt,是可以独立的运行的
解决了繁重的配置
容易上手
不需要新建xml并配置

spring配置文件有几种类型?

properties
yml

spirngmvc流程?

用户发送请求,被DispatcherServlet(前端控制器)拦截,DispatcherServlet 请求你handelMapping,返回一个handel,DispatcherServlet 请求适配器解析handel,返回ModeAndView,DispatcherServlet 请求视图解析器解析ModeAndView,返回view视图,DispatcherServlet 然后对view视图进行渲染,并将他放入request域中,放回给客户端。

spring bean的生命周期?

实例化bean对象,设置对象属性,如果bean实现了BeanNameAware接口,工厂调用setBeanFactory()方法传入工厂自身,将bean实例传递给bean的前置处理器的postProcessBeforeInitialization(Object bean, String beanname)方法,调用bean的初始化,将bean实例传递给bean的后置处理器postProcessAfterInitialization(Object bean, String beanname)方法,执行DisposableBean接口的destroy方法,Spring容器关闭.

reids缓存穿透,如何解决?

首先要搞清楚什么是缓存穿透,是缓存没有,数据库没有,缓存击穿是缓存没有,数据库有,不是一个概念。
解决方案一:缓存空对象,如果redis没有,查询数据库的值返回放入redis,将缓存时间设置短一点。
解决方案二:使用布隆过滤器,将数据放入布隆过滤器中,如果有就放行,如果查询的数据不存现在,就直接返回,布隆过滤器不支持删除。

redis雪崩?

突然缓存挂掉了,那么请求的压力全部到了数据中。
解决办法:将每个缓存的时间设置是随机值。双缓存策略,将a1设置为短期,a2设置为长期。

mysql的特性?

原子性:要么都执行,要么都不执行
隔离性:将事务进行隔离,每个事务的操作,不被企图修改的事务看到
持久性:将数据存储到数据库中
一致性:从事务开始到结束,数据库的完整性没有被破坏

mysql隔离级别?

读已提交
读未提交
序列化:在每个读的数据上加上共享锁(读锁)
重复读

mysql读出现的现象?

脏读:读到另一个事务未提交的数据。
幻读:一个事务读到另一个事务的增加操作,导致数据不一致。
不可重复度:一个事务读到另一个事务的修改操作,导致数据不一致。

mysql有哪些约束?

唯一约束
主键约束
外键约束
检查约束
默认约束

数据库三范式?

一列不要包含多个属性
一张表中只能做一件事
一张表中只能存在另一张表中的主键

get和post区别?

从安全方面来讲:get属于不安全,post属于安全的,因为get方式的会将参数可视化
从数据传输的大小:get传输的大小是有限制的,post没有。

什么是spring?

spring是一个超级工厂,将所有的对象的创建都是在spring中创建,和管理。

spring的好处?

spring代码污染极低,低侵入式设计
spring统一管理对象的创建
实现代码的解耦。
提供aop解决代码的重复性
spring支持单例模式
支持当前主流框架

sql语句分类?

ddl 数据库查询语言
dml数据库操作语言
ddl数据库定义语言
dcl数据库控制语言
tpl事务控制语言

spring模块?

springcore:核心容器
springaop:切面编程
springorm:数据的访问于集成
springdao:经常使用jdbc会造成重复的代码,SpringDAO模块对jdbc抽取了这些重复代码
springweb:web服务
springcontext:Spring应用的环境
springwebmvc:Spring为构建Web应用提供了一个功能全面的MVC框架。

简单的说一下hashmap?

hashmap是一个key和value的键值对,可以为空,jdk1.8之前存储是数组和链表,jdk1.8是数组和链表和红黑树,初始大小是16,负荷系数是0.75,每次扩容大小都是当前大小的2倍,也就是说他的大小都是2的几次幂。

说说你对springioc的理解?

springioc是控制反转,以前new一个对象需要自己手动,那么使用spring不需要手动,springioc会创建对象并注入。解决的各各层之间的解耦。

hibernate缓存机制?

hibernate的一级缓存是默认开启的,那么他不是跨session的,也就是说不是一个session中不是共享的,二级缓存需要开启,二级缓存是可以跨session共享的。

重写equals为何要重写hashCode?

因为hashcode是比较两个对象是否相等,不重写就是比较地址,重写之后就是比较值了。

你能说一下你知道的集合?

arraylist,array,linkdlist,hashmap,hashtable,treemap,soket,vector
hashset,linkdhashmap。

那些集合是安全的,那些是不安全的,有序的?

安全:hashtable,treemap,soket,vector
不安全:arraylist,array,linkdlist,hashmap,

arraylist和linkdlist的区别?

arraylist和linkdlist都是实现list接口
arraylist的查询快
linkdlist增加删除快
linkdlist占的内存可能更大点,他底层是双向链表,一个节点会存储前后节点的地址。

array和arraylist的区别?

array是可以存储基本类型和对象,array只能存储基本类型
array是固定大小,arraylist大小是可变的

array和vector的区别?

他们的底层数据结构都是数组
array和vector都是实现了fail-fast
都是可以增加空值
array是不安全的,vector是安全的

cellection和cellections的区别?

cellection是一个层级的根接口
cellections是一个包装,提供了静态方法实现排序,搜索,线程安全等操作。

drop,truncate,delete的区别?

delete会删除数据,会记录日志,可以进行回滚,
trucate会将数据删除,不会记录日志,不能进行回滚,速度快。
drop是是删除整个表

spring中单例模式创建bean是不是安全的?

不是,在多线程的情况下可能创建同一个对象多个实例,添加@Scope(“prototype”)注解表示每次调用都会创建一个新bean,也可以使用ThreadLocal,ThreadLocal里面有一个安全的map,将线程id为map的key,对象做为map的value,那么这样就可以达到隔离效果,尽量不使用成员变量。

什么是mybatis?

mybatis是一个半自动的orm框架,对jdbc进行封装,减少代码的重复,通过xml写sql语句,更加灵活。

mybatis的优点?

mybatis对jdbc进行封装,减少重复代码,学习简单,灵活,解除了代码和sql之间的耦合。

sychornize在字节码层面是怎么实现的?

monitorenter是进入同步方法,monitorexit是退出同步方法,当monitorenter进入同步方法中,会获取当前的monitor对象,判断对象中count为0的时候,线程就可以获取到monitor,并将count设置成1,如果monitor已经被其他线程占有,那么当前线程会进入阻塞状态,只有等到这个线程运行结束,执行monitorexit退出同步方法,这个时候count就变成0了,不论这个方法时候正常结束,即使是异常也会执行monitorexit指令。

什么是java内存模型?

Java内存模型(Java Memory Model ,JMM),屏蔽了各种硬件和操作系统的访问内存差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。

java垃圾回收机制?

c语言的垃圾回收是需要程序员本事进行垃圾回收,如果程序员不进行垃圾回收的话,在短的时间内部不会出现什么异常,随着时间的推移可能会出现内存泄漏,而Java就是自动回收垃圾,会单独的有一条线程执行,虽然他会回收垃圾,但是而回收不及时,也是java的缺点,当我们创建一个对象的时候,他刚开始会将他分配到新生代中,随着时间的推移,再将他放到老年代,如果现在这个对象是没用被引用的,那么他就适合回收。垃圾回收器就会在不定期的时间进行回收。

Spring中Bean的五个作用域?

singleton:spring里面默认的单例模式,也就是说对象只创建一次。
prototype:每次调用都会产生一个新的实例。
request:在没次请求中产生新的实例。
session:在每次会话中产生一个新的实例。
globalsession:使用session定义的bean都会产生一个新的实例。

servlet的生命周期?

初始化init,接收请求serivce,销毁destroy

BeanFactory和ApplicationContext有什么区别?

他们都是将bean加载到容器,只是加载的时间不同,BeanFactory是在第一次使用的时候就会去实例化,ApplicationContext是服务器启动的时候就实例化,可以配置懒加载,那么消耗的内存可能比较多。

springbean的注入方式?

属性(setter)注入,构造器注入,静态工厂方法注入,实例工厂方法注入

spring用到哪些设计模式?

工厂模式
单例模式
代理模式
观察者模式

静态代理和和动态代理的区别?

静态代理是事先知道代理什么,动态代理通过反射在运行的时候才知道代理的是什么。

http和udp的区别?

http是面向连接的,需要进过三次握手,四次挥手。udp是面向无连接的,效率高。
三次握手:客户端发送请求,服务器收到并发送一个确认的消息给客户端,客户端收到,连接建立了。
四次挥手:客户端发送关闭请求结束,服务器接收到请求确认,
,客户端确认,结束。如果服务器突然挂掉了,那么客户端会有一个超时时间,如果没给出回应,就自动断开连接。

转发和重定向的区别?

重定向会发送2次请求,传输的信息会丢失,地址栏会变,转发是不会信息丢失,地址栏不会改变,
信息不会丢失。

hashset为什么能实现不重复?

hashset底层是hashmap,实现了set接口,把存入的值当key值,所有会覆盖。

死锁的产生条件是什么?怎么避免死锁?和活锁有什么区别?

互斥性:同一个时间资源只能被一个线程拿到
循环等待条件:多个线程形成一个头尾相接的资源关系
请求于保持条件:当资源被别的线程拿到,请求资源是阻塞
不可剥夺条件:线程拿到资源不能强行剥夺
只要其中的一个条件不成立,就不会产生死锁
死锁的状态一直等待,活锁是一直只请求,请求失败,活锁有可能自行解开。

springaop的理解?

springaop打破传统的理念,进行横向切面编程,减少重复的代码。

aop关键字?

切面
切面点
通知
连接点

sql语句分类?

ddl 数据库定义语句
dml 数据库操作数据
dcl数据库控制于洋
dql数据库查询语言
tpl事务控制语言

orlace是怎么分页的?

使用rownum将伪列查询出来,根据伪列进行范围查询。

orlace经常使用的函数

length获取长度,lower转换成小写,upper转换成大写,to_char转换成字符,substr截取字符串

什么是orm?

解决了实体类和数据库的类型不匹配。

数据库如何优化?

添加索引,是一种空间换时间取舍,提高了查询,使用的空间比以往更多

什么时候该建立索引,什么时候时候不能建立索引?

在经常查询的列建立索引
在数据比较多的时候
对一些经常增删改的列尽量减少索引
有许多重复数据的,不适合建立索引

nginx的负载均衡有哪些?

轮询:平均分配
权重:配置访问机率
ip绑定:根据ip算出hash结果进行分配
fair(第三方):根据后端的服务器的速度分配
url_hash(第三方):使每个url定向到同一个服务器

cap定理(三个条件只能满足二个)

一致性:保持数据一致性
分区容错性:分区容错性是指系统能够容忍节点之间的网络通信的故障
高可用性:某个服务器出现异常,并不影响整体的使用

解释冷备份和热备份的不同点以及各自的优点?

冷备份是在数据库不在使用的时候进行备份,他是非归档士,备份简单,热备份是在数据使用的时候可以进行备份。

redis的持久化方式,各自好处?

rdb:他是快照形式,占用内存小,redis默认持久化配置,他是根据配置文件,进行多久存储一次。
aof:更加安全,他是每一秒就将内存的数据存储到硬盘,所有性能上可能比不上rdb,将所有的命令进行存储。

redis集群方式,各自优点?

主从复制:
哨兵模式:
Redis-Cluster集群:

什么是并发集合,有哪些?

一个线程进行遍历的时候,另一个线程不允许改变,如果想执行增删改,会抛出异常。并发集合有:
ConcurrentHashMap、 ConcurrentLinkedQueue、 ConcurrentLinkedDeque

如何将数组转换成集合,如何将集合转换成数组?

转换成集合:aslist
转换成数组:toarray

io和nio的区别,各自的好处?

io是面向流,阻塞 ,nio是面向缓冲区,非阻塞

创建线程的方式,Runnable和Callable有什么区别?

继承Thread
实现Runnable
实现Callable
实现Runnable他没有返回值,而实现Callable是有返回值的。

什么是JDBC,在什么时候会用到它?

jdbc是一个种执行sql语句的java api,在我们要对数据库进行增删查改的操作的时候就需要用到它。

session的工作原理?

客户端发送一个请求,里面包括session的一种标识,如果和服务端的标识匹配,服务端会先检查session是否过期,如果过期,从新创建一个session,如果没有过期,就不创建是session。

创建jdbc连接步骤?

加载驱动,创建连接,创建执行对象,执行sql,返回结果,关闭连接。

什么是泛型,有什么好处?

泛型是对数据类型的一种增强,在编译的时候就检查类型,他保证了数据的可靠性,更加安全。

springboot自动配置的原理?

@SpringBootApplication->@EnableAutoConfiguration->@Import(AutoConfigurationImportSelector.class)->getCandidateConfigurations方法->loadFactoryNames()方法里面有存放自动装配的文件的地址,根据这个文件进行自动装配。

final作用?

final可以修饰属性,方法,类,修饰的属性不能被改变,修改的方法不能被重写,修饰的类不能继承

java8新特性有哪些?

接口默认方法
函数式接口
lambda表达式

springboot热部署,有哪些方式?

添加devtools依赖,(idea)然后按住ctrl+alt+shift+/选择Registry将compiler.automake.allow.when.app.running勾上。
在项目中添加springloaded依赖,然后找到edit configurations选择左上角的加号键,选择maven,然后输入springboot:run。

为什么需要spring-boot-maven-plugin,?

他是springboot的插件,是对springboot的支持
mvn spring-boot:stop springboot生命周期管理
mvn spring-boot:repackage 打包
mvn spring-boot:start springboo生命周期管理
mvn spring-boot:build-info 生成actuator使用的构建文件信息build-info.properties

springboot资源路径默认位置有哪些?

/static
/public
/resources
//META-INF/resources

springdate是什么?

springdate 是数据的访问进行简化

redis的特点?

redis是为了解决后端数据库压力的一种非关系数据库,他的特点就是快,他是将他的数据读取到内存中,从而能快速的将数据查询出来。而且redis是单例模式,可以将他作为消息中间件,具有丰富的存储类型。

如何保证redis的数据都是热数据?

redids提供了6中策略
从设置过期时间的数据集,将最少查询的数据淘汰
从设置过期时间的数据集,将要过期的数据淘汰
从设置过期时间的数据集,任意选择数据淘汰
从数据集中挑选最少使用的数据淘汰
从数据集中挑选任意数据淘汰

分布式session解决方案?

1.使用ip_hash会请求到同一台服务器,虽然可以解决分布式session问题,当如果刚好那台服务器突然挂掉了,那么用户就请求不到服务,也会出现负载过高的情况。
2.session主从复制,将tomcat中Cluster集群配置进行广播,项目是不支持集群部署的,所有要在web.xml配置distributable,适用于各种策略,服务器某个挂掉,也不会出现问题,会有一定延迟,占用带宽,对内存要求很高。
3.将创建的session存储到redis中,将session的id返回给浏览器,所有的session数据都是根据这个id获取数据。

分布式事务解决方案?

2PC(两阶段提交)
第一阶段:对多个数据源进行修改
第二阶段:对事物进行提交,只要出现问题,立马全部回滚。
这两个阶段都会将资源进行一个加锁,性能比较差。
tcc(两阶段提交)
也是根据两阶段提交,他也会对资源(表中的某个字段)进行一个加锁,但是加锁的力度是很小的,最终会保持数据一致性,成功机率不能保证百分之百,目前没有哪家公司可以做到,如果出现极端的情,需要公司的维护人员编写sql脚本进行回滚。

什么是redis缓存不一致?为什么会出现?,怎么解决?

redis缓存和数据库的数据不一致导致的,通常是在高并发的情况出现,是某个用户删除了这个数据,但是redis中的数据删除失败,导致了数据不一致,
解决方式1:设定一个缓存失效期
解决方式2:给所有的缓存都定期的清掉,然后全部加载到redis中。

rpc实现原理?

rpc是远程调用的意思,是解决分布式框架的服务之间的调用问题,调用端将参数进行序列化,服务端进行反序列化,根据解析的信息,调用本地的服务,然后将结果进行序列化,发送给调用端,调用端接收到并反序列。

什么是restful风格?

每一种url代表一种资源,独一无二
可读性强
统一接口(post增加,get查询,put修改,delete删除)

Mybatis和hibernate的区别?

Mybatis是半自动的orm框架,hibernate是全自动的orm框架,mybatis需要写sql语句,hibernate写hql语句,hibernate的迁移性比较好,换数据库不需要从新写hql语句,只需要将数据库的方言改变就行了。

什么是乐观锁和悲观锁?

悲观锁有对数据加锁,乐观锁不会对数据加锁,但是会加入一个条件,如果版本号不一样就不允许修改,相反可以修改。

mysql索引类型

B+树索引(O(log(n)))
hash索引
FULLTEXT索引
R-Tree索引

springcloud优点?

开发效率高,一个服务做一件事,适合小团队开发
松耦合
每个微服务可以用不同的语言
高容错性,一个服务瘫痪,并不会让所有的服务瘫痪。
缺点就是维护运维难度大。

什么是springcloud

springcloud是一系列的框架集合,停供了全套的分布式系统的解决方案。

Spring中BeanFactory与FactoryBean的区别?

他们都是Spring中工厂,BeanFactory是Spring容器的顶层接口,FactoryBean从本质上来说是一个Bean,他能在你需要的时候创建一个对象,类可以实现这个接口,那么这个类也可以说是一个工厂。
FactoryBean在Spring就是用来创建aop代理对象的。所以FactoryBean更像用户自定义的工厂接口。

Spring5新特性?

对java9进行兼容
可以使用java8新特性
响应式编程支持

ThreadLocal是什么?

从字面意思来翻译是线程本地变量,他会为每个线程分配一个副本,TreadLocal类中有一个Map,用于存储这个变量的副本,key是当前线程对象,value是这个线程变量副本,这个线程操作的值都是当前线程的副本变量,其他线程的变量不会发生改变, 从而达到线程安全。

如何进行sql优化?

避免全表扫描,对一些where和order by上建立索引。
避免在where对null的字段进行值判断,用or来连接条件,in和 not in,like,和where的字段进行表达式操作和函数操作,会导入查询语句不走索引,进行全表查询。
在经常做为条件的列上,建立索引。
避免使用子查询,效率差。

mybatis中#{}和${}的区别?

#{}是预编译处理,${}是字符串替换,使用#{}的参数会认为是一个字符串,加上双引号,而
${}是直接取值,#{}是能防止sql注入。

停止线程可以用哪几种方式?

stop,interrupt

面向对象和面向过程有什么区别?

面向对象不需要知道过程细节,只要只要结果,就好比如Java的函数,不需要知道过程,只需要知道返回什么东西
面向过程需要只要每一步的过程和细节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值