好久没有更新,目前已入职。持续更。
近期遇到的面试题总结
- 1、查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩
- 2、having和where的优先级
- 3、导致慢sql的原因
- 4、给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
- 5、一个列表中间某个数的值等于前面的和后面的??
- 6、手动测试与自动化测试的优缺点
- 7、常用的黑盒测试方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。
- 8、寻找第K大
- 9、最长无重复子数组
- 10、单词拆分
- 11、合并有序链表??
- 12、软件测试的核心竞争力是什么
- 13、其它
1、查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩
SELECT st.s_id,st.s_name,MIN(sc.s_score)'low' FROM
student as st
INNER JOIN
score as sc on st.s_id=sc.s_id
GROUP BY s_id HAVING low>=85
2、having和where的优先级
select distinct 字段1,...,字段n from 库.表
where 条件
group by 分组字段
having 过滤
order by 排序字段
limit n;
Mysql执行顺序,即在执行时sql按照下面的顺序进行执行:
from
on
join
where
group by
having
select
distinct
union
order by
limit
3、导致慢sql的原因
- 硬件问题。如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等。
- 没有索引或者索引失效。(一般在互联网公司,DBA会在半夜把表锁了,重新建立一遍索引,因为当你删除某个数据的时候,索引的树结构就不完整了。所以互联网公司的数据做的是假删除.一是为了做数据分析,二是为了不破坏索引 )
- 数据过多(分库分表)
- 服务器调优及各个参数设置(调整my.cnf)
4、给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。
class Solution:
def isValid(self , s ):
# write code here
#长度为奇数 一定不对
if len(s)%2 == 1:
return False
#只有3种括号在s中,才进行替换
while '{}' in s or '[]' in s or '()' in s:
s = s.replace('[]','').replace('{}','').replace('()','')
return True if s=='' else False
5、一个列表中间某个数的值等于前面的和后面的??
没找到答案!谁有答案可以给我回复一下。
6、手动测试与自动化测试的优缺点
手工测试缺点:
1、重复的手工回归测试,代价昂贵、容易出错。
2、依赖于软件测试人员的能力。
手工测试优点:
1、测试人员具有经验和对错误的猜测能力。
2、测试人员具有审美能力和心理体验。
3、测试人员具有是非判断和逻辑推理能力。
自动化测试的优点:
1、对程序的回归测试更方便。这可能是自动化测试最主要的任务,特别是在程序修改比较频繁时,效果是非常明显的。由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大提高测试效率,缩短回归测试时间。
2、可以运行更多更繁琐的测试。自动化的一个明显的好处是可以在较少的时间内运行更多的测试。
3、可以执行一些手工测试困难或不可能进行的测试。比如,对于大量用户的测试,不可能同时让足够多的测试人员同时进行测试,但是却可以通过自动化测试模拟同时有许多用户,从而达到测试的目的。
4、更好地利用资源。将繁琐的任务自动化,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来投入更多精力设计更好的测试用例。有些测试不适合于自动测试,仅适合于手工测试,将可自动测试的测试自动化后,可以让测试人员专注于手工测试部分,提高手工测试的效率。
5、测试具有一致性和可重复性。由于测试是自动执行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试的可重复的效果。
6、测试的复用性。由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同的测试过程中使用相同的用例。
7、增加软件信任度。由于测试是自动执行的,所以不存在执行过程中的疏忽和错误,完全取决于测试的设计质量。一旦软件通过了强有力的自动测试后,软件的信任度自然会增加。
自动化测试的缺点:
1、不能取代手工测试
2、手工测试比自动测试发现的缺陷更多
3、对测试质量的依赖性极大
4、测试自动化不能提高有效性
5、测试自动化可能会制约软件开发。由于自动测试比手动测试更脆弱,所以维护会受到限制,从而制约软件的开发。
6、工具本身并无想像力
7、常用的黑盒测试方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。
黑盒测试:
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,因此不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。
常用的黑盒测试方法
有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。
白盒测试:
白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。
白盒测试需要遵循的原则有:1. 保证一个模块中的所有独立路径至少被测试一次;2. 所有逻辑值均需要测试真(true)和假(false);两种情况;3. 检查程序的内部数据结构,保证其结构的有效性;4. 在上下边界及可操作范围内运行所有循环。
常用白盒测试方法:
静态测试:不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。
动态测试:需要执行代码,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。
白盒测试中的逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化:
1.语句覆盖每条语句至少执行一次。
2.判定覆盖每个判定的每个分支至少执行一次。
3.条件覆盖每个判定的每个条件应取到各种可能的值。
4.判定/条件覆盖同时满足判定覆盖条件覆盖。
5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
6.路径覆盖使程序中每一条可能的路径至少执行一次。
8、寻找第K大
#
#
# @param arr int整型一维数组 the array
# @return int整型
#
class Solution:
def maxLength(self , arr ):
max_val = 0
l = len(arr)
l_str = {}
j = -1
for i in range(l):
if arr[i] in l_str and j < l_str[arr[i]]:
j = l_str[arr[i]]
l_str[arr[i]] = i
if (i-j) > max_val:
max_val = i - j
return max_val
while True:
try:
arr =input()
arr =arr.strip("[").strip("]").split(",")
s =Solution()
res =s.maxLength(arr)
print(res)
except:
break
9、最长无重复子数组
#
#
# @param arr int整型一维数组 the array
# @return int整型
#
class Solution:
def maxLength(self , arr ):
max_val = 0
l = len(arr)
l_str = {}
j = -1
for i in range(l):
if arr[i] in l_str and j < l_str[arr[i]]:
j = l_str[arr[i]]
l_str[arr[i]] = i
if (i-j) > max_val:
max_val = i - j
return max_val
while True:
try:
arr =input()
arr =arr.strip("[").strip("]").split(",")
s =Solution()
res =s.maxLength(arr)
print(res)
except:
break
10、单词拆分
输入:"nowcoder",["now","coder"]
返回值:true
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param s string字符串
# @param dic string字符串一维数组
# @return bool布尔型
#
class Solution:
def wordDiv(self, s, dic):
# write code here
s_n = len(s)
d_n = len(dic)
dp = [False for i in range(s_n+1)]
dp[0] = True
for i in range(1, s_n-1):
if s[:i] not in dic:
continue
for j in range(i, s_n+1):
if s[i:j] in dic:
dp[j] = True
i = j
return dp[s_n]
输入:"nowcoder",["now","coder","no","wcoder"]
返回值:["no wcoder","now coder"]
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param s string字符串
# @param dic string字符串一维数组
# @return string字符串一维数组
#
class Solution:
def wordDiv(self , s: str, dic: List[str]) -> List[str]:
# write code here
result = []
res = []
l = len(s)
i = 1
flag = 0
start = [0]
while start:
while i <= l:
if s[start[-1]:i] not in dic:
flag = 0
pass
else:
res.append(s[start[-1]:i])
start.append(i)
flag = 1
i += 1
if flag:
result.append(' '.join(res))
flag = 0
else:
pass
if res:
res.pop()
i = start.pop() + 1
return result
11、合并有序链表??
没找到答案!谁有答案可以给我回复一下。
12、软件测试的核心竞争力是什么
测试人员的核心竞争力在于提早发现问题,并能够发现别人无法发现的问题。
1、早发现问题:问题发现的越早,解决的成本越低。如果一个需求在还未实现的时候就能发现需求的漏洞,那么这种问题的价值是最高的。
2、发现别人无法发现的问题:所有人都能发现的问题,你发现了,那就证明你是可以被替代的。别人发现不了,而你可以发现,那么你就是无法被替代。
13、其它
1、面试谈薪
我接到几个offer,年薪30W+带期权、40W+都有,我这个年龄和工龄,在测试行业这个薪水一般。
写到这个谈薪水,我不是一个擅长谈薪水的人,但是实际经验是,无论你是否符合这家公司的要求,HR基本都会说这个薪资我们目前给不到,你这边可以接受的最低薪资是多少,每每到这时候我就不该妥协,希望后辈们坚定立场,相信自己,并且期望薪资一定要略高于你实际想要的薪资,这样最终的结果双方才是满意的,至于涨幅是30%50%还是具体多少K,自己满意就好。
这里留下一句废话,只要足够优秀,足够有亮点和背景,没有卡涨幅这一说。
2、大厂工作收尾
在大厂的离职手续已经办理完毕,年底裁项目,没有给入职时允诺的年终奖,创新型的业务部就这样停服了,没有实现当初允诺的至少2年周期内不会有问题,心里空落落的,多少有点怨气,我是那么的相信你们说的话,可惜了我一手带大的项目成果。
所以,大厂的新业务也未必有保障,希望后辈们,多面试核心部门,面试的时候问清楚部门情况,主要负责的业务,以及业务的用户量级。已经上线的app也要关心它的实际用户量、整体的业务架构,这在很大程度上决定了你未来的工作走向。
PS:不要相信HR说的十N薪水,需要白纸黑字落在劳动合同里。关心自己赚的每一分钱。
PS:不要相信边缘业务有一天可以飞黄腾达,如果想要长久发展,入职前需要打听清楚。
3、在家面试
作为一名有孩子的妈妈,在家面试很尴尬,我只能屁颠屁颠找个麦当劳或者咖啡屋。
如果可以,请在在职期间完成下家公司的选择与面试,家庭生活很重要,维系家庭资金也很重要。
4、公司的选择
尽量选择业务量大,业务场景复杂,用户量足够多的公司,虽然工作上遇到的挑战会多,这也是历练,是阶梯。
尽量选择离家近的,如果搬家就无所谓的,像我买房子的,不适合再去租房,我只选择固定区域的,超过范围的直接回绝掉,避免浪费造火箭的时间,前面我做的就不太好,啥都面,还去现场面,寒冷的冬日把我冻的半死。
尽量选择对未来有发展的方向,测试分大数据、服务端、客户端、web端,测试开发、测试专项,如果你不是中途想干点别的,比如考公务员,回老家买房子,回老家定居,长远看来,选择大数据和服务端测试比较靠谱。
5、面试的过程中
尽量放松,遇到不会的问题,记忆一下,面试结束查漏补缺。
心情和态度要温和,礼貌而谦和,不需要卑躬屈膝,曲意迎合,最终入职也不会开心的。
回答问题有逻辑和条理,遇到过得问题,可以按以往的思路说,没遇到的问题,说稍微让我考虑一下,理清思路后回答,如果有兴趣继续了解的,可以和面试官探讨一下,说这方面您有什么见解么。
6、面对家人
开始我没有跟老人讲,老人心里承受能力不行,拿到第一个offer的时候,我说了,减少了他们的焦虑。
7、提前准备好面试工具
腾讯会议、钉钉、飞书、牛客、微信、企业微信等等,按要求。
日历上记录每天几点有面试。提前10分钟入场。
8、测试开发这个岗位,招人比较多,面试也是各方面高大上,实际工作普普通通。希望后辈们工作闲暇留出持续准备面试的时间。
9、化妆
人嘛,都是颜值生物,化妆加分,面试前抽时间画上几回,面试的时候,多少辅助点气场。
PS:我是个懒人,上班不化妆,没有邋里邋遢,也没有八分精致,简单的干干净净,我的标配是黑皮鞋搭配黑马甲黑色紧身裤搭配黑色紧身高领毛衣。
10、未来规划
希望自己,年入百万、身体倍棒、充满自信、带娃辣妈、常回家看看😊。
PS:这会儿想发个牢骚,比如感觉某些人的行为是个大傻X的行为又不好提醒对方,委婉的提醒对方的某个行为后,对方就比较生气并找各种理由为自己开脱,不提醒吧,自己憋着也挺难受。比较理解很多成年人的心里活动了,嘴巴不说话,心里已经骂了千百遍,看来是正常现象。但如果这个大XX是一起生活的,还是要多多的理解对方,毕竟要相辅相成共创辉煌,不能先把自己气死。
11、照顾小孩子
是个复杂且长久的事情,言传身教、身体力行的力量比想象中对孩子的影响大,宝的成长无形之中会超过我。
PS:下一代永远在推翻上一代的行为模式,所以人类社会才是在不断地进步,老一辈循规蹈矩的理念不适用在快速变化的环境中,比如我家的老一辈仍然努力想改变新一代的行为模式。
PS:可能未来的某一天,我的下一代思想高度远超于我,并不断探索更多的未知,是我不知道不理解的未知,到时我一定要默默闭嘴,少去想当然指挥他们,多去跳健身操。
12、健身
快走40分钟是不累人又有效果的方式,建议后辈每天快走40分钟,缓解亚健康带来的慵懒。
13、婚姻
我的婚姻是顺其自然的结婚生子,也有过深刻思考坚守一辈子的信念,我曾说“我嫁给你以后,生是你的人,死是你的鬼”。
奈何问世间情为何物,至此,吾亦不清楚情为何物,为何有人能漫不经心地说出分开的言辞。
接受或者不接受,选择伤心还是故作坚强都作罢,我也是经过2次生死后幸运活下来的人,情伤又如何,不过是人生旅程中一小段悲伤的故事。安静的地方一个人嚎哭一场挥洒掉所有的伤心,擦擦脸我还是信心满满的自己,我可爱的小孩,我仍然要发光发热引领你长大成人。
PS:这一篇文章写了好久,留着给未来的自己看看吧!