Java的一些基础笔试题

LZ今天刚刚参加一家公司的Java实习生的面试和笔试,并将笔试题拍下来,以备下次使用:

public class Test 
{
public static void main(String args[])
{
try
{
mb_operate();
}
catch(Exception e)
{
System.out.print("2");
}
System.out.print("3");
}
    public static void mb_operate() throws Exception
    {
    try
    {
    throw new Exception();
    }
    finally
    {
    System.out.print("1");
    }
    }
}

答案:输出的结果是:123,此题考查的是异常的处理,首先会执行try里的mb_operate函数,但是发现在执行这个函数的时候,抛出异常,注意这个mb_operate函数的异常写法是正确的,但是它一定会执行finally,所以首先是输出1;然后因为有异常,被主函数给catch到,所以会输出2;然后因为最后会输出3.

第二题是考查RandomAccessFile类的,这个类是用来访问那些保存数据记录的文件的,然后就可以用seek()来访问记录了,并进行读和写了。这些记录的的大小不必相同,但是大小和位置必须是可知的。它的基本的构造方式是RandomAccessFile rf = new RandomAccessFile("file.bat","rw");这样定义的。

第三题还是考查关于文件流的内容。如java.io.DataOutputStream的构造方法的参数是java.io.FileOutputStream。

第四题考查的是关于socket通信方面的知识。不过是简单的socket的知识,Socket类的用来获取输入流的方法是getInputStream方法。

第五题是考查的是关于字节和byte之间的区别:Character流和Byte流的区别是什么?Java的流操作可以分为字节流和字符流。主要区别在于他们的处理方式,字节流是最基本的,所有的InputStream和OutputStream的子类都是用在处理二进制数据的,并且是按照字节来处理的。但是实际中有很多的文本,所以就提出了字符流。这两个之间的转化用InputStreamReader和OutputStreamWriter来关联,实际上是通过byte[]和String来关联。所以答案应该这样回答:前者是按照块来读写,而后者是按照字节来读写。

下一题是关于创建一个vector类的。问为Vector类添加一个元素的方法有哪些?

第一种必然是很基本的,就是Vector v = new Vector(); v.addElement(99);  表示在末尾增加一个对象。而还有一种是通过

下面这一题是非常经典的题目:

public class Test 
{
public static void main(String args[]) 
{
int count = 0;
for(int i = 0; i < 10; i++)
count = count++;
System.out.println(count);
}
}   这里主要是关于Java的中间缓存变量的机制。就是其实在java内部,用的是j = j++;实际上是对应以下的内容

temp = j;

j = j + 1;

j = temp;

所以答案还是0.

以下这一题是关于静态变量的加载问题:

public class Test 
{
static
{
a = 1;
}
public static int a = 2;
{
a = 3;
}
public static void main(String args[]) 
{
System.out.println(a);
}
}

答案是2.  但是如何解释:因为首先看这个函数的内容,这里的首先a是静态的,故第一次在执行时先加载,然后因为这个public static int a = 2,所以第二次会加载这个;但是因为这里的a =3并不会被加载,因为这一部分是属于程序块的内容,故不是静态加载的,所以是不会执行的,除非是在main函数里进行new一个新的Test类才可以。

下一题是关于Java的关键字,其中sizeof不是Java的关键字,其他几个如:instanceof,native,default都是Java的关键字。此题主要考察关于Java的基本功,但是很容易忽略,所以在平时复习的时候也是要注意这方面的积累。

下一题是关于多线程的内容。

public class Test 
{
public static void main(String args[])
{
Thread t = new Thread()
{
public void run()
{
pong();
}
};
t.run();
System.out.print("ping");
}
static void pong()
{
System.out.print("pong");
}
}    //问,最后输出的结果是什么?

此题考查的是Thread类中的start()和run()方法的区别了。start()方法用来启动一个线程,当调用start方法后,系统才会开启一个新的线程,进而调用run()方法来执行任务,而单独地调用run()方法就跟调用普通的方法是一样的,已经失去了线程的特性了。因此在启动一个线程的时候,一定要使用start()而不是run()。所以输出的是pongping。

7. 下列属于关系型数据库的是()

A. Oracle    B MySql    C IMS     D MongoDB

此题考查的是关于数据的知识点,但是不怎么难。首先得了解数据库有两种基本的类型:关系型数据库和非关系型数据库。而且得注意的是关系型数据库的典型代表是DB2,MySQL,SQL Server等。而非关系型数据库则比如MongDB,Redis等。所以答案是A,B。

下一题是考查几个典型的数据结构之间的继承关系。

linkedList继承自List;HashSet继承自AbstractSet。


以上这张图是关于Java一些基本类的继承关系图。

0.6332是属于什么什么数据类型的?

首先因为肯定不是float类型的,因为如果是,那么就必须要在数字后面加上f的,而这样表示的话,默认就是为double类型。所以就是为double类型的。

下面哪个流类属于面向字符的输入流?

A. BufferedWriter     B. FileInputStream  C. ObjectInputStream  D. InputStreamReader

这道题还是考查关于字节流和字符流的关系。因为Java的IO操作中有面向字节(Byte)和面向字符的两种方式。而面向字节的操作为8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和OutputStream的子类。面向字符的操作以字符为单位对数据进行操作,在读的时候将二进制数据转化为字符,在写的时候将字符转化为二进制数据,这些类都是Reader和Writer的子类。总结:以InputStream(输入)/OutputStream(输出)为后缀的是字节流;以Reader(输入)/Writer(输出)为后缀的是字符流。

所以此题选的是D。因为A和D都是面向字符的,而D是输入流;而A则是输出流。故选D。

以下语句中的list扩充了几次?

ArrayList list = new ArrayList(20);

答案是 0 次。

因为这里只是用来生成了一个ArrayList,并且声明了大小是20,所以是在第一次加载的时候,将这个20的大小给指定了。所以实际上只加载了一次,并且并没有扩充。

以下一题是关于super和this的。如果子类的构造函数要引用调用父类的构造方法,必须把super放在函数的首位。

Constructor call must be the first statement in a constructor

for example:

class Base

{

     Base()

     {

           System.out.println("Base");

     }

}

public class Checket extends Base

{

     Checket()

     {

          super();              //一定要放在第一行

          System.out.println("Checket");

     }

     public static void main(String args[])

     {

           Checket c = new Checket();

     }

}

还要注意的是,this是指向这个方法的对象的引用,而如果是static的话,那么就是这个类本身的方法了。因而this不能放在static中。而super也是不能用在static中的。

下一题是关于java的几个访问修饰符的访问的权限的:

这几个主要是private,default,protected,public.

首先是private,这个是私有的,只允许在类中来访问,并且是类的成员才有资格来访问,注意:类的子类也是不可以访问的;它的权限是最小的。第二个是default,这个是默认的权限。这个权限默认是比较小的,并且是只允许包里的一些方法去访问,而且也不允许其继承的子类去访问。权限稍大一点的是protected,这个是保护的权限,它允许在同一个类下的成员,同一个包下的成员和其继承的子类来访问它,但是唯独不允许其他包下的类来访问它。权限最大的是public,这个是公开的权限,并且这个权限是允许所有的对象来访问的,包括类,包,其子类和其他包里的对象,所以权限最大。

下一题是关于JDBC的内容的,关于JDBC的事务处理的步骤:

1.获取connection对象;2.取消connection的事务自动提交方式;

Connection conn = DriverManager.getConnection("链接url","用户名","密码");

conn.setAutoCommit(false);

3.捕获执行代码(try/catch),如果执行过程顺利,提交事务;一旦发生异常,回滚事务。

try

{

conn.setAutoCommit(false);

stmt=conn.createStatement();

stmt = conn.executeUpdate("sql语句");

conn.commit();

}

catch(Exception e){

e.printStackTrace();

conn.rollback();

}

3.关闭连接,该步骤最好放在finally代码块里,这样就可以保证关闭连接的操作执行了。

finally{

if(stmt!=null)

stmt.close();

if(conn!=null)

conn.close();

}

以下一些是判断题:

default在switch里是必须的。       错。

求X的y次方,其表达式是Math.pow(y,x).      错。应该是   Math.pow(x,y).

子类可以从多个超类中派生出来。       错。  JAVA是单继承。

在哈希时,随着装载因子的增加,发生冲突的概率减少。     错。装在因子的定义是:   .填入表中的元素个数 / 散列表的长度。所以装载因子越大,说明填入表中的元素必然越多,那么发生冲突的概率自然也就越大。

String的replace方法只能返回一个新的字符串对象。            对。

线程执行run()方法结束或抛出一个不能捕获的例外,线程进入等待状态。           错。因为线程执行完run()方法后,那么线程就进入死亡状态了。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值