牛客网Java面试题(一)

对接口的描述正确的是()

  1. 一个类可以实现多个接口
  2. 接口可以有非静态的成员变量
  3. 在jdk8之前,接口可以实现方法
  4. 实现接口的任何类,都需要实现接口的方法

正确答案:A

解析:

  1. 接口中可以有静态方法和成员变量
  2. JDK8之后,接口可以实现静态成员方法
  3. 抽象类实现某个接口,可以不实现所有接口的方法,可以由它的子类实现。而普通类即非抽象类则必须实现接口里的全部方法

例子

public interface IDemo1 {
    void printDemo1();

    //Jdk8新特性
    static void printDemo1Static() {
        System.out.println("-------------Demo1Static方法被执行了-------------");
    }
}
public interface IDemo2 {
    void printDemo2();
}
public class ClassDemo implements IDemo1, IDemo2 {
    @Override
    @Test
    public void printDemo1() {
        //JDK8新特性之后接口中可以有静态方法,且静态方法有方法体
        IDemo1.printDemo1Static();
        System.out.println("张三");
    }

    @Test
    @Override
    public void printDemo2() {
        System.out.println("李四");
    }
}

在Java中,无论在何处调用,使用静态属性必须以类名做前缀。

  1. 正确
  2. 错误

正确答案:B

解析:

在静态类中调用静态方法不需要使用类名作前缀

例子

public class OuterClass {
    //非静态属性
    private String noStaticClassName = "李四";
    //静态属性
    private static int noStaticClassAge = 12;

    //静态内部类
    public static class StaticInnerClass {
        //静态属性
        private static int age = 20;
        //非静态属性
        private String name = "张三";

        public void echo() {
            //在静态类中使用静态属性不用使用类名点属性名
            System.out.println("静态类中的成员属性age:" + age);
            System.out.println("静态类中的非静态属性name:" + name);
            System.out.println("非静态类中的静态成员属性noStaticClassAge:" + noStaticClassAge);
        }
    }

    public static void main(String[] args) {
        //在非静态类中使用静态属性必须使用类名.属性名
        System.out.println(StaticInnerClass.age);
        //在非静态类中想要调用静态类中的非静态方法的话必须这样实例化
        OuterClass.StaticInnerClass notStaticClass = new StaticInnerClass();
        notStaticClass.echo();
    }
}

一般情况下,以下哪个选项不是关系数据模型与对象模型之间匹配关系?

  1. 表对应类
  2. 记录对应对象
  3. 表的字段对应类的属性
  4. 表之间的参考关系对应类之间的依赖关系

正确答案:D

解析: 一般关系数据模型和对象数据模型之间有以下对应关系:表对应类,记录对应对象,表的字段对应类的属性.

建立Statement对象的作用是?

  1. 连接数据库
  2. 声明数据库
  3. 执行SQL语句
  4. 保存查询结果

正确答案:C

解析:

Statement对象:用于执行静态SQL语句并返回其生成的结果的对象。

Statement对象用于执行不带参数的简单SQL语句。

Prepared Statement对象:用于执行预编译SQL语句。

Callable Statement对象:用于执行对存储过程的调用

例子

Statement对象

package statementDemo;

import java.sql.*;

/**
* @program: TestProject
* @description: Statement对象可以正常的访问数据库, 适用于运行静态SQL语句, Statement接口不接受参数
* @author: Mr.Wang
* @create: 2019-06-09 19:13
**/
public class StatementClassDemo {
    //数据库连接驱动
    static final String jdbc_driver = "com.mysql.cj.jdbc.Driver";
    //数据库连接url
    static final String jdbc_url = "jdbc:mysql://localhost:3306/jd?serverTimezone=UTC";
    //数据库账号
    static final String username = "root";
    //数据库密码
    static final String password = "root";

    public static void main(String[] args) {
        Connection connection = null;
        Statement statement = null;

        try {
            //通过反射获取类对象,作用是为了注册JDBC驱动
            Class.forName(jdbc_driver);
            //打开一个连接
            System.out.println("开始连接数据库..........");
            connection = DriverManager.getConnection(jdbc_url, username, password);
            //执行查询
            System.out.println("开始执行查询");
            statement = connection.createStatement();
            String sql = "select * from computer";
            ResultSet resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {
                System.out.println("按列名进行检索");
                String name = resultSet.getString("name");
                String price = resultSet.getString("price");
                String comment = resultSet.getString("comment");
                String shop = resultSet.getString("shop");
                System.out.println("-------------------输出值-------------------");
                System.out.println("商品名:" + name);
                System.out.println("价格:" + price);
                System.out.println("评论数量:" + comment);
                System.out.println("店铺名字:" + shop);
            }
            System.out.println("清理环境,释放资源");
            System.out.println("关闭结果集");
            resultSet.close();
            System.out.println("关闭SQL声明对象");
            statement.close();
            System.out.println("关闭连接");
            connection.close();

        } catch (ClassNotFoundException c) {
            c.printStackTrace();
        } catch (SQLException sql) {
            sql.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException sql) {
                sql.printStackTrace();
            }
        }
        System.out.println("完毕");
    }
}

PreparedStatement

package statementDemo;

import java.sql.*;

/**
* @program: TestProject
* @description: 计划多次使用SQL语句, PreparedStatement接口运行时接受输入参数
* @author: Mr.Wang
* @create: 2019-06-09 19:46
**/
public class PreparedStatementClassDemo {
    //数据库连接驱动
    static final String jdbc_driver = "com.mysql.cj.jdbc.Driver";
    //数据库连接url
    static final String jdbc_url = "jdbc:mysql://localhost:3306/jd?serverTimezone=UTC";
    //数据库账号
    static final String username = "root";
    //数据库密码
    static final String password = "root";

    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;

        try {
            //通过反射获取类对象,作用是为了注册JDBC驱动
            Class.forName(jdbc_driver);
            //打开一个连接
            System.out.println("开始连接数据库..........");
            connection = DriverManager.getConnection(jdbc_url, username, password);
            //执行查询
            System.out.println("开始执行查询");
            String sql = "select * from computer where name like ?";
            preparedStatement = connection.prepareStatement(sql);
            //将值绑定到参数
            preparedStatement.setString(1, "联想%");
            ResultSet resultSet = preparedStatement.executeQuery();

            while (resultSet.next()) {
                System.out.println("按列名进行检索");
                String name = resultSet.getString("name");
                String price = resultSet.getString("price");
                String comment = resultSet.getString("comment");
                String shop = resultSet.getString("shop");
                System.out.println("-------------------输出值-------------------");
                System.out.println("商品名:" + name);
                System.out.println("价格:" + price);
                System.out.println("评论数量:" + comment);
                System.out.println("店铺名字:" + shop);
            }
            System.out.println("清理环境,释放资源");
            System.out.println("关闭结果集");
            resultSet.close();
            System.out.println("关闭SQL声明对象");
            preparedStatement.close();
            System.out.println("关闭连接");
            connection.close();

        } catch (ClassNotFoundException c) {
            c.printStackTrace();
        } catch (SQLException sql) {
            sql.printStackTrace();
        } finally {
            try {
                if (preparedStatement != null) {
                    preparedStatement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException sql) {
                sql.printStackTrace();
            }
        }
        System.out.println("完毕");
    }
}

下面有关SPRING的事务传播特性,说法错误的是?

  1. PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行
  2. PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就抛出异常
  3. PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起
  4. PROPAGATION_NESTED:支持当前事务,新增Savepoint点,与当前事务同步提交或回滚

正确答案:B

解析:

  1. REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般的选
    择(默认值)
  2. SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)
  3. MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常
  4. REQUERS_NEW:新建事务,如果当前在事务中,把当前事务挂起。
  5. NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
  6. NEVER:以非事务方式运行,如果当前存在事务,抛出异常
  7. NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行REQUIRED 类似的操作。

 上一篇
牛客网Java面试题(二) 牛客网Java面试题(二)
将以下哪种方法插入行3是不合法的。类Test1定义如下: public class Test1{//1 public float aMethod(float a,float b){}//2 //3 }//4 public
2019-06-10
下一篇 
Java最常见的面试题和解答 Java最常见的面试题和解答
什么是JVM(Java虚拟机) JVM(Java Virtual Machine)是Java虚拟机.它是一个抽象的计算机或虚拟计算机,它运行已编译的java程序。实际上,JVM是一种软件实现,它位于真正的硬件平台和操作系统之上。它提供了
2019-05-27 Chen
  目录