聊聊我的一次真实 Python 面试经历

文章讲述了面试中遇到的问题,涉及循环效率优化(使用HashMap替代O(n^2)遍历),树的遍历理解,动态规划解决最短路径问题,以及数据库知识(事务、聚簇索引)和消息队列(RabbitMQ)的理解。同时强调了Python学习的广泛性及其在面试中的重要性,提供了学习资源和面试准备建议。
摘要由CSDN通过智能技术生成

这个我当时想到的是循环遍历a,然后判断是否i in b,但是这个时间复杂度是O(n2),GG。最后面试官提醒了我一下hashmap,瞬间捶胸顿足……。最后自己想了一下,可以将b先转成字典,然后再使用in。

a = [5,3,1,5,4]
b = [5,3]
d = {}
for i in b:
    d[i] = 0
res = []
l = len(a)
for i in range(l):
    if a[i] in d:
        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 = []
def func(node):
    array.append(node[0])
    if node[1] == "-1":
        return
    func((node[1],d[node[1]]))

for i in d.items():
    array = []
    func(i)
    string = "/".join(array[::-1])
    res.append("/"+string)

for j in res:
    print(j)

1.3 这个题太经典了。最短路径和。

图片

要注意是从第一行走到最后一行,而且只能向下或者斜向下走(我当时没看清就写,写成了从左上走到右下……)。我这里写的是动态规划的解法。Leetcode上有原题,解法不唯一。

array = [[1,8,5,2],
         [4,1,7,3],
         [3,6,2,9]]
x = len(array)
y = len(array[0])
dp = [[0 for i in range(y)] for j in range(x)]
# 遍历顺序是每行内的每列。所以遍历array中第一行只执行到if,dp中第一行就确定了,然后再确定dp第二行。
# 要注意两个边界条件
for i in range(x):
    for j in range(y):
        if i == 0:
            dp[i][j] = array[i][j]
        elif j == 0:
            dp[i][j] = array[i][j] + min(dp[i-1][j], dp[i-1][j+1])
        elif j == y-1:
            dp[i][j] = array[i][j] + min(dp[i-1][j-1],dp[i-1][j])
        else:
            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]))
# 4

2.其他面试问题

这里就不写答案了,大家可以百度或google一下。

2.1 什么是事务,事务的出现是为了解决什么问题

2.2 什么是聚簇索引

2.3 假如没有主键,InnoDB会以哪个字段建立主键

2.3 聊聊RabbitMQ中的connection与channel的关系,还有建立channel的一些规范或注意事项。

关于Python学习指南

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值