筆試有感。


一直跟着老師做項目,平時也看了一些java基礎的資料,例如Thinking in Java


但是今天筆試的題目,讓我知道了學海無涯...


收穫一

首先一個synchronized關鍵字問題就讓我掛了。


題目是這樣的:

package cn.Test;

public class Test {
	
	public synchronized static void make(){
		
	}

	public synchronized void make2(){
		
	}
	
}

問:同步嗎?

我回答了 同步。正確答案應該是不同步。


首先說一下什麼是同步。


簡單的說就是一個線程在調用這個方法,其他線程就要等待他調用完畢。或者修改某個數據,其他線程就要等待第一個線程修改好這個數據。

在這個筆試題目裏:


因爲這兩個方法加的鎖就是不一樣的。


static方法加的是類鎖(class)

非static方法加的是對象鎖(即:class類產生出的某個對象)。


所以當多線程情況下,兩個方法可以同時執行。所以不同步。


舉一些例子:


package cn.Test;

public class Test {
	
	private static Object key = new Object();
	
	public void make(){
		
		synchronized (key) {
			//body...
		}
		
	}
	
}

這裏的key,大家應該都瞭解吧。就是爲了達到同步效果,我們弄出來的臨界資源。(注意要加static)


package cn.Test;

public class Test {
	
	private Object key = new Object();
	
	public void make(){
		
		synchronized (this) {
			//body...
		}
		
	}
	
}


而這裏的this呢?這個this指得是object reference。或者說是這個對象的引用。


爲了達到同步的效果,這種寫法,前提是這個Test類是單例類,不然的話這種寫法沒有意義。


package cn.Test;

public class Test {
	
	private Object key = new Object();
	
	public void make(){
		
		synchronized (Test.class) {
			//body...
		}
		
	}
	
}

這裏我們的同步鎖是Test.class


這個就是類鎖了。每個對象都是由一個class產生出來的,對於Test他只有一個Tsst.class。


所以在單例模式的時候,我們往往這麼寫


package cn.Test;

public class Test {
	
	private volatile static Test test = null;
	
	public static Test getTest(){
		
		if (test == null) {
			
			synchronized (Test.class) {

				if (test == null) {
					
					test = new Test();
					
				}
				
			}
			
		}
		
		return test;
		
	}
	
	public static void main(String[] args) {
		
		Test test = Test.getTest();
		
	}
	
}

收穫二:


今天還問到了session什麼時候產生,什麼時候銷燬的。


我一開始差點寫  SessionFactory.openSession()的時候產生...


後來想了想,應該是問的JSP裏面的session的生命週期。


可是我只記住了session的存活時間是30分鐘。


application 生命週期在整個應用程序中 生命週期爲:應用程序啓動到停止.
session 會話你可以設置他的時間 默認的是30分鐘 當你關閉瀏覽器 結束本次會話  用戶開始進行操作就產生一個唯一的session 每個session都分配了一個唯一的Id  
request是獲取信息--通過用戶提交的表單,查詢字符串,cookie等獲得信息
session是服務端用來保存一些數據(通常是標記狀態的,當然也可以保存別的)
session是服務端的記錄變量,可以跟蹤記錄訪問者動作,比如登錄,退出等.
request用在數據提交,表單數據等
cookie 的話 它有一個有效期 你也可以設置時間 如一個月 一年等


收穫三


還有個問題就是SQL語句的問題。


誒,真是痛心啊。平時寫寫項目,都夠用,到筆試的時候就不行了。


題目如下:

apply表

no

state

applydetail表

no

state

idcard

name


題目一忘記了,題目二:設置idcard爲3304的記錄state爲07。

我是較勁乳汁,愣是寫出來一個update apply a,applydetail d set a.state = '07' ,d.state = '07' where a.no = d.no and d.idcard = '3304'


現在想想,應該是錯的。但是實在想不出來了,求各位路過的大牛給主意。


題目三:找出idcard數量大於2的idcard

平時根本沒用過having...結果寫了個group by ...就沒了。


答案:select idcard count(*) from  applydetail having count(*) > 2


題目四:將applydetail中姓李的記錄都刪了。


我的答案:delete applydetail where name like '%李%';


       回來之後查了很多SQL題目。發現平時真的是坐井觀天。


聚合函數:

AVG:求平均值

SUM:求和

MAX:求最大值

MIN:求最小值

COUNT(*):返回所有行數

COUNT返回滿足指定條件的記錄值


inner join、left outer join、right outer join的用法

Select * from 表名1 inner join 表名2 on 條件表達式


還有一個重點就是 子查詢!

子查詢基本分三類:1.使用in查詢返回一列或更多值

2、比較運算符,返回單個值作爲外查詢的參數

3、用exists查詢時相當於進行一次數據測試


之前自己都不知道from後面也可以跟子查詢的


8、查詢課程編號“002”的成績比課程編號“001”課程低的所有同學的學號、姓名; 
  Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2

where SC_2.S#=Student.S# and SC_2.C#='002') score2 
  from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score; 


這裏我看了之後,對子句的看法有了翻天覆地的改變。感覺子句太靈活了。from後面的就相當於自己構造出了一個表,字段名就是子句裏面select出來的,並且子句裏面可以用到外查詢的信息,例如上面的案例:from裏面的select裏的select裏就用到了上一層的Student.S#。這讓我嚇尿了。。。


查詢學過“001”並且也學過編號“002”課程的同學的學號、姓名; 
  select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and 

exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002'); 


這裏的題目都不錯,可以參考

http://wenku.baidu.com/view/763418d6360cba1aa811da4c.html


收穫四

 

正則表達式:


題目因爲完全看不懂,直接忘記了長什麼樣子了。現在回來腦補下知識。


個人覺得常用的幾個符號掌握了就行了,畢竟不經常用,一些生僻的學了過幾天就忘記了。


下面的圖片摘自

http://www.jb51.net/article/16829.htm








收穫五


CSS樣式優先級:

(外部樣式)External style sheet <(內部樣式)Internal style sheet <(內聯樣式)Inline style


收穫六


forward與redirect的區別


1.從地址欄顯示來說 
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,所以它的地址欄還是原來的地址.
redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.

2.從數據共享來說 
forward:轉發頁面和轉發到的頁面可以共享request裏面的數據.
redirect:不能共享數據.

3.從運用地方來說 
forward:一般用於用戶登陸的時候,根據角色轉發到相應的模塊.
redirect:一般用於用戶註銷登陸時返回主頁面和跳轉到其它的網站等.

4.從效率來說 
forward:高.
redirect:低.


1.redirect 方式可以跨應用訪問,forward 只能在同一個應用中跳轉。 
2.forward 客戶端訪問服務器,服務器找到要跳轉的相應URL並執行返回給客戶端。客戶端的地址欄顯示的是原始URL。 redirect 客戶端訪問服務器,服務器找到要跳轉的URL並將URL發給客戶端,再由客戶端對新的URL重新發送請求。客 戶端的地址欄顯示的是第二次請求的URL。 
3.數據的傳輸:在request中的數據,forward可以訪問,redirect不行,因爲redirect已經是一個新的請求。 


這裏一篇文章不錯:

http://zhulin902.iteye.com/blog/939049


收穫七


這是一道選擇題,問的是String str1 = “ab”,String str2 = "ab";


問這裏創建了幾個對象。


答案是 一個。


這裏涉及了JVM中堆,棧以及字符串池的問題。


棧中只保存 基本類型 ,例如:int,char,double,float等,或者對象的引用。


堆則存儲創建的對象。


棧的速度僅次於 寄存器,快於堆。


這裏的一篇文章不錯:


http://duzhizj.blog.163.com/blog/static/34324890201291805834778/


以前都沒有這麼深入的瞭解一個類的創建是什麼樣的過程,看過這篇文章,收穫頗豐啊。


越發的覺得一開始沒有系統的學習Java,就算會做項目了,Java的基礎還是不紮實。


2014-11-12~2014-11-13 筆試收穫


收穫一

interface 裏面可以聲明 友好變量和公共變量 但是不能申明私有和保護變量


且interface申明的友好公共 變量 自動轉變成Static變量


收穫二


case 1,2是錯誤的寫法。


public class Test {

	public static void main(String[] args) {
		
		int num = 1;
		
		switch (num) {
		case 1,2:
			break;

		default:
			break;
		}
		
	}
	
}

收穫三


1.當使用String str="abc",這種方式時,先去內存的Heap中找是否存在"abc"這個字符串,若存在,則將地址引用。若不存在則創建。

 

2.當使用String str=new String("abc");時,不管事先是否存在"abc",每次都會創建其新的對象。


提示:可以通過 == 來驗證結論是否正確


收穫四


9999轉化二進制方法忘記了...白白錯了一道題目。回來之後才恍然大悟,誒。


題目是:

while(x){

count ++;

x= x&(x-1);

}

求count的值。x輸入是9999;

2014-12-03 筆試有感

收穫一:接口實現接口用extends,而非implements


public interface A {

	public void show();
	
}
public interface B extends A{

	void show();
	
}

收穫二


JS中的變量是鬆散類型(即弱類型)的,可以用來保存任何類型的數據。

typeof 可以用來檢測給定變量的數據類型,可能的返回值:1. 'undefined' --- 這個值未定義;

2. 'boolean'    --- 這個值是布爾值;

3. 'string'        --- 這個值是字符串;

4. 'number'     --- 這個值是數值;

5. 'object'       --- 這個值是對象或null;

6. 'function'    --- 這個值是函數。




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