javaWeb面試題

1、二叉樹的中序遍歷:

棧與遞歸~

①遞歸遍歷

②非遞歸遍歷

void InOrder(Bitree root)
{
   if(root)
  {
      Visit(root -> data);
      PreOrder(root -> LChild);
      PreOrder(root -> RChild);
  }
}
</pre><pre class="cpp" name="code"><strong><span style="color:#ff0000;"><span><span style="color:#000000;">

void InOrder(Bitree root)
{
     SeqStack *s;
     Bitree p;
     InitStack(S );
     p = root;
     while(p != NULL || !IsEmpty(S)) //從根開始,若當前節點存在或棧不爲空,重複以下操作
     {
            if(P != NULL)           //若當前節點存在,則當前節點入棧,並進入其左子樹
            {
                 push(S,p);
                 p = p -> LChild;
            }
             else                  //若當前節點不存在,則退棧並訪問出棧節點,然後進入右子樹
            {
                 Pop(S, &p);
                 Visit(p -> data);
                 p = p -> RChild;
            }
     }
}
<strong><span style="color:#ff0000;"><span>
</span></span></strong>

2、冒泡排序;

時間複雜度:   最好情況下(序列爲順序):O(n);   最壞情況下(序列爲逆序):O(n²)

空間複雜度:   O(1)

穩定性:          穩定

<strong><span style="color:#000000;">void BubbleSort(int a[], int n)
{ 
       int flag = 1;
       int temp = 0;
       for(int i = 0; i < n && flag; i++)
      {
          flag = 0;
           for(int j = n-1; j < n - i; j--)
             if(a[j] > a[j-1])
             {
                  temp = a[j];
                  a[j] = a[j-1];
                  a[j - 1] = temp;
                  flag = 1;
             }

      }
}
3、順序表與鏈表的區別
 ①基於存儲:順序表存儲空間連續;鏈表在內存中分散
②基於運算:順序表易於查找;鏈表易於插入和刪除;
③基於環境;順序表的實現基於數組; 鏈表的實現基於指針;
5、“==” 與equals()的區別;
①“==”是一個操作符,而equals是String類的一個方法</p><p>
②對於基本類型的比較,“==”比較基本類型的值</p><p>③對於引用類型來講:“==” 比較的是對象地址;而“equals”比較的是對象內容比如 </p><pre class="cpp" name="code">
</pre><pre class="cpp" name="code">
String s1 = new String(str);
String s2 = new String(str);
System.out .println(s1 == s2);
//返回false
//因爲創建了兩個對象,其內存地址不一樣

而equals就複雜一點兒了

首先equals()方法是在Java.lang.Object類中聲明的。因爲Java中所有的類(當然Object自己除外)都繼承於Object,所以所有的類中都有equals()這個方法

Object類中equals的實現如下:

public boolean equals(Object obj)
{
        return(this == obj);
}

此時仍然使用==進行內存的比較

但是Java中的很多類都重寫了這個方法,比如String類:

public boolean equals(Object anObject) {
if (this == anObject) {
     return true;
}
if (anObject instanceof String) {
     String anotherString = (String)anObject;
     int n = count;
     if (n == anotherString.count) {
  char v1[] = value;
  char v2[] = anotherString.value;
  int i = offset;
  int j = anotherString.offset;
  while (n-- != 0) {
      if (v1[i++] != v2[j++])
   return false;
  }
  return true;
     }
}
return false;
    }

String裏的方法,如果==號比較不相等,還會進行一下值的比較。
所以equals方法具體的作用要看當前的那個類是如何實現重寫父類中該方法的。如果沒有重寫該方法,那麼他和==號等價。

6、Spring的作用(兩大特性、Bean的注入方式)

SpringIoc(控制反轉和依賴注入)

     控制反轉:就是由容器控制程序之間的(依賴)關係,而非傳統實現中,由程序代碼直接操控   

     依賴注入:組件之間的依賴關係由容器在運行期決定 ,由容器動態的將某種依賴關係注入到組件之中 。

      使用Spring的第二個好處(AOP應用): 

         事務的處理: 

   在以往的JDBCTemplate中事務提交成功,異常處理都是通過Try/Catch 來完成,而在Spring中。Spring容器集成了TransactionTemplate,封裝了所有對事務處理的功能,包括異常時事務回滾,操作成功時數據提交等複雜業務功能。這都是由Spring容器來管理,大大減少了程序員的代碼量,也對事務有了很好的管理控制。Hibernate中也有對事務的管理,hibernate中事務管理是通過SessionFactory創建和維護Session來完成。而SpringSessionFactory配置也進行了整合,不需要在通過hibernate.cfg.xml來對SessionaFactory進行設定。這樣的話就可以很好的利用Sping對事務管理強大功能。避免了每次對數據操作都要現獲得Session實例來啓動事務/提交/回滾事務還有繁瑣的Try/Catch操作。這些也就是Spring中的AOP(面向切面編程)機制很好的應用。一方面使開發業務邏輯更清晰、專業分工更加容易進行。另一方面就是應用Spirng  AOP隔離降低了程序的耦合性使我們可以在不同的應用中將各個切面結合起來使用大大提高了代碼重用度

7、structs的基本業務流程圖;


8、oracle建表的語句;

9、事務的特性: ACDI

原子性(Atomic)、   日誌  只有事務中的所有操作都成功的時候,纔算整個事務成功;若不成功,應回滾至前一狀態

一致性(Consistency)、日誌    例如銀行的轉賬系統,不管事務成功與否,轉賬前後兩賬戶總額應該相同

隔離性(Isolation)、鎖機制      併發環境下不同事務操作相同的數據空間時,每個事物應具有各自獨立的事務空間

持久性(Durability)、日誌   事務成功後,即使系統崩潰,重新啓動數據庫系統,也會保持事務操作成功的那個狀態


發佈了26 篇原創文章 · 獲贊 8 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章