1. b、B、KB、MB、GB的关系?
b ---- 位(bit)
B ---- 字节(一个字节等于8位)
1 B = 8 bit
1 KB = 1024 B
1 MB = 1024 KB
1 GB = 1024 MB
2. PE8规范
1. 使用4个空格而不是tab键进行缩进。
2. 每行长度不能超过79。
3. 使用空行来间隔函数和类。
4. 必要时候,在每一行下写注释。
5. 使用文档注释,写出函数注释。
6. 在操作符和逗号之后使用空格,但是不要在括号内部使用。
7. 命名类和函数的时候使用一致的方式,比如使用 CamelCase 来命名类,使用 lower_case_with_underscores 来命名函数和方法。
8. 在类中总是使用 self 来作为默认。
9. 尽量不要使用魔法方法。
10. 默认使用UTF-8,甚至ASCII作为编码方式。
11. 换行可以使用反斜杠,最好使用圆括号。
12. 不要在一句 import 中多个库。 空格的使用
各种右括号前不要加空格。
逗号、冒号、分号前不要加空格。
函数的左括号前不要加空格。如Func(1)。
序列的左括号前不要加空格。如list[2]。
操作符左右各加一个空格,不要为了对齐增加空格。
函数默认参数使用的赋值符左右省略空格。
不要将多句语句卸载同一行,尽管使用‘;’允许。
if/for/while语句中,即使执行语句只有一句。也必须另起一行。 函数命名使用全部小写的方式,常量命名使用大写,类属性(方法和变量)使用小写。
类的命名首字母大写。
3. 通过代码实现如下进制间的转换。
# 二进制转换成十进制 —— int
v = "0b1111011"
b = int(v, 2)
print(b) # 123 # 十进制转换成二进制 —— bin
v2 = 18
print(bin(int(v2))) # 0b00a0 # 八进制转换成十进制
v3 = "011"
print(int(v3)) # 11 # 十进制转换成八进制 —— oct
v4 = 30
print(oct(int(v4))) # 0o36 # 十六进制转换成十进制
v5 = "0x12"
print(int(v5, 16)) # 18 # 十进制转换成十六进制 —— hex
v6 = 87
print(hex(int(v6))) # 0x57
4. python递归的最大层数?
998 主要还是要和执行的机器有关。
5. 求结果(and or)
1. 1 or 3
print(1 or 3) # 1
2. 1 and 3
print(1 or 3) # 3
3. 0 and 2 and 1
print(0 and 2 and 1) # 0
4. 0 and 2 or 1
print(0 and 2 or 1) # 1
5. 0 and 2 or 1 or 4
print(0 and 2 or 1 or 4) # 1
6. 0 or False and 1
print(0 or False and 1) # False
总结:
x or y 如果x为真,则值为x,否则为y。
x and y 如果x为真,则值为y,否则为x。

运算符:

1. 2 & 5
print(2 & 5) # 10 & 101 => 000 => 0
2. 2 ^ 5
print(2 ^ 5) # 10^101 => 111 => 1*2**0+1*2**1+1*2**2=1+2+4+7
6. ASCII、Unicode、UTF-8、GBK 的区别?
Python2内容进行编码默认是ASCII,而Python3对内容进行编码默认为UTF-8。
ASCII:最多只能用8位来表示,即2**8 = 256,所以,ASCII最多只能用8位来表示(一个字节),即2**8 = 256,所以,ASCII最多只能表示256个符号。
Unicode:万国码,任何一个字符==两个字节
UTF-8:万国码的升级版,1个中文字符==3个字节,英文是1个字节,欧洲的是2个字节。
GBK:国内版本,1个中文字符==3个字节,英文是1个字节
gbk转utf-8:需通过媒介Unicode
7. 三元运算写法和应用场景?
应用场景:简化if语句
# 关于三元运算
# 结果 + if + 条件 + else + 结果
result = 'gt' if 1 > 3 else 'lt'
print(result) # lt
# 理解:如果条件为真,把if前面的值赋值给变量,否则把else后面的值赋值给变量 lambda表达式:
temp = lambda x, y : x+y
print(temp(4, 10)) # 14
可替代:
def foo(x, y):
return x+y
print(foo(4, 10)) # 14
8. python2 和 python3 的区别?
1. 打印时,py2可以不加括号,也可以加括号,py3必须加括号。
py2:print('lili'), print 'lili'
py3:print('lili') 2. exec语句被py3废弃,统一使用exec函数。 3. 内涵:
py2: 1. 臃肿,源码的重复量多。
2. 语法不清晰,掺杂着c,php,java的一些陋习。
py3:几乎是重构后的源码,规范,清晰,优美。 4. input不同
py2:raw_input
py3:input 统一使用input函数 5. 指定字节
py2在编译安装时,可以通过参数 --enable-unicode=ucs2 或者 --enable-unicode=ucs4 分别用于指定使用2个字节、4个字节表示一个unicode;
py3无法进行选择,默认选择使用ucs4;
查看当前py中表示unicode字符串时占用的空间;
import sys
print(sys.maxunicode)
# 如果值是65535,则表示使用ucs2标准,即:2个字节表示
# 如果值是1114111,则表示使用ucs4标准,即:4个字节表示 6.
py2:xrange
py3:range 统一使用range,py3中range的机制也可以进行修改并提高了大数据集生成效率。 7. 在包的知识点里
包:一群模块文件的集合 + __init__
区别:py2:必须有__init__
py3:不是必须的了 8. 不相等操作符"<>"被py3废弃,统一使用"!="。 9. long整数类型被py3废弃,统一使用int。 10. 迭代器iterator的next()函数被py3,统一使用next(iterator)。 11. 异常StandarError被py3废弃,统一使用Exception。 12. 字典变量的has_key函数被py废弃,统一使用in关键词。 13. file函数被py3废弃,统一使用open来处理文件,可以通过io.IOBase检查文件类型。
9. py2和py3中 int 和 long 区别
在py3里,只有一种整数类型int,大多数情况下,和py2中的长整型类型。
10. xrange 和 range 的区别
都在循环时使用,xrange内存性能更好,xrange用法与range完全相同,range一个生成list对象,xrange是生成器
要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
py2中:range([start,] stop[, step]), 根据start与stop指定的范围以及设定的步长,生成一个序列
xrange用法与range完全相同,所不同的是生成的不是一个数组,而是一个生成器。由上面的示例可以知道:要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间,这两个基本上都是在循环的时候用。
py3:range()是像xrange()那样实现,xrange()被抛弃。
11. 文件操作时:xreadlines 和 readlines 的区别?
readlines:返回一个列表
xreadlines:返回一个生成器
12. 列举布尔值为 False 的常见值?
0,"",{},[],(),set(),False,负数,不成立的表达式,None等
13. pass、continue、break、exit的作用
pass:代码占位语句,不做任何操作
continue:结束本次循环,使程序进入到下一次循环
break:结束当前的循环
exit:结束当前程序
14:is 和 == 的区别
is比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同。
==比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就可以。默认会调用对象的__eq__()方法。
a = 'lishi'
str1 = 'li'
str2 = 'shi'
str3 = 'str1 = str2'
print("id(a)", id(a))
print("id(str3)", id(str3))
# a == str3 True == ---> 只需要内容相等
# a is str3 False is ---> 只需要内存地址相等
# id(a) 38565848
# id(str3) 39110280
15. 谈谈py的深浅拷贝以及实现方法和应用场景?
浅拷贝只是增加了一个指针指向一个存在的地址,而深拷贝是增加一个指针并且开辟了新的内存,这个增加的指针指向这个新的内存,采用浅拷贝的情况,释放内存,会释放同一内存,深拷贝就不会出现释放同一内存的错误。
一层的情况:
import copy
# 浅拷贝
li1 = [1, 2, 3]
li2 = li1.copy()
li1.append(4)
print(li1, li2) # [1, 2, 3, 4][1, 2, 3]
# 深拷贝
li1 = [1, 2, 3]
li2 = copy.deepcopy(li1)
li1.append(4)
print(li1, li2) # [1, 2, 3, 4][1, 2, 3]
多层的情况:
import copy
# 浅拷贝 指向共有的地址
li1 = [1, 2, 3, [4, 5], 6]
li2 = li1.copy()
li1[3].append(7)
print(li1, li2) # [1, 2, 3, [4, 5, 7], 6][1, 2, 3, [4, 5, 7], 6]
# 深拷贝
li1 = [1, 2, 3, [4, 5], 6]
li2 = copy.deepcopy(li1)
li1.append(7)
print(li1, li2) # [1, 2, 3, [4, 5, 7], 6][1, 2, 3, [4, 5], 6]
16. py垃圾回收机制?
1. 引用计数:
每一个对象都有ob_refcnt就是引用计数器,默认值为1,当有其他的变量引用对象时,引用计数器就会发生变化。
当一个引用计数器为0时,意味着没有人再使用这个对象,没有人是使用,就要进行垃圾回收。
2. 标记清除:
为了解决引用计数器的循环引用的问题
在py的内部某种情况下触发,到可能存在循环引用的单独链表进行扫描,检查是否有循环引用,如果存在循环引用,就让双方的引用计数器都-1,如果引用计数器都成0,则认为是垃圾,系统进行回收。
3. 分代回收:
将可能存在循环引用的对象维护三个链表
0代:0代中对象个数达到700扫描一次
1代:0代扫描10次,则1代扫描1次
2代:1代扫描10次,则2代扫描1次
4. 缓存机制:
为了避免重复使用的创建和销毁一些常见的对象,py在启动时维护了一个池子,存放:-5,-4,-3......256,这些数据占据的内存空间是确定的标记清除。
17. py的可变类型和不可变类型?
可变数据类型:列表、字典、可变集合
不可变数据类型:数字、字符串、元组、不可变集合
18. 一行代码实现9*9乘法表?
print('\n'.join([' '.join(['%s*%s=%-2s' % (j, i, i*j) for j in range(1, i+1)]) for i in range(1, 10)]))
19. 如何安装第三方模块?以及用过那些第三方模块?
1:pip包管理器
2:源码下载
- 下载
- 解压
- python setup.py build
- python setup.py install
用过的第三方模块:requests,pymysql,DbUtils,SQLAlchemy等。
20. 常用模块都有哪些?
re模块、os模块、json模块、time模块,爬虫里面的requests/beautifulsoup4(bs4)

Python企业面试题1 —— 基础篇的更多相关文章

  1. Java面试题之基础篇概览

    Java面试题之基础篇概览 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,且public的类名必须与文件名相一致. 2.Ja ...

  2. Python 企业面试题集锦之Python基础

    △字符串.列表.元组.字典每个常用的5个方法? 字符串: 字符串用单引号(')或双引号(")括起来,不可变. s.strip(c):去除空格或指定的字符c:lstrip/rstrip: s. ...

  3. 生产消费者模式与python+redis实例运用(基础篇)

    根据这个图,我们举个简单的例子:假如你去某个餐厅吃饭,点了很多菜,厨师要一个一个菜的做,一个厨师不可能同时做出所有你点的菜,于是你有两个选择:第一个,厨师把所有菜都上齐了,你才开始吃:还有一个选择,做 ...

  4. Python微信公众号教程基础篇——收发文本消息

    1. 概述: 在本篇教程中,你将学会使用华为云弹性云服务器(以下简称 ECS)搭建微信公众号处理后台,使用Python语言编写对应的微信消息处理逻辑代码,接收从微信服务端转发过来的消息,并返回处理结果 ...

  5. 基于python的webUI自动化-小白基础篇

    最近打算研究一下基于python的webUI自动化,先自学了一下相关基础知识,大概用了一个多月的时间,主要是找视频,一边看视频或者文档一边对照着敲代码运行. 重点强调:一定要一边看一边对照着敲代码运行 ...

  6. python之路——面向对象(基础篇)

    面向对象编程:类,对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类&quo ...

  7. Python全栈之路-----基础篇

    Python诞生 Python是著名的”龟叔“Guido van Rossum(吉多·范罗苏姆)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Python语法很多来自C,但又受到 ...

  8. Python自动化开发 - Django【基础篇】

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能 ...

  9. Python企业面试题(系列目录)

    本系列计划把Python面试中出现频率比较高知识点整理出来,以便各位童鞋复习和练习: [第1题] Python内存管理以及垃圾回收机制 [第2题] 链表的逆置 [第3题] 两个队列创建一个栈 [第4题 ...

  10. 面试题_Spring基础篇

    Spring基础题 1. 什 么 是 Spring? Spring 是 个 java 企 业 级 应 用 的 开 源 开 发 框 架 .Spring 主 要 用 来 开 发 Java 应 用 , 但 ...

随机推荐

  1. 【Android逆向】破解黑宝宝apk,绕过签名校验

    这是52pojie的一道题,实现输入任何密码都可以登录成功 他知道你最近在学习Android逆向 他想在游戏上线前让你测试一下他新加的签名验证是否能防住别人的破解. 下面是李华编写的黑宝宝apk 链接 ...

  2. 从零开始写 Docker(二)---优化:使用匿名管道传递参数

    本文为从零开始写 Docker 系列第二篇,主要在 mydocker run 命令基础上优化参数传递方式,改为使用 runC 同款的匿名管道传递参数. 如果你对云原生技术充满好奇,想要深入了解更多相关 ...

  3. Jetpack Compose(1) —— Android 全新的 UI 框架

    写在前面 Jetpack Compose 已经不是什么新技术了,Google 早在 2019 年就推出 Jetpack Compose 的首个 alpha 版本,时至今日,相当大比例的国内 Andro ...

  4. 【LeetCode贪心#01】分饼干,贪心算法入门(入了但是还没完全入)

    分饼干 力扣题目链接(opens new window) 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干. 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子 ...

  5. centos docker服务问题

    概述 docker的应用版本正式上线,结果一上线就出各种幺蛾子. 本文档主要介绍centos系统安装docker和启动的问题解决方法. 环境 docker registry:2 centos 6 &a ...

  6. Hibernate过滤器使用窍门

    本文向大家介绍Hibernate过滤器,可能好多人还不了解Hibernate过滤器,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西. Hibernate3新增了对某个类或者集合使用预先定 ...

  7. CentOS6.8下yum安装Nginx

    在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo: cd /etc/yum.repos.d/ vim nginx.repo 填写如下内容: [nginx] name=n ...

  8. 关于 LLM 和知识图谱、图数据库,大家都关注哪些问题呢?

    自 LLM 系列文章<知识图谱驱动的大语言模型 Llama Index>.<Text2Cypher:大语言模型驱动的图查询生成>.<Graph RAG: 知识图谱结合 L ...

  9. 云原生 on nLive:云上 Nebula Graph

    本文首发于 Nebula Graph Community 公众号 在 #云原生# 主题分享中,来自 Nebula 云组的 Cloud 专家乔雷同大家分享云的相关知识,本文整理自该次主题直播. 云原生是 ...

  10. hadoop集群环境搭建--双NameNode

    hadoop配置文件修改 个人配置文件压缩包地址: hadoop配置文件压缩包地址点此下载 tar -zxvf 你的压缩包路径/hadoop.tar.gz -C /usr/hadoop(你的hadoo ...