腾讯-测试开发面经(四)

共 2784字,需浏览 6分钟

 ·

2021-03-26 21:53

点击蓝字关注我们,获取更多面经







进程和线程区别







根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(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)。








更多面经





360-测试开发面经(一)


百度-测试开发面经(一)


字节跳动-测试开发面经(一)


    扫描二维码

   获取更多面经

  扶摇就业  


浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报