Python 核心基础技术 面试题

Q:Python中的列表和元组有什么区别?

A:

Q:python是否区分大小写?

是。Python是一种区分大小写的语言。

Q:什么是Python中的类型转换?

类型转换是指将一种数据类型转换为另一种数据类型。

int()  - 将任何数据类型转换为整数类型

float()  - 将任何数据类型转换为float类型

ord()  - 将字符转换为整数

hex() - 将整数转换为十六进制

oct()  - 将整数转换为八进制

tuple() - 此函数用于转换为元组。

set() - 此函数在转换为set后返回类型。

list() - 此函数用于将任何数据类型转换为列表类型。

dict() - 此函数用于将顺序元组(键,值)转换为字典。

str() - 用于将整数转换为字符串。

complex(real,imag)  - 此函数将实数转换为复数(实数,图像)数。

Q:Python数组和列表有什么区别?

Python中的数组和列表具有相同的存储数据方式。但是,数组只能包含单个数据类型元素,而列表可以包含任何数据类型元素。

Q:Python中的函数是什么?

函数是一个代码块,只有在被调用时才会执行。要在Python中定义函数,需要使用def关键字。

Q:什么是__init__?

__init__是Python中的方法或者结构。在创建类的新对象/实例时,将自动调用此方法来分配内存。所有类都有__init__方法。

Q:什么是lambda函数?

lambda函数也叫匿名函数,该函数可以包含任意数量的参数,但只能有一个执行操作的语句。

lambda 参数列表 : 表达式

fn1 = lambda a, b: a + b
print(fn1(1, 2))

3

Q:Python中的self是什么?

self是类的实例或对象。在Python中,self包含在第一个参数中。

Q:区分break,continue和pass?

A:

Q:[:: - 1}表示什么?

[:: - 1]用于反转数组或序列的顺序。

a = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(a[:: - 1])

"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
['g', 'f', 'e', 'd', 'c', 'b', 'a']

Process finished with exit code 0

Q:如何在Python中随机化列表中的元素?

用shuffle函数 

from random import shuffle

a = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

shuffle(a)

print(a)

Q:什么是python迭代器?

迭代器是可以遍历或迭代的对象。

Q:如何在Python中生成随机数?

random模块是用于生成随机数的标准模块。

random.random()方法返回[0,1]范围内的浮点数。该函数生成随机浮点数。随机类使用的方法是隐藏实例的绑定方法。可以使用Random的实例来显示创建不同线程实例的多线程程序。其中使用的其他随机生成器是:

randrange(a,b):它选择一个整数并定义[a,b]之间的范围。它通过从指定范围中随机选择元素来返回元素。它不构建范围对象。

uniform(a,b):它选择一个在[a,b)范围内定义的浮点数

normalvariate(mean,sdev):它用于正态分布,其中mean是平均值,sdev是用于标准偏差的sigma。

使用和实例化的Random类创建一个独立的多个随机数生成器。

import random

print(random.random())
print(random.randrange(0, 10))
print(random.uniform(1, 10))
print(random.normalvariate(3, 1))


"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
0.9790721244086154
4
7.254356562873354
2.295052144565066

Process finished with exit code 0

Q:range&xrange有什么区别?

在大多数情况下,xrange和range在功能方面完全相同。它们都提供了一种生成整数列表的方法,唯一的区别是range返回一个Python列表对象,x range返回一个xrange对象。这就表示xrange实际上在运行时并不是生成静态列表。它使用称为yielding的特殊技术根据需要创建值。该技术与一种称为生成器的对象一起使用。因此如果你有一个非常巨大的列表,那么就要考虑xrange。

Q:如何在python中写注释?

#字符开头,或者使用三重引号包含字符串进行注释。

Q:python中的生成器是什么?

返回可迭代项集的函数称为生成器。

Q:你如何把字符串的第一个字母大写?

在Python中,capitalize()函数可以将字符串的第一个字母大写。如果字符串在开头已经包含大写字母,那么它将返回原始字符串。

print('abcdefg'.capitalize())
print('Abcd'.capitalize())

"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
Abcdefg
Abcd

Process finished with exit code 0

Q:如何将字符串转换为全大小写?

upper() 和 lower()

# 转小写
print('abcd'.lower())
print('Abcd'.lower())
print('ABCD'.lower())
# 转大写
print('abcd'.upper())
print('Abcd'.upper())
print('ABCD'.upper())

"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
abcd
abcd
abcd
ABCD
ABCD
ABCD

Process finished with exit code 0

Q:如何在python中使用三元运算符?

c = a if a < b else b

a = 5
b = 8
c = a if a < b else b
print(c)

"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
5

Process finished with exit code 0

Q:* args,** kwargs?

*args传递元组,**kwargs传递字典。不确定将多少个参数传递给函数的时候使用

Q:len()函数有什么作用?

len()函数可用于确定字符串,列表,数组等的长度。

Q:在Python中split(),sub(),subn()功能。

如果要修改字符串,Python的“re”模块提供了3种方法。他们是:

split() - 使用正则表达式模式将给定字符串“拆分”到列表中。

sub() - 查找正则表达式模式匹配的所有子字符串,然后用不同的字符串替换它们

# 可以使用sub()方法来进行查询和替换,sub方法的格式为:
sub(replacement, string[, count=0])
# replacement是被替换成的文本
# string是需要被替换的文本
# count是一个可选参数,指最大被替换的数量

import re

p = re.compile('(b|d|f)')
print(p.sub('A', 'abcdefg'))
print(p.sub('A', 'abcdefg', count=1))

"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
aAcAeAg
aAcdefg

Process finished with exit code 0

subn() - 它类似于sub(),并且还返回新字符串。

Q:什么是负指数,功能是什么?

Python中的序列是索引的,它由正数和负数组成。积极的数字使用'0'作为第一个索引,'1'作为第二个索引,进程继续使用。

负数的索引从'-1'开始,表示序列中的最后一个索引,' - 2'作为倒数第二个索引,序列像正数一样前进。

负索引用于从字符串中删除任何换行符,并允许该字符串除了作为S [: - 1]给出的最后一个字符。负索引还用于显示索引以正确的顺序表示字符串。

Q:什么是Python包?

Python包是包含多个模块的命名空间。

Q:如何在Python中删除文件?

导入OS模块,然后os.remove()

Q:python的内置类型?

整型、浮点型、复数、字符串、布尔等。

Q:如何将值添加到python数组?

可以使用append(),extend()和insert(i,x)函数将元素添加到数组中。

Q:如何删除python数组的值?

可以使用pop()或remove()方法删除数组元素。这两个函数之间的区别在于前者返回已删除的值,而后者则不返回。

Q:深拷贝(deepcopy)和浅拷贝(copy)有什么区别?

在创建新实例类型时使用浅拷贝,并保留在新实例中复制的值。浅拷贝用于复制引用指针,就像复制值一样。这些引用指向原始对象,并且在类的任何成员中所做的更改也将影响它的原始副本。浅拷贝允许更快地执行程序,它取决于所使用的数据的大小。

深拷贝用于存储已复制的值。深拷贝不会将引用指针复制到对象。它引用一个对象,并存储一些其他对象指向的新对象。原始副本中所做的更改不会影响使用该对象的任何其他副本。由于为每个被调用的对象创建了某些副本,因此深拷贝会使程序的执行速度变慢。

Q:一行代码实现1--100之和

print(sum(range(1, 101)))

Q:如何在一个函数内部修改全局变量

利用global 修改全局变量

Q:列出5个python标准库

os:提供了不少与操作系统相关联的函数

sys:   通常用于命令行参数

re:   正则匹配

math: 数学运算

datetime:处理日期时间

Q:字典如何删除键和合并两个字典

del和update方法

dic = {'a': 'aaa', 'b': 'bbb'}
del dic['b']
print(dic)

dic2 = {'c': 'ccc'}
dic.update(dic2)
print(dic)

"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
{'a': 'aaa'}
{'a': 'aaa', 'c': 'ccc'}

Process finished with exit code 0

Q:python实现列表去重的方法

先转为集合再转回列表

list = [1, 2, 3, 3, 4, 5, 66, 66, 7, 88, 9]
a = set(list)
print(a)
b = [i for i in a]
print(b)

"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
{1, 2, 3, 4, 5, 66, 7, 9, 88}
[1, 2, 3, 4, 5, 66, 7, 9, 88]

Process finished with exit code 0

Q:python2和python3的range(100)的区别

python2返回列表,python3返回迭代器,节约内存

Q:一句话解释什么样的语言能够用装饰器?

函数可以作为参数传递的语言,可以使用装饰器

Q:面向对象中__new__和__init__区别

__init__是初始化方法,创建对象后,就立刻被默认调用了

1、__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别

2、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例

3、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值

4、如果__new__创建的是当前类的实例,会自动调用__init__函数,通过return语句里面调用的__new__函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__函数,也不会调用其他类的__init__函数。

Q:简述with方法打开处理文件帮我我们做了什么?

打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open

写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行finally f.close()关闭文件,with方法帮我们实现了finally中f.close

Q:列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]

map()函数第一个参数是fun,第二个参数是一般是list,第三个参数可以写list,也可以不写,根据需求

list = [1, 2, 3, 4, 5]
def fn(i):
    return i ** 2

res = map(fn, list)
a = [i for i in res if i > 10]
print(a)


"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
[16, 25]

Process finished with exit code 0

Q:python中断言方法举例

assert()方法,断言成功,则程序继续执行,断言失败,则程序报错

a = 1

assert(a>2)

Q:列出python中可变数据类型和不可变数据类型,并简述原理

不可变数据类型:数值型、字符串型string和元组tuple

不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址),如下图用id()方法可以打印对象的id

可变数据类型:列表list和字典dict;

允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。 

Q:求出列表所有奇数并构造新列表,a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表

list = [1, 2, 3, 4, 5, 6, 7, 8, 9]


def fn(i):
    return i % 2 == 1


res = filter(fn, list)
a = [i for i in res]
print(a)


"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
[1, 3, 5, 7, 9]

Process finished with exit code 0

Q:列表推导式求列表所有奇数并构造新列表,a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a = [i for i in list if i % 2 == 1]
print(a)

"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
[1, 3, 5, 7, 9]

Process finished with exit code 0

re.compile是将正则表达式编译成一个对象,加快速度,并重复使用

Q:a=(1,)b=(1),c=("1") 分别是什么类型的数据?

a元组,b int, c str

 你会怎么设计数据库

  1. 存储管理模块
    处理数据不能在磁盘上做,肯定是让程序加载到程序空间所在的内存中去做,磁盘IO速率往往是程序执行速度的主要瓶颈。
  2. 缓存机制
    为了更快、更好的优化我们的程序,要引入缓存机制。下次直接从内存中返回,而不用发生I/O操作。
  3. sql解析模块
    还需要能提供给外部指令,来操作我们的数据库,即可读的sql语言,那么我们需要一个sql解析模块,来将我们的sql编译、解析,转变为机器可识别的指令。这个时候如果想提高我们sql执行的效率,怎么办?还是将sql缓存到我们的缓存中,把sql编译好,方便下次过来直接进行解析。
    可以看到,我们在设计程序的时候,要先考虑功能,然后再进行性能优化。
    要注意:我们的缓存不宜过大,而且算法里面要有淘汰机制。
  4. 日志管理
    做的sql操作,需要记录下来,方便我们做数据库的主从同步,或者灾难恢复。因此需要日志管理办法,如binlog
  5. 权限划分
    对操作进行权限划分
  6. 容灾机制
    设计系统的时候除了考虑正常的情况,也要考虑异常的情况,那就是容灾机制

    对性能提升,最重要的两个模块
     
  7. 索引管理
    优化数据查询效率
  8. 锁管理
    数据库支持并发操作

二叉树根节点到叶子节点和为指定值的路径

  1. 可以将问题转化为二叉树的先序遍历;
  2. 在遍历一条路径时,每遍历一个节点,就把当前节点的值加入到路径和中;
  3. 假如到叶子节点的时候所求的路径和等于sum值那么就把当前这条路径的节点加入到结果集res中。

数组中找出重复的值

解法一:先对数组进行排序,然后再遍历数组,查看相邻元素是否重复;

解法二:开辟一个新数组B,每次扫描源数组A中的元素,如果不在B中,就加入B中,如果在B中,就找到一个重复的元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值