关于内容:
大家好,今天我整理并总结了关于Android基础相关方面的面试必问技能点,前面的板块主要分为:
- 1.java基础板块(点我访问);
- 2.java高级板块(点我访问);
- 3.andoroid基础板块;
- 4.android高级板块.
为了能帮助大家更好的找到工作,拿到更高的薪水(12k以上)我专门写了包含了4大部分的面试精华部分,每个部分都是重要的必问点:如果大家能把我这四部分给消化了,那么你那12k以上的月薪是没什么问题的,没看过的朋友赶紧点击看看吧,好了开始我们的android基础部分技能点的学习.
Android基础
一.Android基本常识
开始android技能点的复习之前,先让我们理解Android的4层框架,为此我特意写了一篇进行详细说明(点击本句即可访问)
1.10个简单的linux命令
命令 | 解释 |
---|---|
mkdir | 创建文件夹 |
rmdir | 删除文件夹 |
cd | 进入目录 |
cd.. | 退出当前目录 |
rm | 删除文件 |
mv | 移动文件 |
cp | 复制文件 |
cat | 查看文件 |
tail | 查看文件尾部 |
mort | 分页查看文件 |
ls | 列出文件清单 |
reboot | 重启 |
date | 日期 |
cal | 显示日历 |
ps | 查看系统进程相当于windows的任务管理器 |
ipconfig查看网络信息
2.请写出android的工程结构目录
gen
生成的R文件
src
代码目录,源文件
andorid.jar
依赖的 sdk
assets
资源,资产文件,比如一些前期的资源
bin
生存的字节码,apk也在此
- libs
依赖的jar包,so
res 资源文件
drawable drawable-hdpi layout menu values
AndroidMainfest.xml:
清单文件
project.properties
项目配置信息
3.什么是ANR?怎么避免?
- 1.全称:android no responding,安卓无响应.
2.不同组件的无响应时间不同:
Activity,Service:10秒 BrodCastReceiver:5秒
3.避免方案:
1.耗时操作要放在"子线程":访问网络,网络Soket通信,查询数据库语句,计算大量复杂逻辑计算时. 2.用handler.sendMessage,RunOnUiThread,或者AsyncTask等方式更新UI. 3.(PS:耗时操作让用户等待,要给出界面上的"进度显示")
4.谈谈Android的优点和不足之处
优点:
价格便宜,普及率高,开源,可定制等等
1.开放性,开源性,免费,可定制
2.丰富的硬件支持
3."不受任何限制"的"开发商",各手机厂商都有自己各自的随意定制:小米,魅族,三星,华为.
4.无缝结合google应用,谷歌的亲儿子
不足:
碎片化严重,各种产品层出不穷,屏幕的适配,版本更新快等等.
1.安全,隐私问题
2.同质化问题严重:同质:不同品牌在性能,内容,外观上相互模仿,逐渐趋同的情况
3.过分依赖开发商,缺乏标准配置.
5.一条最长的短信占多少byte?
三大运营商:
英文短信:160个字母->160字节
中文短信:70个汉子->140个字
20个字节哪去了?用来标记了:这是中文短信
安卓内部是通过以下代码方法,判断一条短信具体有多少字节
ArrayList<String> android.telephony.SmsManager.divideMessage(String text)
6.sim卡的EF文件有什么作用?(不用看了,废弃了)
EF,即elementary File 是SIM卡文件系统一部分,包含了各种文件字段信息.
7.如何判断是否有SD卡
静态获取即可,获取外部存储的状态如果等于挂载状态就是有(返回true)
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
8.dvm的进程和linux的进程,应用程序的进程是否为同一个概念?
dvm指dalvik虚拟机,每个Android应用都有一个独立的Dalvik虚拟机实例,应用程序都在它自己的进程中运行.而且每个dvm都是在linux中的一个进程,所以可认为是同一个概念
拓展了解:(点击区分jvm和dvm专题)
9.Android程序与java程序的区别?
Java应用用java sdk开发,Android用android sdk开发
Anroid sdk**引用大部分的Java sdk**,少部分被抛弃不用,比如界面部分的java.awt swing package除了java.awt.font被引用之外,其他都抛弃.android sdk 添加了工具jar httpclient ,pull opengl
10.启动应用后,改变系统语言,应用语言会改变吗?
不会,需要重启才会改变
对于应用:如果做了国际化处理就支持,如果没做那么该语言也是没用的.
11.介绍adb,ddms,aapt的作用
adb
全称:android debug bridge:安卓调试桥
作用:主要的调试工具,是命令行工具,启动关闭等各项命令
ddms
全称:dalvik debug monitor service:dalvik调试监听服务
作用:功能和adb一样,但是是adb基础上的一个图形化工具,图形化界面方便于不喜欢命令开发者
aapt
全称:android asset package tool
作用:在SDK的buil-tools目录下:可查看,创建,更新zip格式的文档附件(zip,jar,apk),开发工具通过这个工具包dakaiapk文件构成一个Android应用程序.
12.ddms和traceview的区别
ddms:
dalvike调试监听服务,是一个程序执行查看器,里面可查看堆栈信息.
traceview:
译为”追踪视图”,是性能分析器,他是ddms监听服务中的一部分
13.补充知识:TraceView的使用
数据采集工具使用步骤如下:
我的需求是求出我程序里面4个方法中最耗时的方法.
- 1.创建好应用,比如我一个应用里有4个按钮,每个按钮对应不同的耗时方法,如图:
- 2.进入ddms里面点击我我们的应用,如图,然后点击” Start Method Profiling按钮”,开始采集信息.
- 3.分别点击4个按钮,触发方法.
- 4.在点击” Start Method Profiling按钮”,停止采集
- 5.DDMS**会自动触发Traceview 工具来浏览**采集数据
- 为了找到最耗时的操作,那么可以通过点击InclCpuTime,让其按照时间的倒序排列,即可满足需求
14.Adnroid的储存方式有哪些?
- 1.文件file
- 2.xml
- 3.sharePreference:轻量级
- 4.数据库:逻辑性判断
- 5.网络
- 6.contentProvider
15.DVM和JVM的区别?
- 1.dvm执行.dex文件,jvm执行.class文件.Arndroid会把编译后的.class通过dex工具变成.dex文件
- 2.dvm基于”寄存器”,jvm基于”堆栈虚拟机”,寄存器比堆栈虚拟机高效,减少各类的冗余,根据硬件实现最大优化,适用于移动设备
- 3..class文件存在太多冗余信息,dex工具会去除冗余信息,把所有的.class文件整合到.dex中.减少了I/O操作,提高了类的查找速度.
16.谈谈Android的安全机制
从1.应用程序的数据安全性,2.应用程序对用户隐私的公开性,3.应用程序开发者劳动成果的角度去谈,
1.android基于linux内核,因此linux对文件的控制权限同样适用于Android
如每个应用都有自己的/data/data/包名 文件夹 ,只有该应用能直接访问,其他应用无法直接访问
2.android的权限机制,保护了用户的合法权益
如某个程序有打电话,发短信,访问联系人,定位,访问网络,访问sdcard,等都要必须在AnroidManifest.xml中声明,那么安装时就会提示给用户该程序要进行什么,用户有了知情权.
- 3.Android 提供的代码混淆,让开发者的劳动成果不会被随意的复制和使用.
17.Android的四大组件都需要在清单中注册吗?
- 1.activity,service,contentProvider(自己的应用提供给别人)都要在清单文件注册
- 2.BroadcastReceiver则有两种注册方式,静/动态,静态同其他三种一样在清单注册,动态在代码里注册.
18.Android中的进程级别有哪些?
五大:前,可视,后台,服务,空
1.Foreground process
用户当前正在做的事情需要这个进程。如果满足下面的条件之一,一个进程就被认为是前台进程:
这个进程拥有一个正在与用户交互的Activity(这个Activity的onResume()方法被调用)。
这个进程拥有一个绑定到正在与用户交互的activity上的Service。
这个进程拥有一个前台运行的Service(service调用了方法startForeground()).
这个进程拥有一个正在执行其任何一个生命周期回调方法(onCreate(),onStart(),或onDestroy())的Service。
这个进程拥有正在执行其onReceive()方法的BroadcastReceiver。
通常,在任何时间点,只有很少的前台进程存在。它们只有在达到无法调合的矛盾时才会被杀--如内存太小而不能继续运行时。通常,到了这时,设备就达到了一个内存分页调度状态,所以需要杀一些前台进程来保证用户界面的反应
2.Visible process
一个进程不拥有运行于前台的组件,但是依然能影响用户所见。满足下列条件时,进程即为可见:
这个进程拥有一个不在前台但仍可见的Activity(它的onPause()方法被调用)。当一个前台activity启动一个对话框时,就出了这种情况。
3.service process
一个可见进程被认为是极其重要的。并且,除非只有杀掉它才可以保证所有前台进程的运行,否则是不能动它的。
这个进程拥有一个绑定到可见activity的Service。
一个进程不在上述两种之内,但它运行着一个被startService()所启动的service。
尽管一个服务进程不直接影响用户所见,但是它们通常做一些用户关心的事情(比如播放音乐或下载数据),所以系统不到前台进程和可见进程活不下去时不会杀它。
4.Background process
即背景进程
进程中的Activity不可见和进程中没有任何启动的Service,这些进程都可以看作是后台进程。在系统中,拥有大量的后台进程,并且Android按照后看见先杀掉的原则来杀掉后台进程以获取资源给前台进程
一个进程拥有一个当前不可见的activity(activity的onStop()方法被调用)。这样的进程们不会直接影响到用户体验,所以系统可以在任意时刻杀了它们从而为前台、可见、以及服务进程们提供存储空间。通常有很多后台进程在运行。它们被保存在一个LRU(最近最少使用)列表中来确保拥有最近刚被看到的activity的进程最后被杀。如果一个activity正确的实现了它的生命周期方法,并保存了它的当前状态,那么杀死它的进程将不会对用户的可视化体验造成影响。因为当用户返回到这个activity时,这个activity会恢复它所有的可见状态。
5.empty process
一个进程不拥有任何active组件。
保留这类进程的唯一理由是高速缓存,这样可以提高下一次一个组件要运行它时的启动速度。系统经常为了平衡在进程高速缓存和底层的内核高速缓存之间的整体系统资源而杀死它们。