60道硬核Python面试题,论面霸是如何炼成的


当前第2页 返回上一页

我们将添加以下代码行文件:

DATABASES = {
‘default’: {
‘ENGINE’ : ‘django.db.backends.sqlite3’,
‘NAME’ : os.path.join(BASE_DIR, ‘db.sqlite3’),
}
}

35. 如何获取任何网址或网页的Google缓存时限?

使用以下URL格式:

http://webcache.googleusercontent.com/search?q=cache:URLGOESHERE

请务必将“URLGOESHERE”替换为要检索其缓存的页面或站点的正确Web地址,并查看时间。例如,要查看http://edureka.co的Google Webcache年龄,您需要使用以下网址:

http://webcache.googleusercontent.com/search?q=cache:edureka.co

36. 什么是Python中的map函数?

Map函数执行作为第一个参数给出的函数,该函数遍历第二个参数给出的迭代的所有元素的。如果给定的函数包含多于1个参数,则给出了许多迭代。

37. 如何在NumPy数组中获得N个最大值的索引?

我们可以使用以下代码获取NumPy数组中N个最大值的索引:

import numpy as np
arr = np.array([1, 3, 2, 4, 5])
print(arr.argsort()[-3:][::-1])

输出

[ 4 3 1 ]

38. 你如何用Python /NumPy计算百分位数?

我们可以使用以下代码计算百分位数

import numpy as np
a = np.array([1,2,3,4,5])
p = np.percentile(a, 50) #Returns 50th percentile, e.g. median
print§

输出

3

39. NumPy阵列(arrays)相对(嵌套)Python列表(lists)有哪些优势?

a. Python的列表是高效的general-purpose容器。它们支持(相当)有效的插入,删除,追加和连接,Python的list comprehension使它们易于构造和操作。

b. Python列表的一些限制:它们不支持向量化“vectorized”操作,如元素加法和乘法,并且它们可以包含不同类型的对象这一事实意味着Python必须存储每个元素的类型信息,并且必须在每个元素上操作时执行类型调度代码。

c. NumPy不仅效率更高;它也更方便。你可以免费获得大量的向量和矩阵运算,这有时可以避免不必要的工作。

d. NumPy数组更快,你可以使用NumPy,FFT,卷积,快速搜索,基本统计,线性代数,直方图等内置方法。

40. NumPy和SciPy有什么区别?

a. 在理想的世界中,NumPy只包含数组数据类型和最基本的操作:索引,排序,重塑,基本元素函数等。

b. 所有数字代码都将驻留在SciPy中。但是,NumPy的一个重要目标是兼容性,因此NumPy试图保留其前任任何一个支持的所有功能。

c. 因此,NumPy包含一些线性代数函数,即使它们更恰当地属于SciPy。无论如何,SciPy包含更多功能更全版本的线性代数模块,以及许多其他数值算法。

d. 如果你使用python进行科学计算,你应该安装NumPy和SciPy。大多数新功能属于SciPy而非NumPy。

41. python程序中文输出问题怎么解决?

用encode和decode,如:

import os.path
import xlrd,sys

Filename=’/home/tom/Desktop/1234.xls’
if not os.path.isfile(Filename):
raise NameError,”%s is not a valid filename”%Filename

bk=xlrd.open_workbook(Filename)
shxrange=range(bk.nsheets)
print shxrange

for x in shxrange:
p=bk.sheets()[x].name.encode(‘utf-8′)
print p.decode(‘utf-8′)

方法二:

在文件开头加上

reload(sys)
sys.setdefaultencoding(‘utf8′)

42. 阅读下面的代码,它的输出结果是什么?

class A(object):
def go(self):
print “go A go!”
def stop(self):
print “stop A stop!”
def pause(self):
raise Exception(“Not Implemented”)

class B(A):
def go(self):
super(B, self).go()
print “go B go!”

class C(A):
def go(self):
super(C, self).go()
print “go C go!”
def stop(self):
super(C, self).stop()
print “stop C stop!”

class D(B,C):
def go(self):
super(D, self).go()
print “go D go!”
def stop(self):
super(D, self).stop()
print “stop D stop!”
def pause(self):
print “wait D wait!”

class E(B,C): pass

a = A()
b = B()
c = C()
d = D()
e = E()

说明下列代码的输出结果

a.go()
b.go()
c.go()
d.go()
e.go()

a.stop()
b.stop()
c.stop()
d.stop()
e.stop()

a.pause()
b.pause()
c.pause()
d.pause()
e.pause()

**答案,**输出结果以注释的形式表示:

a.go()
# go A go!

b.go()
# go A go!
# go B go!

c.go()
# go A go!
# go C go!

d.go()
# go A go!
# go C go!
# go B go!
# go D go!

e.go()
# go A go!
# go C go!
# go B go!

a.stop()
# stop A stop!

b.stop()
# stop A stop!

c.stop()
# stop A stop!
# stop C stop!

d.stop()
# stop A stop!
# stop C stop!
# stop D stop!

e.stop()
# stop A stop!

a.pause()
# … Exception: Not Implemented

b.pause()
# … Exception: Not Implemented

c.pause()
# … Exception: Not Implemented

d.pause()
# wait D wait!

e.pause()
# …Exception: Not Implemented

43. 介绍一下Python中webbrowser的用法?

webbrowser模块提供了一个高级接口来显示基于Web的文档,大部分情况下只需要简单的调用open()方法。

webbrowser定义了如下的异常:

exception webbrowser.Error, 当浏览器控件发生错误是会抛出这个异常

webbrowser有以下方法:

webbrowser.open(url[, new=0[,autoraise=1]])

这个方法是在默认的浏览器中显示url, 如果new = 0, 那么url会在同一个浏览器窗口下打开,如果new = 1, 会打开一个新的窗口,如果new = 2, 会打开一个新的tab, 如果autoraise =true, 窗口会自动增长。

webbrowser.open_new(url)

在默认浏览器中打开一个新的窗口来显示url, 否则,在仅有的浏览器窗口中打开url

webbrowser.open_new_tab(url)

在默认浏览器中当开一个新的tab来显示url,否则跟open_new()一样

webbrowser.get([name])

根据name返回一个浏览器对象,如果name为空,则返回默认的浏览器

webbrowser.register(name, construtor[,instance])

注册一个名字为name的浏览器,如果这个浏览器类型被注册就可以用get()方法来获取。

44. Python中, list, tuple, dict, set有什么区别, 主要应用在什么样的场景?

定义:

**list:**链表, 有序的项目, 通过索引进行查找, 使用方括号"[]";

**tuple:**元组, 元组将多样的对象集合到一起, 不能修改, 通过索引进行查找, 使用括号"()";

**dict:**字典, 字典是一组键(key)和值(value)的组合, 通过键(key)进行查找, 没有顺序, 使用大括号"{}";

set: 集合,无序, 元素只出现一次, 自动去重, 使用"set([])";

应用场景:

list, 简单的数据集合, 可以使用索引;

tuple, 把一些数据当做一个整体去使用, 不能修改;

dict, 使用键值和值进行关联的数据;

set, 数据只出现一次, 只关心数据是否出现, 不关心其位置;

代码:

*mylist = [1, 2, 3, 4, ‘Oh’] *
*mytuple = (1, 2, ‘Hello’, (4, 5)) *
*mydict = {‘Wang’ : 1, ‘Hu’ : 2, ‘Liu’ :4} *
myset = set([‘Wang’, ‘Hu’, ‘Liu’, 4,‘Wang’])

45. 写一个函数, 输入一个字符串, 返回倒序排列的结果: 如:string_reverse(‘abcdef’), 返回: ‘fedcba’ (请采用多种方法实现, 并对实现方法进行比较)。

解答: 5种方法的比较.

1. 简单的步长为-1, 即字符串的翻转;

2. 交换前后字母的位置;

3. 递归的方式, 每次输出一个字符;

4. 双端队列, 使用extendleft()函数;

5. 使用for循环, 从左至右输出;

代码:

*string = ‘abcdef’ *
*def string_reverse1(string): *
*return string[::-1] *
*def string_reverse2(string): *
*t= list(string) *
*l= len(t) *
*for i,j in zip(range(l-1, 0, -1), range(l//2)): *
*t[i], t[j] = t[j], t[i] *
*return “”.join(t) *
*def string_reverse3(string): *
*if len(string) <= 1: *
*return string *
*return string_reverse3(string[1:]) + string[0] *
*from collections import deque *
*def string_reverse4(string): *
*d= deque() *
*d.extendleft(string) *
*return ‘’.join(d) *
*def string_reverse5(string): *
*#return ‘’.join(string[len(string) - i] for i in range(1,len(string)+1)) *
*return ‘’.join(string[i] for i in range(len(string)-1, -1, -1)) *
*print(string_reverse1(string)) *
*print(string_reverse2(string)) *
*print(string_reverse3(string)) *
*print(string_reverse4(string)) *
print(string_reverse5(string))

46. 以下哪个语句创建字典? (多个正确的答案可能)

A. d = {}
B. d = {“john”:40,“peter”:45}
C. d = {40:“john”,45:“peter”}
D. d =(40:“john”,45:“50”)

**回答:**b,c, d。通过指定键和值来创建字典。

47. 其中哪一个是floor division?

a) /

b)//

C) %

d)没有提到的

**回答:**b)//;例如,5.0/2 = 2.5,5.0//2 = 2

48. 标识符的最大可能长度是多少?

a)31个字符

b)63个字符

c)79个字符

d)以上都不是

回答:d)以上都不是;标识符可以是任意长度。

49. 为什么不鼓励以下划线开头的局部变量名?

a)它们用于表示类的私有变量
b)他们混淆了口译员
c)它们用于表示全局变量
d)他们放慢执行速度
**回答:**a)它们用于表示类的私有变量;由于Python没有私有变量的概念,因此前导下划线用于表示不能从类外部访问的变量。

50. 以下哪项是无效声明?

a)abc = 1,000,000
b)a b c = 1000 2000 3000
c)a,b,c = 1000,2000,3000
d)a_b_c = 1,000,000
**回答:**b)a b c = 1000 2000 3000;变量名称中不允许使用空格。

51. 以下是什么输出?

try:
if ‘1’ != 1:
raise “someError”
else:
print(“someError has not occured”)
except “someError”:
print (“someError has occured”)

a)发生了someError

b)没有发生someError

c)无效代码

d)以上都不是

**回答:**c)无效代码;新的异常类必须从BaseException继承。这里没有这样的继承。

52. 假设list1是[2,33,222,14,25],什么是list1 [-1]?

a)错误
b)没有
c)25
d)2
回答:c)25;索引-1对应于列表中的最后一个索引。

53. 要打开文件c:\ scores.txt进行编写,我们使用:

a)outfile = open(“c:\scores.txt”,“r”)
b)outfile = open(“c:\scores.txt”,“w”)
c)outfile = open(file = “c:\scores.txt”,“r”)
d)outfile = open(file = “c:\scores.txt”,“o”)
**回答:**b)该位置包含双斜杠($$,w用于指示正在写入文件。

54. 以下是什么输出?

f = None

for i in range (5):
with open(“data.txt”, “w”) as f:
if i > 2:
break

print f.closed

a)True

b)False

c)None

d)Error

回答:a)True;与open文件一起使用时,WITH语句可确保在with块退出时关闭文件对象。

55. 何时执行try-except-else的else部分?

a)总是
b)发生异常时
c)没有异常发生时
d)当发生异常时至除了块
**回答:**c)没有异常发生时;当没有异常发生时,执行else部分。

56. a=1, b=2, 不用中间变量交换a和b的值.

两种形式: 加法或异或;代码:

*a = 1 *
*b = 2 *
*a = a + b *
*b = a - b *
*a = a - b *
*print (‘a = {0}, b = {1}’.format(a,b)) *
*a = a ^ b *
*b = a ^ b *
*a = a ^ b *
print (‘a = {0}, b = {1}’.format(a, b))

57. 请写出打印结果

x = [0, 1]
i = 0
i, x[i] = 1, 2
print(x)

打印结果: [0, 2], python可以使用连续赋值, 从左至右.

g = lambda x, y=2, z : x + y**z
g(1, z=10) = ?

打印结果: 异常, 形参表末尾才可以有默认参数, z需要提供默认参数。

58. Python的单例模式

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

new()在init()之前被调用,用于生成实例对象。利用这个方法和类的属性的特点可以实现设计模式的单例模式。单例模式是指创建唯一对象,单例模式设计的类只能实例 这个绝对常考啊.绝对要记住1~2个方法,当时面试官是让手写的.

使用new方法

class Singleton(object):
*def new(cls, *args, *kw):
if not hasattr(cls, ‘_instance’):
orig = super(Singleton, cls)
*cls._instance = orig.new(cls, *args, *kw)
return cls._instance

class MyClass(Singleton):
a = 1

共享属性

创建实例时把所有实例的dict指向同一个字典,这样它们具有相同的属性和方法.

class Borg(object):
_state = {}
*def new(cls, *args, *kw):
*ob = super(Borg, cls).new(cls, *args, *kw)
ob.dict = cls._state
return ob

class MyClass2(Borg):
a = 1

装饰器版本

def singleton(cls):
instances = {}
*def getinstance(*args, *kw):
if cls not in instances:
*instances[cls] = cls(*args, *kw)
return instances[cls]
return getinstance

@singleton
class MyClass:
…

import方法

作为python的模块是天然的单例模式

# mysingleton.py
class My_Singleton(object):
def foo(self):
pass

my_singleton = My_Singleton()

# to use
from mysingleton import my_singleton

my_singleton.foo()

59. A、B两人分别在两座岛上。B生病了,A有B所需要的药。C有一艘小船和一个可以上锁的箱子。C愿意在A和B之间运东西,但东西只能放在箱子里。只要箱子没被上锁,C都会偷走箱子里的东西,不管箱子里有什么。如果A和B各自有一把锁和只能开自己那把锁的钥匙,A应该如何把东西安全递交给B?

**答案:**A把药放进箱子,用自己的锁把箱子锁上。B拿到箱子后,再在箱子上加一把自己的锁。箱子运回A后,A取下自己的锁。箱子再运到B手中时,B取下自己的锁,获得药物。

60. 有25匹马,速度都不同,但每匹马的速度都是定值。现在只有5条赛道,无法计时,即每赛一场最多只能知道5匹马的相对快慢。问最少赛几场可以找出25匹马中速度最快的前3名?

**答案:**每匹马都至少要有一次参赛的机会,所以25匹马分成5组,一开始的这5场比赛是免不了的。接下来要找冠军也很容易,每一组的冠军在一起赛一场就行了(第6场)。最后就是要找第2和第3名。我们按照第6场比赛中得到的名次依次把它们在前5场比赛中所在的组命名为A、B、C、D、E。即:A组的冠军是第6场的第1名,B组的冠军是第6场的第2名……每一组的5匹马按照他们已经赛出的成绩从快到慢编号:

A组:1,2,3,4,5

B组:1,2,3,4,5

C组:1,2,3,4,5

D组:1,2,3,4,5

E组:1,2,3,4,5

从现在所得到的信息,我们可以知道哪些马已经被排除在3名以外。只要已经能确定有3匹或3匹以上的马比这匹马快,那么它就已经被淘汰了。可以看到,只有上表中粗体蓝色的那5匹马才有可能为2、3名的。即:A组的2、3名;B组的1、2名,C组的第1名。取这5匹马进行第7场比赛,第7场比赛的前两名就是25匹马中的2、3名。故一共最少要赛7场。


标签:SQLite

返回前面的内容

相关阅读 >>

Sqlite expert pro5.0如何安装可视化数据库管理软件激活教程

解决mac系统升级后虚拟机黑屏问题

Sqlite数据库常用语句及mac上的Sqlite可视化工具meassqllite使用方法

c#操作Sqlite实现数据的增删改查

微软官方sqlhelper类 数据库辅助操作类 font color=red原创font

初识Sqlite3数据库

from csv to Sqlite3 by python 导入csv到Sqlite实例

android中Sqlite 使用方法详解

详解ios应用开发中core data数据存储的使用

python实现excel转Sqlite的方法

更多相关阅读请进入《Sqlite》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...