第一部分 Java基础
第二部分 Java进阶

初级Java程序员面试题(114~130企业真题)

114、编写一个Filter,需要(B)

A. 继承 Filter 类

B. 实现 Filter 接口

C. 继承 HttpFilter 类

D. 实现 HttpFilter 接口

115、有关MVC设计模式(B)描述不正确

A. 使用 Servlet 作为控制器

B. MVC 设计模式增大了维护难度

C. MVC 设计模式属于 Model 2

D. 模型对象向客户端显示应用程序界面

● Model 1:

Model 1的基础是JSP文件,它由一些相互独立的JSP文件,和其他一些Java Class 组成(不是必须的)。这些JSP从 HTTP Request中获得所需要的数据,处理业务逻辑,然后将结果通过 Response 返回前端浏览器。

● Model 2:

采用面向对象技术实现MVC模式从而扩展JSP/Servlet的模式被称为是Model 2模式。Apache Jakarta 项目中Struts是一个实现Model 2的很好的框架,它通过一些Custom Tag Lib处理表现层,用ActionFrom Bean表示数据,用自己提供的一个ActionServlet作为控制器实现页面的流转的控制功能。说的直白一些,model1即为单纯的 jsp+java,没有框架参与,通过response和request对象传送值域,而model2则使用较为流行的struts2框架(当然也可能是其他的MVC框架,例如SpringMVC)。

116、在Linux中,可以使用命令(C)加挂计算机上的非Linux文件系统

A. cat /proc/filesystems

B. ln

C. mount

D. df

117、下面关于Linux中shell的说法错误的是(D)

A. shell 是解释用户在终端键入的命令的一种中间程序

B. shell 可以读取并执行脚本文件中的命令

C. 用户可以使用参数将命令行的参数传递给 shell 脚本,从而实现在 Linux 中的交互式编程

D. 默认情况下,Linux 中创建的所有文件都具有执行权限

118、在Oracle中,当需要使用显式游标更新或删除游标中的行时,UPDATE 或 DELETE 语句必须使用(C)子句

A. WHERE CURRENT OF

B. WHERE CURSOR OF

C. FOR UPDATE

D. FOR CURSOR OF

119、在Oracle中,使用下列的语句CREATE PUBLIC SYNONYM parts FOR Scott.inventory;完成的任务是(D)

A. 将Scott.inventory 对象的访问权限赋予所有用户

B. 指定了新的对象权限

C. 指定了新的系统权限

D. 给Scott.inventory对象创建一个公用同义词 parts

120、下列说法正确的有(C)

A. class中的constructor不可忽略

B. constructor可以作为普通方法被调用

C. constructor在一个对象new时被调用

D. 一个class只能定义一个 constructor

121、下列运算符合法的是(D)

A、&&

B、<>

C、If

D、:=

122、下列哪种说法不正确(ABC)

A、实例方法可以直接调用超类的实例方法

B、实例方法可以直接调用超类的类方法

C、实例方法可以直接调用其他类的实例方法

D、实例方法可以直接调用本类的类方法

123、执行如下程序代码后,c 的值是(C)

int a = 0;
int c = 0;
do {
    --c;
    a = a - 1;
} while (a > 0);

A、0

B、1

C、-1

D、死循环

124、什么时候使用抽象类和接口

如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。

如果你想实现多重继承,那么你必须使用接口。由于 Java 不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。

如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

多数情况下抽象类都是共同特征的抽象,而接口是共同行为的抽象。

125、throws和throw有什么不同点?

throw和throws都是异常处理机制当中的关键字,throw是手动抛异常,throws是以声明的方式抛出异常,并且抛给调用者处理。

126、请编写一个jdbc查询任意一个数据库(如 MySQL、Oracle 等),数据库名为test,表名为user,只有一个字段。

class SqlConnectionUtil {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        String sql;
        String url = "jdbc:MySQL://localhost:3306/test?user=root&password=root&useUnicode=true&characterEncoding=UTF8";
        try {
            Class.forName("com.MySQL.jdbc.Driver");
            conn = DriverManager.getConnection(url);
            stmt = conn.createStatement();
            sql = "select * from user";
            rs = stmt.executeQuery(sql);
            while (rs.next()) {
                String name = rs.getString("name");
                System.out.println("姓名是:" + name);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

127、写一个多线程程序,四个线程对一个int 变量,2 个加 1,2 个减1,输出。

class TMain {
    int j = 1;

    public synchronized void inc() {
        j++;
        System.out.println(Thread.currentThread().getName() + "-inc:" + j);
    }

    class T1 implements Runnable {
        public void run() {
            inc();
        }
    }

    public synchronized void dec() {
        j--;
        System.out.println(Thread.currentThread().getName() + "-dec:" + j);
    }

    class T11 implements Runnable {
        public void run() {
            dec();
        }
    }

    public static void main(String[] args) {
        TMain t = new TMain();
        T1 t1 = t.new T1();
        T11 t11 = t.new T11();
        for (int i = 0; i < 2; i++) {
            Thread thread = new Thread(t1);
            thread.start();
            Thread thread1 = new Thread(t11);
            thread1.start();
        }
    }
}

128、说出常用的10个linux操作命令,至少 5 个,并简述命令的作用。

● ls命令

-作用:显示目录内容,类似 DOS 下的 DIR

-格式:LS【options】【filename】

-常用参数:

>-a:all,不隐藏任何以"."字符开始的文件

>-l:使用较长的格式列出信息

>-r:按照文件名的逆序打印输出

>-F:加上文件类型的指示符ls -lF | grep / 过滤

● man ls 查询 ls 的帮助文件

● cat命令

-作用:显示文件内容,concatenate 的缩写,类似 dos 的 type 命令。

-格式:cat【options】【fielname】

-常用参数:

>-n:显示文件内容的行号。

>-b:类似-n,但是不对空白行进行编号。

>-s:当遇到有连续两行以上的空白行时,就代换为一行的空白行。

● mv 命令

-作用:更改文件或者目录的名字。

-格式:mv[options]source destination

-常用参数:

>-f:强制模式,覆盖文件不提示。

>-i:交互模式,当要覆盖文件的时候给提示。

● rm 命令

-作用:删除文件命令,类似 dos 的 del 命令

-格式:rm【options】filenames

-常用参数:

>-f:强制模式,不给提示。

>-r,-R:删除目录,recursive

​​​​​​​129、说出常见的5个linux系统日志,至少3个并做简述日志的用途。

● access-log记录 HTTP/web 的传输

● acct/pacct记录用户命令

● aculog记录 MODEM 的活动

● btmp记录失败的纪录

● lastlog记录最近几次成功登录的事件和最后一次不成功的登录

● messages从 syslog 中记录信息(有的链接到 syslog 文件)

● sudolog记录使用 sudo 发出的命令

● sulog记录使用 su 命令的使用

● syslog从 syslog 中记录信息(通常链接到 messages 文件)

● utmp记录当前登录的每个用户

● wtmp一个用户每次登录进入和退出时间的永久纪录

● xferlog记录 FTP 会话

130、创建一张员工表,表名EMPLOYEES,有四个字段,EMPLOYEE_ID: 员工表( 主键)、DEPT_ID: 部门号、EMPLOYEE_NAME:员工姓名、EMPLOYEE_SALARY:员工工资。

● 写出建表语句:

CREATE TABLE EMPLOYEES(

EMPLOYEE_ID int not null primary key,

DEPT_ID int,

EMPLOYEE_NAME char(40),

EMPLOYEE_SALARY double

);

● 检索出员工工资最高的员工姓名和工资

select * from user where employee_salary= (select max(employee_salary) from user);

● 检索出部门中员工最多的部门号和此部门员工数量​​​​​​​

select dept_id,count(*) cno from user GROUP BY dept_id desc limit 1;​​​​​​​​​​​​​​

全部教程