- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章搞定这套Python爬虫面试题(面试会so easy)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
先来一份完整的爬虫工程师面试考点
1、 python 基本功 。
1、简述python 的特点和优点 。
python 是一门开源的解释性语言,相比 java c++ 等语言,python 具有动态特性,非常灵活.
2、python 有哪些数据类型?
python 有 6 种内置的数据类型,其中不可变数据类型是number(数字), string(字符串), tuple(元组),可变数据类型是 list(列表),dict(字典),set(集合).
3、列表和元组的区别 。
列表和元组都是可迭代对象,能够对其进行循环、切片等,但元组 tuple 是不可变的。元组不可变的特性,使得它可以成为字典 dict 中的键.
4、python 是如何运行的 。
cpython
python 程序运行时,会先进行编译,将 .py 文件中的代码编译成字节码(byte code),编译结果储存在内存的 pycodeobject 中,然后由 python 虚拟机解释运行。当程序运行结束后,python 解释器会将 pycodeobject 保存到 pyc 文件中。每一次运行时 python 都会先寻找与文件同名的 pyc 文件,如果 pyc 存在则比对修改记录,根据修改记录决定直接运行或再次编译后运行,最后生成 pyc 文件 .
5、python 运行速度慢的原因 。
a). python 不是强类型的语言,所以解释器运行时遇到变量以及数据类型转换、比较操作、引用变量时都需要检查其数据类型.
b). python 的编译器启动速度比 java 快,但几乎每次都要启动编译.
c). python 的对象模型会导致访问内存效率变低。numpy 的指针指向缓存区数据的值,而 python 的指针指向缓存对象,再通过缓存对象指向数据:
6、面对 python 慢的问题,有什么解决办法 。
a). 可以使用其他的解释器,比如 pypy 和 jython 等.
b). 如果对性能要求较高且静态类型变量较多的应用程序,可以使用 cpython.
c). 对于 io 操作多的应用程序,python 提供 asyncio 模块提高异步能力.
7、描述一下全局解释器锁 gil 。
每个线程在执行时候都需要先获取 gil,保证同一时刻只有一个线程可以执行代码,即同一时刻只有一个线程使用 cpu,也就是说多线程并不是真正意义上的同时执行。但是在 io 操作时,是可以释放锁的(这也是 python 能够异步的原因)。而且如果想要利用多核 cpu,那么可以使用多进程.
8、深拷贝 浅拷贝 。
深拷贝是将对象本身复制给另一个对象,浅拷贝则是将对象的引用复制给另一个对象。所以当复制后的对象改变时,深拷贝的原对象值不会改变,而浅拷贝原对象的值会被改变.
9、is 和 == 的区别 。
is 表示的是对象标示符(object identity),而 == 表示的是相等(equality).
is 的作用是用来检查对象的标示符是否一致,也就是比较两个对象在内存中的地址是否一样,而 == 是用来检查两个对象是否相等。但是为了提高系统性能,对于较小的字符串 python 会保留其值的一个副本,当创建新的字符串的时候直接指向该副本即可。如:
a = 8 b = 8 a is b 。
10、文件读写 。
简述文件读取时 read 、readline、readlines 的区别和作用 。
他们的区别除了读取内容范围不同外,返回的内容类型也不同.
read()会读取整个文件,将读取到底的文件内容放到一个字符串变量,返回 str 类型.
readline()读取一行内容,放到一个字符串变量,返回 str 类型.
readlines() 读取文件所有内容,按行为单位放到一个列表中,返回 list 类型.
11、请用一行代码实现 。
请分别使用匿名函数和推导式这两种方式将 [0, 1, 2, 3, 4, 5] 中的元素求乘积,并打印输出元组.
1
2
|
print
(
tuple
(
map
(
lambda
x: x
*
x, [
0
,
1
,
2
,
3
,
4
,
5
])))
print
(
tuple
(i
*
i
for
i
in
[
0
,
1
,
2
,
3
,
4
,
5
]))
|
12、请用一行代码实现 。
用 reduce 计算 n 的阶乘(n!=1×2×3×...×n) 。
1
|
print
(
reduce
(
lambda
x, y: x
*
y,
range
(
1
, n)))
|
13、请用一行代码实现 。
筛选并打印输出 100 以内能被 3 整除的数的集合 。
1
|
print
(
set
(
filter
(
lambda
n: n
%
3
=
=
0
,
range
(
1
,
100
))))
|
14、请用一行代码实现 。
1
|
text
=
'obj{"name": "pic", "data": [{"name": "async", "number": 9, "price": "$3500"}, {"name": "wade", "number": 3, "price": "$5500"}], "team": "hot"'
|
打印文本中的球员身价元组,如 ( 5500) 。
1
|
print
(
tuple
(i.get(
"price"
)
for
i
in
json.loads(re.search(r
'[(.*)]'
, text).group(
0
))))
|
15、请写出递归的基本骨架 。
1
2
3
4
5
6
|
def
recursions(n):
if
n
=
=
1
:
# 退出条件
return
1
# 继续递归
return
n
*
recursions(n
-
1
)
|
16、切片 。
请写出下方输出结果 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
tpl
=
[
0
,
5
,
10
,
15
,
20
,
25
,
30
,
35
,
40
,
45
,
50
,
55
,
60
,
65
,
70
,
75
,
80
,
85
,
90
,
95
]
print
(tpl[
3
:])
print
(tpl[:
3
])
print
(tpl[::
5
])
print
(tpl[
-
3
])
print
(tpl[
3
])
print
(tpl[::
-
5
])
print
(tpl[:])
del
tpl[
3
:]
print
(tpl)
print
(tpl.pop())
tpl.insert(
3
,
3
)
print
(tpl)
[
15
,
20
,
25
,
30
,
35
,
40
,
45
,
50
,
55
,
60
,
65
,
70
,
75
,
80
,
85
,
90
,
95
]
[
0
,
5
,
10
]
[
0
,
25
,
50
,
75
]
85
15
[
95
,
70
,
45
,
20
]
[
0
,
5
,
10
,
15
,
20
,
25
,
30
,
35
,
40
,
45
,
50
,
55
,
60
,
65
,
70
,
75
,
80
,
85
,
90
,
95
]
[
0
,
5
,
10
]
10
[
0
,
5
,
3
]
|
17、文件路径 。
打印输出当前文件所在目录路径 。
1
2
|
import
os
print
(os.path.dirname(os.path.abspath(__file__)))
|
打印输出当前文件路径 。
1
2
|
import
os
print
(os.path.abspath(__file__))
|
打印输出当前文件上两层文件目录路径 。
1
2
|
import
os
print
(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
18、请写出运行结果,并回答问题 。
1
2
3
|
tpl
=
(
1
,
2
,
3
,
4
,
5
)
apl
=
(
6
,
7
,
8
,
9
)
print
(tpl.__add__(apl))
|
问题:tpl 的值发生变化了吗?
运行结果如下:
(1, 2, 3, 4, 5, 6, 7, 8, 9) 。
答:元组是不可变的,它是生成新的对象 。
19、请写出运行结果,并回答问题 。
1
2
3
4
5
6
|
name
=
(
'james'
,
'wade'
,
'kobe'
)
team
=
[
'a'
,
'b'
,
'c'
]
tpl
=
{name: team}
print
(tpl)
apl
=
{team: name}
print
(apl)
|
问题:这段代码能运行完毕吗?为什么?它的运行结果是?
答:这段代码不能完整运行,它会在 apl 处抛出异常,因为字典的键只能是不可变对象,而 list 是可变的,所以不能作为字典的键。运行结果是:
1
2
|
{(
'james'
,
'wade'
,
'kobe'
): [
'a'
,
'b'
,
'c'
]}
typeerror
|
20、装饰器 。
请写出装饰器代码骨架 。
1
2
3
4
5
|
def
log(func):
def
wrapper(
*
args,
*
*
kw):
print
(
'call %s():'
%
func.__name__)
return
func(
*
args,
*
*
kw)
return
wrapper
|
简述装饰器在 python 中的作用:
在不改动原函数代码的情况下,为其增加新的功能.
21、多进程 多线程 。
多进程更稳定还是多线程更稳定?为什么?
多进程更稳定,它们是独立运行的,不会因为一个崩溃而影响其他进程.
多线程的致命缺点是什么?
因为所有线程共享进程的内存,所以任何一个线程挂掉都可能直接造成整个进程崩溃.
进程间通信有哪些方式?
共享变量、队列、管道.
好了,本文就给大家介绍到这里,祝大家面试so easy! 。
原文链接:https://www.jianshu.com/p/4e92215b587d 。
最后此篇关于搞定这套Python爬虫面试题(面试会so easy)的文章就讲到这里了,如果你想了解更多关于搞定这套Python爬虫面试题(面试会so easy)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
总览 数据库的数据存储有两种类型,一种是面向行的(row-oriented)数据库,另一种是面向列的(column-oriented )数据库。 面向行(事务型) 数据库 该类数据库是根据
starting from a joke 问:把大象放冰箱里,分几步? 答:三步啊,第1、把冰箱门打开,第2、把大象放进去,第3、把冰箱门带上。 问:实现spring事务,分几步? 答:三
在最近的一次采访中,我有这个问题。 这里有什么错误?我知道足够的 c#,但我看不到错误。可以吗? Class x { protected string t1; public int
我在面试中被要求设计一个文件系统,允许用户将自己的属性添加到文件和文件夹中。我刚刚说过要将属性添加到文件描述符并允许根据此属性标准搜索文件,以及添加此属性以显示在文件/文件夹详细信息中。 看起来面试官
我一直在面试,下面应该有什么问题? 我可以假设这是您无法检查类是否为空的问题,对吗?!谢谢! public class NiceActivity extends Activity { priv
给定一个数组,如何返回总和为偶数的对数? 例如: a[] = { 2 , -6 , 1, 3, 5 } 在这个数组中,偶数和的对数是(2,-6), (1,3) , (1,5), (3,5) 函数应返回
这个问题是在面试中被问到的 Assume you have a dictionary of words: (use if you have /usr/share/dict/words). Given
我被要求实现 invert(x,p,n) 返回 x 的 n 位开始于位置 p 反转(即 1 变为 0,反之亦然),其他不变。 我的解决方案是: unsigned invert(unsigned x,
有人问我这个问题:给定一个大小为 n 的 int 和 int sum 的数组,我需要返回数组元素的所有对,其总和等于 总和 std::vector > find(int* arr,size_t n,i
我在一次面试中遇到了这个问题。有一组对象与起始值和结束值相关联。与每个对象相关联的计数是具有较长开始时间和较短结束时间的其他对象的数量。所以我必须找到与每个对象关联的计数。 我提出了 O(n^2) 解
我今天在采访中被问到这个问题。我已经尝试了一种解决方案,但想知道是否有更好的方法来解决这个问题: 问题:我有一个包含 500,000 个元素的数组列表,这样数组列表的每个元素的值都与索引相同。例如:l
有一个包含白色单元格,黑色单元格和只有一个灰色单元格的矩阵,需要从 (0,0) 到 (N-1, N-1) 如果 Arra[N][N]约束:A。该路径应该只覆盖白色单元格并且应该通过灰色单元格。b.访问
给定一个正整数数组,找出排列的任意排列可以形成的最大值。我想知道是否有更好的数据结构可以为问题提供更优雅的解决方案。 import java.util.ArrayList; import java.u
我在面试中被问到以下问题(不幸的是我找不到比 N^2 更好的答案) 对于大小为 N 的 unsigned int 的给定数组 arr,对于每个元素(在索引 i 中)我应该返回一个元素在索引 j (j
极点:数组中左侧元素小于或等于它且右侧元素大于或等于它的元素。 示例输入 3,1,4,5,9,7,6,11 期望的输出 4,5,11 面试时被问到这个问题,要返回元素的索引,只返回第一个满足条件的元素
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我今天被问到这个问题,我知道答案很简单,但他让我一直到最后。 问题 编写程序删除存储在 ArrayList 中的偶数,其中包含 1 - 100。 我只是说哇 给你,这就是我的实现方式。 ArrayLi
我在一次采访中遇到了这个问题,完全被难住了。我能想到的唯一解决方案是将 currentAngle 存储在 NSArray 中以计算下一个角度。 问题:使用 iPhone 的指南针在屏幕上移动一个 35
我必须在接下来的几周内采访一些 C++ 候选人,作为公司最资深的程序员,我应该尝试弄清楚这些人是否知道他们在做什么。 那么有人有什么建议吗? 就我个人而言,我讨厌被留在房间里填写一些 C++ 问题,所
消息队列(MQ),一种能实现生产者到消费者单向通信的通信模型,这也是现在常用的主流中间件。 常见有 RabbitMQ、ActiveMQ、Kafka等 他们的特点也有很多 比如 解偶、异步、广播
我是一名优秀的程序员,十分优秀!