1. 笔试题目
(1)对同一条视频,为什么不同手机的音质和画质会有区别,请你分析原因?
答:不同手机的配置有所区别,对视频而言解码能力好坏是导致视频是否卡顿的主要原因,码率不足,画面会变得粗糙,这也取决于视频格式的限制;另外,除了码率,帧率和分辨率也会影响到视频的画质好坏。一般来说,帧率越高,画面显示越流畅,帧数越低画面越不连贯。人眼能感受到的帧率上限为每秒30帧左右;再者,视频的分辨率会影响图像的大小,分辨率越高图像越大,如果不考虑码率约束,则分辨率越高画质越清晰细腻。这就是日常所说的高清、超清、4K等。最后,这三者都相差不大的时候,可能影响视频播放的主要因素可能是网速,网速慢则延迟高,视频卡顿。总而言之需要考虑视频本身因素、手机配置因素和网络因素。
(2)当你买了一个新的千兆宽带路由器,能通过什么方式对其进行验收测试?
答:对于千兆宽带而言最重要的就是测试其网速是否达标。因此我首先会在安装好路由器后用电脑网线直连,然后进行上网测试。在电脑上的在线网站如speedtest等进行多次测速,看平均是否能达到1000Mb/8=125MB/s的标准速度附近;此外,我会通过一些视频播放、在线游戏去体验当前专线的延时性,是否小于10ms或15ms;第三,进一步在网上找一些工具测试丢包率情况,一般应小于万分之5才算合格;
(3)作为软件测试,你会如何测试微信的朋友圈?
答:站在测试人员或开发者的角度:(1)进行功能测试。即微信朋友圈所满足的需求测试,是否实现了如同发朋友圈、评论、外部分享、屏蔽、权限设置、点赞等。(2)可靠性测试。检查朋友圈会不会在一定条件下失效,能否继续满足期望的稳定性。比如,可以在短时间内频繁发送和取消、删除朋友圈的组合测验,观察接口是否正常。或者将微信朋友圈打开后,切换到其他界面上,朋友圈是否会出现bug情况(极端情况测试);(3)性能测试。在客户端方面,可以考虑对朋友圈的cpu占有率、内存占有率、流量使用、刷新率、响应时间等进行测试,是否在合理允许的范围内;(4)其他测试。如在弱wifi、低网速下朋友圈功能会不会发生故障。在不同手机、平板、电脑下朋友圈是否能正常使用。朋友圈本身后端是否具有容易维护和可移植性等。站在用户客户角度:(1)朋友圈功能是否容易使用(2)朋友圈界面说明是否清晰明了(3)朋友圈布局是否合理美观(4)朋友圈推荐是否符合用户预期和个人习惯等。
2.面试题目--测试、网络、计算机相关
(1)黑盒、白盒测试是什么?
答:白盒测试也称为结构测试,主要用于检测软件编码过程中的错误,做一些细节性的检查工作。程序员的编程经验、对编程软件的掌握程度、工作状态等因素都会影响到编程质量,导致代码错误,比如逻辑错误、测试用例不全等。黑盒测试又称为功能测试,主要检测软件的每一个功能是否能够正常使用。在测试过程中,将程序看成不能打开的黑盒子,不考虑程序内部结构和特性的基础上通过程序接口进行测试,检查程序功能是否按照设计需求以及说明书的规定能够正常打开使用即可。灰盒测试介于二者之间,不仅要看功能是否正常,也需要对部分关键代码进行检查。常见的白盒测试方法有:程序流程路径检查、逻辑条件覆盖等;常见的黑盒测试方法有:等价类划分、边界值法、因果图法等。
(2)HTTP和HTTPS的区别?
答:HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。二者主要区别在于:1、HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。
(3)TCP和UDP的区别?
答:区别一是否基于连接。TCP是面向连接的协议,而UDP是无连接的协议。即TCP面向连接; UDP是无连接的,所以发送数据之前不需要建立连接。区别二可靠性和有序性区别。TCP 提供交付保证(Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输),无差错,不丢失,不重复,且按序到达,也保证了消息的有序性。该消息将以从服务器端发出的同样的顺序发送到客户端,尽管这些消息到网络的另一端时可能是无序的。TCP协议将会为你排好序。UDP不提供任何有序性或序列性的保证。UDP尽最大努力交付,数据包将以任何可能的顺序到达。TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。区别三、实时性。UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。区别四、资源占用TCP对系统资源要求较多,UDP对系统资源要求较少。TCP被认为是重量级的协议,而与之相比,UDP协议则是一个轻量级的协议。因为UDP传输的信息中不承担任何间接创造连接,保证交货或秩序的的信息。综上,UDP优点是简单、传输快,缺点是不可靠、不稳定;TCP优点是可靠、稳定,缺点是效率低、占用资源高。
(4)TCP三次握手是指什么?
答:通信双方建立TCP链接的过程。(1)第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers);第二次握手:服务器收到syn包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
(5)json和python中的dict区别?
答:json的key只能是字符串,python的dict可以是任何可hash对象(hashtable type); json的key可以是有序、重复的;dict的key不可以重复。 json的value只能是字符串、浮点数、布尔值或者null,或者它们构成的数组或者对象。 json任意key存在默认值undefined,dict默认没有默认值; json访问方式可以是[],也可以是.,遍历方式分in、of;dict的value仅可以下标访问。 json的字符串强制双引号,dict字符串可以单引号、双引号; dict可以嵌套tuple,json里只有数组。 json:true、false、null python:True、False、None,没有null。
(6)python中的库函数和模块有哪些?请举几例。
答:time、os、copy、sys、pickle、glob、math、random等。
(7)python中是如何管理内存的?
答:(1)引用计数。Python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时,它被垃圾回收。比如,x=4,y=x,fun(x),a=[1,x,3]等对象创建计数会+1;而delx, x=789(别名赋值),list.remove(x), del object时计数-1。(2)循环引用。当计数遭遇两个对象相互对指时会出现计数永远不等于0,即永远得不到回收的情况。(3)垃圾回收机制。当内存中有不再被使用的部分时,垃圾收集器可以将他们清理掉。它们会检查那些计数为0的对象,然后清除其所在的内存空间,或者清理掉循环引用的两个对象。(4)内存池机制。由于python申请内存通常都是小块内存,且在运行时大量的进行内存申请分配和释放操作,影响运行效率。因此python的内存池机制可以将不需要的内存空间放到内存池中而不是返回给操作系统。python中所有小于256字节的对象(小内存)都是用pymalloc(pool)来实现分配器,而大的对象才使用系统的malloc,并且整数、浮点数和列表都有私有的内存池,不会被其他对象共享。
(8)python中内存泄漏和溢出指的是什么,有什么区别?
答:(1)内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。对于python这种支持垃圾回收的语言来说,也会有内存泄露,大致有三种原因:1.所用到的用 C 语言开发的底层模块中出现了内存泄露。2.代码中用到了全局的list、 dict或其它容器,不停的往这些容器中插入对象,而忘记了在使用完之后进行删除回收。3.代码中有“引用循环”,并且被循环引用的对象定义了__del__方法,就会发生内存泄露。诊断内存是否泄露用到可用gc模块和objgraph模块。gc模块是Python的垃圾收集器模块,而objgraph 是一个用于诊断内存问题的工具。当在程序中选出诊断点后,插入以下语句:
import gc import objgraph ### 强制进行垃圾回收 gc.collect() ### 打印出对象数目最多的 50 个类型信息 objgraph.show_most_common_types(limit=50)
(2)内存溢出是指存储的数据超出了指定空间的大小,这时数据就会越界,一般是指栈空间里,分配了超过数组长度的数据的溢出。Python中内存溢出的原因可能是1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据2.集合类中有对对象的引用,使用完后未清空,产生了堆积,使得JVM不能回收3.代码中存在死循环或循环产生过多重复的对象实体4.启动参数内存值设定的过小。通常解决方案是1.修改JVM启动参数,直接增加内存(-Xms,-Xmx参数一定不要忘记加) 2.检查错误日志,查看“OutOfMemory”错误前是否有其它异常或错误。3.对代码进行走查和分析,找出可能发生内存溢出的位置。
总而言之,内存溢出是指向JVM申请内存空间时没有足够的可用内存了,就会抛出OOM即内存溢出。内存泄漏是指,向JVM申请了一块内存空间,使用完后没有释放,由于没有释放,这块内存区域其他类加载的时候无法申请,同时当前类又没有这块内存空间的内存地址了也无法使用,相当于丢了一块内存,这就是内存泄漏。显然,内存泄漏最终会导致内存溢出。
3.面试题目--智力类题目
(1)利用天平最少几次能区分次品?
答:n次称,最多可以从3^n个球中找出次品。原理是尽可能将每次称的球划分为数量相当的三组,一组放下,另外两组去称。如20个球1个次品,只需要3次即可。(1)将20/3=6…2,故分成7,7,6三组,让7和7去称,如果平,则6又分成2,2,2三组,选两组去称,如果平则在剩下那个2称出,如果不平,也在不平那个2去称出;7和7如果不平,则继续分成7/3=2…1,即2,2,3三组,用2去称或用2+1去称即可。
(2)25匹马,5个赛道,请问最少需要比较几次能找出前三名,前五名?
答:前三名:7次。马分五组进行比赛,得到各组名次,并记录---- 5次;2,取每组的第一名,比赛后,第一名直接晋级,淘汰没希望进前三的马,剩下两匹;3,第一名组的2,3名补上,第二名组的第1,2名,加上第三名,比赛取前两名,就可以了 (共7次比赛),前五名则需要9次,逻辑一样。
(3)现在有100阶楼梯,你需要从头开始走,每次走一步或者两步,请问最终可能有多少种可能性?如果对于100000阶楼梯,递归算法显然不好,问还有什么别的更好的解决办法?
答:参考leetcode70--爬楼梯。
(4)有1000瓶酒,商标未知,只有有一瓶毒酒。现在要求你在一天内用老鼠去喝酒以找出这瓶毒酒,请问最少需要多少只老鼠?
全部评论
(1) 回帖