Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。
1、SpringMVC的原理以及返回数据如何渲染到jsp/html上?
Spring MVC的核心就是 DispatcherServlet , 一个请求经过 DispatcherServlet ,转发给HandlerMapping ,然后经反射,对应 Controller及其里面方法的@RequestMapping地址,最后经ModelAndView和ViewResoler返回给对应视图 。
2、对JVM的理解?
与平台的无关性
使用Java虚拟机是实现这一特点的关键。Java编译器只要面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。
**JVM执行程序的过程 :
I.加载。class文件 ,
II.管理并分配内存 ,
III.执行垃圾收集
4、一个类文件中能否有多个类?
可以。但是只能有一个public类,而且public修饰的类名与文件名必须一致
5、如何修改tomcat的端口号?
在tomcat根目录的conf文件夹内打开server.xml文件,修改Connector节点的port属性
6、什么是同步任务?什么是异步任务?
同步任务:当前任务没有完成之前,其他任务不能够执行
异步任务:当前任务没有完成,任然可以可以发送一个新的请求
7、什么是线程异步?什么是线程同步?
线程同步:同时只有一条线程执行一个任务
线程异步:同时有多条线程可以执行执行任务
8、Int与integer的区别
Integer是int的包装类型。
Int的默认值是0,integer的默认值是null
二、关于JSP
1、Jsp由哪些内容组成?
指令:<%@ %>
脚本:<% %>
表达式:<%=%>
声明:<%! %>
注释:<% -- %>
动作:
静态内容:html内容
2、JS的一些基本操作
//js实现页面刷新:
history.go(0)
location.reload()
//前进
history.go(1)
history.forward
//后退
History.go(-1)
History.back
//Js跳转到到一个指定页面
Location.href=url
History.go(url)
//使用js获取一个表单元素
Document.getElementById()
Document.getElementsByName()
Document.getElementsByTagName()
//如何阻止表单提交
Onsubmit=“return false”
3、Get请求与post有什么区别?
Get请求发送的文本内容大小有限制,而post请求没有限制
Get请求的请求参数会出现在url路径中,而发送post请求时,参数不会显示在url路径中
Get安全系数较低,但是效率较高。Post安全系数较高,但效率较低
Get请求只能发送字符串,post请求可以提交二进制数据
三、
1、Xml的java解析有几种方式?
Java API解析xml主要有两种方式;
Dom解析:一次性加载整个文档,生成树形结构。在生成的文档对象中,可以对节点进行增删改查的操作。当xml文本当较小的时候,可以使用dom解析。
Document Object Model,简称DOM把这个 HTML 看做一个DOM树,它本身和里面的所有东西比如
这些标签都看做一个对象,每个对象都叫做一个节点(node),节点可以理解为 DOM 中所有 Object 的父类。Sax解析:基于事件的解析方式,解析速度比较快,解析的文档大小理论上是没有限制的。
2、聚集索引和非聚集索引
聚集索引:聚集索引用于决定数据表中的物理存储顺序,一张表最多有一个聚集索引。聚集索引的字段值尽量不能修改,通常主键就是聚集索引。
非聚集索引:非聚集索引的关键字是index,不会决定表的物理存储顺序。
3、.什么是事务?
事务:单个逻辑单元执行的一系列操作,要么全部执行,要么全部不执行。
事务的四个特性:
原子性:事务中各元素不可分割,全部执行成功或者撤销所有的操作
一致性:事务完成后数据保持一致的状
隔离性:事务是相对独立的,对某数据进行修改时,其他事务不变
持久性:事务完成后对系统的影响是永久性的。
4、Java中如何实现多线程
继承Thread类
实现Runnable接口
5、线程池
5.1 什么是线程池
应用程序中初始化一个线程集合,然后在需要执行新的任务时重用线程池中的线程,而不是创建一个新的线程。线程池中的每个线程都有被分配一个任务,一旦任务完成,线程就回到线程池中,等待下一次的任务分配。
5.2 为什么使用线程池
创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率
线程并发数量过多,抢占系统资源从而导致阻塞
5.3 ThreadPoolExecutor类
int corePoolSize => 该线程池中核心线程数最大值
当一个任务被添加进线程池时:
线程数量未达到corePoolSize,则新建一个线程(核心线程)执行任务
线程数量达到了corePoolSize,则将任务移入队列等待
队列已满,新建线程(非核心线程)执行任务
队列已满,总线程数又达到了maximumPoolSize,抛出异常
6、线程的生命周期?
新建
就绪
运行
死亡
阻塞
class RunnableDemo implements Runnable {
private Thread t;
private String threadName;
RunnableDemo( String name) {
threadName = name;
System.out.println("Creating " + threadName );
}
public void run() {
System.out.println("Running " + threadName );
try {
f……
// 让线程睡眠一会
Thread.sleep(50);
}
}catch (InterruptedException e) {
}
}
public void start () {
System.out.println("Starting " + threadName );
if (t == null) {
t = new Thread (this, threadName);
t.start ();
}
}
}
7、synchronized ['sɪŋkrənaɪzd]
控制线程同步,
无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;
如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是该类所有的对象。
四、Spring
1、如何给Spring 容器提供配置元数据?
XML配置文件。
基于注解的配置。
基于java的配置。
2、bean的作用域。
singleton : bean在每个Spring ioc 容器中只有一个实例。
prototype:一个bean的定义可以有多个实例。
request:每次http请求都会创建一个bean
session:在一个HTTP Session中,一个bean定义对应一个实例。
global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。
3、Spring框架中的单例bean是线程安全的吗?
不,Spring框架中的单例bean不是线程安全的。
4、Spring bean 的生命周期
5、在Spring框架中如何更有效地使用JDBC?
这个模板叫JdbcTemplate
6、使用Spring通过什么方式访问Hibernate?
7、@RequestMapping 注解
该注解是用来映射一个URL到一个类或一个特定的方处理法上。
8、@RestController
@RestController注解相当于@ResponseBody + @Controller合在一起的作用
只是使用@RestController注解Controller,返回的内容就是Return 里的内容。
9、WebSorket
目的是浏览器与服务端建立全双工的通信方式
10、
View 传送指令到 Controller
Controller 完成业务逻辑后,要求 Model 改变状态
Model 将新的数据发送到 View,用户得到反馈
- 各部分之间的通信,都是双向的。
- View 与 Model 不发生联系,都通过 Presenter 传递。
- View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。
唯一的区别是,它采用双向绑定(data-binding): View的变动,自动反映在 ViewModel,反之亦然。