1.找到链表倒数第k个节点
假设一共链表长度为 x, 倒数第k个节点就是正数第 x-k+1个节点
所以,方法
在起点设置两个指针a,b
当 a 走到第 k-1个节点时,b 开始走
当 a 走完整个链表时,b 所处位置就是倒数第k个节点位置
a,b速度相同
2.获得子符串的所有字串
def cut(s):
results = []
leng = len(s)
for i in range(leng):
for j in range(leng - i):
results.append(s[j:i + j + 1])
print(results)
cut(input())
输入 abc
输出 a,b,c, ab, bc, abc
3.小米笔试
比如,输入
abcdefgh 7
输出
abcdefg
h000000
算法
all_str = input()
b = []
all = all_str.split(' ')
str = all[0]
leng = int(all[-1])
if len(str) % leng == 0:
duan = len(str)//leng
else:
duan = len(str)//leng+1
j = 0
y = leng## 标题
for i in range(duan):
t = str[j:y]
j += leng
y += leng
b.append(t)
fina = len(b[-1])
for i in range(leng-fina):
b[-1] += '0'
for i in b:
print(i)
4.对称加密和非对称加密
对称加密:DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法
非对称加密:RSA算法
5.Python的内存管理机制
分为对象缓冲池和内存池
Python中的内存管理机制的层次结构提供了4层,其中最底层则是C运行的malloc和free接口,
往上的三层才是由Python实现并且维护的。
上面三层分别是 block,arena,pool,usedpool 组成内存池
注意,内存大小以256字节为界限,大于则通过malloc进行分配,小于则通过内存池分配。
垃圾回收采用引用计数法
即创建时计数1,调用、复制加一,引用被销毁减一,为0时回收,释放内存
del()
优点:实时性高
缺点:效率低,可能会导致内存泄露(循环引用)
标记–清除
效率不高
分代回收
原理:将系统中的所有内存块根据其存活时间划分为不同的集合,每一个集合就成为一个“代”,
Python默认定义了三代对象集合,垃圾收集的频率随着“代”的存活时间的增大而减小。
也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。
那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,
如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。
6.osi七层模型作用
应用层:提供应用程序间的通信
表示层:数据编码、翻译
会话层:建立、维护、中止会话
传输层:建立主机端到端连接
网络层:逻辑编址、寻址
数据链路层:介质访问、链路管理
物理层:介质、接口标准、比特流
附:Web页面请求过程
url输入---DNS域名解析---建立TCP连接---形成HttpRequest请求
---Nginx反向代理---服务端处理请求---关闭TCP连接---返回渲染页面
7.约瑟夫环问题
nums = 40
call = 5
# 参数定义:
peoples = [True for i in range(nums)]
result = []
num = 1
while (any(peoples)):
for index, people in enumerate(peoples):
if people:
if num == call:
peoples[index] = False
result.append(index + 1)
num = 1
else:
num += 1
print('\n总数为%d,报数为%d' % (nums, call))
print('约瑟夫序列为:\n%s\n' % result)
8.获取字符串中的数字
d = []
a = input()
for i in a:
try:
if int(i):
d.append(i)
except:
d.append('')
d = ''.join(d)
print(d)