2018初级JAVA面试题(二)

一、选择题

1. 在java中,以下()命令能够将java源文件编译为类文件
A. java B. javaw C. Javac  D. jar

答案:C
解析:--java是用来执行.class文件来运行java程序的命令,
            --javaw 是java 运行环境中的 一个工具, 用于启动 java 或者 jar 程序。 其作用是隐藏控制台的方式, 运行java 程序。
            --javac 是java 开发工具包(jdk) 其中的一个工具, 用于编译 java 文件, 产生可运行的 .class java 字节码文件。
            --jar 是 java 开发完成之后,将程序进行打包。

2. 给出如下声明:String s=”sunway” 以下合法的代码有()
A. s>>>=3 B. s[3]=”w” C. Int i=s.size() D.s=s+1

答案:D
解析:A.左位移,右位移,有符号无符号,都是对int类型进行操作。B.s[3]指的是字符串数组的第四个字符串。
            C.字符串的长度用length()方法表示。D.java对加号进行了重载,可以直接将数字和字符串相加,相当于字符串拼接。

3. 在java中,要判断D盘下是否存在文件abc.txt,应该使用以下()
A. if( new File ( “ d:abc.txt ” ).exists() == 1 )
B. if( File.exists( “ d:abc.txt “ ) == 1 )
C. if( new File( “ d:/abc.txt “ ).exists() )
D. If( File.exists( “ d:/abc.txt “ ) )

答案:C
解析:无

4. 给定如下java代码,编译运行之后,将会输出()
public class Test {
    public static void main(String[] args) {
        int a=5;
        System.out.println(a%2==1?(a+1)/2:a/2);
    }
}
A. 1 B. 2 C. 2.5 D. 3

答案:D
解析:考察三目运算符

5. 在java中,已获得默认类型的Resultset对象rs,要获取结果集中的数据,必须执行的语句是()
A. rs.next() B. rs.previous() C. rs.getNext() D. rs.getPrevious()

答案:A
解析:rs.next()--将光标从当前位置向前移一行。ResultSet 光标最初位于第一行之前;第一次调用 next() 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。当调用 next() 方法返回 false 时,光标位于最后一行的后面。
            rs.previous()--将光标移动到此  ResultSet  对象的上一行。当调用 previous 方法返回 false 时,光标位于第一行之前。
            rs.getNext()、rs.getPrevious()--没有这两个方法。

6. 一个servlet的生命周期不包括()方法
A. init()方法 B. invalidate()方法 C. service()方法 D. destroy()方法

答案:B
解析:Servlet的生命周期:实例化(容器启动时创建实例)、初始化(init())、调用(service())、销毁(destroy())

7. JavaBean的scope取什么值可使该对象被多个用户共享,即和web应用有相同的生命周期()
A. page B. request C. session D. application

答案:D
解析:就生命周期的长度进行排序:page<request<session<application。
            page:只存在于当前页面的jsp程序。
            request:可以通过重定向跨页面进行访问。
            session:在用户会话有效期间,session可以一直被访问。
            application:相当于servlet上下文,生命周期和服务端程序相同。

8. 下面的代码实现了设计模式中的什么模式()
public class A{
    private A instance;     private A( ) { }
    public static A getInstance( ) {
        if( instance == null) instance = new A() ; return instance;
    }
}
A. Factory  B. Abstract Factory C. Singleton D.Builder

答案:C
解析:这是单例模式中的懒汉模式。

9. 有关线程的哪些叙述是对的()(多选)
A. 一旦一个线程被创建,它就立即开始运行。
B. 使用start() 方法可以使一个线程成为可运行的,但是它不一定立即开始运行。
C. 当一个线程因为抢先机制而停止运行,它被放在可运行队列的前面。
D. 一个线程可能因为不同的原因停止并进入就绪状态。

答案:BD
解析:
           本题是考查对线程概念的掌握。一个新创建的线程并不是自动的开始运行的,必须调用它的start()方法使之将线程放入可运行态(runnable state),这只是意味着该线程可被JVM的线程调度程序调度而不是意味着它可以立即运行。线程的调度是抢先式的,而不是分时间片式的。具有比当前运行线程高优先级的线程可以使当前线程停止运行而进入就绪状态。不同优先级的线程间是抢先式的,而同级线程间是轮换式的。一个线程停止运行可以是因为不同原因,可能是因为更高优先级线程的抢占,也可能是因为调用sleep()方法。而即使是因为抢先而停止也不一定就进入可运行队列的前面,因为同级线程是轮换式的,它的运行可能就是因为轮换,而它因抢占而停止后只能在轮换队列中排队而不能排在前面。

10. 下列说法正确的是()(多选)
A. LinkedList继承自List B. AbstractSet 继承自Set
C. HashSet继承自AbstractSet D. WeakMap继承自HashMap

答案:ABC
解析:严格来说A和B都是实现,也可以说是继承

二、简答题

1. 简述final,finally,finalize的区别。
(1)final的用法:
         a. 修时类的时候不能被继承
         b. 修时变量的时候变量不能被改变
         c. 修时方法的时候变量不能被重写
(2)finally的用法:
        finally通常和try, catch搭配使用,保证不管有没有发生异常,资源都能够被释放(释放连接、关闭IO流)。(System.exit(0)可以直接结束程序而不执行finally里面的内容)
(3)finalize的用法:
        finalize是object类中的一个方法,子类可以重写finalize()方法实现对资源的回收。垃圾回收只负责回收内存,并不负责资源的回收,资源回收要由程序员完成,Java虚拟机在垃圾回收之前会先调用垃圾对象的finalize方法用于使对象释放资源(如关闭连接、关闭文件),之后才进行垃圾回收,这个方法一般不会显示的调用,在垃圾回收时垃圾回收器会主动调用。

2. java开发中”==”和”equals”有何区别?
(1)"==",如果是基本类型,则是值比较;如果是引用类型,是比较两边的地址是否一致。因为在String中直接赋值的字符串是存储在常量池中,比如 String s1="hello";String s2="hello"; 如果直接比较 s1==s2 进行的是值比较,结果为true。 
(2)"equals",默认的equals方法底层仍然是进行"=="比较;可以通过重写equals方法来比较引用类型的具体数据是否一致,例如在String中系统默认重写了equals,可以比较字符串的内容是否一致。

3. Servlet API中有哪些请求跳转方式?有什么区别?
(1)redirect方式,重定向。
        response.sendRedirect(String url);
        服务器通过发送302状态码以及Location消息头(该消息头的值是一个地址,一般称之为重定向地址),通知浏览器访问一个新的地址(即重定向地址)。
        特点:a. 重定向地址是任意的。b. 重定向之后,浏览器的地址栏会发生改变。c. 重定向是两次请求
(2)forward方式,转发。
        RequestDispatcher rd=request.getRequestDispatcher(String url);  
        rd.forward(request,response); 
        转发就是一个组件将为未完成的处理转交给另一个web组件继续做。可以通过在request上绑定数据来进行传递。
        特点:a. 转发的目的地有限(必须是同一个应用) b. 转发之后,浏览器地址栏的地址不变。c. 转发是一次请求

4. JSP页面间对象传递的有哪些方式?对应的方式如何取值?
(1)在request上绑定数据,转发后,通过request.getAttribute("data_name");取值
(2)在session上绑定数据,通过session.getAttribute("data_name");取值
(3)在application上绑定数据,通过application.getAttribute("data_name");取值

5. 你熟悉的有哪些前端框架?用你熟悉的前段框架写一个简单的ajax请求,并解析返回的json格式数据
JQuery框架
(1)$.ajax方法
        $.ajax({ url : "test.do",
                      type : "get",
                      data : "username=king",
                      dataType : "text",  //"text"--文本,"json"--json字符串,"html"--html文档,"xml"--xml文档,"script"--JavaScript脚本
                      success : function( result ){ },  //result是服务端返回的数据,如果返回的是json字符串,会自动转换成JavaScript对象
                      error : fucntion( ) { }
        });
(2)$.get方法
        $.get("test.do",function( result ) { });
(3)$.post方法
        var data={"username","king"};
        $.post( "test.do", data, function( result ) { });
(4)解析json格式数据
        var str='{"name":"Sally"; "age":22}';
        var obj=JSON.parse(str);  //JSON是JavaScript的内置对象
        alert(obj.name);

6. 数据库持久层有哪些常用框架?他们分别有何优缺点?
(1)jdbc:优点:性能高。缺点:如果业务逻辑复杂的话,sql语句繁琐,不易理解
(2)Hibernate:优点:不用写sql,代码简洁。 缺点:性能不好,实现简单的业务逻辑,效率还可以,但是如果业务逻辑复杂,自动生成的
sq语句l效率很低
(3)MyBatis:优点:代码简洁,容易掌握。缺点:底层封装了jdbc,还得写sql,性能较好

7. 有一个物资信息表,字段包括(物资编码、物资名称、计量单位);有一个采购订单信息表,字段包括(订单编号、物资编码、物资名称、计量名称、数量、单价)。请写出创建表单的sql语句,并查询出所有订单范围内每种物资的最大单价的sql语句。

drop table if exists 物资信息表;
create table 物资信息表(
物资编码 int,
物资名称 varchar(100),
计量单位 varchar(50)
)engine=InnoDB default charset=utf8;
drop table if exists 采购订单信息表;
create table 采购订单信息表(
订单编号 int,
物资编码 int,
物资名称 varchar(100),
计量名称 varchar(100),
数量 int,
单价 double
)engine=InnoDB default charset=utf8;
select max(单价) from 采购订单信息表 group by 物资名称;
commit;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不愿放下技术的小赵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值