python——基础教程——11(面试题)

阶段测试

作者答案写的并不好,仅做参考,后续将会重新更改答案。

以下的简答题,请使用语言+代码(实验过程)的方式表述出来

\1. 请你简述你对LVS的理解

LVS(Linux virtual server)
它是一个负载均衡、高可用性集群,主要针对大业务量的网络应用(比如新闻。电子商务、网上银行…)LVS是建立在一个主控服务器(双机)及若干个真实服务器组成。真实服务器负责提供服务,主控服务器会根据指定的调度算法对真实的服务器进行控制。LVS集群结构对用户来说是透明的,客户端只与单个IP(虚拟IP)进行通信。客户端向lvs发出服务请求主控服务器会通过特定的算法来指定某个真实服务器来应答,而客户端只与负载均衡的IP进行通信

\2. 请你说出Keepalived的工作原理和工作流程

Keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。Keepalived起初就是为了LVS调度节点高可用而设计的,专门用来监控集群系统中各个服务节点的状态。如果某个服务节点出现异常,或工作出现故障,Keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,也就是替LVS做了对后端realserver的健康状态监测。而当故障节点恢复正常后,Keepalived又可以自动将此服务节点重新加入到服务器集群中。这些工作全部自动完成,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点
主进行组播,
双主模式

\3. Lvs和keepalived的区别和联系是什么

Lvs是负载均衡的一个群集而keepalived是保证集群高可用的软件用来防治单点故障

\4. Python里面如何拷贝一个对象?

import copy 
a = '123'
b = copy.copy(a)
# 这是深复制
# 连带父类的规则一起复制下来,最大的区别在于内存地址a与b不同!
aa = '456'
bb = aa 
# 这是浅复制
# 子类会跟随父类进行改变

\5. 介绍一下except的用法和作用?

except是捕获异常
没有跟随参数,默认捕获所有异常,必须配合try使用

\6. Python中pass语句的作用是什么?

pass语句是跳过的意思
在python程序中,通常用来初期开发使用。

\7. 如何知道一个python对象的类型?

type()类型
dir()该函数用来返回对象的属性

\8. 介绍一下Python下range()函数的用法?

range()函数,通常用来迭代。
既然是迭代,那么就会使用for进行使用,不推荐在while时使用

\9. 如何用Python来进行查询和替换一个文本字符串?

# 1.使用切片进行处理
# 2.使用.format()进行二次重构
# 使用.split()
# 使用join进行更为复杂的处理

\10. Python里面如何生成随机数?

import random

a = [i for i in random.randint()]

\11. 平衡点问题
平衡点:比如int[] numbers = {1,3,5,7,8,25,4,20}; 25前面的总和为24,25后面的总和也是24,25这个点就是平衡点;假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点
要求:返回任何一个平衡点

numbers = []

使用sum函数累加所有的数。
使用一个变量fore来累加序列的前部。直到满足条件fore<(total-number)/2;

\12. Python 的特点和优点是什么?

特点:
python的代码注重可读性、一致性,可移植性
#########
有美人鱼老师来教
#########
优点:
对初学者友好
开源

\13. 深拷贝和浅拷贝的区别是什么?

import copy 
a = '123'
b = copy.copy(a)
# 这是深复制
# 连带父类的规则一起复制下来,最大的区别在于内存地址a与b不同!
aa = '456'
bb = aa 
# 这是浅复制
# 子类会跟随父类进行改变

\14. 列表和元祖有什么不同?

列表是动态数组,它们不可变且可以重设长度(改变其内部元素的个数)。
元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变。
元组缓存于Python运行时环境,这意味着我们每次使用元组时无须访问内核去分配内存。

\15. 什么是负索引?

a = [1,2,3]
a[-1]
# 这是第一种负索引方式
a[::-1]
# 这是第二种
# 负索引可以理解为倒序索引
# 因为负号的逻辑,在python中的定义,是被理解为从右至左

\16. 如何随机打乱列表中元素,要求不引用额外的内存空间?

# 使用随机数排序
import random


a = [1, 2, 3, 4, 5, 6]
random.shuffle(a)
print(a)

\17. Python 区分大小写吗?

# 严重区分!
类名使用大写,其次约定俗成就规定了python的首字母大写为类
而函数可以使用小写,但是名称必须符合驼峰命名法

\18. 如何删除字符串中的前置空格

str.strip()
str = str + ' '

\19. 如何将字符串转换为小写?

a = 'a'
a.lower()

\20. 解释 Python 中的//,%和**运算符

// 取整除 - 返回商的整数部分(向下取整)
% 取模 - 返回除法的余数
**- 返回x的y次幂

\21. 你如何管理不同版本的代码?

用github!
使用python的版本转换库

\22. 描述数组、链表、队列、堆栈的区别?

巴条---> 堆栈---> 队列---> 链表---> 数组
数组为最小,链表中包含数组,以此类推

\23. 你知道几种排序,讲一讲你最熟悉的一种?

冒泡排序
# 从头开始排序,对照始下标位和始+1下标位的大小,换位
简易快排序
# 从中间开始分化,同时进行冒泡排序,如果始排序末尾与始+1排序头无法对接,则进行整体换位排序。

\24. 线上服务可能因为种种原因导致挂掉怎么办?

# 砸服务器
# 重启服务,然后针对每一层环节进行捕获异常!

\25. 简单谈下GIL

全局锁,是python网络编程涉及到的领域。在python库socket中,全局锁用于控制多进程与多线程之间的共有信息空间和私有信息空间的取值相同计算问题。

\26. 请打印输出一个4*4的正方形(使用两种方法)

a = '-'
for i in rang(4):
	print(a*4)
# 第一种
print(a + '\n' + a +'\n' + a + '\n' + a)
# 第二种

\27. 请打印输出一个直角三角形(使用两种方法)

a = '*'
for i in range(5):
    print(''.ljust(5 - i, '*'))
# 倒直角三角形

print(a*5 + '\n' + a*4 + '\n' + a*3 + '\n' + a*2 + '\n' + a)
发布了99 篇原创文章 · 获赞 34 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_42346414/article/details/85721135