打赏 jQuery火箭图标返回顶部代码

面试(手打手写,待更新loading...)

1)JAVA基础面试

  1,引用数据类型和基本数据类型的区别是什么?   

  Byte 1  short 2  int 4  long 8       Boolean 1  char 2  float 4   double 8、

  基本数据类型8种,其余都是引用数据类型

  基本数据类型的变量和对应的数据都存放在栈空间中(stack)zhong

  引用数据类型的数据存放于堆空间(heap)中,引用数据类型的变量存在于栈空间中。

  2,给一个String变量赋值,有哪些方式,区别是什么?

String s1 = "king";
String s2 = "king";
System.out.println(s1==s2);     //true

String s3 = new String("king");
String s4 = new String("king");
System.out.println(s3==s4);   //false

String s5 = "king";
String s6 = new String("king");
System.out.println(s5==s6);  //false

String s7 = "king";
String s8 = "ki" + "ng";
System.out.println(s7==s8); //true

String s9 = "king";
String s10 = "ki" + new String("ng");
System.out.println(s9==s10);
String s1 = new String(“king”);    //堆空间中1个hello字符串,如果此字符串不存在,就复制到常量池中
String s2 = ”king”; //s2直接指向常量池中的hello字符串
String s3 = s1;   //s3直接指向s1指向的堆空间

  3,==和equals 的区别?  

    1,对于基本数据类型,只能用==比较其数值大小,而equals()是Object类中的方法,只有引用数据类型才能使用,基本数据类型不能用,

    2,对于引用数据类型,使用==比较的是俩个引用对象的地址是否相同,即俩个引用变量是不是指向同一个对象。

  4,String和StringBuffer的区别?

    String 是内容不可变类,但其指向可以改变,不适合对字符串内容频发操作

    Stringbuffer是内容可以改变的类,适合对字符串内容的频繁操作

   5,StringBuffer和Stringbuilder的区别?

    Stringbuffer是JDK的老类,是线程安全的,可以直接使用在多线程的环境中

    StringBuilder是JDK的新类,非线程安全的,如果在多线程的环境中需要自行加线程同步控制代码

   6,什么是自动拆箱/装箱机制?

      自动拆箱/装箱机制是JDK1.5以后提供的新功能,用于实现基本数据类型和包装数据类型之间的自动转换

Int i=10;
Integer I = i;   //装箱,内部执行 I= new Integer(i);
Int j= I;       //拆箱,内部执行int  j = I.intValue();
int (Integer   int i=1   Integer I = new Integer(i)
//构造方法                
Integer(int     Integer I = new Integer(10);  int I = I.intValue()//intValue()方法
String (Integer       String s =”10”;  Integer I = new Integer(s)          //构造方法
Integer( String       Integer I = new Integer(10);  String s = I.toString()    //toString()方法
String (int       String s =”10”; int I = Integer.parseInt(s);    // parseInt()方法,在项目中常用
int( String        int i= 10;  String s = new String(i);           //构造方法

  7,说明构造方法的特征及作用。

      构造方法的特征是方法名和类名一致,没有返回类型

      构造方法的作用不是创建对象实例,而是用来给新创建的对象进行 参数初始化,而创建对象的操作是由new关键字负责的

      如果当前类存在父类,则会逐级回溯,从上到下依次执行父类的构造方法,最后再执行本类的构造方法。

  8.this和super的用法区别是什么?

    1,this.属性名---访问本类中的属性,如果子类中找不到,则会去父类中继续查找

          super.属性名---直接访问父类中的属性

    2,this.实例方法名()---访问本类中的方法,如果子类中找不到,则会去父类中继续查找

          super.实例方法名()---直接访问父类的方法

    3,this (参数列表)---调用本类中的其它构造方法,必须放在构造方法的首行

          super (参数列表)---调用父类中的其它构造方法,必须放在构造方法的首行

    4,单独使用this表示当前对象,super不能单独使用

  9,方法重载和方法重写的却别?

    1,方法重载发生在同一类的内部,多个方法具有相同的方法名,方法参数的个数或者类型不同,与返回值无关,重载用于简化完成多个完成相同功能的方法的定义

    2,方法重写发生在父子类之间,父子类的方法原型必须完全相同,重写用于子类改写扩充父类方法的功能

  10,Java在进行方法调用传递参数时,采用值传递还是引用传递?

    Java中方法调用进行参数值传递时,都采用值传递,只有C/C++中才有引用传递

   11,static关键字用在属性,方法和类上,各自表示什么含义?

    static属性又叫类属性,可以用类名或对象实例名调用,一个类的每个对象共享一份static属性,static属性在类加载时候进行初始化

    static方法右角类方法,可以用类名或对象实例名来调用,一个类的每个对象共享一份static方法,static类只能用于内部类的定义

  12,final关键字用在属性,方法和类上,都有什么含义?

    1)修饰变量,被final修饰的变量必须要初始化,赋初值后不能再重新赋值。

    2)修饰方法,被final修饰的方法代表不能重写。

    3)修饰类,被final修饰的类,不能够被继承。

  13,Collection接口和Collections类的区别?

    Collection接口是List和Set的父接口,用来存放单个元素的容器

    Collections类是集合的实用类,提供集合操作的各种实用静态方法

   14List,Set,Map三个接口的区别是什么?

     Collection是存放单个对象的接口,

     List接口--元素有序,允许重复,可以按照索引随机访问元素

     Set接口--元素无序,不允许重复,只能通过迭代器遍历元素

     Map接口--存放键值对的集合,键不许重复,值可以重复

   15,ArrayList和LinkedList区别?

     ArrayList类,内部使用容量可变的动态数组表示,查找指定元素方便,对元素进行(crud)麻烦

     LinkedList类,内部用双向循环链表表示,对元素进行crud方便,查找指定元素麻烦

  16,HashSet和hashMap如何保证集合中的元素没有重复?

     hashSet和HashMap进行存取元素时都是基于哈希表查找机制的,插入新的元素时,先比较要插入元素的hashCode在集合中是否存在,如果存在,在比较二者的内容是否相同,如果也相同,则认为集合中存在次元素,则不允许插入,否则可以插入。

2)JSP中的标注

      JSP九大内置对象

      1)out输出对象---是javax.servlet.jsp.JspWriter类的实例 -->  java.io.Writer类  作用---向页面输出响应信息    

      2)request请求对象---实现了javax.servlet.http.HttpServletRequest接口 --> ServletRequest接口

        作用---客户端发出请求时,所携带的请求信息的封装对象,包括表单请求参数,请求头等信息

      3)response响应对象---实现了javax.servlet.http.HttpServletResponse接口 --> ServletResponse接口

        作用---服务器端响应请求时,所携带的响应信息的封装对象,包括各种响应标识状态,响应头等信息

      4)session对象---实现了javax.servlet.http.HttpSession接口(顶层)

        作用---存储和某个客户端相关的会话信息的封装对象,靠SessionID区分不同的用户

      5)application应用程序对象---实现了javax.servlet.ServletContext接口(顶层)

        作用---同一个web项目中的所有用户共享同一个application全局对象

      6)config配置对象---实现了javax.servlet.ServletConfig接口(顶层)

        作用---存储Servlet类的配置信息,在JSP页面中不常用

      7)page页面对象---是java.lang.Object类的实例(顶层)

        作用---表示当前页面生成的Servlet类的实例,相当于this,不常用

      8)pageContext页面上下文对象---是javax.servlet.jsp.PageContext类的实例 --> javax.servlet.jsp.JspContext类   

        作用---封装了当前页面范围的信息,提供了很多的getXXX()方法,可以方便地访问其他作用域对象

      9)exception异常对象---是java.lang.Throwable类的实例(顶层)

        作用---只能用于异常处理页面中,只有设置了isErrorPage=true的页面才能使用该对象

    2,get请求和post请求的区别?

        get请求提交的参数写在请求头中,在浏览器栏可见,不安全,提交的数据最大容量限制,一般不超过4k

        post请求提交的参数写在请求体重,在浏览器栏不可见,安全,可以传输大文件

    3,请求转发与重定向区别?

        1,请求的次数不同,请求转发只有一次请求,重定向(redirect)有俩次请求。

        2,跳转的位置不同,请求转发在服务器内部完成,客户端不知道,所以浏览器地址栏不变,重定向相当于客户端重新发送了新的请求,所以浏览器的地址栏改变

    4,request.getParameter()方法和request.getAttribute()方法的区别?      

        1)request.getParameter()方法返回String类型,其作用是获取客户端提交到服务器的数据

           request.getAttribute()方法返回Object类型,其作用是获取保存在request属性范围中的数据,只在服务器端内部执行,和客户端无关,常用于请求转发中

         2)request.getParameter()方法没有对应的setParameter()方法

           request.getAttribute()方法有对应的setAttribute()方法

        3)request.getAttribute()/request.setAttribute()方法可以获取/设置那些从数据库中查询出来的数据,这是getParameter()方法无法做到的

    5,serclet的生命周期   

        1)生命周期是组件在不同时间处于的不同状态,Web容器能够管理Servlet组件的生命周期

        2)Web容器负责加载/实例化(new) --> 初始化(init) --> 服务(service) --> 销毁(destroy)其中加载、初始化、销毁只会调用一次,服务每次请求时都会被调用

    6,servlet的运行机制---单例多线程       

        1)单实例---为了提高效率,每个Servlet只有一个实例,在第一次请求时被实例化

        2)多线程---只要有客户发出请求,就创建出一个线程负责响应客户的请求,其service()方法被多个用户反复调用,直到其被销毁

    7,MVC三层结构的执行流程 

        1)视图层(View)---使用JSP显示输入界面,提交输入数据(表单或超链接) + 接收输出结果,显示输出数据(提取属性范围内的单个对象或对象集合);

        2)控制层(Controller)---使用Servlet接收输入数据,并调用service层的业务逻辑方法;

        3)业务逻辑层(Service)---负责业务逻辑处理,接收上层传递的数据,并调用dao层的数据访问方法;

        4)数据访问层(DAO)---负责数据访问操作,接收上层传递的数据,生成SQL语句,并调用dbManager层的JDBC方法;

        5)数据库管理层(DBManager)---负责直接操作数据库,接收SQL语句和参数,生成数据结果,返回给DAO层

        6)数据访问层(DAO)---接收数据结果,封装成实体Bean对象或集合(打包),返回给Service层;

        7)业务逻辑层(Service)---接收实体Bean,转换为业务处理结果,返回给Servlet;

        8)控制层(Controller)---接收业务处理结果,将其保存在某个属性范围中,跳转到相应的页面;

        9)视图层(View)---从属性范围中获取实体Bean数据,解析实体Bean对象的数据(解包),显示最终的输出结果;

           Client -->  JSP   --> Servlet --> Service    -->     DAO   -->    DBManager        -->  DB

           客户端 --> 视图层 --> 控制层  --> 业务逻辑层 --> 数据访问层 --> 数据库操作管理工具 --> 数据库  

    8,Cookie和Session的区别

保存的数据位置不同

 

 Cookie技术将数据全部保存在客户端浏览器或客户端硬盘上,安全性低

Session技术将数据保存在服务器中,安全性高,只是借助cookie技术保存sessionId到客户端浏览器中

保存数据的类型不同

   

  Cookie中只能保存文本信息;

   

 Session中可以保存任意类型的数据;

有效时间的设置方法不同


 Cookie使用setMaxAge()方法,其中0表示立即删除cookie,负数表示浏览器关闭时删除cookie;

 Session使用setMaxInactiveInterval()方法,其中0表示立即销毁session,负数表示session永不过期

销毁时机不同  

   

   当用户关闭浏览器时,内存Cookie被销毁;当设置的MaxAge到期时,持久化Cookie被销毁;

   

   Session到期时,或调用invalidate()方法,或服务器关闭或重启时,Session被销毁

          

    

  

    

      

 

  

    

  

 

 

 

 

 

        9,Filter和Servlet的区别?

          相同点 ---两种组件的生命周期基本相同,init()方法和destroy()方法只执行 一次,service()方法和dofilter()方法执行多次

               ---两种组件都是单实例,多线程的

          不同点---Servlet用来处理实际的请求和响应,Filter在请求之前做预处理,在请响应之后做后处理

             ---Servlet中的<url-pattern>表示请求的实际路径,可以是一个页面或另一个Servlet,写法形式唯一

             Filter中的<url-pattern>表示要过滤的路径范围,可以有多种写法形式 如:/*   *.jsp   /index.jsp   /LoginServlet  /admin/*       

3).Ajax的5个使用步骤 

         1)声明并创建XMLHttpRequest对象

            //声明XMLHttpRequest对象
              var xhr;
              //创建XMLHttpRequest对象
        if(window.ActiveXObject) {

        xhr = new ActiveXObject("Microsoft.XMLHTTP");

        }else if(window.XMLHttpRequest){

        xhr = new XMLHttpRequest();

        }

      2)利用onreadystatechange属性绑定回调函数xhr.onreadystatechange = 回调函数名;

      3)调用open()方法建立与服务器的连接

          GET请求---直接在url后面附加参数,如果是中文数据需要使用encodeURI()编码    常用xhr.open("get", "要调用的Servlet的url?参数名=" + 参数值, true);  

          POST请求---将参数写在send()方法中      不常用xhr.open("post", "要调用的Servlet的url", true);   

      4)调用send()方法发送请求

          设置头信息  xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");

           在send()方法中传递参数xhr.send("参数名=" + 参数值);

      5)编写回调函数---调用XMLHttpRequest对象的responseText属性接收Servlet的响应文本,实现局部刷新页面

     function 回调函数名(){
      if(xhr.readyState == 4){     //判断xhr对象的状态码是否为读取响应结果完全结束
      if(xhr.status == 200){   //判断服务器是否响应成功
        }else{
      alert("Ajax请求操作失败");
      }
    }
   }

      

posted @ 2018-07-22 14:51  浪漫De刺猬  阅读(336)  评论(0编辑  收藏  举报