-
SpringBoot中的核心注解注解:@SpringBootApplication等价于默认属性使用@Configuration(实现配置文件),@EnableAutoConfiguration(自动配置文件)、@ComponentScan(实现Spring组件扫描)。
-
SpringBoot热部署:Spring-boot-devtools
-
SpringBoot配置加载顺序:properties、yaml、系统环境变量、命令行参数...
-
instanceof关键字:测试一个对象是否为一个类的实例。
-
拆装箱:基本数据类型<——>包装器类型,装箱用valueOf方法,拆箱用intValue方法(如果是Integer类型)
-
消除浮点数误差:Bigdecimal,也可用于金融数据类型
-
面向对象的特征:封装(把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义接口,提高安全性);继承(从已有类中创建继承新类,提高软件系统的延续性),多态(允许不同子类型的对象对同一消息做出不同反应);抽象(只关注对象的属性和行为,不关注细节)
-
运算符+=有隐含的强制类型转换
-
重写:子类将父类的方法重新写一遍,方法名、参数列表、返回类型必须相同。
重载:在一个类中,同名的方法有不同的参数列表,对返回类型不做要求。
-
equals比较的是内容,==比较的是地址
-
final的用法:被final修饰的类不可以被继承;被final修饰的方法不可以被重写;被final修饰的变量不可以被改变;被final修饰的方法,JVM会尝试将其内联,以提高运行效率;被final修饰的常量,会在编译阶段存入常量池中。
-
String是字符串,是一个只读对象;StringBuffer和StringBuilder都继承了AbstractStringBuilder类,都用来进行字符串操作;StringBuffer线程安全,效率低,StringBuilder线程不安全,效率高。
-
Java类只能单继承,但有可以有多个接口
-
抽象类不能实例化,普通类可以实例化;抽象类可以包含抽象方法,普通类不能包含抽象方法。
-
接口特点:没有构造方法,不能实例化,可以多继承。
-
抽象类特点:只有行为概念,使用abstract修饰,没有方法体,子类必须重写这些抽象方法;只有抽象类可以包含抽象方法;抽象类只能被继承。
-
hashCode作用:返回的是根据对象的内存地址计算出的值,相当于对象中唯一识别的信息。哈希算法可以提高集合中查找元素的效率。
-
Java的四种引用:强软虚弱
-
Java四种创建对象的方式:new;反射;clone;序列化
-
产生hash冲突时的解决方案:拉链法、开放地址法、双哈希法
-
static用法:静态变量、静态方法、静态块、静态内部类
-
JDBC操作步骤:加载数据库驱动类,获取数据库连接对象,获取sql会话对象,执行sql语句,处理返回结果,关闭连接
-
使用jdbc防止sql注入:使用preparedStatement类,而不是Statement类
-
&是位运算符,&&是布尔逻辑运算符
-
内部类:静态内部类、成员内部类
-
断言(assertion)是一种软件开发中常用的调试方式
-
排序方法:直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序
-
构造器不能被重写,可以被重载
-
四种标准元注解:@Target修饰对象范围,@Retention定义保留时间长短,@Documented描述javadoc,@Inherited阐述某个被标注的类是被继承的
-
注解Annotation是一个接口,程序可以通过反射来获取指定元素的Annotation对象,然后该Annotation对象来获取注解中的元数据信息
-
HashMap:键值对,继承AbstractMap类,key可以为空(只有一个),value可以为空,线程不安全,效率高
-
HashTable:键值对,继承Dictionary类,key和value不能为空,线程安全,效率低,比HashMap多elements()方法和contains()方法
-
Collection是集合类的上级接口,子接口有Set,List,Vector,Stack等等;Collections是集合类的帮助类,提供方法
-
List:允许重复,有序;Set:不允许重复,无序;Map:使用键值对存储,键不能重复,无序。
-
Vector:和ArrayList功能类似,数组实现,但支持线程同步。
-
ArrayList(数组):数组实现,支持随机访问,适合查找不适合增删。
-
LinkList(链表):用链表数据结构存储数据,适合增删不适合查找。
-
TreeMap:除Map的特性之外,可排序。
-
Java异常种类:编译时异常、运行时异常
-
Java IO流的4个抽象类基类:InputStream,OutputStream,InputReader,OutputReader
-
Java NIO三大核心部分:Channel(通道),Buffer(缓冲区),Selector(选择区)
-
NIO和IO的区别:NIO是面向缓冲区的,IO是面向流的
-
Java反射获取Class对象:Class.forName("类的路径");类名.class;对象名.getClass();基本类型包装类的Type属性
-
反射的使用步骤:获取Class对象,调用Class类中的方法,使用反射API来操作信息
-
利用反射动态创建对象实例:Class对象的newInstance()方法;调用Constructor对象的newInstance()方法
-
序列化是一种处理对象流的机制,将对象的内容进行流化。序列化的实现就是将需要序列化的类实现Serializable接口。
-
序列化深clone对象:先使对象实现Serializable接口,然后把对象写到一个流里,再从流读出来重建对象。
-
HTTP1.1相较于HTTP1.0的优点:可扩展性、缓存、带宽优化、长连接、消息传递、host头域、错误提示
-
http常见状态码:200成功;302重定向;400客户端请求语法错误;401请求未经授权;403服务器拒绝提供服务;404请求资源不存在;500服务器发生不可预期的错误;503服务器当前不能处理客户端请求,一段时间后可恢复正常
-
get和post区别:get请求将数据附在URL后,post把提交的数据放在http包体重;get方式提交的数据大小受浏览器限制,post无限制;post安全性更高;
-
重定向是客户端行为(改变浏览器地址,两次请求);转发是服务器行为(不改变浏览器地址,一次请求)
-
Cookie只能存储字符串,由浏览器保存;Session能存储任意对象,由服务器保存
-
jsp本质上是Servlet的实例,侧重页面显示;Servlet由Servlet容器产生,用来生成动态内容,侧重逻辑控制
-
jsp四大域对象:PageContext,Request,Session,Application
jsp九大内置对象:Request,Response,Session,Out,Page,PageContext,Exception,Application,Config
-
xml是一种可扩展性标记语言。优点是配置文件格式统一,可以在互不兼容的系统间传递数据;缺点是文件格式复杂,占用资源大且不易维护。xml的两种解析器DOM(树形结构)和SAX(事件模型)
-
Ajax的特点:异步模式,可以实现局部刷新,减少不必要的数据往返减少带宽占用,降低服务器负载。
-
jsonp是处理跨域get请求的一种常用方案
-
RestFul是一种软件架构设计风格,提供了一组设计原则和约束条件。可以在url相同的情况下判断请求类型来区分GetMapper或者PostMapper,还可以隐藏传递数据提高安全性。
-
WebService是一种跨编程语言和跨操作平台的远程调用技术
-
实现多线程三种方式:继承Thread类;实现Runnable接口;实现Callable接口通过FutureTask包装器来创建Thread线程
-
实现多线程后要重写run方法用于完成想实现的功能;start方法是一个native方法,将启动一个新线程并执行run方法;yield方法用于暂停线程;join方法强制等待其它线程终止;强行停止线程用interrupt方法中断线程或者stop方法强行终止但stop方法线程不安全
-
四种Java线程池:newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor
-
notify()用于唤醒线程,notifyAll()有可能因为所有线程争抢资源导致死锁
-
sleep()设定线程休眠时间,线程不会放弃对象锁,到时间后线程继续;wait()线程直接放弃对象锁
-
synchronized关键字用于解决线程同步问题,可以保证被它修饰的方法或代码块在任意时刻只能有一个执行;synchronized关键字可以修饰实例方法,静态方法,代码块;synchronized属于独占式的悲观锁
-
线程池好处:降低资源消耗,提高响应速度,提高线程的可管理性
-
线程的生命周期:新建new,就绪runnable,运行running,阻塞blocked,死亡dead
-
锁的优化:减少锁持有时间,减少锁粒度,锁分离,锁粗化,锁消除
-
Spring功能特点:轻量级;IOC控制反转;AOP面向切面编程;容器(创建和管理Bean的生命周期和配置);MVC(对web应用提供高度可配置性);事务管理;JDBC异常
-
SpringIOC容器:创建并管理Bean的生命周期,通过依赖注入DI来管理组成应用程序的组件,容器通过读取提供的配置元数据来接收对象实例化,配置和组装的指令
-
依赖注入的三种方式:构造器注入(基于index或者type),setter方法注入,接口注入(侵入性强不推荐)。在依赖注入中不必创建对象,描述如何创建它们即可,由IoC容器负责装配
-
Spring中有两种IOC容器,分别是ApplicationContext和BeanFactory。ApplicationContext的特点是使用即时加载,自己创建和管理资源对象,支持国际化,支持依赖注解。IOC的好处是可以减少应用程序代码量,降低耦合度,使程序易于测试,支持即时实例化和延迟加载服务。
-
Spring配置方式:基于xml配置、基于注解配置、基于Java API配置
-
Spring的5中Bean scope:Singleton(仅单实例),Prototype(每次请求产生一个新实例),Request(每次Http请求产生一个新的实例,作用域为当前请求),Session(作用域为当前session),GlobalSession
-
Spring Bean的生命周期:根据配置实例化Bean,依赖注入填充属性,处理Aware接口,Bean的初始化,关闭Bean,销毁Bean
-
Bean装配是指多个Bean组合绑定在一起,Spring可以自动装配。自动装配的几种方式:byName,byType,匹配xml,构造器函数装配,autodetect装配
-
启动注解装配:context:annotation-config标签
-
几个Spring常用注解:@Component:将java类标记为bean;@Controller将类标记为MVC控制器,自动导入IoC容器中;@Service组件注解的特化,用于标识服务层;@Repository:将DAO导入IoC容器中,给DAO提供额外的好处;@Required配置bean时显式配置属性值,作用在setter方法上;@AutoWired可以更准确的控制应该在何处以及何种方式进行自动装配;@Qualifier用于配置多个相同类型Bean消除歧义;@RequestMapping用于映射URL请求以及方法
-
事务管理两种类型:程序化事务管理,声明化事务管理
-
AOP:面向切面编程,基本单元是Aspect切面,Aspect由pointcut切点和Advice通知组成,AOP有静态打理和动态代理的实现方式,动态代理有JDK代理和GCLIB代理两种方式
-
Advice通知的类型:Before,After,After Returning,After Throwing,Around。
-
编织Weaving是为了创建一个Advice对象而链接一个Aspect和其它应用类型或对象,编织在运行时执行
-
Spring MVC就是模型-视图-控制器架构和随时可用的组件,用于分离应用程序的不同方面,同时在这些元素之间提供松散耦合
-
DispatcherServlet工作流程:前端控制器DispatcherServlet捕获向服务器发送的http请求;HandlerMapper处理器映射器解析URL并获得Handler配置的相关对象;选择一个合适的HandlerAdapter处理器适配器;提取Request模型数据,填充Handler入参,开始执行Handler(Controller);Handler(Controller)完成后,向DispatcherServlet返回一个ModelAndView对象;根据返回的ModelAndView,选择一个合适的ViewReslover视图解析器返回给DispatcherServlet;ViewReslover结合Model和View渲染视图;视图将渲染结果返回客户端
-
Spring IoC是Spring的核心,设计模式是工厂模式,控制反转就是创建工作交由Spring IoC容器进行而不是调用者,创建被调用者实例的工作也由Spring容器进行,因此依赖注入;Spring AOP是代理模式,将程序中的交叉业务逻辑(日志、安全、事务等)封装成一个切面,注入到目标对象的具体业务逻辑中。
-
@AutoWired是Spring提供的注解,只按照byType装配对象,如果想按照byName装配需结合@Qualifier使用;@Resource是java原生注解,默认是byName注入,也可以byType注入
-
Mybatis是一个半ORM框架,内部封装JDBC,连接数据库方便。优点是基于SQL语句编程相对灵活,数据库兼容性强,可以和Spring集成。
-
Mybatis中,#{}是预编译处理,${}是字符串拼接。#{}可以防止SQL注入
-
resultMap用于解决实体中的属性名和表中的字段名不同的问题
-
在Mapper中传递多个参数:使用@param注解,多个参数封装成Map,在Mapper.xml中使用#{index}指向接口中的参数索引
-
Mybatis九中动态sql标签:trim、where、set、foreach、if、choose、when、otherwise、bind
-
Mybatis的xml映射文件中通过配置不同的namespace,可以在不同的xml文件中有相同的id
-
Mybatis一对一实现用resultMap里面的association节点;一对多实现用resultMap里面的collection节点
-
Mybatis支持延迟加载,配置项lazyLoadingEnabled
-
Mybatis一级缓存存储作用域为Session,默认开启;Mybatis二级缓存存储作用域为namespace,需手动开启。
-
Mapper编写的几种方式:接口实现类继承SqlSessionDaoSupport;使用MapperFactoryBean;使用Mapper扫描器
-
MySQL引擎:MyISAM(默认)全表锁,不支持事务,不支持外键,并发性差,执行速度快;InnoDB行级锁,支持事务支持自动增长列,支持外键约束,并发能力强,是聚集索引(通过主键查询效率高),处理效率不如MyISAM;Memory引擎;MERGE引擎
-
MySQL四种索引:主键索引(Primary),唯一索引(Unique),普通索引(index),全文索引(FullText)。索引加快了数据库检索速度,索引降低了插入、删除、修改等维护任务速度,唯一索引可以确定每一行数据的唯一性,索引需要占用存储空间。
-
第一范式:列不可以再分;第二范式:行可以唯一区分(主键约束),每个表只描述一件事情;第三范式:表的非主属性不能依赖其它表的非主属性(外键约束),不存在对非主键列的传递依赖
-
数据库是事务,事务的特性ACID:原子性,一致性,隔离性,永久性
-
SQL优化:查询不要用*;用关联查询代替子查询;in用exist代替;or用union代替;避免where判非或判空,这样会使引擎放弃索引。
-
delete删除表的数据,drop不仅删除表的数据还会删除表的结构
-
视图是虚拟的表,具有和表相同的功能。相比于多表查询,视图获取数据更容易
-
并发事务的问题:脏读、丢失修改、不可重复读、幻读
-
SQL事务的四个隔离级别:读取未提交、读取已提交、可重复读(默认)、可串行化
-
SQL存储优化:用内置函数替代一些循环;事务越短越好;查找语句不要进循环;少使用游标
-
触发器是一段能自动执行的程序,当对某个表进行某种操作时触发
-
varchar和char的区别:varchar长度可变,char长度不可变
-
索引底层原理:经过优化的B+树,在所有的叶子节点中增加了指向下一叶子节点的指针
-
SQL语言包括数据定义DDL,数据操纵DML,数据控制DCL和数据查询DQL四个部分
-
数据的完整性约束:实体完整性、域完整性、参照完整性、用户定义的完整性
-
数据库并发策略:乐观锁、悲观锁、时间戳
-
JVM内存区域:线程私有域(程序计数器、虚拟机栈、本地方法区),线程共享区域(Java堆、方法区),直接内存
-
JVM类加载机制:加载、验证、准备、解析、初始化
-
JVM三种类加载器:启动类加载器、扩展类加载器、应用程序类加载器。类的加载机制是双亲委派机制
-
JVM堆分代:新生代Eden,幸存者(from,to),老年代,永久代
-
JVM性能调优:设置堆内存大小-Xmx;设置新生代大小-XX:NewSize
相关文章:
- [Java复习] 面试突击 - JVM 2023-11-08
- [Java复习] 面试突击 - 并发 2023-11-08
- 面试突击——java集合框架 2023-11-08
- 【面经】Java面试突击 2023-11-08
- 面试突击 2023-11-08
- java面试突击很好的视频 2023-11-08
- [Java复习] 面试突击 - 网络2 2023-11-08
- 面试突击(五)——Java常用集合 2023-11-08