1. 谈谈对C、C++、Java、C#、PHP、Python等编程语⾔言的认识?
C语言执行效率快,直接将人能识别的到吗转换成机器码,但是代码复杂代码多并且容易代码重复 java , c# , python , PHP:执行效率会稍微慢一点,实现是将人能识别的代码转换成字节码,再将字节码转换成机器码。 C#:windows运行,windows掏钱 java :学习难度大 PHP:web开发,先入为主 python代码简洁,简单易懂还有强大的类库,功能齐全
详细信息:http://www.cnblogs.com/0bug/p/8622742.html
2. 谈谈你了了解的python种类以及相关特点?
常用环境:web开发,爬虫,运维自动化,金融分析和人工智能
python的分类很多,但是规则还是只有一个
如果python需要删除某个旧版分的时候,会在更新的告诉下一个程序员,好让程序员准备好下下个版本的更新,而下下个版本就会删除该功能。
由于python代码的强大,其他语言的解释器都能执行python的代码,解释器是开发这门语言的创始人创建好的。所以我们直观写代码执行
3. pep8规范
代码编排: 缩进:4个空格的缩进 每行的最大的长度不能超过79,换行可以使用反斜杠,最好使用的是圆括号。换行点要在操作的符号的后面 类和top-level函数定义之间空两行,类中定义的方法之间空一行,函数类逻辑无关的代码之间需要空一行。 文档编排: 不要再一句import导入多个模块。 如果采用from XX import XX引用库,可以省略‘module.’,都是可能出现命名冲突,这时就要采用import XX 模块内容的顺序:模块说明和docstring—import—globals&constants—其他定义。其中import部分,又按标准、三方和自己编写顺序依次排放,之间空一行 详细信息:https://blog.csdn.net/MrLevo520/article/details/69155636
4. 字节码和机器器码的关系和区别?
机器码:学习机器语言指令,也被称为原生码,是电脑CPU直接剋有读取的数据。 字节码:是一种包含执行程序,由一序列op代码/数据对组成的二进制文件,字节码是一种中间码,它比机器码更加的抽象,需要直接编译后才能成为机器码的中间代码 详细信息: https://www.cnblogs.com/qiumingcheng/p/5400265.html
5. 运算符:
1. 求结果:2 & 5 : # 10 & 101 => 000 => 0 2. 求结果:2 ^ 5 : # 10 ^ 101 => 111 => 1*2**0+1*2**1+1*2**2=1+2+4=7 3. 求结果:1 or 3 : 1 4. 求结果:1 and 3 :3 5. 求结果:0 and 2 and 1 :0 6. 求结果:0 and 2 or 1 :1 7. 求结果:0 and 2 or 1 or 4 :1 8. 求结果:0 or Flase and 1 :Flase
6. 三元运算写法和应⽤用场景?
正确结果 if 条件 else 错误的结果 : 用于简单的if语句的判断
7. Python3和Python2的区别?
在python3 中print打印需要加上括号,range创建迭代对象的用法是非常流行的与python2中的xrange相同,除号/可以计算到精确一点的值
在python2中print打印不需要括号,range与python3中的range不同,xrange与python3中的相同。除号/只能却道整数。
详细信息:http://www.runoob.com/python/python-2x-3x.html
8. ⽤用⼀一⾏行行代码实现数值交换:
a = 1
b = 2
a,b=b,a
9. 谈谈Python的深浅拷⻉贝?以及实现⽅方法和应⽤用场景。
浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制 深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制。 1,切片可以应用于:列表、元组、字符串,但不能应用于字典。 2,深浅拷贝,既可应用序列(列表、元组、字符串),也可应用字典
详细信息:https://blog.csdn.net/u014745194/article/details/70271868
10.python2和python3中的int和long区别?
python3中没有了long类型,只用int类型,python3中int类型就相当于python2中的long类型
11. 布尔值为False的常⻅见值都有那些?
分别有[],(),{},None,'',0,False
12.range和xrange区别
在python3中的range就相当于python2中的xrange,但是在python2中的range一上来就会生成一大堆的内存空间,但是在python3中
就不会,他和python2中xrange一样,在需要某个值得时候生成他的内存空间,如果长时间不使用,就会自动清理这个内存空间
13.字符串串、列列表、元组、字典每个常⽤用的5个⽅方法?
str:
split:分割
strip:去掉两边的空格
startswith:以什么开头
endswith:以什么结尾
lower:小写
upper:大写
list:
append:追加
insert:插入
reverse:反转
index : 索引
copy:拷贝
tuple:
count:查看某个元素出现的次数
index:索引
dict:
get:根据key取value
items:用于循环,去除所有的key和value
keys:取出所有的key
values:去除所有的value
clear:清空字典
14.lambda表达式格式以及应⽤用场景?
Lambda匿名函数经常被用到filter(), map(), reduce(), sorted()函数中,这些函数的共同点是均需要函数型的参数,Lambda表达式正好适用
一般定义调用一次的函数就可以使用Lambda函数
详细信息:https://blog.csdn.net/vernice/article/details/46385131
15.求结果:
def num():
return [lambda x: i*x for i in range(4)]
print([m(2) for m in num()]) # [6,6,6,6]
16.pass的作⽤用?
pass一般用于占位语句,保持代码的完整性,不会做任何的操作
17.求结果:
v = dict.fromkeys(['k1','k2'],[])
v[‘k1’].append(666)
print(v)
{'k1':[666],'k2':[666]}
v[‘k1’] = 777
print(v) {'k1':777,'k2':[666]}
18.*arg和**kwarg作⽤用
动态参数,一般在定义函数是,不知道需要传入几个参数,就可以使用这个来定义参数,然后再这个里面来取
*args:按照位置传参的,将参数打包成一个元组
*kwargs:按照关键字传入参数,将传入的参数打包成一个字典
19.is和==的区别
否是用于比较判断使用的,但是比较判断的内容不相同
==是python中比较的操作符号,一般是用来判断某些的值是否相同
is是可以叫做同一比较符,是比较对象之间的身份信息是否相同。
详细信息:https://www.cnblogs.com/CheeseZH/p/5260560.html
20.⼀一⾏行行代码实现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)]))
21.如何安装第三⽅方模块?以及⽤用过哪些第三⽅方模块?
1 可以在pycharm里面的settings里面手动的添加第三方模块,
2 在cmd终端可以使用pip install 安装第三方模块
我用过的第三方模块大概有:requests,pymysql,DBUtils等等
22.常⽤用模块都有那些?
re,os,random,json,time等等
23.re的match和search区别?
match:尝试从字符串起始位置开始匹配如果没有就会返回None
search:从字符的起始位置开始匹配,匹配到第一个符合的就不会去匹配了
24.什什么是正则的贪婪匹配?
匹配一个字符串没有节制,能匹配多少就去匹配多少,知道没有匹配的为止
25.求结果:
a. [ i % 2 for i in range(10) ]
# [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
b. ( i % 2 for i in range(10) ) # <generator object <genexpr> at 0x03535090>是一个内存地址
b=(i%2 for i in range(10))for i in b: print(i)
26.求结果:
a. 1 or 2
1
b. 1 and 2
2
c. 1 < (2==2)
Falsed. 1 < 2 == 2 True
27.def func(a,b=[]) 这种写法有什什么坑?
函数陷阱,列表是一个可变类型,可以在任何的地方修改他那里面的数据
28.如何实现 “1,2,3” 变成 [‘1’,’2’,’3’]
print('1,2,3'.split(','))
29.如何实现[‘1’,’2’,’3’]变成[1,2,3]
([int(i) for i in ['1','2','3']])
30.内置函数:map、reduce、filter的⽤用法和区别
map:便利序列,为每一个序列进行操作,获取一个新的序列
reduce:对于序列里面的所有内容进行累计操作
ffilter:对序列里面的元素进行筛选,最终获取符合条件的序列。
31.如何⽤用⼀一⾏行行代码⽣生成[1,4,9,16,25,36,49,64,81,100]
print([i**2 for i in range(1,11)])
32.⼀一⾏行行代码实现删除列列表中重复的值。
print(list(set([1,2,4,5,3,1,5,6,1,9])))
33.如何在函数中设置⼀一个全局变量量
使用global就可以设置一个全局变量
34.请⽤用代码简答实现stack。
详细信息:https://www.cnblogs.com/chongyou/p/7099692.html
Stack():创建一个新的空栈 push(item):添加一个新的元素 item到栈顶 pop():弹出栈顶元素 peek():返回栈顶元素 is_empty():判断栈是否为空 size():返回栈的元素个数 class Stack: def __init__(self): self.items=[] def is_empty(self): return self.items==[] def push(self,item): self.items.append(item) def pop(self): return self.items.pop() def peek(self): return self.items[len(self.items)-1] def size(self): return len(self.items) if __name__ == '__main__': stack = Stack() stack.push("hello") stack.push("world") stack.push("lcg") print(stack.size()) print(stack.peek()) print(stack.pop()) print(stack.peek()) print(stack.pop()) print(stack.peek()) print(stack.pop())
35.常⽤用字符串串格式化有哪些?%s,%d,也就是%占位符format:通过位置匹配和关键字匹配可以实现字符串的格式化
36.如何理理解⽣生成器器和迭代器器?
生成器:有yield关键字的函数就是一个生成器,生成器一定是一个迭代器
有__iter__和__next__方法的对象就是一个迭代器,但是迭代器不一定是生成器
详细信息:https://www.zhihu.com/question/20829330
37.⽤用Python实现⼀一个⼆二分查找的函数。
li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] def search(zhi,li,start=0,end=None): end = len(li) if end is None else end zj = (end - start) // 2+start if start<=end: if zhi>li[zj]: return search(3,li,start=zj+1,end=end) elif zhi<li[zj]: return search(3,li,start=start,end=zj-1) else: return zj return '找不到这个值' print(search(8,li)
38.求结果:
a = (1)print(a) # (1)
b = (1,)print(b) # (1,)
39.谈谈你对闭包的理理解?
闭包函数就是内部的函数调用外部函数的变量,常用于装饰器。
40.python递归的最⼤大层数是多少?
998层
41.os和sys模块的作⽤用?
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;
sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
42.谈谈你对⾯面向对象的理理解?以及三⼤大特性是如何理理解?
面向对象是一种编程思想,以类的眼光来看待事物的一种方式。将有共同的属性和方法的事物封装到同一个类下面。
封装:将有共同的属性和方法封装到到同一个类下面
继承:将多个类的共同属性和方法封装到一个父类下,然后在用这些类来继承这个类的属性和方法
多态:python天生是支持多态的。指的就是基类的同一个方法在不同的派生类中有着不同的功能
43.如何⽣生成⼀一个随机数?
random.random()random.randint(1,100)
44.如何使⽤用python删除⼀一个⽂文件
import os
os.remove('文件名以及路径')
45.⾯面向对象深度优先和⼴广度优先是什什么?
在python2继承查找的顺序就是深度优先,意思就是按照一条路线找到底,第二次如果还会有这些类,就不会再去查找
python3中继承查找的顺序就是官渡优先,意思就是从左到右查找,找到他们的祖先,只要不是共同的祖先,就会继续查找,如果共同的祖先类,就会在找完他的最后一个派生类的时候就要去查找共同的祖先
46.⾯面向对象中super的作⽤用?
主要用于子类继承父类的所有属性和方法
47.是否使⽤用过functools中的函数?其作⽤用是什什么?
用于装饰器中,functools.wraps() :主要是用来修复装饰器
48.如何判断是函数还是⽅方法?
看他的调用者是谁,如果是类,需要传入一个参数self的值,这时他就是一个函数,如果调用者是对象,不需要给self传入参数值,这时他是一个方法
49.静态⽅方法和类⽅方法区别?
尽管 classmethod 和 staticmethod 非常相似,但在用法上依然有一些明显的区别。classmethod 必须有一个指向类对象的引用作为第一个参数,而 staticmethod 可以没有任何参数。
50.列列举⾯面向对象中的特殊成员以及应⽤用场景
__call__ __new__ __init__ __doc__ __class__ __del__ __dict__ __str__ 在falsk源码用到......
51. 1、2、3、4、5 能组成多少个互不不相同且⽆无重复的三位数import itertoolsprint(len(list(itertools.permutations('12345',3))))
60个
题意理解:
组成后的数值不相同,且组合的三个位数之间数字不重复。
使用python内置的排列组合函数(不放回抽样排列)
product 笛卡尔积 (有放回抽样排列)
permutations 排列 (不放回抽样排列)
combinations 组合,没有重复 (不放回抽样组合)
combinations_with_replacement 组合,有重复 (有放回抽样组合)
52.什什么是反射?以及应⽤用场景?
反射就是以字符串的方式导入模块,以字符串的方式执行函数应用的的场景在rest framework里面的CBV
53.metaclass作⽤用?以及应⽤用场景?
用来指定指定某个类是由哪个类创建的
应用场景在于: 为了当创建类使能够自动地改变类。 通常会为API做这样的事情,希望可以创建符合当前上下文的类。
54.⽤用尽量量多的⽅方法实现单例例模式。
详细信息:https://www.cnblogs.com/huchong/p/8244279.html
详细实例:http://www.cnblogs.com/fangjie0410/p/8729265.html
55.装饰器器的写法以及应⽤用场景。
详细信息:http://www.cnblogs.com/fangjie0410/p/7459976.html
56.异常处理理写法以及如何主动跑出异常(应⽤用场景)
详细信息:http://www.cnblogs.com/fangjie0410/p/7515445.html
57.什什么是⾯面向对象的mro
解析类继承的查找顺序,再不知道继承顺序的情况下,可以使用这个来查找
详细信息:http://python.jobbole.com/85685/58.isinstance
58.isinstance作⽤用以及应⽤用场景?
作⽤用以及应⽤用场景?用来判断一个对象是否是这个类以及他的子类的实例
59.什什么是断⾔言?应⽤用场景?
assert断言:声明其布尔值为真,如果断言失败就会抛出异常一般用于人的测试环节
60.写函数,实现功能:给定一个整数数组,返回这两个数字的索引,使它们合计成一个特定的目标。你可以假设每个输入都有一个解决方案。
li=[1,2,3,4] def func(nums,li): li1=[] for i in range(len(li)): for j in range(i+1,len(li)): if li[i]+li[j]==nums: li1.append([i,j]) return li1 print(func(5,li))