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

各大IT公司2012校园招聘笔试面试整理

2012-04-18 12:37 766 查看
从2011年7月底从学校出来到北京找实习和工作,到现在差不多半年了。期间参加了大大小小许多家公司的校园招聘,由于自己的实力问题没能拿到一个Offer,好在运气不错,最后拿到了所在实习公司Offer,对我而言已经非常理想,我也很满意,也算是不错的收获吧。现在对参加过的一些公司的笔试、面试进行简答的整理和总结,以供大家参考。
面试中常问的非技术类问题:

1.简单介绍一下你自己。

2.对自己做个评价,优点、缺点。

3.自己做过的项目,详细介绍一下。

4.实习经历,在实习过程中遇到哪些问题,如何解决的?

5.你对公司有什么问题要问吗(对公司有什么要了解的)?

技术类的问题主要就看对技术的掌握程度和自己的综合能力了。

百度移动终端研发工程师笔试题,题量不大,2个小时,有点难度。

1.写一个字符串逆序的程序,时间复杂度和空间复杂度最低,效率越高越好。

2.实质:二叉树的层序遍历,每层的结点用单链表输出。

3.1-N(N最大32000,且未知),内存只有4K,找出其中的重复数

4.编程题,比较复杂,是个系统设计题,与《编程之美》中3.2,电话号码对应英语单词类似。

百度软件开发工程师一面问题:

1.有101个数,为[1,100]之间的数,其中一个数是重复的,如何寻找这个重复的数,其时间复杂度和空间复杂度是多少?

2.Java中抽象类与接口的区别。

3.进程与线程之间的联系与区别。(多家公司都在问,好好研究一下)

4.谈谈对设计模式的认识与理解,简单介绍一下你所知道的设计模式。(多家公司都问,Android方向面试必考的)

5.线程、多线程相关(必问)

6.Linux常用的命令,shell编程,grep命令的使用。

7.海量数据查找或者排序,有资源限制要求。(常考的)

建议:简历中对自己的专业技能要实事求是的写,突出自己的重点,不宜托大,面试官面试时提问的依据就是简历上的内容。百度的工作环境很好,做技术的员工给人的感觉就是虽然人家的技术水平很高,但是都比较谦逊。百度确实是一个不错的互联网公司。

Sina无线客户端开发工程师面试

笔试的题目和7月22日实习生的题目差不多。面试主要问了:

1.二叉树的一些基础知识。

2.Java多线程,对stop()方法的认识,如何安全的终止一个线程。

3.设计模式相关的问题

4.谈谈你对面向对象编程中继承的认识

5.排序算法

网易2012校招无线客户端开发笔试,题目不太难,比较基础。

1.面向对象编程中多态的概念,用伪代码展示出来。

2.斐波那契数列编程,效率越高越好(详见《编程之美》2.9)

3.60W长度为32的字符串一次性读入内存中,大约占用多少内存空间?

4.一个X向量n,如何求其内部的最大距离。

5.在浏览器中输入http://www.163.com,从输入到页面在浏览器中显示出来,期间发生了哪些过程,越详细越好。

6.简单介绍一下Android系统中的Activity,Service, Intent, ContentProvider组件。

7.编程解析一段josn格式内容,并在界面上显示出来。

8.英文阅读,考察英语能力。

9.网络应用分析,发挥自己的主观能动性和积累。

搜狗2012校招笔试

搜狗的题目出的很全,所有职位的题目都在一份卷子上,涉及到数据结构、网络、操作系统、算法、软件工程等多方面,根据自己所投递的职位,有针对性的选择要答的题目即可。

金山2012校园招聘笔试

为了保险,做了运维的题目,难度不大,主要是网络和Linux操作系统方面的,稍微准备一下即可。答题的时候自我感觉良好,结果没收到面试通知,被鄙视了,o(╯□╰)o

Android开发工程师面试中经常会问到的问题

1.Activity的生命周期(最基本的)

2.Android基本框架结构。

3.Android终止一个进程的方法,如何彻底终止一个程序。

4.如何改写程序,改变android手机中返回键的功能(西安TCL研究院技术面试)。

一般来说,大公司的校园招聘中首先看的还是基础,有工作或者实习经验的会重点考虑,多问一些在实习中的项目细节,同时会问一些算法,建议认真研读《编程之美》《编程珠玑》之类的书籍。首先要做好充足的准备,打好基础,其次还要看一些算法、设计的内容,一面以后的技术面问的题目都有一定的挑战性。如果有实习或者项目经历,可以大大增加校招中简历筛选通过的机率。对于互联网公司,特别喜欢海量数据的排序、搜索,网上类似的资源很多,可以看看。技术更新永无止境,要时刻保持清醒的头脑,不断学习,充实自己,才能在竞争中不被淘汰,祝大家好运,找到心仪的工作。

为什么要用ContentProvider?它和sql的实现上有什么差别?

使用ContentProvider 可以将数据共享给其他应用,让除本应用之外的应用也可以访问本应用的数据。它的底层是用SQLite 数据库实现的,所以其对数据做的各种操作都是以Sql实现,只是在上层提供的是Uri

AIDL的全称是什么?如何工作?能处理哪些类型的数据?

AIDL 是一种接口定义语言,用于约束两个进程间的通信规则,供编译器生成代码,实现Android 设备上的进程间通信。

进程之间的通信信息首先会被转换成AIDL 协议消息,然后发送给对方,对方受到 AIDL 协议消息后再转换成相应的对象。

AIDL 支持的类型包括Java 原生类型和String,List,Map,CharSequence,如果使用自定义类型,必须实现Parcelable 接口

启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别?

从主界面启动一个应用 程序是通过快捷方式直接调mainActivity 启动的,从其他应用程序调用需要隐式的通过Action 或者在 Intent 中需要使用setClasss() ,且要写明包路径.

如何判断是否有SD卡?

在程序中访问SDCard,需要申请访问SDCard 的权限

在AndroidManifest.xml 中加入访问SDCard 的权限如下:

<!--在SDCard 中创建与删除文件权限-->

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

<!-- 往SDCard 写入数据权限 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Environment.getExternalStorageState().equals(Enviroment.MEDIA_MOUNTED)

Environment.getExternalStorageState() 方法用于获取SDCard 的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。

Android系统中GC什么情况下会出现内存泄露呢?

出现情况 :

1. 数据库的 cursor 没有关闭

2. 构造 adapter 时,没有使用缓存contentview

衍生listview 的优化问题----减少创建view 的对象,充分使用contentview,可以使用一静态类来优化处理 getView 的过程

3. Bitmap 对象不使用时采用recycle() 释放内存

4. Activity 中的对象的生命周期大于Activity

调试方法: DDMS----> HEAPSIZE --->dataobject ---> [Total Size]

android 中有哪几种解析xml 的类,它们的原理和区别

DOM 解析

优点:

1. XML 树在内存中完整理存储,因此可以直接修改其数据和结构。

2. 可以通过该解析器随时访问XML树中的任何一个节点.

3. DOM 解析器的 API 在使用上也相对比较简单

缺点: 如果XML 文档体积比较大时,将文档读入内存是非常消耗系统资源的。

使用场景:

DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C标准.DOM 是以层次结构组织的节点的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能进行工作.DOM 是基于对象层次结构的。

SAX解析

优点: SAX 对内存的要求比较低,因为它让开发人员自己来决定所要处理的标签。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX 这种扩展能力得到了更好的体现。

缺点: 用SAX 方式进行XML解析时,需要顺序执行,所以很难访问到同一文档中的不同数据。此外,在基于该方式的解析编码过程也相对复杂。

使用场景: 对于含有数据量十分巨大,而又不用对文档的所有数据进行遍历或者分析的时候,使用该方法十分有效。该方法不用将整个文档读入内存,而只需读取到程序所需的文档标签即可.

Xmlpull 解析

android 提供了xmlpull api ,xmlpull 和sax 类似,是基于流(stream) 操作文件,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此xmlpull 和 sax 都比较节约内存资源,不会象DOM 那样要把所有节点以对象树的形式展现在内存中。

xmlpull 比sax 更简明,而且不需要扫描完整个流.

res目录有默认几项resource

5项, drawable-hdpi,drawable-ldpi,drawable-mdpi,layout,values

handler机制的原理

Android 提供了 Handler 和 Looper 来满足线程间的通信. Handler 先进先出原则. Looper 类用来管理特定线程内对象之间的消息交换(Message Exchange)

(1) Looper: 一个线程可以产生一个Looper 对象,由它来管理此线程里的 Message Queue(消息队列)

(2) Hanlder: 可以构造 Handler 对象来与 Looper 沟通,以便推送新消息到 Message Queue里,或者接收Looper 从Message Queue 取出所送来的消息.

说说Activity,Intent,Service是什么关系

一个 Activity 通常是一个单独的屏幕,每一个Activity 都被实现为一个单独的类,这些类都是从Activity 基类中继承来的,Activity 类会显示由视图控件组成的用户接口,并对视图控件的事件做出响应。

Intent 的调用是用业进行架构屏幕之间的切换的,Intent 是描述应用想要做什么。Intent 数据结构中两个最重要的部分是动作和动作对应的数据,一个动作对应一个动作数据。

Android Service 是运行在后台的代码,不能与用户交互,可以运行在自己的进程,也可以运行在其他应用程序进程的上下文里。需要通过某一个Activity 或者其他 Context 对象来调用.

Activity 跳转到 Activity ,Activity 启动Service ,Service 打开Activity都需要Intent 表时跳转的意图,以及传递参灵敏,Intent 是这些组件间信号传递的承载者。

请描述一下Intent 和 Intent Filter

Intent 在Android 中被翻译为"意图",也就是目的,它们是应用程序四种基本组件——————activity,service和broadcast receiver 之间互相激活的手段。在调用Intent 名称时使用结构全名时为显示调用。这种方式一般用于应用程序的内部调用,因为你不一定会知道别人写的类的全名。关于隐式Intent 的用法,这里有配置Activity 的Intent Filter

<intent-filter> <action android:name="com.example.project.SHOW_CURRENT" /></intent-filter>

在调用的时候指定Intent 的action,系统就会自动的去对比是哪个 intent-filter 符合相应的Activity,找到后就会启动Activity.

一个intent filter 是 IntentFilter 类的实例,但是它一般不出现在代码中,而是出现在androidManifest.xml文件中,以<intent-filter> 的形式(有一个例外是broadcast receiver 的intent filter 是使用Context.registerReceiver() 来动态设定的,其intent filter 也是在代码中创建的。)

一个filter 有action,data,category等字段.一个隐式intent 为了能被某个intent filter 接受,必须通过3个测试,一个intent 为了被某个组件接受,则必须通过它所有的intent filter 中的一个。

Service有哪些启动方法,有什么区别,怎样停用Service?

两种启动Service的方式Context.startService() 和 Context.bindService()。 区别为Context.startService(): Service会经历onCreate ---> onStart(如果Service还没有运行,先调用onCreate()再调用onStart(),如果Service已经运行,则只调用onStart(),所以一个Service的onStart()可能会重复调用多次);停止Service 时直接调用onDestory,如果是调用者自己直接退出而没有停止服务,Service会一直在后台运行。该Service
的调用者再启动起来后可以通过 停止服务关闭Service

Context.bindService(): Service 会经历 onCreate() ---> onBind(),onBind将返回给客户端一个IBind 接口实例,IBind 允许客户端回调服务的方法,比如得到Service 运行的状态或其他操作。这个时候把调用者(Context,例如) 会和Service绑定在一起,Context 退出了,Service 就会调用onUnbind()---->onDestory()相应退出。

停用service 使用context.stopService()

同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?

可以放在不同的Task中。需要为不同的activity 设置不同的taskaffinity 属性,启动activity 的Intent 需要包含FLAG_ACTIVITY_NEW_TASK标记

横竖屏切换时候Activity的生命周期。

1. 不设置Activity 的android:configChanges时,切屏会重新调用各个生命周期,切模屏时会执行一次,切竖屏时会执行两次

2. 设置Activity 的android:configChanges="orientation" 时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3.设置Activity 的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

如何将一个Activity设置成窗口的样式。

1、在styles.xml文件中可以新建一个如下类似Dialog的style <style name="Theme.FloatActivity" parent="android:style/Theme.Dialog" />

2、在AndroidManifest.xml中在你需要显示为窗口的activity 中添加如下属性:

android:theme="@style/Theme.FloatActiivty" 即可

也可以直接添加您对应需要展示为Dialog style 的Activity 的android:theme 属性值为android:theme="@android:style/Theme.Dialog"

如何退出Activity?如何安全退出已调用多个Activity的Application?

用finish()方法退出activity.

在2.1 之前,可以使用ActivityManager 的restartPackage()。它可以直接结束整理个应用。在使用时需要权限android.permission.RESTART_PACKAGES.

在2.2, 这个方法失效了,可使用以下几个人工的方法

1. 记录打开的Activity: 每打开一个Activity ,就记录下来。在需要退出时,关闭每一个Activity 即可。

2. 发送特定广播: 在需要结束应用时,发送一个特定的广播,每个Activity 收到广播后,关闭即可.

后台的Activity被系统回收怎么办?

android 系统会记录下回收前Activity 的状态,再次调用被回收的Activity 就要重新调用onCreate(),不同于直接启动的是这回onCreate()里包括参数savedInstanceState。
使用 savedInstanceState 可以恢复到回收前的状态
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: