Python面試重點(基礎篇)

Python面試重點(基礎篇)java

第一部分 必答題(每題2分)python

  1. 簡述列舉了解的編程語言及語言間的區別?
    python 解釋型 相對於簡單易學
    java 混合型 學習成本高,java作web
    c 編譯型 底層語言
    c++ 編譯型 c的基礎上加了面向對象
    go 編譯型 高併發,區塊鏈c++

    語言特色: 靈活簡潔,語言優美 可讀性強,
    
    語言類型:
         解釋型:逐行轉化,運行效率低,性能差,開發效率高。兼容性好,跨平臺
         編譯型 :一次性編譯成二進制文件,執行效率高,兼容性差,
         動態語言:不用聲明變量的數據類型(腳本類語言)
         靜態語言:須要聲明變量的數據類型
    
    第三方庫:python定位是任其發展,開源庫不少,應用領域廣
  2. 列舉Python2和Python3的區別?
    Python 2只支持到2020年
    print函數 Python2不加括號 Python3加括號 從語句變爲函數
    input函數 Python2用戶輸入解析爲int類型,raw_input爲字符串類型 Python3爲字符串類型
    整除/ 2 根據除數小數點位獲得結果,整形 3是真除
    默認編碼 2是ascll碼 3 utf-8
    不等!= <> python3取消了<>
    int類型 2有long類型 3只有int
    range 2 是列表 xrange 可迭代對象 3是可迭代對象
    2新式類,經典類 3 新式類程序員

  3. 看代碼寫結果web

    v1 = 1 or 2
    #v1 = 1
    v2 = 3 and 7 or 9 and 0
    #v2 = 7 or 0
    #v2 = 7
    在沒有()的狀況下not 優先級高於 and,and優先級高於or 
    x or y , x爲真,值就是x,x爲假,值是y;
    x and y, x爲真,值是y,x爲假,值是x。
    兩邊都不是0的狀況下 
    and 直接取後面的值 or 直接取前面的值 
    若是存在0的狀況
    and 直接取0 or 直接取非0
    false是 0 。。
  4. 比較如下值有什麼不一樣?
    v1 = [1,2,3]
    v2 = [(1),(2),(3)]
    v3 = [(1,),(2,),(3,)]
    1和2沒什麼太大區別,3的話(1,)表示是一個元組,(1)表示的是裏面元素自己的類型
  5. 用一行代碼實現數值交換。
    a = 1
    b = 2面試

    #a,b = b,a
  6. Python中單引號、雙引號、三引號的區別?
    python中單雙引號能夠互相包含,避免轉義,
    而三引號有兩種做用 長字符串的換行,以及註釋
  7. is和==的區別?
    對象的基本三要素:type(數據類型) id(身份標識) 和 value(值)
    ==比較兩個對象的值是否相等
    is判斷id值是否相同django

  8. python裏如何實現tuple和list的轉化?
    tuple(list) #能夠用循環添加
    list(tuple) #tuple不可變,不能循環添加編程

  9. 如何實現字符串 name='老男孩'的反轉?
    1.切片
    name = name[::-1]
    2.列表的reverse方法
    name = list(name)
    name.reverse()
    name = ''.join(name)
    #name = ''.join(name[::-1])
    3.for 循環
    #各類切片insert均可以
    4.reduce函數
    new_name = reduce(lambda x,y:y+x,name)
    print(new_name)
    5.遞歸
    def func(s):
    if len(s) < 1:
    return s
    return func(s[1:]) +s[0]
    6.使用棧
    s = "hello"
    l = list(s)
    result = ""
    while(len(l)>0):
    result += l.pop()
    print(result)flask

  10. 兩個set如何獲取交集、並集、差集?
    交集 list(set(a).intersection(set(b)))
    &
    並集 list(set(a).union(set(b)))
    |
    差集 list(set(b).difference(set(a)))
    -多線程

  11. 那些狀況下, y != x - (x-y)會成立?
    x,y是兩個不相等的非空集合
  12. Python中如何拷貝一個對象?
    爲了在修改數據時不改變原數據所產生了拷貝
    copy模塊 copy.copy() copy.deepcopy()
    [:]
    可變對象:所謂可變是指可變對象的值可變,身份(id)是不變的。如:列表、字典、集合
    不可變對象:就是對象的身份和值都不可變。如:數字(數字也是不可變,切記)、字符串、元組

  13. 簡述 賦值、淺拷貝、深拷貝的區別?
    原則上是分離數據,修改數據互不影響

    賦值:讓多個變量同時指向一個對象的內存地址。不可變對象在賦值時會開闢新空間。可變對象在賦值時,修改一個的值,另外一個也會發生改變。
    
    淺拷貝:(copy模塊的copy.copy()函數) 拷貝父對象,不會拷貝對象的內部的子對象。不可變對象和賦值沒區別。可變對象,淺拷貝在拷貝時,只拷貝第一層中的引用,若是元素是可變對象,而且被修改,那麼拷貝的對象也會發生變化。####拷貝第一層元素內存地址
    
    深拷貝:徹底拷貝了父對象及其子對象。深拷貝就是將頂級對象以及子對象的值同時複製給新對象,此時修改任何一個都不會影響另外一個。{copy模塊的 copy.deepcopy()函數}####無論多少層,不可變共有,可變開闢新空間
    
    但因爲小數據池的概念,python中 -5~~256  20字符串 bool徹底共享內存地址
  14. pass的做用?
    佔位
    ...
  15. 閱讀代碼寫結果。
    import copy
    a = [1,2,4,5,['b','c']]
    b = a
    c = copy.copy(a)
    d = copy.deepcopy(a)

    a.append(5)
    a[4].append('d')
    
    print(b)
    print(c)
    print(a)
  16. 用Python實現9 * 9 乘法表。

  17. 用Python顯示一個斐波那契數列。
    lst = [1,1]
    for i in range(10):
    lst.append()

  18. 如何刪除列表中重複的值?
    list(set(list))

  19. 一個大小爲100G的文件etl_log.txt, 要讀取文件中的內容, 寫出具體過程代碼?
    for i in 文件句柄

  20. a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 請問a是什麼?
    字典的建立方式

  21. lambda關鍵字的做用?
    定義一個匿名函數

  22. *arg和kwarg做用?
    * arg 接受多餘位置參數
    kwarg 接受多餘關鍵字參數

  23. 如何在函數中設置一個全局變量 ?
    global name

  24. filter、map、reduce的做用?
    filter 過濾
    map 映射
    reduce 累計算

  25. 什麼是匿名函數?匿名函數有什麼做用?
    lambda 函數就是匿名函數,一句話函數
    配合高階函數進行使用
    高階函數:能寫方法的

  26. Python遞歸的最大層數?
    官方1000 實際994-998
    import sys
    sys.setrecursionlimit(10000)修改遞歸最大深度

  27. 什麼是迭代器?什麼是可迭代對象?
    具備__iter__()和__next__()方法的就是迭代器
    具備__iter__()方法的就是可迭代對象
    .dir()查看某個對象的全部屬性和方法

  28. 什麼是生成器? 什麼是裝飾器及應用場景?
    生成器的本質就是迭代器,具備yield關鍵字就是生成器
    裝飾器本質閉包,不修改源代碼及調用方式下,額外增長功能
    登錄驗證

    flask
    django

  29. 什麼是反射及應用場景?
    經過字符串操做對象的方法和屬性
    應用場景:
    用戶輸入,判斷選擇,cbv

  30. 寫一個普通的裝飾器。

  31. 寫一個帶參數的裝飾器。

  32. 求結果
    def num():
    return [lambda x:i*x for i in range(4)]
    print([m(2) for m in num()])

    [6,6,6,6]
  33. def(a, b=[])這種寫法有什麼陷阱?
    默認參數是可變數據類型 閉包

  34. 看代碼寫結果
    def func(a,b=[]):
    b.append(a)
    return b

    v1 = func(1)
    v2 = func(2,[10,20])
    v3 = func(3)
    print(v1,v2,v3)
  35. 看代碼寫結果
    def func(a,b=[]):
    b.append(a)
    return b

    v1 = func(1)
    print(v1)  1
    v2 = func(2,[10,20])
    print(v2)  10 20 2
    v3 = func(3)
    print(v3)  1 3
  36. 請編寫一個函數實現--換成一個整數。
    如 10.3.9.12 轉換規則爲:
    10 00001010
    3 00000011
    9 00001001
    12 00001100

    再將以上二進制拼接起來計算十進制結果:00001010 00000011 00001001 00001100 = ?
  37. 請查找一個目錄下的全部文件(可能存在文件嵌套)。
    os.walk() 本質遞歸

  38. 求結果
    import math
    print (math.floor(5.5))
    地板除 5

  39. 是否使用過functools中的函數?其做用是什麼?
    reduce wraps

  40. re的match和search區別?
    match 從開頭進行匹配,匹配一個就中止
    search 從任意位置進行匹配 匹配一個就中止

  41. 用Python匹配HTML tag的時候,<.>和<.?>有什麼區別?
    .
    貪婪匹配 匹配多個任意字符
    .*? 非貪婪 只匹配一次

  42. 如何生成一個隨機數?
    random
    random.random()

  43. super的做用?
    按照mro的順序進行繼承

  44. 雙下劃線和單下劃線的區別?
    __a = 10 強制私有
    _b = 15 程序員約定俗成這是一個私有方法

  45. @staticmethod和@classmethod的區別?
    一個是靜態方法 普通函數
    一個是類方法

  46. 實現一個單例模式(加鎖)。
    多線程再也不是單例了,爲了保證因此加鎖

  47. 棧和隊列的區別?
    棧 先進後出
    隊列 先進先出

  48. 如下代碼輸出是什麼? 請給出答案並解釋。
    class Parent(object):
    x = 1

    class Child1(Parent):
        pass
    
    class Child2(Parent):
        pass
    
    print Parent.x, Child1.x, Child2.x
    
    Child1.x = 2
    print Parent.x, Child1.x, Child2.x
    
    Parent.x = 3
    print Parent.x, Child1.x, Child2.x
  49. 參考下面代碼片斷
    class Context:
    pass

    with Content() as ctx:
        ctx.do_something()
    請在Context類下添加代碼完成該類的實現

第二部分 可選題

  1. 如何獲取列表中第二大的值?
  2. 簡述Python內存管理機制。
  3. 簡述Python的垃圾回收機制。
  4. 請用兩個隊列來實現一個棧。
  5. 請用Python實現一個鏈表。
  6. 請用Python實現鏈表的逆轉。
相關文章
相關標籤/搜索