1.Android虚拟机是在哪一层?
是在Android运行库层
2.两个堆栈共享一个向量空间的优点:
节省地址空间,减小上溢发生的概率
3.安卓中,由Handler引发的内存泄漏的解决方法:
主要是因为Handler属于TLS(Thread Local Storage)变量,生命周期和Activity是不一致的,Handler引用Activity会存在内存泄露。
解决方法:
~ 使用显形的引用,1.静态内部类。 2. 外部类
~ 使用弱引用 2. WeakReference
4.进程的标志
PCB是进程存在的唯一标志。进程控制块(Process Control B1ock,简称PCB)是用来记录进程状态及其他相关信息的数据结构,PCB是进程存在的唯一标志,PCB存在则进程存在。系统创建进程时会产生一个PCB,撤销进程时,PCB也自动消失。
5.linux中查看内存使用状态的命令(请务必自己试一下)
~ cat /proc/meminfo
查看RAM使用情况最简单的方法是通过/proc/meminfo。这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示。/proc/meminfo列出了所有你想了解的内存的使用情况。
~ atop
atop命令是一个终端环境的监控命令。它显示的是各种系统资源(CPU, memory, network, I/O, kernel)的综合,并且在高负载的情况下进行了彩色标注。
~ free
free命令是一个快速查看内存使用情况的方法,它是对 /proc/meminfo 收集到的信息的一个概述。
~ htop
htop命令显示了每个进程的内存实时使用率。它提供了所有进程的常驻内存大小、程序总内存大小、共享库大小等的报告。列表可以水平及垂直滚动。
~ ps
ps命令可以实时的显示各个进程的内存使用情况。Reported memory usage information includes %MEM (percent of physical memory used), VSZ (total amount of virtual memory used), and RSS (total amount of physical memory used)。你可以使用 “–sort”选项对进程进行排序,例如按RSS进行排序: $ ps aux --sort -rss
~ smem
smem命令允许你统计基于/proc信息的不同进程和用户的内存使用情况。内存使用情况的分析可以导出图表(如条形图和饼图)。
实例:$ sudo smem --pie name -c "pss"
6.编程题:
~ 数组长度为n,目的是去除多余的元素,但是要保留最后出现的元素。 //反着遍历数组就行了
~ 现在有2个cpu能共同工作,一共有m项任务,求能完成的最小时间
~ 有6个任务,n个工程师(1<n<6),已知每个工程师能做的任务,求方案数
输入:
6
012345
012345
012345
012345
012345
输出: 720
7.问答题:Android中Activity组件的功能以及防护其安全的方法
四大组件指的是应用组件:Activity、Service、BroadcastReceiver、ContentProvider;
在应用中一个Activity可以用来表示一个界面, 中文意思也可以理解为“活动” ,即一个活动开始,代表Activity组件启动;活动结束,代表一个Activity的生命周期结束。
在android中,Activity的生命周期统一交给系统管理;
1、Activity的状态:
~ Resumed:Activity对象出于运行状态。一个新Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可以与用户交互的激活状态。
~ Paused:另一个Activity位于前端,但是本Activity还可见。
Paused状态常用于:当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。注:一个Activity出于paused状态时,系统并不会释放资源。释放资源你的操作要靠开发者来完成。
~ Stopped:另一个Activity位于前端,完全遮挡本Activity。
~ killed:Activity被系统杀死回收或者没有被启动时。