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. 一、二、三、四、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))