2024年4月11日发(作者:)
Java
知识点包括:接口与抽象的使用及区别,多线程,
socket
基础,集合 类,
也有个别公司考察定义,很无语.
C/C++
知识点包括:指针的移动,排序算法,链表,有时还会有二叉树的 遍历
或图的遍历.
1. Android
手机操作系统的四层架构?
Applications Application
Framework Android RunTime Libraries Liunx Kernel
架构框架以此从上到下:
1. Applications
(应用程序(应用层))
Android
会同一系列核心应用程序包一起发布,该应用程序包 包括
客户端
,SMS
短消息程序,日历,地图,浏览器,联系人管 理程序等.所有的应
用程序都是使用
JAVA
语言编写的.
ation 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)
2. Android dvm
的进程和
Linux
的进程,应用程序的进程是否为同一 个概
念?
DVM
指
dalivk
的虚拟机.每一个
Android
应用程序都在它自己的 进程
中运行,都拥有一个独立的
Dalvik
虚拟机实例.而每一个
DVM
都是在
Linux
中的一个进程,所以说可以认为是同一个概念.
3. SIM
卡的
EF
文件有何作用?
SIM
卡的文件系统有自己规范,主要是为了和手机通讯,
SIM
卡本 身可以
有自己的操作系统,
EF
就是作存储并和手机通讯用的.
4.
一条最长的短信息约占多少
byte?
中文
70(
包括标点),英文
160,160
个
字节.
5. Android
中的动画有哪几类,它们的特点和区别是什么?
两种.一种是
Tween
动画.还有一种是
Frame
动画.
Tween
动画,这种实现方式可以使视图组件移动.放大.缩小以及产 生 透明
度的变化;另一种
Frame
动画,传统的
动画方法,通过顺序的播放排列好的图片来实现,类似电影.
6.
什么是嵌入式实时操作系统,
Android
操作系统属于实时操作系 统吗?
嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并 以足够快
的速度予以处理,其处理的结果又能在规定的时间之内来控 制生产过程或对处理
系统作出快速响应,并控制所有实时任务协调一 致运行的嵌入式操作系统.主要
用于工业控制,军事设备,航空航天等 领域对系统的响应时间有苛刻的要求,
这就需要使用实时系统.又可分 为软实时和硬实时两种,而
Android
是基于
linux
内核的,因此属于软 实时.
7. 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.
&嵌入式操作系统内存管理有哪几种,各有何特性?页式,段式,段页, 用到了
MMU,
虚拟空间等技术
9.
说说
mvc
模式的原理,它在
android
中的运用
MVC(Model_view_contraller)^^
模型—视图—控制器
MVC
应 用程
序总是由这三个部
分组成
.Event(
事件)导致
Controller
改变
Model
或
View,
或者同时改 变两者.
只要
Controller
改变了
Models
的数据或者属性,所有依赖 的
View
都会自
动更新.类似的,只要
Controller
改变了
View,View
会 从潜在的
Model
中
获取数据来刷新自己.
10. Activity
的生命周期,两个
Activity
之间跳转时必然会执行的是那 几个
方法?
onCreate() //
在
activity
生命周期开始时被调用.
onRestoreInstanceState() //onCreate
完成后被调用,用来恢复
UI
状态.
onRestart() //
当
activity
从停止状态重新启动时调用.
onStart() //
当
activity
对用户即将可见的时候调用.
onResume() //
当
activity
与用户交互的时候,重绘屏幕.
onSaveInstanceState() //activity
即将移出栈顶保留
UI
状态时调 用此
方法.
onPause()//
当系统要启动一个其他的
activity
时调用(其他的
activity
显示之前,这个方法被用来提交那些持久数据的改变.停止动 画.和其他占用
CPU
资源的东西.由于下一个
activity
在这个方法返 回之前不会
resumed,
所
以实现这个方法时代码执行要尽可能快.
onStop() //
用户不再可见时调用
onDestroy
〃在
activity
被销毁前所调用的最后一个方法,当进程 终止
时会出现这种情况
1.
完整生命周期:即一个
activity
从出现到消失,对应的周期方 法是
从
onCreate
到
o nDestroy
2.
可见生命周期:从
onStart(
倒
onStop()
方法,在这个周期中,用 户
可以看见
Activity,
但不一定能够与之交互,这两个方法可以随着状 态的变化被
执行多次.
3.
前景生命周期:从
onResume()
到
onPause()
方法,在这个周期
中,
Activity
处在其它
Activity
之前,即在
Activity
栈的最顶端,负责与用 户
进行交互,伴随着状态的变化,这两个方法可以被执行多次
11.
两个
Activity
之间跳转时必然会执行的是哪几个方法.
1
.启动一个
Activity
启动一个新的
Activity
需调用
StartActivity(Intent )
函数.参数
Intent
一个
Intent
对象,
若要在两个
Activity
之间进行跳转我们还得借助
Intent
类中另的 外一个函
数.
public Intent setClass(Context packageContext,Class>cls )
其返
回值为一个
Intent
对象(即你要跳转到得
Activity
的
Intent
对象)
2
.从一个
Activity
获取另外一个
Activity
中的数据结果
例如:你在某个
app
中点击了按键跳转到了另外一个
Activity
(此处 我暂称为
子
Activity)
中,在此
Activity
中你让用户选择联系人列表中 的联系人,而在此
Activity
结束后需要在上层
Activity(
此处我暂称为 父
Activity)
中需显示子
Activity
中返回的联系人名字.
要想做到上述功能,我们需做一下三件事
(a)
在父
Activity
中调用
Start Activity F orResult(Intent ,int );
(b)
在父
Activity
中实现
OnActivityResult(int requestCode, int
resultCode, Intent Date)
参数分析:
requestCode:
此参数传个
Start Activity F orResult
为了 确
定是谁请求的.
resultCode:
此参数是
SetReuslt(Intent Date)
的返回值为
Intent
对象.
Date :Intent
对象返回给调用者.
(c)
在子
Activity
快要退出时调用
SetReuslt(Intent Date)
函数用于 回调
父
Activity
中的
OnActivityResult(int requestCode, int resultCode, Intent Date)
函数.
12.
横竖屏切换时候
Activity
的生命周期.
1.
不设置
Activity
的
android:configChanges
时,切屏会重新调用 各
个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2.
设置
Activity
的
android:configChanges=''orientation
"时,切屏
还是会重新调用各个生命周期,切横.竖屏时只会执行一次
3
设 置
Activity
的
android: configChanges='' orientation |key boardHidden''
时,切 屏不
会 重新调用各个生命周期,只会执行
onConfigurationChanged
方法
13.
如何将一个
Activity
设置成窗口的样式.
1.
在你的
文件中可以新建一如下的
style:
name="
e ctivity" parent= " android: style/ " > 为我们定义的窗口背景,这个不是必须的 name=" android: windowBackground ">@ drawable/float_box 如果窗口要添加窗口背景,可以在 drawable 中新建一个叫 float_ 的文件,内容可以如下(自定义): xmlns:android= " /apk/res/android " > android: right= " 1 Odp " android :bottom= " 1 Odp " /> 2 .在 中在你需要显示为窗口的 activity 中添 加如 果属性: android :theme= "@ style/ctivity "即可 如果说您觉得新建 及 float_ 文件的方式麻烦或者 只想 Test —下,那么可以直接添加您对应需要展示为 Dialog style 的 Activity 的 android: theme 属 性 值 为 android :theme='' @ android: sty le/''. 14. 如何退出 Activity? 如何安全退出已调用多个 Activity 的 Application? 对于单一 Activity 的应用来说,退出很简单,直接 finish() 即可.当然, 也可以用 killProcess() 和 () 方法. 15. 如果后台的 Activity 由于某原因被系统回收了,如何在被系统回收 之前保 存当前状态? onSaveInstanceState() 当你的程序中某一个 Activity A 在运行时,主动或被动地运行另 一个新 的 Activity B, 这个时候 A 会执行 onSaveInstaiiceState().B 完成 以后又会来 找 A, 这个时候就有两种情况:一是 A 被回收,二是 A 没有 被回收,被回收的 A 就要重新调用 onCreate() 方法,不同于直接启动的 是这回 onCreate() 里是带 上了参数 savedlnstanceState ; 而没被收回 的就直接执行 onResume(), 跳过 onCreate()T. 16. 据? 两个 Activity 之间怎么传递数 邮递员 Intent 17. 怎么让在启动一个 Activity 是就启动一个 service? IntentService 18. 同一个程序,但不同的 Activity 是否可以放在不同的 Task 任务栈 中? task 就好像是能包含很多 activity 的栈.默认情况下,一个 activity 启动 另外一个 activity 时,两个 activity 是放在同一个 task 栈 中的,第二个 activity 压入第一个 activity 所在的 task 栈.当用户按下 返回键时,第二个 activity 从栈中弹出,第一个 activity 又在当前屏幕显 示.这样,从用户角度来 看,这两个 activity 就好像是属于同一个应用程 序的,即使第二个 activity 是 属于另外一个应用程序的.当然,这是指默 认情况下. task 栈包含的是 activity 的对象.如果一个 activity 有多个 实例在运行,那么栈中保存的是每个实例的实 体.栈中的 activity 不会 重新排列,只有弹出和压入操作.一个 task 中的所有 activity 都以整体 的形式移动.整个 task 可以被移到前台或后台.打个比方,当 前的 task 包含 4 个 activity- 当前 activity 下面有 3 个 activity. 当用户按下 HOME 键返回到程序启动器 (application launcher) 后,选择了一个 新的 应用程序(事实上是一个新的 task) ,当前的 task 就被转移到后 台,新的 task 中的根 activity 将被显示在屏幕上.过了一段时间,用户按 返回键回到了程 序启动器界面,选择了之前运行的程序(之前的 task). 那个 task, 仍然包含着 4 个 activity. 当用户再次按下返回键时,屏幕不 会显示之前留下的那个 activity (之前的 task 的根 activity) ,而显示 当前 activity 从 task 栈中移出后栈顶 的那个 activity. 刚刚描述的行 为是默认的 activity 和 task 的行为.有很多方法 能够改变这种行 为 .activity 和 task 之间的联系,以及 task 中的 activity 的行 为可以通 过 intent 中的标记以及在 manifest 中的〈 activity> 元素的属性控 制. 其中,主要的 Intent 标记有: FLAG_ACTIVITY_NEW_TASK FLAG ACTIVITY CLEAR TOP FLAG_ACTIVITY_RESET_TASK_IF_NEEDED FLAG_ACTIVITY_SINGLE_TOP 主要的< activity >属性有: taskAffinity launchMode allowT askReparenting clearT askOnLaunch alwaysRetainT askState finishOnT askLaunch 默认情况下,一个应用程序中的所有 activity 都有一个 affinity- 这 让它 们属性同一个 task. 然而,每个 activity 可以通过<玄“ 2 呵>中的 taskAffinity 属性设置单独的 affinity. 不同应用程序中的 activity 可以 共享同 一个 affinity, 同一个应用程序中的不同 activity 也可以设置成 不同的 ty 属性决定了:启动 activity 的 Intent 对象需包 含 FLAG_ACTIVITY_NEW_TASK 标记 ‘activity 的 allowTaskReparenting 被认为是设置成 true. FLAG_ACTIVITY_NEW_TASK 标记 当传递给 startActivity() 的 Intent 对象包含 FLAG_ACTIVITY_NEW_TASK 标记时,系统会为需要启动的 activity 寻找与当前 activity 不同的 task. 如果要启动的 activity 的 affinity 属性与当 前所有的 task 的 affinity 属性都不相同,系统会新建 一个带那个 affinity 属 性的 task, 并将要启动的 activity 压到新建的 task 栈中;否则将 activity 压入 那个 affinity 属性相同的栈中. allowTaskReparenting 属性 如果一个 activity 的 allowTaskReparenting 属性为 true, 那么它可以 从一个 task(TASKl) 移到另外一个有相同 affinity 的 task(TASK2) 中 (TASK2 带到 前台时). 如果一个 .apk 文件从用户角度来看包含了多个“应用程序”,你可能需 要对那 些 activity 赋不同的 affinity 值. 运行模式 activity 的 launchMode 属性可以有四种值: “standard" (默认) "singleTop" “singleTask” u singlelnstance u 19 .什么是 Service 以及描述下它的生命周期. Android Service 是运行在后台的代码,不能与用户交互,可以运行 在自 己的进程,也可以运行在其他应用程序进程的上下文里.需要通过 某一个 Activity 或者其他 Context 对象来调用, ervice() 和 rvice(). 如果在 Service 执行耗时的操作需要启动 一个新线程 来执行. Android Service 只继承了 onCreate(),onStart(),onDestroy() 三个 方 法,当我们第一次启动 Service 时,先后调用了 onCreate(),onStart() 这两个 方法,当停止 Service 时,则执行 onDestroy() 方法,这里需要注意 的是,如果 Service 已经启动了,当我们再次启 Service 时,不会在执行 onCreate() 方法, 而是直接执行 onStart() 方法. 启动一个 Service 的过程如下: ervice() |->onCreate()- >onStart()->Servicerunning 其中 onCreate() 可以进行 一些服务的初始化 工作 ,onStart() 则启动服务. 停止一个 Service 的过程如下: rvice() |->onDestroy() ->Service stop 20. 什么是 IntentService? 有何优点? 优点: Acitivity 的进程,当处理 Intent 的时候,会产生一个对应的 Service Android 的进程处理器现在会尽可能的不 kill 掉你.非常容易使用 日历中 IntentService 的应用 21. 请描述一下 Intent 和 Intent Filter. Intent 在 Android 中被翻译为“意图",熟语来讲就是目的,他们是 三 种应用程序基本组件一 activity,service 和 broadcast receiver 之间 互相激活 的手段.在调用 Intent 名称时使用 ComponentName 也就是 类的全名时为显 示调用.例: setComponent("Activity ") setClass(" Activity ") setClassName("Activity") 这种方式一般用于应 用程序的内部调用,因为你不一定会知道别人写的类的全名.那我们怎 么调用呢?有显就有隐嘛.我们来看看隐式 Intent 怎么用? 首先我们先配置我们的 Activity 的 Intent Filter android:name="_CURRENT" /> >这样在调用的时候指定 Intent 的 action, 系统就是自动 的去对 比是哪个 intent-filter 符合我们的 Activity, 找到后就会启动 Activity. 一个 intent filter 是 IntentFilter 类的实例,但是它一般不出现在代码 中,而 是出现在 android Manifest 文件中,以 的形式.(有 一个例外 是 broadcast receiver 的 intent filter 是使用 erReceiver() 来动态设定的,其 intent filter 也是在代码 中创 建的.) 一个 filter 有 action, data, category 等字段.一个隐式 intent 为 了 能被 某个 intent filter 接受,必须通过 3 个测试.一个 intent 为了被某个组 件接 受,则必须通过它所有的 intent filter 中的一个. 22.1ntent 传递数据时,可以传递哪些类型数据? Intent 传递方式和参数类型: 1. Extra:String[].quence[].Par celable[].[].[].[].boolean[].short[].Str [].[].[]. 2. Data: URI 23. 请描述一下 Broadcast Receiver. Broadcast Receiver 用来接收并处理广播.可以接收系统的广播 例如: 电量不足.来电来信等.程序也可以播放广播 .Broadcast Receiver 可以通过多 种方式通知用户:启动 activity. 使用 NotificationManager. 开启背景灯.振动 设备.播放声音等,最典型的是在状态栏显示一个图 标,这样用户就可以点它打 开看通知内容. 通常我们的某个应用或系统本身在某些事件(电池电量不足. 来电来短 信)来临时会广播一个 Intent 出去,我们可以利用注册一个 Broadcast Receiver 来监听到这些 Intent 并获取 Intent 中的数据. 24. 在 manifest 和代码中如何注册和使用 BroadcastReceiver. android:name="_RECEIVED "/> 25. 请介绍下 Android 的数据存储方式. 在 Android 中的数据存储方式有以下五种: 1 .SharedPreferences: 用来存储 "key-value paires" 格式的数据,它 是一个轻量级的键值存储机制,只可以存储基本数据类型. 2. 文件存储:通过 FilelnputStream 和 FileOutputStream 对文件进 行 操作.在 Android 中,文件是一个应用程序私有的,一个应用无法读 写其他应用 程序的文件. 数据库存储: Android 提供的一个标准数据库,支持 SQL 语句. 4. 网络:通过网络来存储和获得数据. tProvider: 是所有应用程序之间数据存储和检索的一个 桥梁, 它的作用就是使得各个应用程序之间实现数据共享.它是一个特 殊的存储数据的 类型,它提供了 一套标准的接口用来获取数据.操作数 据.系统也提供了音频. 视频.图像和个人信息等几个常用的 Content Providers. 如果你想公开自己的私 有数据,可以创建自己的 Content Provider 类,或者当你对这些数据拥有控制. 写入的权限时讲这些数据 添加到 Content Provider 中实现共享.外部访问通过 ContentResolver 去访问并操作这些被暴露的数据.组织数据主要包括:存储数 据,读取 数据,以数据库的方式暴露数据.数据的存储需要根据设计的需求,选 择合适的存储结构,首选数据库,当然也可以选择本地其他文件,甚至 可以是 网络上的数据.数据的读取,以数据库的方式暴露数据这就要求, 无论数据是如 何存储的,数据最后必须以数据的方式访问. 26 .请介绍下 Android 中常用的五种布局. 最常用的布局方式为 veLayout.F rameLay ayout AbsoluteL 町 out. 其中 LinearLayout 和 RelativeL 町 out 是最常用的方 式,他们可以 通过在 xml 配置文件或者代码中进行布局. 1. FrameLayout 最简单的布局方式,放置的控件都只能罗列到左上 角,控件 会有重叠,不能进行复杂的布局. 2. LinearLayou 可以通过 orientation 属性设置线性排列的方向是垂 直 (vertical)® 是纵向 (horizontal). 每行或每列只有一个元素,可以 进行复杂 的布局. 3. AbsoluteLayout 可以让子元素指定准确的 x/y 坐标值,并显示在屏 幕 上. AbsoluteLayout 没有页边框,允许元素之间互相重叠(尽管 不推荐). 他是绝对坐标,所以在实际中不提倡使用. 4. RelativeLayout 允许子元素指定他们相对于其它元素或父元素的 位置(通 过 ID 指定).因此,你可以以右对齐,或上下,或置于屏幕 中央的形式来排 列两个元素.元素按顺序排列,因此如果第一个元 素在屏幕的中央,那么相对 于这个元素的其它元素将以屏幕中央的 相对位置来排列.这个是相对于 AbsoluteLayout 的,采用的相对 坐标,所以在实际中比较常用. 5. TableLayout 将子元素的位置分配到行或列中.一个 TableL 町 out 由许多 的 TableRow 组成,每个 TableRow 都会定义一个 row .TableL 町 out 容器不会显示 row .column 或 cell 的边框线.每 个 row 拥有 0 个或多个的 cell ;和 html 中的 table 差不多.在实 际中也经常 使用.有的时候我们也会用到 GridView, 就像我们手 机屏幕上摆放的各个图 标应该就是用 GridView 排版的. Padding 是文字相对于边框,而 Margin 是边框相对于父窗体. LinearLayout TableLayout FrameLayout AbsoluteLayout RelativeLayout 27. 如果后台的 Activity 由于某原因被系统回收了,如何在被系统回 收之前保存当前状态?在”暂停 onPause” 状态将数据保存. 2 &如何判断是否有 SD 卡? 在程序中访问 SDCard, 你需要申请访问 SDCard 的权限. 在 中加入访问 SDCard 的权限如下: SDCard 中创建与删除文件权限-> android:name="_UNMOUNT_FILE SYSTEMS"/ 〉 SDCard 写入数据权限-> android:name="_EXTERNAL_STOR AGE'7> ernalStorageState().equals( .MOUNTED) ernalStorageState() 方法用于获取 SDCard 的状 态, 如果手机装有 SDCard, 并且可以进行读写,那么方法返回的状态等 于 _MOUNTED. 29. 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系 统吗? 嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并 以足够快 的速度予以处理,其处理的结果又能在规定的时间之内来控 制生产过程或对处理 系统作出快速响应,并控制所有实时任务协调一 致运行的嵌入式操作系统.主要 用于工业控制,军事设备,航空航天等 领域对系统的响应时间有苛刻的要求, 这就需要使用实时系统.又可分 为软实时和硬实时两种,而 Android 是基于 linux 内核的,因此属于软 实时. 30. Linux 中跨进程通信的几种方式. 1. 管道( pipe ) :管道是一种半双工的通信方式,数据只能单向流动, 而且只 能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父 子进程关系.


发布评论