• java面试题总结


    来源:http://m.kanzhun.com/k-mianshitimu/javamianshiti/

    一、 JAVA基础
    1、 String和StringBuffer的区别

    答:JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

    2、 接口和抽象类的区别和用法?

    答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
    接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。
    当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

    3、  List、Set、Map三个存取数据时各自的特点是什么?

    答:List有序key和value都能重复
    Set 无序(除treeSet) key和value都不能重复
    Map无序(除treeMap) key 必须唯一 value 可以重复

    4、 Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
    答:有字节流,字符流,对象流,文件流
    抽象类:Java中处理字节流的抽象类有InputStream和OutputStream。InputStream有7个子类,OutputStream有5个子类; 
    Java中处理过滤流的抽象类是FilterOutputStream和FilterInputStream,而这两个抽象类又分别是抽象类InputStream和OutputStream的子类。对于流动数据的过滤也就是进行某种形式的加工; 
    Java中处理字符流的抽象类是Reader类和Writer类。它们的直接子类分别有6个和7个; 
    Java中处理压缩流的抽象类是InflaterInputStream和DefilaterOutputStream,它们分别有3个子类。

    5、 Java的异常处理共分为哪几种?他们之间的区别是什么?

    答:分为一般异常和运行时异常,异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

    6、 short s1 = 1; s1 = s1 + 1;有什么错? 
    short s1 = 1; s1 += 1;有什么错?

    答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
    short s1 = 1; s1 += 1;(可以正确编译)

    7、 
    public class TestQuestion {
    public static void main(String[] args){
          System.out.println(“Hello world !”);
    RuntimeException re = null;
    throw re;
    }
    } hello world可以打印出 系统报空对象异常
    程序是否有错?如果有,请指出并描述原因;如果没有,请写出运行结果。
    7、
    public class TestQuestion {
    public int addOne(final int x){
    return ++x;
    }
    }
    答:有,被修饰符final修饰的变量x不能被赋值。
    程序是否有错?如果有,请指出并描述原因。
    8、
    public class TestQuestion {
      int i;
      final int z;
    public void showI(){
    System.out.println(“i=” + i);
    }
      public void showJ(){
          int j;
    System.out.println(“j=” + j);
    }
    public void showZ(){
    System.out.println(“z=” + z);
    }

      public static void main(String[] args){
          TestQuestion testQuestion = new TestQuestion();
          testQuestion.showI();
       testQuestion.showJ();
          testQuestion.showZ();
    }
    }
    程序是否有错?如果有,请指出并描述原因;如果没有,请写出运行结果。

    答:有,首先在类TestQuestion类中定义的变量z由于有final修饰符,所以必须被初始化
    第二,在TestQuestion类中的showJ()方法中定义的变量j必须先初始化再使用

    9、程序题:
       1)把“abcd1234”逆序输出,写一段程序。
    答:采用OOP方法
    public class StringModel {
    //被操作的字符串
    private String str;
    public StringModel() {

    }

    public StringModel(String str) {
    this.str = str;
    }

    public String getStr() {
    return str;
    }

    public void setStr(String str) {
    this.str = str;
    }
    }

    //操作StringModel的方法集
    public class StringDAO {
    //逆序,使用StringBuffer
    private StringBuffer sb = new StringBuffer();
    public String reverseString(String str) {
    String result = "";
    result = sb.append(str).reverse().toString();
    return result;
    }
    }

    //测试类
    public class StringTest {
    public static void main(String[] args) {
    StringModel sm = new StringModel();
    //使用构造方法也可
    //StringModel sm = new StringModel("abcd1234");
    sm.setStr("abcd1234");
    StringDAO dao = new StringDAO();
    String str = dao.reverseString(sm.getStr());
    System.out.println(str);
    }
    }

       2)请用java实现Singleton模式
    public class Num {
    private int num;

    public Num() {

    }

    public Num(int num) {
    this.num = num;
    }

    public int getNum() {
    return num;
    }

    public void setNum(int num) {
    this.num = num;
    }
    }


    //单例类
    public class NumDAO {
    //单例
    private static NumDAO dao;
    //不允许new---私有构造方法
    private NumDAO() {}
    //使用单例类需要从类自身得到实例
    public static NumDAO getInstance() {
    dao = new NumDAO();
    return dao;
    }
    public int add(Num n1,Num n2) {
    int result = ;
    result = n1.getNum() + n2.getNum();
    return result;

    }
    }

    public class SingletonTest {
    public static void main(String[] args) {
    Num n1 = new Num(1);
    Num n2 = new Num(1);
    int result = NumDAO.getInstance().add(n1, n2);
    System.out.println(result);
    }
    }
    二、 WEB相关
    1、 JSP中的内置对象有哪些?

    答:JSP中有9大内置对象,分别是:request  response  session  application  out   page  cookie  pageContext  config



    2、 简述Servlet的生命周期.

    答:web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法,生命周期结束。



    3、 如何解决请求中的中文乱码问题?

    答:可以在接收页面请求信息之前或之后进行转码。


    4、 请写出常用的jstl的标签有哪些,并描述各自作用?

    答:<c:set>:创建和设置限制了作用域的变量。
       <c:remove>:用来删除限制了作用域的变量。
    <cut>:对由其 value 属性指定的表达式进行求值,然后打印结果。如果指定了可选属性 default ,那么,在对 value 属性的表达式求值所得结果为 null 或空 String 的情况下, <cut> 将打印其值。
    <c:forEach>:实现用于访存和显示数据集,通常是以列表或表中的一系列行的形式显示。支持两种不同样式的迭代:整数范围上的迭代和集合上的迭代。
    <c:if>:简单地对单个测试表达式进行求值,接下来,仅当对表达式求出的值为 true 时,它才处理标记的主体内容。如果求出的值不为 true ,就忽略该标记的主体内容。
    < c:choose>:每个要测试的条件都由相应的 <c:when> 标记来表示,至少要有一个 <c:when> 标记。只会处理第一个其 test 值为 true 的 <c:when> 标记体内的内容。如果没有一个 <c:when> 测试返回 true ,那么会处理 <ctherwise> 标记的主体内容。如果没有给出 <ctherwise> 操作,那么不会处理任何 <c:choose> 标记的主体内容。
    <c:catch>:它允许在 JSP 页面内进行初级的异常处理。更确切地说,在该标记的主体内容中产生的任何异常都会被捕获并被忽略。
    <c:import>:是一种请求时操作,它的基本任务就是将其它一些 Web 资源的内容插入 JSP 页面中。
    <c:redirect>:该操作用于向用户的浏览器发送 HTTP 重定向响应,与 javax.servlet.http.HttpServletResponse 的 sendRedirect() 方法功能相当。

    5、 编写代码实现jsp页面中如文字内容长度大于2字符截取到2,后面添加..,如不到2则原样输出的代码(推荐使用jstl)

    <%@ page language="java" import="java.util.*" pageEncoding="GBK" contentType="text/html; charset=GBK"%>
    <%@taglib uri="WEB-INF/c.tld" prefix="c"%>
    <!--发送信息的页面  -->
    <html>
      <head>
        <title>request</title>
      </head>
       <c:set var="context" value="sdkfksf;sketokbtopkrptokrtpokr" scope="request"></c:set>
       <cut value="${requestScope.context}"></cut>
       <a href="StringService?context=${requestScope.context }">处理</a>
      <body>
      </body>
    </html>

    package com.string.service;

    import java.io.IOException;


    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    //处理信息的Servlet
    public class StringService extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    request.setCharacterEncoding("GBK");
    String str = request.getParameter("context");
    String result = "";
    if(str.length()>2) {
    result = str.substring(, 2)+"...";
    }else{
    result = str;
    }
    request.setAttribute("context", result);
    request.getRequestDispatcher("show.jsp").forward(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    doGet(request,response);
    }

    }

    <%@ page language="java" import="java.util.*" pageEncoding="GBK" contentType="text/html; charset=GBK"%>
    <%@taglib uri="WEB-INF/c.tld" prefix="c"%>
    <!-- 显示内容的页面 -->
    <html>
      <head>
        <title>show</title>
      </head>
      
      <body>
        <!-- 使用EL表达式 -->
        <cut value="${requestScope.context}"></cut>
      </body>
    </html>

    三、 框架知识
    1、 简述SPRING的Aop和IoC。

    答:AOP:面向切面编程,Spring AOP,借助于Spring实现的拦截器,开发者能够实现以声明的方式使用企业级服务,比如安全性服务、事务服务等。
    AOP帮助我们将这些服务模块化,并把它们声明式地应用在需要它们的地方,使得这些组件更加专注于自身业务,完全不知道其它涉及到的系统服务。
    IoC:反向控制(依赖注入),是指获得依赖对象的方式反向。Spring IoC,借助于依赖注入设计模式,使得开发者不用理会对象自身的生命周期及其关系,而且能够改善开发者对J2EE模式的使用。
    IoC模式中,创建对象实例的任务交给IoC容器或框架(实现了IoC设计模式的框架也被称为IoC容器),使得应用代码只需要直接使用实例,这就是IoC,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。
    Spring IoC和 Spring ; AOP组合,一起形成了Spring,这样一个有机整体,使得构建轻量级的J2EE架构成为可能,没有Spring IoC的Spring AOP是不完善的,没有Spring AOP的Spring IoC是不健壮的

    2、 简述SPRING MVC与STRUTS2 的异同。

    答:spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上 spring3 mvc就容易实现restful url。
    struts2是类级别的拦截, 一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。 spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量
    而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码 读程序时带来麻烦。 spring3 mvc的验证也是一个亮点,支持JSR33,处理ajax的请求更是方便 只需一个注解@ResponseBody ,然后直接返回响应文本即可。 

    3、 HIBERNATE中实现ORMapping有哪几种方式,并简述每种方式的优缺点。
    4、 Hibernate中save、update和saveOrUpdate的区别是什么?

    答:save()导致的最终结果是执行insert语句,update和saveOrUpdate是用来对跨Session的PO进行状态管理的。update会被用于当一个PO对象跨Session进行状态同步的时候才需要写。而一个PO对象当它不需要跨Session进行状态管理的时候,是不需要写update的。saveOrUpdate的策略是,如果该对象的ID已经存在,则执行update(),如果该对象的ID不存在,则用save()策略。
    5、 常用的缓存实现有哪几种?区别是什么?

    答:2种:一级缓存和二级缓存。一级缓存通过session设置实现,二级缓存通过配置Session工厂实现。
    四、 JavaScript
    1、 JavaScript中对象和函数的创建都有哪种方法
    2、 请编写代码循环输出一个对象中所有的key和value。
    3、 描述下闭包的作用

    答:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。允许使用内部函数--即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
    作用:匿名自执行函数
    缓存
    实现封装
    4、 编写一个校验邮箱的正则表达式

    答:./^.+@([?)[a-zA-Z-9-.]+.([a-zA-Z]{2,3}|[-9]{1,3})(]?)$/;

    5、 编写javascript实现点击某添加按钮后表格中自动添加一行的功能。(推荐用jquery和javascript两种方式实现)

    五、 数据库
    1、 常用的数据库设计建模的工具有哪些?
    答:有UML建模,用Rose23

    2、 左连接、右连接和内连接的区别是什么?

    答:内连接(Inner Join)查询操作列出与连接条件相匹配的数据行,使用比较运算符比较被连接列的列值
    外连接(Out Join) 返回查询结果中不仅包含符合连接条件的行,还包括左表或右表中所有的数据行,分为左连接和右连接。
    左连接(Left Join)返回包含左表中全部记录和右表中与连接条件匹配的记录
    右连接(Right Join)返回包含右表中全部记录和左表中与连接条件匹配的记录

    3、 设计树型的表结构必须的字段有哪些,他们之间的关系是什么?
    4、 有3张表,Student表、SC表和Course表 
    Student表:学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)和系名(Sdept) 
    Course表:课程号(Cno)、课程名(Cname)和学分(Ccredit); 
    SC表:学号(Sno)、课程号(Cno)和成绩(Grade)
    请使用SQL语句查询学生姓名及其课程总学分

    Select sname, sum(grade) from Student st  SC  Course  c  where st.sno=SC.sno and c.cno=SC.cno ;

  • 相关阅读:
    Fibonacci Numbers
    Fibonacci(...刷的前几道题没有记博客的习惯,吃了大亏)
    Fibonacci Check-up
    Pendant
    奥运
    Tr A
    A Simple Game
    Be the Winner
    John
    Being a Good Boy in Spring Festival(尼姆博弈)
  • 原文地址:https://www.cnblogs.com/huangwentian/p/6758220.html
Copyright © 2020-2023  润新知