面试题一
来源:互联网 发布:淘宝搜索排名查询 编辑:程序博客网 时间:2024/06/06 05:00
安卓部分总结:
1. 谈谈关于mvc结构模式的理解
控制层( M -Model), 业务逻辑处理层,关于对数据库 ,网络的操作的都在该层 应用程序的主题部分。
视图层( V-View) Android 中和用户唯一能看到的,接受用户的输入信息,显示结果一般采用xml 进行节目的描述,使用的时候方便引入。
控制层(C-Control) ,Android 中控制的重任的都落在activity 上,界面之间的跳转, 所以在Activity 中不宜 些过多的业务逻辑,因为android 中activity的响应时间 只有5秒,如果耗时操作放在这里,程序就很容易被回收。
2. Activity 的启动模式
activity 的四种启动模式
1. Standrad: 系统默认的启动模式, 每一次跳转都会生成一个实例。
<activity android:name=".MainActivity" android:launchMode="standard" />
2. SingleTop: 如果有一个实例位于Activity 栈顶,就不会产生新的实例,只会调用Activity 中的Instance() 方 法。
3. SingleTask: singletask 和 singleinstance 都是只创建一个实例,无论跳转的对象是否在 Activity 的栈顶, 都不会生成新的实例。
4. SingleInstance: singleinstance 模式的Activity 是独占一个task(感觉task 可以理解为进程) 倒不如说一个应 用,这个应用于其他Activity 是独立的。有自己的上下文Activity.
3.Android 提供了哪几种数据存储方式:
1. 文件存储
2. Sqlite 数据库存储
3. SharedPreference存储
4. ContentProvider 存储
5.网络存储
4. Error 和Exception 异常区别?
Error 是系统错误,代码不能处理的错误,如内存泄漏,内存溢出。
Exception 是程序抛出的异常, 可以通过代码try_catch进行处理,如 数组角标越界,空指针异常。
为什么用 ContentProvider 它和sql实现上有什么区别?
使用ContentProvider 可以将数据共享给其他应用,让除本应用之外的其他应用也可以访问本应用的数据。它的底层是用Sqlite数据库实现的。所以对数据做的各种操作可以用sql实现 ,只是它上层提供的是Url.
5. 介绍 android 的缓存节制
一级缓存: 直接缓存到内存
二级缓存: 缓存到文件中或者 数据库中。
6. 介绍android中常用的布局
1. 线性布局 Linearlayout
2. 相对布局 RelativeLayout
3. 绝对布局 Absolutelayout
4. 表格布局 Tablelayout
5. 帧布局 Framelayout
7. 对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行?
onResume()恢复数据、onPause()保存数据。
8. 如何一次性退出打开所以的Activity ?
编写一个Activity 做为入口。利用Activity 的 SingleTop模式 跳转到该Activity. 然后其上的Activity 都被销毁,然后再关闭该Activity.
9. Activity 的生命周期
oncreat- onstart-onrestart-onresume-onpause-onstop-ondestory
Fragment 的生命周期
onAttach- oncreate- oncreateview- onActivitycreate-onstart-onresume-onpause-onstop-ondestoryview-ondestory- ondetach
10. public protect private 作用域 区别 以及不写时的区别
public 公共修饰符,所以的类都可以访问
protect 保护修饰符,表示 在同类,同包 或者是不同包,但是父子关系的可以访问
private 私有修饰符,只有本类中可以访问。
不写时: 默认修饰符,或者成为package修饰符,表示同类或者同包下的类中可以访问,出了这个包就不能访问
11. listview 的优化
使用listview是一个标准的适配器模式,数据界面 xml --以及适配器 adpter, 数据被适配器按需要的方式展现出来,xml 描写了如何展现数据。activity 控制这些活动。
第一: 重用covertview,减少内存的消耗,判断covertview 是否为空,是的情况下 产生一个视图出来,然后给视图数据,将视图返回给底层,程现给用户。
在每次 getview 的时候都需要byviewfindid(), 都需要重新找到控件,然后给空间赋值,设置点击事件,其实是重复,因为getview()中包含这些控件,而且这些控件的id还都是一样的,其实只要在view 中findviewbyid 一次,后面就不需要重复了。
第二: 通常写一个内部类class viewholder , 这个viewholder 用来标识一些控件,方便进行一些事件的操作,如 onclick() ,也不用重复findviewbyid,减少了性能的消耗, 重复了 covertview ,这样也减少了内存的消耗。
12. handler的原理:
1. 子线程 借用主线程 handler 发送一条消息到主线程
2. 这条消息被放到了主线程的messagequene. 它上面又有 looper 在不停的轮询,当检测到有新消息,然后再调用handlermessage () 处理这条消息。
3,主线程在更新页面
13. handler 和 AsynTask 的区别,有缺点:
AsynTask是android 轻量级的异步类,可以直接继承Asyntask,在类中实现异步操作,并提供接口返回当前异步执行的程度(可以通过接口实现ui 更新)最后反馈执行的结果给ui主线程。
优点:
简单,快捷,
过程可控
缺点:
在使用多个异步操作,并需要进行ui 进行变更时,就变得复杂。
在handler实现异步操作时,涉及到 handler. looper message thread 4个对象,实现异步的流程是 主线程启动
Thread(子线程)运行并生成 message-looper,获取message 并传递给handler,handler逐步获取 meesage-looper中的message,并更新ui.
优点:
结构清晰,功能定义明确
对多个后台任务时,清晰,简单
缺点:
在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)
14.描述 横竖屏切换时Activity 的生命周期
不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期,切横批会调一次,切竖屏会调用两次。
设置Activity 的 android: configChanges= orientation; 时,切屏时还会重新调用各个生命周期方法, 切横屏 ,竖屏各执行一次。
设置Activity 的 android: configChanges= orientation| keyboardHidden 时,切屏不会重新调用生命周期方法,只会执行 configChanges方法。
15. android 中的动画有哪几种,有什么区别?
两种,一种是补间动画, 这种实现可以是组件视图,放大,缩小,以及产生透明的变化,(Tween)还要一种是帧动画(Frame)传统的动画,通过顺序的播放排列好的图片,类似缩放电影。
16. 说说service 的生命周期
一,通过startService 启动服务:oncreate, onstartCommand ondestory
二, 通过bind Service 绑定服务 : oncreate onbindService onunbindService. ondestory.
17. 什么是intent,如何使用?
intent 提供了一种通用的消息系统, 它允许你在 你的应用和其他的应用之间传递intent 来执行动作或产生事件,使用intent 可以激活android 的3个核心组件:活动 服务和广播接收器
通过 startActivity 或 startActivityForResult() 来启动一个Activity. 通过 startService 来启动服务, bindservice 来和后台服务交互。
通过 广播方法 sendbroadCast(), sendOrderedBroadcast(), sendStickBroadCasthandler 发给broadcast receives.
18. 显示intent意图和隐式intent意图有什么区别?
intent定义: 是在不同组件之间传递请求的消息,是应用程序发出的请求和意图。intent 不仅需要发送端,还需要接受端。
显示intent: 对于明确了目标组件的名称,我们称之为显示intent.
隐式 intent: 对于不明确组件的名称 ,我们称之为隐式intent.
说明android 系统 使用intentFilter 来寻找显示intent,和隐式intent 的对象。
19. Activity service boradcast 的作用
Activity 是android 程序与用户交互的窗口, 是Android 结构中最基本的一种,它需要为保持节面,做很多持久化的操作,如生命周期的管理,逻辑的跳转。
service 是在后台服务于Activity , 封装有一个完整的功能逻辑实现。接受上层指令完成相关指令,定义好需要接受的intent. 提供同步和异步的接口。 比如,后台需要播放音乐。一个应用的数据是通过网络获取的,一个时间段的数据不同,这时可以定义在 service里面定时的获取更新,就不用每次打开应用的时候去获取。
boradcast: 接受一种或者多种intent 触发事件。接受一条消息,做简单处理 转换成一条 notification .
20. android 中线程同步分方法?
可以采取同步方法和同步块。
21. 消息推送
消息推送的原理,一般服务器没有办法直接发消息给客户端,一般是客户端采用轮询和心跳帧技术与服务端联系, 推送平台有 百度推送,极光推送,androidpn . 推送平台发指令给客户端,客户端接受指令,进行解析,然后访问服务器,获取数据。
22 . 内存泄漏和内存溢出
内存泄漏,是指程序中一些对象(垃圾对象)已经没有使用价值, 但它却直接或者间接引用这gcroots,导致gc无法回收,这就使实际可使用的内存变小。如:集合中的对象没有移除。 资源文件没有关闭,
内存溢出,是指,程序在申请内存时,但系统没有足够的内存空间供其使用。如需要加载一些大图片,视频, 处理的方式,可以用缓存。 软引用
23. 什么是Anr 异常?
在android,应用在一段时间上 反应不够灵敏,系统会弹出了一个对话框(ANR: Application Not Responding)提示。解决的方法: 应该尽少量在主线程做耗时操作,放到子线程中,以免出现主线程阻塞情况。
24: 介绍下 android 的体系结构
应用层: android 应用通常涉及界面和用户交互。
应用层 : ui 控件,函数库
函数库:C++库,媒体库,webkit sqlite
Linux 核心库: linux系统运行的组件
26. 广播的注册方式有几种,有何区别?
2种。
1. 在mainfest.xml 文件中注册,属于常驻型 ,当有消息来,程序关闭了,一样会自动响应。
2. 以代码的方式注册。 是不常驻型,会随着Activity 生命周期的变化而变化。
27. 登录验证码的过程
手机号正确性----获取手机号,生成验证码,----发送到短信平台----短信平台在发给用户。
28. log.i 和 system print 区别
log.i 和system print 都可以打印到 log类中。
system 只打印,当前需要打印的。
log.i 打印的比较全面, 有log.i log.e log.w 等
29. 支付
客户端把生成的订单号 和金额发送到服务器,然后服务器在发送到 支付宝。支付宝经过处理,在返回结果给用户。
30.数据库是如何 升级的?
升级有2种,一是应用升级,二是 数据库升级
android SOLiteOpenHelper类中有一个onUpgrade 方法当数据库升级时该方法被触发,当检测到 版本号不一致,如第一次是1. 第二次是 1.1 ,这时会触发调用该方法进行升级。
- 【面试题】五道面试题一
- 面试题(一)
- java面试题一
- 面试题一
- 面试题一
- 面试题(一)数组
- SQL面试题 (一)
- 上海贝尔面试题一
- Java面试题一
- java面试题一
- java面试题一
- 面试题(一)
- 常见面试题一
- Flex面试题(一)
- 面试题一
- java面试题一
- android 面试题一
- 算法面试题一
- Play for Scala:Covers Play 2
- python下使用protobuf
- 排序练习——找出前m大的数字
- Android 打印小结
- Linux下多块网卡同一网段连通配置
- 面试题一
- [JS]EASYUI组件的程序基本结构
- 验证Request传过来的值是否为空
- Hibernate多表查询
- Object-C 字符串类各种操作方法
- MyEclipse web项目引用java项目
- JUnit单元测试详解
- Oracle 工作语句记录
- 树-堆结构练习——合并果子之哈夫曼树