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. 解决VMware与win10无法共享目录

    1.安装VMware Tools 这一步适用于多数情况,但对于高版本的VMWare这一步无效,当然了,先试一试总没有坏处. 有看见网上说如果VMware内安装的是高版本的Ubuntu,安装的VMwar ...

  2. 在python中发送自定义消息

    .py import win32api, win32con, win32gui import win32gui_struct import ctypes from ctypes import * GU ...

  3. linux下docker安装与初始

    1 docker的安装与使用初识 1 docker的安装 # step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persi ...

  4. 逆向实战31——xhs—xs算法分析

    前言 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 公众号链接 目标网站 aH ...

  5. HAProxy端口资源耗尽的解决办法

    项目背景 系统使用HAProxy为mq和部分应用的负载均衡服务.近期,瞬时流量过大,导致出现连锁反应,HA开始波动. HAProxy版本:1.6.3 问题分析 心跳检测大量失败,项目状态极不稳定.观察 ...

  6. 【Azure App Service】通过Visual Studio部署Azure App Service 遇见 401 'Unauthorized'错误

    问题描述 最近通过Visual Studio 2022部署Azure App Service的时候,突然遇见了部署失败, 401 Unauthorized错误. 错误消息: Build started ...

  7. 【Azure 事件中心】Kafka 生产者发送消息失败,根据失败消息询问机器人得到的分析步骤

    问题描述 Azure Event Hubs -- Kafka 生产者发送消息存在延迟接收和丢失问题, 在客户端的日志中发现如下异常: 2023-06-05 02:00:20.467 [kafka-pr ...

  8. 【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)

    问题描述 使用Azure Storage Table的REST API,实现根据过滤条件删除满足条件的数据,调用方法为  Delete Entity (Azure Storage) 问题实现 第一步: ...

  9. 【Azure 事件中心】适用Mirror Maker生产数据发送到Azure Event Hub出现发送一段时间后Timeout Exception: Expiring 18 record(s) for xxxxxxx: 79823 ms has passed since last append

    问题描述 根据"将 Apache Kafka MirrorMaker 与事件中心配合使用"一文,成功配置了Mirror Maker来发送数据到Event Hub中.为什么只能成功运 ...

  10. 浅入Kubernetes(4):使用Minikube体验

    Minikube 打开 https://github.com/kubernetes/minikube/releases/tag/v1.19.0 下载最新版本的二进制软件包(deb.rpm包),再使用 ...