没有合适的资源?快使用搜索试试~ 我知道了~
面试精华,总结自2018年大厂校招面经,整理出来的高质量面试高频题。
资源推荐
资源详情
资源评论
第页共页
JAVA 常考点总结 11
目录
1 、尝试解决生产者与消费者问题 ......................................................................................................... 1
2 、如何对集合进行排序 ......................................................................................................................... 4
3 、 ConcurrentHashMap
原理分析 ................................................................................................... 8
4 、 NIO .................................................................................................................................................... 10
5 、 NIO
与传统
IO
的区别 ...................................................................................................................... 16
6 、 JDK1.8
新特性 ................................................................................................................................. 17
、
中的红黑树 ....................................................................................................................... 17
、 .......................................................................................................................... 17
、
表达式 .................................................................................................................................. 17
、
流 ........................................................................................................................................... 21
、并行流 ................................................................................................................................................ 30
、
类 ......................................................................................................................................... 32
1、尝试解决生产者与消费者问题
()使用 !与 "# !方法
package day1024;
import java.util.LinkedList;
/**
*
生产者消费者问题
*/
public class ProAndCon {
//
最大容量
public static final int MAX_SIZE = 10;
//
存储媒介
public static LinkedList<Integer> list = new LinkedList<>();
class Producer implements Runnable {
@Override
public void run() {
synchronized (list) {
//
仓库容量已经达到最大值
while (list.size() == MAX_SIZE) {
System.out.println("仓库已满,生产者" +
Thread.currentThread().getName() + "不可生产.");
try {
第页共页
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
list.add(1);
System.out.println("生产者" +
Thread.currentThread().getName() + "生产, 仓库容量为" + list.size());
list.notify();
}
}
}
class Consumer implements Runnable {
@Override
public void run() {
synchronized (list) {
while (list.size() == 0) {
System.out.println("仓库为空,消费者" +
Thread.currentThread().getName() + "不可消费.");
try {
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
list.removeFirst();
System.out.println("消费者" +
Thread.currentThread().getName() + "消费,仓库容量为" + list.size());
list.notify();
}
}
}
public static void main(String[] args) {
ProAndCon proAndCon = new ProAndCon();
Producer producer = proAndCon.new Producer();
Consumer consumer = proAndCon.new Consumer();
for (int i = 0; i <= 10; i++) {
Thread pro = new Thread(producer);
pro.start();
第页共页
Thread con = new Thread(consumer);
con.start();
}
}
}
()使用 $%&' 接口
阻塞队列实现生产者消费者模式超级简单,它提供开箱即用支持阻塞的方法 put()和
take(),开发者不需要写困惑的 wait-noty 代码去实现通信。BlockingQueue 一个接口,
Java5 提供了不同的现实,如 ArrayBlockingQueue 和 LinkedBlockingQueue,两者
都 是 先 进 先 出 ( FIFO ) 顺 序 。 而 ArrayLinkedQueue 是 自 然 有 界 的 ,
LinkedBlockingQueue 可选的边界。下面这是一个完整的生产者消费者代码例子,对比
传统的 wait、noty 代码,它更易于理解。
package day1024;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;
/**
*
解决生产者与消费者问题
*
采用阻塞队列
BlockingQueue
*/
public class ProAndCon2 {
public static BlockingQueue<Integer> queue = new
LinkedBlockingDeque<>(10);
class Producer implements Runnable {
@Override
public void run() {
for (int i = 1; i <= 10; i++) {
try {
queue.put(i);
System.out.println("生产者生产商品,商品编号为" + i);
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
第页共页
}
class Consumer implements Runnable {
@Override
public void run() {
for (int i = 1; i <= 10; i++) {
try {
queue.take();
System.out.println("消费者消费商品,商品编号为" + i);
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
ProAndCon2 proAndCon2 = new ProAndCon2();
Producer producer = proAndCon2.new Producer();
Consumer consumer = proAndCon2.new Consumer();
Thread pro = new Thread(producer);
pro.start();
Thread con = new Thread(consumer);
con.start();
}
}
2、如何对集合进行排序
Comparable 和 Comparator 区别比较
Comparable 是排序接口,若一个类实现了 Comparable 接口,就意味着“该类支持排序”。而 Comparator 是比
较器,我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
Comparable 相当于“内部比较器”,而 Comparator 相当于“外部比较器”。
两种方法各有优劣, 用 Comparable*简单, 只要实现 Comparable*接口的对象直接就成为一个可以比较的对象,
但是需要修改源代码。 用 Comparator*的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义的对
第页共页
象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在 Comparator*里面用户可以自己实现复
杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。
()使用
package day1025;
import java.util.ArrayList;
import java.util.List;
/**
*
排序对象类实现
Comparable
接口
*/
public class Student implements Comparable<Student> {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
剩余33页未读,继续阅读
资源评论
SunAlwaysOnline
- 粉丝: 9w+
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于paddle搭建神经网络实现水果识别分类python源码+数据集(高分项目).zip
- 三菱plc编程口通信学习笔记.doc
- 与HIS接口解决方案...doc
- 专利技术交底书-案例模板-软件类-样板示例.doc
- C# 超简单的人脸识别库 .zip
- 实现人脸识别资源代码.zip
- 东北大学-微机原理实验报告及答案-8255并行接口.doc
- 实现人脸检测,人脸识别,人脸标记68个坐标点 人脸对齐 人脸特征测试等 同时可以自行训练人脸识别库.zip
- 基于中科视拓 seetaface6基础源码和JNI源码编译而来的项目.zip
- Python基于opencv人脸识别的考勤系统源码+代码说明(毕业设计).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功