腾讯-测试开发面经(四)
点击蓝字关注我们,获取更多面经
进程和线程区别
根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。
包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
数据库中索引和主键有什么区别
主键是为了标识数据库记录唯一性,不允许记录重复,且键值不能为空,主键也是一个特殊索引.
数据表中只允许有一个主键,但是可以有多个索引.
使用主键会数据库会自动创建主索引,也可以在非主键上创建索引,方便查询效率.
索引可以提高查询速度,它就相当于字典的目录,可以通过它很快查询到想要的结果,而不需要进行全表扫描.
除了主键索引外索引的值可以为空.
主键也可以由多个字段组成,组成复合主键,同时主键肯定也是唯一索引.
唯一索引则表示该索引值唯一,可以由一个或几个字段组成,一个表可以有多个唯一索引.
有9个外型一样的球,其中8个的重量是一样的,要求用天平称两次,就能找出重量不一样的那个球,要求只能称两次,怎样才能找出重量不一样的那个球
先从中选出8个一边4个,若一样重,则剩下的那个就是.
或从中取6个一边3个,若一样重再称剩下两个······
如不一样重,取轻(重)的那三个球离得两个称,要看重量不一样的那个球是轻还是重,下面的步骤同上.
时针分针秒针一天到底重合几次
假设时针的角速度是ω(ω=π/6每小时),则分针的角速度为12ω,秒针的角速度为720ω。分针与时针再次重合的时间为t,则有12ωt-ωt=2πn
时 分 秒
1 60 3600
30 360 21600
w 12w 720w
π/6 2π 120π
0≤t≤24
12wt-wt=2π*n(n=0,1,2,...)=12w*n
11wt=12w*n
11t=12n
t=12n/11(n=0,1,2,...)
t=12*0=0 ,n=0
t=12*1/11=1+1/11 ,n=1
t=12*2/11 ,n=2
t=12*3/11 ,n=3
..... .....
t=12*10/11 ,n=10
t=12*11/11=12 ,n=11
t=12*12/11 ,n=12
..... .....
t=12*22/11=24 ,n=22(每天时针分针22次重合。)
由上可知时针和分针一天中可重合22次;由于0时至12时和12时至24时是对称的,所以只需考虑0时至12时时针、分针重合时,秒针是否也重合,就能得出结果。
t=12/11小时,换算成时分秒为1小时5分27.3秒,显然秒针不与时针分针重合,同样可以算出其它10次分针与时针重合时秒针都不能与它们重合。只有在正12点和0点时才会重合。所以一天中只有两次三针重合,分别是0时,12时。
手写快排
public void quickSort(int[] a, int start, int end) {//start和end是要排序的区间
int i = start;
int j = end;//先把start和end保存下来,因为后面的递归会用到
if (start >= end) {//如果两个游标相遇,或者start>end,退出
return;
}
boolean flag = true;//定义一个标记,很重要
int temp;//定义临时变量,交换用
while (i != j) {//true是从左往右比,false是从右往左比
if (a[i] > a[j]) {//交换
temp = a[i];
a[i] = a[j];
a[j] = temp;
flag = !flag;//标志取反
}
if (flag) {如果是从左往右比
j--;
} else {如果是从右往左比
i++;
}
}
i--;
j++;//i,j都退一格
quickSort(a, start, i);//递归分号边的数组
quickSort(a, j, end);//递归分号边的数组
}
java内存管理机制
Java的内存管理就是对象的分配和释放
分配:内存的分配是程序完成的,程序员通过new关键字为对象申请内存空间(基本数据类型除外),对象都是在堆(Heap)中分配空间。
释放:对象的释放是由垃圾回收机制(Garbage Collection)来做的,GC为了能正确释放对象,需要监控每一个对象的运行状况,包括申请,引用,被引用,赋值等。
什么叫Java的内存泄漏(memory leak)
java中内存泄漏指存在一种被分配的对象,具有以下两个特点,首先它是可达的,即仍存在该内存对象的引用,其次它是无用的,也就是说程序不再引用该对象了,总结就是没用的对象分配的内存,但是还在引用(unused but still referenced)。内存泄漏的对象不会被GC回收,一直占用着内存。memory leak 最常见到的异常是OOM(outofmemeory)。
更多面经
扫描二维码
获取更多面经
扶摇就业