Java回收机制,堆内存,栈内存
栈内存
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。
堆内存
堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。
内存回收机制
Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。
注意
引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因
算法
两个已经排好序的数组,如何找出其中相同的元素。
public class Main {
public static void main(String[] args) {
int[] a = new int[]{3,7,13,24,29,31,34,38};
int[] b = new int[]{1,3,3,4,7,11,27,29,31,37,38,44,47};
int i=0,j=0,index;
while(i<a.length&&j<b.length){
if (a[i]==b[j]){
System.out.println(a[i]);
i++;
j++;
} else if (a[i]<b[j]){
i++;
} else {
j++;
}
}
}
}
时间复杂度O(n);
Android的测试分为哪几种
原文出处:Android 手机自动化测试工具有哪几种-百度知道
既然说到andoird测试工具的分类,我就以分类的角度来回答吧。
1)纯白盒方式的测试,Monkey。楼上已经有哥们提到了,使用moneky更多的是开发team,而不是纯粹的测试team,毕竟要求对android开发比较了解才用得了monkey。
2)偏白盒的robotium,这家伙号称是黑盒,但是本人不太认同~ 因为使用robotium需要知道package和acitivity这样的细节,即便不是开发人员来做,也得从开发人员那里获得不少开发文档才能做。
3)纯黑盒的方式,这个分类比较有意思,我分得细点
3-1)sikuli,原来只针对桌面应用,后来自然延伸到了android app,让人眼前一亮的测试方式。框个图,写个简单的python测试脚本(其实java脚本也可以),测试就做好了,简单又形象,还有逻辑。因为验证点是依赖于图片比对,所以瓶颈也在此。屏幕大小和分辨率的不同是这种测试的硬伤,如果测试团队觉得每个手机上抠下来的图要重新截,那…也就没啥了。
3-2)testin,deviceanywhere等
楼上那个哥们应该是testin的人,介绍已经很全面了,我只概括一下。这类测试本身没有神马特别的,无非是放在了云端,将规模化的测试做到了极致,与其说是测试工具,不如说是测试平台。说缺点嘛也有,由于只是简单的基于坐标的脚本录制(并没有灵活的功能性验证点),这种测试往往比较简单,只是做做简单的适配性和性能测试,毕竟卖点不在测试类型上。
3-3)clicktest(我们家的工具,算是广告吧,呵呵)
论原理,也是基于图片对比技术,只是做了些优化,比对的智能一些,跨手机的效果更好罢了。也支持录制回放,自定义了一些测试命令,易上手,可读性强,不再需要使用者(手工测试人员)编程了。另外,支持工作流式的逻辑集成,可以灵活得组合测试步骤,增强复用性。clicktest是工具,不是平台,欢迎各位咨询和探讨。
对了,还有一种
4)硬件辅助的测试方式,我就不举例了
先说原理,硬件辅助视频输出(摄像头or视频线),控制方式是软硬件结合。这种方式的特点,跨平台杠杠的,但是成本高,包括硬件成本以及硬件工程师的成本。
可以初步参考。
还有知乎上:android app自动化测试工具有哪些?-知乎
monkey
monkeyrunner
monkeytalk
Instrumentation
UIAutomator
Espresso
Calabash
Selendroid
Robotium
Appium
SeeTest
SilkMobile
Ranorex
下来自己好好研究一下monkey。
Android如何适配不同屏幕的
不错的博客:Android屏幕适配全攻略(最权威的官方适配指导)
基本上这些东西都知道,但就是没有总结过,所以一下子容易忘记。
1. 使用wrap_content、match_parent、weight,现在有百分比布局了。
2. 使用相对布局,禁用绝对布局
3. 使用尺寸和方向限定符
4. 使用可拉伸的图片资源,xx.9.png
5. 使用不同像素的图片资源
6. 使用value文件夹下的dimen资源文件,x320,y480表示320宽,480高
7. 使用dp,sp,不使用px
8. 实施自适应用户界面流程