不积跬步,无以至千里;不积小流,无以成江海。
本期继续更新10道Java面试题:涉及IO流,多线程,类,MySQL数据库等知识点。
Java工程师常见面试题集锦(一)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/85602533
Java工程师常见面试题集锦(二)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/86138938
如果觉得文字学习较慢,也可以跟着老师一起视频学习:
Java面试题视频学习链接:https://edu.csdn.net/course/detail/10533
21.Java中的所有的流可以分为几大类,它们的名字是什么,各代表什么
分为:
字节输入流 InputStream
字节输出流 OutputStream
字符输入流 Reader
字符输出流 Writer
所有流都是这四个流的子类
22. IO流怎样读取文件的?
使用File对象获取文件路径,通过字符流Reader加入文件,使用字符缓存流BufferedReader处理Reader,再定义一个字符串,循环遍历出文件。代码如下:
File file = new File("d:/spring.txt");
try {
Reader reader = new FileReader(file);
BufferedReader buffered = new BufferedReader(reader);
String data = null;
while((data = buffered.readLine())!=null){
System.out.println(data);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
23.PrintStream、BufferedWriter、PrintWriter的比较?
1)PrintStream类的输出功能非常强大,通常如果需要输出文本内容,都应该将输出流包装成PrintStream后进行输出。它还提供其他两项功能。与其他输出流不同,PrintStream 永远不会抛出 IOException,而是异常情况仅设置可通过 checkError 方法测试的内部标志。另外,为了自动刷新,可以创建一个 PrintStream;
2)BufferedWriter:将文本写入字符输出流,缓冲各个字符从而提供单个字符,数组和字符串的高效写入。通过write()方法可以将获取到的字符输出,然后通过newLine()进行换行操作。BufferedWriter中的字符流必须通过调用flush方法才能将其刷出去。并且BufferedWriter只能对字符流进行操作。如果要对字节流操作,则使用BufferedInputStream;
3) PrintWriter的println方法自动添加换行,不会抛异常,若关心异常,需要调用checkError方法看是否有异常发生,PrintWriter构造方法可指定参数,实现自动刷新缓存(autoflush);
24.sleep() 和 wait() 有什么区别?
1)sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
2)wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
25.sleep()和yield()有什么区别?
1)sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会;
2)线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态;
3)sleep()方法声明抛出InterruptedException,而yield()方法没有声明任何异常;
4)sleep()方法比yield()方法(跟操作系统相关)具有更好的可移植性。
Java工程师常见面试题集锦(一)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/85602533
Java工程师常见面试题集锦(二)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/86138938
如果觉得文字学习较慢,也可以跟着老师一起视频学习:
Java面试题视频学习链接:https://edu.csdn.net/course/detail/10533
26.MySQL的数据库导入导出
配置:
首先找到mysql的安装目录,进入bin目录下复制路径
将mysql的bin目录粘贴在计算机环境变量的path中
授权:
登录mysql
将某张表的某个权限赋给某个用户
grant [select,insert,update,delete,create,drop] on [databaseName].[tableName] to [userName]@[userIP] identified by [‘连接口令’]
grant select,insert,update,delete,create,drop on oa_ssh.user to root@[IP] identified by 'root';
将所有库的所有权限赋给某个用户
grant all privileges on *.* to [userName]@[userIp] identified by [‘连接口令’]
grant all privileges on *.* to root@[IP] identified by ‘root';
将所有库的所有权限赋给所有用户
grant all privileges on *.* to root@'%' identified by ‘root’;
导出本地数据库:
mysqldump -u 用户名 -p 数据库名 > 磁盘:导出的文件名(加后缀)
远程导出数据库:
mysqldump -h IP -u 用户名 -p 数据库名称 >导出的文件名(加后缀)
远程导出数据表:
mysqldump -u root -p -d --add-drop-table 数据库名称 > 导出文件名(加后缀)
导入数据:
mysql -u root -p登录成功后 ==》 source 磁盘:导入的文件名(加后缀)
27.类初始化过程
①一个类要创建实例需要先加载并初始化该类
umain方法所在的类需要先加载和初始化
②一个子类要初始化需要先初始化父类
③一个类初始化就是执行<clinit>()方法
u<clinit>()方法由静态类变量显示赋值代码和静态代码块组成
u类变量显示赋值代码和静态代码块代码从上到下顺序执行
u<clinit>()方法只执行一次
28.实例初始化过程
实例初始化就是执行<init>()方法
u<init>()方法可能重载有多个,有几个构造器就有几个<init>方法
u<init>()方法由非静态实例变量显示赋值代码和非静态代码块、对应构造器代码组成
u非静态实例变量显示赋值代码和非静态代码块代码从上到下顺序执行,而对应构造器的代码最后执行
u每次创建实例对象,调用对应构造器,执行的就是对应的<init>方法
u<init>方法的首行是super()或super(实参列表),即对应父类的<init>方法
29.方法的重写Override
①哪些方法不可以被重写
ufinal方法
u静态方法
uprivate等子类中不可见方法
②对象的多态性
u子类如果重写了父类的方法,通过子类对象调用的一定是子类重写过的代码
u非静态方法默认的调用对象是this
uthis对象在构造器或者说<init>方法中就是正在创建的对象
30.MySQL中myisam与innodb的区别,至少5点
1)5点不同:
1>.InnoDB支持事物,而MyISAM不支持事物
2>.InnoDB支持行级锁,而MyISAM支持表级锁
3>.InnoDB支持MVCC, 而MyISAM不支持
4>.InnoDB支持外键,而MyISAM不支持
5>.InnoDB不支持全文索引,而MyISAM支持。
2)innodb引擎的4大特性:
插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead)
3)2者selectcount(*)哪个更快,为什么?
myisam更快,因为myisam内部维护了一个计数器,可以直接调取。
Java工程师常见面试题集锦(一)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/85602533
Java工程师常见面试题集锦(二)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/86138938
如果觉得文字学习较慢,也可以跟着老师一起视频学习:
Java面试题视频学习链接:https://edu.csdn.net/course/detail/10533