python技术面试题(二十)

简介: python技术面试题(二十)

每日分享

The struggle you're in today is developing the strength you need for tomorrow.

今天拼搏的是明天你需要的力量。

小闫语录

没有无畏的奋斗,也没有无用的经历。现在所经历的都会成为将来你厚积薄发的蓄力,加油!


1.笔试题

1.1 哈希树

哈希树是专门优化查询效率的一种数据结构,这棵树查询效率极高,单论查询,要比二叉排序树快。

哈希树是通过质数分辨算法建立的,所以我们首先来看一下质数分辨算法。

质数是只能被1和它本身整除的数,所以2是最小的质数。在一篇论文中曾描述过质数分辨定理『n个不同的质数可以“分辨”的连续整数个数和他们的乘积相等。“分辨”就是指这些连续的整数不可能有完全相同的余数序列』。

人们发现int类型最大能表示21亿个数,10个连续的质数能分辨的整数个数为 2*3*5*7*11*13*17*19*23*29=6464693230这个数超过了21亿,也就是说任何数经过10次以内计算肯定能找到。这就是为什么它查询快了。

看完是不是一脸蒙蔽,我还是用一个小栗子来说一下这棵树吧。

一个数除以2,余数有几种?0和1,所以哈希树的第2层有两个叉。查询就是根据余数判别走哪条路,一个数先除以2,根据余数找到分叉,用商除以3,根据余数找到分叉,再用商除以5。。。。不断的除下去,直到根据余数找到对应的数,或者跟本找不到为空。这就是哈希树。

1.2链表和顺序表的区别

顺序表中元素存储位置是相邻连续的,是可以快速访问到任何元素的一种数据结构。一个顺序表在使用前必须指定好存储空间大小,一旦分配内存就不可轻易更改。优点就是查询快速,缺点是插入非尾端数据或删除非尾端数据麻烦。顺序表由两部分组成,一部分是元素集合,一部分是有关表整体情况的信息(主要包括元素存储区的容量和元素的个数)。实现的方式为一体式和分离式,顾名思义,以顺序表两部分的情况区分。python中的list就是利用分离式顺序表实现的。

顺序表的构建需要预先知道数据大小来申请连续的存储空间,而进行扩充的时候,又不得不进行数据的搬迁,使用起来不是很灵活。为了充分利用计算机的内存空间,实现灵活的内存动态管理,我们就用到了链表。链表作为一种基础的数据结构,与顺序表不同,它是通过指针来描述元素关系的一种数据结构。它保存元素的时候,内存空间可以是不连续的,每个节点保存元素和下一个元素的指针即可。优点显而易见,但是缺点也很明显,就是查找元素必须重头开始查找。

1.3用代码实现一个死锁

假如一个线程在未释放锁的情况下发生了意外终止响应,其他线程获取不到锁而一直等待,这就是造成了死锁。下面我们利用简单的几行代码来模拟一个死锁的情况:

import threading
import time
# 创建互斥锁
lock = threading.Lock()
# 根据下标去取值, 保证同一时刻只能有一个线程去取值
def get_value(index):
    # 上锁
    lock.acquire()
    print(threading.current_thread())
    my_list = [3,6,8,1]
    # 判断下标释放越界
    if index >= len(my_list):
        print("下标越界:", index)
        return
    value = my_list[index]
    print(value)
    time.sleep(0.2)
    # 释放锁
    lock.release()
if __name__ == '__main__':
    # 模拟大量线程去执行取值操作
    for i in range(30):
        sub_thread = threading.Thread(target=get_value, args=(i,))
        sub_thread.start()

死锁产生后,程序会发生停止响应,空耗资源。为了避免此种情况,我们需要在合适的地方释放锁。

相关文章
|
12天前
|
机器学习/深度学习 算法 数据挖掘
6种有效的时间序列数据特征工程技术(使用Python)
在本文中,我们将探讨使用日期时间列提取有用信息的各种特征工程技术。
46 0
|
3天前
|
数据采集 机器学习/深度学习 搜索推荐
Python爬虫技术基础与应用场景详解
本文介绍了爬虫技术的基本概念、原理及应用场景,包括数据收集、价格监测、竞品分析和搜索引擎优化等。通过一个实战案例展示了如何使用Python爬取电商网站的商品信息。强调了在使用爬虫技术时需遵守法律法规和道德规范,确保数据抓取的合法性和合规性。
|
5天前
|
存储 安全 算法
显微镜下的安全战!Python加密解密技术,透视数字世界的每一个安全细节
【9月更文挑战第7天】在数字世界中,数据安全至关重要。Python加密解密技术如同显微镜下的精密工具,确保信息的私密性和完整性。以大型医疗机构为例,通过AES和RSA算法的结合,既能高效加密大量医疗数据,又能安全传输密钥,防止数据泄露。以下是使用Python的`pycryptodome`库实现AES加密和RSA密钥交换的简化示例。此方案不仅提高了数据安全性,还为数字世界的每个细节提供了坚实保障,引领我们迈向更安全的未来。
10 1
|
12天前
|
测试技术 开发者 Python
Bottle技术:如何用Python打造小巧而强大的Web应用,让你一鸣惊人?
【8月更文挑战第31天】本文介绍了Bottle——一种轻量级Web框架,以其简洁的语法和强大功能受到开发者喜爱。文章涵盖Bottle的核心概念(路由、模板、请求对象),并展示了其简单易用的特性及快速开发能力。通过遵循最佳实践,开发者能够高效地利用Bottle创建高质量Web应用,迎接未来Web开发的挑战。
12 1
|
12天前
|
测试技术 Python
Bottle技术:如何用Python打造小巧而强大的Web开发利器?
【8月更文挑战第31天】Bottle是一个用Python编写的轻量级Web框架,设计简洁、快速且小巧,适用于快速开发Web应用程序。其主要特点包括简单易学、快速开发、小巧轻量及强大的功能,如路由、模板和表单验证等。Bottle的核心概念包括路由、模板和请求对象,可通过示例了解其基本用法。此外,合理使用路由、编写测试和利用Bottle扩展等最佳实践有助于更高效地进行Web开发。随着Bottle生态的不断发展,它将在未来Web开发中扮演更重要的角色。
19 1
|
17天前
|
数据处理 开发者 Python
Python技术深度探索与实战应用
Python技术深度探索与实战应用
53 3
|
4天前
|
应用服务中间件 网络虚拟化 nginx
Python中采用lasso、SCAD、LARS技术分析棒球运动员薪资的案例集锦
以上是对每个问题的简要答案,由于篇幅限制,未能深入到1000字的详细解释,但希望这提供了一个良好的起点。对于这类复杂的话题,深入研究和专业指导至关重要。
13 0
|
11天前
|
运维 Kubernetes 监控
自动化运维:使用Python脚本实现系统监控云原生技术实践:Kubernetes在现代应用部署中的角色
【8月更文挑战第31天】在现代IT运维管理中,自动化已成为提高效率和准确性的关键。本文将通过一个Python脚本示例,展示如何实现对服务器的自动监控,包括CPU使用率、内存占用以及磁盘空间的实时监测。这不仅帮助运维人员快速定位问题,也减轻了日常监控工作的负担。文章以通俗易懂的语言,逐步引导读者理解并实践自动化监控的设置过程。 【8月更文挑战第31天】本文旨在探索云原生技术的核心—Kubernetes,如何革新现代应用的开发与部署。通过浅显易懂的语言和实例,我们将一窥Kubernetes的强大功能及其对DevOps文化的影响。你将学会如何利用Kubernetes进行容器编排,以及它如何帮助你的
|
11天前
|
缓存 开发者 Python
探索Python中的装饰器:技术感悟与实践
【8月更文挑战第31天】在Python的世界里,装饰器如同一把魔法棒,轻轻一挥便能为函数和类增添强大的功能。本文将带你揭开装饰器的神秘面纱,通过浅显易懂的语言和实际代码示例,一起探索它们的魅力所在。从基础概念到高级应用,我们逐步深入,让你不仅理解装饰器是什么,更学会如何用它们来简化代码、增强模块功能。让我们一起开启这段装饰器的学习之旅吧!
|
17天前
|
设计模式 人工智能 数据挖掘
Python设计技术深度探索与实战
Python设计技术深度探索与实战
15 0