明天要背的
链接:https://liaozhiwei.blog.youkuaiyun.com/article/details/127151781
讲讲MyBatis框架
(1)mybatis是一个持久层框架,它内部封装了jdbc,不需要花费精力去处理加载驱动、创建连接等的过程,
消除了JDBC大量冗余的代码。
(2)mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中
sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。
(3)MyBatis 支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设
置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO映射成数据库中的记录。
(4)提供了很多第三方插件(分页插件 / 逆向工程);
(5)能够与Spring很好的集成;
(6)MyBatis相当灵活,SQL写在XML里,从程序代码中彻底分离,解除sql与程序代码的耦合,便于统一管理,支持编写动态SQL语句。
(7) 提供映射标签,支持对象与数据库的ORM字段关系映射。
(8)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
讲讲SpringBoot的特点
Springboot嵌入的Tomcat 无需部署war文件
基于注解自动配置 Spring
SpringMVC的工作原理:

讲讲线程的创建及实现线程几种方式之间的区别
1:继承Therad类,2:实现Runnable接口 3:实现Callable接口 4:使用线程池
继承Thread类,并重写里面的run方法
class A extends Thread{
public void run(){
for(int i=1;i<=100;i++){
System.out.println("-----------------"+i);
}
}
}
A a = new A();
a.start();
实现Runnable接口,并实现里面的run方法
class B implements Runnable{
public void run(){
for(int i=1;i<=100;i++){
System.out.println("-----------------"+i);
}
}
}
B b = new B();
Thread t = new Thread(b);
t.start();
实现Callable
class A implements Callable<String>{
public String call() throws Exception{
//...
}
}
FutureTask<String> ft = new FutureTask<>(new A());
new Thread(ft).start();
线程池
ExcutorService es = Executors.newFixedThreadPool(10);
es.submit(new Runnable(){//任务});
es.submit(new Runnable(){//任务});
...
es.shutdown();
实现Runnable和实现Callable的区别?
实现Callable接口,任务可以有返回值,Runnable没有。
实现Callable接口,可以指定泛型,Runnable没有。
实现Callable接口,可以在call方法中声明异常,Runnable没有。
Runnable和Thread二者的区别?
实现Runnable接口的方式,更适合处理有共享资源的情况。
实现Runnable接口的方式,避免了单继承的局限性。
@Component 组件,没有明确的角色
@Service 在业务逻辑层使用(service层)
@Repository 在数据访问层使用(dao层)
@Controller 在展现层使用,控制器的声明(C)注入bean的注解,声明该类为SpringMVC中的Controller
@Autowired 由Spring提供,默认根据类型查找
@Resource 由JSR-250提供,默认根据名称查找
@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)
@Configuration 声明当前类为配置类,其中内部组合了@Component注解,表明这个类是一个bean(类上)
@ComponentScan 用于对Component进行扫描,相当于xml中的(类上)
@RequestMapping 用于映射Web请求,包括访问路径和参数(类或方法上)
@ResponseBody 支持将返回值放在response内,而不是一个页面,通常用户返回json数据(返回值旁或方法上)
@RequestBody 允许request的参数在request体中,而不是在直接连接在地址后面。(放在参数前)
@PathVariable 用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。
@RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。
线程的生命周期
新建、就绪、运行、阻塞、死亡。
新建状态(New):当程序使用new关键字创建了一个线程之后,该线程就处于新建状态。
就绪状态(Runnable):调用start()方法后,线程就会处于就绪状态;此时只能说明此线程已经做好了执行的就绪准备,表示可以运行了,但还不是正在运行的线程。
运行状态(Running):当线程获得到JVM中线程调度器的调度时,线程就会处于运行状态,开始执行run()方法的线程执行体。
阻塞状态(Blocked):这是线程仍处于活动状态但当前没有资格运行(因为一些原因,暂时放弃对CPU的使用权,停止执行)时的状态。
死亡状态(Dead):当退出run()方法时,线程就会自然死亡,处于终止或死亡状态,也就结束了生命周期。
面向对象的特征:1抽象性 2继承 3封装 4多态性
多态性的四种体现:1接口和接口的继承 2类和类的继承 3重载 4重写
重载在同一个类里同名形参列表不同,重写在实现类里面。
抽象类(abstract class)和接口(interface)有什么异同?
抽象类:
1.抽象类中可以定义构造器
2.可以有抽象方法和具体方法
3.接口中的成员全都是public的
4.抽象类中可以定义成员变量
5.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
6.抽象类中可以包含静态方法
7.一个类只能继承一个抽象类
接口:
1.接口中不能定义构造器
2.方法全部都是抽象方法
3.抽象类中的成员可以是 private、默认、protected、public
4.接口中定义的成员变量实际上都是常量
5.接口中不能有静态方法
6.一个类可以实现多个接口
相同:
1.不能够实例化
2.可以将抽象类和接口类型作为引用类型
3.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要
被声明为抽象类
和equals的区别?
equals和 最大的区别是一个是方法一个是运算符。
==:如果比较的对象是基本数据类型,则比较的是数值是否相等;如果比较的是引用数据类型,则比较的是对象
的地址值是否相等。
equals():用来比较方法两个对象的内容是否相等。
注意:equals 方法不能用于基本数据类型的变量,如果没有对 equals 方法进行重写,则比较的是引用类型的变
量所指向的对象的地址。
break和continue的区别?
break和continue都是用来控制循环的语句。
break用于完全结束一个循环,跳出循环体执行循环后面的语句。
continue用于跳过本次循环,执行下次循环。
final、finally、finalize的区别?
1)final:用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,被其修饰的类不可继承。
2)finally:异常处理语句结构的一部分,表示总是执行。
3)finalize:Object类的一个方法,在垃圾回收器执行的时候会调用被回收对象的此方法,可以覆盖此方法
提供垃圾收集时的其他资源回收,例如关闭文件等。该方法更像是一个对象生命周期的临终方法,当该方法
被系统调用则代表该对象即将“死亡”,但是需要注意的是,我们主动行为上去调用该方法并不会导致该对
象“死亡”,这是一个被动的方法(其实就是回调方法),不需要我们调用。
String 、StringBuilder 、StringBuffer的区别?
Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们都可以储存和操作字符串,区别
如下。
1)String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。初学者可能会有这样的误解: 如上,字符串str明明是可以改变的呀!其实不然,str仅仅是一个引用对象,它指向一个字符串对象“abc”。第
二行代码的含义是让 str 重新指向了一个新的字符串“bcd”对象,而“abc”对象并没有任何改变,只不过该对象已
经成为一个不可及对象罢了。
2)StringBuffer/StringBuilder 表示的字符串对象可以直接进行修改。
3)StringBuilder是Java5中引入的,它和 StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,
因为它的所有方法都没有被synchronized修饰,因此它的效率理论上也比StringBuffer要高。
GET和POST的区别?
- GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间
以&相连,如:login.action?name=zhagnsan&password=123456。POST把提交的数据则放置在是HTTP包的包
体中。 - GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据。
3.POST的安全性要比GET的安全性高。
http中重定向和请求转发的区别?
本质区别:转发是服务器行为,重定向是客户端行为。
重定向两次请求
Cookie和Session的区别
Cookie 是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个 web 服务器存储 cookie。
Session 是存储在 web 服务器端的一块信息。
1、无论客户端做怎样的设置,session都能够正常工作。当客户端禁用cookie时将无法使用cookie。
2、在存储的数据量方面:session能够存储任意的java对象,cookie只能存储String类型的对象。
Mybatis中#和KaTeX parse error: Expected 'EOF', got '#' at position 6: 的区别? #̲相当于对数据 加上 双引号,相当于直接显示数据
#方式能够很大程度防止sql注入。
.$方式无法防止Sql注入
KaTeX parse error: Expected 'EOF', got '#' at position 19: …般用于传入数据库对象 一般能用#̲的就别用.