前因
本人即将两年工作经验,有PHP一年多,Java半年多,工作舒服惬意,从不加班。某段时间,自己有些闲得蛋疼,就点开了BOSS直聘。谁让他经常给我推送消息呢,题主现在的工作就是boss上找的。瞎点了点,结果一堆HR发消息给我,然后我就修改了期望薪资,随随便便就发了简历。没想到百度的HR联系我了,PHP相关的职位。然后我就投了,没几天一面来了。可能我在项目组重构了框架,重写了整个系统,心里有些高傲,所以一面稳稳的过了,而且觉得一面的小姐姐问的技术太浅了。
在准备二面的准备过程中,拿出了大学的数据结构,从二叉树看到排序,感觉自己又回来了。虽然平衡二叉树的自旋和排序二叉树的删除还不能手撕代码,但是的确比平时更理解了一些。毕竟温故而知新嘛。
行为
面试我是提前一个小时到的,因为太紧张了,所以早早去了。看到了百度的专利墙,上面写满了百度的专利,我也看到了李彦宏的专利。深深的被伟大的公司和企业文化所折服。百度真的不愧为中国互联网的一面大旗,很强。
面试前,面试官到了准备了半天才来接我,因为毕竟我当前工作是Java,但是面试官是PHP,我估计他找了一些面试题。
面试在二楼的平台进行,我们找了个角落。便开始了面试。题主我不得不承认我的心高气傲真的不是个好习惯。面试官问的问题,我都延伸的很远。但是很细节的问题,都回答的很失败,这个面试官真的对细节和基础考察的很到位。
细节
- 1.JDK和JRE的区别
这个问题和没问一样
- 2.Java中的强引用和弱引用GC回收时,有什么不同
这个题主真的是忘了,但是题主说了半天,Java的内存结构,
然后用Java和Go和PHP进行了内存模型对比,但是感觉面试官没啥反应。可能因为没答到点上。
- 3.final修饰方法参数有什么用
// 这么细节的问题,题主直接跪了,哎,对不起自己日日夜夜的努力啊。以下是代码,题主回来自己敲了一遍,结果都不能编译,因为finally没有return。
static class Axx{
private String name;
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Axx{" +
"name='" + name + '\'' +
'}';
}
}
public static void main(String[] args) {
Axx axx = new Axx();
axx.setName("aa");
ax(axx);
System.out.println(axx.toString());
axx.setName("aa");
axx(axx);
System.out.println(axx.toString());
String aff = "yes";
F(aff);
System.out.println(aff);
}
public static void ax(Axx a){
a.setName("yyy");
}
public static void axx(final Axx a){
a.setName("yyy");
}
public static void F(String a){
a = "666";
}
// 题主跪在了final修饰的方法参数上,和字符串上。
- 4.finally代码块内返回值的问题
// 这么细节的问题,题主直接跪了,哎,对不起自己日日夜夜的努力啊。
// 以下是代码,题主回来自己敲了一遍,结果都不能编译,因为此方法没有合理的return。
public static int test (){
int value = 6;
try{
return value;
}catch (Exception e){
}finally {
value++;
}
}
// 题主自己敲了下代码后发现了这个问题的坑
// return 的位置会影响返回结果,题主先说一下return位置的问题。
// 如果return放在try{}catch(){}finally{}外部,这是方案A
// 如果return放在finally代码块中,这是方案B
// 题主当时脑子里只有一个思想finally中的代码,除了掉电,或者System.exit(0)都执行;
// 当时我说这个返回值是7,后来我敲了一遍发现了问题,也就是方案A和方案B的问题。
// 方案A的返回值的6,方案B的返回值是7。这是为什么呢?题主很好奇,于是对比了一下字节码
// 左右分别是方案A,方案B。
根据对比图发现,方案B 存在goto语句,也就是返回值会变化的原因。
- 4.邮箱正则