Java面试题

面向对象和面向过程
面向过程:分析解决问题所需步骤,用函数一一实现并以此调用
面向对象:把构成问题的事务分解成各个对象(为了描述整个解决问题的步骤中的行为),

面向对象特质:
封装:把对象的属性和行为封装起来,就是 类
继承:多个类具有相同属性和行为,抽取共性提取父类,创建相似的类只需继承父类
多态:多种表现形态,具有多重实现方法,同一个接口,不同的实例而执行不同的操作

arrayList 和 vector
arrayLsit:基于object[],每个元素有对应索引,查询效率高,自增长(空间不足增长50%),线程不安全
vector:基于object[],自增长(空间不足增长一倍),线程安全,性能低

Maplist:基于map接口实现,键值对存储,用做数据封装,无序且非同步,底层存储Entry对象
原理: key传给put方式时,调用hashcode计算hash值,得到对应table位置,如果对应table已经存在元素,hashmap通过链表把冲突元素组织起来,当冲突元素超过限制,用红黑树替换链表

IO常见子类和特点
FileInputStream,FileOutputStream
节点流,源数据端和目的端都是磁盘文件,允许通过文件的路径名来构造相应的流
BufferInputStream,BufferOutputStream
缓冲流,把数据累积到一个大数据块,再成批写出
InputStreamReader,OutputStreamWriter
构建对应的流时会自动转换,把缺省的编码集转换为Unicode字符

NIO:
IO是阻塞的,影响程序性能,NIO是非阻塞,提高程序性能和cpu利用率

NIO 和  IO区别
NIO:阻塞,面向缓冲区,有选择器且允许一个单独线程监视多个通道并选择一个
IO:面向流,阻塞,无选择器

IO工作机制
先创建File对象,创建读取文件的操作对象,创建关联磁盘文件的文件描述符FileDescriptor,控制磁盘文件

多线程
1.集成Thread
2.实现Runnable
3.线程池

线程状态
1.新建状态 
2.就绪状态
3.运行状态
4.阻塞状态

阻塞情况
1.线程执行了某对象的wati()方法,
2.试图获取某个对象的同步锁
3,当前线程执行sleep方法,其他现场调用join方法,发出IO请求

终止线程
1.run方法完成后线程终止
2.Thread的interrupt方法
3.Thread的stop方法

Sleep() 和 yield() 和 wait()
sleep:线程休眠 不考虑其他线程优先级  进入阻塞状态抛出异常,移植性教好
yield:暂停线程,执行其他同等优先级或更高优先级的现场,进入就绪状态,不抛异常,
wait:线程放弃对象锁,只有发出notify,线程才会进入对象锁定池获取对象,进入运行状

Synchronized 和 lock
synchornized:持有锁资源,会自动释放锁
lock:更精确的线程语义和性能,需要手工释放,可以非阻塞方式拿锁

java堆栈
栈:基本数据类型的变量,对象的引用变量(定义一个变量,java在栈中为其分配内存,超过作用域后,释放内存)
堆:对象和数组,由GC回收
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值