interview question

1.
解释一下==号,他比较的是一个对象在内存中的地址值,
比如2个字符串对象
String s1 = new String("str");
String s2 = new String("str");
如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。

equals的情况比较复杂,它是java.lang.Object类中的一个方法。因为java中所有的类都默认继承于Object,所以所有的类都有这个方法。

在Object类源码中是这样写的。
public boolean equals(Object obj) {
return (this == obj);
}
他同样使用==号进行内存地址的比较。但是许多java类中都重写了这个方法,比如String。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}

String里的方法,如果==号比较不相等,还会进行一下值的比较。
所以equals方法具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么他和==号等价。
2.
3.ping   telnet   ping是测试网络连通性的.telnet 用于远程管理连接主机。。同时也是测试目标机器的TCP端口是否开放。

4.cat -n file.txt | grep -E "^    10"

5.List<Integer> a   两个list都是升序的,然后让你对他们两个拍序,让你结果也是升序。那么不要用get,因为有可能是arraylist实现的,所以要用iterator来实现。

6.一个类中,先对属性a排序,再对b排序,以a为准,然后对b排序。考虑基数排序。

7. n的阶乘的最后一位不为0的数,求这个数
#include<cstdio>  
02.int main()  
03.{  
04.    int n,i;  
05.    long long s;  
06.    while(scanf("%d",&n)!=EOF)  
07.    {  
08.        s=1;  
09.        for(i=2;i<=n;i++)  
10.        {  
11.            s*=i;  
12.            while(s%10==0)s/=10;  
13.            s=s%100000;  
14.        }  
15.        printf("%5d -> %lld\n",n,s%10);  
16.    }  
17.    return 0;  
18.}  

8.String str1 = "hello" ;String str2 = "he" + new String("llo" );System.err.println(str1== str2);   false

9. 普通的类方法是可以和类名同名的,和构造方法唯一的区分就是,构造方法没有返回值。


10.数组.length的意思是说他放东西的能力是多少。不是说放了多少东西了。


13. 下面哪个流类属于面向字符的输入流(  )

A  BufferedWriter           B  FileInputStream         ObjectInputStream          D  InputStreamReader

 答案:D

 解析:Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式。
面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和OutputStream的子类。
面向字符的操作为以字符为单位对数据进行操作,在读的时候将二进制数据转为字符,在写的时候将字符转为二进制数据,这些类都是Reader和Writer的子类。

总结:以InputStream(输入)/OutputStream(输出)为后缀的是字节流;

          以Reader(输入)/Writer(输出)为后缀的是字符流。

扩展:Java流类图结构,一目了然,解决大部分选择题:

 

14. Java接口的修饰符可以为(D)  内部接口可以用AB

A private     B protected     C final       D abstract

接口只能用public或者abstract修饰

15. 不通过构造函数也能创建对象吗()

A 是     B 否

答案:A

解析:Java创建对象的几种方式(重要):

(1) 用new语句创建对象,这是最常见的创建对象的方法。
(2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
(3) 调用对象的clone()方法。
(4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

(1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。


16. ArrayList list = new ArrayList(20);中的list扩充几次()

A 0     B 1     C 2      D 3

答案:A

解析:这里有点迷惑人,大家都知道默认ArrayList的长度是10个,所以如果你要往list里添加20个元素肯定要扩充一次(扩充为原来的1.5倍),但是这里显示指明了需要多少空间,所以就一次性为你分配这么多空间,也就是不需要扩充了。

19. 下面程序能正常运行吗()

复制代码
public class NULL {

    public static void haha(){
        System.out.println("haha");
    }
    public static void main(String[] args) {
        ((NULL)null).haha();
    }

}
复制代码

答案:能正常运行

解析:输出为haha,因为null值可以强制转换为任何java类类型,(String)null也是合法的。但null强制转换后是无效对象,其返回值还是为null,而static方法的调用是和类名绑定的,不借助对象进行访问所以能正确输出。反过来,没有static修饰就只能用对象进行访问,使用null调用对象肯定会报空指针错了。

22. 下面代码的运行结果为:()

复制代码
import java.io.*;
import java.util.*;

public class foo{

    public static void main (String[] args){

        String s;

        System.out.println("s=" + s);

    }

}
复制代码

A 代码得到编译,并输出“s=”

B 代码得到编译,并输出“s=null”

C 由于String s没有初始化,代码不能编译通过

D 代码得到编译,但捕获到 NullPointException异常

答案:C

解析:开始以为会输出null什么的,运行后才发现Java中所有定义的基本类型或对象都必须初始化才能输出值。


1、java重载和重写的区别

      重载overloading 多个方法、相同的名字,不同的参数
      重写overwrite 子类继承父类,对方法进行重写

2.二、Linux方面

    1、Linux下如何用命令查看实时日志(完整命令)
      tail -f 路径*.log
      查看前多少行 tai-200f 路径*.log
    2、Linux如何给文件赋予读写操作的权限
      chmod 755 路径\文件夹名
      ugo 755 user有rwx权限 g有rx权限 o有rx权限
      5 二进制 101代表r-x权限
                 6 二进制110代表rw-权限  
      4 二进制 100代表有r--权限
      7 二进制 111代表有rwx权限(最多)
      
    3、查看某端口号被占用的命令
      查看8080端口号被占用:netstat -anp 8080 、netstat -tunlp | grep 8080、lsof -i:8080
      查看某进程被占用:pa aux | grep java   
  三、数据库方面
    1、SQL语句和Oracle 查看前5条数据
      Oracle:select * from ** rownum<6
      SQL:select top 5 * from **
    2、过滤重复记录
      关键字distinct select distinct ** from **
    3、group by 和Having的区别
      前者用于指定分组;后者用于限制分组查询的结果
    4、索引的作用
      提高查询速度
    5、视图的作用
      刚刚买的书有介绍:虚表,对它的操作不影响基表。提取基表的属性组成一个虚表
    6、分布式数据系统的特点
      优点:降低单个数据库压力;响应速度快,一般用于大客户的解决方案;
      缺点:一般用的硬件多,开发成本高


12.,"Error" 和 "Exception"之间有啥区别?

java.lang.Error和java.lang.Exception继承 Throwable

 error都是继承自父类java.lang.Error,而exception都继承自java.lang.Exception.

 Error和RuntimeException 及其子类都是未检查的异常(unchecked exceptions),

 所有其他的Exception类都是检查了的异常(checked exceptions).

checked exceptions: 通常是从一个可以恢复的程序中抛出来的,并且最好能够从这种异常中使用程序恢复.

受检查的异常,要么用try。。。catch捕获,要么用throws字句声明抛出,交给它的父类处理,否则编译不会通过。


unchecked exceptions: 通常是如果一切正常的话本不该发生的异常,但是的确发生了。比如ArrayIndexOutOfBoundException, ClassCastException等。从语言本身的角度讲,程序不该去catch这类异常,因为完全没要必要。因为这类错误本身就是bug,应该被修复,出现此类错误时程序就应该立即停止执行。 因此,面对Errors和unchecked exceptions应该让程序自动终止执行,程序员不该做诸如try/catch这样的事情,而是应该查明原因,修改代码逻辑。






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值