1. 程式人生 > >面試題目-第一部分 Python基礎篇(80題)

面試題目-第一部分 Python基礎篇(80題)

第一部分 Python基礎篇(80題)

1. 為什麼學習Python?
2. 通過什麼途徑學習的Python?
3. Python和Java、PHP、C、C#、C++等其他語言的對比?
4. 簡述解釋型和編譯型程式語言?

什麼是編譯型語言和解釋型語言
計算機是不能理解高階語言的,更不能直接執行高階語言,它只能直接理解機器語言,所以使用任何高階語言編寫的程式若想被計算機執行,都必須將其轉換成計算機語言,也就是機器碼。

 

計算機是不能理解高階語言的,更不能直接執行高階語言,它只能直接理解機器語言,所以使用任何高階語言編寫的程式若想被計算機執行,都必須將其轉換成計算機語言,也就是機器碼。而這種轉換的方式有兩種:

編譯

解釋

由此高階語言也分為編譯型語言和解釋型語言。

編譯型語言
使用專門的編譯器,針對特定的平臺,將高階語言原始碼一次性的編譯成可被該平臺硬體執行的機器碼,幷包裝成該平臺所能識別的可執行性程式的格式。

特點
在編譯型語言寫的程式執行之前,需要一個專門的編譯過程,把原始碼編譯成機器語言的檔案,如exe格式的檔案,以後要再執行時,直接使用編譯結果即可,如直接執行exe檔案。因為只需編譯一次,以後執行時不需要編譯,所以編譯型語言執行效率高。

總結
一次性的編譯成平臺相關的機器語言檔案,執行時脫離開發環境,執行效率高;

與特定平臺相關,一般無法移植到其他平臺;

現有的C、C
++、Objective等都屬於編譯型語言。 解釋型語言 使用專門的直譯器對源程式逐行解釋成特定平臺的機器碼並立即執行。 特點 解釋型語言不需要事先編譯,其直接將原始碼解釋成機器碼並立即執行,所以只要某一平臺提供了相應的直譯器即可執行該程式。 總結 解釋型語言每次執行都需要將原始碼解釋稱機器碼並執行,效率較低; 只要平臺提供相應的直譯器,就可以執行原始碼,所以可以方便源程式移植; Python等屬於解釋型語言。
View Code

5. Python直譯器種類以及特點?

CPython
c語言開發的 使用最廣的直譯器
IPython
基於cpython之上的一個互動式計時器 互動方式增強 功能和cpython一樣
PyPy
目標是執行效率 採用JIT技術 對python程式碼進行動態編譯,提高執行效率
JPython
執行在Java上的直譯器 直接把python程式碼編譯成Java位元組碼執行
IronPython
執行在微軟 .NET 平臺上的直譯器,把python編譯成. NET 的位元組碼
View Code

6. 位和位元組的關係?

bit就是位,也叫位元位,是計算機表示資料最小的單位。
byte就是位元組,1byte=8bit,1byte就是1B;
一個字元=2位元組;
1KB=1024B
View Code

7. b、B、KB、MB、GB 的關係?

b ,B,KB,MB,GB之間的關係
utf-8種一個字母或者 數字等於一個位元組 , 一個漢字等於3個位元組,表情等於4個位元組



b 位元bit / 位 
B——位元組
KB——千位元
MB——兆位元
GB——吉位元

1 B = 8b (8個bit/ 位) 一個位元組(byte)等於8位(bit)
1 kB = 1024 B (kB - kilobajt)  1 MB = 1024 kB (MB - megabajt) 1 GB = 1024 MB (GB - gigabajt)  英文和數字佔一個位元組 中文佔一個字元,也就是兩個位元組 字元 不等於 位元組。 字元(char)是 Java 中的一種基本資料型別,由 2 個位元組組成,範圍從 0 開始,到 2^16-1。 位元組是一種資料量的單位,一個位元組等於 8 位。所有的資料所佔空間都可以用位元組數來衡量。例如一個字元佔 2 個位元組,一個 int 佔 4 個位元組,一個 double 佔 8 個位元組 等等。 1字元=2位元組; 1Byte=8bit 1k=2^10;b:位;B:位元組1kb=1024 位1kB=1024 位元組 --------------------- 作者:tiny_sxj 來源:CSDN 原文:https://blog.csdn.net/abc3224302/article/details/51898283 版權宣告:本文為博主原創文章,轉載請附上博文連結!
View Code

8. 請至少列舉5個 PEP8 規範(越多越好)。

(1)、縮排:每一級4個縮排。連續跨行應該使用圓括號或大括號或者使用懸掛縮排。

(2)、程式碼長度約束

一行列數:PEP8 規定最大為79列,如果拼接url很容易超限

一個函式:不可以超過30行;直觀來講就是完整顯示一個函式一個螢幕就夠了,不需要上下拖動

一個類:不要超過200行程式碼,不要超過10個方法

一個模組:不要超過500行

(3)、import

不要在一句import中引用多個庫

(4)、命名規範

(5)、註釋

總體原則:錯誤的註釋不如沒有註釋。所以當一段程式碼發生變化時,第一件事就是要修改註釋!
View Code

9. 通過程式碼實現如下轉換:

二進位制轉換成十進位制:v = “0b1111011”=====123
十進位制轉換成二進位制:v = 18 ============0b10010
八進位制轉換成十進位制:v = “011” ==========9
十進位制轉換成八進位制:v = 30 ============36
十六進位制轉換成十進位制:v = “0x12” =======18
十進位制轉換成十六進位制:v = 87==========57
View Code

10. 請編寫一個函式實現將IP地址轉換成一個整數。
如 10.3.9.12 轉換規則為:
        10            00001010
         3            00000011
         9            00001001
        12            00001100
再將以上二進位制拼接起來計算十進位制結果:00001010 00000011 00001001 00001100 = ?
11. python遞迴的最大層數?

首先來看看python預設的最大遞迴層數:

執行環境:Windows 10,x64
python環境:python3.5

def foo(n):
    print(n)
    n += 1
    foo(n)
 
if __name__ == '__main__':
    foo(1)
得到的最大數為998,以後就是報錯了:RecursionError: maximum recursion depth exceeded while calling a Python object

那麼python允許的最大遞迴層數是多少呢?我們實驗下:

複製程式碼
import sys
sys.setrecursionlimit(100000)

def foo(n):
    print(n)
    n += 1
    foo(n)
        
if __name__ == '__main__':
    foo(1)
複製程式碼
 

得到的最大數字在3925-3929之間浮動,這個是和計算機有關係的,不然也不會是一個浮動的數字了(數學邏輯講求嚴謹)。

我們已經將數字調到足夠大了,已經大於系統堆疊,python已經無法支撐到太大的遞迴了。

對於沒有尾遞迴的程式語言來說,程式執行起來的時候計算機會給當前程序分配棧,每遞迴一次,計算機就會給當前程式排程一部分來使用,當使用過多了,那麼不好意思,我就這麼點了。然後,就沒有然後了,崩了。python不是尾遞迴優化的語言,我們不應該使用遞迴來替代掉迴圈,迴圈存在必然有它巨大的意義。遞迴用於複雜度為O(log(n))的計算是很有意義的,用於O(n)就不怎麼好了。

那麼有什麼好的解決辦法呢?當然是有的,比如python的generator,這個是python的一大神器,請參看:http://www.jianshu.com/p/d36746ad845d

 

總結:

遞迴是一個很有用的處理方式,簡單到遍歷資料夾、處理XML;複雜到人工智慧等。
合理使用遞迴能讓我們的程式具有簡潔和強的可讀性。
View Code

12. 求結果:
    v1 = 1 or 3
    v2 = 1 and 3
    v3 = 0 and 2 and 1
    v4 = 0 and 2 or 1
    v5 = 0 and 2 or 1 or 4
    v6 = 0 or Flase and 1
13. ascii、unicode、utf-8、gbk 區別?
14. 位元組碼和機器碼的區別?
15. 三元運算規則以及應用場景?
16. 列舉 Python2和Python3的區別?
17. 用一行程式碼實現數值交換:
      a = 1
       b = 2
18. Python3和Python2中 int 和 long的區別?
19. xrange和range的區別?
20. 檔案操作時:xreadlines和readlines的區別?
21. 列舉布林值為False的常見值?
22. 字串、列表、元組、字典每個常用的5個方法?
23. lambda表示式格式以及應用場景?
24. pass的作用?
25. *arg和**kwarg作用
26. is和==的區別
27. 簡述Python的深淺拷貝以及應用場景?
28. Python垃圾回收機制?
29. Python的可變型別和不可變型別?
30. 求結果:
   v = dict.fromkeys(['k1','k2'],[])  
   v[‘k1’].append(666)
   print(v)
   v[‘k1’] = 777
   print(v)
31. 求結果:

32. 列舉常見的內建函式?
33. filter、map、reduce的作用?
34. 一行程式碼實現9*9乘法表
35. 如何安裝第三方模組?以及用過哪些第三方模組?
36. 至少列舉8個常用模組都有那些?
37. re的match和search區別?
38. 什麼是正則的貪婪匹配?
39. 求結果: a. [ i % 2 for i in range(10) ] b. ( i % 2 for i in range(10) )
40. 求結果: a. 1 or 2 b. 1 and 2 c. 1 < (2==2) d. 1 < 2 == 2
41. def func(a,b=[]) 這種寫法有什麼坑?
42. 如何實現 “1,2,3” 變成 [‘1’,’2’,’3’] ?
43. 如何實現[‘1’,’2’,’3’]變成[1,2,3] ?
44. 比較: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的區別?
45. 如何用一行程式碼生成[1,4,9,16,25,36,49,64,81,100] ?
46. 一行程式碼實現刪除列表中重複的值 ?
47. 如何在函式中設定一個全域性變數 ?
48. logging模組的作用?以及應用場景?
49. 請用程式碼簡答實現stack 。
50. 常用字串格式化哪幾種?
51. 簡述 生成器、迭代器、可迭代物件 以及應用場景?
52. 用Python實現一個二分查詢的函式。
53. 談談你對閉包的理解?
54. os和sys模組的作用?
55. 如何生成一個隨機數?
56. 如何使用python刪除一個檔案?
57. 談談你對面向物件的理解?
58. Python面向物件中的繼承有什麼特點?
59. 面向物件深度優先和廣度優先是什麼?
60. 面向物件中super的作用?
61. 是否使用過functools中的函式?其作用是什麼?
62. 列舉面向物件中帶爽下劃線的特殊方法,如:__new__、__init__
63. 如何判斷是函式還是方法?
64. 靜態方法和類方法區別?
65. 列舉面向物件中的特殊成員以及應用場景
66. 1、2、3、4、5 能組成多少個互不相同且無重複的三位數
67. 什麼是反射?以及應用場景?
68. metaclass作用?以及應用場景?
69. 用盡量多的方法實現單例模式。
70. 裝飾器的寫法以及應用場景。
71. 異常處理寫法以及如何主動跑出異常(應用場景)
72. 什麼是面向物件的mro
73. isinstance作用以及應用場景?
74. 寫程式碼並實現:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would 
have exactly one solution, and you may not use the same element twice.
Example:
          Given nums = [2, 7, 11, 15], target = 9,
            Because nums[0] + nums[1] = 2 + 7 = 9,
           return [0, 1]
75. json序列化時,可以處理的資料型別有哪些?如何定製支援datetime型別?
76. json序列化時,預設遇到中文會轉換成unicode,如果想要保留中文怎麼辦?
77. 什麼是斷言?應用場景?
78. 有用過with statement嗎?它的好處是什麼?
79. 使用程式碼實現檢視列舉目錄下的所有檔案。
80. 簡述 yield和yield from關鍵字。