1、线程和进程的区别?
进程:是指一种自包容的运行程序,由程序系统直接管理,直接运行,有自己的地址空间,每个进程一开启都会消耗内存。
线程:是进程内部单一的顺序控制流,一个进程拥有多个线程,多个线程共享一个进程的内存空间
2、创建线程有几种方式?如何启动线程?
创建线程的两种方式:
声明一个Thread类的子类,并覆盖run()方法
class Mythread extends Thread{
public void run(){
}
}
声明一个实现Runnable接口的类,并实现run()方法
class Mythread implements Runnable{
public void run(){
}
}
启动线程调用start()方法
3、调用start()和调用run()的区别?
start()方法表示启动线程,会在主线程之外,产生新的子线程,子线程任务和主任务交替执行
而直接调用run()方法,是普通方法调用,不会在主线程之外产生新的子线程,这是要执行完run()以后,才能执行其他任务。
4、线程有几种状态?
就绪:start启动,运行run方法
睡眠:调用线程sleep方法
挂起:调用yieid方法,线程显示出让cpu控制权
阻塞:等待IO时间输入
死亡:线程run方法执行完毕
等待:调用Object的wait方法
新建:通过new的方式产生一个新线程对象
运行:执行run方法
5、什么是线程优先级?分为几级?
线程优先级:当两个线程同时处于就绪状态,要求得到执行时,优先级高的线程会优先得到执行
优先级分为10级,1-10,数字越大,优先级越高
setPriority(int newp) 设置优先级
6、什么是线程同步?线程同步使用什么关键字?同步会造成什么结果?
线程同步:当两个或两个以上的线程同时访问一个资源时为了保护资源的数据安全只允许同一时间一个线程进行访问,别的线程需要等待该线程放弃对资源的使用权时,才能继续访问,线程同步也称为线程安全。
7、wait和sleep的区别?
1. sleep方法在线程类Thread定义,wait方法在Object中定义
2. wait方法只能放在同步方法或同步块中,表示当前线程对资源进行等待,sleep方法可以放在任何位置,表示当前线程休眠
3. wait方法要释放对象锁,sleep方法不会释放对象锁
4. wait方法使用后,线程需要notify唤醒后才能继续执行,而sleep在休眠结束后,线程自动继续执行
8、集合的作用是什么?集合框架的API结构是怎样的?
主要是存取数据元素。
java.lang.Object
java.awt.List
9、List、Set、Map集合各自有什么特点?
List:有顺序以线性方式存储,可以存放重复对象
Set集合里面的元素不能重复,加进去元素位置和取元素出来的位置不同
Map:键必须是唯一
10、集合元素如何添加?如何删除?
List:添加:list.add(); 删除:list.remove();
Set:添加:set.add(); 删除:set.remove();
Map:添加:map.put(); 删除:map.remove();
11、集合如何遍历?
①迭代器
Iterator<Student> it = stuSet.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
②
for (Student student : stuSet) {
System.out.println(student);
}
12、List接口实现类ArrayList、Vector、LinkedList的区别?
ArrayList:底层部分使用数组实现,遍历速度快,中间插入和删除元素速度慢,线程不安全;
vector:底层部分同样使用数组实现,线程安全的类;
LinkedList:采用双项链表实现,每个元素除了存放数据以外,还要存放上一个和下一个元素的地址,遍历速度慢,中间插入删除元素速度快;
13、集合如何进行排序?
Collections.sort(list);
14、流按照输入输出方向分有几种?相对于什么而言?
流按照方向分:输入流和输出流,以内存作为参照物。
当从数据源中将数据读取到内存中时,叫输入流(读取流)。
当将内存中的数据写入要数据源时,叫输出流(写入流)。
15、流按照传输内容分有几种?各自的父类是什么?
流按照传输的内容分:字节流和字符流,对象流。
[字节流的父类:InputStream(读取流) ][ OutputStream(写入流)]
[字符流的父类:Reader ][ Writer]
16、操作流时,如果文件不存在会出现什么情况?如果流不关闭会出现什么情况?
操作文件流时,如果文件不存在,那么读取流会抛出文件未找到异常,而写入流,会创建新文件。
流操作以后必须关闭操作,否则不仅浪费内存资源,而且写入流有可能写不进数据。
17、如何判断一个文件是否存在?如何创建一个目录?如何知道一个目录中有多少文件?
File file = new File(path);
//判断文件夹是否存在,如果不存在则创建文件夹
if (!file.exists()) {
file.mkdir();
}
file.listFiles()
18、什么是对象序列化?如何实现对象序列化?
序列化:当需要堆对象进行传输时由于对象中的数据很庞大,无法直接传输,那么在传输之前需要将对象打散成二进制的序列,一遍遍传输,这个过程称为序列化过程,到达目的地后,有需要将二进制序列还原成对象,这个过程称为反序列化过程。
所有需要实现对象序列化的对象必须实现Serializable接口
19、TCP/IP协议分为几层?
四层:
应用层
传输层
网络互联层
网络接口层
20、什么是端口?常见端口有哪些?
每个端口对应着相应的服务
Telnet协议tel 23
简单邮件传输协议 smtp 25
文件传输协议 ftp 21
超文本传输协议http 80
21、TCP和UDP的区别是什么?
TCP协议:
较可靠的双向流协议
三次握手
提供消息确认,错误检测和错误回复等服务,如果数据在传输过程中有损耗,有遗失,会要求发送方重新发送,从而保证数据完整性
UDP协议:
比较不可靠,如果数据在传输中有损耗,不会要求重新发送,优点速度快
22、什么是XML?XML声明是怎样的?XML注释是怎样的?
XML:可扩展的标记语言,以标记和子标记方式描述对象数据
每个xml文档必须有且只有一个根元素
根元素是一个完全包括文档中其他所有元素的元素
所有元素都必须在根元素中定义
声明语句<?xml version="1.0" encoding="UTF-8"?>
<!-- -- >
23、一个格式良好的XML有哪些规定?
语法规范:
- 必须有声明语句<?xml version="1.0" encoding="UTF-8"?>
- 必须有且仅有一个根元素
- 标记大小写
- 属性值引号
- 标记成对
- 空标记关闭<a/>
- 元素正确嵌套
24、格式良好的XML和有效的XML有什么区别?
有效的xml除了要满足xml规范外,还要满足相应DTD和Schema定义的元素规则
有效的xml一定是格式良好的,但良好的xml不一定是有效的
25、DOM和SAX有什么区别?
文档对象模型DOM,一种基于树结构的API
xml简单API SAX,一种事件驱动的API
26、下面代码执行结果是什么?
public class MyThread extends Thread {
public void start(){
System.out.println("执行start");
}
public void run(){
System.out.println("执行run");
}
public static void main(String[] args) {
MyThread m = new MyThread();
m.start();
}
}
执行start
27、假定C盘下没有1.txt文件。在执行下面代码后会发生什么情况?
Writer w = null;
try {
w = new FileWriter("c:/1.txt");
bw.write(“abcde”);
} catch (IOException e) {
e.printStackTrace();
}
java.io.FileNotFoundException: c:\1.txt 拒绝访问