第一篇:个人面试android面试总结.
本人面试过程部分有价值的题目摘录如下:仔细想想答案都很简单
不全但是有一定的代表性
去的几家公司都是外包,项目紧急不会去看你项目上的那些小应用,能干活就行。
外包IBM:考得很基础,但是没真正的经验平时不会去记
1>dip设备独立像素
这个和设备硬件有关,一般为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素
480*320(160dpi):10*10dip = 10*10px 840*480(240dpi): 10*10dip = 15*15px Pixs = dips *(density / 160)2> WVGA、HVGA和QVGA 屏幕标准
3>屏幕适配.(实际项目中不会提供三套drawable图片资源)Android对于屏幕适配的解决方案分析 图片适配:9.png 其他适配: 1.Android将UI设计部分和代码逻辑部分分离开来,独立成一个XML文件,方便开发人员修改。
2.使用的长度单位是密度而不是像素。像素是自适应的大敌,固定了绝对坐标的像素值,就别想再好好安心地让它自个儿适应屏幕了。Android推荐使用dp作为长度单位。dp会根据手机的分辨率而自动调整大小。3.布局器功能强大。Android的布局器分为五种:LinearLayout,提供水平/垂直平铺的布局器;TableLayout,提供行和 列的的布局;FrameLayout,帧布局器,提供分层的布局;AbsoluteLayout,使用绝对坐标来定义控件的位 置;RelativeLayout,布局器中的控件用相对位置来布局。布局器的大小有自适应内容和与父控件相同两种。这些布局器完全可以承担起程序中基本 的布局要求。
4.Android中有一个密度的概念,表示每英寸有多少个显示点。当没有与手机分辨率相匹配的屏幕适配方案时,会根据手机的屏幕密度选取一个最接近的屏幕密度的适配方案,这样会让图片的失真达到最低。
5> Include使用与传参 组件复用
6>横屏竖屏切换处理
主要是切换时生命周期方法(结合你在项目中的应用)
7>应用程序放在真机什么目录下 以及常见的目录有哪些 系统应用程序 system/app 自己安装的应用 data/app
8> 你们项目需求怎么做的,请描述下
奥信面试:(主要是他们公司项目中的东西,演示功能问怎么实现)ImageView点击后更改背景色
Xml:selector + item
下载后回到刚刚的页面更新页面ListView对应Item的图标
1.startActivityForResult
2.下载完成发送广播
从网络上下载大图片
(可以作为项目难点陈述)ListView异步加载图片 +缓存()
Handler + 线程池 + 开启内存缓存(SoftReference)
Handler + 线程池 + 保存文件到SD卡上
书架的实现
平时多线程用到哪些(区分两种方法的特点)Handler
AsyncTask
Canvas画图用法
自定义控件使用(很经常问到)
Android应用程序生命周期(区分与Android组件的生命周期)被请求时实例化,系统内存不足被清理
Activity的启动模式
Standard singleTop singleTask singleInstance 网络7层模型 Tcp/ip(分别位于那一层)
应用层 表示层 会话层 传输层
网络层 数据链路层 物理层
常用设计模式(非重点 能答更好)简单工厂,抽象工厂方法,代理模式,…
华讯财经: 主要是简历上写的项目
由于项目都从头到尾敲的没啥好讲的属于闲聊吹牛的公司。
支付宝面试过程(电面主要问j2ee):
Activity中onCreate(),onStart()方法都会执行为什么不合并为一个方法
Activity的onCreate()中启动Service,那么onCreate()中的代码与Service中onStart()方法中的代码所在线程关系
耗时操作问题(主要考虑线程关系)
项目中的难点
完成!!
Android中MVC设计模式的理解
UI布局相关
一口气说出有哪几种布局(每种布局特点)对Http协议的理解 post/get特点 TCP/ip 多线程上传下载
第二篇:Android面试总结
1.activity的生命周期。
activity主要生命周期的方法说明:
onCreate(Bundle savedInstanceState):创建activity时调用。设置在该方法中,还以Bundle的形式提供对以前储存的任何状态的访问!
onStart():activity变为在屏幕上对用户可见时调用。
onResume():activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。
onPause():activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场,压栈吧!
onStop():activity被停止并转为不可见阶段及后续的生命周期事件时调用。
onRestart():重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。
onDestroy():activity被完全从系统内存中移除时调用,该方法被
2.横竖屏切换时候activity的生命周期
3.android中的动画有哪几类,它们的特点和区别是什么
两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
{Android的animation由四种类型组成 XML中
alpha 渐变透明度动画效果 scale渐变尺寸伸缩动画效果
translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果
JavaCode中
AlphaAnimation ScaleAnimation 渐变透明度动画效果 渐变尺寸伸缩动画效果
TranslateAnimation画面转换位置移动动画效果 RotateAnimation 画面转移旋转动画效果
Android动画模式
Animation主要有两种动画模式: 一种是tweened animation(渐变动画)XML中 JavaCode alpha AlphaAnimation scaleScaleAnimation
一种是frame by frame(画面转换动画)XML中 JavaCode translate TranslateAnimation rotate RotateAnimation
}
4.handler机制的原理:
andriod提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。
1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。
2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息。
3)Message Queue(消息队列):用来存放线程放入的消息。
4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue
5.说说activity,intent,service是什么关系
[教程] 新手入门之应用解析(Activity、Intent、Service等)
Activity, Intent, Service, IntentReceiver, ContentProvider 一般刚开始学Android时对这些基本的东西还是要明确一下的,下面的东西摘自新版android开发教程里面的,介绍比较简单,希望能够有帮助。
一、Activity
Activity是android中最今本的应用程序组件,应用程序中,一个Activity通常是一个单独的屏幕,每一个Activity都被实现为一个单独的类,这些类都是从Activity基类中继承来的,Activity类会显示由视图控件组成的用户接口,并对视图控件的事件做出响应。一个复杂的应用是由多个屏幕显示组成。这里每一个屏幕的显示就是一个Activity,从一个屏幕的显示到另一个新屏幕的显示并完成相关的事件是很容易实现的,这些屏幕Activity是相互交互的,他们直接通信从而完成相应的功能。当一个新的屏幕打开时,前一个屏幕将会暂停,并保存在历史堆栈中,用户可以从历史堆栈中返回前一个屏幕。当屏幕不再使用时,我们可以从历史堆栈中删除它,默认情况下,Android会保留从主屏幕到每一个应用的运行屏幕。Activity代表一个用户所能看到的屏幕,Activity主要是处理一个应用的整体性工作,如监听系统事件(按键、触摸屏幕等)、为用户显示指定的View、启动其他Activity等,其他的Activity继承Activity基类后,通过重写父类的方法来实现各种功能。
二、Intent
Android专有类Intent的调用是用来进行架构屏幕之间的切换的。Intent是描述应用想要做什么。Intent数据结构中两个最重要的部分是动作和动作对应的数据,典型的动作类型有:Main(活动的门户)、View、Pick、Edit等,而动作对应的数据是应URI的形式进行表示的,这里的URI就相当于这些动作的ID,一个动作对应一个动作数据。Android使用了Intent这个特殊类,实现在屏幕与屏幕之间的移动。Intent类用用来描述一个应用将会做什么事情。与之有关系的一个类叫IntentFilter类,相对于intent是一个有效的做事情的请求,一个IntentFilter则用于描述一个Activity(或者IntentReceiver)能够操作那些intent。一个Activity如果要显示一个人的联系方式时,需要事先声明一个IntentFilter,这个IntentFilter要知道怎么去处理View动作和表示一个人的URI,IntentFilter需要AndroidManifest.xml中 定义,如AndroidManifest.xml中的:
通过解析各种intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,activity 将会调用startActivity(IntentmyIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter 中查找,找到最匹配myIntent 的Intent 对应的activity。新的activity 接收到myIntent 的通知后,开始运行。当startActivity 方法被调用将触发解析myIntent 的动作,这个机制提供了两个关键好处:
A、Activities 能够重复利用从其它组件中以Intent 的形式产生的一个请求;
B、Activities 可以在任何时候被一个具有相同IntentFilter 的新的Activity 取代。
三、IntentReceiver
当你希望你的应用能够对一个外部的事件(如当电话呼入时,或者数据网络可用时,或者到了晚上时)做出响应,你可以使用一个IntentReceiver。虽然IntentReceiver 在感兴趣的事件发生时,会使用NotificationManage通知用户,但它并不能生成一个UI。IntentReceiver 在AndroidManifest.xml 中注册,但也可以在代码中使用Context.registerReceiver()进行注册。当一个intentreceiver 被触发时,你的应用不必对请求调用intentreceiver,系统会在需要的时候启动你的应用。各种应用还可以通过使用Context.broadcastIntent()将它们自己的intentreceiver 广播给其它应用程序。
四、Service
一个Service 是一段长生命周期的,没有用户界面的程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。
五、Content Provider
Android 应用程序能够将它们的数据保存到文件、SQLite 数据库中,甚至是任何有效的设备中。当你想将你的应用数据与其它的应用共享时,内容提供器就可以发挥作用了。因为内容提供器类实现了一组标准的方法,从而能够让其它的应用保存或读取此内容提供器处理的各种数据类型。数据是应用的核心。在Android 中,默认使用鼎鼎大名的SQLite 作为系统DB。但是在Android 中,使用方法有点小小的不一样。在Android 中每一个应用都运行在各自的进程中,当你的应用需要访问其他应用的数据时,也就需要数据在不同的虚拟机之间传递,这样的情况操作起来可能有些困难(正常情况下,你不能读取其他的应用的db 文件),ContentProvider 正是用来解决在不同的应用包之间共享数据的工具。
1、所有被一个Android 应用程序创建的偏好设置,文件和数据库都是私有的。
6.android中线程与线程,进程与进程之间如何通信
1、一个 Android 程序开始运行时,会单独启动一个Process。
默认情况下,所有这个程序中的Activity或者Service都会跑在这个Process。
默认情况下,一个Android程序也只有一个Process,但一个Process下却可以有许多个
Thread。
2、一个 Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。
一个Android程序创建之初,一个Process呈现的是单线程模型--即Main Thread,所有的任务都在一个线程中运行。所以,Main Thread所调用的每一个函数,其耗时应该越短越好。而对于比较费时的工作,应该设法交给子线程去做,以避免阻塞主线程(主线程被阻塞,会导致程序假死现象)。
3、Android单线程模型:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。如果在子线程中直接修改UI,会导致异常。
Android中Handler、Thread(HanlderThread)、Runnable之间的关系
首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。而Runnable是一个接口,Thread是Runnable的子类。所以说,他俩都算一个进程。HandlerThread顾名思义就是可以处理消息循环的线程,他是一个拥有Looper的线程,可以处理消息循环。与其说Handler和一个线程绑定,不如说Handler是和Looper一一对应的。最后需要说明的是,在UI线程(主线程)中: mHandler=new Handler();mHandler.post(new Runnable(){ void run(){ //执行代码...} });这个线程其实是在UI线程之内运行的,并没有新建线程。
常见的新建线程的方法是: Thread thread = new Thread();thread.start();HandlerThread thread = new HandlerThread(“string”);thread.start();
7.widget相对位置的完成在antivity的哪个生命周期阶段实现
onStart
8.说说mvc模式的原理,它在android中的运用 : MVC(Model_view_contraller)”模型_视图_控制器”。MVC 应用程序总是由这三个部分组成。Event(事件)导致 Controller改变 Model 或View,或者同时改变两者。只要 Controller改变了 Models 的数据或者属性,所有依赖的 View 都会自动更新。类似的,只要 Controller改变了 View,View会从潜在的 Model 中获取数据来刷新自己。
9.说说在android中有哪几种数据存储方式
在Android中,可供选择的存储方式有SharedPreferences、文件存储、SQLite数据库方式、内容提供器(Content provider)和网络
10.android中有哪几种解析xml的类,官方推荐哪种?以及它们的原理和区别
DOM、SAX(Simple API for XML)、XmlPullParser
11.listview你是怎么优化的。
Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源?
先看看下面的代码:
public View getView(int position, View convertView, ViewGroup parent){
View item = mInflater.inflate(R.layout.list_item_icon_text, null);
((TextView)item.findViewById(R.id.text)).setText(DATA[position]);
((ImageView)item.findViewById(R.id.icon)).setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);
return item;
}
怎么样?如果超过1000000项时,后果不堪设想!您可千万别这么写!
我们再来看看下面的代码:
public View getView(int position, View convertView, ViewGroup parent){
if(convertView == null){
convertView = mInflater.inflate(R.layout.item, null);
}
((TextView)convertView.findViewById(R.id.text)).setText(DATA[position]);
((ImageView)convertView.findViewById(R.id.icon)).setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);
return convertView;
}
怎么样,上面的代码是不是好了很多?系统将会减少创建很多View。性能得到了很大的提升。
还有没有优化的方法呢? 答案是肯定的:
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder;
if(convertView == null){
convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
holder.text =(TextView)convertView.findViewById(R.id.text);
holder.icon =(ImageView)convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder =(ViewHolder)convertView.getTag();
}
holder.text.setText(DATA[position]);
holder.icon.setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);
return convertView;
}
static class ViewHolder {
TextView text;
ImageView icon;
}
怎么样?会不会又给您的系统带来很大的提升呢?看看下面三种方式的性能对比图您就知道了!
12.view的刷新
Android中对View的更新有很多种方式,使用时要区分不同的应用场合。我感觉最要紧的是分清:多线程和双缓冲的使用情况。
1.不使用多线程和双缓冲
这种情况最简单了,一般只是希望在View发生改变时对UI进行重绘。你只需在Activity中显式地调用View对象中的invalidate()方法即可。系统会自动调用 View的onDraw()方法。
2.使用多线程和不使用双缓冲
这种情况需要开启新的线程,新开的线程就不好访问View对象了。强行访问的话会报:android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views.这时候你需要创建一个继承了android.os.Handler的子类,并重写handleMessage(Message msg)方法。android.os.Handler是能发送和处理消息的,你需要在Activity中发出更新UI的消息,然后再你的Handler(可以使用匿名内部类)中处理消息(因为匿名内部类可以访问父类变量,你可以直接调用View对象中的invalidate()方法)。也就是说:在新线程创建并
发送一个Message,然后再主线程中捕获、处理该消息。
3.使用多线程和双缓冲
Android中SurfaceView是View的子类,她同时也实现了双缓冲。你可以定义一个她的子类并实现SurfaceHolder.Callback接口。由于实现SurfaceHolder.Callback接口,新线程就不需要android.os.Handler帮忙了。SurfaceHolder中lockCanvas()方法可以锁定画布,绘制玩新的图像后调用unlockCanvasAndPost(canvas)解锁(显示),还是比较方便得。
13.IPC及原理
什么是Android操作系统,所谓的Android:是基于Linux内核的软件平台和操作系统,早期由Google开发,后由开放手机联盟Open Handset Alliance)开发。
Linux系统中进程间通信的方式有:socket, named pipe,message queque, signal,share memory。Java系统中的进程间通信方式有socket, named pipe等。android应用程序理所当然可以应用JAVA的IPC
机制实现进程间的通信,取而代之的是Binder通信。Google为什么要采用这种方式呢,这取决于Binder通信方式的高效率。Binder通信是通过linux的binder driver来实现的。Binder通信操作类似线程迁移(thread migration),两个进程间IPC看起来就象是一个进程进入另一个进程执行代码然后带着执行的结果返回。Binder的用户空间为每一个进程维护着一个可用的线程池,线程池用于处理到来的IPC以及执行进程本地消息,Binder通信是同步而不是异步。Android中的Binder通信是基于Service与Client的,所有需要IBinder通信的进程都必须创建一个IBinder接口。
系统中有一个进程管理所有的system service,Android虚拟机不允许用户添加非授权的System service,当然现在源码开发了,我们可以修改一些代码来实现添加底层system Service的目的。
对用户程序来说,我们也要创建server,或者Service用于进程间通信,这里有一ActivityManagerService管理JAVA应用层所有的service创建与连接(connect)。disconnect,所有的 Activity也是通过这个service来启动,加载的。ActivityManagerService也是加载在Systems Servcie中的。
Android虚拟机启动之前系统会先启动service Manager进程,service Manager打开binder驱动,并通知binder kernel驱动程序这个进程将作为System Service Manager。然后该进程将进入一个循环,等待处理来自其他进程的数据。用户创建一个System service后,通过defaultServiceManager得到一个
远程ServiceManager的接口。
通过这个接口我们可以调用 addService函数将System service添加到Service Manager进程中,然后client可以通过getService获取到需要连接的目的Service的IBinder对象。这个IBinder是 Service的BBinder在binder kernel的一个参考,所以service IBinder 在binder kernel中不会存在相同的两个
IBinder对象。
每一个Client进程同样需要打开Binder驱动程序。对用户程序而言,我们获得这个对象就可以通过binder kernel访问service对象中的方法。Client与Service在不同的进程中,通过这种方式实现了类似线程间的迁移的通信方式,对用户程序而言当调用Service返回的IBinder接口后,访问Service中的方法就
如同调用自己的函数。实现接口时有几个原则:
抛出的异常不要返回给调用者.跨进程抛异常处理是不可取的。IPC调用是同步的。如果你知道一个IPC服务需要超过几毫秒的时间才能完成地话,你应该避免在Activity的主线程中调用。
也就是IPC调用会挂起应用程序导致界面失去响应.这种情况应该考虑单起一个线程来处理,能在AIDL接口中声明静态属性。IPC的调用步骤:
1.声明一个接口类型的变量,该接口类型在.aidl文件中定义。
2.实现ServiceConnection。
3.调用ApplicationContext.bindService(),并在ServiceConnection实现中进行传递.4.在ServiceConnection.onServiceConnected()实现中,你会接收一个IBinder实例(被调用的Service).调用 YourInterfaceName.Stub.asInterface((IBinder)service)将参数转换YourInterface类型。
5.调用接口中定义的方法。你总要检测到DeadObjectException异常,该异常在连接断开时被抛
出。它只会被远程方法抛出。
6.断开连接,调用接口实例中的ApplicationContext.unbindService()
14.Android多线程
在Android下面也有多线程的概念,在C/C++中,子线程可以是一个函数,一般都是一个带有循环的函数,来处理某些数据,优先线程只是一个复杂的运算过程,所以可能不需要while循环,运算完成,函数结束,线程就销毁。对于那些需要控制的线程,一般我们都是和互斥锁相互关联,从而来控制线程的进度,一般我们创建子线程,一种线程是很常见的,那就是带有消息循环的线程。
消息循环是一个很有用的线程方式,曾经自己用C在Linux下面实现一个消息循环的机制,往消息队列里添加数据,然后异步的等待消息的返回。当消息队列为空的时候就会挂起线程,等待新的消息的加入。这是一个很通用的机制。在Android,这里的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个Looper,这个事android的新概念。我们的主线程(UI线程)就是一个消息循环的线程。针对这种消息循环的机制,我们引入一个新的机制Handle,我们有消息循环,就要往消息循环里面发送相应的消息,自定义消息一般都会有自己对应的处理,消息的发送和清除,消息的的处理,把这些都封装在Handle里面,注意Handle只是针对那些有Looper的线程,不管是UI线程还是子线程,只要你有Looper,我就可以往你的消息队列里面添加东西,并做相应的处理。
但是这里还有一点,就是只要是关于UI相关的东西,就不能放在子线程中,因为子线程是不能操作UI的,只能进行数据、系统等其他非UI的操作。
15.Android为什么要设计4大组件,他们之间的联系,不设计行不行(主要是为了实现MVC模式,然而java中最难的模式也是这个,很少有产品能将这个模式做得很好【Technicolor 的面试官问的这个】
16,service的周期,activity的周期,谈下你对Android内部应用的了解,比如他做电话,以及联系人等等应用。框架层有很多东西还是多看看,熟悉Android怎么做的,不管你做应用程开发还是应用框架层开发很有好处的。在就是你项目经验,突出你遇到什么难点,然后是怎么解决的!尽量将每个技术点凸显出来,当然面试官有时候会为了体现你是否真正做过,他会问你,你在这个应用中做那个模块,用了多少个类之类的问题。偶尔有的面试官会问你,你用过Android自带的单元测试了没,怎么用的?当然我面试过很多家单位,有 的是做平板,手机,数字电视,有的是做出个erp之类的客户端等等,出于前面的三个,基本上都是将Android的全部改掉,如果真正要做Android的话,大家要学的还很多。总之,一句话,什么样的面试官都有,去面试的时候要做好一切心理准备,不管是技术还是基础都得扎实。一个人的交谈能力也很重要,总之不是非常标准的普通话,最起码你说的得让别人听得懂,而且得把面试官讲得非常彻底,这样你获得offer的机会更大,谈工资也有优势~~当然曾经一家公司的面试官跟我说过,技术是不惜钱的,只要你有能力,多少钱他都请。_ 确实,来北京求职期间,牛人真的很多,而且有的面试官也非常好,给了很多忠肯的意见。并不是每个面试官都特想为难你的~最主要的还是想知道你的技术,因为他们也是吃公司饭,得为这个负责。
Basic:
1.基本的UI控件和布局文件
2.UI配套的Adapter的使用
3.Activity, Intent,Service,broadCast Receiver他们的生命周期管理熟悉一下
4.操作手机上的数据库SQLite应用
17.为什么看好 Android
对于开发人员来讲:上手容易,入门简单,api齐全,适应性强 对于用户来讲:软件丰富,系统稳定,功能齐全 对于开发商来讲:可定制性高,开发成本低,免费。
18.现在在公司做哪些工作(关于 Android)错
手机软件开发一般是分平台的,目前比较火的是iPhone和Android手机平台上的软件开发。
一般大学计算机毕业,都会学过相应的编程语言,比如C或C++,有这两种语言做为基础,相信你可以快速去掌握其他的编程语言。
如果你想从事iPhone平台上的开发就要去学习Obj-C语言,想从事Android平台上的就学习Java语言,除了掌握语言以后,还有的就是不同平台上的开发工具。
如果你想从事手机软件开发方面的工作的话,我建议你可以选择一家专业的移动互联网开发培训学校,参加专业的培训能帮助你更系统更扎实的掌握目前最先进的技术
19.Android 的框架以及一些基础知识
20.Android 一些方面的领悟(如Android框架的 IoC特性,View System 的状态机机制等)
21.对多线程的运用和理解,及多线程之间handle的传值。
22.对android 虚拟机的理解,包括内存管理机制垃圾回收机制。
23.framework工作方式及原理,Activity是如何生成一个view的,机制是什么。
24.android本身的一些限制,不如apk包大小限制,读取大文件时的时间限制。
25.Linux中跨进程通信的集中方式
1.socket;
2.name pipe命名管道; 3.message queue消息队列; 4.singal信号量;
5.share memory共享内存;
26.dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念
DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。
27.sim卡的EF 文件有何作用
sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本 身可以有自己的操作系统,EF就是作存储并和手机通讯用的
28.AT命令的User case的概念
1、Use Case的作用:
我个人认为Use Case仅仅用来反映用户需求,并且在对象分析过程中,能够起到一个查漏补缺的作用。但是使用“先确定Use Case,再指认对象”实在是一种愚蠢的方法(恕我直言)。我个人认为,指认对象使用Yourdon在《Objuect Oriented Analysis》中提到的使用CheckList的方法在实践中是比较实用的。我近来读到的几本书,也印证了我的想法。就我我个人在实践中的经验,使用“首先确定Use Case”策略,非常容易导致分析员滑入“功能分解”的泥沼。而且从Use Case来导出对象将导致拙劣的分析模型。
2、Use Case之间的关系:
UML 1.3中,Use Case之间的关系只有3种,Generalization,Include和Extend,国内出版的关于UML的中文书有两本,一本是《UML从入门到精通》(其实应该叫做Rose入门),一本是北航的《面向对象的可视化建模技术》,后一本书在这个方面起到了很坏的作用(前一本书我没有怎么看,大概也好不到哪里去),一是使用了比较老的UML标准,比如使用了Use关系,而且对于Extend和Generalization关系的描述也很混乱,很多人受到了误导(尤其是Extend关系)。我建议有条件的网友尽量去看英文原版的著作,比如“UML三剑客”的《Unified Modeling Language User Guide》或者直接去读UML1.3的规范。(而且Use Case之间的关系是用虚线+箭头表示的,直到Rose 2000对此都没有支持)
3、Actor和Use Case之间的关系:
在UML 1.3之中,Actor和Use Case之间的关系应该是没有箭头的。虽然规范中并没有明确禁止使用箭头,但是从字句中隐含的意义来看,应该是没有箭头的,而且规范中给出的示例是没有箭头的。我认识的很多人,想当然的认为Actor和Use Case之间的关系上的箭头标示信息流向或者主/被动关系,其实这个关系仅仅表示某个Actor参与了某个Use Case。
29﹑Android 手机操作系统的四层架构?
架构框架以此从上到下:
1.Applications
(应用程序(应用层));
Android 会同一系列核心应用程序包一起发布,该应用程序包包括 email 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用 JAVA 语 言编写的。
2.Application FrameWork
(应用程序扩展层(框架));
由于 Android 的手机操作系统是,基于 Liunx 2.6 系统之上封装而成。所以开发人员可也以直接访问核心程序所使用的API框架,该核心应用程序的API框架设计简化了组件的重用,任何一个核心应用程序(模块)都暴露出它的功能作用,并且其他应用程序也都可以使用该核心应用程序(模块)的功能(不过的遵守该核心应用程序框架的安全性限制)。同样,该应用程序的重用机制也使用户方便使用应程序的相关组件。API 框架隐藏的核心应用程序是一系列的应用程序的服务和系统应用,其中包括如下:
(Android 手机中的 View 是最基本的一个 UI 类)丰富而又可扩展的视图(手机界面所显示的组件(Activity上所显示的))组件,可以用来构建应用程序
如:(视图)Views, 网格(grids), 文本框(text boxes), 按钮(button), 放置图片区(imageview),文本编辑区
(edittext), 文本显示区(textview),3.Android RunTime Libraries
(Android 系统运行库);
4.Liunx Kernel
(Android 系统最底层核心系统 Liunx)
Android 的核心系统服务依赖于 Liunx 2.6 内核,如系统安全,内存管理,进程管理,网络协议栈和驱动模型。Liunx 内核也同时作为硬件和软件栈之间的抽象层。
30、Android dvm的进程和 Linux 的进程, 应用程序的进程是否为同一个概念
DVM 指 dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。而每一个 DVM 都是在 Linux 中的一个进程,所以说可以认为是同一个概念。
31、sim卡的 EF 文件有何作用
sim 卡的文件系统有自己规范,主要是为了和手机通讯,sim 本身可以有自己的操作 系统,EF就是作存储并和手机通讯用的
32、嵌入式操作系统内存管理有哪几种,各有何特性
页式,段式,段页,用到了 MMU,虚拟空间等技术
33.什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?
嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以 处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并 控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而 android 是基于 linux 内核的,因此属于软实时。
34、一条最长的短信息约占多少 byte?
中文 70(包括标点),英文 160,160 个字节
1.2.3.4.5.6.7.8.9.10.11.12.13.14.什么是Activity?
请描述一下Activity生命周期。
两个Activity之间跳转时必然会执行的是哪几个方法。
横竖屏切换时候Activity的生命周期。
如何将一个Activity设置成窗口的样式。
你后台的Activity被系统 回收怎么办?
如何退出Activity?如何安全退出已调用多个Activity的Application?
如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
两个Activity之间怎么传递数据?
怎么让在启动一个Activity是就启动一个service?
同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?
Activity怎么和service绑定,怎么在activity中启动自己对应的service? 什么是Service以及描述下它的生命周期。
Service有哪些启动方法,有什么区别,怎样停用Service?
15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?
什么是IntentService?有何优点? 什么时候使用Service?
请描述一下Intent 和 Intent Filter。Intent传递数据时,可以传递哪些类型数据? 说说Activity,Intent,Service是什么关系。请描述一下Broadcast Receiver。
在manifest和代码中如何注册和使 用 broadcast receiver。请介绍下ContentProvider是如何实现数据共享的。请介绍下Android的数据存储方式。
为什么要用ContentProvider?它和sql的实现上有什么差别? 请介绍下Android中常用的五种布局。
谈谈UI中,Padding和Margin有什么区别?
widget相对位置的完成在antivity的哪个生命周期阶段实现。
请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。AIDL的全称是什么?如何工作?能处理哪些类型的数据?
请解释下Android程序运行时权限与文件系统权限的区别。
系统上安装了多种浏览器,能否指定某浏览器访问指定页面?
对多线程的运用和理解,及多线程之间handle的传值。对android虚拟机的理解,包括内存管理机制垃圾回收机制。
Framework工作方式及原理,Activity是如何生成一个view的,机制是什么。android本身的一些限制,比如apk包大小限制,读取大文件时的时间限。如何加载的音乐信息,如何改善其效率。
ListView如何提高其效率?
启动应用后,改变系统语言,应用的语言会改变么?
启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别?
Android程序与Java程序的区别?
Android中Task任务栈的分配。
在Android中,怎么节省内存的使用,怎么主动回收内存?
不同工程中的方法是否可以相互调用?
在Android中是如何实现判断区分通话记录中的电话状态,去电,来电、未接来电?
dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念
sim卡的EF 文件有何作用
如何判断是否有SD卡?
嵌入式操作系统内存管理有哪几种,各有何特性。
什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗? 一条最长的短信息约占多少byte? Linux中跨进程通信的几种方式。谈谈对Android NDK的理解。
谈谈Android的优点和不足之处。
Android系统中GC什么情况下会出现内存泄露呢? Android UI中的View如何刷新。简单描述下Android 数字签名。什么是ANR 如何避免它?
59.60.61.62.63.64.65.66.android中的动画有哪几类,它们的特点和区别是什么?
handler机制的原理。
android中线程与线程,进程与进程之间如何通信。
说说mvc模式的原理,它在android中的运用。
android中有哪几种解析xml的类,官方推荐哪种?以及它们的原理和区别。
DDMS与TraceView的区别? res目录有默认几项resource。android的哪个版本是一次重大的升级?
第三篇:android面试指南
1、activity的生命周期。
activity主要生命周期的方法说明:
1)onCreate(Bundle savedInstanceState):创建activity时调用。设置在该方法中,还以Bundle的形式提供对以前储存的任何状态的访问!
2)onStart():activity变为在屏幕上对用户可见时调用。
3)onResume():activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。
4)onPause():activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场,压栈吧!
5)onStop():activity被停止并转为不可见阶段及后续的生命周期事件时调用。
6)onRestart():重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。
7)onDestroy():activity被完全从系统内存中移除时调用,该方法被
2.横竖屏切换时候activity的生命周期
3.android中的动画有哪几类,它们的特点和区别是什么
4.handler机制的原理
5.说说activity,intent,service是什么关系
6.android中线程与线程,进程与进程之间如何通信
7.widget相对位置的完成在antivity的哪个生命周期阶段实现
8.说说mvc模式的原理,它在android中的运用
9.说说在android中有哪几种数据存储方式
10.android中有哪几种解析xml的类,官方推荐哪种?以及它们的原理和区别 一,listview你是怎么优化的。
二,view的刷新,之前说过
三,IPC及原理
四,Android多线程
五,Android为什么要设计4大组件,他们之间的联系,不设计行不行(主要是为了实现MVC模式,然而java中最难的模式也是这个,很少有产品能将这个模式做得很好【Technicolor的面试官问的这个】
六,service的周期,activity的周期,谈下你对Android内部应用的了解,比如他做电话,以及联系人等等应用。框架层有很多东西还是多看看,熟悉Android怎么做的,不管你做应用程开发还是应用框架层开发很有好处的。
在就是你项目经验,突出你遇到什么难点,然后是怎么解决的!尽量将每个技术点凸显出来,当然面试官有时候会为了体现你是否真正做过,他会问你,你在这个应用中做那个模块,用了多少个类之类的问题。
偶尔有的面试官会问你,你用过Android自带的单元测试了没,怎么用的?当然我面试过很多家单位,有的是做平板,手机,数字电视,有的是做出 个erp之类的客户端等等,出于前面的三个,基本上都是将Android的全部改掉,如果真正要做Android的话,大家要学的还很多。
总之,一句话,什么样的面试官都有,去面试的时候要做好一切心理准备,不管是技术还是基础都得扎实。一个人的交谈能力也很重要,总之不是非常标准 的普通话,最起码你说的得让别人听得懂,而且得把面试官讲得非常彻底,这样你获得offer的机会更大,谈工资也有优势~~当然曾经一家公司的面试官跟我 说过,技术是不惜钱的,只要你有能力,多少钱他都请。_
确实,来北京求职期间,牛人真的很多,而且有的面试官也非常好,给了很多忠肯的意见。并不是每个面试官都特想为难你的~最主要的还是想知道你的技术,因为他们也是吃公司饭,得为这个负责。
Basic:
1.基本的UI控件和布局文件
2.UI配套的Adapter的使用
3.Activity, Intent,Service,broadCast Receiver他们的生命周期管理熟悉一下
4.操作手机上的数据库SQLite应用
Advanced_1:
1.为什么看好 Android
2.现在在公司做哪些工作(关于 Android)
3.Android 的框架以及一些基础知识
4.Android 一些方面的领悟(如Android框架的 IoC特性,View System 的状态机机制等)
Advanced_2:
1.对多线程的运用和理解,及多线程之间handle的传值。
2.对android 虚拟机的理解,包括内存管理机制垃圾回收机制。
3.framework工作方式及原理,Activity是如何生成一个view的,机制是什么。
4.android本身的一些限制,不如apk包大小限制,读取大文件 时的时间限制。
5.Linux中跨进程通信的集中方式
Android_4:
1.dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念
2.sim卡的EF 文件有何作用
3.AT命令的User case的概念
4.嵌入式操作系统内存管理有哪几种,各有何特性
5.什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?
6.一条最长的短信息约占多少byte?
补充:
近期很多公司招聘Android程序员,就一些常见的Android面试基础题做下总结,看看你能做出多少道?
1.Intent的几种有关Activity启动的方式有哪些,你了解每个含义吗? 这里Android123提示大家,Intent的一些标记有
FLAG_ACTIVITY_BROUGHT_TO_FRONT、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS、FLAG_ACTIVITY_MULTIPLE_TASK和 FLAG_ACTIVITY_NEW_TASK 等。每种含义大家看SDK文档和具体跑下这样你的记忆会更深刻些。
2.Activity和Task的启动模式有哪些? 每种含义是什么?
有关在AndroidManifest.xml中的android:launchMode定义,主要有standard、singleTop、singleTask和singleInstance,同时对于android:taskAffinity这些问题大家也要了解,Android开发网在 以前的文章中讲过,不过很多开发者仍然不是很清楚,这些基础问题我们以后仍然会再次总结。
3.通过Intent传递一些二进制数据的方法有哪些?
1).使用Serializable接口实现序列化,这是Java常用的方法。
2).实现Parcelable接口,这里Android的部分类比如Bitmap类就已经实现了,同时Parcelable在Android AIDL中交换数据也很常见的。
4.能说下Android应用的入口点吗?
在Google的虚拟机中Application实例中已经实现了main方法,有关具体的Application介绍可以参考 Android程序的入口点是什么,不是Main()吗
5.Java基础问题,说说HashSet和HashTable的区别?
这个相信Java程序员都知道HashSet相对于HashMap就是不能存放重复的数据,对于HashTable来说,存放的数据不能出现key或value为null这样的情况。
6.Java基础问题,用Java的集合类写下广度优先搜索.这个属于基础数据结构问题,通过队列处理一层一层,相对于深度优先的栈处理方式来说更实用一些。
7.Android都有哪些XML解析器,都熟练掌握吗?
这里XmlPull、SAX和DOM相信做过Web开发的都已经滚瓜烂熟了。
8.SQLite支持事务吗? 添加删除如何提高性能?
SQLite作为轻量级的数据库,比MySQL还小,但支持SQL语句查询,提高性能可以考虑通过原始经过优化的SQL查询语句方式处理。
9.Android Service和Binder、AIDL你都熟练吗?
作为Android重要的后台服务,这些每个Android开发者都应该掌握,这也算是和Java SE最大的不同了,具体的实例大家可以查看Android音乐播放器的源代码Music.git中的,这里不再赘述。
10.你用过哪款Android手机,有哪些优点和不足,相对于iPhone或Symbian又有哪些优缺点?
把这个作为面试题也是考察下,可以大概了解到它对Android的了解程度,多移动开发的认识。
转自:
第四篇:Android 个人总结
Android 个人总结
通过本学期的的学习,我知道了android是由google开发的一款手机平台,android的基本架构是基于linux内核,由内核向外的反别为库和应用架构,然后就是我们手机上的可视化应用了,android是一个系统,但是并非是操作系统。
在开发之前,我们首先要搭建一个开发环境,用的是java编程的eclipse,我们从网上下载sdk包,里面包含了android开发常用的工具,android既是手机操作系统,也是跨平台(windows,mac,linux)的开发工具,虽然是使用linux为核心的平台,但是你可以在很多地方感觉到类似做网页开发的感觉。具有本身独特的进程管理方式,完整的上网功能,搭配了google地图,Gmail等服务,即使像我们这些尚未入门的开发者也能开发出自己理想的应用程序来。
刚开始的时候,得知android开发需要使用java语言心里了小小的畏惧,但随着学习的渐渐深入就会发现android平台只是使用了java的语法而已,所以,即使我们不具备java语言开发的基础,也可以放心地加入到android开发当中来。
第一节课,老师向我们详细介绍了开发界面右边窗口的内容,首先是src目录,里面包含了我们开发界面的java文件以及各种我们创建的类组成的开发包。然后是gen目录,里面涵盖的是系统的类文件(如R.java,Buidconfig.java)与android系统的依赖文件(Android Dependencies)。再下来是assets(用户资源文件),里面文件的访问是通过文件路径的形式调用。Bin文件里面包括了res资源文件,android项目配置文件androidmanifest以及我们开发之后产生的后缀为.apk的应用程序文件。Res是系统资源目录,我们要用到得图片资源,颜色资源,字符串资源都在里面。一般的开发都要用到界面文件也包含在里面。
Eclipse具有史上超豪华的手机控件,包括常用的文本文件,文本框,按钮,进度条等,还有特殊形式的email,gmail文本框,在开发过程当中,很多控件都是以拖拉的形式拖拽到开发界面上,大大地减少了我们开发时候的工作量,在配置文件中,我们可以添加各种各样的系统动作,以及系统服务,还可以建立用户自己的文件库。
当我们开发完成的时候,就可以运行手机模拟器,在上面,我们可以像操作当今市场上最流行的android手机一样操作我们的模拟器,可视化的界面可以我们随心所欲地下载我们开发的应用程序到模拟器上,就可以实现步步跟进,想要修改哪里就一目了然了,模拟器上人性化的设计界面大大方便了用户与机器之间的交流。如果我们拥有一部android系统的手机的话,就可以把自己开发的应用程序下到手机上,看到自己的成果,顿生成就感,真的很有乐趣。也加大了我对学习android的信心。
总体来说,学习android就要不怕困难,迎难而上。Android不久可以满足自己的成就感,还可以在未来的生活中找到自己理想的工作。用别人准备好的各种类,包来开发出自己独特风格的应用程序,既省时又省力,何乐而不为呢。在这里,要感谢曾老师对我的栽培和关怀,他教给了我知识,使我在学习的时候少走了很多的弯路,也增加了我对未来工作的信心。
第五篇:面试技巧总结(个人总结)
银行面试技巧总结
问题一:“请你自我介绍一下”(3分钟)
1、这是面试的必考题目。
2、介绍内容要与个人简历相一致。
3、要切中要害,不谈无关、无用的内容。
4、条理要清晰,层次要分明。
5、事先最好以文字的形式写好背熟。
问题二:“谈谈你的家庭情况”
1、况对于了解应聘者的性格、观念、心态等有一定的作用,这是招聘单位问该问题的主要原因。
2、简单地罗列家庭人口。
3、宜强调温馨和睦的家庭氛围。
4、宜强调父母对自己教育的重视。
5、宜强调各位家庭成员的良好状况。
6、宜强调家庭成员对自己工作的支持。
7、宜强调自己对家庭的责任感。
问题三:“你有什么业余爱好?”
1、业余爱好能在一定程度上反映应聘者的性格、观念、心态,这是招聘单位问该问题的主要原因。
2、最好不要说自己没有业余爱好。
3、不要说自己有那些庸俗的、令人感觉不好的爱好。
4、最好不要说自己仅限于读书、听音乐、上网,否则可能令面试官怀疑应聘者性格孤僻。
5、最好能有一些户外的业余爱好来“点缀”你的形象。
问题四:“你最崇拜谁?”
1、最崇拜的人能在一定程度上反映应聘者的性格、观念、心态,这是面试官问该问题的主要原因。
2、不宜说自己谁都不崇拜。
3、不宜说崇拜自己。
4、不宜说崇拜一个虚幻的、或是不知名的人。
5、不宜说崇拜一个明显具有负面形象的人。
6、所崇拜的人人最好与自己所应聘的工作能“搭”上关系。
7、最好说出自己所崇拜的人的哪些品质、哪些思想感染着自己、鼓舞着自己。银行面试问题五:“你的座右铭是什么?”
思路:
1、座右铭能在一定程度上反映应聘者的性格、观念、心态,这是面试官问这个问题的主要原因。
2、不宜说那些医引起不好联想的座右铭。
3、不宜说那些太抽象的座右铭。
4、座右铭最好能反映出自己某种优秀品质。
5、参考答案——“只为成功找方法,不为失败找借口”
银行面试问题六:“谈谈你的缺点”
思路:
1、不宜说自己没缺点。
2、不宜把那些明显的优点说成缺点。
3、不宜说出严重影响所应聘工作的缺点。
4、不宜说出令人不放心、不舒服的缺点。
5、可以说出一些对于所应聘工作“无关紧要”的缺点,甚至是一些表面上看是缺点,从工作的角度看却是优点的缺点。
银行面试问题七:“谈一谈你的一次失败经历”
思路:
1、不宜说自己没有失败的经历。
2、不宜把那些明显的成功说成是失败。
3、不宜说出严重影响所应聘工作的失败经历,4、所谈经历的结果应是失败的。
5、宜说明失败之前自己曾信心白倍、尽心尽力。
6、说明仅仅是由于外在客观原因导致失败。
7、失败后自己很快振作起来,以更加饱满的热情面对以后的工作。银行面试问题八:“你为什么选择我们公司?”
思路:
1、面试官试图从中了解你求职的动机、愿望以及对此项工作的态度。
2、建议从行业、企业和岗位这三个角度来回答。
3、参考答案——“我十分看好贵公司所在的行业,我认为贵公司十分重视人才,而且这项工作很适合我,相信自己一定能做好。”
银行面试问题十六:“您在前一家公司的离职原因是什么?”
思路:
1、最重要的是:应聘者要使找招聘单位相信,应聘者在过往的单位的“离职原因”在此家招聘单位里不存在。
2、避免把“离职原因”说得太详细、太具体。
3、不能掺杂主观的负面感受,如“太幸苦”、“人际关系复杂”、“管理太混乱”、“公司不重视人才”、“公司排斥我们某某的员工”等。
4、但也不能躲闪、回避,如“想换换环境”、“个人原因”等。
5、不能涉及自己负面的人格特征,如不诚实、懒惰、缺乏责任感、不随和等。
6、尽量使解释的理由为应聘者个人形象添彩。
7、如“我离职是因为这家公司倒闭。我在公司工作了三年多,有较深的感情。最后,同一个面试问题并非只有一个答案,而同一个答案并不是在任何面试场合都有效,关键在于应聘者掌握了规律后,对面试的具体情况进行把握,有意识地揣摩面试官提出问题的心理背景,然后投其所好。