From 7c4ad53db4643ec49a31e84b913c164891ae3ab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=98=E5=BC=BA?= <5470761+fuqiangnb@user.noreply.gitee.com> Date: Sat, 21 Mar 2020 15:40:16 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=B0=E5=BB=BA=202020=EF=BC=BF3?= =?UTF-8?q?=EF=BC=BF15?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "2020\357\274\2773\357\274\27715/.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "2020\357\274\2773\357\274\27715/.keep" diff --git "a/2020\357\274\2773\357\274\27715/.keep" "b/2020\357\274\2773\357\274\27715/.keep" new file mode 100644 index 0000000..e69de29 -- Gitee From e619792a3a8a344b1ccb6eab50edb2be854e5dcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=98=E5=BC=BA?= <5470761+fuqiangnb@user.noreply.gitee.com> Date: Sat, 21 Mar 2020 15:41:18 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=8F=AA=E7=AE=80=E5=8D=95=E7=9A=84?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=E5=AE=A2=E6=88=B7=E7=AB=AF=E4=B8=8E?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=AB=AF=E4=B9=8B=E9=97=B4=E7=9A=84=E6=B6=88?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reactor/Client.java" | 84 +++++++++++++++ .../reactor/Server.java" | 102 ++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 "2020\357\274\2773\357\274\27715/reactor/Client.java" create mode 100644 "2020\357\274\2773\357\274\27715/reactor/Server.java" diff --git "a/2020\357\274\2773\357\274\27715/reactor/Client.java" "b/2020\357\274\2773\357\274\27715/reactor/Client.java" new file mode 100644 index 0000000..20071fe --- /dev/null +++ "b/2020\357\274\2773\357\274\27715/reactor/Client.java" @@ -0,0 +1,84 @@ +package reactor; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.SocketChannel; +import java.util.Iterator; +import java.util.Scanner; + +public class Client { + public static void main(String[] args) { + try { + //创建socketchannel实例 + SocketChannel socketChannel = SocketChannel.open(); + //将socketchannel实例设置为非阻塞 + socketChannel.configureBlocking(false); + //创建selector实例 + Selector selector = Selector.open(); + //连接服务端,因为前面设置的是非阻塞,所以调用这个方法会立即返回. + //因此如果返回true就不需要放到select中 + if (!socketChannel.connect(new InetSocketAddress("192.168.101.10", 8080))){ + //将socketchannel实例注册到选择器中,并关注connect事件 + socketChannel.register(selector, SelectionKey.OP_CONNECT); + //感兴趣操作是否完成 + selector.select(); + System.out.println("有可接收事件发生"); + Iterator iterator=selector.selectedKeys().iterator(); + while(iterator.hasNext()){ + SelectionKey key=iterator.next(); + iterator.remove(); + if(key.isValid()&&key.isConnectable()){ + SocketChannel Channel=(SocketChannel)key.channel(); + //如果连接成功则完成连接 + if(Channel.isConnectionPending()) + Channel.finishConnect(); + System.out.println("客户端连接成功"); + Channel.configureBlocking(false); + //监听SocketChannel读事件。 + Channel.register(selector,SelectionKey.OP_READ); + } + } + } + //设置buffer缓冲区 + ByteBuffer buffer=ByteBuffer.allocate(1024); + //创建控制台实例 + Scanner scanner=new Scanner(System.in); + while(true){ + System.out.println("请输入"); + String msg=scanner.nextLine(); + //客户端结束条件 + if("exit".equals(msg)) + break; + //向缓存写入数据 + buffer.put(msg.getBytes()); + buffer.flip(); + //发送数据 + socketChannel.write(buffer); + //清空缓存 + buffer.clear(); + //监听读事件,没有则阻塞 + selector.select(); + socketChannel.read(buffer); + //读写模式切换 + buffer.flip(); + //通过缓冲区有效元素大小确定接收数组大小 + byte [] bytes=new byte[buffer.remaining()]; + //从缓存读取数据 + buffer.get(bytes); + String msg1=new String(bytes); + System.out.println("number1 "+msg); + buffer.clear(); + } + socketChannel.close(); + selector.close(); + System.out.println("客户端关闭"); + } catch (IOException e) { + e.printStackTrace(); + } + } +} + + diff --git "a/2020\357\274\2773\357\274\27715/reactor/Server.java" "b/2020\357\274\2773\357\274\27715/reactor/Server.java" new file mode 100644 index 0000000..92799e6 --- /dev/null +++ "b/2020\357\274\2773\357\274\27715/reactor/Server.java" @@ -0,0 +1,102 @@ +package reactor; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.util.Iterator; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +class Run implements Runnable{ + private Selector selector; + SocketChannel socketChannel; + public Run(Selector selector,SocketChannel socketChannel){ + this.selector=selector; + this.socketChannel=socketChannel; + } + @Override + public void run() { + + try { + socketChannel.configureBlocking(false); + socketChannel.register(selector,SelectionKey.OP_READ); + while(selector.select()>0){ + System.out.println("有关注事件发生"); + Iterator iterator=selector.selectedKeys().iterator(); + while(iterator.hasNext()){ + SelectionKey key=iterator.next(); + iterator.remove(); + if(key.isReadable()){ + System.out.println("有可读事件发生"); + SocketChannel socketChannel=(SocketChannel)key.channel(); + //创建buffer实例,一般创建1024大小,这里写成2是为了测试 + ByteBuffer buffer=ByteBuffer.allocate(2); + buffer.clear(); + int count=0; + StringBuilder s=new StringBuilder(); + //使用缓冲区将客户端发送的数据提取完毕。 + while((count=socketChannel.read(buffer))>0){ + socketChannel.read(buffer); + System.out.println("循环接收"); + buffer.flip(); + byte[] bytes = new byte[buffer.remaining()]; + buffer.get(bytes); + String msg = new String(bytes); + s.append(msg); + buffer.clear(); + buffer.put(msg.getBytes()); + buffer.flip(); + socketChannel.write(buffer); + buffer.clear(); + } + System.out.println(s.toString()); + //关闭读写通道 + if(count<0){ + socketChannel.close(); + } + } + } + } + + }catch (IOException e){ + } + } +} +public class Server { + public static void main(String[] args) { + try { + Selector selector=Selector.open(); + ServerSocketChannel ssc=ServerSocketChannel.open(); + ssc.configureBlocking(false); + ssc.register(selector,SelectionKey.OP_ACCEPT); + //ServerSocket serverSocket=ssc.socket(); + ssc.bind(new InetSocketAddress(8080)); + System.out.println("客户端启动成功"); + //创建线程池 + Executor executor=Executors.newFixedThreadPool(10); + while(selector.select()>0){ + System.out.println("有关注事件发生"); + Iterator iterator=selector.selectedKeys().iterator(); + while(iterator.hasNext()){ + SelectionKey key=iterator.next(); + iterator.remove(); + if(key.isAcceptable()){ + System.out.println("有可接收事件发生"); + ServerSocketChannel serverSocketChannel=(ServerSocketChannel)key.channel() ; + //得到SocketChannel实例 + SocketChannel socketChannel=serverSocketChannel.accept(); + //将socketChannel实例交给子线程去处理。 + executor.execute(new Run(Selector.open(),socketChannel)); + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} + + -- Gitee From 212a989d4e4097d0aaabeff9f93363c3ea263795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=98=E5=BC=BA?= <5470761+fuqiangnb@user.noreply.gitee.com> Date: Sat, 21 Mar 2020 15:48:58 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=EF=BD=8C=EF=BD=85=EF=BD=85=EF=BD=94?= =?UTF-8?q?=EF=BD=83=EF=BD=8F=EF=BD=84=EF=BD=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leetcode_183.class" | 5 +++ .../leetcode_589.class" | 35 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 "2020\357\274\2773\357\274\27715/leetcode_183.class" create mode 100644 "2020\357\274\2773\357\274\27715/leetcode_589.class" diff --git "a/2020\357\274\2773\357\274\27715/leetcode_183.class" "b/2020\357\274\2773\357\274\27715/leetcode_183.class" new file mode 100644 index 0000000..ce366d8 --- /dev/null +++ "b/2020\357\274\2773\357\274\27715/leetcode_183.class" @@ -0,0 +1,5 @@ +# Write your MySQL query statement belowSELECT Name AS Customers +select c.name Customers +from Customers c +left join Orders o on o.CustomerId = c.Id +where o.CustomerId is null diff --git "a/2020\357\274\2773\357\274\27715/leetcode_589.class" "b/2020\357\274\2773\357\274\27715/leetcode_589.class" new file mode 100644 index 0000000..e1ff588 --- /dev/null +++ "b/2020\357\274\2773\357\274\27715/leetcode_589.class" @@ -0,0 +1,35 @@ +/* +// Definition for a Node. +class Node { + public int val; + public List children; + + public Node() {} + + public Node(int _val) { + val = _val; + } + + public Node(int _val, List _children) { + val = _val; + children = _children; + } +}; +*/ +class Solution { + public List preorder(Node root) { + List res=new ArrayList<>(); + preorder(root, res); + return res; + + } +private void preorder(Node root, List res) { + if(root == null) { + return; + } + res.add(root.val); + //for(final Node n : root.children) + for(int i=0;i