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

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

  1. 為什么學習Python?==*==

    # 1. python應用于很多領域,比如后端,前端,爬蟲,機器學習(人工智能)等方面,幾乎能涵蓋各個開發語言的領域,同時它相對于其他語言而言,簡潔。
  2. 通過什么途徑學習的Python?==*==

    # 通過自學,網上看視頻資料,網上買書的方法學習
  3. Python和Java、PHP、C、C#、C++等其他語言的對比?==*==

    '''
    python 
    1. 簡單————Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣,盡管這個英語的要求非常嚴格。Python的這種偽代碼本質是它最大的優點之一。它使你能夠專注于解決問題而不是去搞明白語言本身。
    2. 易學————就如同你即將看到的一樣,Python極其容易上手。前面已經提到了,Python有極其簡單的語法。
    3. 免費、開源————Python是FLOSS(自由/開放源碼軟件)之一。簡單地說,你可以自由地發布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用于新的自由軟件中。FLOSS是基于一個團體分享知識的概念。這是為什么Python如此優秀的原因之一——它是由一群希望看到一個更加優秀的Python的人創造并經常改進著的。
    4. 高層語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節。
    5. 可移植性————由于它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。如果你小心地避免使用依賴于系統的特性,那么你的所有Python程序無需修改就可以在下述任何平臺上面運行。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC、Symbian以及Google基于linux開發的Android平臺。
    6. 解釋性————這一點需要一些解釋。一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。當你運行你的程序的時候,連接/轉載器軟件把你的程序從硬盤復制到內存中并且運行。而Python語言寫的程序不需要編譯成二進制代碼。你可以直接從源代碼 運行 程序。在計算機內部,Python解釋器把源代碼轉換成稱為字節碼的中間形式,然后再把它翻譯成計算機使用的機器語言并運行。事實上,由于你不再需要擔心如何編譯程序,如何確保連接轉載正確的庫等等,所有這一切使得使用Python更加簡單。由于你只需要把你的Python程序拷貝到另外一臺計算機上,它就可以工作了,這也使得你的Python程序更加易于移植。
    7. 面向對象————Python既支持面向過程的編程也支持面向對象的編程。在“面向過程”的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在“面向對象”的語言中,程序是由數據和功能組合而成的對象構建起來的。與其他主要的語言如C++和Java相比,Python以一種非常強大又簡單的方式實現面向對象編程。
    8. 可擴展性————如果你需要你的一段關鍵代碼運行得更快或者希望某些算法不公開,你可以把你的部分程序用C或C++編寫,然后在你的Python程序中使用它們。
    9. 可嵌入性————你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。
    10. 豐富的庫————Python標準庫確實很龐大。它可以幫助你處理各種工作,包括正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶界面)、Tk和其他與系統有關的操作。記住,只要安裝了Python,所有這些功能都是可用的。這被稱作Python的“功能齊全”理念。除了標準庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python圖像庫等等。缺點:
    1. 運行速度慢,相比于C++/C運行速度偏慢,不過對于用戶而言,機器上運行速度是可以忽略的。2. 構架選擇太繁雜,沒有像C#這樣的官方.net構架,也沒有像ruby由于歷史較短,構架開發的相對集中,所以人人都有不同的方案。C:優點:1. 簡潔緊湊、靈活方便?2. 運算符豐富3. 數據結構豐富4. C是結構式語言5. C語法限制不太嚴格,程序設計自由度大6. C語言允許直接訪問物理地址,可以直接對硬件進行操作7. C語言程序生成代碼質量高,程序執行效率高8. C語言適用范圍大,可移植性好9. C語言有一個突出的優點就是適合于多種操作系統,如DOS、UNIX,也適用于多種機型10. 有效地將一個較復雜的程序系統設計任務分解成許多易于控制和處理的子任務,便于開發和維護缺點:運算符和運算優先級過多,不便于記憶,語法定義不嚴格,編程自由度大,對新手不友好。更多對比請參考:https://www.jianshu.com/p/7c8fdedf352e'''
  4. 簡述解釋型和編譯型編程語言?

    # 同聲翻譯:解釋性語言# 谷歌翻譯:編譯性語言# 個人感覺他是想考察你是否對其他的語言有所了解,同時也想看看你對python的理解有多深
  5. Python解釋器種類以及特點?==*==

    '''
    1. CPythonc語言開發的 使用最廣的解釋器
    2. IPython基于cpython之上的一個交互式計時器 交互方式增強 功能和cpython一樣
    3. PyPy目標是執行效率 采用JIT技術 對python代碼進行動態編譯,提高執行效率
    4. JPython運行在Java上的解釋器 直接把python代碼編譯成Java字節碼執行
    5. IronPython運行在微軟 .NET 平臺上的解釋器,把python編譯成. NET 的字節碼
    '''
  6. 位和字節的關系?

    # 1字節(Bytes) = 8位(bit)
  7. b、B、KB、MB、GB 的關系?

    '''
    1B = 8b
    1KB = 1024B
    1MB = 1024KB
    1GB = 1024MB
    '''
  8. 請至少列舉5個 PEP8 規范(越多越好) ==*==

    '''
    1. 代碼排版2. 文檔排版3. 避免多余空格4. 注釋5. 命令風格6. 編碼建議'''
  9. 通過代碼實現如下轉換:

    二進制轉換成十進制:v = “0b1111011”?
    十進制轉換成二進制:v = 18?
    八進制轉換成十進制:v = “011”?
    十進制轉換成八進制:v = 30?
    十六進制轉換成十進制:v = “0x12”?
    十進制轉換成十六進制:v = 87

'''
第一題
v = b'0b1111011'
print(int(v,2))第二題:
print("轉換為二進制為:", bin(18))第三題:
八進制轉換成十進制:v = “011”?
print(int("011",8))第四題:print(oct(v))第五題:
v = '0x12'
print(int(v,16))第六題:
v = 87
print(hex(v))
'''
  1. 請編寫一個函數實現將IP地址轉換成一個整數。

如 10.3.9.12 轉換規則為:

? 10 00001010

? 3 00000011?

? 9 00001001

? 12 00001100?

再將以上二進制拼接起來計算十進制結果:00001010 00000011 00001001 00001100 = ?

IP = "10.3.9.12"def addr2dec(addr):"將點分十進制IP地址轉換成十進制整數"items = [int(x) for x in addr.split(".")]# return sum([items[i] << [24, 16, 8, 0][i] for i in range(4)])return sum([items[i]*2**[24,16,8,0][i] for i in range(4)])print(addr2dec(IP))
# 167971084
  1. python遞歸的最大層數?

第一種:

def foo(n):print(n)n += 1foo(n)if __name__ == '__main__':foo(1)# 998

第二種:

import syssys.setrecursionlimit(100000)def foo(n):print(n)n += 1foo(n)if __name__ == '__main__':foo(1)# 3221左右
  1. 求結果:
    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 False and 1
>>> v1 = 1 or 3 
>>> v1
1
>>> v2 = 1 and 3
>>> v2
3
>>> v3 = 0 and 2 and 1
>>> v3
0
>>> v4 = 0 and 2 or 1
>>> v4
1
>>> v5 = 0 and 2 or 1 or 4
>>> v5
1
>>> v6 = 0 or False and 1
>>> v6
False'''
對于python而言
1. 在不加括號時候,and優先級大于or
2. x or y的值只可能是x或y,x為真就是x,x為假就是y
3. x and y的值只可能是x或y,x為真就是y,x為假就是x
'''
  1. ascii、unicode、utf-8、gbk 區別?
'''
1. ascii 8位一個字節2. unicode英文:32位  四個字節中文:32位  四個字節
3. utf-8英文:8位 一個字節中文:16位 兩個字節
4. gbk:英文:8位  一個字節中文:16位  兩個字節python3中:str 在內存中是unicode編碼bytes類型對于英文:str:表現形式:s = 'alex'編碼方式:010101010 unicodebytes:表現形式:s = b'alex'編碼方式:000101010 utf-8 gbk對于中文:str:表現形式:s = '中國'編碼方法:010101010 unicodebytes:表現形式:s = b' x\e91\e91\e01\e21\e31\e32'編碼方式:000101010 utf-8 gbkencode 編碼,如何將str --> bytes使用方法:str.encode('utf-8')decode 解碼,如何將bytes --> str使用方法:bytes.decode('utf-8')
'''
  1. 字節碼和機器碼的區別?
'''
機器碼:機器語言字節碼:匯編語言'''
  1. 三元運算規則以及應用場景?
a = 10
b = 20
x = a if a < b else b# 為真時的結果 if 判斷條件 else 為假時的結果(注意,沒有冒號)
  1. 列舉 Python2和Python3的區別?
'''
1. 2中print "字符串"  被  3中的 print()取代
2. 2中input得到的是int類型,raw_input得到的是str類型,而3中只有input且是str類型 
3. 2中字符串以8-bit字符串存儲,3中字符串以16-bit unicode字符串存儲
4. 2中try:passexcept Exception,e:pass3中try:passexcept Exception as e:pass
'''
  1. 用一行代碼實現數值交換:
    ? a = 1
    b = 2
a,b = b,a
  1. Python3和Python2中 int 和 long的區別?
'''
python2中有long類型
python3中沒有long類型,只有int類型
'''
  1. xrange和range的區別?
'''
在python2中:xrange  返回的是一個迭代值(生成器)range   返回的是一個列表在python3中:range 返回的是一個迭代值(生成器)'''
  1. 文件操作時:xreadlines和readlines的區別?
'''
xreadlines()則直接返回一個iter(file)迭代器,在Python 2.3之后已經不推薦這種表示方法了readlines()是把文件的全部內容讀到內存,并解析成一個list,當文件的體積很大的時候,需要占用很多內存,使用該方法是一種不明智的做法。
'''
  1. 列舉布爾值為False的常見值?
# 0,None,空(空容器),Flase
  1. 字符串、列表、元組、字典每個常用的5個方法?
'''
字符串:split,切片,for循環,成員運算,strip,len,replace,lower(),upper(),find()列表: append(),for循環,pop(),排序,join,insert(),切片,len(),count()增:刪:改:查:
元組:查:index()count()len()比較:cmp(tuple1,tuple2) 比較兩個元組元素;len(tuple):計算元組元素個數;max(tuple):返回元組中元素最大值。;min(tuple):返回元組中元素最小值。tuple(seq):將列表轉換為元組'''
  1. lambda表達式格式以及應用場景?
# lambda arges1 [arges2...]: 表達式
lambda x: x+2
  1. pass的作用?
# 相當于填充代碼
  1. *args和**kwargs作用
'''*args 作為形參,當用戶傳入多個位置參數時,其值都存在args中(以元組的形式)**kwargs  作為形參,當用戶傳入多個關鍵字參數時,其值都存在kwargs中(以鍵值對的形式存儲)'''
  1. is和==的區別
# is 是判斷內存地址的(身份運算符)# == 是判斷值是否相等'''
內存地址相同,值一定相等;值相等,內存地址不一定相等。'''
  1. 簡述Python的深淺拷貝以及應用場景?
'''
普通拷貝
a 是 b的普通拷貝,則a發生改變 b也發生改變。b發生改變,a也發生改變淺拷貝
a 是 b的淺拷貝,則a中的不可變數據類型發生改變,b不會變。a中可變類型發生改變,b也會隨之改變深拷貝  
a 是 b的深拷貝,a,b無關'''# 淺拷貝
import copy
copy.copy()# 深拷貝
import copy
copy.deepcopy()
28. Python垃圾回收機制?

python里每一個東西都是對象,它們的核心就是一個結構體:PyObject

typedef struct_object {int ob_refcnt;struct_typeobject *ob_type;
} PyObject;

PyObject是每個對象必有的內容,其中ob_refcnt就是做為引用計數。當一個對象有新的引用時,它的ob_refcnt就會增加,當引用它的對象被刪除,它的ob_refcnt就會減少

#define Py_INCREF(op)   ((op)->ob_refcnt++) //增加計數
#define Py_DECREF(op) \ //減少計數if (--(op)->ob_refcnt != 0) \; \else \__Py_Dealloc((PyObject *)(op))

當引用計數為0時,該對象生命就結束了。

引用計數機制的優點:

  • 簡單
  • 實時性:一旦沒有引用,,內存就會直接釋放了。不用像其他機制等到特定時機。實時性還帶來一個好處:處理回收內存的時間分攤到了平時

引用計數機制的缺點:

  • 維護引用計數消耗資源

  • 循環引用

    list1 = []
    list2 = []
    list1.append(list2)
    list2.append(list1)

    list1與list2相互引用,如果不存在其他對象對它們的引用,list1與list2的引用計數也仍然為1,所占用的內存永遠無法被回收,這將是致命的。
    對于如今的強大硬件,缺點1尚可接受,但是循環引用導致內存泄露,注定python還將引入新的回收機制。(標記清除和分代收集)

    參考連接:https://www.cnblogs.com/pinganzi/p/6646742.html#_label6

29. Python的可變類型和不可變類型?
'''
可變類型:列表,字典,集合不可變類型:整型,浮點型,字符串'''
  1. 求結果:

    v = dict.fromkeys(['k1','k2'],[])
    v['k1'].append(666)
    print(v)
    v['k1'] = 777
    print(v)
    {'k1': [666], 'k2': [666]}
    {'k1': 777, 'k2': [666]}原因:k1和k2指向的是同一個列表,也就是同一塊內存空間。
  2. 求結果

    def num():return [lambda x:i*x for i in range(4)]print([m(2) for m in num()])
    [6, 6, 6, 6]
    原因:只有到需要計算i的值時,才會真正計算i的值

    類似的題目:

    flist = []
    for i in range(3):def foo(x):print(x + i)flist.append(foo)for f in flist:f(2)
    4
    4
    4
    原因:只有到需要計算i的值時,才會真正去算i的值。

轉載于:https://www.cnblogs.com/plf-Jack/p/11093713.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448618.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448618.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448618.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenCL的安裝與配置

Windows 步驟 1&#xff1a;在 http://developer.amd.com/pages/default.aspx根據相應的操作系統&#xff0c;下載最新的 AMD driver&#xff0c; AMD APP SDK。AMD APP SDK目前支持Windows VISTA[32][64]bit&#xff0c;Windows 7[32][64]bit操作系統。 步驟 2:如果已經安裝了…

解決:java.lang.IllegalStateException: ApplicationEventMulticaster not initialized

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. springboot 項目啟動時報錯&#xff1a; java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call …

李洋瘋狂C語言之求素數的方法

今天課上李洋老師講到求素數時&#xff0c;講了一種新的方法&#xff0c;一開始聽得我一臉懵逼&#xff0c;但當我理解的時候&#xff0c;眼前一亮&#xff0c;老師的算法省去了不少步驟&#xff0c;話不多說&#xff0c;附上題目&#xff1a;求100到200之間的素數。 輸入&…

面試官問我:平常如何對你的 Java 程序進行調優?

閱讀本文大概需要 10 分鐘。作者&#xff1a;張俊城, 郭理勇, 劉建來源&#xff1a;http://t.cn/AiCTERJzJava 應用性能優化是一個老生常談的話題&#xff0c;典型的性能問題如頁面響應慢、接口超時&#xff0c;服務器負載高、并發數低&#xff0c;數據庫頻繁死鎖等。尤其是在“…

c語言—變量

變量 存儲類型auto register static extern 變量在內存空間中的首地址&#xff0c;稱為變量的地址。 變量的定義形式&#xff1a;<存儲類型> <數據類型> <變量名> 存儲類型&#xff1a;auto register static extern auto (不寫默認是auto)局部變量auto 變量的…

李洋瘋狂C語言之關于自增自減遇到的一些問題

今天講到自增的時候&#xff0c;遇到個難點&#xff0c;單個的自增自減運算還是挺簡單的&#xff0c;但是如果是多個自增自減&#xff0c;就會變得比較麻煩&#xff0c;在windows環境和Linux環境中也會得到不一樣的結果&#xff0c;windows中比較簡單&#xff0c;他會將所有前綴…

Servlet的入門

什么是Servlet? Servlet是運行在服務端的java小程序,是sun公司提供的一套規范,用來處理客戶端請求.響應給瀏覽器的動態資源.Servlet是JavaWeb三大組件之一(Setvlet.Filter.Listener),且最重要. Servlet的作用? 用來處理從客戶端發送過來的請求,并對該請求做出響應. Servlet的…

快速部署ldap服務

快速部署ldap服務 作者&#xff1a;尹正杰 版權聲明&#xff1a;原創作品&#xff0c;謝絕轉載&#xff01;否則將追究法律責任。 一.LDAP概述 1.什么是目錄服務(1)目錄是一類為了瀏覽和搜索數據二十幾的特殊的數據庫&#xff0c;例如&#xff1a;最知名的的微軟公司的活動目錄…

expected at least 1 bean which qualifies as autowire candidate. Dependency a...

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 啟動 sringboot 項目報錯&#xff1a; expected at least 1 bean which qualifies as autowire candidate for this dependency. 原因…

李洋瘋狂C語言之break和continue的區別

1、break (1) 只能在循環體內和switch語句體內使用break語句。 (2) 當break出現在循環體中的switch語句體內時&#xff0c;其作用只是跳出該switch語句體。 (3) 當break出現在循環體中&#xff0c;但并不在switch語句體內時&#xff0c;則在執行break后&#xff0c;跳出本層…

Install OpenCL on Debian, Ubuntu and Mint orderly

Libraries – can’t have enough If you read different types of manuals how to compile OpenCL software on Linux, then you can get dizzy of all the LD-parameters. Also when installing the SDKs from AMD, Intel and NVIDIA, you get different locations for libra…

linux7 配置mysql5.7字符集編碼

linux 安裝后 mysql5.7 字符集默認是拉丁&#xff0c;不能存儲中文&#xff0c;修改步驟如下&#xff1a; 在 vim /etc/mysql/my.cnf 修改配置文件 在[mysqld] 下添加如下配置 character-set-serverutf8 init_connectSET NAMES utf8 重啟mysql服務 systemctl restart mysqld.…

解決:java.io.IOException: invalid constant type: 15

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 啟動 dubbo 服務報錯&#xff1a; java.io.IOException: invalid constant type: 15 我的情況是項目本身 是用的1.7 。而我自己用的…

liunx常用命令筆記

安裝軟件教程 linux安裝java&#xff1a;https://www.cnblogs.com/lamp01/p/8932740.html linux安裝mysql&#xff1a;https://www.cnblogs.com/daemon-/p/9009360.html linux安裝redis&#xff1a;https://blog.csdn.net/qq_30764991/article/details/81564652 linux安裝nginx…

李洋瘋狂C語言之編程實現統計某年某月份的天數

今天的題目&#xff1a;編程實現統計某年某月的天數 例如&#xff1a; 輸入&#xff1a;2017.7 輸出&#xff1a;31天 先附上我自己想的方法&#xff0c;由于幾個功能放一起太繁瑣&#xff0c;于是我想把他們分為三個函數&#xff0c;分別來實現這個功能&#xff1a; #incl…

MQ 之 RocketMQ

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 RocketMQ 是出自 A 公司的開源產品&#xff0c;用 Java 語言實現&#xff0c;在設計時參考了 Kafka&#xff0c;并做出了自己的一些改進…

好久沒敲代碼了(強行補上今天的博客。。。)

流水賬日記&#xff08;哈哈&#xff09; 今天沒課&#xff0c;早上好好的睡了個懶覺&#xff08;雖然還是很困- -&#xff09;&#xff1b; 哥幾個把昨天買的排骨洗了做了個排骨湯&#xff0c;雖然不如家里做的好吃&#xff0c;但對此時的我們來說已經是美味了&#xff0c;晚…

Ubuntu下使用AMD APP編寫OpenCL程序

對于Ubuntu或其近親&#xff08;Lubuntu、Kubuntu、Mint等&#xff09;編寫OpenCL程序也不會太難。由于本例用的是AMD APP SDK&#xff0c;因此需要AMD的GPU以及相關驅動。首先&#xff0c;去AMD官網下載GPU驅動——AMD Catalyst。如果你用的是APU并且還有一塊獨立顯卡的話&…

jdk的安裝與配置

Linux一、安裝JDK 從sun網站上直接下載JDK&#xff1a;http://java.sun.com/j2se/1.4.2/download.html提供了兩個下載j2re-1_4_2_10-linux-i586.bin 13.75 MB, j2re-1_4_2_10-linux-i586-rpm.bin 13.27 MB&#xff1a;1、RPM in self-extracting file (j2re-1_4_2_10-linux…

李洋瘋狂C語言之n個人報數,報到3的退出,最后留在場上的是原來的第幾位(約瑟夫環)

今天老師布置了個題目&#xff0c;約瑟夫環&#xff0c;俗稱猴子選大王。n個人報數&#xff0c;報到3的退出&#xff0c;最后留在場上的時原來的第幾位 #include <stdio.h>int main() {int i, n, q, p 0; //計數 i ,人數 n ,報數 p ,場上人數 qprintf ("input…