面试题整理1

1. 谈谈对C、C++、Java、C#、PHP、Python等编程语言的认识?
C语言执行效率快,直接将人能识别的到吗转换成机器码,可是代码复杂代码多而且容易代码重复
java , c# ,  python , PHP:执行效率会稍微慢一点,实现是将人能识别的代码转换成字节码,再将字节码转换成机器码。
C#:windows运行,windows掏钱
java  :学习难度大
PHP:web开发,先入为主
python代码简洁,简单易懂还有强大的类库,功能齐全
View Code
详细信息:http://www.cnblogs.com/0bug/p/8622742.html

2. 谈谈你了了解的python种类以及相关特色?
经常使用环境:web开发,爬虫,运维自动化,金融分析和人工智能
python的分类不少,可是规则仍是只有一个
若是python须要删除某个旧版分的时候,会在更新的告诉下一个程序员,好让程序员准备好下下个版本的更新,而下下个版本就会删除该功能。
因为python代码的强大,其余语言的解释器都能执行python的代码,解释器是开发这门语言的创始人建立好的。因此咱们直观写代码执行
View Code
 

 

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
View Code
 

4. 字节码和机器器码的关系和区别?
机器码:学习机器语言指令,也被称为原生码,是电脑CPU直接剋有读取的数据。
字节码:是一种包含执行程序,由一序列op代码/数据对组成的二进制文件,字节码是一种中间码,它比机器码更加的抽象,须要直接编译后才能成为机器码的中间代码
详细信息: https://www.cnblogs.com/qiumingcheng/p/5400265.html
View Code
 

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
View Code
 

 


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,深浅拷贝,既可应用序列(列表、元组、字符串),也可应用字典
View Code
详细信息: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:清空字典
View Code
 

 


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())
View Code
 

 

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)
View Code
 
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源码用到......
View Code
 

 

51. 一、二、三、四、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))
View Code
相关文章
相关标签/搜索