2015/03/31 百度广告事业部面试基础问答

时间:2022-06-18 09:10:03


1.java中int类型是多少位,并且推理int的取值范围。

int在4位,一位是8byte,那么int一共占32字节。

int的取值范围在-231 ——  231-1 这个范围内,而最终这个范围的计算方式,就要看原码和补码的计算了。

可以细看一下这个链接 http://wenku.baidu.com/link?url=tE-y4VYR8t6HCu6OYFdH46hSlm1iMDq2OsQ4PM-wDU6EbRP-w4ziYPhVb-EhHfUaq6AUpon6Se8ypNHFmrSRneIt4loflM-VppL6bpnt_zG
 

2.java中forname的作用和用法

使用 Class 的静态 forName() 方法实现动态加载类,具体应用场景需要看设计而定,一般都是对应着设计模式为了可扩展可伸缩而使用


3.有两个单项链表,怎么找出它们相交的节点?

最初都忘了相交(节点的地址相等,而不是节点内的值相等)是什么意思了。。。好久没有想算法了,结果短时间内只想会最麻烦的二重循环,时间复杂度是O(n的平方)。

最后想明白一个问题,因为单链表都是指向链表的后一个元素,所以只要有一个节点相交,那么他们之后的所有节点都是相同的。所以在这两个单链表没有环的前提下,只要遍历第一个链表,找到最后节点,之后遍历第二个链表,比较第一个链表的最后节点在第二个链表中是否存在,如果存在则是相交的。


4.java反射的原理,通过反正可以访问类的私有方法么?

http://www.cnblogs.com/forlina/archive/2011/06/21/2085849.html 这篇博客写的非常好


5.spring的aop技术原理,并且配置时的关键属性和注意事项。

6.ThreadLocal的实现原理和使用地方。


7.怎么实现线程安全?

应该有很多种方法和情况,我回答的是synchronized这个。之后面试官追问,synchronized关键字可以用在什么地方,如果一个类有一个static方法和一个无static方法,前面都加上了synchronized这个关键字,那么这两个方法是否是互斥的。

这个本人还没有实践,参考这个看看http://www.cnblogs.com/shipengzhi/articles/2223100.html


8.equals和==的区别?

大家应该都知道怎么用,但是具体原理可以看下面的回答。

解释一下==号,他比较的是一个对象在内存中的地址值,
比如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方法具体的作用要看当前的那个类是如何实现重写父类中该方法的,如果没有重写该方法,那么他和==号等价。