java面试题总结

1.arrayList 和 LinkList有什么区别?

arrayList底层是基于数组结构的,因为数组有下标,所以查询块,但是数组涉及到扩容以及缩容所以增删比较慢。

LinkList底层是基于链表的,增删数据只需要断两个数据之间的节点就可以了所以增删比较快
2.hashSet可以重复吗?为什么?hashMap可以重复吗?

hashset不可以重复 因为底层数据结构是哈希表 是无序并且是唯一的(由链表保证元素有序,由哈希表保证数据唯一)

hashMap中的key 不可以重复,但是value可以重复
3.jdk1.8有什么特性?

3.1 Lambda表达式

3.2 函数式接口

3.3 default关键字

3.4 方法与构造函数引用

3.5 map实现 加入红黑树
4.springboot 和spring区别

首先spring 是一个一IOC 和 AOP 为核心的第三方开源框架 所有的配置都需要自己手动配置到XML文件中。开发过程相对繁琐、而springboot 基于spring 框架 ,以快速开发为理念开发的一种脚手架,spring boot 简化了spring 的配置,无序手动配置。
5.什么是Spring框架

spring是一款轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核。还能整合开源世界众多著名的第三方框架和类库。
6.spring 的bean 是单例还是多例?

单例的 ,多例存在线程安全问题
7.spring 的两大核心是什么?

IOC (控制反转) 和 AOP (面向切面编程)
8.项目中什么场景下使用AOP?

需要增加额外功能时使用AOP 。或者日志记录,性能统计,安全控制,事务处理,异常处理
9.springboot常用注解

@Controller        @Component        @RequestBody        @Pathvariable

@RequestMapping        @RequestController        @configuration        @Controlleradvice

@exceptionHandler
10.简单介绍一下springboot

Spring boot是一个脚手架(而非框架),构建于Spring框架(Framework)基础之上,基于快速构建理念,提供了自动配置功能,可实现其开箱即用特性
11.springboot项目启动原理


SpringBoot 项目在启动时,首先基于启动入口类上的注解描述,进行自动配置并扫描启动类所在包以及子包中的类进行加载,然后检测类上是否有Spring框架中指定的注解描述(例如@Component,@Controller,@Service等)。假如有,则将类交给Spring框架中的BeanFactory工厂接口的实现类对象,此工厂对象会基于反射创建Bean的实例。
 
12.springboot核心配置文件有哪些,以及编码格式?

properties  文件  -ISO8859-1 , yml 文件 -UTF-8, xml  文件
13.springbootApplication注解的作用

@SpringBootApplication来标注这是一个springboot的应用,被标注的类是一个主程序, SpringApplication.run(App.class, args);传入的类App.class必须是被@SpringBootApplication标注的类。
14.简述springMVC框架

Spring Web MVC 是一种基于 Java 的实现了 Web MVC 设计模式的请求驱动类型的轻量级 Web 框架,即使用了 MVC 架构模式的思想,将 web 层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC 也是要简化我们日常 Web 开发的。
15.简述SpringIoc

SpringIoc容器是Spring框架的一大核心,容器将创建对象,把他们链接到一起,配置,并一起管理他们的整个生命周期(从创建到销毁)。

Spring提供了两种不同类型的容器

1.SpringBeanFactory容器,这是为Di提供基本支持的最简单的容器(懒汉式)

2.SpringApplicationContext 容器,这个容器包含李BeanFactoryContontainer的所有功能,因此推荐使用BeanFactoryFactory(饿汉式)
16.简述Spring  Bean的生命周期

创建前准备->创建实例化->依赖注入->容器缓存->销毁实例
17.AutoWired注解的作用

Autowired可以更加准确的空手指应该在何处以及如何进行自动装配,以及进行实例化创建
18.Spring的事务

首先Spring本身是没有事务的,但是数据库支持事务,所以Spring框架使用的数据库的事务,因此Spring事务的特性以及隔离级别和数据库一致.

特性:

原子性,持久性,隔离性,一致性

隔离级别:

读已提交,读未提交,可重复读,串行化
19.AOP有哪几种实现方式

1.代理模式静态的实现AOP

2.aspectj静态代理实现AOP

3、jdk动态代理实现AOP

4、cglib动态代理实现AOP

常用的就是后两种方式实现AOP
20.依赖注入有哪几种方式

1.构造方法注入

2.接口注入

3.Setter方法注入
21.Spring Bean的几种作用域

singleton,pritotype,request,session,application
22.读取XML文件的几种方式

DOM,DOM4J,JDOM,SAX
23.Mybatis和MybatisPlus的区别

MybatisPlus是Mybatis的升级版,两者一起使用并不会相互影响.

Mybatis遇到一些复杂的Sql需要自己手动在XML文件中写Sql语句

MybatisPlus 只能进行单表查询,不需要写Sql语句,只需要在Mapper层继承BaseMapper<?>就可以实现。但是MybatisPlus不能控制Sql语句的优化。
24.Redis常用的数据类型

String

List集合

Set集合

Hash散列表

sort Set集合
25.常用的IO类

字符流有两个基类: Reader 和 Writer

字节流有两个基类: InputStream 和 OutputStream
26.Mysql优化

看帖子<关于Sql优化>
27.怎么创建索引

直接创建索引

CREATE INDEX index_name ON table(column(length))

修改表结构时添加索引

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

 创建表时添加索引

   

CREATE TABLE `table` (
        `id` int(11) NOT NULL AUTO_INCREMENT ,
        `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
        `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
        `time` int(10) NULL DEFAULT NULL ,
        PRIMARY KEY (`id`),
        INDEX index_name (title(length))
    )

28.重写和重载的区别

重写:

重写发生在父子类的继承基础上,子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。

重载:

在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载。
29.http协议的请求方式

序号 方法 描述
1. GET

发送请求来获得服务器上的资源,请求体中不会包含请求数据,请求数据放在协议头中。另外get支持快取、缓存

、可保留书签等。幂等

2. POST

和get一样很常见,向服务器提交资源让服务器处理,比如提交表单、上传文件等,可能导致建立新的资源或者对

原有资源的修改。提交的资源放在请求体中。不支持快取。非幂等

3. HEAD

本质和get一样,但是响应中没有呈现数据,而是http的头信息,主要用来检查资源或超链接的有效性或是否可以可达、检

查网页是否被串改或更新,获取头信息等,特别适用在有限的速度和带宽下。

4. PUT

和post类似,html表单不支持,发送资源与服务器,并存储在服务器指定位置,要求客户端事先知

道该位置;比如post是在一个集合上(/province),而put是具体某一个资源上(/province/123)。所以put是安全的,

无论请求多少次,都是在123上更改,而post可能请求几次创建了几次资源。幂等

5. DELETE 请求服务器删除某资源。和put都具有破坏性,可能被防火墙拦截。如果是https协议,则无需担心。幂等
6. CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。就是把服务器作为跳板,去访问其他网页

然后把数据返回回来,连接成功后,就可以正常的get、post了。

7. OPTIONS 获取http服务器支持的http请求方法,允许客户端查看服务器的性能,比如ajax跨域时的预检等。
8. TRACE 回显服务器收到的请求,主要用于测试或诊断。一般禁用,防止被恶意攻击或盗取信息。
上一篇:切面AOP的切点@Pointcut用法


下一篇:Spring AOP框架理解