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

QisMe發表於2018-07-08

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

應該是先extend,然後implement

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

牛客網刷題(純java題型 1~30題)
java中四類八種基本資料型別
整數型別:byte,short,int,long
浮點型別: float,double
邏輯型: boolean
字元型別: char

牛客網刷題(純java題型 1~30題)
  瀏覽器根據html中指定的編碼格式對引數進行編碼,Tomcat根據指定的格式對引數進行解碼 ,所以getParameter得到的引數的編碼是由客戶端和web容器配置共同決定的

牛客網刷題(純java題型 1~30題)
過載,指的是@overload
重寫,指的是@override
重寫override是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。即外殼不變,核心重寫!
過載overload,是用在同一函式體中,方法名稱不變,方法簽名改變

建構函式是不可以使用final修飾的,所以我覺得建構函式不可以是行內函數 (不知道這麼說是否正確)

所謂的行內函數,就是函式在被呼叫的地方直接展開,編譯器在呼叫的時候不用像一般函式那樣,引數壓棧,返回時引數出棧以及資源釋放等,這樣提高了程式執行速度,對應java語言中也有一個關鍵字final來知名那個函式式內聯的.內聯部已訂好,當被指定為內聯的方法體很大的時候,展開的開銷可能就已經超過了普通函式呼叫的時間,引入內聯反而降低了效能,因此在選擇這個關鍵字的時候需要慎重,不過,在以後高版本的JVM中,在處理內斂的時候做出了優化,他會根據方法的規模來決定是否展開呼叫 建構函式可以是行內函數 建構函式可以設定預設的引數 建構函式在定義類物件的時候自動執行

牛客網刷題(純java題型 1~30題)
FileInputStream,從檔案中以位元組流讀取
FileReader,從檔案中以字元流讀取
FileWriter,向檔案中,寫入字元

牛客網刷題(純java題型 1~30題)
介面中的變數,預設是public static final
介面中的方法,預設是public abstract

牛客網刷題(純java題型 1~30題)
Collection型別的集合只能裝入Object型別的資料,題中傳入的是0,但是會自動裝箱為Integer
JVM形成物件後會放入堆中,listlist1和listlist2都指向堆中的同一個物件
instanceof是用來判斷物件的型別,也就是物件屬於哪個類的例項,因為指向的是同一個物件,所以都為Integer物件,也就是都為true

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

牛客網刷題(純java題型 1~30題)
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,子類"覆蓋"父類的變數不會報錯

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

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

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

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

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

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題型 1~30題)
補充知識: public class ArrayList
extends AbstractList
implements List,
RandomAccess, 說明ArrayList支援隨機訪問
Cloneable, 說明ArrayList支援克隆
java.io.Serializable 說明ArrayList支援序列化

ArrayList的動態擴容機制:

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

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

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

ArrayList擴容機制總結:

如果是通過無參構造器ArrayList()構造,那麼初始大小為0,然後,隨著add元素,不斷的擴容,新容量 = 舊容量的 * 1.5
例如: 先是size=0 的Arraylist,然後add,擴容為DEFAULT_SIZE = 10 ,然後新增第11個元素的時候,是擴容為15個,新增到16個元素的時候,擴容到22個

如果是通過ArrayList(initialSize),則會直接指定陣列的大小,不需要擴容

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

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

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

}
public class ReentrantLock implements Lock,Serializable

interface Lock

牛客網刷題(純java題型 1~30題)
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的內部類
}

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

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

SimpleDateFormat 是執行緒不安全的

牛客網刷題(純java題型 1~30題)
使用JDBC的完整流程:
載入JDBC驅動程式
提供連結URL
建立資料庫連線
建立一個Statement
執行SQL語句 處理
關閉JDBC連線

牛客網刷題(純java題型 1~30題)
經過驗證,以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 將要寫入流中的字元編碼成位元組。它使用的字符集可以由名稱指定或顯式給定,否則將接受平臺預設的字符集。

牛客網刷題(純java題型 1~30題)
考察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語句

牛客網刷題(純java題型 1~30題)
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();

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

牛客網刷題(純java題型 1~30題)
ThreadLocal裡面可以放一個值 ThreadLocal類用於建立一個執行緒本地變數
Thread中有一個成員變數ThreadLocals,該變數的型別是ThreadLocalMap,也就是一個Map,他的鍵是threadLocal,值為變數的副本.通過ThreadLocal的get()方法可以獲取到該執行緒變數對應的value

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

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

牛客網刷題(純java題型 1~30題)
不論是靜態內部類,還是非靜態內部類,都是外部類的一個屬性,所以,對於非靜態內部類,需要使用InstanceObject().new InnerClass(),對於靜態內部類,可以使用new OuterClass.staticInnerClass()的方式來進行建立
無論是靜態內部類,還是非靜態內部類,都需要使用OuterClass.innerClassName來進行引用

相關文章