Junit单元测试、NIO(异步IO)
- 1.单元测试:单独的测试某一个方法的运行
- 2.导完是不是可以删除jar包?
- 3.注解是一个数据类型
- 4.点击类的三角,会全部执行,但是不是按顺序运行的
- 5.什么测试方法可以直接运行?
- 6.想运行静态等方法怎么办
- 7.Junit相关注解
- 8.测试方法注意事项
- 9.同步异步,阻塞非阻塞
- 10.请说出“同步”与“异步”的区别。
- 11.请说出“阻塞”与“非阻塞”的区别。
- 12.字符流底层也是用的字节数组,是不是跟bytebuffer,一样啊???
- 13.请说出Buffer的allocate()与allocateDirect()方法的区别。
- 14.系统内存比堆内存读取要快嘛?
- 15.为啥但是放在系统内存中的ByteBuffer我们不能直接使用 ?
- 16.ByteBuffer的使用
- 17.ByteBuffer 是缓冲区,可用来减少物理磁盘的读写。
- 18.mark标记,reset:重置position位置到mark。
- 19.run with coverage的作用?
- 20.高速缓存,MapTypeBuffer原理。--内存到内存的复制
- 21.实时映射,是咋做出来的
- 22.能把大文件分成 n个小文件再复制不?
- 23.内核空间和用户空间
- 24.MapperBtyeBuffer写的比被读取文件多了:会报cannot extend file to required size--无法将文件扩展到所需大小
- 25.请说出Buffer的flip()方法的作用。
1.单元测试:单独的测试某一个方法的运行
2.导完是不是可以删除jar包?
不能删除,删除了,类里面就不能导包了
3.注解是一个数据类型
4.点击类的三角,会全部执行,但是不是按顺序运行的
点击模块run all test,里面的所有test方法也会运行。
5.什么测试方法可以直接运行?
1)没有添加@Test注解的方法,不能junit单独运行
2)junit只能运行,public修饰的,没有返回值,没有参数的非静态方法
6.想运行静态等方法怎么办
1)先创建一个可以直接运行的测试方法
2)在里面调用其他方法。
7.Junit相关注解
@Test:可以单独的执行某一个方法
@Before:用来修饰方法,该方法会在每一个测试方法执行之前自动执行一次。
@After:用来修饰方法,该方法会在每一个测试方法执行之后自动执行一次。
@BeforeClass:用来静态修饰方法,该方法会在所有测试方法之前自动执行一次,而且只执行一次。
@AfterClass:用来静态修饰方法,该方法会在所有测试方法之后自动执行一次,而且只执行一次。
注:before不能加在静态方法上
8.测试方法注意事项
1)junit的注意事项:不是所有的方法都能使用junit单元测试运行
1.没有添加@Test注解的方法,不能junit单独运行
2.junit只能运行,public修饰的,没有返回值,没有参数的非静态方法
2)如何运行测试方法
选中方法名 --> 右键 --> Run ‘测试方法名’ 运行选中的测试方法
选中测试类类名 --> 右键 --> Run ‘测试类类名’ 运行测试类中所有测试方法
选中模块名 --> 右键 --> Run ‘All Tests’ 运行模块中的所有测试类的所有测试方法
3)如何查看测试结果
绿色:表示测试通过
红色:表示测试失败,有问题
4)断言,Assert.asserEquals,预判错误就会抛断言异常。
9.同步异步,阻塞非阻塞
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7GWzULDw-1639407035397)(C:\Users\xiu\AppData\Roaming\Typora\typora-user-images\1639360751654.png)]
阻塞:Sever Socket.accpet 和 is.read 也是阻塞的方法。
10.请说出“同步”与“异步”的区别。
同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调用返回,才会进行下一步;而异步则相反,其他任务不需要等待当前调用返回,通常依靠事件、回调等机制来实现任务间次序关系
11.请说出“阻塞”与“非阻塞”的区别。
在进行阻塞操作时,当前线程会处于阻塞状态,无法从事其他任务,只有当条件就绪才能继续,比如ServerSocket新连接建立完毕,或者数据读取、写入操作完成;而非阻塞则是不管IO操作是否结束,直接返回,相应操作在后台继续处理。
12.字符流底层也是用的字节数组,是不是跟bytebuffer,一样啊???
13.请说出Buffer的allocate()与allocateDirect()方法的区别。
在堆中创建缓冲区:allocate(int capacity)
在系统内存创建缓冲区:allocatDirect(int capacity)
在堆中创建缓冲区称为:间接缓冲区,在系统内存创建缓冲区称为:直接缓冲区,间接缓冲区的创建和销毁效率要高于直接缓冲区,间接缓冲区的工作效率要低于直接缓冲区。
14.系统内存比堆内存读取要快嘛?
系统内存和系统交互的快
15.为啥但是放在系统内存中的ByteBuffer我们不能直接使用 ?
因为这是内核的内存,只能由操作系统来使用。
16.ByteBuffer的使用
ByteBuffer有三个重要的属性:
capacity:ByteBuffer底层其实是一个字节数组,capacity代表数组的长度。
position:表示下一个要操作(读或写)的元素的位置。
limit:在写模式下,limit=capacity,在读模式下,limit代表数组中实际元素的个数。limit:限制多少长度可用。
注意:存满了再存会咋样?
会报错。
17.ByteBuffer 是缓冲区,可用来减少物理磁盘的读写。
18.mark标记,reset:重置position位置到mark。
reset必须配合mark使用。
19.run with coverage的作用?
查看单元测试覆盖度
20.高速缓存,MapTypeBuffer原理。–内存到内存的复制
被读取的文件,和被写入的文件,都会实时映射到内存中
所以就是内存到内存的复制。
21.实时映射,是咋做出来的
看MappedByteBuffer底层原理
22.能把大文件分成 n个小文件再复制不?
可以逻辑分段存储,不可以物理分段。
23.内核空间和用户空间
内核空间 是操作系统 内核代码运行的地方,用户空间 是 用户程序代码运行的地方。当应用进程执行系统调用陷入内核代码中执行时就处于内核态,当应用进程在运行用户代码时就处于用户态。
24.MapperBtyeBuffer写的比被读取文件多了:会报cannot extend file to required size–无法将文件扩展到所需大小
25.请说出Buffer的flip()方法的作用。
Buffer有两种模式,写模式和读模式。在写模式下调用flip()之后,Buffer从写模式变成读模式。
那么limit就设置成了position当前的值(即当前写了多少数据),postion会被置为0,以表示读操作从缓存的头开始读,mark置为-1。