1. 程式人生 > >python面試題總結(1)

python面試題總結(1)

1、描述一下python語言

	 Python是一種程式語言,它有物件、模組、執行緒、異常處理和自動記憶體理。
它簡潔、簡單、方便、容易擴充套件,有許多自帶的資料結構,而且它開源。

2、程式設計:寫出你所瞭解的排序演算法,並且使用python實現一種

排序的方法有:
	插入排序(直接插入排序、希爾排序),
	交換排序(氣泡排序、快速排序),
	選擇排序(直接選擇排序、堆排序),
	歸併排序,分配排序(箱排序、基數排序)

直接插入排序

def insert_sort(array):
	for i in range(len(array)):
		for j in range(i):
			if array[i] < array[j]:
				array.insert(j, array.pop(i))
				break
	return array
array = [1,4,8,2]
print(insert_sort(array))

氣泡排序:

def bubble_sort(array):
    for i in range(len(array)):
        for j in range(i, len(array)):
            if array[i] > array[j]:
                array[i], array[j] = array[j], array[i]
    return array
array = [1,4,8,2]
print(bubble_sort(array))

3、程式設計:給一個字串,程式設計實現它的所有字元組合可能
Ex:‘123’:組合就有1,2,3,12,13,23,123, 12和21是一樣的,這裡不考慮順序

import itertools
list(itertools.combinations([1,2,3],1))
list(itertools.combinations([1,2,3],2))
list(itertools.combinations([1,2,3],3))

4、解釋一下MVC開發模式

MVC的具體含義是:model+view+control,即模型+檢視+控制
它們各自處理自己的任務:
(1)模型:模型持有所有的資料、狀態和程式邏輯。模型獨立於檢視和控制器。
(2)檢視:用來呈現模型。檢視通常直接從模型中取得它需要顯示的狀態與資料。
          對於相同的資訊可以有多個不同的顯示形式或檢視。
(3)控制器:位於檢視和模型中間,負責接受使用者的輸入,將輸入進行解析並反饋
			給模型,通常一個檢視具有一個控制器。

MVC模式將它們分離以提高系統的靈活性和複用性,不使用MVC模式,使用者介面設計往往
	將這些物件混在一起。MVC模式實現了模型和檢視的分離,這帶來了幾個好處。
	(1)一個模型提供不同的多個視圖表現形式,也能夠為一個模型建立新的檢視而無須重寫模型。一旦模型的資料發生變化,模型將通知有關的檢視,每個檢視相應地重新整理自己。
	(2)模型可複用。因為模型是獨立於檢視的,所以可以把一個模型獨立地移植到新的平臺工作。
	(3)提高開發效率。在開發介面顯示部分時,你僅僅需要考慮的是如何佈局一個好的使用者介面;開發模型時,你僅僅要考慮的是業務邏輯和資料維護,這樣能使開發者專注於某一方面的開發,提高開發效率。
	直接範範的說MVC適合不適合某個專案都是不準確的,所以我們在使用MVC模式的時候,要發揮其優點和長處!

5、描述一下你擅長的開發模式

所謂設計模式,就是一套被反覆使用的程式碼設計經驗的總結(情境中一個問題經過證實的一個解決方案)。
使用設計模式是為了可重用程式碼、讓程式碼更容易被他人理解、保證程式碼可靠性。
設計模式使人們可以更加簡單方便的複用成功的設計和體系結構。
將已證實的技術表述成設計模式也會使新系統開發者更加容易理解其設計思路 

- 工廠模式:工廠類可以根據條件生成不同的子類例項,這些子類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的資料進行了不同的操作(多型方法)。當得到子類的例項後,開發人員可以呼叫基類中的方法而不必考慮到底返回的是哪一個子類的例項。 
- 代理模式:給一個物件提供一個代理物件,並由代理物件控制原物件的引用。實際開發中,按照使用目的的不同,代理可以分為:遠端代理、虛擬代理、保護代理、Cache代理、防火牆代理、同步化代理、智慧引用代理。 
- 介面卡模式:把一個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起使用的類能夠一起工作。 
- 模板方法模式:提供一個抽象類,將部分邏輯以具體方法或構造器的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法(多型實現),從而實現不同的業務邏輯。 

6、說一下 left join 和 right join的區別

兩者是資料庫連線查詢裡的外連線,其中左連線是以左表為主顯示查詢結果left join,
用法格式為:select 欄位名列表 from 表1 left join 表2 on 條件..
右連線是以右表為主顯示查詢結果right join,
用法格式為:select 欄位名列表 from 表1 right join 表2 on 條件..

7、程式設計:從資料庫中獲取資料,存入‘a.txt’中

方式1.  select user,host(資料資訊) from mysql.user(表名)
			into outfile "/var/lib/mysql-files/a.txt"(檔案路徑)
			fields terminated by " : "
			lines terminated by "\n";
方式2.   
#coding=utf-8  
import MySQLdb as db  
import sys  
import codecs   

reload(sys)  
sys.setdefaultencoding('utf-8')
def connectionDB():
conn=db.connect(host='localhost',user='root',db="test",passwd=123456,port=3306,charset="utf8")  
cur = conn.cursor()

#開始的時候,在e:\get_key\中生成一個 農學_獸醫學的txt檔案
defau_subject_first = '醫學'  
defau_subject_second = '臨床醫學'  
path = 'E:\\get_key2\\' + defau_subject_first + '_' + defau_subject_second + '.txt' 

#注意,這裡路徑是e:\\get_key2\\ 主要是\是一個特殊符號,我們需要轉義  
paper_keywords1 = codecs.open(path.decode('utf-8'), 'wb',encoding="utf-8") 

#在開啟檔案的時候,為了防止出現中文亂碼的問題,用codecs.open去開啟檔案
    #把結果先放到sql裡面  
    sql = "SELECT name_chinese,subject_first ,subject_second  FROM periodical"  
    cur.execute(sql)  
    results = cur.fetchall()  
    #把結果寫到txt裡面  
    for result in results:  
    paper_keywords1.write(result[0])  

8、什麼是執行緒?(儘可能的從多方面解釋)

執行緒(Thread),有時被稱為輕量級程序(Lightweight Process,LWP),是程式執行流的最小單元。
一個標準的執行緒由執行緒ID,當前指令指標(PC),暫存器集合和堆疊組成。
另外,執行緒是程序中的一個實體,是被系統獨立排程和分派的基本單位,執行緒自己不擁有系統資源,只擁有一點兒在執行中必不可少的資源,但它可與同屬一個程序的其它執行緒共享程序所擁有的全部資源。
一個執行緒可以建立和撤消另一個執行緒,同一程序中的多個執行緒之間可以併發執行。由於執行緒之間的相互制約,致使執行緒在執行中呈現出間斷性。
執行緒也有就緒、阻塞和執行三種基本狀態。
就緒狀態是指執行緒具備執行的所有條件,邏輯上可以執行,在等待處理機;執行狀態是指執行緒佔有處理機正在執行;阻塞狀態是指執行緒在等待一個事件(如某個訊號量),邏輯上不可執行。每一個程式都至少有一個執行緒,若程式只有一個執行緒,那就是程式本身。
執行緒是程式中一個單一的順序控制流程。程序內有一個相對獨立的、可排程的執行單元,是系統獨立排程和分派CPU的基本單位指令執行時的程式的排程單位。在單個程式中同時執行多個執行緒完成不同的工作,也稱為多執行緒