面试题一

来源:互联网 发布:淘宝搜索排名查询 编辑:程序博客网 时间: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  ,这时会触发调用该方法进行升级。

0 0
原创粉丝点击