面試題整理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
相關文章
相關標籤/搜索