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请求操作失败");
      }
    }
}

      

最新文章

  1. AspNet MVC中各种上下文理解
  2. 第七章 内存管理单元MMU介绍
  3. C# 读取在存储过程多结果集
  4. c中malloc的用法
  5. java加载机制整理
  6. android studio 预览保持,因为是SDK版本过高,可以点击小图标机器人修改SDK版本号。
  7. BZOJ 1023
  8. Python2和Python3安装教程
  9. python之生成器和列表推导式
  10. 七、Oracle 数据库设计
  11. AARRR 量化感染率
  12. 【详解】WebSocket相关知识整理
  13. 1.3用socketserver创建服务器
  14. Software-Defined Networking A Comprehensive Survey --阅读_day2
  15. Fedora更改密码
  16. php解析mpp文件
  17. win32 音视频相关 api
  18. Linux ifconfig命令详解
  19. cocos2dx 3.x designResolutionSize须主动设置
  20. iOS Reachability检测网络状态

热门文章

  1. Funsioncharts 线图 破解
  2. 如何更改Android的默认虚拟机地址(Android virtual driver路径设置)
  3. 复习KMP
  4. spring data jpa自定义baseRepository
  5. Reset CSS 页面初始化css
  6. Vuforia切换回识别场景后黑屏解决
  7. 使用java来压缩图片
  8. C-C++字符输出时遇到字符'\n&#39;,&#39;\0&#39;区别
  9. HDU 4055 Number String(DP计数)
  10. Installing Apache, PHP, and MySQL on Mac OS X