out.write(x);
}
public int receive() throws IOException {
return in.r
需要文中资料的朋友,可以加我\/信获取:vip1024b 备注Java
ead();
}
}
// 传递对象
class Turn {
int role = 0;
void turn() {
role = 1 - role;
}
}
// 模拟服务器响应 http 请求
class Watcher implements Runnable {
int role;
final Turn turn;
// 读请求,等待可执行条件,然后回复
MySocket socket;
public Watcher(int role, Turn turn, MySocket socket) {
this.role = role;
this.turn = turn;
this.socket = socket;
}
private String toRole(int r) {
return r == 0 ? “黑方” : “白方”;
}
@Override
public void run() {
// 如果到达流的末尾,则返回-1 。
while (true) {
// 受到客户端请求下棋的请求
try {
if (socket.receive() == -1) {
System.out.println(“通信结束”);
break;
}
} catch (IOException e) {
e.printStackTrace();
}
// System.out.println(“受到”+toRole(role)+“请求; 当前是”+toRole(turn.role)+“阶段”);
try {
synchronized (turn){
// 1 表示许可; 0 表示拒绝
if (role == turn.role) {
System.out.println("服务器 ———————— "+toRole(role)+“落子”);
socket.send(1);
// 更换角色
turn.turn();
} else {
socket.send(0);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class Judge {
MySocket blackSocket;
MySocket whiteSocket;
Turn turn = new Turn();
public Judge(MySocket blackSocket, MySocket whiteSocket) {
this.blackSocket = blackSocket;
this.whiteSocket = whiteSocket;
}
void serve() {
// 启动两个监听线程,相当于 BIO 了
new Thread(new Watcher(0, turn, blackSocket)).start();
new Thread(new Watcher(1, turn, whiteSocket)).start();
}
}
class Black implements Runnable {
MySocket socket;
public Black(MySocket socket) {
this.socket = socket;
}
void play() throws IOException {
// 模拟客户端发出请求的间隔
try {
TimeUnit.MILLISECONDS.sleep( (int)(Math.random()*1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
// 发出请求
socket.send(1);
// 受到允许的通知 1 表示同意, 0 表示 拒绝
int x = socket.receive();
if (x == 1) {
// 模拟下棋
System.out.println(“客户端:黑方落子 ***”);
} else if (x == 0) {
// System.out.println(“黑方下棋被拒绝,现在是白方阶段!!!”);
} else {
System.out.println(“通信结束”);
}
}
@Override
public void run() {
while (true) {
try {
play();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class White implements Runnable {
MySocket socket;
public White(MySocket socket) {
this.socket = socket;
}
Random random = new Random();
void play() throws IOException {
// 模拟客户端发出请求的间隔
try {
TimeUnit.MILLISECONDS.sleep( (int)(Math.random()*1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
// 发出请求
socket.send(1);
// 受到允许的通知 1 表示同意, 0 表示 拒绝
int x = socket.receive();
if (x == 1) {
// 模拟下棋
System.out.println(“客户端:白方落子 ○○○”);
} else if (x == 0) {
// System.out.println(“白方下棋被拒绝,现在是黑方阶段!!!”);
} else {
System.out.println(“通信结束”);
最后
看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。
开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题。
注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友
互联网工程师必备的面试1000题
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题。
注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友
[外链图片转存中…(img-F0qt4vXn-1716311056977)]
互联网工程师必备的面试1000题
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
[外链图片转存中…(img-53xDNRwH-1716311056977)]