- 博客(224)
- 收藏
- 关注
原创 SpringMVC——DispatcherServlet源码分析
首先启动项目,进行初始化操作:initStrategies()函数主要对DispatcherServlet类中的几个属性进行初始化操作,其中的几个属性为:MultipartResolver:解析多部分请求,以支持HTML表单上传文件HandlerMapping:用于handlers映射请求和一系列的对于拦截器的前处理和后处理,大部分用Controller注解HandlerAdapter:帮助DispatcherServlet处理映射处理程序的适配器,而不用考虑实际调用的是哪个处理程序ViewR
2020-08-04 20:50:32
208
原创 MySQL面试题——数据库为什么使用B+树而不是B树
数据库为什么使用B+树而不是B树判断一种数据结构作为索引的优劣主要是看在查询过程中的磁盘IO渐进复杂度,一个好的索引应该是尽量减少磁盘IO操作次数B树只适合随机检索,而B+树同时支持随机检索和顺序检索B+树空间利用率更高。因为内部节点不存储数据,只存储索引值,因为相比较B树来说,B+树一个节点可以存储更多的索引值,从而使整颗B+树变得更矮,减少了I/O次数,磁盘读写代价更低,I/O读写次数是影响索引检索效率的最大因素B+树的查询效率更加稳定。B树搜索有可能会在非叶子节点阶数,约靠近根节点的记录查找
2020-08-04 15:30:37
2449
原创 MySQL面试题——使用B-Tree和B+Tree各自的好处
使用B-Tree的好处B树可以再内部节点存储键值和相关记录数据,因此把频繁访问的数据放在靠近根节点的位置将大大提高热点数据的查询效率。B树一般在特定数据重复多次查询的场景中更加高效使用B+Tree的好处B+树内部节点不存储数据,只存储键值,这样,每个节点就能存储更多的键值,一次性也就能将更多的键值读入内存,减少了对磁盘的IO操作次数,且B+树的叶节点有一条链相连,所以对于区间内查询数据比较高效...
2020-08-04 12:15:02
813
原创 MySQL面试题——前缀索引
前缀索引当索引的字符串列很大时,创建的索引也就变得很大,为了减小索引体积,提高索引的扫描速度,就使用索引的前部分字符串索引,这样索引占用的空间就会减少,这样的索引称为前缀索引创建前缀索引,首先要先去比较重复率,比较待选择的前缀和原先列的重复率,选择最接近原先列的重复率的前缀,然后再考虑占用空间前缀索引的优缺点:MySQL前缀索引能够有效减少索引文件的大小,提高索引的速度,但是前缀索引不能用于ORDER BY和GROUP BY...
2020-08-04 11:01:01
249
原创 MySQL面试题——创建索引时需要注意什么
非空字段:应该指定列为NOT NULL,因为含有空值的列很难进行查询优化,因为他们使得索引、索引的统计信息以及比较运算更加复杂取值离散大的字段索引字段越小越好:数据库的数据存储以页为单位,一页存储的数据越多,一次IO操作获取的数据越大,效率越高...
2020-08-03 17:06:29
857
原创 MySQL面试题——创建索引的三种方式
在执行CREATE TABLE时创建索引CREATE TABLE user_name{ id INT auto_intrement PRIMARY KEY,//创建主键索引 //more KEY name(column_name1,column_name2),//创建普通索引 FULLTEXT KEY(column_name3),//创建全文索引 UNIQUE KEY(column_name4),//创建唯一索引 使用ALTER TABLE命令去增加索引创建主键索引:ALTER TAB
2020-08-03 16:44:44
1144
原创 MySQL面试题——索引设计和创建的原则
MYSQL索引设计和创建原则对于经常查询的字段,建议创建索引索引不是越多越好,一个表如果有大量的索引,不仅占用磁盘空间,而且对于写操作会造成性能底下避免对经常更新的表进行创建过多的索引,因为当表中有数据更改时,索引也会进行调整和更新,十分消耗系统资源数量小的表建议不要创建索引,数据量小时索引不仅起不到明显的优化效果,对于索引结构的维护反而消耗资源不要在区分度地的字段建立索引,比如性别字段,只有男女,建立索引完全起不到优化效果定义有外键的数据列一定要建立索引,因为如果外键列上缺少索引会带来两个问
2020-08-03 16:25:25
464
原创 MySQL面试题——索引算法
1.BTree算法Btree算法是最常用的MySQL数据库索引算法,它可以用在=,>,>=,<,<=和between这些比较操作符上,而且还可以用于like操作符,只要它的查询条件是一个不以通配符开头的常量2.Hash算法Hash索引只能用于对等比较,由于是一次定位数据,不想Btree索引需要从根节点到枝节点,最后才能访问到页节点这样多次IO访问,所以检索效率远高于Btree索引,Hash索引具有如下缺点:hash索引存储的是索引列的哈希码值和对应行的指针,所以不能通过读取
2020-08-03 15:05:40
141
原创 MySQL面试题——哈希索引
哈希索引基于哈希表实现,只有精确匹配所有的列的查询才有效。存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个比较小的值,且不同键值的行计算出来的哈希码也不一样,哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针Memory引擎是支持非唯一哈希索引的,如果多个列的哈希值相同,索引会以链表的方式存放多个记录到同一个哈希条目哈希索引查找速度非常快,但是也有一定的限制:哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行哈希索引也不支持部分索引列匹
2020-08-03 14:37:52
388
原创 MySQL面试题——索引的数据结构
数据库查询是数据库的最主要功能之一。最基本的查询算法就是顺序查找,这种复杂度为O(n)的算法在数据量很大时是性能很差的。1.B树索引和B+树索引目前大部分数据库系统和文件系统都采用B-Tree或者B+Tree作为索引结构。B-Tree为了描述B-Tree,首先定义一条数据记录为一个二元组[key,data],key为记录的键值,对于不同的数据记录,key是互不相同的。data为数据记录除key外的数据。由于B-Tree树的特性,在B-Tree中按照key检索数据的算法就为:首先从根节点进行二分
2020-08-03 14:07:41
650
原创 B树相关
2-3树2-3树是一颗自平衡的多路查找树,它并不是一颗二叉树,2-3树具有如下性质:每个节点有1个或2个key值,对应的子节点为2个子节点或者三个子节点所有叶子节点到跟节点的长度保持一致每个节点的key从左到右保持了从小到大的顺序,两个key之间的子树中所有的key一定大于它的父节点的左key,小于右节点的key2-3树的插入:2-3的插入操作,一定是在叶子节点进行,具体步骤如下:(1)如果待插入的节点只有一个key,则直接插入即可(2)如果待插入的节点有两个key,则对节点进行分裂:
2020-08-03 09:55:27
135
原创 MySQL面试题——索引
1.什么是索引在关系型数据库中,索引是对表中一列或多列的值进行排序的一种存储结构,他是表中一列或者多列的值,而且其中包含了对应表中记录的引用指针,更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。索引是一个文件,它是要占据物理空间的举个例子:首先,先假设有一张表,表有10万个记录,其中有一条记录我们已知a=‘1’,如果想要拿到对应记录的话,需要sql的语句是 SELECT * FROM XXX WHERE A=‘1’一般情况下,对于查询语句,在没有建立索引的时候,MyS
2020-08-02 21:52:29
454
原创 MySQL面试题——数据类型
MySQL的数据类型1.整数类型tinyint:很小的整数(8位二进制,即1字节)smallint:小的整数(16位二进制,即2字节)mediumint:24位二进制的整数(即3字节)int:32位二进制的整数(即4字节)2.小数类型小数类型包括float、double、decimal。decimal可以用于存储比bitint还大的整型,能存储精确的小数,而float和double是有取值范围的,并支持使用标准的浮点进行近似运算3.字符串类型字符串类型包括varchar、char、te
2020-08-02 17:36:44
204
原创 MySQL面试题——数据库基础知识
文章目录1.为什么要使用数据库2.什么是SQL3.数据库的三大范式是什么3.MySQL有关权限的表都有哪几个4.MySQL的Binlog1.为什么要使用数据库数据库保存在内存中时:优点:存取速度快缺点:数据不能永久保存数据库保存在文件中时:优点:数据永久保存缺点:速度比内存操作慢,频繁的IO操作,查询数据不方便数据保存在数据库中时:优点:数据永久保存缺点:使用SQL语句,查询方便效率高2.什么是SQLSQL就是结构化查询语言,是一种数据库查询语言,用于存取数据、查询、更新
2020-08-02 17:25:03
693
原创 Java多线程的start()方法和run()方法
为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法new一个Thread,线程进入了新建状态。调用start()方法,线程就进入了就绪态,当分配到时间片后就可以开始运行了,也就是线程进入到了运行态。start()会执行线程的相应准备工作,然后自动执行run()方法的内容,这就是真正的多线程工作,而直接执行run()方法,会把run()方法当作一个main线程下的普通方法去执行,并不会在某个线程中执行它,所以这并不是多线程工作,run方法只是thread的一个普通方
2020-08-02 16:14:40
587
原创 Runnable和Callable有什么区别
相同点:都是接口都可以编写多线程程序都采用Thread.start()启动线程不同点:Runnable接口run方法无返回值,Callable接口call方法有返回值,是个泛型注:Callable接口支持返回执行结果,需要调用**FutureTask.get()**得到,此方法会阻塞主进程的继续往下执行,如果不调用不会阻塞:Runnable接口中的run方法只能抛出运行时异常,且无法捕获处理,Callable接口call方法允许抛出异常,可以获取异常信息...
2020-08-01 19:16:38
571
原创 线程中的Thread类
1 继承Thread类1.1 步骤:定义一个Thread类的子类,重写run()方法,将相关逻辑实现,run()方法就是线程要执行的业务逻辑创建自定义的线程类子对象调用子类实例的start()方法来启动线程1.2 Thread类详解Thread类也是实现了Runnable接口:public class Thread implements Runnable{}Thread类重载了很多构造器:2.实现Runnable接口步骤:定义Runnable接口实现类,并实现run()方法创
2020-08-01 18:36:02
426
原创 关于跨平台性的浅谈
首先我们来说一下跨平台性的概念:跨平台性是指不依赖操作系统,不依赖硬件环境平台我们可以理解为:CPU+OS(操作系统),当然还有其他的一些硬件,我们把这些硬件和CPU统称为硬件环境。首先我们来谈下操作系统对于操作系统,我们常见的有Windows、Linux、Mac,手机端还有Android,iOS等,就拿Java来说,不同的操作系统对应不同的JVM,由这些不同的JVM将不同的操作系统抽象为一个对于字节码文件统一的接口,也可以说是,JVM封装了这些不同平台的差异,给字节码文件一个统一的接口。使Java程序
2020-07-26 22:17:27
1170
原创 Java中创建线程的三种方式
1.继承Thread类并重写run方法/** * 继承Thread类并重写run方法 */public class ThreadTest{ public static class MyThread extends Thread { @Override /** * 重写run方法 */ public void run() { System.out.println("I am a chil
2020-07-16 17:38:35
158
原创 SpringMVC中的处理器映射器(HandlerMapping)
在SpringMVC中,处理器映射器有两种配置方式。一种是基于XML的资源配置,也就是常说的非注解方式。另外一种就是基于Annotation注解方式的配置SpringMVC中有四种HandlerMapping:BeanNameUrlHandlerMapping、SimpleUrlHandlerMapping、ControllerClassNameHandlerMapping、DefaultAnnotationHandlerMapping。1.BeanNameUrlHandlerMapping(默认)是根
2020-07-09 20:51:51
1168
原创 学习Web.xml
1.认识web.xmlweb.xml的加载过程:在web-app元素内,元素的配置顺序与工程的加载顺序无关,web.xml的加载过程为:启动web项目,web容器(如tomcat)首先读取web.xml文件中的两个节点:<listener></listener>和<context-param></context-param>容器创建一个servlet上下文(servletContext),这个web项目所有部分共享这个上下文容器以<conte
2020-06-24 15:59:08
172
原创 SpringMVC关于handlerMapping和handlerAdapter
1.概念模型HandlerExecutionChainHandlerExecutionChain可以被想象为一个容器,它包含一个Handler,和一组特定顺序的HandlerInterceptor。Handler就是一个被设计为处理目标请求,输出响应数据的处理逻辑而一个HandlerInterceptor则是类似于AOP中切面的一种概念逻辑。在Spring MVC初始化过程中,符合某种特征的HandlerInterceptor会按特定顺序包裹到某些Handler外面,形成一个个HandlerExec
2020-06-22 15:00:17
347
原创 Mybatis面试题——mybatis简介
文章目录1.Mybatis是什么2.ORM是什么3.为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里1.Mybatis是什么Mybatis是一款优秀的持久层框架,一个半ORM(对象关系映射)框架,它支持定制化SQL、存储过程以及高级映射。mybatis可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POJO为数据库中的记录Mybatis的大致架构可以分为以下三层:基础支持层核心处理层接口层2.ORM是什么ORM,即Object Relational
2020-06-10 22:41:13
338
原创 Spring面试题——Spring IoC介绍
1.IoC的优点是什么IoC或依赖注入把应用的代码降到最低它使应用容易测试,单元测试不再需要单例和JNDI查找机制最小的代价和最小的入侵性使松散耦合得以实现IoC容器支持加载服务时的饿汉式初始化和懒加载2.控制反转(IoC)有什么作用管理对象的创建和依赖关系的维护解耦,由容器去维护具体的对象托管了类的产生过程,比如我们需要在类的产生过程中做一些处理,最直接的例子就是代理...
2020-05-29 16:23:26
560
原创 Spring面试题——什么是SpringIoC容器
什么是Spring IoC容器接口org.springframework.context.ApplicationContext表示SpringIoC容器,负责实例化,配置和组装Beans对象,容器通过读取配置元数据获取有关bean对象实例化,配置和汇编指令。配置文件以XML,Java注解或者Java代码表示,它们说明了应用中对象以及这些对象的依赖关系...
2020-05-29 15:43:54
604
原创 Spring MVC面试题——Spring MVC介绍
文章目录1. 什么是MVC2.什么是Spring MVCSpring MVC运行原理3.什么是Spring MVC框架的控制器1. 什么是MVCMVC模式(model-view-controller)是软件工程中的一种软件架构模式,它把软件系统分为三个基本部分:模型(Model),视图(View),控制器(Controller)Model(模型):用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法View(视图):负责进行模型的展示,一般就是我们见到的用户界面Controller(控制器
2020-05-28 16:03:12
371
原创 Spring面试题——Spring应用程序有哪些不同的组件
Spring应用一般有以下组件:接口——定义功能Bean类——它包含属性,setter和getter方法,函数等Bean配置文件——包含类的信息以及如何配置它们Spring面向切面编程(AOP)——提供面向切面编程的功能应用程序——它使用接口...
2020-05-28 16:03:05
596
原创 Spring面试题—Spring介绍
1.什么是SpringSpring是一个轻量级Java开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用程序开发的业务逻辑层和其他各层的耦合问题,Spring的两个核心特性就是依赖注入(DI)和面向切面编程(AOP)为了降低Java开发的复杂性,Spring采用了以下4中关键策略:基于POJO的轻量级和最小入侵编程(最小入侵编程简单来说就是,Spring Framework没有强迫开发者实现框架自带的接口)通过依赖注入和面向接口实现松耦合基于切面和惯例进行声明式编程通过切面和
2020-05-28 16:02:57
1083
原创 Java面试题——局部内部类和匿名内部类在访问局部变量的时候,局部变量为什么要加上final关键字
主要是为了解决生命周期不一致的问题对于方法中的局部变量,当方法执行结束后,非final的局部变量就会被销毁。而内部类对局部变量的引用依然存在,如果内部类要调用局部变量时就会出错,加了final,可以确保局部内部类使用的变量与外部的局部变量区分开,解决了生命周期不一致的问题...
2020-05-28 16:02:48
410
原创 Java面试题——JDK中常用得包有哪些
1. JDK中常用的包有哪些java.lang:这个是系统的基础类java.io:这里面是所有输入输出有关的类java.util:这个是系统的辅助类,特别是集合类java.sql:这个是数据库操作的类2. import java和javax有什么区别实际上java和javax没有区别,只是名字不同...
2020-05-28 16:02:35
572
转载 Java面试题——String类相关
1.字符型常量和字符串常量的区别形式上:字符常量是由一对单引号引起的一个字符,字符串常量是由双引号引起的若干字符含义上:字符串常量相当于一个整型的ASCII值,可以参加表达式运算,字符串常量代表一个地址值(该字符串在内存中存放的位置)占内存大小:字符常量只占一个字节,字符串常量占若干字节2.什么是字符串常量池字符串常量池位于堆内存中,专门用来存储字符串常量,可以提高内存的使用率,避免开辟多块空间存储相同的字符串在创建字符串时,JVM首先检查字符串常量池,如果该字符串已经存在池中,则返回它的引
2020-05-27 21:00:57
197
原创 Java面试题——面向对象和面向过程的区别
面向过程是具体化的,流程化的,解决一个问题,需要一步一步的分析,一步一步的实现面向过程是模型化的,只需要抽象出一个类,这是一个封闭的盒子,在这里拥有数据也拥有解决问题的方法...
2020-05-26 19:59:58
684
转载 Java面试题——集合框架的底层数据结构
在Java中集合框架的底层数据结构List:ArrayList:Object数组vector:Object数组LinkedList:双向循环链表Set:hashSet(无序,唯一):基于hashMap实现,底层采用hashMap实现LinkedHashSet:继承于hashSet,基于hashMao实现TreeSet:红黑树Map:HashMap:JDK1.8之前,采用数组+链表组成的,在JDK1.8后,当链表长度大于阈值(默认为8),且数组大小超过容量时,会将链表转换为红黑树
2020-05-24 16:03:41
296
原创 Java面试题——为什么要有hashCode
为什么要有hashCode我们以“HashSet如何检查重复”为例来说明为什么要有hashCode:当我们把对象加入到hashSet时,HashSet会先计算对象的hashCode值来判断对象加入的位置,同时也会与其他已经加入的对象的hashcode值进行比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。如果发现有相同的额hashcode值得对象时,这时就会调用equals()方法来检查hashcode相等得对象是否真的相同。如果两者相同,hashSet就不会让其加入到操作成功
2020-05-24 15:14:32
1066
原创 Java面试题——重写与重载
文章目录1. 重载(Overload)和重写(Override)的区别2.构造器是否可以被重写1. 重载(Overload)和重写(Override)的区别方法的重载和重写都是实现多态的方式,区别在于重载实现的是编译时的多态性,而重写实现的是运行时的多态性重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同),与方法返回值和修饰符无关,即重载的方法不能根据返回类型进行区分**重写:发生在父子类中,方法名、参数列表必须相同,**返回值小于等于父类,抛出的异常小于等于父类,访
2020-05-24 15:06:15
645
转载 Java面试题——内部类
文章目录1.什么是内部类局部内部类匿名内部类1.什么是内部类在Java中,可以将一个类放在另外一个类的定义内部,这就是内部类,内部类本身就是类的一个属性,与其他属性定义方式一致。内部类有两种类型:局部类和匿名内部类局部内部类局部内部类定义在块内。局部类可以访问其所属类的成员,除此之外,局部类也可以访问局部变量(即在方法体中的变量),但只能访问声明为final的局部变量,局部类不能声明任何的静态成员,因为它们要访问所属块的实例成员匿名内部类匿名内部类没有类名,局部类是类声明,而匿名类是表达式,也
2020-05-23 20:07:52
574
原创 Java面试题——变量
文章目录1.静态变量和实例变量区别2.静态变量与普通变量的区别3.在一个静态方法内调用一个非静态成员为什么是非法的1.静态变量和实例变量区别静态变量:静态变量不属于任何的实例类对象,静态变量是属于类的,所以在内存中只会有一份,在类加载过程中,JVM只为静态分配一次内存空间实例变量:每次创建对象,都会为每个对象分配成员变量内存空间,实例对象是属于实例类对象的,在内存中,创建几次,就会有几份成员变量静态对象实例对象属于谁属于类属于实例类对象在内存中只有一份创建几次在内
2020-05-23 17:41:58
319
原创 java面试题——构造函数
文章目录1. 在Java中定义一个不做事且没有参数的构造方法的作用2.在调用子类的构造方法之前会先调用父类没有参数的构造方法,其目的是3.一个类的构造方法的作用是什么?4.构造方法有哪些特性1. 在Java中定义一个不做事且没有参数的构造方法的作用==Java在执行子类的构造方法前,会先调用父类的构造函数,如果没有用super()来调用父类特定的构造方法,则会调用父类中的无参构造方法。==因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用super()方法来调用父类中特定的构造方法,
2020-05-23 17:27:45
613
原创 Java面试题——值传递和引用传递
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量引用传递一般是对对象型变量而言,传递的是该对象地址的一个副本,并不是原对象本身。所以对引用对象进行操作会同时改变原对象为什么说Java中只有值传递我们会经常有一个误区,认为在Java中传递一个对象引用类型就是引用传递,但实际上是一个值传递在Java中不管是值对象还是引用对象都是值传递,在其他方法里改变引用类型的值肯定也是通过引用改变的,当传递引用对象的是皇后传递的是复制过的对象句柄(引用),注意这个引用是复制过的,也就是说又在
2020-05-22 23:34:19
457
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅