python相关内容三

1.技术面试题

(1)解释Linux中的进程、线程和守护进程的概念,以及如何管理它们?

答:进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在linux中,每个进程都有独立的地址空间,包括代码段、数据段、堆和栈等,不同的进程之间的资源是相互隔离的。

进程的管理

查看:ps aux(静态)、top(实时)。

控制:kill PID(终止)、nohup 命令 & (后台运行)。

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。

线程的管理:通过线程库(如 POSIX pthread)创建 / 同步线程

守护进程是在后台运行的一种特殊进程,它独立于控制终端,通常在系统启动时开始运行,在系统关闭时才结束,用于执行一些周期性的任务或提供某种服务。

守护的管理

创建:需脱离终端会话(如daemon库)。

控制:systemctl start/stop 服务名(systemd 系统)。

(2)请详细描述OSI七层模型和TCP/IP四层模型,并说明它们之间的对应关系。每一层的主要功能是什么?各层有哪些典型的协议?

答:

OSI 七层模型
物理层:处理物理介质信号传输,定义接口特性(如电压、线缆)。
数据链路层:将比特流组成帧,处理介质访问和差错检测。
网络层:进行路由选择,实现不同网络互联。
传输层:提供端到端通信服务,确保数据可靠传输。
会话层:建立、管理和终止通信会话。
表示层:处理数据的加密、解密、格式转换等。
应用层:为应用程序提供网络服务,如文件传输、电子邮件等。

TCP/IP 四层模型
网络接口层:对应 OSI 的物理层和数据链路层,负责帧的封装和传输。
网络层:对应 OSI 的网络层,负责 IP 数据报的路由和转发。
传输层:对应 OSI 的传输层,提供端到端通信服务。
应用层:对应 OSI 的会话层、表示层和应用层,为应用程序提供网络服务。

对应关系
TCP/IP 的网络接口层对应 OSI 的物理层和数据链路层。
TCP/IP 的网络层对应 OSI 的网络层。
TCP/IP 的传输层对应 OSI 的传输层。
TCP/IP 的应用层对应 OSI 的会话层、表示层和应用层

(3)详细介绍什么是最大堆/最小堆。

答:

最大堆:最大堆是一种完全二叉树,满足每个父节点的值都大于或等于其子节点的值。在最大堆中,根节点的值是整个堆中的最大值。最小堆则相反

最小堆:最小堆是一种完全二叉树,满足每个父节点的值都小于或等于其子节点的值。在最小堆中,根节点的值是整个堆中的最小值。

(4)详细介绍什么是二分搜索树。

答:

二叉搜索树是一种二叉树,它有这几种特性:

有序性:
左子树所有节点值 < 根节点值。
右子树所有节点值 > 根节点值。
左右子树也是 BST。
操作:
插入:递归比较,插入到合适位置。
删除:分叶子、单子节点、双子节点三种情况处理。
查找:递归比较,在左 / 右子树查找。
时间复杂度:
平均:插入、删除、查找均为 O(logn)。
最坏:退化为链时,均为 O(n)。
应用:数据检索、排序、文件系统等

2.HR面试题

(1)我们非常欣赏你的能力,但目前只能提供比你期望薪资低20%的offer。在这种情况下,你会接受这份工作吗?如果接受,你对未来薪资增长有什么期望?如果不接受,你的底线是什么?

答:

感谢贵公司的认可,我对这个岗位和贵公司的发展前景有着非常浓厚的兴趣,并且希望融入到这个大家庭里面。虽然目前的薪资比我的期望低了 20%,但我相信通过我的努力工作和后期经验的积累,能够让我为公司发挥价值,同时也期望在未来的薪资调整中,能够根据我的工作表现和公司的业绩,逐步提升薪资水平。

(2)我们公司经常需要加班到深夜,有时甚至需要周末工作。你如何看待这种工作强度?你认为工作与生活的理想平衡点在哪里?

答:

我理解紧急项目时加班不可避免,会积极应对。但也希望公司合理规划,减少不必要加班,保障效率与健康。

理想平衡点是工作时高效产出,生活中能放松充电,比如经过高强度或者紧急的加班后,公司能够给我们提过一定的缓冲时间,让我们好好的放松一下,这样才能让我们在后面的工作中有更好的质量去完成其它项目。

(3)你认为自己最大的优势是什么?这个优势如何帮助你胜任我们这个岗位?

答:

我认为我最大的优势是对一件事能够好好的坚持下去。对于贵公司这个岗位,工作过程中必然会面临各种挑战,例如可能会遇到复杂的技术难题。我的坚持精神能让我在面对这些挑战时能够好好的走下去。无论是需要长期跟进的项目,还是需要反复打磨的工作细节,我都能凭借这份坚持,确保工作高质量完成,为岗位工作的推进贡献力量。

(4)你认为这份工作能为你带来什么?你能为公司创造什么价值?

答:贵公司在这个行业的前景是非常不错的,我认为这个工作能够为我的it生涯带来很好的经验和积累,可以不断的丰富自己的能力和专业素养。

在专业技能方面,我具备扎实的专业知识,在团队协作方面,我具有良好的沟通能力和团队合作精神。在此外我还具有较强的学习能力和创新精神。通我的这些精神可以更好的融入公司的团体和解决公司的问题,我相信我可以运用我的能力和专业知识,能够帮助公司节约成本和时间。

3.问答题

(1)以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(lst):
    result = []
    for i in range(len(lst)):
        if i == len(lst) - 1:
            result.append(lst[i] * 2)
        elif lst[i] < lst[i+1]:
            result.append(lst[i] + 1)
        else:
            result.append(lst[i] - 1)
    return result

print(func([5, 3, 7, 2]))

答:[4,4,6,4]

先用result来存变化后的列表内容,然后用for循环的条件是这个列表的内元素的个数,后面执行的条件是,如果i等于列表的长度-1,那么就是列表中第i-1个元素的值乘2,elif条件就是判断如果列表中第i个元素小于第i+1个元素,那么第i个元素要加1 ,else条件是否则列表中第i个元素就要减一

(2)以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(lst):
    result = []
    for num in lst:
        if num % 3 == 0:
            result.append(num // 3)
        elif num % 2 == 0:
            result.append(num * 2)
            if num > 10:
                break
        else:
            result.append(num + 1)
    return result

print(func([9, 4, 12, 7, 14]))

答:[3,8,4,8,28]

这个是让num等于列表中的值,如num=0时,就是传入列表中的值9,然后进行对这个条件的执行。函数 func 的主要功能是对输入列表 lst 中的每个元素进行一系列的条件判断和操作,并将结果存储在一个新的列表 result 中,最终返回这个新列表

(3),以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(nums1, m, nums2, n):
    i = j = k = 0
    temp = nums1.copy()
    while i < m and j < n:
        if temp[i] < nums2[j]:
            nums1[k] = temp[i]
            i += 1
        else:
            nums1[k] = nums2[j]
            j += 1
        k += 1
    while i < m:
        nums1[k] = temp[i]
        i += 1
        k += 1
    return nums1

nums1 = [1, 3, 5, 0, 0]
m = 3
nums2 = [2, 4]
n = 2
print(func(nums1, m, nums2, n))

答:[1,2,3,4,5],这个函数 func的主要功能是将两个有序数组合并成一个新的有序数组

(4)以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(lst):
    total = 0
    for i in range(len(lst)):
        if i % 2 == 0:
            total += lst[i]
        else:
            total -= lst[i]
        if total < 0:
            total = 0
    return total

print(func([5, 3, 2, 7, 1]))

答:1 函数 func 的主要功能是对输入列表 lst 中的元素进行交替求和与求差操作,并在结果为负数时将其重置为 0,最终返回处理后的结果。从这个代码可以看出结果为1

(5)以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(lst):
    evens = []
    odds = []
    for num in lst:
        if num % 2 == 0:
            evens.append(num)
        else:
            odds.append(num)
    evens.sort()
    odds.sort(reverse=True)
    return evens + odds

print(func([3, 1, 4, 1, 5, 9, 2, 6, 5]))

答:[2, 4, 6, 9, 5, 5, 3, 1, 1],函数 func 的主要功能是将输入列表 lst 中的元素分为偶数和奇数两部分,分别对这两部分进行排序后合并成一个新的列表并返回。其中evens.append这个是偶数,odds.append这个是奇数

(6)以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(lst):
    result = []
    for i in range(len(lst)):
        current = lst.pop(0)
        if current % 2 == 0:
            lst.append(current * 2)
        else:
            result.append(current)
    return result + lst

data = [1, 2, 3, 4, 5]
print(func(data))

答:[1, 3, 5, 4, 8],函数 func 的主要功能是对输入列表 lst 中的元素进行循环处理,根据元素的奇偶性执行不同操作,最终将处理后的数据合并并返回。

(7)以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(lst):
    result = []
    for i in range(len(lst)):
        for j in range(i+1, len(lst)):
            if lst[i] + lst[j] == 10:
                result.append((lst[i], lst[j]))
                break
    return result

print(func([5, 3, 7, 2, 8]))

答:[(3, 7), (2, 8)],函数 func 的主要功能是在输入列表 lst 中,查找所有满足 “两元素之和为 10” 的有序数对((lst[i], lst[j]),其中 i < j),且每个元素作为第一个元素(lst[i])时,只匹配到第一个符合条件的元素(lst[j])后就停止后续匹配,最终返回这些数对组成的列表

(8)编写程序,反素数

反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数

输出显示前100个反素数,每行显示10个

答:

def susu(n):
    for num in range(2, n):
        if n % num == 0:
            return False
    return True

def reverse(n):
    return int(str(n)[::-1])

def susu_reverse(n):
    return susu(n) and susu(reverse(n))

num = 2
count = 0

while count < 100:
    if susu_reverse(num):
        print(num, end=" ")
        count += 1
        if count % 10 == 0:
            print()
    num += 1

(9)编写程序,梅森素数

如果一个素数可以写成2p−12^p-12p1的形式,其中p是某个正整数,那么这个素数就称作梅森素数

输出p≤31的所有梅森素数

答:

def susu(n):
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

def mlss():
    for p in range(1, 32):
        a = 2**p - 1
        if susu(a):
            print(a, end=" ")
mlss()

(10)编写程序,数列求和

编写一个函数计算下面的数列:

m(i)=12+23+...+ii+1m(i) = \frac{1}{2} + \frac{2}{3} + ... + \frac{i}{i + 1}m(i)=21+32+...+i+1i

并输出测试结果:

i		m(i)
1		0.500
2		1.16
...		
19		16.40
20		17/35

答:

def jisuan(i):
    sum = 0
    for j in range(1,i+1):
        sum += j/  (j+1)
    return sum

for i in range(1,21):
    print(f"{jisuan(i):.2f}")

(11)编写程序,组合问题

有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?

答:

count = 0
for i in range(1, 5):
    for j in range(1, 5):
        for k in range(1, 5):
            if i != j and i != k and j != k:
                a= i*100 + j*10 + k
                count += 1
                print(a)
print(count)

(12)编写程序,计算e

你可以使用下面的数列近似计算e
e=1+11!+12!+13!+14!+...+1i! e=1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+\frac{1}{4!}+...+\frac{1}{i!} e=1+1!1+2!1+3!1+4!1+...+i!1
当i越大时,计算结果越近似于e

答:

n = int(input())
e = 1
a = 1
for i in range(1,n+1):
    a*=i
    e += 1/a
print(e)

(13)编写程序,完全数

如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数

例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1

输入输出描述

输入一个正整数

输出该数是否为完全数

示例1

输入:

6

输出:

Yes

示例2

输入:

9

输出:

No

答:

def zzs(n):
    sum = 1
    for i in range(2, n):
        if n % i == 0:
            sum += i
    return sum == n


num = int(input("请输入一个正整数: "))
if zzs(num):
    print("Yes")
else:
    print("No")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值