1、java中自己覺得重要的部分——未完待續
一、JAVA基礎語言:
1、集合/容器部分:
1、Collection 增加、遍歷、刪除:
public interface Collection<E> extends Iterable<E>
2、List:
public interface List<E> extends Collection<E>
3、LinkedList——List——Collection:
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
4、ArrayList——List——Collection:
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
5、Set:
public interface Set<E> extends Collection<E>
6、LinkedHashSet——HashSet——Set——Collection:
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable {
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {
public abstract class AbstractCollection<E> implements Collection<E> {
7、TreeSet——SortedSet——Set:
public class TreeSet<E> extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable
public interface NavigableSet<E> extends SortedSet<E> {
public interface SortedSet<E> extends Set<E> {
8、Map:
9、HashMap——Map:
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
10、TreeMap——SortedMap——Map:
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable
11、ArrayList和Vector的區別?
答:這兩個類都實現了List介面(List介面繼承了Collection介面),他們都是 有序集合,即儲存
在這兩個集合中的元素的位置都是有順序的,相當於一種動態的陣列,我們以後可以 按位
置索引號取出某個元素,,並且其中的資料是 允許重複的,這是HashSet之類的集合的最大
不同處, HashSet之類的集合不可以按索引號去檢索其中的元素, 也不允許有重複的元素(
本來題目問的與hashset沒有任何關係,但為了說清楚ArrayList與Vector的功能,我們使用對
比方式,更有利於說明問題)。
接著才說ArrayList與Vector的區別,這主要包括兩個方面: .
(1)同步性:
Vector是執行緒安全的,也就是說是它的方法之間是執行緒同步的,而ArrayList是執行緒序
不安全的,它的方法之間是執行緒不同步的。如果只有一個執行緒會訪問到集合,那最好是使
用ArrayList,因為它不考慮執行緒安全,效率會高些;如果有多個執行緒會訪問到集合,那最
好是使用Vector,因為不需要我們自己再去考慮和編寫執行緒安全的程式碼。
備註:對於Vector&ArrayList、 Hashtable&HashMap,要記住執行緒安全的問題,記住Vector
與Hashtable是舊的,是java一誕生就提供了的,它們是執行緒安全的, ArrayList與HashMap是
java2時才提供的,它們是執行緒不安全的。所以,我們講課時先講老的。
(2)資料增長:
ArrayList與Vector都有一個初始的容量大小,當儲存進它們裡面的元素的個數超過了
容量時,就需要增加ArrayList與Vector的儲存空間,每次要增加儲存空間時,不是隻增加
一個儲存單元,而是增加多個儲存單元,每次增加的儲存單元的個數在記憶體空間利用與程
序效率之間要取得一定的平衡。 Vector預設增長為原來兩倍,而ArrayList的增長策略在文
檔中沒有明確規定(從原始碼看到的是增長為原來的1.5倍)。 ArrayList與Vector都可以設
置初始的空間大小, Vector還可以設定增長的空間大小,而ArrayList沒有提供設定增長空
間的方法。
總結:即Vector增長原來的一倍, ArrayList增加原來的0.5倍。
12、 HashMap和Hashtable的區別?
public class Hashtable<K,V>extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable {
一.歷史原因:
Hashtable是基於陳舊的Dictionary類的, HashMap是Java1.2引進的Map介面的一個實現
二.同步性:
Hashtable是執行緒安全的,也就是說是同步的,而HashMap是執行緒序不安全的,不是同步的
三.值:
只有HashMap可以讓你將空值作為一個表的條目的key或value
13、 List 和 Map 區別?
一個是儲存單列資料的集合, 另一個是儲存鍵和值這樣的雙列資料的集合, List中儲存的資料是有順序,並且允許重複; M ap中儲存的資料是沒有順序的,其鍵是不能重複的,它
的值是可以有重複的。
14、 List、 Map、 Set三個介面,存取元素時,各有什麼特點?
set:
Set裡面不允許有重複的元素,所謂重複,即不能有兩個相等(注意,不是僅僅是相同)的物件
Set集合的add方法有一個boolean的返回值,當集合含有與某個,元素equals相等的元素時,此時add方法無法加入該元素,返回結果為false。
Set取元素時,沒法說取第幾個,只能以Iterator介面取得所有的元素,再逐一遍歷各個元素。
List:
add(Obj e)方法時,先來後到的順序排序。
也可以插隊,即呼叫add(int index,Obje)方法。
一個物件可以被反覆儲存進List中,每呼叫一次add方法,這個物件就被插入進集合中一次,其實,並不是把這個物件本身儲存進了集合中,而是在集合中用一個索引變數指向這個物件。
List除了可以以Iterator介面取得所有的元素,再逐一遍歷各個元素之外,還可以呼叫get(index i)來明確說明取第幾個。
map:
put(obj key,objvalue),每次儲存時,要儲存一對key/value,不能儲存重複的key,這個重複的規則也是按equals比較相等.
取則可以根據key獲得相應的value,即get(Object key)返回值為key所對應的value。另外,也可以獲得所有的key的結合,還可以獲得所有的value的結合,還可以獲得key和value組合成的Map.Entry物件的集合。
總結:List 以特定次序來持有元素,可有重複元素。 Set 無法擁有重複元素,內部排序。 Map儲存key-value值, value可多值。
15、說出ArrayList,Vector, LinkedList的儲存效能和特性?
說出ArrayList,Vector, LinkedList的儲存效能和特性ArrayList和Vector都是使用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及陣列元素移動等記憶體操作,所以索引資料快而插入資料慢。
Vector由於使用了synchronized方法(執行緒安全),通常效能上較ArrayList差。
LinkedList使用雙向連結串列實現儲存,按序號索引資料需要進行前向或後向遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。
LinkedList也是執行緒不安全的, LinkedList提供了一些方法,使得LinkedList可以被當作堆疊和佇列來使用。
16、String StringBuffer StringBuilder
String:執行緒不安全—每次新建一個物件—頻繁拼接不建議用
StringBuffer:執行緒安全—每次結果都會對 StringBuffer 物件本身進行操作,而不是生成新的物件——頻繁操作字串可考慮使用
StringBuilder:執行緒不安全—與StringBuilder方法差不多——但是效率高
2、執行緒部分:
2、1程式——程序——多工——執行緒——併發——並行:
2、2執行緒生命週期:
新建(new)—就緒(start())—執行(執行run)—阻塞(sleep()\yield()\wait()\join())—消亡(正常結束\故障\異常)
2、3排程及優先順序:
排程分類:
分時模型:分一個時間片給你
搶佔模型:高優先順序執行(java支援的)
優先順序:1——10 10級 普通優先順序是5
2、4實現方式:
1、繼承Thread 2、實現Runnable介面 3、執行緒池建立
4、如何選取:
當你繼承了一個類了,那隻能用實現介面或則是執行緒池這種了嘛。
2、4併發/同步控制:
1、synchronized(對像){臨界程式碼塊} 共享變數是私有靜態變數。
2、public synchronized int fun1(){方法塊}
3、一個物件的互斥鎖在某一時刻只能被一個執行緒擁有,但一個執行緒同一時刻可以擁有多個物件的互斥鎖,擁有一個物件的互斥鎖後才可以呼叫互斥方法。
2、4通訊:
基本方法:
1、wait()
2、notify \notifyAll()
詳見:點選開啟連結
3、JVM部分(GC、類載入機制、記憶體):
3、1GC:
3、2類載入機制:
3、3記憶體:點選開啟連結
3、4執行:就是一個虛擬的計算機、處於JDK最底層,將.java檔案執行以後的二進位制檔案.class檔案翻譯成具體平臺的機器碼去執行,實現了”一次編譯到處執行的關鍵非同步“。
詳見:點選開啟連結
4、NIO/IO模式:
5、介面抽象類:
1、構造方法:抽象可以有、介面不可以有
2、成員方法:
抽象類:可以有abstract的,也可以有一般的普通成員變數。
介面:只能是public abstract 的。
3、成員變數:
抽象類:private public protected 預設都行 final static 任意。
介面:只能是public static final 。
4、單繼承多實現:一個類已經繼承了一個類,那隻能拿介面來實現一下了。
6、設計模式:
二、資料庫:
三、演算法資料結構P272:
1、時間複雜度:
2、連結串列、增、刪、查、改:
3、棧和佇列:
5、堆:
6、串:
7、樹遍歷與二叉樹性質、森林轉化、哈夫曼樹、哈夫曼編碼:
8、圖廣度優先、深度優先、最小生成樹(Kruskal、Prim):
9、查詢:順序查詢、有序查詢、分塊查詢
10、二叉排序樹:插入、刪除
11、B樹插入、刪除:
12、雜湊表:雜湊函式、各種方法
13、直接排序:直接插入排序、折半插入、表插入、希爾排序、
14、交換排序:氣泡排序、快速排序
15、選擇排序:簡單選擇排序、樹形選擇排序、堆排
16、歸併排序:
17、基數排序:多關鍵字排序、鏈式基數
四、J2EE:
1、jsp
1、1內建物件有哪些?
1、1、1 request:
request.getParameter();獲取引數
requet.getMethod():客戶提交方式
request.getProtocol();使用的協議
request.getRequestURL():請求字串客戶端的地址
request.getRemoteAddr():客戶端IP
request.getServerName():伺服器主機名
request.getServerPort();伺服器埠
request.getRemotoHost();客戶端主機名
request.getHeader("host");獲取協議定義頭資訊host
request.getHeader("user-agent");獲取定義頭資訊user-agent
1、1、2 response
<%response.setHeader("refresh","10");%>自動重新整理
<%response.setHeader("refresh","10;URL=index.jsp")%>頁面跳轉
<%response.sendRedirect("login.jsp")%>地址會變
1、1、3 out
1、1、4 session
1、生命週期:同一個瀏覽器各頁面的跳轉,伺服器為每一個session物件其實是給了一個ID,且唯一,關閉瀏覽器就結束。
2、方法:get/setAttribute()/removeAttribute()/getCreateTime()/setMaxInactionInterval()/invalidate()
3、應用:傳資料的時候使用
4、session ID唯一的保證:客戶訪問伺服器上的JSP頁面時,JSP容器會自動建立一個session物件,併為其分配一個唯一的ID,然後JSP容器還會將此ID傳到客戶端中儲存下來,具體儲存在cookie中。
5、JSP執行原理:JSP為每個客戶啟動一個執行緒,即JSP容器為每個執行緒分配不同的session物件,當客戶同一WEB應用的其他頁面,或則是從該伺服器轉到其他伺服器在回來的時候,不會重建Session,直到客戶關閉瀏覽器,伺服器上的session才被撤銷。
1、1、5 application
1、生命週期:一個WEB應用一個application,伺服器關閉,application被銷燬。
2、方法:
3、應用:存一些全域性資訊,一個網頁被訪問多少次
4、servletContext物件提供的服務:
1、1、6 page
1、1、7 pageContext
1、1、8 config
1、1、9 exception
1、2JSP執行過程:
1)首先,客戶端發出請求(request ),請求訪問JSP網頁2)接著,JSP Container將要訪問的.JSP檔案 轉譯成Servlet的原始碼(.java檔案)
3)然後,將產生的Servlet的原始碼(.java檔案)經過編譯,生成.class檔案,並載入到記憶體執行
4)最後把結果響應(response )給客戶端
執行JSP網頁檔案時,需要經過兩個時期:轉譯時期(TranslationTime)和請求時期(RequestTime)。
轉譯時期:JSP轉譯成Servlet類(.class檔案)。
請求時期:Servlet類(.class檔案)執行後,響應結果至客戶端。
轉譯期間主要做了兩件事情:
(1)將JSP網頁轉譯為Servlet原始碼(.java),此段稱為轉譯時期(Translation time);
(2)將Servlet原始碼(.java)編譯成Servlet類(.class),此階段稱為編譯時期(Compilation time)。
其實,JSP就是一個Servlet。
1、3JSP的執行原理
(1)WEB容器JSP頁面的訪問請求時,它將把該訪問請求交給JSP引擎去處理。Tomcat中的JSP引擎就是一個Servlet程式,它負責解釋和執行JSP頁面。
(2)每個JSP頁面在第一次被訪問時,JSP引擎先將它翻譯成一個Servlet源程式,接著再把這個Servlet源程式編譯成Servlet的class類檔案,然後再由WEB容器像呼叫普通Servlet程式一樣的方式來裝載和解釋執行這個由JSP頁面翻譯成的Servlet程式。
(3)Tomcat 5把為JSP頁面建立的Servlet原始檔和class類檔案放置在“apache-tomcat-5.5.26\work\Catalina\localhost\<應用程式名>\”目錄中,Tomcat將JSP頁面翻譯成的Servlet的包名為org.apache.jsp(即:apache-tomcat-5.5.26\work\Catalina\localhost\org\apache\jsp\檔案下)
1、4JSP標籤:
<jsp:include>先編譯在插入
<%@ include file="url"%>先插入在編譯
<jsp:forward page="url">:重定向到另一頁面,位址列是當前的,內容是另一個頁面的。
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>
1、5JSP亂碼
訪問引數亂碼:
<%String name=new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8")%>
表單提交資訊亂碼:
<%request.setCharacterEncoding("UTF-8")%>
2、servlet
2、1、生命週期(執行過程)?
詳見:點選開啟連結
3、struct
五、SSM
詳見:點選開啟連結
六、SSH
詳見:點選開啟連結
MH對比
詳見:點選開啟連結
七、專案:
1、電子檔案安全管理系統
2、基於微信小程式的教學輔助軟體
3、基於j2ee的網際網路金融平臺開發
八、概率統計:
1、期望
2、概率
九、計算機組成原理
十、作業系統
十一、計算機網路
1、兩個模型對應的協議及作用
OSI:
資料鏈路層:將位元組裝成幀和點到點的傳遞(幀Frame)
網路層:負責資料包從源到宿的傳遞和網際互連(包PackeT)
傳輸層:提供端到端的可靠報文傳遞和錯誤恢復(段Segment)
會話層:建立、管理和終止會話(會話協議資料單元SPDU)
表示層:對資料進行翻譯、加密和壓縮(表示協議資料單元PPDU)
應用層:允許訪問OSI環境的手段(應用協議資料單元APDU)
2、分層優點:
2、1將複雜的網路劃分為更容易管理的層。
2、2較低層為較高層提供服務。
2、3更容易討論學習每層具體的協議。
2、4層間有標準介面方便工程模組化。
2、5各層更好的互連。
2、6降低了複雜度,程式容易修改,開發產平更快。
3、三次握手/四次揮手:
更多詳見點選開啟連結
十二、個人發展潛力部分
1、閱讀原始碼:
1、1String 的 equals:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
1、先判斷是不是自己本身 2、再用instanceof判斷物件是不是String型別的 3、然後比兩個串的長度 4、值轉成陣列遍歷一次判斷每個字元是不是相同。
1、2 Thread/ Runnable的原始碼:
Runable:
@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface <code>Runnable</code> is used
* to create a thread, starting the thread causes the object's
* <code>run</code> method to be called in that separately executing
* thread.
* <p>
* The general contract of the method <code>run</code> is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
public abstract void run();
}
Thread:實現了Runnalbe
2、維護部落格
2、1 目前多是偏java語言基礎\設計模式\框架