新浪筆試題

  1: 有如下一段程序:

  package a.b.c;

  public class Test{

  private static int i=0;

  public int getNext(){

  return i++;

  }

  }

  package a.b.c;

  public class TestB{

  public static void main(String[] args){

  Test test=new Test();

  System.out.println(test.getNext());

  Test testObject=new Test();

  System.out.println(testObject.getNext());

  System.out.println(test.getNext());

  }

  }

  請問最後打印出來的是什麼,爲什麼?

  打印出來時0,1,2

  private static 修飾i,就表示開闢一處內存空間供該類的的所有對象共享,且該成員域只能在該類中訪問

  i與實例無關。i用於存儲創建實例的個數,i爲類的屬性而不是實例的屬性,本題中getNext()被調用了兩次,而且方法中執行的是i++操作,所以結果分別是0,1,2

  2: 有這麼一段程序:

  String a=new String("a");

  String b="b";

  String c=a+b;

  StringBuffer strBuf=new StringBuffer();

  strBuf.append("a");

  strBuf.append("b");

  String d=strBuf.toString();

  StringBuilder strBuilder=new StringBuilder();

  strBuilder.append("a");

  strBuilder.append("b");

  String e=strBuilder.toString();

  請問以上程序片段中cde的字符串的創建各有什麼不同?

  ce創建過程是一樣的都是採用了StringBuilder

  d採用了StringBuffer

  3: 描敘下final, finally, finalize的區別

  final—修飾符(關鍵字)如果一個類被聲明爲final,意味着它不能再派生出新的子類,不能作爲父類被繼承。因此一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲final,可以保證它們在使用中不被改變。被聲明爲final的變量必須在聲明時給定 初值,而在以後的引用中只能讀取,不可修改。被聲明爲final的方法也同樣只能使用,不能重載

  finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally (如果有的話)

  finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。

  4: 現有以下數據表結構,請按要求寫出SQL語句

  購物人 商品名稱 數量

  甲 2

  乙 4

  丙 1

  丁 2

  丙 5

  查出所有購入商品爲兩種或兩種以上的購物人記錄

  select 購物人 as 顧客,count(商品名稱) as 商品種類數 from 表 group by 購物人 having count(商品名稱)>=2

  6: 描敘下TCP協議三次握手過程

  在TCP/IP協議中,TCP協議提供可靠的連接服務,採用三次握手建立一個連接。

  第一次握手:建立連接時,客戶端發送syn(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;

  第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

  第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。

  完成三次握手,客戶端與服務器開始傳送數據,在上述過程中,還有一些重要的概念:

  未連接隊列:在三次握手協議中,服務器維護一個未連接隊列,該隊列爲每個客戶端的SYN(syn=j)開設一個條目,該條目表明服務器已收到SYN 包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連接在服務器處於Syn_RECV狀態,當服務器收到客戶的確認包時,刪除該條目,服務器 進入ESTABLISHED狀態。

  Backlog參數:表示未連接隊列的最大容納數目。

  SYN-ACK 重傳次數 服務器發送完SYN-ACK包,如果未收到客戶確認包,服務器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定 的最大重傳次數,系統將該連接信息從半連接隊列中刪除。注意,每次重傳等待的時間不一定相同。

  半連接存活時間:是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時我們也稱半連接存活時間爲Timeout時間、SYN_RECV存活時間。

  7: java/php/C++實現一個單例模式.

  public class Singleton {

  /**

  類級的內部類,也就是靜態的成員式內部類,該內部類的實例與外部類的實例

  沒有綁定關係,而且只有被調用到纔會裝載,從而實現了延遲加載

  */

  private static class SingletonHolder{

  /**

  靜態初始化器,由JVM來保證線程安全

  */

  private static Singleton instance = new Singleton();

  }

  /**

  私有化構造方法

  */

  private Singleton(){

  }

  public static Singleton getInstance(){

  return SingletonHolder.instance;

  }

  }

  

  8: 羅列你知道的排序算法,並註明他們的複雜度

  冒泡法複雜度爲O(n*n)

  直接插入排序:O(n*n)

  選擇排序:O(n*n)

  快速排序:平均時間複雜度log2(n)*n

  歸併排序:log2(n)*n

  堆排序:log2(n)*n

  9: java/php/C++實現快速排序算法

  public class QSort {

  /**

  * @param pData 需要排序的數組

  * @param left 左邊的位置,初始值爲0

  * @param right 右邊的位置,初始值爲數組長度

  */

  public static void QuickSort(int[] pData,int left,int right)

  {

  int i,j;

  int middle,temp;

  i = left;

  j = right;

  middle = pData[left];

  //一趟快速排序

  while(true)

  {

  //從第二個數開始找大於中樞的數

  while((++i)

  //從最後一個數開始找第一個小於中樞的數

  while((--j)>left && pData[j]>middle);

  if(i>=j)

  break;

  //交換兩邊找到的數

  temp = pData[i];

  pData[i] = pData[j];

  pData[j] = temp;

  }

  //交換中樞

  pData[left] = pData[j];

  pData[j] = middle;

  //遞歸快排中樞左邊的數據

  if(left

  QuickSort(pData,left,j);

  //遞歸快排中樞右邊的數據

  if(right>i)

  QuickSort(pData,i,right);

  }

  public static void main(String[] args){

  int [] pData = new int[10];

  for(int i = 0; i< 10; i++)

  pData[i] = (int)(Math.random()*100);

  for(int i = 0; i

  System.out.print(pData[i]+" ");

  System.out.println("");

  QSort.QuickSort(pData, 0, pData.length);

  System.out.println("\n***********************");

  for(int i = 0; i

  System.out.print(pData[i]+" ");

  }

  }

  10: 名詞解釋:HTML5CSSSTLMYSQL, B-tree, Fedora

  HTML5:HTML5草案的前身名爲Web Applications 1.0,於2004年被WHATWG提出,於2007年被W3C接納,併成立了新的HTML工作團隊。HTML標準自199912月發佈的 HTML 4.01後,後繼的HTML 5 和其它標準被束之高閣,爲了推動web標準化運動的發展,一些公司聯合起來,成立了一個叫做 Web Hypertext Application Technology Working Group (Web 超文本應用技術工作組 - WHATWG) 的組織,他們重新揀起 HTML 5。第一份正式草案已於2008122日公佈。HTML 5有兩大特點:首先,強化了Web網頁的表現性能。其次,追加了本地數據庫等Web應用的功能。

  CSS(Cascading Style Sheet,可譯爲層疊樣式表級聯樣式表”)是一組格式設置規則,用於控制Web頁面的外觀。通過使用CSS樣式設置頁面的格式,可將頁面的內容 與表現形式分離。頁面內容存放在HTML文檔中,而用於定義表現形式的CSS規則則存放在另一個文件中或HTML文檔的某一部分,通常爲文件頭部分。將內 容與表現形式分離,不僅可使維護站點的外觀更加容易,而且還可以使HTML文檔代碼更加簡練,縮短瀏覽器的加載時間。

  STL = Standard Template Library,標準模板庫,惠普實驗室開發的一系列軟件的統稱。它是由Alexander StepanovMeng LeeDavid R Musser在惠普實驗室工作時所開發出來的。這可能是一個歷史上最令人興奮的工具的最無聊的術語。從根本上說,STL是一些容器的集合,這些容 器list,vector,set,map等,STL也是算法和其他一些組件的集合。這裏的容器和算法的集合指的是世界上很多聰明人很多年的傑 作。STL的目的是標準化組件,這樣就不用重新開發,可以使用現成的組件。STL現在是C++的一部分,因此不用額外安裝什麼。

  MySQL是一個小型關係型數據庫管理系統,開發者爲瑞典MySQL AB公司。在2008116號被Sun公司收購。而2016年,SUN又被Oracle收購。對於Mysql的前途,沒有任何人抱樂觀的態度。目前 MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站爲了降低網 站總體擁有成本而選擇了MySQL作爲網站數據庫。

  B-tree(多路搜索樹,並不是二叉的)是一種常見的數據結構。使用B-tree結構可以顯著減少定位記錄時所經歷的中間過程,從而加快存取速度。按照翻譯,B 通常認爲是Balance的簡稱.這個數據結構一般用於數據庫的索引,綜合效率較高。

  Fedora 是一個開放的、創新的、前瞻性的操作系統和平臺,基於 Linux。它允許任何人自由地使用、修改和重發布,無論現在還是將來。它由一個強大的社羣開發,這個社羣的成員以自己的不懈努力,提供並維護自由、開放 源碼的軟件和開放的標準。Fedora 項目由 Fedora 基金會管理和控制,得到了 Red Hat, Inc. 的支持。Fedora 是一個獨立的操作系統,是Linux的一個發行版,可運行的體系結構包括 x86(i386-i686), x86_64 和 PowerPC

  11: linux下,需要每天凌晨4:30把 /abc目錄下的文件歸檔並壓縮爲back20150615.tar.gz,描敘shell實現方式。

  由超級用戶登錄,用crontab執行

  crontab -e

 由“名企筆試題庫”收集整理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章