练习题(答案都是上课讲的知识点)
IO
填空
-
IO当中4个父类分别是( ) ( ) ( ) ( )
- 字节输出流 OutputStream - 字节输入流 InputStream - 字符输出流 Writer - 字符输入流 Reader
-
IO当中分类
-
按照数据流向分,可以分为( )流, ( )流, 以( )为参照物
输入流/输出流 内存
-
按照数据类型分, 可以分为( )流, ( )流.
- 字节流:一连串的0 1 二进制,0000 0001,逻辑单位是字节 - 字符流: 一连串的字符序列,(可以理解为一种文化符号, 你, の, abc)
-
-
可以通过( ), ( ) 方式实现换行功能
// \r\n \r \n //out.write("\r\n".getBytes()); //out.write("\r".getBytes()); //out.write("\n".getBytes()); // System.lineSeparator()默认换行符
-
实现文件追加功能,应该使用FileOutputStream的哪个构造方法(
| FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 | | ------------------------------------------------------------ | | FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 | | FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。 | | FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。 |
)
-
使用FileInputStream, 用while循环读取数据的时候, 我们判断读取到末尾的判断依据是( )
返回值是-1
-
使用InputStream中的read() 方法的返回值代表什么意思? ( )
读取单个字节 ,返回值是字节值 readData
-
使用InputStream中的read(byte[] b) 方法的返回值代表什么意思? ( )
返回值代表int, 代表数组。
-
// 假设a.txt当中有一个字符串 "abcdef" // 代码片段 FileInputStream in = new FileInputStream("a.txt"); byte[] bytes = new byte[4]; readCount1 = in.read(bytes); // 请问 此时 bytes数组中的值是什么?? readCount1的值是几?? readCount2 = in.read(bytes); // 请问 此时 bytes数组中的值是什么?? readCount2的值是几??
-
//有个a.txt文件,里面有一行字符串abcdef FlieOutputStrem out = new FileOutputStream("a.txt") // 此时a.txt文件中是什么? out.write(97); // 此时a.txt文件中是什么? out.close()
-
// a.txt中有字符串 "五五开卢本伟white" public static void main(String[] args){ FileInputStream in = new FileInputStream("a.txt") FileOutputStream out1 = new FileOutputStream("b.txt") FileOutputStream out2 = new FileOutputStream("c.txt") copyFile(in , out1); copyFile(in , out2); in.close(); out1.close(); out2.close(); } public void copyFile(InputStream in, OutputStream out){ int readCount; byte[] bytes = new byte[1024]; while((readCount = in.read(bytes)) !=-1){ out.write(bytes,0,readCount); } } // 请问,b.txt文件的内容是什么?? // 请问, c.txt文件中内容是什么??
-
BufferedInputStream与BufferedOutputStream中默认缓冲区大小是(8kB )
-
BufferedWriter与BufferedReader中默认缓冲区大小是(16kB )
-
BufferedWriter中特有的方法是( newline() //换行。)
-
BufferedReader中特有的方法是( readline() //转行取字符串。 )
-
使用BufferedReader中特有的方法,使用while循环读取的时候,我们判断读取结束的依据是什么( !=null )
-
FileWirter out= new FileWirter("a.txt") out.write("哈哈哈") // 执行到这里 请问此时a.txt文件中的内容是什么?? 空 out.flush(); // 执行到这里 请问此时a.txt文件中的内容是什么?? 哈哈哈
-
采用DataOutputStream先writeByte, 再writeInt, 读取的时候采用DataInputStream, 先使用( )方法, 再使用( )
-
System.out的默认输出设备是( ), System.out是( )类型
-
System.in的默认输入设备是( ), System.in的是( 普通的字节输入流 )类型
-
序列化反序列化对象使用( ) , ( ) 类, 对象所在的类必须实现( ) 接口,才可以自动序列化所有的内容
-
( )关键字可以让类中的属性不被序列化
-
类型 字节输出流 字节输入流 字符输出流 字符输入流 抽象基类 文件相关 缓冲相关 转换相关 数据相关 打印相关 对象相关
选择
- 提供printLn()方法和print()方法的类是(b )
A. PrintStream B. System C. InputStream D. DataOutputStream
- 下列说法不正确的是( d)
- A. InputStream与OutputStream类通常用来处理字节流
- B. Reader与Writer通常来处理字符流
- C. Java中IO流的处理通常分为输入流和输出流2个部分
- D. File类是输入/输出流的子类
- 与InputStream相对应的Java系统中的标准输入对象是(a )
A. System.in B. System.out C. System.error D. System.exit()
- InputStreamReader 类提供的功能是( d)
A. 数据校验 B.文本行计数 C. 压缩 D.将字节流变为字符流
- 如果打印流PrintWriter开启了自动刷新功能,下列使用哪个方法不会启动自动刷新(a )
A . print() B . printLn() C. format() D. printf()
简答
-
为什么要close?
//系统调用的资源释放
-
try-with-resources 语法结构怎么写?有什么特点? 资源可以自动关闭 autocloseable 跟传统try-catch有啥不一样?
-
字符流的本质是什么?
字符流的本质 = 字节流 + 编码表
-
常见编码表有哪些? 分别几个字节代表一个字符?
ASCII:美国标准信息交换码。
用一个字节的7位可以表示。0000 0000 - 0111 1111
ISO8859-1:拉丁码表。欧洲码表
用一个字节的8位表示。GB2312:中国的中文编码表。2的16次方
GBK:中国的中文编码表升级,融合了更多的中文文字符号。
GB18030:GBK的取代版本
BIG-5码 :通行于台湾、香港地区的一个繁体字编码方案,俗称“大五码”。Unicode:国际标准码,融合了多种文字。
UTF-8:可变长度来表示一个字符。
UTF-8不同,它定义了一种“区间规则”,这种规则可以和ASCII编码保持最大程度的兼容:它将Unicode编码为00000000-0000007F的字符,用单个字节来表示 0111 1111 = 7F
它将Unicode编码为00000080-000007FF的字符用两个字节表示
它将Unicode编码为00000800-0000FFFF的字符用3字节表示 3个中文1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxxutf-16:
jvm使用的编码表,用2个字节来编解码
char : 2 字节
ASCII
ISO8859-1
utf-8
GBK
idea 默认的是UTF-8
win系统 默认的是GBK
-
对于字符输出流, 为什么可以直接close文件中就有数据?
答:因为有个flush方法。
-
序列化流主要有什么作用?
答:
-
transient关键字有啥作用?
答:
-
serialVersionUID有啥作用?
多线程
填空
- java多线程可以依靠( ) , ( ) , ( ) 三种方式实现
- java程序运行时,至少启动( ) 个线程, 分别是( ) , ( ).
- java采用( )线程的调度方式, 所以线程的执行是( )的.
- 对于join方法
- 谁等待? ( )
- 等待谁? ( )
- 通过( )API 把一个线程设置为守护线程.
- 线程的优先级范围是( ) - ( )
- 获取当前线程对象的引用,使用哪个API ( )
- 线程的生命周期要经历5种状态 , 分别是( ) , ( ) , ( ) , ( ), ( )状态
- 多线程产生数据安全问题的原因有3个,分别是
- ( )
- ( )
- ( )
- 什么是原子操作? ( )
- Object中提供的( ), ( ) , ( ) 三个方法可以控制线程
- 当前有3个线程处于阻塞状态, 此时执行notify方法将会唤醒其中 ( ) 线程
- Executors中产生3种线程池,分别是
- 带缓存的线程池( )
- 固定数量的线程池( )
- 固定1个数量的线程池( )
- 关闭线程池可以采用哪两种方式?
- ( )API, 特点是( )
- ( )API, 特点是( )
选择
- 线程的启动方法是( )
A. run() B. start() C. begin() D. accept()
- 设置优先级的方法是( )
A. setPriority() B. gerPriority() C. getName() D.setName()
- 下列( ) 关键字用来对对象加锁
A. serialize B. transient C. synchronized D. static
- 下面( )父类或父类接口是无法实现多线程子类定义的?
A. Serializable B. Thread C. Runnable D. Callable
简答题
- 什么是线程?什么是进程?两者什么关系?
- 什么是串行,并行,并发?
- 什么是同步,异步?
- 启动线程是start方法不是run方法,这2个有什么区别?
- 守护线程的特点是什么?
- 为什么Runnable中的run方法会运行在子线程中?
- 简述3种多线程实现方式的区别?
- 什么是死锁?怎么解决?
- wait方法与sleep方法有什么区别?
- synchronized同步代码块中的锁对象是谁?同步方法中锁对象是谁?静态方法?
- 为什么wait notify方法是定义在Object中 而不是在Thread中?
网络编程
UDP
填空
-
UDP以( ) 方式进行传输.
-
UDP客户端步骤( ), ( ), ( ), ( )
-
A. 发送数据报包到目的IP的目的端口(send方法)
B. 创建UDP的socket对象
C. 将要发送的数据封装到数据报包
D. 创建用于发送的数据报包
E. 释放资源
-
-
UDP接收端步骤( ), ( ) , ( ), ( )
-
A . 接收数据报包(receive方法)
B. 创建接收端的Socket对象
C. 创建用于接收端的数据报包
D. 解析数据报包中的数据
E. 释放资源
-
-
通过( )API获取InetAddress对象
-
通过( )构造方法创建用于发送的数据报包对象DatagramPacket对象
-
通过( )构造方法创建用于接收的数据报包对象
-
通过( )API获取数据报包中的信息
简答题
- UDP协议什么特点?
- 端口号可用范围?
- 先启动接收端还是发送端? 如果先启动发送端会报错吗?
- 端口号被占用会有什么异常?
TCP
填空题
-
TCP以( ) 方式进行传输
-
TCP客户端的步骤是( ) ( ) ( ) ( )
-
A. 从流中读写数据
B. 创建客户端Socket对象
C. 从Socket对象中获取输入输出流
D .释放资源
-
-
TCP服务端的步骤是( ) ( ) ( ) ( )
-
A. 释放资源
B. 创建服务端Socket对象(ServerSocket)
C. 建立连接(accept)
D. 从socket中获取输入输出流
E. 从流中读取写入数据
-
简答题
- TCP协议什么特点?
- 有1个服务端,多个客户端的时候怎么办?
反射
选择题
- 编译java源文件产生的字节码文件的扩展名是什么( )?
A. java B. class C. html D. exe
- 下面关于Class类对象的实例化对象取得,错误的是( )
A. 利用Object类中的getClass方法
B.利用Class类的构造方法取得
C.利用类.class方法取得
D.通过Class.forName() 取得
- 下面的Class类中的方法.( ) 个可以取得指定类型中全部public方法的定义
A. public Method [] getMethods()
B. public Field [] getFields()
C. public Field [] getDeclaredFields()
D. public Constructor [] getConsts()
填空
- 忽略java语法检查使用哪个API ( )
- 从.properties文件中获取相应Key对应的value,应该用哪个API ( )
- 使用字节码文件对象(Class对象)可以直接实例化对象, 有一个前提条件是( )
简答题
- 类加载过程是什么?
- jvm规范中的类加载时机是哪些?
- 类加载器都有哪些?
- 双亲委派模型是什么?
- 什么是反射技术?
- 带declared跟不带的API有什么区别? 带s跟不带s的API有什么区别?
- 获取字节码文件对象的方式有哪三种?
注解
选择题
- 下面哪个不属于java语言?
A. // 注释 B. – 注释 C. /** 注释 / D. / * 注释/
填空
-
定义注解的关键字是什么( )
-
使用value作为注解的属性时,有一个前提条件是( )
-
给注解设置默认值的关键字是( )
-
注解的默认保留级别是( )
-
想要把注解加到成员变量上, 应该使用( )注解的( )属性
-
判断是否使用了注解使用哪个API( )
-
获取注解实例使用哪个API( )
简单题
- @Target注解作用是啥?
- @Retention注解作用是啥?
- 注解的属性可以是哪些数据类型?
GC
简答题
-
jvm运行时数据区怎样划分的?
- 哪些是线程私有的?
- 哪些是共享的?
-
显式内存管理与隐式内存管理的特点?
- 显式的优点?
- 显式的缺点?
- 隐式的优点?
- 隐式的缺点?
-
什么是内存泄漏?
-
引用计数法思想是什么?
- 弊端是什么?
-
根搜索算法思想是什么?
- 哪些可以作为GC Roots?
-
标记清除算法思想是什么?
- 弊端是什么
-
标记复制算法思想是什么?
- 弊端是什么?
-
标记整理算法思想是什么?
- 弊端是什么?
-
分代收集理论
- 2个假说是什么?
- 分代收集算法分为哪两个代?
- 新生代分为哪些区域?
- 什么时候新生代的对象被移动到老年代?
- 新生代采用什么算法回收垃圾?
- 老年代采用什么算法回收垃圾?
etention注解作用是啥?
3. 注解的属性可以是哪些数据类型?
GC
简答题
-
jvm运行时数据区怎样划分的?
- 哪些是线程私有的?
- 哪些是共享的?
-
显式内存管理与隐式内存管理的特点?
- 显式的优点?
- 显式的缺点?
- 隐式的优点?
- 隐式的缺点?
-
什么是内存泄漏?
-
引用计数法思想是什么?
- 弊端是什么?
-
根搜索算法思想是什么?
- 哪些可以作为GC Roots?
-
标记清除算法思想是什么?
- 弊端是什么
-
标记复制算法思想是什么?
- 弊端是什么?
-
标记整理算法思想是什么?
- 弊端是什么?
-
分代收集理论
- 2个假说是什么?
- 分代收集算法分为哪两个代?
- 新生代分为哪些区域?
- 什么时候新生代的对象被移动到老年代?
- 新生代采用什么算法回收垃圾?
- 老年代采用什么算法回收垃圾?