diandian的gravatar头像
diandian 2017-06-22 14:11:45
每天java面试一道题

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工作所需要的类库。

每天java面试一道题

5.static关键字的含义?Java中是否可以覆盖一个static修饰的方法?是否可以在static环境中访问非static变量  -2017.6.28

static关键字是成员变量或者成员方法,可以在其所在类的实例变量没有的情况下直接访问;

java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,static方法是编译时静态绑定的

static变量在所有实例中值都是一样的,当类被java虚拟机载入时,会对static变量进行初始化。如果代码尝试在static环境下访问非static变量,即在不用实例时访问非static变量,编译会报错,因为变量没有被创建,没有和任何实例关联上。

6.图解TCP的三次握手与四次挥手   -2017.07.12

每天java面试一道题

7.线程和进程的区别。   -2017.7.14

进程是系统进行资源调度和分配的独立单位,线程是进程的一个实体,是比进程更小的能独立运行的基本单位。可以说一个程序至少有一个进程,一个进程至少有一个线程。

进程和线程的主要区别在于它们是不同的操作系统资源管理方式。进程拥有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程有自己的堆栈和局部变量,但没有单独的地址空间,必须依存在应用程序中,可与同属一个进程的其他线程共享进程所拥有的全部资源,从而提高程序的运行效率。一个线程死掉就等于整个进程死掉,所以多线程的程序比单线程的程序健壮。但对于一些要求同时进行又要共享某些变量的并发操作,只能用线程,不能用进程。

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

8.Thread类中start()和run()方法有什么不同? - 2017.7.17

start()方法用来启动新创建的线程,真正实现了多线程。start()无需等待run方法体代码执行完毕,可以直接继续执行以下的代码,通过调用Thread类的start()来启动一个线程,此线程会处于就绪状态,并没有运行。然后通过此Thread类的run()来完成其操作,run()运行结束,此线程终止。

run()方法只是在原有的线程中调用,没有新的线程启动,作为普通方法调用。


打赏

已有1人打赏

遇见,的gravatar头像
最近浏览
遇见,  LV36 2017年11月25日
husj1213  LV11 2017年6月23日
diandian  LV8 2017年6月23日
最代码官方  LV167 2017年6月23日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友