牛客網刷題(純java題型 1~30題)

應該是先extend,而後implementhtml

class test extends A implements B {
    public static void main(String[] args) {
    }
}
複製代碼

java中四類八種基本數據類型
整數類型:byte,short,int,long
浮點類型: float,double
邏輯型: boolean
字符類型: char

   瀏覽器根據html中指定的編碼格式對參數進行編碼,Tomcat根據指定的格式對參數進行解碼 ,因此getParameter獲得的參數的編碼是由客戶端和web容器配置共同決定的

重載,指的是@overload
重寫,指的是@override
重寫override是子類對父類的容許訪問的方法的實現過程進行從新編寫, 返回值和形參都不能改變。即外殼不變,核心重寫!
重載overload,是用在同一函數體中,方法名稱不變,方法簽名改變

構造函數是不可使用final修飾的,因此我以爲構造函數不能夠是內聯函數 (不知道這麼說是否正確)

所謂的內聯函數,就是函數在被調用的地方直接展開,編譯器在調用的時候不用像通常函數那樣,參數壓棧,返回時參數出棧以及資源釋放等,這樣提升了程序執行速度,對應java語言中也有一個關鍵字final來知名那個函數式內聯的.內聯部已訂好,當被指定爲內聯的方法體很大的時候,展開的開銷可能就已經超過了普通函數調用的時間,引入內聯反而下降了性能,所以在選擇這個關鍵字的時候須要慎重,不過,在之後高版本的JVM中,在處理內斂的時候作出了優化,他會根據方法的規模來決定是否展開調用 構造函數能夠是內聯函數 構造函數能夠設置默認的參數 構造函數在定義類對象的時候自動執行

FileInputStream,從文件中以字節流讀取
FileReader,從文件中以字符流讀取
FileWriter,向文件中,寫入字符

接口中的變量,默認是public static final
接口中的方法,默認是public abstract

Collection類型的集合只能裝入Object類型的數據,題中傳入的是0,可是會自動裝箱爲Integer
JVM造成對象後會放入堆中,listlist1和listlist2都指向堆中的同一個對象
instanceof是用來判斷對象的類型,也就是對象屬於哪一個類的實例,由於指向的是同一個對象,因此都爲Integer對象,也就是都爲true

Super super = new Sub(); // 向上轉型不須要向值類型轉換
Sub sub = (Sub)new Super(); // 向下轉型必需要強制類型轉換
這道題考察的是多態,對於多態,能夠總結爲:
1,父類引用指向子類對象
2,父類引用只能調用父類的field和method,不能調用子類的field和method,會報錯
3,上面說只能調用父類中的field和method,若是子類中的method覆蓋了父類中的method,那麼使用父類的引用,調用的將是子類中重寫的method,而不是父類中的method; 若是子類field與父類field重名,使用父類的引用,調用field的話,調用的是父類中的field的值
3,子類"覆蓋"父類的變量不會報錯

getDeclaredMethods():

Returns an array containing {@code Method} objects reflecting all the declared methods of the class or interface represented by this {@code Class} object, including public, protected, default (package) access, and private methods, but excluding inherited methods. 翻譯:返回類的全部聲明的方法,包括這個類/接口中的方法(public,private,protected,default),可是不包括這個類所繼承的超類中的方法 getMethods():
Returns an array containing {@code Method} objects reflecting all the public methods of the class or interface represented by this {@code Class} object, including those declared by the class or interface and those inherited from superclasses and superinterfaces.
翻譯:返回這個類/接口中的全部public方法,包括這個類/接口的超類/父接口中的public方法
同理: getDeclaredMethods() 和 getFields()java

補充知識: public class ArrayList
extends AbstractList
implements List,
RandomAccess, 說明ArrayList支持隨機訪問
Cloneable, 說明ArrayList支持克隆
java.io.Serializable 說明ArrayList支持序列化

ArrayList的動態擴容機制:
web

ArrayList擴容機制總結:

若是是經過無參構造器ArrayList()構造,那麼初始大小爲0,而後,隨着add元素,不斷的擴容,新容量 = 舊容量的 * 1.5
例如: 先是size=0 的Arraylist,而後add,擴容爲DEFAULT_SIZE = 10 ,而後添加第11個元素的時候,是擴容爲15個,添加到16個元素的時候,擴容到22個數據庫

若是是經過ArrayList(initialSize),則會直接指定數組的大小,不須要擴容數組

ConcurrentHashMap使用segment來分段和管理鎖 static class Segment extends ReentrantLock impliments Serializable{ 瀏覽器

}
public class ReentrantLock implements Lock,Serializable
安全

interface Lockbash

public class HashMap
extends AbstractMap
implements Map,Cloneable,Serializable

public static List asList( T ... a) {
return new ArrayList(a);
}
private static class ArrayList{
//這個ArrayList爲Arrays的內部類
}
app

SimpleDateFormat 是線程不安全的

使用JDBC的完整流程:
加載JDBC驅動程序
提供連接URL
建立數據庫鏈接
建立一個Statement
執行SQL語句 處理
關閉JDBC鏈接

通過驗證,以Stream結尾的都是字節流byte,以Reader,Writer結尾的都是字符流
須要注意的:
InputStreamReader:
An InputStreamReader is a bridge from byte streams to character streams: It reads bytes and decodes them into characters using a specified {@link java.nio.charset.Charset charset}. The charset that it uses may be specified by name or may be given explicitly, or the platform's default charset may be accepted.
InputStreamReader 是字節流通向字符流的橋樑:它使用指定的 charset 讀取字節並將其解碼爲字符。它使用的字符集能夠由名稱指定或顯式給定,或者能夠接受平臺默認的字符集。
OutputStreamReader:
An OutputStreamWriter is a bridge from character streams to byte streams:Characters written to it are encoded into bytes using a specified {@link java.nio.charset.Charset charset}. OutputStreamWriter 是字符流通向字節流的橋樑:可以使用指定的 charset 將要寫入流中的字符編碼成字節。它使用的字符集能夠由名稱指定或顯式給定,不然將接受平臺默認的字符集。

考察Statement與PreparedStatement的使用與區別:
interface Statement extends Wrapper,AutoCloseable
interface PreparedStatement extends Statement
Statement是一個接口,用於爲一條SQL語句生成執行計劃,若是須要執行10條SQL語句,則須要生成十次執行計劃
PreparedStatement繼承自Statement,具備Statement的所有功能,主要用來解決使用Statement屢次執行同一SQL語句的效率問題,PreparedStatement使用的是數據庫支持預編譯的功能,預先將SQL語句進行編譯,屢次執行同一條SQL語句的時候,只須要將編譯好的SQL語句直接執行就能夠,提升了效率,同時能夠防止SQL注入,提升了安全性
構造PreparedStatement的時候須要傳入SQL語句,進行預編譯,excute的時候,excute裏面不傳入SQL
構造Statement的時候不須要傳入SQL語句,excute的時候須要傳入SQL語句

Object 類中wait(),notify(),notifyAll()方法的區別:
1)wait() notify(), notifyAll() public final native void wait() throws InterruptedException ;
public final native void notify();
public final native void notifyAll();
都是native方法,都爲final方法, 沒法被override
2) 調用某個對象的wait()方法,可以讓當前線程阻塞,前提是當前線程必須擁有此對象做爲鎖,並且obj.wait()方法必須位於synchronized(obj)中 3) 調用某個對象的notify()可以喚醒一個正在等待這個對象的線程,若是有多個縣城都在等待此對象,則從中喚醒一個
4) 調用notifyAll()可以喚醒全部正在等待這個對象的monitor的線程
爲何這三個不是Thread中的方法,而是Object類中的方法?
固然因爲Thread也是Object,因此Thread也能夠調用此方法
緣由: 因爲每個對象均可以擁有鎖,因此讓當前線程等待某個對象的鎖,固然須要經過這個對象來操做了,而不是用當前線程來操做,由於當前線程可能會等待多個鎖,若是經過線程來操做,就很複雜
上面已經提到,若是條用某個對象的wait()方法,當前線程必須擁有這個對象的鎖,所以調用wait()方法必須在synchronized塊或者synchronized方法中進行
調用某個對象的wait()方法,至關於讓當前線程交出此對象的鎖,而後進入等待狀態,等待後續再次得到此對象的鎖(Thread中的sleep方法使當前線程暫停一段時間,從而讓其餘線程有機會繼續執行,可是在這期間sleep不是訪對象鎖)
notify()方法可以喚醒一個正在等待該對象的鎖的線程,若是有多個線程,只能喚醒其中的一個,具體喚醒那個線程不肯定
調用對象的notify()方法,當前線程也必須用用這個對象的synchronized,所以調用notify()方法必須在synchronized()中執行
Condition是在jdk 1.5中出現的,用來替代傳統的Object的wait,notify()和notifyAll(),實現線程間的通訊,使用Contion的await(),singal()這種方式來實現線程的協做更加安全和高效,阻塞隊列使用的是Condition來模擬線程間的協做
Condition是一個接口
public interface Condition { await();
signal();
signalAll();
} Condition依賴於Lock接口,生成一個Condition的基本代碼是lock.newCondition();
調用Condition的await()和signal()方法,必須都在lock.lock()的保護以內
wait()對應於await();
notify()對應於signal;
notifyAll()對應於signalAll();

ThreadLocal裏面能夠放一個值 ThreadLocal類用於建立一個線程本地變量
Thread中有一個成員變量ThreadLocals,該變量的類型是ThreadLocalMap,也就是一個Map,他的鍵是threadLocal,值爲變量的副本.經過ThreadLocal的get()方法能夠獲取到該線程變量對應的value

不管是靜態內部類,仍是非靜態內部類,都是外部類的一個屬性,因此,對於非靜態內部類,須要使用InstanceObject().new InnerClass(),對於靜態內部類,可使用new OuterClass.staticInnerClass()的方式來進行建立 不管是靜態內部類,仍是非靜態內部類,都須要使用OuterClass.innerClassName來進行引用
相關文章
相關標籤/搜索