最近一直在面试,一直觉得面试就是一个交互的过程,在面试中也经常碰到一些自己不会甚至没有听过的问题,把这些问题记录在这里,也顺便Google一下学习一下 ^_^ (这篇文章还在持续更新中,如果有些问题没有回答好,可能还会更新)
1. Python多线程有什么问题?
不知道这个问题的答案,我觉得蛮遗憾的。虽然用了Python两三年了,偶尔也用到multithreading,但是因为一直用Python写工具,所以我从来没有分析过性能问题,自然而然就不知道GIL。
这里有一篇不错的文章介绍GIL,我就不啰嗦了:http://zhuoqiang.me/a/python-thread-gil-and-ctypes
关于GIL我们需要知道的是:
(1) 因为GIL的存在并且在Python 3.x还一直存在,Python的多线程不会和C/C++/Java那样,发挥多核的优势。在I/O密集的情况下,GIL的影响略小;但是在计算密集的情况下,GIL影响很大,可能还不如不用多线程。
(2) 解决办法:(a)用multiprocessing (b)用ctypes
注意,GIL只是对CPython有影响,Jython没有影响。
2. Python的super有什么问题?
这个题目也许对方希望的答案是super不是一个函数,是一个类。但是我觉得只要坚持一直使用super,并且知道mro,可能这个题目就不是问题。
(1) 一直使用super,是说在继承链始终使用super,不要有的地方用super,有的用类名。譬如下面的:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
class Base(object):
def __init__(self):
print('BEGIN Base')
print('END Base')
class A(Base):
def __init__(self):
print('BEGIN A')
super(A, self).__init__()
print('END A')
class B(Base):
def __init__(self):
print('BEGIN B')
Base.__init__(self)
print('END B')
class AB(A, B):
def __init__(self):
print('BEGIN AB')
A.__init__(self)
B.__init__(self)
print('END AB')
if __name__ == '__main__':
ab = AB()
不要这么用,结果会很诡异。你可以试一下。而应该这么写:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
class Base(object):
def __init__(self):
print('BEGIN Base')
print('END Base')
class A(Base):
def __init__(self):
print('BEGIN A')
super(A, self).__init__()
print('END A')
class B(Base):
def __init__(self):
print('BEGIN B')
super(B, self).__init__()
print('END B')
class AB(A, B):
def __init__(self):
print('BEGIN AB')
super(AB, self).__init__()
print('END AB')
if __name__ == '__main__':
ab = AB()
结果如下:
BEGIN AB
BEGIN A
BEGIN B
BEGIN Base
END Base
END B
END A
END AB
这个就是MRO,记住顺序就好。
当然如果你想知道更详细的解释,可以看这个:http://blog.csdn.net/johnsonguo/article/details/585193
3. C和C++使用多线程有什么区别 (TODO)
分享到:
相关推荐
9--[小黑点的旅行(未完待续)].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码9--[小黑点的旅行(未完待续)].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码9--[小黑点的旅行(未完待续)].zip...
"android播放器未完待续"这个标题暗示我们将探讨如何在Android系统中构建一个功能完善的音乐播放器,以及可能遇到的问题和解决方案。让我们深入研究一下。 首先,Android音乐播放器的基础是媒体库服务。Android提供...
比如自定义CSS覆盖问题,当尝试覆盖Bootstrap自带的一些样式时,若使用的是标签选择器如 `body {}` 或者通用选择器 `* {}`,可能会发现这些样式并未生效。 **解决办法:** - 使用类选择器来自定义样式。例如,如果...
"未完待续"则表明这项作品还在持续开发中,可能存在多个版本或者更新,期待观众或玩家的关注和期待。 【描述】:“个人手机网游作品展示,未完待续” 描述与标题相呼应,进一步强调这是一部个人创作的手机网游,...
scratch2源码小黑点的旅行(未完待续)提取方式是百度网盘分享地址
EOS开发入门之cleos命令解读(未完待续)1
"不要犹豫,未完待续"暗示了当前的市场行情可能具有积极的延续性,鼓励投资者把握机会,同时表明市场分析和策略建议还在持续更新中。 【描述解析】 描述"A股市场策略周报:跨年行情,不要犹豫,未完待续"与标题相...
教程名称:linux服务器性能调优文档(未完待续)课程目录:linux服务器性能调优01linux服务器性能调优02linux服务器性能调优03linux服务器性能调优04linux服务器性能调优05linux服务器性能调优06linux服务器性能调优07...
解决调度问题的元启发式算法应用(未完待续...),蚁群算法(ACO)、遗传算法(GA)、粒子群算法(_Scheduling-problems
北京理工大学<Python机器学习应用>超详细学习笔记和代码注释(未完待续)
在大数据实战第一部分中,我们将探索大数据处理的关键概念和技术,这些技术在当今信息化社会中扮演着至关重要的角色。...通过这个未完待续的大数据实战项目,你将深入理解大数据处理的全貌,并获得宝贵的实践经验。
《Web前端入门_从零开始做网站》讲义(未完待续).pdf
以上问题和解决方案适用于使用Visual Studio进行C++开发时可能遇到的一些常见问题,了解并掌握这些解决方法有助于提高开发效率。在开发过程中,遇到问题时,检查项目配置、代码实现、依赖库以及运行环境是解决问题的...
在使用Visual Studio进行开发时,我们可能会遇到各种各样的问题,以下是一些常见的问题及其解决方案: 1. **错误MSB 3073:已退出,代码1** 这个错误通常出现在项目的生成事件中。解决方法是检查项目属性,特别是...
PHP环境探针是一种用于检查和诊断PHP运行环境的工具,它可以提供有关服务器配置、扩展安装情况、系统信息等关键数据。...虽然这个探针的描述标记为"未完待续,仅供参考",但它仍能为PHP开发者带来宝贵的环境调试信息。
10. 青春的延续:尽管青春已逝,但它的精神和影响却可以"未完待续",持续影响着我们的生活和决策。 总结,本文通过对青春的描绘,探讨了时间、成长、分别、记忆、诺言等主题,展现了青春的美好、脆弱和短暂,同时也...
汽车行业:乘风破浪的重卡市场,高景气度未完待续-基于国三存量数据的重卡销量测算
汽车行业:乘风破浪的重卡市场,高景气度未完待续-基于国三存量数据的重卡销量测算.pdf
"乘风破浪的重卡市场,高景气度未完待续-基于国三存量数据的重卡销量测算"这一标题揭示了当前重卡市场的繁荣状态以及对未来趋势的预期。以下是对这个主题的详细分析: 首先,我们需要理解“国三”标准是指国家第三...