天天看點

雜七雜八的面試概念

1,c語言中記憶體配置設定與釋放的函數,并指出他們的差別。

c語言中标準的記憶體配置設定函數:malloc,calloc,realloc,free

malloc 調用形式為:(類型*)malloc(size):在記憶體的存儲區中調用一塊長度為size位元組的連續區域,并傳回首位址。

calloc調用形式為:(類型*)calloc(n,size):在記憶體的存儲區中配置設定n塊長度為size位元組的連續區域,傳回首位址。

realloc調用形式為:(類型*)realloc(*ptr,size): 将ptr記憶體大小增大到size。

malloc與calloc的另一個主要差別是後者在傳回指向記憶體的指針之前把它初始化為0,而malloc并沒有以任何方式進行初始化。

另外c++中 new / delete 函數是記憶體配置設定和釋放函數。

2,寫出socket 函數,并指出其功能。

 socket()  建立socket通信描述符。

  bind() 将套接字和機器一定的端口關聯。

  connect() 連接配接遠端主機。

  listen()  使套接字做好連接配接準備,規定等待服務請求隊列的長度

  accept() 接受連接配接,一旦有用戶端發出連接配接,accept傳回客戶位址資訊和一個新的socket

  send() 和 recv() 用于流式套接字或者資料套接字的通訊

  sendto()  和 recvfrom()  用于無連接配接的資料報套接字。

  close() 關閉套接字

  shutdown()  選擇性的關閉套接字,可以隻允許某一個方向通訊關閉

  getpeername() 傳回流式套接字時對端 peer資訊

  gethostname()  傳回程式所運作的機器的主機名字

  gethostbyname()  傳回 本機ip

Session和Cache的差別

以前實作資料的緩存有很多種方法,有用戶端的Cookie,有伺服器端的Session和Application。其中Cookie是儲存在用戶端的一組資料,主要用來儲存使用者名等個人資訊。Session則儲存對話資訊。Application則是儲存在整個應用程式範圍内的資訊,相當于全局變量。通常使用最頻繁的是Session,那麼Session和Cache又有什麼差別呢?

(1)最大的差別是Cache提供緩存依賴來更新資料,而Session隻能依靠定義的緩存時間來判斷緩存資料是否有效。

(2)即使應用程式終止,隻要Cache.Add方法中定義的緩存時間未過期,下次開啟應用程式時,緩存的資料依然存在。而Session緩存隻是存在于一次會話中,會話結束後,資料也就失效了。

(3)Session容易丢失,導緻資料的不确定性,而Cache不會出現這種情況。

(4)由于Session是每次會話就被加載,是以不适宜存放大量資訊,否則會導緻伺服器的性能降低。而Cache則主要用來儲存大容量資訊,如資料庫中的多個表。

(5)VS2005的測試版提供了将緩存儲存在硬碟上的參數,但正式版中取消了這個功能,估計其在以後版本中會重新實作。而Session目前隻能儲存在記憶體中,對其性能有影響。

4, session 的配置和存儲方方式

Session又稱為會話狀态,是Web系統中最常用的狀态,用于維護和目前浏覽器執行個體相關的一些資訊。我們控制使用者去權限中經常用到Session來存儲使用者狀态,這篇文章會講下Session的存儲方式、在web.config中如何配置Session、Session的生命周期等内容。

     Session的存儲方式。

  session其實分為用戶端Session和伺服器端Session。

  當使用者首次與Web伺服器建立連接配接的時候,伺服器會給使用者分發一個 SessionID作為辨別。SessionID是一個由24個字元組成的随機字元串。使用者每次送出頁面,浏覽器都會把這個SessionID包含在 HTTP頭中送出給Web伺服器,這樣Web伺服器就能區分目前請求頁面的是哪一個用戶端。這個SessionID就是儲存在用戶端的,屬于用戶端Session。

  其實用戶端Session預設是以cookie的形式來存儲的,是以當使用者禁用了cookie的話,伺服器端就得不到SessionID。這時我們可以使用url的方式來存儲用戶端Session。也就是将SessionID直接寫在了url中,當然這種方法不常用。

  我們大多數提到的Session都是指伺服器端Session。他有三種存儲方式(自定義存儲在這裡不做讨論):

  1.1儲存在IIS程序中:

  儲存在IIS程序中是指把Session資料儲存在IIS的運作的程序中,也就是inetinfo.exe這個程序中,這也是預設的Session的存方式,也是最常用的。

  這種方式的優點是簡單,性能最高。但是當重新開機IIS伺服器時Session丢失。

  1.2.儲存在StateServer上

  這種存儲模式是指将Session資料存儲在一個稱為Asp.Net狀态服務程序中,該程序獨立于Asp.Net輔助程序或IIS應用程式池的單獨程序,使用此模式可以確定在重新啟動Web應用程式時保留會話狀态,并使會話狀态可以用于網絡中的多個Web伺服器。 

  1.3.儲存在SQL Server資料庫中

  可以配置把Session資料存儲到SQL Server資料庫中,為了進行這樣的配置,程式員首先需要準備SQL Server資料伺服器,然後在運作.NET自帶安裝工具安裝狀态資料庫。

  這種方式在伺服器挂掉重新開機後都還在,因為他存儲在記憶體和磁盤中。

  下面是這三種方式的比較:

InProc

StateServer

SQLServer

存儲實體位置

IIS程序(記憶體)

Windows服務程序(記憶體)

SQLServer資料庫(磁盤)

存儲類型限制

無限制

可以序列化的類型

存儲大小限制

使用範圍

目前請求上下文,對于每個使用者獨立

生命周期

第一次通路網站的時候建立Session逾時後銷毀

優點

性能比較高

Session不依賴Web伺服器,不容易丢失

缺點

容易丢失

序列化與反序列化消耗CPU資源

序列化與反序列化消耗CPU資源,從磁盤讀取Session比較慢

使用原則

不要存放大量資料

 gets函數存在的問題,由于gets函數 是從stdin中讀到end-of-file或換行符時将停止讀取,并且丢掉換行符,在最後添加null 。沒有檢測buffer的大小,出現記憶體越界的安全性問題。

本文轉自NewPanderKing51CTO部落格,原文連結:http://www.cnblogs.com/newpanderking/p/3780988.html ,如需轉載請自行聯系原作者