【面试题目】

这里写自定义目录标题

List item

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

1、JDK和JRE有什么区别?

JDK是java的开发工具包,包含了各种类,库,并且包含了JRE
JRE是java程序的运行环境

2、Redis的五种基础数据类型

1、字符串 String
2、列表 List
3、集合 Set
4、有序集合 sort set
5、哈希 Hash

3、List和Set,Map的区别

List和Set都是继承Collection接口
List特点:元素有放入顺序,可以重复
Set特点:元素无放入顺序,不可以重复,重复会被覆盖掉
Set检索元素效率低,删除和插入效率高,并且不会引起元素位置改变
List和数组类似,可以动态增长,查找元素效率高,插入删除元素效率低,会引起其他元素位置改变

List:存储的对象是可重复的,有序的
Set:存储的对象是不可重复的,无序的
Map:存储键值对(key,value),不能包含重复的键(key),每个键只能映射到一个值

4、Final的作用

修饰类:表示该类不能被继承
修饰变量:表示该变量为常量不能被重新赋值
修饰方法:表示该方法不能被重写

5、Java获取反射的三种方法

1、通过new对象实现反射机制
2、通过路径实现…
3、通过类名实现…

6、反射机制?

反射机制是在运行状态中对于任意一个类都能够获得这个类的所有属性和方法,任意一个对象都能够调用它的任意一个属性和方法,这种在运行时动态的获取信息以及动态调用对象的方法功能成为java的反射机制。

7、==和equals

==是判断两个对象的地址值是不是相等,即两个对象是不是同一个对象
(基本数据类型比较的是指,引用数据类型比较的是内存地址)
equals()作用也是判断两个对象是否相等,?????????

==比较的是两个值是否相等,如果比较的是基本数据类型,则比较其存储的值是否相等,如果是引用类型,则比较所指向的对象的地址值
equals不能作用于基本数据类型,比较的是引用类型的变量所指向的对象的地址值

8、SpringMvC的五大组件

1、DispatvherServlet:前端控制器,接收请求调用其他组件请求响应请求,相当于转发器,中央控制器,是整个控制流程的核心
2、HandlerMapping:处理映射器,主要功能是实现请求派发,找到请求和控制器之间的对应关系
3、Controller:控制器,接收处理控制控制器分发的请求,将执行的结果(ModelAndView)返回给前端控制器
4、ModelAndView:封装数据模型和视图信息
5、ViewResolver:视图解析器,根据视图名称解析后返回一个真正的页面

Spring Web MVC 五大核心组件
DispatcherServlet 控制器入口 负责分发请求
HandlerMapping 负责根据请求 找到对应的控制器
Controller 真正处理请求的控制器
ModelAndView 封装数据信息和视图信息的
ViewResolver 视图处理器 通过处理找到对应的页面

9、SpringMvC流程

1、用户发送请求到前端控制器
2、前端控制器接收到之后调用处理器映射器
3、处理器映射器找到相对应的Controller并将Controller返回给前端控制器
4、前端控制器根据Controller的名字调用处理器适配器,处理器适配器经过适配调用具体的Controller,执行完后返回ModelAndView给前端控制器
5、前端控制器将ModelAndView传给视图解析器,视图解析器根据View解析后返回具体的JSP页面
6、前端控制器根据Model对View进行渲染,再讲填充好的数据响应给用户

10、get和post请求的区别

1、get是从服务器上获得资源,post是向服务器提交数据
2、get是将表单中的数据按照name=value的形式,添加到action指向的URL后面,并且两者使用?连接,而各个变量之间使用&连接
post是将表单中的数据放在HTTP协议的请求头中传递到action所指向的URL
3、get传输数据受到长度限制(1024字节),post可以传输大量的数据,上传文件通常用psot方式
4、使用get时参数会显示在地址栏上,如果不是什么重要的数据可以使用get、重要数据还是使用post

get请求会被浏览器主动缓存,而post不会
get传递参数有大小限制,post没有
post传输数据更安全,get参数会显示在URL上不安全

11、JSP中的四种作用域

1、page:代表与一个页面相关的对象和属性
2、request:代表与Web发出的一个请求相关的对象和属性,需要在页面显示的临时数据可以使用此作用域
3、session:代表与某个用户与服务器建立的一次会话相关的对象和属性
4、application:代表与整个Web应用程序相关的对象和属性,包括页面请求会话的一个全局作用域

12、什么是IOC和DI?AOP什么时候使用?DI是如何实现的

IOC叫做控制反转,DI叫做依赖注入。
控制反转是把对象交给容器来管理,通过容器来实现对象组件的装配和管理
依赖注入:
依赖注入三种实现:
1、setter方法
2、构造器
3、接口
什么时候使用AOP:当一个系统添加新的功能又不能修改原来的代码
为多个类添加相同的功能的时候
增加事物或者日志的时候
这个时候就可以使用AOP

13、解释下什么叫AOP(面向切面编程)

14、重载与重写的区别?

重载:
指发生在同一个类中,方法名一样,返回参数,列表,个数,顺序不同
重写:
发生在父子类中,方法名,参数列表必须相同,返回值小于等于父类,访问修饰符大于等于父类。如果父类访问修饰符为private则子类不能重写

15、Array和ArrayList有何区别?

Arrayd必须制定数组的数据类型及数组长度,即数组中存放的元素个数固定并且类型相同
ArrayList是动态数组,会自动扩容,不使用泛型的时候可以添加不同类型的元素

16、Spring中用到了哪些模式?

单例模式:Spring中的Bean默认情况下都是单例的
工厂模式:主要是通过BeanFactory来生产Bean对象
代理模式:Spring主要使用JDK动态代理
模板方法模式:主要是对一些数据库操作的类用到,因为查询数据库的建立连接,执行查询,关闭链接几个过程比较适用

17、对IOC和AOP的理解?实现原理

IOC叫控制反转,指的是通过Spring来管理对象的创建,配置和生命周期,这样相当于把控制权交给了Spring,不需要人工来管理之间的复杂关系,好处就是解耦。在Spring中提供了BeanFactory和ApplicationContext(抗塔斯特)两种IOC容器,通过他们来实现对Bean的管理

AOP叫面向切面编程,目的是提高代码的模块性。Spring中AOP的应用主要体现在事物,日志,异常处理等方面,实现对业务的隔离,同时也是解耦

18、FactoryBean和BeanFactory有什么区别?

BeanFactory是Bean的工厂,IOC容器的核心,主要负责生产和管理Bean对象。

FactoryBean是Bean??????????

19、SpringBean的生命周期?

简单概括四个阶段
1、实例化阶段:创建一个Bean对象
2、为属性赋值阶段
3、初始化阶段
4、销毁阶段

20、char和vervhar的区别?

cahr是固定长度的字符类型,verchar是可变长度的字符类型。

21、怎么使用sql优化?

1、优化表结构
1)尽量使用数字型字段
2)尽可能使用verchar代替char
2、优化查询
1)尽量避免where字句中使用!=或者<>操作符,o条件连接
2)任何查询也不要出现select *
3、索引优化
1)对作为查询条件的order by的字段建立索引
2)避免建立过多的索引,多实用组合索引

22、索引不适合哪些场景,有哪些优缺点?

不适合:数据量少的,更新比较频繁的
优点:唯一索引可以保证数据库中每一行的数据的唯一性
可以加快数据查询速度,减少查询时间
缺点:创建索引和维护索引耗费时间
对表数据增删改的时候也需要动态维护

23、乐观锁和悲观锁以及区别?

悲观锁:一个事物拥有悲观锁之后,其他任何事物都不能对数据进行修改,只能等待锁被释放才可以执行
乐观锁:乐观锁认为数据变动不会太频繁,因此允许多个事物同时对数据进行变动

24、MySql事物的四大特性

1、原子性:作为一个整体被执行,要么全都执行要么不执行
2、一致性:事物开始和结束以后,数据不会被破坏
3、隔离性:事物之间不影响其他事物
4、持久性:事物完成以后对数据库所做的操作,将持久的保存在数据库之中

25、事物的隔离级别

1、读未提交
2、读已提交
3、可重复读
4、串行化
MySql默认事物隔离级别是可重复读

26、什么是幻读,脏读,不可重复读

幻读:一个事物查询的结果被另一个事物插入或者删除了数据,再次去查询的时候两次结果不一样了,叫做幻读
脏读:a事物和b事物交替执行,a被b干扰到了,a读取到了b的数据,叫脏读
不可重复读:一个事物范围内,两个相同的查询读取到同一条记录,返回了不同的数据,叫不可重复读

脏读:一个事物读取到另一个事物还未提交的数据
不可重复读:在一个事物中多次读取到同一个数据,结果出现不一致
幻读:在一个事物中使用相同的SQL两次读取,第二次读取到了其他事物新插入的行

27、HashMap的实现原理

数组+链表,初始16
0.75扩容

28、HashSet的实现原理

29、ArrayList和LinkList的区别是什么?

ArrayList底层基于动态数组,LinkList基于链表实现
对于随机访问Get和Set,ArrayList优于LinkList
对于新增add和删除remove,LinkList比较快

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

List转数组,toArray()方法,在方法参数中指定原集合的长度的数组即可
数组转List,ArrayList的asList()方法

多线程

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

并发:指的是多个事件同时进行,多个处理器同时处理多个任务
并行:多个任务在同一个CPU上,按细分的时间片轮流执行,

32、线程和进程的区别?

进程是操作系统资源分配的基本单位,线程是任务调度和执行的基本单位
进程有独立的地址空间
一个进程崩溃后在保护模式下不会对其他进程产生影响
在操作系统中能同时运行多个进程,而在同一个进程内有多个线程
一个程序至少有一个进程,一个进程至少有一个线程,一个进程下也可以有多个线程来增加程序的执行速度

33、守护线程是什么?

守护线程是运行在后台的一种特殊进程,独立于控制终端并且周期性的执行某种任务或等待处理某些发生的时间。在java中垃圾回收线程就是特殊的守护线程

34、创建线程的几种方式?

1、继承Thread类,重写run方法,用子类实例调用start()方法
2、实现Runnable接口并重写run方法,创建Thread实例并传入Runnable实例,调用Thread的start()方法
3、创建Callable接口的实现类,重写call方法
4、通过线程池创建

35、线程有哪些状态?

1、NEW 新建状态:尚未启动
2、Runnable 就绪状态
3、Running 运行状态
4、Blocked 阻塞状态
5、Dead 死亡状态

36、sleep和wait有什么区别?

sleep方法时Thread类的,而wait方法时Object类中的
sleep方法使线程暂停指定的时间,让出CPU给其他线程,但是他的监控状态依然保持着,时间到了以后会自动回复运行状态,在这个过程中,线程不会释放同步对象锁
wait,线程会放弃对象锁,进入等待队列,获取对象锁后才进入运行状态
+++++++++++++++
类的不同:sleep()来自Thread,wait来自Object
释放锁:sleep不释放,wait释放
用法不同sleep到时间会自动恢复,wait可以直接唤醒

37、线程的run和start有什么区别?

run只是定义了线程的执行单元并非开启了线程资源,只有start方法被调用才可以启动一个线程,如果直接调用run方法会被当成普通方法在mian线程中执行,并不会创建线程

start方法用于启动线程,run方法用于执行线程运行时的代码
run方法可以重复调用,start只能调用一次

38、创建线程池有哪几种方式?

7种

39、线程池都有哪些状态?

1、Running:一旦被创建就处于此状态,可以接受新任务以及对已经添加的任务进行处理
2、Shutdowm:此时不接受新任务,但是可以处理已经添加的任务
3、Stop:此时不接受新任务,不处理已添加任务,并且会中断正在处理的任务
4、Tidying:所有任务销毁了
5、Terminated:线程池彻底终止会变成这个状态

java程序中怎么保证多线程的运行安全?

一、使用安全类
二、使用自动锁
三、使用手动锁

如何终止线程池?

shutdown:温柔的关闭。就是不接受新任务,但是在关闭前会将之前提交的任务处理完毕
shutdownNow:粗暴的关闭。也就是直接关闭,不会等待之提交的任务执行完毕,但是会返回队列中未处理的任务

40、什么是死锁?怎么防止死锁?

死锁是指两个或者两个以上的进程或者线程在执行过程中,因争夺资源而造成的一种相互等待的过程

????????????

反射

41、什么是反射?

在运行过程中,对于任何一个类都能知道这个类的所有属性和方法,对于任意一个对象,都能狗调用它的任意一个方法和属性,这种动态获得信息的方法称为java的反射机制

42、什么是序列化?

是一种来处理对象流的机制,简单来说,就是把对象存储在某一个地方,即把对象的内容转变为字节序列

43、动态代理是什么?怎么实现?

动态代理就是可以任意的控制任意对象的执行过程,意思就是说这个对象的执行过程可以由客户端灵活的指定
通俗说就是本来自己做的事情因为某种原因不能直接做,只能请别人代理做

怎么实现?利用JDK的原生动态代理

Java Web

44、jsp和servlet有什么区别?

jsp擅长页面显示,servlet擅长逻辑控制
servlet没有内置对象,jsp有
servlet在java代码中嵌入html代码,jsp是在html中嵌入java代码

45、jsp有9个内置对象,作用分别是什么?

1、request 用户请求端,此请求会包含来自GET/POST请求的参数
2、session 与请求有关的会话期
3、application session 正在执行的内容
4、page JSP网页本身
5、config servlet的构架部件
6、
7、
8、
9、

45、jsp的四种作用域?

1、application:代表与整个web应用程序相关的对象和属性,起到一个全局作用域
2、session:代表与某个用户与服务器建立的一次会话相关的对象和属性
3、request:代表与客户端发出的一个请求相关的对象和属性
4、page:代表与一个页面相关的对象和属性

46、session与cookie有什么区别?

数据存放位置不同:session在服务器,cookie在客户端浏览器
安全性不同:cookie安全性一般,在浏览器存储,可以被伪造和修改
cookie只能存储string类型的数据,session可以存储对象
单个cookie保存的数据不能超过4k,而session是在服务器的,所以没有限制
安全程度不同

47、session的构造原理?

当用户第一次访问一个服务器,服务器就会为该用户创建一个session,并生成一个和该session有关的session_id。这个id是惟一的不可重复,这个id会保存在客户端的cookie中,下次访问时,客户端浏览器的cookie中含有这个session_id,服务器基于这个id就可以识别该用户

48、如何避免sql注入?

1、采用预编译
2、使用正则过滤传入的参数
3、屏蔽不安全的字符

49、异常throw和throws的区别?

1、throw:用在方法内,抛出一个具体的异常类型
2、throws:用在方法上,表示可能出现异常的可能,并不一定会发生
3、throws:出现在方法头,而throw出现在函数体
4、throws:用来声明一个方法可能抛出的异常,不会处理异常

50、异常的处理方式?

抛出异常
使用try catch捕获并处理异常

51、常见的异常有哪些?

1、空指针异常
2、指定类不存在
3、数组下表越界
4、数据类型转换异常
5、文件未找到异常
6、方法不存在异常

MySql

什么是索引?

索引 Index是帮助MySql高效获取数据的数据结构。就像字典里面的目录。

52、数据库的三范式?

第一范式:强调的是列的原子性,即数据库的每一列都是不可分割的
第二范式:实体的属性完全依赖于主关键字
第三范式:任何非主属性不依赖于其他非主属性

53、说一下ACID是什么?

Atomicity:原子性
Consistency:一致性
Isolation:隔离性
Durability:持久性:事物处理结束后对数据的修改是永久的,即使系统故障也不会丢失

54、char和verchar的区别是什么?

char是固定长度,verchar是可变长度
char:优点:效率高。缺点:占用空间

55、mysql的内连接,左右连接有什么区别?

内连接:inner join;
内连接是把匹配的关联数据显示出来
左连接: left join
是把左边的表全部显示出来,右边的表显示出符合条件的数据
右连接:right join
与左连接反之

56、乐观锁与悲观锁?

乐观锁:每次拿数据的时候都认为别人不会修改,所以不会上锁,但是在提交更新的时候回判断一下在此期间有没有人去更新这个数据
悲观锁:每次去拿的时候都认为别人会修改,所以每次都会上锁,别人想拿到这个数据就会阻止,直到这个锁被释放

设计模式

1、单例模式
2、工厂模式
3、观察者模式
4、

Spring/SpringMVC

57、为什么要使用spring?

1、方便解耦,可以将对象之间的依赖关系交给spring
2、方便测试,支持junit
3、集成其他框架比较方便
4、声明式事物
5、支持aop编程,方便对程序的监控拦截

58、解释下AOP是什么?怎么实现的?哪几种创建代理的方式?

AOP即是面向切面编程,在原有的功能基础上通过aop添加新的功能,
本质上是通过动态代理来实现
Spring中的AOP目前支持JDK动态代理和Cglib代理

59、解释下IOC是什么?

IOC是控制反转,把创建和维护对象之间的权利交给spring容器去做,不需要创建,直接调用即可

BeanFactory和FactoryBean的区别?

BeanFactory:Spring容器最核心的也是最基础的接口,本质上是个工厂,用来管理bean的工厂,最核心的功能是加载bean,也就是getBean方法。
FactoryBean:该接口以bean样式定义,但是他不是一种普通的bean,他是个工厂bean,

60、Spring有哪些模块?

AOP:提供了常用的拦截器供用户配置
ORM:提供了对常用的ORM框架的管理和辅助支持
DAO:spring提供对JDBC的支持,统一管理jdbc事物,并不对其进行实现
WEB:提供常用框架
MVC:提供一些轻量级的MVC实现,简单方便

61、Spring常用的注入方式有哪些?

构造器注入
Setter注入
基于注解的注入:@Autowired或者@Rsource来注入对象

62、spring支持几种bean的作用域?

1、session:每次会话产生一个实例
2、request:每次HTTP请求都会产生不同的bean实例
3、单例:默认作用域,在spring容器中此种类型的bena只有一个

63、spring自动装配bean有哪些方式?

1、xml配置方式
2、注解扫描方式

64、Spring五个事物隔离级别?

默认隔离级别
读未提交:最低的一个隔离级别,会读取到其他事物还未提交的内容,存在脏读
读已提交:读取到的内容都是已经提交的,可以解决脏读,但是存在不可重复读
可重复读:在一个事物中多次读取时看到相同的内容,可以解决不可重复读,但是存在幻读
串行化:最高的隔离级别

64、SpringMVC哪些组件?

DispatcherServlet:前端控制器
HandleMapping:处理器映射器
Controller:控制器
ModelAndView:视图模型
ViewResolver:视图处理器

65、SpringMVC的运行流程

1、用户向服务器发送请求,被SpringMVC的前端控制器拦截
2、前端控制器对请求的URL进行解析,根据URL调用处理器映射器
3、处理器映射器与该处理器有关的对象和拦截器信息返回给前端控制器
4、前端控制器根据获得的处理器信息,调用对应的处理器适配器处理数据
5、处理器适配器提取请求中的模型数据,看是执行处理器,处理完成后向前端控制器返回一个视图信息对象
6、前端控制器根据视图信息选择合适的视图解析器处理数据
7、视图解析器根据视图和view渲染视图将结果返回给客户端

66、@RequestMapping的作用是什么?

映射请求,指定哪些URL可以被该处理器处理

67、@Autowired的作用是什么?

可以对类成员变量,方法及构造函数进行标注,完成自动装配的工作,通过@Autowired来小厨set/get方法

Mybatis

#{}和${}的区别?

#{}是预编译处理,#${}是字符替换
使用#{}时间,mybatis会将sql中的#{}替换成?。这样可以有效的防止sql注入,保证程序的安全

说一下mybatis的一级二级缓存?

一级缓存是SqlSession级别的,在一个sqlsession中,第一次查询缓存中是否有数据,没有就会查询数据库,并将数据保存在一级缓存中,第二次去查的时候会直接从缓存中查询,如果sqlsession进行了commit操作则会清空缓存

二级缓存是Mapper级别的,多个sqlsession共享,默认关闭

mybatis分页如何实现?插件的实现原理是什么?

实现:使用mybatis里面的第三方插件。

是使用mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的SQL,然后重写SQL

mybatis执行流程运行原理?

1、通过流加载配置文件
2、通过创建SqlSessionFactoryBuild方法获取流返回一个SqlSessionFactory接口对象
3、调用SqlSessionFactory的openSession方法,返回的是一个SqlSession接口对象
4、调用SqlSession的gerMapper方法,通过反射获取对象,返回的是一个具体的接口对象
5、调用该对象的增删改查方法。
查询不需要调用sqlSession事物提交方法:commit();
删改查必须要调用sqlSession事物提交方法sqlSession.commit();否则事物不成功

Spring和SpringBoot的区别?

SpringBoot只是Spring本身的拓展,使得开发,测试,部署更加方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值