您的位置:首页 > 职场人生

为明天上午的百度面试做准备

2013-04-18 10:21 127 查看
 

明天上午将去百度面试,所以提前做一些准备,在网上只搜到了一份完整的面试题,如下,我要自己认真看一遍,是否能全部很好的回答。

 

上周末,参加了百度Android的面试.分笔试和面试,其中面试分一面、二面和三面,这个流程走下来,差不多一天多了.

 

关于笔试

以下题目不一定按笔试时顺序,是麦洛凭借回忆,尽量将笔试的题目还原(笔试共有10道题目)

1.java 基础题,输出结果是什么?

public static void main(String[] args) {
String str = new String("abc");
char[] ch = {'a','b','c'};
change(str,ch);

System.out.print(str+" ");
System.out.print(ch);}

public static void change(String str,char[] ch){
str = "gbc";
ch[0] = 'g';

}
}

答案:这道题考察的东西很多,看似简单,实则考察了java的基础知识,对内存的理解,对面向对象的理解,对==,equals,hashcode等的理解。总体来说不难,但是这个原理理解却不是那么容易的。

结果是:abc,gbc

 

2.HashMap,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法

答案:考察对java中集合的理解,这个题是淘宝面试必问,我面试淘宝2次,都问到了,当时一个是实习生招聘的时候,一个是校招面试的时候,淘宝的面试官似乎特别爱问这个。这个问题我还是比较自信能回答的很好的。

 

3.Activity的启动模式有哪几种

答案:比较简单,但是有一个需要注意:singleTask,这个实际开发的时候有大用途。

 

4.介绍Handler机制

答案:考察Android的消息机制,这个应该是一般公司的必问题。

 

5.线程考核,解析sleep,wait,join,yield方法,以及notify 和notifyAll是如何控制线程同步的

答案:多线程的考核

 

6.android 存储方式以及各至用法

 

7.ListView 中BaseAdapter的使用和优化;在ListView中的item放置一个按钮,如何使用按钮对不同的item响应不同的事件

 

8.编程题:

题意:生成一个1-100的随机数组,但数组中的数字不能重复,即位置是随机的,但数组元素不能重复

答案:这个用的比较少,所以只能百度一下了。

http://blog.csdn.net/herrapfel/article/details/1885016

http://www.blogjava.net/cool2009/archive/2009/03/15/259882.html

第一种:用Math.random,使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他就是个100以内的随机

public static void main(String[] args) {

StringBuffer resRand = new StringBuffer("");
int maxnum = 0;

while (true) {
String num = (int) (Math.random() * 100) + "";
if (maxnum < 10) {
if (resRand.toString().contains(num)) {
continue;
}
resRand.append(num + ",");
maxnum++;
} else {
break;
}
}
System.out.println(resRand.substring(0, resRand.length() - 1));

}


 

第二种:用Java.util.random,在java.util这个包里面提供了一个Random的类,我们可以新建一个Random的对象来产生随机数,他可以产生随机整数、随机float、随机double,随机long

public static void main(String[] args) {

Random ran = new Random();
Set<Integer> set = new HashSet<Integer>();

while (set.size() == 10 ? false : true) {
int num = ran.nextInt(100) + 1;
set.add(num);
}

Iterator<Integer> it = set.iterator();
int count = 0;
while (it.hasNext()) {
System.out.println("第 " + ++count + " 个随机数 = " + it.next());
}

}

 

 

笔试题目就只能记住这么多了.

 

 

由于笔试时间是在晚上,麦洛答好题目才交卷,时间大概用一个半小时(感觉其他人答得非常快,有的没有半个小时就交卷了).总体上,麦洛感觉笔试题目还是比较简单的,只要平时稍微注意学习,这些题目都不是很难.

百度评卷的效率也是很高的,麦洛刚从茂业大厦(百度深圳研发中心)出来不多久,就电话通知进入面试了.第二天面试时,被麦洛瞄到了答卷的分数,93分!

面试的第一轮是第二天9:00开始,在酒店里.因为深圳这边的研发中心刚刚建立起来,面试官都是从北京飞过来的.第一轮面试的面试官,应该也是Android工程师,这一轮问的题目基本都还行.就是其中一个题目是说,监听数据库变化的一个接口,这个接口麦洛用的比较少,所以没有答上来,就是ContentObserver这个接口.

ContentObserver

在android中经常会用到改变数据库内容后再去使用数据库更新的内容,很多人会重新去query一遍,但是这样的问题就是程序会特别占内存,而且有可能会搂关cursor而导致程序内存未释放等等。其实android内部提供了一种ContentObserver的东西来监听数据库内容的变化。

这个监听短信数据库变化的例子可能能帮助理解这个原理。

http://www.cnblogs.com/lemonczy/archive/2011/11/18/2253662.html

涉及到的一个问题就是如何接收指定号码的短信,然后拦截下来,让系统不通知给用户,原理就是发现短信数据库发生变化后,就将这条短信的状态置为已读,具体见如下链接:

http://hi.baidu.com/gaogaf/item/2819df13c578f96e70d5e84b

 

这一轮的题目:

1.以前做过项目的,画个简单的架构图,介绍之前的项目;

2.项目中遇到的问题,以及怎么解决的.麦洛就举了之前写的上拉下拉这个控件的例子

3.Android Activity生命周期

4.Adapter中View重用的问题

就回忆起这么多了

第一轮讨论的话题是项目比较多,都是介绍项目经验之类的.

这一关讨论了一个多小时,顺利通过.

 

第二轮还是面试,是另外一个工程师来面试,就是面试官交换面试.

这一轮难度其实也不是特别大,但是因为问到几个麦洛没有做过的东西,被卡住了一下.

能回忆起的题目有:

1.介绍Http协议

2.Http协议实现多线程下载并支持断点续传,以及服务端是怎么支持的?

3.面向对象的理解,面向对象的原则–开发封闭原则的理解

4.android wap与net的两种连接方式

5.项目中的一些问题

这一轮主要是一些java基础知识,以及项目中的一些问题

两轮下来一个上午就过去了.麦洛也感觉精疲力尽了.然后就是吃午饭,等待第三轮面试了.

 

第三轮是比较轻松了.这一轮的面试应该是部门老大级别的了.随便聊聊,说说为何离职,以及有什么问题需要问的,大概半个小时就搞定了.

然后就回去等通知,要1周到两周时间.OMG!麦洛可不想等那么久啊

 

从笔试到面试总体感觉其实不是特别的难,只要做好准备平时注意积累,很多问题都是很好回答的.

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: