个人面试题总结

#线程的基本状态以及状态之间的关系
个人概述:
-----通过实现runnble接口或者继承thend类重写run方法 3创建一个新的线程,通过调用线程的stat方法使其进入就绪状态,通过sleep或者wait()使其进入阻塞状态,通过sleep等待时间过去或者ntfa关键字来唤醒线程使其进入运行状态。单线程时线程运行结束后进入死亡销毁状体,(也可以 在线程内调用destroy()方法强行杀死线程)多线程时运行结束之后可能进入死亡状态,或者重新进入就绪状态。

#什么是线程池?为什么要使用它?
----线程池是用来管理一组工作线程,并其中还包括提供了一个用于放置等待执行人物的任务队列。
好处:通过重复利用已创建的线程,减少在创建和销毁线程上所画的时间以及系统资源的开销
2:提高响应速度。
3:提高线程的可管理性
4:如果不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存
方便管理多线程程序,有效的处理高并发事件。

#java中反射的作用?以及应用场景?
-----反射机制:反射机制时在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性。
反射是在运行期实例化对象,动态化的获取对象的包括属性,方法等信息,极大的提高了应用程序的扩展性,
通过多态提高了程序的扩展性的弊端
反射的应用场景:Tomcat服务器。
逆向编译(反编译) 与注释相结合的框架 例如retrofit
单纯的反射机制应用框架 例如EventBus 2.x
动态生成类框架 例如 Gson
#Hashmap的使用场景,与hashtable的异同,其实现原理是什么?

----两者都实现了Map,Cloneable,java。io。Serializable接口。时先了Map接口意味着都可以使用键值对操作。
实现了Cl意味着可以被克隆
实现了io意味着支持序列化。
从以下几点区分
1;线程是否安全 : hashtable时线程安全的,hashmap不是
2;是否允许null值 :HashMap可以使用null作为键值对,并且null元素会记入size hashtable不允许null值出现,当出现时会抛出异常
3;继承实现方式不同 :HaspMap继承自AbstractMap,这是一个抽象类,直接继承于Objcet类,没有时先任何接口。Hashtable继承自Dictionary类。D的API函数比Map少。而且D一般是通过Enumeration(枚举类)去遍历元素 Map是通过Iterator(迭代器)去遍历元素,由于Hashtable实现了Map,所以它也可以使用迭代器
4;计算hash的方法不同
hashtable是直接用key的hashcode对table数组的长度进行取模
hashmap计算hash对key的hashcode进行了二次hash 以获得更好的散列值,然后对table数组长度取模。
5;使用场景
非并发场景使用HashMap,并发场景使用Hashtable。但是推荐使用 ConcurrentHashMap(锁粒度更低,效率更高)。

Hash提供对key的Set进行遍历,因此它是fail-fast的。但Hashtable提供对key的Enumeration进行遍历,它不支持fail-fast

fail-fast:是java集合中的一种错误检测机制,当多线程对集合进行结构上的改变操作时,有可能会产生fail-fast机制

#hashmap实现原理
通过map的put(key,value)方法来储存元素,再通过get(key)方法来得到value的值,通过has算法来计算hashcode值,根据hashcode值来决定bucket(桶),储存结构就是哈希表。

#sleep和wait的区别?
同步锁的对待不同:sleep()使用后,程序并不会释放线程锁 它会等待一段时间后继续运行,wait()后,程序会放弃当前占用的cpu,释放同步锁,
用法不同:sleep可以用时间指定来唤醒它;如果时间不到但又想使用只能调用intereput()来强行打断。wait()可以用notify直接唤起。wait和notify与notifyall只能在同步控制方法或者同步控制块里使用,而sellp可以在认为地方使用。
类不同:sleep的类属于Thread;wait的类是object
sellp必须捕获异常,而wait,notify和notifyall不需要捕获异常

#什么是java序列化?为什么要序列化?
----序列化:序列化就是把对象存储在某一个地方(硬盘,网络),将对象进行流化
反序列化是把二进制数据反序列化成对象数据
为什么要序列化?
方便于传输,存储
序列化的方式?
1:java Serialization(jdk自带的java序列化实现,性能最差)
2:json(目前有两种实现,一种是采用的阿里的fastjson库 另一种是采用dubbo中自己实现的简单json库)
3:fastjson库
4:Hession(基于HTTP协议传输,使用Hession二进制序列化,对于数据包比较大的情况下比较友好)
5:FST(高性能,序列化速度大概是jdk的4-10倍3,大小是jdk的1/3左右)

#7mysql数据库的优化策略?
—三大方向
1:优化mysql所在服务器内核(此优化一般由运维人员完成)
2:对mysql配置参数进行优化(my.cnf)此优化需要进行压力测试来进行参数调整。
3:对sql语句及表优化
八大优化方案
1:选取最适用的字段属性
2:使用连接(join)来替代子查询
3:使用联合(union)来代替手动创建的林时表
4:事务
5:锁定表
6:使用外键
7:使用索引
8:优化的查询语句

#mysql中sql语句的优化策略?
------1:为查询缓存优化查询
2:explain我们的select查询(可以查询执行的行数)
3:当只要一行数据时使用limit 1;
4:为搜索字段建立索引
5:

#MySql中索引的作用和缺点?
----作用:数据库中的数据是存在磁盘中的,有很多个,没有索引的时和它会一个一个去遍历磁盘来查找你需要的数据。添加索引以用来快速遍历磁盘。
(1通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性,2,可以大大加快数据的检索速度,这也是创建索引的最主要原因,3:可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义,4:在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序时间,5:通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能)

缺点:不是每一个数据库都适用索引,索引只相对于数据库数据越大作用越明显,当数据库很小时使用索引反而会降低效率。添加索引会占用空间。
(1:创建索引和尾狐索引要耗费时间,这种时间随着数据量的增加而增加,2:索引需要占用物理空间,除了数据表数据空间之外,每一个索引还要占一定的物理空间。如果要建立聚簇索引,那么需要的空间就会更大。3:当对表中的数据进行增加,删除和修改的实际,索引也要动态的维护,这样九降低了数据的维护速度)
拓展:
#什么样的字段适合创建索引?
1:在经常需要搜索的列上,可以加快搜索的速度。
2:在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构
3:在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度。
4:在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。
5:在经常要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。
6:在经常使用where子句中的列上面创建,加快条件的判断速度。

#什么样的列不适合创建索引?
1:对于在查询中很少使用或者参考的列不应创建,因为不经常使用所以有根没有时一样的,并不能提高查询速度。反而降低流系统的维护速度。增大了空间需求
2:对于那些只有很少数据值的列也不应该创建,这是因为,由于这些列的取值很少。增加索引并不能明显加快检索速度
3:对于那些定义为text,image和bit数据类型的列不应该增加索引,因为这些列的数据量要么相当大,要么取值很少。
4:当修改性能远远大于检索性能时,不应该创建索引,这是因为,修改性能和检索性能时相互矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。

#创建索引的方法:
1:创建索引 create index<索引的名字> on table_name<列的列表>;
2:修改表 alter table table_name add index [索引的名字](列的列表);
3创建表的时候进行指定索引, create table table_name([…],index[索引的名字](列的列表));

#9:Mysql中什么是事务?事务的应用场景,以及事务的四大特性,分别描述以下?
事务,什么时事务,事务时数据库中执行同一业务多条sql语句的工作单元,可以保证多条sql全部执行成功或全部失败
事务的应用场景?

事务的四大特性?ACID
原子性Atomic:最小不可拆分,保证全部成功或全部失败。
一致性Consistency:一致性, 从一个一致状态到另一个一致状态。
隔离性Isolation:隔离性,多个事务之间互不相干。
持久性Durability:持久性:事务完成之后数据提交到数据库中持久生效

sql中查询索引什么情况下失效?
1:如果条件中有 or ,即使其中有条件带索引也不会使用,如果想使用or,又想让索引生效,只能将or条件中的每个列都加上索引。
2:对于多列索引,不是使用的一部分,则不会使用索引
3:like查询是以%开头的
4:如果列类型是字符串,那一定要在条件中将数据使用因好引用起来,否则将不使用索引
5:如果mysql估计使用全表扫描要比使用全表扫描要比使用索引快,则不使用索引。
(查看索引的使用情况: show status like’Handler_read’ handler_read_key这个值越高越好,越高说明使用查询到的次数 handler_read_rnd_next 这个值越高,说明查询低效)

#什么是servlet?
是sun公司制定的一种用来扩展web服务器功能的组建规范。

#Servlet核心?

#mysql数据库中事务的隔离级别?
从高到低:
Serializable(可串行化)可避免脏读、不可重复读、幻读情况的发生(为了避免幻读,不可重复读、脏读、丢失修改等产生,将并发事务的事务调整策略设置为可串行化调度,这能保证该事务调度策略的运行结果同某一种串行调度结果一致,但是这会极大的降低并发度,同时这也是mysql的Innodb提供的最高的事务隔离级别)

Repeatable read(可重复读)可避免脏读、不可重复读情况的发生(保证了某个事务在写某个数据项的时候,其他事务不能读写该数据项,且在读某个数据项时,其他事务只能读该数据项)

Read committed(读以提交)可避免脏读情况发生(保证了某个事务在写数据项的时候,其他事务是不能读写该数据项的)

read uncommitted (读未提交)最低级别、以上情况均无法保证(由于其不能保证读脏数据,该隔离级别仅仅只能做查询)

#有一个servlet对外提供服务,10个请求创建了几个servlet?为什么
一个servlet同一时刻只有一个实例。当多个请求发送到同一个servlet。所有用户共用一个servletContext。
扩展:一个servlet其实是可以创建一个或者多个实例对象的。一个servlet可以通过指定不同的《url-pattern》和相同的《servlet-class》来产生不止一个servlet对象。

#13:请简单介绍下JDBC?JDBC链接数据库的基本步骤

JDBC是一种用于执行sql语句的java API,可以为多种关系数据库提供统一的访问。它由一组用java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,jdbc实现了所有这些面向标准的目标并且具有简单,严格类型定义且高性能实现的接口。
链接数据库的基本步骤
1:通过java.lang.class类的静态方法forname(String className)加载jdbc驱动程序
2:凭借jdbc需要链接的url
3:创建数据库的链接 需要向java.sql.DriverManager请求并获得Connection对象再使用DriverManager的getConnectin(String url,String username,String password)方法传入指定的链接的数据库的路径/数据库的用户名和密码来获得
4:创建一个Statement执行对象
5:执行sql语句
6:处理执行完sql之后的结果
7:关闭使用的jdbc对象

#请写出三种单例模式的代码?什么是单例模式?
私人:单例模式是指在程序中类的实例对象只有一份,只提供一个对外的全局访问点。当多个请求同时访问时访问的都是同一个实例的对象。
具体的体现有任务管理器,垃圾回收站等等。
官方:是一种常用的软件设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。它时设计模式中最简单的形式之一,这一模式的目的是使得类的一个对象称为系统中的唯一实例。

拓展:
优点:
1:实例控制:单例模式会阻止其他对象实例化自己的单例对象的副本。从而确保所有对象都访问唯一实例。
2:灵活性:因为类控制了实例化过程,所以类可以灵活更改实例过程。
缺点:
1:开销:虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例。仍然需要一些内存开销。可以通过静态初始化解决
2:可能的开发混肴:使用单例对象时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码。因此应用程序开发员可能会意外发现自己无法直接实例化此类。
3:对象生存期:不能解决删除单个对象的问题。在提供内存管理的语言中,只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。

恶汉单利模式代码:
//恶汉式为线程安全的,因为它在类加载期便创建了类的实例,所以全局只有这一份实例。
class MySingleTon{
//定义一个static类型的变量,只初始化一次
private static MySingleTonsingleTon singleTon = new MySingleTon();
private MySingleTon(){//私有化构造函数
System.out.println(“构造函数”);
}
public static MySingleTon getInstance(){//提供一个全局的访问点
return singleTon;
}
}
懒汉:
class SingleTon{
private static SingleTon2 singleTon = null;
private SingleTon(){
System.out.println(“构造函数”);
}
private static SingleTongetInstance(){
if(singleTonnull){//当sing leTon为空时,new一个对象
singleTon
new SingleTon();
}
return singleTon;
}
懒汉式在多线程时不能保证线程安全,因为当一个对象还没有完成对象创建时便又进入了了另一个线程,等于new了两次对象,进行以下优化

class SingleTon{
private static Object lock = new Object()?/定义一个父类为Object的lock变量。
private static SingleTon2 singleTon = null;
private SingleTon(){
System.out.println(“构造函数”);
}
//可重入函数,即线程安全的函数
private static SingleTongetInstance(){

//临界区代码段
if(singleTonnull){//双重检验
synchronized(lock){
if(singleTon
null){
singleTon==new SingleTon();
}
}
}
return singleTon;
}

#什么是多线程?多线程的应用,多线程下的生产者消费模式?

1:多线程指在一个程序中启动了两个或两个以上的线程。
2:常见的浏览器/web服务、web处理请求、各种专用服务器(如游戏服务器)2,servlet多线程。3,FTP下载‘多线程操作文件。
数据库甬道多线程。5分布式计算。6:tomcat。7:后台任务。8:自动作业处理9:异步处理:如发微博,记录日志10:页面异步处理:(比如大批量数据的核对工作)
11:数据库的数据分析,
12:多步骤的任务处理
生产者/消费模式
在实际的软件开发中,我们将产生数据的模块称为生产者。处理数据的模块为消费者。但仅有这两者还不够成为一个生产者-消费者模式
,还要有一个缓冲区(一段内存区域)作为中介,生产者产生的数据放入缓冲区,消费者从缓冲区读取数据并处理。
具体关系可以表示为
生产者>>>>>缓冲区>>>>消费者

#servlet的四大域和九大隐式对象?
#####四大域:
request:自己用,一次性,用完销毁,
session:自己用,多次性,等一会用
page:当前页面
servletcontext;自己用,别人用公共
#####九大隐式对象:
request:
response:
applocation:
config:
page:
pagecontext:通过get方法将其他八大隐式对象封装在其中
out:jspWrtier向外输出数据的。可以通过page指令的buffer属性设置缓存大小
exception:

Servlet的生命周期

(1)什么是Servlet的生命周期?

Servlet容器如何创建Servlet对象、如何对其进行初始化、如何调用其方法
来处理请求,以及如何销毁该对象的整个过程。
也就是说,容器是如何管理Servlet的。

(2)分成哪几个阶段?

1)实例化

a.什么是实例化?

容器调用Servlet的构造器,创建Servlet实例(对象)。

b.什么时候实例化?

情况1: 容器收到请求之后创建。
情况2: 容器启动之后,立即创建(需要配置)。

1
注:
容器只会创建一个实例!

2)初始化

a.什么是初始化?

容器在创建servlet实例之后,会立即调用该实例的init方法。
注:
init方法只会执行一次!

b.GenericServlet已经提供了init方法的简单的实现。

将容器传递过来的ServletConfig对象保存下来了,并且提供了一个
方法(getServletConfig)来获得该对象。

c.初始化参数

step1.配置初始化参数

company
IBM

step2.读取
String company =
config.getInitParameter(
“company”);

3)就绪(调用)

a.什么是就绪?

容器收到请求之后,会调用servlet的service方法来处理。

b.HttpServlet已经提供了service方法的实现。

该方法依据请求类型调用对应的doXXX方法。
比如,get请求会调用doGet方法,post请求会调用doPost方法。
doXXX方法只是抛出了一个异常。
作为开发人员,只需要override doXXX方法即可。
注:
也可以直接override HttpServlet的service方法。

4)销毁

a.什么是销毁?

容器在删除servlet实例之前,会调用该实例的destroy方法。
注:
该方法只会执行一次!

b.GenericServlet已经提供了destroy方法的实现。

可以override GenericServlet的destroy方法,来实现
自己的销毁处理逻辑。
注:
在init方法里如果我们获得了一些资源,比如数据库
Connection等,就需要在destroy方法当中释放这些
资源。

(3)相关的接口与类(了解)

a.Servlet接口

init(ServletConfig config);
service(ServletRequest req,ServletResponse res);
destroy();

b.GenericServlet抽象类

实现了Servlet接口中的部分方法(init,destroy)

c.HttpServlet抽象类

继承了GenericServlet,实现了service方法。
#常见的异常有哪些?
#####(1)java.lang.NullPointerException 空指针异常,调用了未经初始化的对象或者是不存在的对象,经常出现在创建图片,调用数组这些操作中
#####(2:)lava.lang.ClassNotFoundException 指定的类不存在。通常是类名或者路径错误
#####(3):java.lang.ArrayindexOutOfBoundsException 数组下标越界
#####(4):java.lang.NOSuchMethodError 方法不存在错误。当应用视图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该异常
#####(5):java.lang.IndexOutOfBoundsException 索引越界异常,当试图将一个String转换为指定的数据类型,而该字符串却不满足数字类型要求的格式时,抛出该异常。
#####(6):java.sql.SQLException SQL语句输出异常
#####(7):java.io.IOException 输入输出异常
#####(8):java.lang.lllegalArgumentException 反复发参数错误
#####(9):java.lang.lllegalAccessException 无访问权异常
#####(10):java.lang.NumberFormatException 数字格式异常。

#JavaScript闭包?
#####什么是闭包?
闭包是由函数引用其周边状态(词法环境)绑在一起形成的(封装)组合结构。在JavaScript中,闭包在每个函数被创建时形成。这是基本原理。它是用来实现数据私有的原生机制。当你使用闭包来实现数据私有时,被封装的变量只能在闭包容器函数作用域中使用。你无法绕过对象被授权的方法,在外部访问这些数据。实际上闭包让我们能够从一个函数内部访问其外部函数的作用域。
闭包使用的例子?
闭包的用途之一是实现对象的私有数据。数据私有是让我们能够面向接口编程而不是面向实现编程的基础。

#什么是会话计数?谈谈你对session和cookie的理解?
用户打开一个浏览器访问页面,访问网站的很多页面,访问完成后将浏览器关闭的过程称为是以此会话。会话技术可以保存用户在同一个会话中实现数据的共享
###常见的会话技术?
cookie:将数据保存到客户端浏览器。
session:将数据保存到服务端。
###为什么使用会话技术?
私有的数据,购物信息数据保存在会话技术中

#什么是ThreadLocal?
#####ThredLocal不是一个线程,而是一个线程的本地化对象,当工作于多线程的对象用ThredLocal维护变量(即共享资源)时,ThredLocal会为每个使用该变量的线程创建一个变量副本,每个线程操作的时ThredLocal提供的变量副本,不会影响到其他线程,从而解决了共享资源在并发访问时带来的线程安全问题。

#####ThredLocal类有一个map属性,map里面key存放当前线程对象,value存放线程局部变量副本,用线程对象做key来做区分,这样九嗯嗯为每一个线程都提供一份独立的线程局部变量副本。
#如何避免死锁?
###什么是死锁?
#####是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,他们都将无法推进下去。
###死锁的必要条件。
#####1.互斥条件,指进程对所分配到的资源进行排他性使用,即在一段时间内某资源只由一个进程使用,如果次是还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放
#####2.请求和保持条件:一个进程因请求资源而阻塞时,对以获得的资源保持不放。
#####3:不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺
#####4:环路等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
###怎么避免死锁
#####1:预防死锁
#####2:避免死锁
#####3:检测死锁
#####4:接触死锁

#死锁与活锁的区别?

#浅谈GC的工作原理。如何统治GC回收?

#JVM如何进行调优?策略是什么?

#Spring框架中IOC的实现原理。和应用优势?
####IOC是什么?控制反转
实现原理:工厂模式加反射机制。
应用优势:Spring对面向切面片成提供了强有力的支持,通过它让我们将业务逻辑从应用服务中分离出来,实现了高内聚开发(所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一职责制),应用对象只关注业务逻辑,不再负责其它系统问题(如日志,事务等)
1:使用spring的ioc容器,将对象之间的依赖关系交给spring,降低组建之间的耦合,让我们更专注于应用逻辑。
2:可以提供众多服务,事务管理,ws等。
3:aop的很好支持,方便面向切面编程。
4:对主流的光加提供了很好的集成支持,如hibernate,Struts2,JPA等
5:spring DI机制降低了业务对象替换的复杂性
6:Spring属于低侵入,代码污染及低
7:Spring的高度可开发性,并不强制以来于Spring,开发者可以自有选择Spring部分或全部。
缺点:
1:jsp中要羞恶很多代码,控制器过于灵活,缺少一个公用控制器,
2:spring不支持分布式,这也是EJB仍然再用的原因之一。

#Spring框架中的线程安全问题该如何处理?

#spring创建线程池的方式?实现方式有几种
####有四种:
1:单线程线程池
2:多线程式并可以进行限制线程数量
3:
4:

http请求方式?restful
1:get
2:post
3:delete
4:put

#SpringMVC的应用流程,及应用优势?

###应用流程:
####1):用户发送请求至前端控制器DispatcherServlet。
####2):DispatcherServlet收到请求调用HandlerMapping处理器映射器
####3):处理器映射器找到具体的处理器生成处理器对象及处理器拦截器一并返回给DispatcherServlet。
####4):控制器再通知处理器适配器去调用具体的controller处理器
####5):Controller执行完成后返回ModelAndView。
####6):处理器将执行结果返回给控制器之后,控制器再将视图传给视图解析器解析完成后返回一个具体类型视图。
####7):控制器收到返回的具体视图类型后将模型数据填充至视图中。
####8):返回给用户
#Mybatis框架中#和$符号的区别?
#符号相当于对数据加上双引号。它会将传入的数据当成一个字符串,会对自动传入的数据加一个双引号。
$符号传入的数据直接显示生成在sql中。

#号方式能很大程度的防止sql注入
$方式无法防止sql注入

KaTeX parse error: Expected 'EOF', got '#' at position 25: …据库对象,比如表名。 一般能用#̲的时候就不用
Mybatis排序时使用order by动态参数时需要注意的是用$而不是#

#Mybatis框架如何处理sql注入问题?
因为sql注入只能对编译过程起作用,所以我们在编写sql语句添加条件的时候能用#就用#号符,而对于动态数据不得不使用$符的时候则需要手动做好过滤工作。
#Mybatis框架中缓存lru算法了解吗?简单介绍下。
lru(缓存淘汰算法)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也很高”。
最常见的实现是使用一个链表保存缓存数据。根据访问活跃度来将缓存,最早访问的数据在最低下,最近你访问的在上面。当链表数据缓存到一定数量时最底下的数据将被淘汰。

#Mybatis框架中动态sql解决了什么问题?应用优势是什么?
mabatais中提供了一些动态的sql标签,比如if动态的去判断字段如果没有值就不添加到where语句中,常用的sql标签有if,where,set,trim,,sql片段。foreach标签等等。重点是 if where标签的结合使用。

使用动态sql标签可以让程序员更快的进行mybatis的开发。动态sql还可以提高sql的可复用性。
#Springboot框架的应用优势是什么?
springboot是基于spring4的条件注册的一套快速开发整合包,实现了自动装配,降低了项目搭建的复杂度。
其优势有:1:可快速构建独立的spring应用程序
2:内嵌servlet容器,无需单独安装容器即可独立运行项目。
3:对主流开发框架的无配置集成。
4:提供开箱即用的spring插件,简化了maven,gradle的配置。
5:自动配置spring,极大的提高了开发/部署的效率。
6:无需任何xml配置。
#Springboot框架的运行机制是什么?
容器启动,java启动main方法,这个方法是spring自动生成的,无需做任何修改
#你用过哪些文件上传的框架?其区别是什么?
Spring框架中的MultipartFile类。上传的文件大小有限制。如果我们上传了一个超出范围的文件之后会导致之后上传正常范围的文件也失败。需要手动把bean设置为非单态模式。
brophp框架中的FileUpload类。可以通过set方法对上传文件保存路径进行自定义
Strus2;
hibernate
什么是Nginx?如何搭建Nginx?
Nginx是一款轻量级高性能的HTTP和反向代理服务器.从头到尾都是用C语言编写。其特点是占有内存少,并发能力强,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值