谈谈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 如何避免它? android中的动画有哪几类,它们的特点和区别是什么? handler机制的原理。 android中线程与线程,进程与进程之间如何通信。 说说mvc模式的原理,它在android中的运用。 android中有哪几种解析xml的类,官方推荐哪种?以及它们的原理和区别。 DDMS与TraceView的区别? res目录有默认几项resource。 android的哪个版本是一次重大的升级?两个Activity之间跳转时必然会执行的是哪几个方法。 横竖屏切换时候Activity的生命周期。 如何将一个Activity设置成窗口的样式。 你后台的Activity被系统 回收怎么办? 如何退出Activity?如何安全退出已调用多个Activity的Application? 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态? 两个Activity之间怎么传递数据? 怎么让在启动一个Activity是就启动一个service? 同一个程序,但不同的Activity是否可以放在不同的Task任务栈中? Activity怎么和service绑定,怎么在activity中启动自己对应的service? 什么是Service以及描述下它的生命周期。 Service有哪些启动方法,有什么区别,怎样停用Service? 不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放? 什么是IntentService?有何优点? 什么时候使用Service? 请描述一下Intent 和 Intent Filter。 Intent传递数据时,可以传递哪些类型数据? 说说Activity,Intent,Service是什么关系 。 请描述一下Broadcast Receiver。 在manifest和代码中如何注册和使 用 broadcast receiver 。 请介绍下ContentProvider是如何实现数据共享的。 请介绍下Android的数据存储方式。 SharedPreferences:用来存储”key-value paires“格式的数据,它是一个轻量级的键值存储机制,只可以存储基本数据类型。 文件存储:通过FileInputStream和FileOutputStream对文件进行操作。在Android中,文件是一个应用程序私有的,一个应用无法读写其他应用程序的文件。
㈡ 怎么准备Android面试
总体上来说可以分为两种类型,小公司注重你的实践能力,大公司看中你的综合能力。小公司面试会比较集中安卓开发这一块,比较在意你之前有没有类似的项目经验,有没有遇到过目前他们所遇到的一些问题,准备这类公司面试除了基本的一些知识点还需要关注一些安卓开发实际中经常遇到的一些问题,诸如图片缓存,常见的开源框架,oom问题等等。大公司面试比较在意你的综合能力,无外乎是数据结构与算法,计算机网络,操作系统,Java这。我想说在我列出的这么多考查点中,数据结构与算法是一个分水岭,这个的准备需要一个长时间的积累,真正的高手与一般人一试就知道,屡试不爽,所以很多公司都痴迷于考算法,像是美团,网络,爱奇艺等公司,总共整个面试下来可以让你手写5个算法题以上,我说这么多只想告诉你这是一个门槛,能不能跨过去决定了你最终所找工作的水准,所以我都会建议每一个找程序员相关工作的人,这一块要尽早准备,多刷一些leetcode或是其他类似的题。然后在剩下的几块知识中,我只想说你可以不用全部都懂,但是你必须要在某一块知识点是有深入研究的,能够回答面试官4到5个追加问题,如果所以知识点都只能答上一到两个,面试官会觉得你的水平就是这样了,另外也会觉得你没有探究精神,关于后面一点是很恐怖的没有探究精神做不了好的程序员。如果按照重要程度,面试安卓我觉得可以做一个这样的排序:数据结构与算法,java,安卓,计算机网络,操作系统,后面是数据库或是设计模式之类的。java这一块比较重要的是多线程同步异步,java虚拟机内存回收,容器,面向对象一些知识点。就单单是多线程和虚拟机都可以看好几本专门讲解的书了,其他知识点就多啃啃java编程思想,遇到不懂在多翻翻博客加深理解。安卓这一块,异步机制,view的绘制,自定义控件,四大组件都非常重要。不管是android或是java都最好看一些源码,java可以看一些容器的源码,android可以看handler,looper,message等异步通信的源码或是一些开源框架的源码,会看源码绝对是加分项。计算机网络可以注重看上面几层,传输层注重研究。一般来说,前面这几点掌握好了,足以聊好几轮面试,一般面试官你都可以引导他去聊一些你擅长的知识点。后面几块知识点,你可以先掌握一些比较重要的,不一定每次面试都会遇到,但是也得准备。
我只提供一些大概的思路,具体到没一块知识点怎么准备可以自己去搜集,大的方向对了加上好的执行力一般可以取得不错的结果,祝好!
2016.03.14更新,加一些具体的准备建议:
上面这几块知识点,按照其重要程度排序,我个人认为可以这样排:数据结构与算法,Java,Android(如果不找安卓的就去掉这部分),计算机网络,操作系统,设计模式。下面我就按照这个顺序给出一些准备建议。
Ø 数据结构与算法
推荐书籍:大话数据结构,数据结构与算法分析(java语言描述),剑指offer,进军硅谷。
推荐在线刷题网站:Leetcode(LeetCode Online Judge),Lintcod(LintCode - 主页),牛客网(在线编程_C++Java前端经典笔试面试题库)
推荐方案:主要做三件事。
1, 先看一遍大话数据结构,熟悉一些基本概念,大话这本书只讲了一些基本的数据结构,像是B树,B+树,红黑树需要自己看一些博客或是网站,推荐一个讲解算法的网站-七月算法,另外海量数据处理也是一个经常考的专题,它结合了数据结构和操作系统的一些知识,这个需要进行针对性准备。
2,然后开始刷题,最推荐的肯定是leetcode,刷题建议按照标签进行刷题(比如队列,栈,哈希表),刷题从易到难,最好能够刷一百题左右,如果一天一题,至少要三个月以上,所以这个耗时比较长,要从比较早开始准备。进军硅谷这本书有按照专题进行编排,基本上的题目来自leetcode,可以作为一个参考。
2, 然后要分析一些常见数据结构的源码实现(比如队列,栈,hashmap之类的),数据结构与算法分析这本书有讲一些,可以结合一些博客进行准备。
Ø Java
找程序员工作,大多数情况下需要掌握好一门面向对象的语言,主流上分为Java和C++两大阵营。这里讲Java需要怎么准备。
入门书籍:Java核心技术卷一,Head first in java(如果一点面向对象的概念都没有那就看这本)
提高书籍:Java编程思想
Java虚拟机:深入理解Java虚拟机
Java多线程:Java多线程编程核心技术,Java并发编程实践
其实我觉得如果有一定基础建议直接看Java编程思想,面试中的考点经常都会在这本书中有讲到。当然Java虚拟机和多线程这两块需要再看一些专门讲解的书,每一次java面试考查内容几乎都离不开这两块。
总体来说java考察内容包括以下这些:
1,面向对象的一些基本概念:继承,多态之类的
2, 抽象类和接口
3, 静态类,内部类
4, Java集合类,同步和异步
5, Java类加载机制
6, Java内存模型和垃圾回收算法
7, 线程同步机制(volatile,synchronized,重入锁,threadlocal),线程间通信(wait,notify)
8, 异常处理
9, 多线程同步问题,生产者消费者,读者写者,哲学家就餐,用java实现
10,
了解java中设计模式的思想,用了哪些设计模式,有什么好处
Ø Android
入门书籍:第一行代码。
提高书籍:Android群英传,Android开发艺术探索。
上面的书看好了,一般问题不大。主要问的一些问题:
1, Activity,Service,BrocastReceiver,Intent,Fragemnet,ContentProvider,这些组件的基础知识,比如Activity两种启动方式,生命周期,四种启动模式,Service则主要是:两种启动方式,生命周期。还有组件之间怎么通信之类的问题。
2, Android的数据存储方式,数据库,sd卡,SharedPreferences 这些
3, Listview的优化,与scollview的区别
4, view状态与重绘,view的绘制过程,view的事件分发机制,view的事件冲突处理
5, Android多线程异步机制,AsyncTask工作原理与源码实现,Handler,Message,Looper异步实现机制与源码分析
6, Android常见的开源框架(主要是网络通信,图片加载这些),了解怎么使用,分析源码
7, Oom和anr异常引发的原因,怎么解决
8, 了解一些常见的图片缓存技术
Ø 计算机网络
推荐书籍:计算机网络自顶向下,tcp/ip协议详解卷一
主要看:主要看应用层,传输层,网络层,其中传输层最为重要。主要的一些考察内容有:
1, TCP和UDP的区别
2, TCP的三次握手,和四次挥手,为什么需要三次握手,为什么要四次挥手(这两个为什么要考虑非常清楚)
3, TCP拥塞控制算法(慢启动,拥塞避免,快速恢复),流量控制算法,滑动窗口协议,选择重传。
4, TCP可靠性是怎么保证的(通过哪些机制保证)?
5, HTTP协议报文格式,请求方法字段以及各个方法之间的区别,了解常见的响应状态码,了解cookie机制,了解WEB缓存技术(条件get方法)。
6, DNS协议的各层域名服务器,两种查询方式(递归和迭代),dns缓存
7, Udp的特点,适用场景,校验机制
8, 从输入一个网址到最后网页显示整个过程发生了什么?
9, IP地址组成,ARR,RARP,ICMP协议,路由选择算法
㈢ android 面试题
1、前言
6 月 26 日, Google Android 发布了 NDK ,引起了很多发人员的兴趣。 NDK 全
称: Native Development Kit 。下载地址为:
http://developer.android.com/sdk/ndk/1.5_r1/index.html 。
2、误解
新出生的事物,除了惊喜外,也会给我们带来一定的迷惑、误解。
2.1、误解一: NDK 发布之前, Android 不支持进行 C 开发
在 Google 中搜索 “NDK” ,很多 “Android 终于可以使用 C++ 开发 ” 之类
的标题,这是一种对 Android 平台编程方式的误解。其实, Android 平台从诞生起,就已
经支持 C 、 C++ 开发。众所周知, Android 的 SDK 基于 Java 实现, 这意味着基于 Android
SDK 进行开发的第三方应用都必须使用 Java 语言。但这并不等同于 “ 第三方应用只能使
用 Java” 。在 Android SDK 首次发布时, Google 就宣称其虚拟机 Dalvik 支持 JNI 编程
方式,也就是第三方应用完全可以通过 JNI 调用自己的 C 动态库,即在 Android 平台上,
“Java+C” 的编程方式是一直都可以实现的。
当然这种误解的产生是有根源的:在 Android SDK 文档里,找不到任何 JNI 方面的
帮助。即使第三方应用开发者使用 JNI 完成了自己的 C 动态链接库( so )开发,但是 so
如何和应用程序一起打包成 apk 并发布?这里面也存在技术障碍。我曾经花了不少时间,
安装交叉编译器创建 so ,并通过 asset (资源)方式,实现捆绑 so 发布。但这种方式只
能属于取巧的方式,并非官方支持。所以,在 NDK 出来之前,我们将 “Java+C” 的开发
模式称之为灰色模式,即官方既不声明 “ 支持这种方式 ” ,也不声明 “ 不支持这种方
式 ” 。
2.2、误解二:有了 NDK ,我们可以使用纯 C 开发 Android 应用
Android SDK 采用 Java 语言发布,把众多的 C 开发人员排除在第三方应用开发外
( 注意:我们所有讨论都是基于“ 第三方应用开发 ” , Android 系统基于 Linux ,系
统级别的开发肯定是支持 C 语言的。 )。 NDK 的发布,许多人会误以为,类似于 Symbian 、
WM ,在 Android 平台上终于可以使用纯 C 、 C++ 开发第三方应用了!其实不然, NDK
文档明确说明: it is not a good way 。因为 NDK 并没有提供各种系统事件处理支持,也没
有提供应用程序生命周期维护。此外,在本次发布的 NDK 中,应用程序 UI 方面的 API 也
没有提供。至少目前来说,使用纯 C 、 C++ 开发一个完整应用的条件还不完备。
3、NDK 是什么
对 NDK 进行了粗略的研究后,我对 “NDK 是什么 ” 的理解如下:
1、NDK 是一系列工具的集合。
NDK 提供了一系列的工具,帮助开发者快速开发 C (或 C++ )的动态库,并能自动
将 so 和 java 应用一起打包成 apk 。这些工具对开发者的帮助是巨大的。
NDK 集成了交叉编译器,并提供了相应的 mk 文件隔离 CPU 、平台、 ABI 等差异,
开发人员只需要简单修改 mk 文件(指出 “ 哪些文件需要编译 ” 、 “ 编译特性要求 ”
等),就可以创建出 so 。
NDK 可以自动地将 so 和 Java 应用一起打包,极大地减轻了开发人员的打包工作。
2、NDK 提供了一份稳定、功能有限的 API 头文件声明。
oogle 明确声明该 API 是稳定的,在后续所有版本中都稳定支持当前发布的 API 。
从该版本的 NDK 中看出,这些 API 支持的功能非常有限,包含有: C 标准库( libc )、
标准数学库( libm )、压缩库( libz )、 Log 库( liblog )。
G
4、NDK 带来什么
1、NDK 的发布,使 “Java+C” 的开发方式终于转正,成为官方支持的开发方式。
使用 NDK ,我们可以将要求高性能的应用逻辑使用 C 开发,从而提高应用程序的执
行效率。
使用 NDK ,我们可以将需要保密的应用逻辑使用 C 开发。毕竟, Java 包都是可以反
编译的。
NDK 促使专业 so 组件商的出现。(乐观猜想,要视乎 Android 用户的数量)
2、NDK 将是 Android 平台支持 C 开发的开端。
NDK 提供了的开发工具集合,使开发人员可以便捷地开发、发布 C 组件。同时,
Google 承诺在 NDK 后续版本中提高 “ 可调式 ” 能力,即提供远程的 gdb 工具,使我
们可以便捷地调试 C 源码。在支持 Android 平台 C 开发,我们能感觉到 Google 花费了
很大精力,我们有理由憧憬 “C 组件支持 ” 只是 Google Android 平台上 C 开发的开端。
毕竟, C 程序员仍然是码农阵营中的绝对主力,将这部分人排除在 Android 应用开发之外,
显然是不利于 Android 平台繁荣昌盛的。
㈣ android面试题及答案
android面试题及答案
本文是我精心整理的android面试题及答案,欢迎大家参考。
1. 下列哪些语句关于内存回收的说明是正确的? (b ) A、 程序员必须创建一个线程来释放内存
B、 内存回收程序负责释放无用内存
C、 内存回收程序允许程序员直接释放内存
D、 内存回收程序可以在指定的时间释放内存对象
2. 下面异常是属于Runtime Exception 的是(abcd)(多选) A、ArithmeticException
B、IllegalArgumentException
C、NullPointerException
D、BufferUnderflowException
3. Math.round(11.5)等于多少(). Math.round(-11.5)等于多少(c). c A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-12
4. 下列程序段的输出结果是:(b )
void complicatedexpression_r(){
int x=20, y=30;
boolean b;
b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
System.out.println(b);
}
A、true B、false C、1 D、011.activity
5. 对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行(d) A、onPause() B、onCreate() C、 onResume() D、onStart()
6. Intent传递数据时,下列的数据类型哪些可以被传递(abcd)(多选) A、Serializable B、charsequence C、Parcelable D、Bundle
7. android 中下列属于Intent的作用的是(c) A、实现应用程序间的数据共享
B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失
C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带
D、处理一个应用程序整体性的工作
8. 下列属于SAX解析xml文件的优点的是(b) A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能
B、不用事先调入整个文档,占用资源少
C、整个文档调入内存,浪费时间和空间
D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会
消失
9. 下面的对自定style的方式正确的是
A、
B、
C、
fill_parent
D、
fill_parent
10. 在android中使用Menu时可能需要重写的方法有(ac)。(多选) A、onCreateOptionsMenu()
B、onCreateMenu()
C、onOptionsItemSelected()
D、onItemSelected()
11. 在SQL Server Management Studio 中运行下列T-SQL语句,其输出值(c)。 SELECT @@IDENTITY
A、 可能为0.1
B、 可能为3
C、 不可能为-100
D、 肯定为0
12. 在SQL Server 2005中运行如下T-SQL语句,假定SALES表中有多行数据,执行查询之 后的结果是(d)。 BEGIN TRANSACTION A
Update SALES Set qty=30 WHERE qty<30
BEGIN TRANSACTION B
Update SALES Set qty=40 WHEREqty<40
Update SALES Set qty=50 WHEREqty<50
Update SALES Set qty=60 WHEREqty<60
COMMITTRANSACTION B
COMMIT TRANSACTION A
A、SALES表中qty列最小值大于等于30
B、SALES表中qty列最小值大于等于40
C、SALES表中qty列的数据全部为50
D、SALES表中qty列最小值大于等于60
13. 在android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是(ab) A、getWriteableDatabase()
B、getReadableDatabase()
C、getDatabase()
D、getAbleDatabase()
14. android 关于service生命周期的onCreate()和onStart()说法正确的是(ad)(多选题) A、当第一次启动的时候先后调用onCreate()和onStart()方法
B、当第一次启动的时候只会调用onCreate()方法
C、如果service已经启动,将先后调用onCreate()和onStart()方法
D、如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法
15. 下面是属于GLSurFaceView特性的是(abc)(多选) A、管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图
view上。
B、管理一个EGL display,它能让opengl把内容渲染到上述的surface上。
C、让渲染器在独立的线程里运作,和UI线程分离。
D、可以直接从内存或者DMA等硬件接口取得图像数据
16. 下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的
A、
android:name="android.provider.action.NewBroad"/>
B、
android:name="android.provider.action.NewBroad"/>
C、
android:name="android.provider.action.NewBroad"/>
D、
android:name="android.provider.action.NewBroad"/>
17. 关于ContenValues类说法正确的是(a) A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的
名是String类型,而值都是基本类型
B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的
名是任意类型,而值都是基本类型
C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的
名,可以为空,而值都是String类型
D、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中
的名是String类型,而值也是String类型
18. 我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会变得越慢,那么线程销毁的方法是(a) A、onDestroy()
B、onClear()
C、onFinish()
D、onStop()
19. 下面退出Activity错误的方法是(c) A、finish()
B、抛异常强制退出
C、System.exit()
D、onStop()
20. 下面属于android的动画分类的有(ab)(多项) A、Tween B、Frame C、Draw D、Animation
21. 下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是(d) A、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.
B、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux中的一个进程,所以说不是一个概念.
C、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux中的一个进程,所以说不是一个概念.
D、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.
22. Android项目工程下面的assets目录的作用是什么bA、放置应用到的图片资源。
B、主要放置多媒体等数据文件
C、放置字符串,颜色,数组等常量数据
D、放置一些与UI相应的布局文件,都是xml文件
23. 关于res/raw目录说法正确的是(a)A、 这里的文件是原封不动的存储到设备上不会转换为二进制的格式
B、这里的'文件是原封不动的存储到设备上会转换为二进制的格式
C、 这里的文件最终以二进制的格式存储到指定的包中
D、这里的文件最终不会以二进制的格式存储到指定的包中
24. 下列对android NDK的理解正确的是(abcd )A、 NDK是一系列工具的集合
B、 NDK 提供了一份稳定、功能有限的 API 头文件声明。
C、 使 “Java+C” 的开发方式终于转正,成为官方支持的开发方式
D、 NDK 将是 Android 平台支持 C 开发的开端
二.文件存储方式
三.SQLite数据库方式
四.内容提供器(Content provider)方式
二、Android面试填空题
25. android中常用的四个布局是framlayout,linenarlayout,relativelayout和tablelayout。26. android 的四大组件是activiey,service,broadcast和contentprovide。27. java.io包中的objectinputstream和objectoutputstream类主要用于对对象(Object)的读写。28. android 中service的实现方法是:startservice和bindservice。29. activity一般会重载7个方法用来维护其生命周期,除了onCreate(),onStart(),onDestory() 外还有onrestart,onresume,onpause,onstop。30. android的数据存储的方式sharedpreference,文件,SQlite,contentprovider,网络。31. 当启动一个Activity并且新的Activity执行完后需要返回到启动它的Activity来执行 的回调函数是startActivityResult()。32. 请使用命令行的方式创建一个名字为myAvd,sdk版本为2.2,sd卡是在d盘的根目录下,名字为scard.img, 并指定屏幕大小HVGA.____________________________________。33. 程序运行的结果是:_____good and gbc__________。 public classExample{
String str=new String("good");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
Sytem.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
34. 在android中,请简述jni的调用过程。(8分)1)安装和下载Cygwin,下载 Android NDK
2)在ndk项目中JNI接口的设计
3)使用C/C++实现本地方法
4)JNI生成动态链接库.so文件
5)将动态链接库复制到java工程,在java工程中调用,运行java工程即可
35. 简述Android应用程序结构是哪些?(7分)Android应用程序结构是:
Linux Kernel(Linux内核)、Libraries(系统运行库或者是c/c++核心库)、Application
Framework(开发框架包)、Applications (核心应用程序)
36. 请继承SQLiteOpenHelper实现:(10分) 1).创建一个版本为1的“diaryOpenHelper.db”的数据库,
2).同时创建一个 “diary” 表(包含一个_id主键并自增长,topic字符型100
长度, content字符型1000长度)
3).在数据库版本变化时请删除diary表,并重新创建出diary表。
publicclass DBHelper extends SQLiteOpenHelper{
public final static String DATABASENAME ="diaryOpenHelper.db";
public final static int DATABASEVERSION =1;
//创建数据库
public DBHelper(Context context,Stringname,CursorFactory factory,int version)
{
super(context, name, factory,version);
}
//创建表等机构性文件
public void onCreate(SQLiteDatabase db)
{
String sql ="create tablediary"+
"("+
"_idinteger primary key autoincrement,"+
"topicvar100),"+
"contentvar1000)"+
")";
db.execSQL(sql);
}
//若数据库版本有更新,则调用此方法
public void onUpgrade(SQLiteDatabasedb,int oldVersion,int newVersion)
{
String sql = " ifexists diary";
db.execSQL(sql);
this.onCreate(db);
}
}
37. 页面上现有ProgressBar控件progressBar,请用书写线程以10秒的的时间完成其进度显示工作。(10分)答案
publicclass ProgressBarStu extends Activity {
private ProgressBar progressBar = null;
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.progressbar);
//从这到下是关键
progressBar = (ProgressBar)findViewById(R.id.progressBar);
Thread thread = new Thread(newRunnable() {
@Override
public void run() {
int progressBarMax =progressBar.getMax();
try {
while(progressBarMax!=progressBar.getProgress())
{
intstepProgress = progressBarMax/10;
intcurrentprogress = progressBar.getProgress();
progressBar.setProgress(currentprogress+stepProgress);
Thread.sleep(1000);
}
} catch(InterruptedException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
}
});
thread.start();
//关键结束
}
}
38. 请描述下Activity的生命周期。 必调用的三个方法:onCreate() --> onStart() --> onResume(),用AAA表示
(1)父Activity启动子Activity,子Actvity退出,父Activity调用顺序如下
AAA --> onFreeze() --> onPause() --> onStop() --> onRestart()--> onStart(),onResume() …
(2)用户点击Home,Actvity调用顺序如下
AAA --> onFreeze() --> onPause() --> onStop() -- Maybe -->onDestroy() – Maybe
(3)调用finish(), Activity调用顺序如下
AAA --> onPause() --> onStop() --> onDestroy()
(4)在Activity上显示dialog,Activity调用顺序如下
AAA
(5)在父Activity上显示透明的或非全屏的activity,Activity调用顺序如下
AAA --> onFreeze() --> onPause()
(6)设备进入睡眠状态,Activity调用顺序如下
AAA --> onFreeze() --> onPause()
39. 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态? onSaveInstanceState()
当你的程序中某一个Activity A在运行时,主动或被动地运行另一个新的Activity B,这个时候A会执行onSaveInstanceState()。B完成以后又会来找A,这个时候就有两种情况:一是A被回收,二是A没有被回收,被回收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上了参数savedInstanceState;而没被收回的就直接执行onResume(),跳过onCreate()了。
40. 如何将一个Activity设置成窗口的样式。 在AndroidManifest.xml 中定义Activity的地方一句话android:theme="@android:style/Theme.Dialog"或android:theme="@android:style/Theme.Translucent"就变成半透明的
41. 如何退出Activity?如何安全退出已调用多个Activity的Application?对于单一Activity的应用来说,退出很简单,直接finish()即可。
当然,也可以用killProcess()和System.exit()这样的方法。
但是,对于多Activity的应用来说,在打开多个Activity后,如果想在最后打开的Activity直接退出,上边的方法都是没有用的,因为上边的方法都是结束一个Activity而已。
当然,网上也有人说可以。
就好像有人问,在应用里如何捕获Home键,有人就会说用keyCode比较KEYCODE_HOME即可,而事实上如果不修改framework,根本不可能做到这一点一样。
所以,最好还是自己亲自试一下。
那么,有没有办法直接退出整个应用呢?
在2.1之前,可以使用ActivityManager的restartPackage方法。
它可以直接结束整个应用。在使用时需要权限android.permission.RESTART_PACKAGES。
注意不要被它的名字迷惑。
可是,在2.2,这个方法失效了。
在2.2添加了一个新的方法,killBackgroundProcesses(),需要权限android.permission.KILL_BACKGROUND_PROCESSES。
可惜的是,它和2.2的restartPackage一样,根本起不到应有的效果。
另外还有一个方法,就是系统自带的应用程序管理里,强制结束程序的方法,forceStopPackage()。
它需要权限android.permission.FORCE_STOP_PACKAGES。
并且需要添加android:sharedUserId="android.uid.system"属性
同样可惜的是,该方法是非公开的,他只能运行在系统进程,第三方程序无法调用。
因为需要在Android.mk中添加LOCAL_CERTIFICATE := platform。
而Android.mk是用于在Android源码下编译程序用的。
从以上可以看出,在2.2,没有办法直接结束一个应用,而只能用自己的办法间接办到。
现提供几个方法,供参考:
1、抛异常强制退出:
该方法通过抛异常,使程序ForceClose。
验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。
2、记录打开的Activity:
每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。
3、发送特定广播:
在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。
4、递归退出
在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。
除了第一个,都是想办法把每一个Activity都结束掉,间接达到目的。
但是这样做同样不完美。
你会发现,如果自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。
但至少,我们的目的达到了,而且没有影响用户使用。
为了编程方便,最好定义一个Activity基类,处理这些共通问题。
42. 请介绍下Android中常用的五种布局。FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)
㈤ Android大厂面试经验分享(OPPO,字节,华为,阿里)
我是从小公司跳出来的,最终入职OPPO,说实话这段时间的经历让我深深地感受到,我们为跳槽做的一些临时抱佛脚的提升跟那些大佬的沉淀比起来太渺小了。我们都知道找资料学习、刷面试题,但也许只能应付这一次的面试,后面还是会技术发愁,那些短时间背下来的东西迟早会忘掉, 大家还是做好长期提升自己的准备,好好沉淀的东西最后才是属于自己的。
说说当时的面试过程,我是内推获得的面试机会,很感谢当时帮我内推的兄弟,总共三轮面试,两轮技术,一轮HR面,当天面试结束。
我10:10分到的公司,10:30开始面试,第一轮面试将近一个小时,聊的点我基本上都答得上来,自我感觉良好。然后面试官让我等一下,他去叫他们老大来给我二面,我等了有二十几分钟吧,二面有一个多小时,这次问的比较深,有些地方答的有些嗑吧,总体来说我自己是满意的。HR面约到下午了,整个流程下来每轮面试官都让人感觉很不错,我自己做的准备也让我面试感觉下来很爽。
我把面试遇到过的以及自己学习用到过相关内容都整理到一起了,方便自己进行复盘和后续的查漏补缺:
一、 Java基础
1.1 静态内部类和非静态内部类的比较
1.2 多态的理解与应用
1.3 java方法的多态性理解
1.4 java中接口和继承的区别
1.5 线程池的好处,详解,单例(绝对好记)
1.6 线程池的优点及其原理
1.7 线程池的优点(重点)
1.8 为什么不推荐通过Executors直接创建线程池
1.9 不怕难之BlockingQueue及其实现
1.10 深入理解ReentrantLock与Condition
1.11 Java多线程:线程间通信之Lock
1.12 Synchronized 关键字原理
1.13 ReentrantLock原理
1.14 HashMap中的Hash冲突解决和扩容机制
1.14 Java并发
1.15 Java虚拟机
1.16 JVM常见面试题
1.17 JVM内存结构
1.18 类加载机制/双亲委托
二、 Android基础
2.1 Activity知识点(必问)
2.2 Fragment知识点
2.3 Service知识点
2.4 Intent知识点
2.5 数据存储
三、UI控件篇
3.1 屏幕适配
3.2 主要控件优化
3.3 事件分发与嵌套滚动
3.4 动态化页面构建方案
四、网络通信篇
4.1 网络协议
五、架构设计篇
5.1 MVP架构设计
5.2 组件化架构
六、性能优化篇
6.1 启动优化
6.2 内存优化
6.3 绘制优化
6.4 安装包优化
七、源码流程篇
7.1 开源库源码分析
7.2 Glide源码分析
7.3 day 20 面试题:Glide面试题
7.4 聊一聊关于Glide在面试中的那些事
7.5 面试官:简历上如果写Glide,请注意以下几点…
7.6 Glide OOM问题解决方法汇总
7.7 LeakCanary源码分析
7.8 OkHttp源码分析
7.9 okhttp连接池复用机制
7.10 okhttp 流程和优化的实现
7.11 一篇让你受用的okhttp分析
7.12 OkHttp面试之–OkHttp的整个异步请求流程
7.13 OkHttp面试之–HttpEngine中的sendRequest方法详解
7.14 OkHttp解析大总结
7.15 Okhttp任务队列工作原理
7.16 Android高频面试专题 - 架构篇(二)okhttp面试必知必会
7.17 Android 网络优化,使用 HTTPDNS 优化 DNS,从原理到 OkHttp 集成
7.18 Retrofit源码分析
7.19 RxJava源码分析
7.20 RxJava原理与源码分析
7.21 RxJava如何进行线程切换的?
7.22 Rxjava内存泄漏防止方案——RxLifecycle,AutoDispose,RxLife框架
7.23 Tinker源码分析
7.24 ARouter源码分析
7.25 Android框架层源码解析
7.26 算法设计
八、新技术篇
8.1 实战问题篇
九、面试篇
9.1 开源文档
9.2 面试文献
以上就是我的学习和面试积累,有自己面试经历过的,也有整理的一些大厂面试题,篇幅有限,具体内容就不展示了,我已经整理成文档了。
还是开头说的,仅靠面试期间临时抱佛脚和刷题对自身发展不是长久之计,做好长期提升的规划,好好沉淀每一次的学习和面试经历,把这些最终都转化成属于自己的东西才是实质上对自己最有用的。