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;