SpringMVC
Spring MVC為我們提供了一個基于組件和松耦合的MVC實現框架。在使用Java中其它MVC框架多年之后,面對Spring MVC有一種相見恨晚的感覺。Spring MVC是如此的優雅,輕盈與簡潔, 讓人從其它框架的桎梏解脫出來。
SVN
SVN是版本控制工具,對應的比較熱門的版本控制工具還有git.
首先就是要對SVN的客戶端服務端進行配置
然后就主要是對多人代碼的管理了,更刪改查
包括恢復等等,還有一些常見的問題等等
1、每天早上上班要update SVN,每天下班要commit SVN。
2、查看是誰動了我的代碼,右鍵 tortoise 后查看 log 日志。
3、文件被別人刪除,在空白處右擊,show log,可以查看整個庫的所有增刪改查操作記錄,如果單個文件還在,只想查看該文件記錄,那就在該文件上查看 log(自從新建一個文件后,對該文件的所有操作都會被服務器倉庫記錄下來,隨時可以可別人商量恢復)。
4、權限清空:TortoiseSVN——Settings——Seved Date——Clear clear all。
5、commit 上面有一塊區域是做注釋的(推薦常用)。
6、良好沖突:
如果A和B都在修改了代碼,B先于A上交,當A去commit的時候,就會提交失敗,必須先更新你的本地文件,那么B的代碼會和A的代碼同時存在(兩個人修改的不是一個地方算好的情況了)。
7、較差沖突:
有沖突時提交會產生三個文件,.mine是自己改好之后的代碼,rx,ry,x,y兩個數字較小者是我改之前的代碼,數字較大者,是服務端的代碼
1)如果要保留自己的版本,就用mine覆蓋原來的代碼,再次提交
2)如果認為對方是正確的,就revert一下,這個時候已經拿到了最新的代碼(不一定非要這樣操作,但是這樣方便)
3)如果認為上一個版本是正確的,用版本較小的覆蓋(直接刪除改后綴名)
經驗1:如果Commit Failed!就不要點了ok繼續按update了,先把自己的代碼復制到一邊,再把那個文件revert,再update,再把放在一邊的文件重命名復制到相同文件夾下,選中兩個沖突的文件,TortoiesSVN->diff,左邊是最新的代碼,右邊的是我的,解決沖突之后兩個人最好都update一下。
經驗2:與歷史記錄比對:show log之后,同時選中兩個版本(比如現在到了第10版,那么要10/9先比較,看看有沒有差異,沒有差異,則比較9/8版,如果仍沒有差異,以此類推繼續比較),Compare revisions。
IO流
流是一組有順序的,有起點和終點的字節集合,是對數據傳輸的總稱或抽象。即數據在兩設備間的傳輸稱為流,流的本質是數據傳輸,根據數據傳輸特性將流抽象為各種類,方便更直觀的進行數據操作。
看圖呢,就可以發現IO流分為字節流和字符流,也可分為輸入流和輸出流
那么字節流和字符流有啥區別呢,字節流是基于字節(byte),可以用于所有文件類型的傳輸(.mp3,.mp4)、字符流基于字符(char),對于純文本文件的傳輸效率高于字節流,但不能用于其他類型的文件。
File類的使用
- java.io.File類用于表示文件(目錄)
- File類只用于表示文件(目錄)的信息(屬性)(名稱,大小等),不能用于文件內容的訪問
- RandomAccessFile java提供的對文件內容的訪問,既可以讀文件,也可以寫
- RandomAccessFile支持隨機訪問文件,可以訪問文件的任意位置
字節流
1.InputStream OutputStream
InputStream抽象了應用程序讀取數據的方式
OutputStream抽象了應用程序寫出數據的方式
2.EOF=End 讀到-1就讀到結尾
3.輸入流基本方法
int b=in.read(); 讀取一個字節無符號填充到int低八位。 -1是EOF
4.輸出流基本方法
out.write(int b) 寫出一個byte到流,b的低八位
5.FileInputStream----->具體實現了在文件上讀取數據
6.FileOutputStream----->實現了向文件中寫出byte數據的方法
7.DateOutputStream/DateInputStream
對“流”功能的擴展,可以更加方便的讀取int,long,字符等基本數據類型
DateOutputStream
writeInt()/writeDouble()/writeUTF()
8.BufferedInputStream BufferedOutputStream 字節緩沖流
兩個流類為IO提供了帶緩沖區的操作,一般打開文件進行讀寫操作時,都會加上緩沖
這種流模式提高了IO的【性能】
從應用程序中把輸入放入文件,相當于將一缸水倒入到另一個缸中:
FileOutputStream---->write()方法相當于一滴一滴地把水轉移過去
DateOutputStream---->write()方法會方便一些,相當于一票一票把水轉移過去
BufferedOutputStream---->write()方法更方便,相當于一票一票先放入桶中(緩沖區),再從桶中倒去過去
字符流
反射
反射呢,是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。
反射的操作都是編譯之后的操作,Java中集合的泛型,是防止錯誤輸入的,只在編譯階段有效。因此可以通過反射繞過編譯,就可以繞過泛型。
可以做些什么呢
- 在運行時判斷任意一個對象所屬的類(Class類)
- 在運行時構造任意一個類的對象
- 在運行時判斷任意一個類所具有的構造函數、成員變量和方法(Constructor類、Filed類和Method類)
- 在運行時調用任意一個對象的方法(方法反射:method.invoke(對象,參數列表))
- 生成動態代理
獲得Class對象的三種方式
class1 = Class.forName("net.xsoftlab.baike.TestReflect");
class2 = new TestReflect().getClass();
class3 = TestReflect.class;