⑴ 面試題:你為什麼選擇python
為什麼Python比MATLAB、R語言好呢?
其實,這三種語言都很多數據分析師在用,但更推薦python,主要是有以下幾點:
1、python易學、易讀、易維護,處理速度也比R語言要快,無需把資料庫切割;
2、python勢頭猛,眾多大公司需要,市場前景廣闊;而MATLAB語言比較局限,專注於工程和科學計算方面,而且MATLAB價格貴,免費版或盜版都只能玩玩學慣用;
3、python具有豐富的擴展庫,這個是其他兩個不能比的;
python版本選擇
初學者版本選擇是很多人都會問的,我們也不會偏向某個版本,主要根據自己的所需,但建議是選擇最新版本Python3.x,這樣很多新功能和舊功能都會有的,但是目前很多第三方庫仍然不支持Python3,因為Python2.x已經停止繼續開發,不意味著不能使用。
⑵ python習題(演算法)
這個就是循環2n次呀。先是讓x=x+c,在把c更新一下c=c+b,最後讓b=b+a,這就完成一次循環了。
不過你給的程序不完整。
⑶ Python後端工程師面試題目有哪些
1. 我從來不問google可獲得的答案的問題, 只是問問面試者「在過去的工作中,遇到的Ta認為最有成就感的一件事情是什麼」和「如果出現了一個google不到的問題,你會怎麼解決」這樣的問題。
2. 我從來不問操作系統等和Python無關的話題,首先是我不怎麼問和工作太無關的話題,有些東西用不到很多就被會遺忘,挑起來這種問題其實挺無聊;其次我是非計算機專業畢業,問的東西說不定我自己都沒有把握,那就不出來獻丑了。我只關注面試者的學習能力和解決問題的方式,說白了,是不是就是看他是不是「聰明的人」。
3. 不問面試者的短處。我在自己被面試的時候有過這種精力,面試者問他擅長的內容,我不一定搞的定,如果反過來面試Ta,我也會滅掉Ta。所以我會盡力尋找面試者的優勢和優點,尤其是對方已經明確承認。其實很多經驗和能力,只是需要一個機會和環境,所以我不想放過任何一個合適的人。
4. 面試者不會Python也沒有關系。面試者的主動性和學習能力覺得更重要,如果他在其他領域能證明做的不錯或者能讓我感覺到這個一個未來有潛質成為優秀工程師的人,不會Python沒有關系。 嗯目前看來,我沒有看錯過。
5. 我從來不問Python語法這種看書和google就能學會的問題,我只想了解Ta是否願意去學。舉個例子,我會讓面試者「講講日常開發中都用到了那些Python內置的模塊」,原因在我的專欄「Python之美 - 知乎專欄」的 Python不能不知的模塊 - Python之美 - 知乎專欄中有寫,基本上說完我就能評估出他的能力和風格,繼而就是再問一些問題去驗證我的評估是不是准確。
6. 最後,我一般都會和面試者細聊一個Ta認為在過去的工作或者自己開源的項目中最熟悉的一個,從項目設計、踩過的坑兒、開發周期以及如何安排、如何確定需求、如何和其他人協作等方面,最後評估下Ta是否能很容易的融入到我們現在的團隊,大家是否可以接受Ta,對工作不負責的、沒有用心工作的、沒有團隊意識的、溝通能力有缺陷的就放棄掉,對性格上容易發生沖突的、不適合團隊合作的我就得考慮下,未來也會如實反饋給HR。
⑷ python題:
1. 歐幾里德演算法
歐幾里德演算法又稱輾轉相除法, 用於計算兩個整數a, b的最大公約數。其計算原理依賴於下面的定理:
定理: gcd(a, b) = gcd(b, a mod b)
證明:
a可以表示成a = kb + r, 則r = a mod b
假設d是a, b的一個公約數, 則有 d|a, d|b, 而r = a - kb, 因此d|r。
因此,d是(b, a mod b)的公約數。
加上d是(b,a mod b)的公約數,則d|b, d|r, 但是a = kb + r,因此d也是(a, b)的公約數。
因此,(a, b) 和(a, a mod b)的公約數是一樣的,其最大公約數也必然相等,得證。
歐幾里德的Python語言描述為:
1
2
3
4
5
6
7
8
9
10
def gcd(a, b):
if a < b:
a, b = b, a
while b != 0:
temp = a % b
a = b
b = temp
return a
2. Stein演算法
歐幾里德演算法是計算兩個數最大公約數的傳統演算法,無論是理論,還是從效率上都是很好的。但是他有一個致命的缺陷,這個缺陷只有在很大的素數時才會顯現出來。
考慮現在的硬體平台,一般整數最多也就是64位, 對於這樣的整數,計算兩個數值就的模很簡單的。對於字長為32位的平台,計算兩個不超過32位的整數的模,只需要一個指令周期,而計算64位以下的整數模,也不過幾個周期而已。但是對於更大的素數,這樣的計算過程就不得不由用戶來設計,為了計算兩個超過64位的整數的模,用戶也許不得不採用類似於多位除法手算過程中的試商法,這個過程不但復雜,而且消耗了很多CPU時間。對於現代密碼演算法,要求計算128位以上的素數的情況比比皆是,設計這樣的程序迫切希望能夠拋棄除法和取模。
Stein演算法由J.Stein 1961年提出,這個方法也是計算兩個數的最大公約數。和歐幾里德演算法不同的是,Stein演算法只有整數的移位和加減法,這對於程序設計者是一個福音。
為了說明Stein演算法的正確性,首先必須注意到以下結論:
gcd(a, a) = a, 也就是一個數和他自己的公約數是其自身。
gcd(ka, kb) = k * gcd(a, b),也就是最大公約數運算和倍乘運算可以交換,特殊的,當k=2時,說明兩個偶數的最大公約數比如能被2整除。
Stein演算法的python實現如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
def gcd_Stein(a, b):
if a < b:
a, b = b, a
if (0 == b):
return a
if a % 2 == 0 and b % 2 == 0:
return 2 * gcd_Stein(a/2, b/2)
if a % 2 == 0:
return gcd_Stein(a / 2, b)
if b % 2 == 0:
return gcd_Stein(a, b / 2)
return gcd_Stein((a + b) / 2, (a - b) / 2)
3. 一般求解實現
核心代碼很簡單:
1
2
3
def gcd(a, b):
if b == 0:return a
return gcd(b, a % b)
附上一個用Python實現求最大公約數同時判斷是否是素數的一般方法:
程序如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env python
def showMaxFactor(num):
count = num / 2
while count > 1:
if num % count == 0:
print 'largest factor of %d is %d' % (num, count)
break #break跳出時會跳出下面的else語句
count -= 1
else:
print num, "is prime"
for eachNum in range(10,21):
showMaxFactor(eachNum)
輸出如下:
1
2
3
4
5
6
7
8
9
10
11
largest factor of 10 is 5
11 is prime
largest factor of 12 is 6
13 is prime
largest factor of 14 is 7
largest factor of 15 is 5
largest factor of 16 is 8
17 is prime
largest factor of 18 is 9
19 is prime
largest factor of 20 is 10
⑸ python面試必備題目有哪些
Q:你做一個自我介紹吧?
旁白:其實遇到好幾家面試官都讓我做自我介紹了,該如何自我介紹陽哥估計都會背了,好玩(惡心)的是在萬達信息面試,面試了3個技術官,每個人都分別讓我做了自我介紹,尼瑪,他們3個就不會溝通一下要問我啥嗎,一個問題至於問我3遍嗎~:funk:陽哥是敢怒不敢言,畢竟在人家的地盤。
PS:自我介紹的內容就不說了,每個人都是獨特的,我就跟大家說一下應該如何自我介紹吧。
一個優良的自我介紹會給面試官留下深刻的印象,大部分情況下,所謂的面試好壞其實看的就是你給面試官留下的印象怎麼樣了,我們用俗語叫感覺。
自我介紹應該分以下幾個部分,按照一定的邏輯連貫起來。如果連貫不起來,或者不夠熟練一定在台下多背幾遍,多講幾遍,但是面試的時候不要說的跟背過似的,高境界就是讓面試官感覺你是臨場發揮的,卻又比背的都好。
1)個人基本信息(姓名、年齡、老家、居住地等)
2)自己來自哪裡(工作地點),是干什麼的(給自己一個清晰的定位,比如:我是一名Android開發工程師),擔任過什麼職務、做過什麼樣的項目
3)自己為何來貴公司面試
4)最後祝願(希望能得到貴公司的認可等等,不用太多,一兩句話就ok)
Q:介紹一下你做過的項目吧?
PS:黑馬那麼多項目,隨便准備3個就ok了。
介紹項目大概的思路如下:
1)這個項目是干什麼的(比如是一個類似網易新聞的地方新聞客戶端,或者類似美團的o2o,或者類似豌豆莢的一個應用市場,或者類似淘寶的購物平台)?解釋就是拿一個市場上耳熟能詳的應用跟自己的應用做類比,省的面試官聽的雲里霧里的。
2)自己負責了哪些模塊(功能)的職責(比如負責系統的架構,核心代碼的編寫,xx功能模塊的開發等等)
3)自己在這個項目中擔當的責任(比如,這個項目是自己獨立開發的,這個項目是和另外一個同事一起架構一起開發的,這個項目是自己負責了幾個核心模塊)
4)項目中都用到了哪些技術
5)從項目中學到了哪些東西(可以從技術方向和業務兩個方向入手)
旁白:面試官問的很多技術性問題跟之前問的都大同小異,因此這里只給出有特色且技術含量高的。陽哥正在寫面試寶典,該寶典核心內容針對的還是技術問題,陽哥會從javase基礎到javase高級,從Android基礎到Android高級以及到Android項目依次展開分析,其次也會寫一些常見的非技術性問題,敬請期待~
Q:①在Listview的優化中,我們為何使用ConvertView?②為何使用ViewHolder?③你認為哪個更能解決問題?④你認為view.inflate和view.findviewById哪個更耗時,為什麼?⑤如果這兩個AP讓你重新寫,你怎麼寫?
PS:上面的問題,陽哥認為是面試以來遇到很難的一個,也是很有技術含量的一道題。前一半問題還好回答,最後一個問題真的需要發揮想像了。
A:①使用ConvertView可以實現對view的復用,這樣大大節約了每次創建對象的時間,提升了ListView的顯示效率。②使用ViewHolder作為內部類,可以將view的子控制項封裝在ViewHolder類中,然後通過View.setTag(ViewHolder)將view和ViewHolder進行綁定,這樣我們就不用每次都調用view的findViewById(id)方法來查找控制項。③使用ConvertView解決了一大部分問題,使用ViewHolder實現了控制項換時間的問題,因為給View對象設置一個Tag本身就是佔用內存的,因此ViewHolder的使用還是需要區分不同的應用場景的, 沒有絕對的好與不好。如果內存足夠需要高效則ViewHolder建議使用,否則不建議使用。④當然是view.inflate耗時,這個函數完成的功能是把xml布局文件通過pullParser的形式給解析到內存中,需要io,需要遞歸子節點。⑤我其實還不太相信我寫出來的代碼比Google官方寫的好,如果讓我寫的話我可能會這樣考慮,當用戶在使用view.inflate的時候將多個id作為數組添加到形參中,這樣在初始化view的使用我就可以給這個view直接調用setTag方法綁定需要的子控制項。不過這個原生方法其實也應該保留共不同的需求使用。
PS:技術面試時間並不長,我回答了幾個之後,他們兩個大眼瞪小眼,A看看B問:你還有什麼問的嗎?B說我沒有,你還有嗎?A說我也沒了。那行,接下來,他們就讓我等人事了。
⑹ python面試,一般都問什麼問題
下面是一些關鍵點:
Python是一種解釋型語言。這就是說,與C語言和C的衍生語言不同,Python代碼在運行之前不需要編譯。其他解釋型語言還包括PHP和Ruby。
Python是動態類型語言,指的是你在聲明變數時,不需要說明變數的類型。你可以直接編寫類似x=111和x="I'm a string"這樣的代碼,程序不會報錯。
Python非常適合面向對象的編程(OOP),因為它支持通過組合(composition)與繼承(inheritance)的方式定義類(class)。Python中沒有訪問說明符(access specifier,類似C++中的public和private),這么設計的依據是「大家都是成年人了」。
在Python語言中,函數是第一類對象(first-class objects)。這指的是它們可以被指定給變數,函數既能返回函數類型,也可以接受函數作為輸入。類(class)也是第一類對象。
Python代碼編寫快,但是運行速度比編譯語言通常要慢。好在Python允許加入基於C語言編寫的擴展,因此我們能夠優化代碼,消除瓶頸,這點通常是可以實現的。numpy就是一個很好地例子,它的運行速度真的非常快,因為很多算術運算其實並不是通過Python實現的。
Python用途非常廣泛——網路應用,自動化,科學建模,大數據應用,等等。它也常被用作「膠水語言」,幫助其他語言和組件改善運行狀況。
Python讓困難的事情變得容易,因此程序員可以專注於演算法和數據結構的設計,而不用處理底層的細節。
⑺ Python筆試題,求大神解答
以下是我給你的一些建議:(有多種方法可實現,包括最新的f'')
一:(可以使用join)
a=[(14.58,120.972),(14.58344,120.9723)]#初始化列表a
print(a)#輸出a列表便於對比
b=[','.join('({:.6f},{:.6f})'.format(*b)forbina)]#格式化a列表
print(b)#輸出格式化後的列表
或:(因剛剛手工沒測試,上機後發現列表帶有''號,上面代碼可以嘗試改成這樣)
a=[(14.58,120.972),(14.58344,120.9723)]#初始化列表a
print(a)#輸出a列表便於對比
b="[%s]"%','.join('({:.6f},{:.6f})'.format(*b)forbina)#格式化a列表
print(b)#輸出格式化後的列表
二:(使用官方3.6新增的格式化功能)
a=[(14.58,120.972),(14.58344,120.9723)]#初始化列表a
print(a)#輸出a列表便於對比
(x,y),(i,k)=a#解包
#對包進行格式化操作
x=f'{a[0][0]:.6f}'
y=f'{a[0][1]:.6f}'
i=f'{a[1][0]:.6f}'
k=f'{a[1][1]:.6f}'
#輸出
print([(x,y),(i,k)])
或:(因剛剛手工沒測試,上機後發現列表帶有''號,上面代碼可以嘗試改成這樣)
a=[(14.58,120.972),(14.58344,120.9723)]#初始化列表a
print(a)#輸出列表a,方便對比
#格式化列表a
a=f'[({a[0][0]:.6f},{a[0][1]:.6f}),({a[1][0]:.6f},{a[1][1]:.6f})]'
#輸出格式後的列表a
print(a)
註:
個人建議使用format或f''代替%進行格式化操作。官方推薦用f-格式化。
為什麼呢?
舉個例子:(以下代碼在python在可運行正常)
name="run24pro"
print("mynameis%s"%name)
但如果改成這樣:
name=(1,2,3)
print("mynameis%s"%name)
運行的時候將會返回一個類型錯誤。而以下代碼將不會。
name=(1,2,3)
print("mynameis{}".format(name))
name=(1,2,3)
print(f'"mynameis{name}"')
還有一點,新增的功能f-格式化是所有中最快的。
附:官方3.6新增的格式化功能供你參考
網頁鏈接
參考:
PEP 498 -- Literal String Inte Python 3.6中新的f-strings
純手工,如果對你有幫助望採納!
⑻ 在main方法中,驗證鏈表方法時傳入什麼參數去驗證這個方法是否正確
如果你在尋找python工作,那你的面試可能會涉及Python相關的問題。
通過對網路資料的收集整理,本文列出了100道python的面試題以及答案,你可以根據需求閱讀測試。
⑼ python 經典面試題有哪些
所說所有的變數都是對象。 對象在python里,其實是一個指針,指向一個數據結構,數據結構里有屬性,有方法。對象通常就是指變數。從面向對象OO的概念來講,對象是類的一個實例。在python里很簡單,對象就是變數。class A:myname="class a"上面就是一個類。不是對象a=A()這里變數a就是一個對象。它有一個屬性(類屬性),myname,你可以顯示出來print a.myname所以,你看到一個變數後面跟點一個小數點。那麼小數點後面