面試題2

1java如何避免內存溢出

  及時釋放資源


"上面的代碼中,循環申請了Object對象,並添加到Vector中,然後將對象設置爲null,可是這些對象因爲被Vector引用着,因此並不能被GC回收,因此造成了內存泄漏。因此,要釋放這些對象,還需要被它們從Vector刪除,最簡單的方法就是將Vector設置爲null"

 

2 事務是什麼?單表的增刪改會產生事務嗎

  對數據庫進行crud操作時所執行的一系列操作都要保證正確的執行 保證事物的完整性

3 java反射是什麼

  通過自己發現自己的屬性和方法來構造對象

  和new的區別

4 gc是什麼

   當對象失去引用時  對對象進行回收

5 ajax get與post請求區別?

function btn_get_click() {
    var xmlHttp = window.XMLHttpRequest ? 
        new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

    var username = document.getElementById("txt_username").value;
    var age = document.getElementById("txt_age").value;

    //添加參數,以求每次訪問不同的url,以避免緩存問題
    xmlHttp.open("get", "Server.aspx?username=" + encodeURIComponent(username)
        + "&age=" + encodeURIComponent(age) + "&random=" + Math.random());

    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
            document.getElementById("result").innerHTML = xmlHttp.responseText;
        }
    }

    //發送請求,參數爲null
    xmlHttp.send(null);
}


function btn_post_click() {
    var xmlHttp = window.XMLHttpRequest ?
        new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

    var username = document.getElementById("txt_username").value;
    var age = document.getElementById("txt_age").value;
            
    var data = "username=" + encodeURIComponent(username)
        + "&age=" + encodeURIComponent(age);

    //不用擔心緩存問題
    xmlHttp.open("post", "Server.aspx", true);

    //必須設置,否則服務器端收不到參數
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
            document.getElementById("result").innerHTML = xmlHttp.responseText;
        }
    }

    //發送請求,要data數據
    xmlHttp.send(data);
}
    get請求時,需要加上隨機數,避免緩存問題

    post需要設置請求消息頭

6 閉包作用

 

Js代碼

  function f1(){

    n=999;

    function f2(){
      alert(n); // 999
    }

  }

在上面的代碼中,函數f2就被包括在函數f1內部,這時f1內部的所有局部變量,對f2都是可見的。但是反過來就不行,f2內部的局部變量,對f1 就是不可見的。這就是Javascript語言特有的“鏈式作用域”結構(chain scope),

各種專業文獻上的“閉包”(closure)定義非常抽象,很難看懂。我的理解是,閉包就是能夠讀取其他函數內部變量的函數。

由於在Javascript語言中,只有函數內部的子函數才能讀取局部變量,因此可以把閉包簡單理解成“定義在一個函數內部的函數”。

所以,在本質上,閉包就是將函數內部和函數外部連接起來的一座橋樑。

個是前面提到的可以讀取函數內部的變量,另一個就是讓這些變量的值始終保持在內存中

7 hibernate load與get區別

   在hibernate中我們知道如果要從數據庫中得到一個對象,通常有兩種方式,一種是通過session.get()方法,另一種就是通過session.load()方法,然後其實這兩種方法在獲得一個實體對象時是有區別的,在查詢性能上兩者是不同的。

  

 session = HibernateUtil.openSession();
      User user = (User)session.load(User.class, 2);
      System.out.println(user);
     使用load時會發生延遲加載

     這個user對象僅僅是一個保存了id的代理對象,但如果我需要打印出user對象的其他屬性值時,這個時候會不會發出sql語句呢?答案是肯定的

    

②如果使用load方式來加載對象,當我們試圖得到一個id不存在的對象時,此時會報ObjectNotFoundException異常

複製代碼
      session = HibernateUtil.openSession();
            /*
             * 當通過get方式試圖得到一個id不存在的user對象時,此時會報ObjectNotFoundException異常
             */
            User user = (User)session.load(User.class, 20);
            System.out.println(user.getId());
            System.out.println(user.getUsername());
複製代碼

我們看看控制檯的輸出:

20
Hibernate: select user0_.id as id0_0_, user0_.username as username0_0_, user0_.password as password0_0_, user0_.born as born0_0_ from user user0_ where user0_.id=?
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.xiaoluo.bean.User#20]......

爲什麼使用load的方式和get的方式來得到一個不存在的對象報的異常不同呢??其原因還是因爲load的延遲加載機制,使用load時,此時的user對象是一個代理對象,僅僅保存了當前的這個id值,當我們試圖得到該對象的username屬性時,這個屬性其實是不存在的,所以就會報出ObjectNotFoundException這個異常了。


8 hibernate 查詢的方式 除hql 還有哪些的?

  http://blog.sina.com.cn/s/blog_7ffb8dd501014a6o.html

 

從點到面,講講hibernate查詢的6種方法。分別是HQL查詢
,對象化查詢Criteria方法,動態查詢DetachedCriteria,例子查詢,sql查詢,命名查詢。
           如果單純的使用hibernate查詢數據庫只需要懂其中的一項就可以完成想要實現的一般功能,但是
從一個點,讓我們掌握6中方法,則提供了更多選擇。每一種方法都有其適用的情況與前提。
HQL查詢
HQL是hibernate自己的一套查詢語言,於SQL語法不同,具有跨數據庫的優點。示例代碼:

static void query(String name){
  Session s=null;
  try{
   s=HibernateUtil.getSession();
   
   //from後面是對象,不是表名
   String hql="from Admin as admin where admin.aname=:name";//使用命名參數,推薦使用,易讀。
   Query query=s.createQuery(hql);
   query.setString("name", name);
   
   List<Admin> list=query.list();
   
   for(Admin admin:list){
    System.out.println(admin.getAname());
   }
  }finally{
   if(s!=null)
   s.close();
  }
 }

適用情況:常用方法,比較傳統,類似jdbc。缺點:新的查詢語言,適用面有限,僅適用於Hibernate框架。
對象化查詢Criteria方法:條件查詢

static void cri(String name,String password){
  Session s=null;
  try{
   s=HibernateUtil.getSession();
   
   Criteria c=s.createCriteria(Admin.class);
   c.add(Restrictions.eq("aname",name));//eq是等於,gt是大於,lt是小於,or是或
   c.add(Restrictions.eq("apassword", password));
   
   List<Admin> list=c.list();
   for(Admin admin:list){
    System.out.println(admin.getAname());
   }
  }finally{
   if(s!=null)
   s.close();
  }
 }

適用情況:面向對象操作,革新了以前的數據庫操作方式,易讀。缺點:適用面較HQL有限。


sql查詢

static List sql() {

  Session s = HibernateUtil.getSession();
  Query q = s.createSQLQuery("select * from user").addEntity(User.class);
  List<User> rs = q.list();
  s.close();
  return rs;
 }

適用情況:不熟悉HQL的朋友,又不打算轉數據庫平臺的朋友,萬能方法   缺點:破壞跨平臺,不易維護,不面向對象。

9 oracle的優化

   爲經常出現在where ,order by,distinct後面的字段創建索引

   減少表之間關聯 

10 jquery與dom相互轉換

    var obj = document.getElementById("d1")

   $o = $(obj);  //dom-->jquery

  

   $o = $("#d1");//jquery-->dom

   var obj = $o.get(0);

11 js addclass 與css作用

    <html>
<head>
<script type="text/javascript" src="/jquery/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
  $("button").click(function(){
    $("p:first").addClass("intro");
  });
});
</script>
<style type="text/css">
.intro
{
font-size:120%;
color:red;
}
</style>
</head>

<body>
<h1>This is a heading</h1>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<button>向第一個 p 元素添加一個類</button>
</body>
</html>


12 title 與 alt 區別 

alt 用來給圖片來提示的。Title用來給鏈接文字或普通文字提示的。 

用法如下: 

   <p Title="給鏈接文字提示">文字</p> 

   <a href="#" Title="給鏈接文字提示">文字</a> 

   <img src="圖片.gif" alt="給圖片提示">

13 string stringbuffer區別

14 分頁查詢 聚合函數的使用   

SELECT*

 FROM(SELECTROWNUMASrowno,t.*

         FROMempt

        WHEREhire_dateBETWEENTO_DATE('20060501','yyyymmdd')

                            ANDTO_DATE('20060731','yyyymmdd')

          ANDROWNUM<=20)table_alias

 WHEREtable_alias.rowno>=10;

  
常用的count()求個數 sum() 求和 avg()求平均數 min()最小值 max()最大值
一般與group by 語句使用

15 存儲過程與函數區別

     函數必須要有返回值

   

16 tcp 和 udp區別

   

1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接

2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付
3、TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的
UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)
4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信
5、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節

6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道


17 hashmap結構

    底層採用數據加鏈表的方式實現

18 表空間 臨時表空間 遊標

 臨時表空間 在事物提交前存儲數據的地方   

一個表空間是由具體的一個或多個用戶模式下的表,索引等等裏面的數據所構成的. 
臨時表空間


遊標是指針

19 數值賦值和引用賦值區別

    數值賦值大多數是在棧區分配內存,引用賦值是在方法區開闢內存

20 list

public class listTest {
	public static void main(String[] args) {
		List list = new ArrayList();
		Person p1 = new Person("kk", 34);
		Person p2 = new Person("jj", 66);
		list.add(p1);
		list.add(p2);
		for (Object obj : list) {
			if (obj instanceof Person) {
				Person p = (Person) obj;
				p.name = "kevin";
				p.age = 11;
			}
		}
		System.out.println(p1.name);
		System.out.println(p1.age);
		System.out.println(p2.name);
		System.out.println(p2.age);
	}
}

<pre name="code" class="java">kevin
11
kevin
11

 

21 io 採用什麼模式

    裝飾模式

22 spring如何處理異常的

    攔截器

23 數據源如何加載的

24 二級緩存 如何實現 緩存在哪裏

25java singleton 與 spring singleton 區別

26 hibernate 模版的使用

25 http 1 2 3 4 5 含義

    readyState

 

存有 XMLHttpRequest 的狀態。從 0 到 4 發生變化。

  • 0: 請求未初始化
  • 1: 服務器連接已建立
  • 2: 請求已接收
  • 3: 請求處理中
  • 4: 請求已完成,且響應已就緒
status

200: "OK"

404: 未找到頁面


26 視圖解析器 多個展現頁面

27 事務 隔離 傳播

    對數據庫進行crud操作時執行的一系列動作,都要保證能夠正確的執行

    一個事務對數據庫的修改與並行的另一個事務的隔離程度 committed 一個事物不會讀取並行的另一個事物已修改但未提交的數據

   事物傳播 required 支持當前事物,如果當前沒有事物就創建一個新事物


28 java 序列化是爲了解決什麼問題,爲什麼要序列化呢

29. 多線程訪問一個變量,會出現什麼問題。
30. 異常類有哪幾種類型。

      http://blog.csdn.net/woshixuye/article/details/8230407
31. 講一講你接觸的框架的區別。

32.棧裏放的是什麼,堆裏放的是什麼

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