Java学习笔记——测试——JavaWeb笔试题

1- Servlet API中forware()和redirect()的区别? 
答: 
a、浏览器显示 
     重定向会改变URL地址,请求转发不会改变URL地址。 
b、资源共享 
     重定向不可以资源共享,请求转发可以。 
c、功能 
    重定向可以用URL绝对路径访问其他Web服务器的资源,而请求转发只能在一个Web
应用程序内进行资源转发,即服务器内部的一种操作。 
d、效率 
    重定向效率低,相当于再一次请求;请求转发效率相对较高,跳转仅发生在服务器端。 


2- request.getParameter()和request.getAttribute()的区别? 
答: 
a、request.getParameter()获取的类型是String; 
    request.getAttribute()获取的类型是Object 
b、request.getPrameter()获取的是POST/GET传递的参数值和URL中的参数; 
     request.getAttribute()获取的是对象容器中的数据值/对象 
c、request.setAttribute()和request.getAttribute()可以发送、接收对象; 
    request.getParamter()只能接收字符串,官方不开放request.setParamter()(也就是没有这个方法) 
    setAttribute()和getAttribute()的传参原理: 
    setAttribute()是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另外一个页面时,应用服务器会把这块内存拷贝到另一个页面所对应的那块内存中。这个就可以通过getAttribute()获取到相应的参数值或者对象。

 
3- JSP常用指令有哪些? 
答:page、include、taglib 
a、page指令:定义页面的一些属性,常用属性: 
     contentType="text/html;charset=utf-8";    向浏览器端输出数据的编码 
     pageEncoding="utf-8";                             JSP编译成java文件时所用的编码 
     session="true"                                          是否自动创建session 
b、include指令:引入一个静态的JSP页面 
c、taglib指令:引入一个标签库 


4- JSP中动态include和静态include的区别? 
答 : a、静态include:语法:<%@ include file="文件名" %>,相当于复制,编辑时将对应的文件包含进来,当内容变化时,不会再一次对其编译,不易维护。 
        b、动态include:语法:<jsp:include page="文件名">,能够自动检查被包含文件,当客户端对JSP文件进行请求时,会重新将对应的文件包含进来,进行实时的更新。 


5- 详细描述MVC。 
答:基于java的web应用系统采用MVC设计模型,即用Model(模型)、View(视图)和Controller(控制)分离设计,这是目前web应用服务系统的主流设置方向。 
      Model:处理业务逻辑的模块。 
      View:负责页面显示,显示Model的处理结果给用户,主要实现数据到页面的转换过程。 
      Controller:负责每个请求的分发,把Form数据传递给Model进行处理,处理完成后,把处理结果返回给相应的View显示给用户。 
 
6- 我们在web应用开发过程中经常遇到输出某种编码的字符,如一个字符串iso-8859-1编码怎么转UTF-8编码? 

public String Translate(String str) 
{ 
   String s=""; 
   try{ 
         s=new String(str.getBytes("iso-8859-1"),"UTF-8"); 
         s=str.trim(); 
   }catch(Exception e){ 
        System.err.println(e.getMessage()); 
    }   return s; 
} 


7- javascript常用的方面? 
答:数据校验、页面特殊效果等。 


8- cookie和session的作用、区别、应用范围。 
答:a、cookie数据保存在客户端,session数据保存在服务端。 
       b、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,相当重要的数据,应该使用session保存到服务端。 
       c、session会在一定时间内保持在服务器上,但是会占用内存资源,当访问的用户过多,会加重服务器的负载,考虑到减轻服务器的压力,可以将不重要的数据放在cookie中持久的保存。 
       d、单个cookie保存的数据不能超过4k,很多浏览器都限制站点最多保存20个cookie。
 
9- JSP如何处理运行时异常(run-time)exception? 
答:可是使用页面的errorPaga属性捕捉没有处理的运行时异常,然后自动转向到一个错误处理页面,代码如下: 
<%@page errorPage="错误页面URL"%> 
如果在页面请求时出现运行时异常时,以上代码会将代码转向到错误页面,在错误页面里面,可以通过以下代码定义这个页面是错误处理页面: 
<%@page isErrorPage="true"%> 
这样描述错误信息的Throwable对象就可以在错误页面里面访问到。 


10- 在JSP页面中如何删除一个cookie? 
答: 

<% 
     Cookie cookie=new Cookie("cookie名","cookie值"); 
     cookie.setMaxAge(0); 
     cookie.setPath("/"); 
     response.addCookie(cookie);

%> 


11- Tomcat根目录下目录含义? 
答: 
a、config:配置文件存放路径 
b、webapps:项目部署的目录 
c、bin Tomcat运行需要的脚本与jar的目录 
d、lib:运行项目时所需要的jar的目录 
e、work:部署项目的缓存目录 
f、temp:临时文件的存放目录 
g、logs:记录日志的目录 


12- 乱码如何解决? 
答:

     a、JSP页面乱码 
             <%@page contentType="text/html;charset=utf-8" %> 
     b、表单提交时出现乱码 
           request.setCharacterEncoding("utf-8"); 
     c、数据库出现乱码 
           jdbc:mysql://localhost:3306:/user?useSSL=false&useUnicode=true&characterEncoding=utf-8; 
 
13- 单例模式中的懒汉模式和饿汉模式是什么?代码分别怎么实现?区别又是什么? 
1.懒汉模式:顾名思义,他是一个懒汉,他不愿意动弹。什么时候需要吃饭了,他就什么时候开始想办法
搞点食物。 
即懒汉式一开始不会实例化,什么时候用就什么时候new,才进行实例化。 
2.饿汉模式:顾名思义,他是一个饿汉,他很勤快就怕自己饿着。他总是先把食物准备好,什么时候需要
吃了,他随时拿来吃,不需要临时去搞食物。 
即饿汉式在一开始类加载的时候就已经实例化,并且创建单例对象,以后只管用即可。 
懒汉模式代码: 

public class Singleton { 
 //默认不会实例化,什么时候用就什么时候new 
    private static Singleton instance = null; 
    private Singleton(){ 
 
    } 
    public static synchronized Singleton getInstance(){ 
        if(instance == null){ 
   //什么时候用就什么时候new 
            instance = new Singleton(); 
        } 
        return instance; 
    } 
} 

饿汉模式代码: 

public class Singleton { 
 //一开始类加载的时候就实例化,创建单实例对象 
    private static Singleton instance = new Singleton(); 
    private Singleton(){ 
 
    } 
    public static Singleton getInstance(){ 
        return instance; 
    } 
} 

懒汉式和饿汉式的安全和性能区别: 
(1) 线程安全:饿汉式在线程还没出现之前就已经实例化了,所以饿汉式一定是线程安全的。懒汉式加
载是在使用时才会去new 实例的,那么你去new的时候是一个动态的过程,是放到方法中实现的,比如:    
public static synchronized Singleton getInstance(){ 
          if(instance == null){ 
     //什么时候用就什么时候new 
              instance = new Singleton(); 
          } 
如果这个时候有多个线程访问这个实例,这个时候实例还不存在,还在new,就会进入到方法中,有多少
线程就会new出多少个实例。一个方法只能return一个实例,那最终return出哪个呢?是不是会覆盖
很多new的实例?这种情况当然也可以解决,那就是加同步锁,避免这种情况发生 。 
(2)执行效率:饿汉式没有加任何的锁,因此执行效率比较高。懒汉式一般使用都会加同步锁,效率比饿
汉式差。 
(3)内存使用:饿汉式在一开始类加载的时候就实例化,无论使用与否,都会实例化,所以会占据空间,
浪费内存。懒汉式什么时候用就什么时候实例化,不浪费内存。 
 
14- 将字符串  2008-10-19 10:11:30.345   转化为   2008年10月19日 10时11分30秒345毫秒怎么做? 

public void test () {
    String strDate = "2008-10-19 10:11:30.345" ;
    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") ;  // 实例化模板对象 
    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒SSS毫秒") ;
    Date d = null ;
    try{
        d = sdf1.parse(strDate) ;
    }catch(Exception e){ 
        e.printStackTrace() ;  
    }
    String s = sdf2.format(d); // 将日期格式化为字符串   2008年10月19日 10时11分30秒345毫秒
    System.out.println(s); 
} 


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值