早上不到一個小時的面試。大概題目做下記錄,算做一次學習。
介紹自己。(需要想一個好點的介紹,起碼能說個一分鐘,不能冷場了。讓面試官有個好的印象)
現在進入正題。
Q1.c/c++中內存分配方式和區別(基礎)。
1) 從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。例如全局變量,static 變量。
2) 在棧上創建。在執行函數時,函數內局部變量的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置於處理器的指令集。
3) 從堆上分配,亦稱動態內存分配。程序在運行的時候用malloc 或new 申請任意多少的內存,程序員自己負責在何時用free 或delete 釋放內存。動態內存的生存期由程序員決定,使用非常靈活,但問題也最多。
細想一下就是“統計文本中某個字符串出現的次數”
一開始想到的是,單詞分割然後遍歷計數,這樣空間複雜度大。想想可以通過一行一行讀取,對每一行匹配目標字符串,統計次數。
Q3.函數void function(int ,char,long){}內存分配結構。棧的結構。對齊問題呢?
常見基本類型的字節大小
32位操作系統
char :1個字節(固定)
*(即指針變量): 4個字節(32位機的尋址空間是4個字節。同理64位編譯器)(變化*)
short int : 2個字節(固定)
int: 4個字節(固定)
unsigned int : 4個字節(固定)
float: 4個字節(固定)
double: 8個字節(固定)
long: 4個字節
unsigned long: 4個字節(變化*,其實就是尋址控件的地址長度數值)
long long: 8個字節(固定)
64位操作系統
char :1個字節(固定)
*(即指針變量): 8個字節
short int : 2個字節(固定)
int: 4個字節(固定)
unsigned int : 4個字節(固定)
float: 4個字節(固定)
double: 8個字節(固定)
long: 8個字節
unsigned long: 8個字節(變化*其實就是尋址控件的地址長度數值)
long long: 8個字節(固定)Q4.sql的幾種join
inner join默認的,根據匹配條件查找記錄
A left join B,A中是全匹配,B中有對應的就填寫,沒有就NULL
right join相反
full join是兩個表的所有記錄,對應位置爲空就設置爲NULL
實例t1: id,name & t2:id,mark,class兩個表,查找學生李三姓名,成績,班級
sql:select t1.name, t2.mark,t2.class from t1,t2 where t1.id=t1.id
Q5.baidu賬戶user表有千萬條級別的用戶賬戶記錄。字段是id,name---百度,數據庫查詢優化
根據id查找name,怎麼優化。這個是查詢優化問題。對這個題來說就是id作爲索引,根據id自己查找。要明確查找條件。避免全局掃描。儘量不用like,<=,in ,之類的。語句不復雜。根據常用查找建立索引。
Q6.socket通訊過程。API。TCP網絡通訊。參考詳細http://blog.csdn.net/heyutao007/article/details/6588302
Q7.python定義函數,怎麼定義一個全局
def 函數名稱([參數1,參數2,參數3......]): 執行語句
應該儘量避免使用全局變量。不同的模塊都可以自由的訪問全局變量,可能會導致全局變量的不可預知性。對全局變量,如果程序員甲修改了_a的值,程序員乙同時也要使用_a,這時可能導致程序中的錯誤。這種錯誤是很難發現和更正的。
全局變量降低了函數或模塊之間的通用性,不同的函數或模塊都要依賴於全局變量。同樣,全局變量降低了代碼的可讀性,閱讀者可能並不知道調用的某個變量是全局變量。
但是某些時候,全局變量能夠解決局部變量所難以解決的問題。事物要一分爲二。
python裏面全局變量有兩種靈活的用法:
1 聲明法
在文件開頭聲明全局變量variable,
在具體函數中使用該變量時,需要事先聲明 global variable,否則系統將該變量視爲局部變量。
CONSTANT = 0 (將全局變量大寫便於識別)
def modifyConstant() :
global CONSTANT
print CONSTANT
CONSTANT += 1
return
if __name__ == '__main__' :
modifyConstant()
print CONSTANT
2模塊法(推薦)
把全局變量定義在一個單獨的模塊中:
#gl.py
gl_1 = 'hello'
gl_2 = 'world'
在其它模塊中使用
#a.py
import gl
def hello_world()
print gl.gl_1, gl.gl_2
#b.py
import gl
def fun1()
gl.gl_1 = 'Hello'
gl.gl_2 = 'World'
第二種方法,適用於不同文件之間的變量共享,而且一定程度上避免了開頭所說的全局變量的弊端,推薦!
Q8.python內存管理方式--http://www.cnblogs.com/vamei/p/3232088.html
Python作爲一種動態類型的語言,其對象和引用分離。這與曾經的面向過程語言有很大的區別。爲了有效的釋放內存,Python內置了垃圾回收的支持。Python採取了一種相對簡單的垃圾回收機制,即引用計數,並因此需要解決孤立引用環的問題。Python與其它語言既有共通性,又有特別的地方。對該內存管理機制的理解,是提高Python性能的重要一步
Q9Java多線程,怎麼實現同步,關鍵詞 http://www.importnew.com/12773.html
Q10python怎麼copy一個文件到另一個文件
這個問題好搞笑,一行一行讀取寫入就好了,變量自己賦值,文件直接讀入寫入就行了。沒反應過來感覺白癡了。
Q11爬蟲怎麼抓圖片,怎麼確定圖片,絕對地址和相對地址的圖片呢? http://blog.csdn.net/longshengguoji/article/details/9946675
http://www.webjx.com/program/zonghe-14189.html、
利用python urlparse包抓取網絡圖片,根據url獲取網頁源碼,利用正則表達式過濾圖片地址,根據地址下載網絡圖片。
Q12怎麼從一個很大的文件中找到目標的內容
1、線性查找:把給定的關鍵字值與文件中的記錄逐個進行比較,直至找到與之匹配的記錄爲止。若文件中記錄數爲N,則查找一個記錄平均比較次數爲(N+1)/2。此法簡單,但效率較低。
2、對分查找:此法要求被查找的文件中記錄是按關鍵字值大小順序排列的。將文件一分爲二,把給定關鍵字值與中點的記錄比較,若匹配,則查找成功;否則判斷所要查找的記錄可能在上半部分,還是在下半部分。然後,對確定的部分繼續上述過程,直至找到要求的記錄,查找成功;或最後只剩下一個記錄仍不能匹配,查找失敗。若文件中記錄數爲N,則查到一個記錄的最多比較次數爲log2N。
3、跳步查找:先用大步跳過一部分記錄,再用較小的步長或順序查找方法在較小的範圍內找到要查找的記錄。
4、概率查找:將給定的關鍵字值按某種公式或算法估算出要查記錄的近似位置,然後再用線性查找法確定其準確位置。
5、隨機文件數據查找:對於隨機文件,如果是計算尋址結構的文件可以採用直接查找的方法,即利用關鍵字值和記錄位置之間的對應關係直接找到該記錄。如果是索引結構的文件,先用上述方法查找索引,在索引中找到相應關鍵字值後,再由索引表上對應的地址找到相應的記錄。不同查找方法的效率很不相同,這主要取決於文件結構和查詢問題的特點,查詢算法本身也是重要影響因素。
Q13測試方法,怎麼測試,測試用例
功能測試,白盒測試,性能測試,測試用例