首先很喜欢这家公司的面试风格,比较务实。无奈,自己的心理因素和技术水平不行,才导致面试失败。继续努力1.首先上来的是编程题三元组1.1大致意思是:两个列表ab,如果a中的元素在b中,则保存这个元素在a中的索引值,最后输出所有索引值统一地。要求:时间复杂度小于O(n)。我当时想到的是循环遍历a,然后判断i是否在b中,但是这个时间复杂度是O(n2),GG。最后面试官提醒了我hashmap,我瞬间捶胸顿足……最后自己想了想,可以先把b转成字典,然后用in.a=[5,3,1,5,4]b=[5,3]d={}foriinb:d[i]=0res=[]l=len(a)foriinrange(l):如果a[i]ind:res.append(i)print(res)1.2如图,输入是这样的,输出是那样的,这样写吧...输入几组数据,有pid的-1代表根节点。如果数据是非根节点,则搜索该节点,直到找到根节点。其实我知道考的是树遍历,但是没见过这种题。还要自己构造输入数据的表格,一下子就懵了。另外,面试官一直盯着看……哎,承认自己能力不够吧。后续是我自己写的,大家可以看看,有什么问题可以在下方评论。d={“A”:“-1”,“A-1”:“A”,“A-2”:“A”,“A-3”:“A”,“A-2-1”:"A-2","A-2-2":"A-2","A-2-3":"A-2"}res=[]deffunc(node):array.append(node[0])如果节点[1]=="-1":returnfunc((node[1],d[node[1]]))foriind.items():array=[]func(i)string="/".join(array[::-1])res.append("/"+string)forjinres:print(j)1.3这道题太经典了。最短路径和。需要注意的是,是从第一行到最后一行,只能往下或者斜着走(我当时写的没看清楚,是从左上往右下写的。。。)。我这里写的是动态规划的解法。Leetcode上有个原题,解法不是唯一的。数组=[[1,8,5,2],[4,1,7,3],[3,6,2,9]]x=len(数组)y=len(数组[0])dp=[[0foriinrange(y)]forjinrange(x)]#遍历顺序为每一行每一列。所以在遍历数组的第一行时,只有执行if,确定dp中的第一行,然后确定dp中的第二行。#注意两个边界条件foriinrange(x):forjinrange(y):ifi==0:dp[i][j]=array[i][j]elifj==0:dp[i][j]=array[i][j]+min(dp[i-1][j],dp[i-1][j+1])elifj==y-1:dp[i][j]=array[i][j]+min(dp[i-1][j-1],dp[i-1][j])否则:dp[i][j]=array[i][j]+min(dp[i-1][j-1],dp[i-1][j],dp[i-1][j+1])#[[1,8,5,2],#[5,2,9,5],#[5,8,4,14]]print(min(dp[-1]))#42.其他面试题我就不写了在这里回答,你可以百度或google一下。2.1什么是事务,事务的出现是为了解决什么问题2.2什么是聚簇索引2.3如果没有主键,InnoDB会用哪个字段来创建主键2.3说说RabbitMQ中connection和channel的关系,以及建立频道或注释的一些规范。
