Java材料
例項化的方法:
方法一:直接用new的方式開闢一個物件;
方法二:使用工廠設計模式,引入工廠類;
方法三:使用反射機制:Class.forName;
方法四:使用物件克隆:Object類中的clone方法.
abstract class和interface有什麼區別?
1.abstract class在Java語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。但是一個類卻可以實現多個interface。
2.其次,在abstract class的定義中,我們可以賦予方法的預設行為。但是在interface的定義中,方法卻不能擁有預設行為,為了繞過這個限制,必須使用委託。
3.在abstract class方式中,可以有自己的資料成員,也可以有非abstract的成員方法,而在interface方式的實現中,只能夠有靜態的不能被修改的資料成員,所有的成員方法都是abstract的.
Static:
1. static變數 靜態變數在記憶體中只有一個拷貝,例項變數可以在記憶體中有多個拷貝
2. static程式碼塊 是類載入時,初始化自動執行的。
3. static方法 可以直接通過類名呼叫,只能訪問static的變數和方法,因為非static的變數和方法是需要建立一個物件才能訪問的,而static的變數/方法不需要建立任何物件。
全域性變數和靜態全域性變數的區別
全域性變數, 靜態全域性變數是靜態儲存方式。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,當一個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。
Final
在Java中宣告屬性、方法和類時,可使用關鍵字final來修飾。
final變數即為常量,只能賦值一次;
final方法不能被子類重寫;
final類不能被繼承。
其初始化可以在兩個地方,一是其定義處,也就是說在final變數定義時直接給其賦值,二是在建構函式中。
多型和繼承的區別:繼承是子類使用父類的方法,而多型則是父類使用子類的方法
Overload和Override的區別。Overloaded的方法是否可以改變返回值的型別?
方法的重寫Overriding和過載Overloading是Java多型性的不同表現。重寫Overriding是父類與子類之間多型性的一種表現,過載Overloading是一個類中多型性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。子類的物件使用這個方法時,將呼叫子類中的定義,對它而言,父類中的定義如同被“遮蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的引數個數或有不同的引數型別,則稱為方法的過載(Overloading)。Overloaded的方法是可以改變返回值的型別。
構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被過載Overloading。
Servlet生命週期:
當WEB客戶第一次請求訪問某個Servlet的時候,WEB容器將建立這個Servlet的例項,並且呼叫Servlet的init()方法進行初始化,請求到達時執行其service方法,service方法自動派遣執行與請求對應的doXXX方法(doGet,doPost)等,當WEB應用被終止,或Servlet容器終止執行,或Servlet容器重新裝載Servlet新例項時,Servlet容器會先呼叫Servlet的destroy()方法,在destroy()方法中可以釋放掉Servlet所佔用的資源。
ClassLoader載入過程:
當執行一個程式的時候,JVM啟動,執行bootstrap Classloader,該ClassLoader載入java核心API(ExtClassLoader和AppClassLoader也在此時被載入),然後呼叫ExtClassLoader載入擴充套件API,最後AppClassLoader載入CLASSPATH目錄下定義的Class,這就是一個程式最基本的載入流程。
=============================================
java程式在執行過程中,類,物件以及它們成員載入、初始化的順序如下:
1、首先載入要建立物件的類及其直接與間接父類。
2、在類被載入的同時會將靜態成員進行載入,主要包括靜態成員變數的初始化,靜態語句塊的執行,在載入時按程式碼的先後順序進行。
3、需要的類載入完成後,開始建立物件,首先會載入非靜態的成員,主要包括非靜態成員變數的初始化,非靜態語句塊的執行,在載入時按程式碼的先後順序進行。
4、最後執行構造器,構造器執行完畢,物件生成。
=============================================
String和StringBuffer區別:
String:
是物件不是原始型別.為不可變物件,一旦被建立,就不能修改它的值.
對於已經存在的String物件的修改都是重新建立一個新的物件,然後把新的值儲存進去.String 是final類,即不能被繼承.
StringBuffer:
是一個可變物件,當對他進行修改的時候不會像String那樣重新建立物件
它只能通過建構函式來建立,向StringBuffer中賦值的時候可以通過它的append方法,多執行緒同步安全的
StringBuilder類似StringBuffer,不是同步安全的,適合單執行緒
位元組流和字元流:
位元組流:InputStream,OutputStream
字元流:Reader,Write
treeset與hashset的區別:
TreeSet類實現了java.util.SortedSet介面,從而保證在遍歷集合時按照遞增的順序獲得物件。實現Comparable介面。
HashSet類按照雜湊演算法來存取物件,當向集合中加入一個新物件時,會呼叫物件的HashCode()方法得到物件的雜湊碼,然後根據這個碼計算出物件在集合中儲存的位置。
Hashcode:當兩個物件的hashcode一樣時,兩個物件就有可能一樣。如果不一樣的話兩個物件就肯定不一樣。一般用hashcode來進行比較兩個東西是不是一樣的,可以很容易的排除許多不一樣的東西。
Volatile修飾的成員變數在每次被執行緒訪問時,都強迫從共享記憶體中重讀該成員變數的值。而且,當成員變數發生變化時,強迫執行緒將變化值回寫到共享記憶體。這樣在任何時刻,兩個不同的執行緒總是看到某個成員變數的同一個值。
Transient:java語言的關鍵字,變數修飾符,如果用transient宣告一個例項變數,當物件儲存時,它的值不需要維持。換句話來說就是,用transient關鍵字標記的成員變數不參與序列化過程。
instanceof是Java的一個二元操作符,它的作用是測試它左邊的物件是否是它右邊的類的例項,返回boolean型別的資料。可以用在繼承中的子類的例項是否為父類的實現。
異常的分類:
① 異常的繼承結構:基類為Throwable,Error和Exception繼承Throwable,RuntimeException和IOException等繼承Exception,具體的RuntimeException繼承RuntimeException。
② Error和RuntimeException及其子類成為未檢查異常(unchecked),其它異常成為已檢查異常(checked),一定要處理。
如果出現RuntimeException,那麼一定是程式設計師的錯誤,我們可以不處理。其他非RuntimeException(IOException等等):這類異常一般是外部錯誤。
內部類:
成員內部類 :不能定義靜態成員,可以訪問外部類的所有成員。
作為外部類的一個成員存在,與外部類的屬性、方法並列
靜態巢狀類 :不需要內部類物件與其外圍類物件之間有聯絡
1. 要建立巢狀類的物件,並不需要其外圍類的物件。
2. 不能從巢狀類的物件中訪問非靜態的外圍類物件
// 靜態內部類可以用public, protected, private修飾
方法內部類 :不能有訪問說明符,因為它不是外圍類的一部分,但是它可以訪問當前程式碼塊內的常量,和此外圍類所有的成員。
匿名內部類 :
·匿名內部類不能有構造方法。
·匿名內部類不能定義任何靜態成員、方法和類。
·匿名內部類不能是public, protected, private, static
基本資料型別:byte,int,char,long,short,Boolean,float,double
Session和Cookie的區別
1.Session將資訊儲存在伺服器上,而Cookie儲存在客戶端上
2.Session比Cookie更安全,但是session依賴於cookie的,Session比Cookie更佔資源
3.Cookie只能存String型別的資料,而Session可以存Object型別和簡單資料型別的資料
3。什麼是記憶體洩漏?
答:一般我們所說的記憶體洩漏指的是堆記憶體的洩漏。堆記憶體是程式從堆中為其分配的,大小任意的,使用完後要顯示釋放記憶體。當應用程式用關鍵字new等建立物件時,就從堆中為它分配一塊記憶體,使用完後程式釋放該記憶體,否則就說該記憶體就不能被使用,我們就說該記憶體被洩漏了。
當沒有任何引用指向堆中的某個物件例項時,這個物件就被視為不再使用。
時間複雜度:
插入,選擇,冒泡 時間複雜度o(n2)
堆,二叉樹,希爾 時間複雜度o(nlog n)
冒泡,交換,選擇:最大次數(n-1)*n/2
多型簡單例項:
public abstract class A {
abstract void Execute();
}
public class B extends A {
public void Excute(){System.out.println("I'm lili");}
}
public class C extends A {
public void Execute(){System.out.println("I'm C");}
}
public static void main(String[] args){
A b=new B();
A c=new C();
b.Execute();
c.Execute();
}
byte、short、char三種型別的優先順序是相同的,相同優先順序之間是不能進行自動轉換的,
byte、short、char-->int-->long-->float-->double
執行緒
Thread和Runnable有什麼不同?
JAVA執行緒控制著程式執行的主路徑。當你用java命令呼叫JVM時,JVM建立了一個隱式執行緒來執行main方法。Thread類提供了主執行緒呼叫其它執行緒並行執行的機制。
Runnable介面定義了一個能被Thread執行的類。實現Runnable的類只需要實行run方法。可以很靈活的擴充套件現在的已經繼承自其它父類的類。而thread則不可以,因為java只允許繼承一個父類。
synchronized關鍵字修飾同步方法,反對使用stop(不安全,解除了執行緒獲取的所有鎖定),反對使用suspend(容易發生死鎖)
狀態:就緒,執行,synchronize阻塞,wait和sleep掛起,結束。
Lock和synchronize:
Lock可以完成synchronize的所有功能,更精確的執行緒語義和更好的效能。手動釋放鎖。
Java中的執行緒有四種狀態分別是:就緒、執行、掛起、結束
多執行緒有兩種實現方法,分別是繼承Thread類與實現Runnable介面
2。觸發器的作用?
答:觸發器是一中特殊的儲存過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。
3。索引的作用?和它的優點缺點是什麼?
答:索引就一種特殊的查詢表,資料庫的搜尋引擎可以利用它加速對資料的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的資料。索引可以是唯一的,建立索引允許指定單個列或者是多個列。缺點是它減慢了資料錄入的速度,同時也增加了資料庫的尺寸大小。
資料庫三正規化:
第一正規化,欄位具有原子性,不可再分
第二正規化,欄位具有原子性,不可再分,資料庫表中每一行可以被唯一地區分
第三正規化,每一列只有一個值,每一行都能區分,每一個表都不包含其它表已經包含的非主關鍵字資訊
5。什麼是事務?什麼是鎖?
答:事務就是被繫結在一起作為一個邏輯工作單元的SQL語句分組,如果任何一個語句操作失敗那麼整個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上有個節點。為了確保要麼執行,要麼不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過ACID測試,即原子性,一致性,隔離性和永續性。
Oracle資料庫支援READ COMMITTED和 SERIALIZABLE這兩種事務隔離級別。所以Oracle不支援髒讀
一、事務的基本要素(ACID)
1、原子性(Atomicity):事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是一個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。
2、一致性(Consistency):事務開始前和結束後,資料庫的完整性約束沒有被破壞 。比如A向B轉賬,不可能A扣了錢,B卻沒收到。
3、隔離性(Isolation):同一時間,只允許一個事務請求同一資料,不同的事務之間彼此沒有任何干擾。比如A正在從一張銀行卡中取錢,在A取錢的過程結束前,B不能向這張卡轉賬。
4、永續性(Durability):事務完成後,事務對資料庫的所有更新將被儲存到資料庫,不能回滾。
二、事務的併發問題
1、髒讀:事務A讀取了事務B更新的資料,然後B回滾操作,那麼A讀取到的資料是髒資料
2、不可重複讀:事務 A 多次讀取同一資料,事務 B 在事務A多次讀取的過程中,對資料作了更新並提交,導致事務A多次讀取同一資料時,結果 不一致。
3、幻讀:系統管理員A將資料庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入了一條具體分數的記錄,當系統管理員A改結束後發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。
小結:不可重複讀的和幻讀很容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除。解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表
三、MySQL事務隔離級別
事務隔離級別 | 髒讀 | 不可重複讀 | 幻讀 |
讀未提交(read-uncommitted) | 是 | 是 | 是 |
不可重複讀(read-committed) | 否 | 是 | 是 |
可重複讀(repeatable-read) | 否 | 否 | 是 |
序列化(serializable) | 否 | 否 | 否 |
mysql預設的事務隔離級別為repeatable-read
6。什麼叫檢視?遊標是什麼?
答:檢視是一種虛擬的表,具有和物理表相同的功能。可以對檢視進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。
遊標:是對查詢出來的結果集作為一個單元來有效的處理。遊標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行。可以對結果集當前行做修改。一般不使用遊標,但是需要逐條處理資料的時候,遊標顯得十分重要。
相關文章
- YDOOK: ANSYS Maxwell 19 教程6:Maxwell 2D 材料管理 材料庫 新增 新增材料
- 一位從材料轉行來學習JAVA的分享Java
- 2020材料員-崗位技能(材料員)模擬考試及材料員-崗位技能(材料員)作業模擬考試
- 材料成分分析
- 內控學習材料
- 課題材料總結
- ASP.NET+MVC自學材料ASP.NETMVC
- 方正證券:2022年半導體材料研究框架-晶片材料(附下載)框架晶片
- 進化材料基因:機器學習如何推動下一代新材料的發現機器學習
- DesignBuilder自定義材料檔案UI
- 班主任經驗交流材料
- 材料力學複習總結
- 36氪研究院:2023年中國新材料之超導材料產業洞察產業
- 36氪研究院:2023年中國新材料之生物基材料行業洞察行業
- 材料與化學資料庫分享資料庫
- 雷霆戰機 裝備進階材料攻略
- HTML/CSS/JavaScript入門學習材料HTMLCSSJavaScript
- 古墓麗影暗影-毒材料商人位置
- 比原始材料強8倍,清華、武漢理工團隊用AI篩選高熵電介質材料AI熵
- 【Abaqus】*Solid Section定義複合材料Solid
- 材料的生產訂單庫存地點
- 讀材料後筆記:什麼是DevOps筆記dev
- :joy:儲氫材料測試簡明教程:joy:
- 從材料設計合成,到催化劑創新、碳中和,清華王笑楠團隊探索「AI+材料」前沿與落地AI
- 眼圖測試(訊號完整性測試)-材料熱分析 | TMA測試材料的平均線性膨脹係數
- OLED材料市場穩健增長,WOLED前景光明
- 建築材料供應商協同管理系統
- Abaqus中的實用工具——材料行為評估
- 弱化檢查材料影印,強化業務資料管理
- 「可損傷程式設計設計」的超材料,上海交大團隊用AI實現材料的自然抗裂機制程式設計AI
- ABAQUS材料子程式學習(線性隨動硬化塑性)
- 國元證券:半導體材料投資地圖(附下載)地圖
- 為什麼要關注軟體材料清單(SBOM)
- 人工智慧在材料領域的應用有哪些?人工智慧
- Apple Watch銷售材料曝光:蘋果對它很自信APP蘋果
- 什麼材料可以用來製造微型天線
- 小白入門Python,必看的一些基礎材料Python
- SAP技術專家的ABAP偵錯程式培訓材料