集群環(huán)境中芥丧,session如何實現(xiàn)共享
1许布、Java集群之session共享
SimpleDataFormat是非線程安全的,如何更好的使用而避免風險呢
SimpleDateFormat 是 Java 中一個非常常用的類吭净,該類用來對日期字符串進行解析和格式化輸出访圃,但如果使用不小心會導致非常微妙和難以調試的問題替蔬,因為 DateFormat 和 SimpleDateFormat 類不都是線程安全的告私,在多線程環(huán)境下調用 format() 和 parse() 方法應該使用同步代碼來避免問題。
解決方法:(1)synchronized(sdf){ return sdf.format(date); }
(2)private static ThreadLocalthreadLocal = new ThreadLocal();
public static DateFormat getDateFormat() { DateFormat df = threadLocal.get(); if(df==null){ df = new SimpleDateFormat(date_format); threadLocal.set(df); } return df; }?
getDateFormat().format(date);
Java序列化
(1)使用默認的序列化機制承桥,即實現(xiàn)Serializable接口即可驻粟,不需要實現(xiàn)任何方法。static成員變量和transient關鍵字修飾的成員變量不會被序列化保存
(2)實現(xiàn)Externalizable接口
Externalizable接口是繼承自Serializable接口的凶异,我們在實現(xiàn)Externalizable接口時蜀撑,必須實現(xiàn)writeExternal(ObjectOutput)和readExternal(ObjectInput)方法挤巡,在這兩個方法下我們可以手動的進行序列化和反序列化那些需要保存的成員變量。
泛型中extends和super的區(qū)別
1. 只能用于方法返回酷麦,告訴編譯器此返參的類型的最小繼承邊界為T矿卑,T和T的父類都能接收,但是入?yún)㈩愋蜔o法確定沃饶,只能接受null的傳入?
?2. 只能用于限定方法入?yún)⒛竿ⅲ嬖V編譯器入?yún)⒅荒苁荰或其子類型,而返參只能用Object類接收
或者:
1绍坝、List<? extends T >是說 這個list放的是T或者T的子類型的對象,但是不能確定具體是什么類型苔悦,所以可以get()轩褐,不能add()(可以add null值)
extends 可用于的返回類型限定,不能用于參數(shù)類型限定
2玖详、List<? super T>?是說這個list放的是至少是T類型的對象把介,所以我可以add T或者T的子類型,但是get得到的類型不確定蟋座,所以不能get
super 可用于參數(shù)類型限定拗踢,不能用于返回類型限定。
什么是內部類,內部類的作用
(1)內部類( Inner Class )就是定義在另外一個類里面的類向臀。與之對應巢墅,包含內部類的類被稱為外部類
(2)1. 內部類提供了更好的封裝,可以把內部類隱藏在外部類之內券膀,不允許同一個包中的其他類訪問該類
2. 內部類的方法可以直接訪問外部類的所有數(shù)據(jù)君纫,包括私有的數(shù)據(jù)
(3)內部類的種類: 成員內部類、 局部內部類芹彬、 靜態(tài)內部類(靜態(tài)內部類的創(chuàng)建是不需要依賴于外圍類蓄髓,可以直接創(chuàng)建 靜態(tài)內部類不可以使用任何外圍類的非static成員變量和方法)、 匿名內部類(匿名內部類是沒有訪問修飾符的舒帮。 匿名內部類必須繼承一個抽象類或者實現(xiàn)一個接口 匿名內部類中不能存在任何靜態(tài)成員或方法 匿名內部類是沒有構造方法的会喝,因為它沒有類名)
(4)內部類通過(外部類.this)來獲得外部類的引用例如:
public class OuterClass { public void display(){ System.out.println("this is OuterClass..."); } public class InnerClass{ //獲取外部類的引用 public OuterClass getOuterClass(){ return OuterClass.this; } public void innerDisplay(){ //內部類也可以通過外部類的引用訪問外部元素 getOuterClass().display(); } } public static void main(String[] args) { OuterClass outerClass = new OuterClass(); OuterClass.InnerClass innerClass = outerClass.new InnerClass(); innerClass.innerDisplay(); } }
(5)部類可以通過內部類引用間接訪問內部類元素,例如
public class OuterClass { public void display(){ //外部類訪問內部類元素玩郊,需要通過內部類引用訪問 InnerClass innerClass=new InnerClass(); innerClass.innerDisplay(); } public class InnerClass{ public void innerDisplay(){ System.out.println("I am inner class"); } } public static void main(String[] args) { OuterClass outerClass=new OuterClass(); outerClass.display(); } }
(6)在外部類外面創(chuàng)建內部了對象
OuterClass.InnerClass innerClass=new OuterClass().new InnerClass();
或者
OuterClass outerClass = new OuterClass(); OuterClass.InnerClass innerClass = outerClass.new InnerClass();
String,StringBuffer與StringBuilder的區(qū)別
String 字符串常量 肢执,String類是被final修飾,String類不能被繼承译红,
StringBuffer 字符串變量(線程安全)
StringBuilder 字符串變量(非線程安全)
String蔚万、StringBuilder、StringBuffer三者的執(zhí)行效率:StringBuilder > StringBuffer > String?
int临庇、char反璃、long各占多少字節(jié)數(shù)
Java基本類型占用的字節(jié)數(shù):
?1字節(jié): byte , boolean
?2字節(jié): short , char
?4字節(jié): int , float
8字節(jié): long , double
Java基礎之int和Integer有什么區(qū)別
(1)Integer是int的包裝類昵慌;int是基本數(shù)據(jù)類型;
?(2)Integer變量必須實例化后才能使用淮蜈;int變量不需要斋攀;
?(3)Integer實際是對象的引用,指向此new的Integer對象梧田;int是直接存儲數(shù)據(jù)值 淳蔼;
?(4)Integer的默認值是null;int的默認值是0
(5)int i = 128;? Integer i2 = 128;17 System.out.println(i == i2); //Integer會自動拆箱為int裁眯,所以為true
(6)Integer i7 = new Integer(128); 29 Integer i8 = new Integer(123); 30 System.out.println(i7 == i8); //false 由于Integer變量實際上是對一個Integer對象的引用鹉梨,所以兩個通過new生成的Integer變量永遠是不相等的(因為new生成的是兩個對象,其內存地址不同)穿稳。