1.什么是MVC?-2017.6.22
MVC是web项目的一种架构模式,分为Model,View,Controller。完整流程为:用户发送请求通过http协议到达前端控制器,前端控制器控制请求分发到对应的控制器,控制器处理业务逻辑并生成业务数据,将业务数据返回给前端控制器,前端控制器将接收到的业务数据分发给业务视图,由业务视图呈现用户页面,再将用户页面返还给前端控制器,最终返回给浏览器端,呈现给用户。这里的前端控制器作用为分发调度。
综上,Controller【控制业务数据抽取】,View【控制页面的呈现】,Model【作为传输数据的对象模型】,可见MVC的本质为业务数据的抽取和业务数据的呈现相分离,降低耦合性,开发更简便化。
2.JSP如何禁用EL表达式?或者JSP如何解决EL表达式不能正常解析问题?-2017.6.23
首先有个前提,JSP能使用EL表达式是在web-app2.4版本之后才支持的。
所以禁用EL表达式的方式:
<1>在web.xml中定义web-app为2.3即可,代码如下:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<2>在jsp页面上通过引入page属性来设定:<%@ page isELIgnored="true" %>
<3>在web.xml中配置
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
3.访问修饰符public,private,protected以及不写的区别? -2017.6.26
public 当前类 √ 同包 √ 子类 √ 其他包 √
protected 当前类 √ 同包 √ 子类 √ 其他包 ×
不写或默认 当前类 √ 同包 √ 子类 × 其他包 ×
private 当前类 √ 同包 × 子类 × 其他包 ×
private只允许类内部的方法和类的创建者使用,protected与private的区别是继承类可以查看,默认的包权限修饰符则是同包下可以查看。
4.JRE和JDK的区别是什么? -2017.6.27
JRE(java runtime environment),是JAVA程序的运行环境。编写的java程序经过javac编译后形成字符行文件,但此文件无法被计算机理解,此文件由jvm(java virtual machine)java虚拟机解释形成机器语言给计算机,由此来正常运行。jvm在jre中,所以说java程序的运行由jre担当。
JDK(java develop kit),java开发工具包,包含了java的完整开发工具包,包含java的运行环境,java工具和基础类库。提供java开发者开发、编译、执行java应用程序。
JDK包含JRE,jdk安装目录下有jre目录,bin和lib,bin可以理解为jvm,lib则是jvm工作所需要的类库。
5.static关键字的含义?Java中是否可以覆盖一个static修饰的方法?是否可以在static环境中访问非static变量 -2017.6.28
static关键字是成员变量或者成员方法,可以在其所在类的实例变量没有的情况下直接访问;
java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,static方法是编译时静态绑定的;
static变量在所有实例中值都是一样的,当类被java虚拟机载入时,会对static变量进行初始化。如果代码尝试在static环境下访问非static变量,即在不用实例时访问非static变量,编译会报错,因为变量没有被创建,没有和任何实例关联上。
6.图解TCP的三次握手与四次挥手 -2017.07.12
7.线程和进程的区别。 -2017.7.14
进程是系统进行资源调度和分配的独立单位,线程是进程的一个实体,是比进程更小的能独立运行的基本单位。可以说一个程序至少有一个进程,一个进程至少有一个线程。
进程和线程的主要区别在于它们是不同的操作系统资源管理方式。进程拥有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程有自己的堆栈和局部变量,但没有单独的地址空间,必须依存在应用程序中,可与同属一个进程的其他线程共享进程所拥有的全部资源,从而提高程序的运行效率。一个线程死掉就等于整个进程死掉,所以多线程的程序比单线程的程序健壮。但对于一些要求同时进行又要共享某些变量的并发操作,只能用线程,不能用进程。
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
8.Thread类中start()和run()方法有什么不同? - 2017.7.17
start()方法用来启动新创建的线程,真正实现了多线程。start()无需等待run方法体代码执行完毕,可以直接继续执行以下的代码,通过调用Thread类的start()来启动一个线程,此线程会处于就绪状态,并没有运行。然后通过此Thread类的run()来完成其操作,run()运行结束,此线程终止。
run()方法只是在原有的线程中调用,没有新的线程启动,作为普通方法调用。