└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # qsmi 2 | Questions in Spider Man Interview 爬虫工程师面试常见问题 3 | 4 | 目前问题与答案正在收集中,请大家踊跃参与。 5 | 6 | 目前答案不开放,待问题收集到一定规模,则开放答案,大家可以先尝试做题。 7 | 8 | 在 issues 处提交你的问题与答案即可,我会每天定时收录到文档中。 9 | 10 | 我们应当做到题目与答案对应且尽可能的详尽,如: 11 | 12 | 13 | 14 | 最后,我们都希望得到一份完整的爬虫工程师面试考点,这需要我们大家一起努力。如果你想加入到 Github 白名单,请联系 asyncins@aliyun.com 15 | 16 | 17 | 18 | # 一、Python 基础部分 19 | ## 1.1 Python 基本功 20 | ### 1.1.1 简述Python 的特点和优点 21 | 答: 22 | ### 1.1.1 Python 有哪些数据类型? 23 | 答: 24 | ### 1.1.3 列表和元组的区别 25 | 答: 26 | ### 1.1.4 Python 是如何运行的 27 | 答: 28 | ### 1.1.5 Python 运行速度慢的原因 29 | 答: 30 | 31 | ### 1.1.6 面对 Python 慢的问题,有什么解决办法 32 | 答: 33 | 34 | ### 1.1.7 描述一下全局解释器锁 GIL 35 | 答: 36 | 37 | ### 1.1.8 深拷贝 浅拷贝 38 | 答: 39 | 40 | ### 1.1.9 is 和 == 的区别 41 | 答: 42 | 43 | ### 1.1.10 文件读写 44 | 答: 45 | ### 1.1.11 请用一行代码实现 46 | 请分别使用匿名函数和推导式这两种方式将 [0, 1, 2, 3, 4, 5] 中的元素求乘积,并打印输出元组。 47 | 48 | ### 1.1.12 请用一行代码实现 49 | 用 reduce 计算 n 的阶乘(n!=1×2×3×...×n) 50 | 51 | ### 1.1.13 请用一行代码实现 52 | 筛选并打印输出 100 以内能被 3 整除的数的集合 53 | 54 | ### 1.1.14 请用一行代码实现 55 | ``` 56 | text = 'Obj{"Name": "pic", "data": [{"name": "async", "number": 9, "price": "$3500"}, {"name": "Wade", "number": 3, "price": "$5500"}], "Team": "Hot"' 57 | ``` 58 | 打印文本中的球员身价元组,如 ($3500, $5500) 59 | 60 | 61 | ### 1.1.15 请写出递归的基本骨架 62 | 63 | ### 1.1.16 切片 64 | 请写出下方代码输出结果 65 | ``` 66 | tpl = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95] 67 | 68 | print(tpl[3:]) 69 | print(tpl[:3]) 70 | print(tpl[::5]) 71 | print(tpl[-3]) 72 | print(tpl[3]) 73 | print(tpl[::-5]) 74 | print(tpl[:]) 75 | del tpl[3:] 76 | print(tpl) 77 | print(tpl.pop()) 78 | tpl.insert(3, 3) 79 | print(tpl) 80 | ``` 81 | ### 1.1.6 文件路径 82 | 打印输出当前文件所在目录路径 83 | 84 | 打印输出当前文件路径 85 | 86 | 打印输出当前文件上两层文件目录路径 87 | 88 | ### 1.1.17 请写出运行结果,并回答问题 89 | ``` 90 | tpl = (1, 2, 3, 4, 5) 91 | apl = (6, 7, 8, 9) 92 | print(tpl.__add__(apl)) 93 | ``` 94 | 问题:tpl 的值发生变化了吗? 95 | 96 | 答: 97 | 98 | ### 1.1.18 请写出运行结果,并回答问题 99 | ``` 100 | name = ('James', 'Wade', 'Kobe') 101 | team = ['A', 'B', 'C'] 102 | 103 | tpl = {name: team} 104 | print(tpl) 105 | apl = {team: name} 106 | print(apl) 107 | ``` 108 | 问题:这段代码能运行完毕吗?为什么?它的运行结果是? 109 | 答: 110 | ### 1.1.19 装饰器 111 | 请写出装饰器代码骨架 112 | 113 | 简述装饰器在 Python 中的作用 114 | 115 | 116 | ### 1.1.20 多进程 多线程 117 | 多进程更稳定还是多线程更稳定?为什么? 118 | 119 | 多线程的致命缺点是什么? 120 | 121 | 进程间通信有哪些方式? 122 | 123 | ## 1.2 Python 细节问题 124 | ### 1.2.1 **连接字符串用join还是+** 125 | 126 | 127 | ### 1.2.2 Python 垃圾回收机制 128 | 129 | 130 | ### 1.2.3 递归 131 | Python 递归深度默认是多少?递归深度限制的原因是什么? 132 | 133 | 134 | 135 | 136 | # 二、Python 进阶知识 137 | 2.1 138 | 2.1.1 __new__ __init__ 的区别 139 | 140 | 2.2 141 | 142 | 2.2.1 请编写一个用于文件读写的上下文管理器 143 | 144 | 2.2.2 请编写一个用于文件读写的异步上下文管理器,并编写 propty 提供外部访问 145 | # 146 | # 三、爬虫基础部分 147 | # 148 | # 四、爬虫框架部分 149 | # 150 | # 五、爬虫进阶知识 151 | # 152 | # 六、数据库部分 153 | # 154 | # 七、算法与数据结构 155 | ## 7.1 156 | ### 7.1.1 时间复杂度 157 | 假设现有腾讯体育中热火队 11 名球员、搜狐体育中热火队 13 名球员要将两个队伍中球员依次拿出来进行属性匹配,以确定同一球员在两个网站中的不同 url id。 158 | 请说明比对的时间复杂度并画出比对思路 159 | # 160 | # 八、HTTP 协议 WebSocket 协议 161 | # 162 | # 九、爬虫工作的见解与展望 163 | 164 | --------------------------------------------------------------------------------