Netty序章之BIO NIO AIO演变

Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能高可靠的网络服务器和客户端程序。Netty简化了网络程序的开发,是很多框架和公司都在使用的技术。更是面试的加分项。Netty并非横空出世,它是在BIO,NIO,AIO演变中的产物,是一种NIO框架。而BIO,NIO,AIO更是笔试中要考,面试中要问的技术。也是一个很好的加分项,加分就是加工资,你还在等什么?本章带你细细品味三者的不同!
流程图:BIO NIO AIO 流程图

技术:BIO,NIO,AIO
说明:github上有更全的源码。
源码:https://github.com/ITDragonBlog/daydayup/tree/master/Netty/socket-io

BIO

BIO 全称Block-IO 是一种阻塞同步的通信模式。我们常说的Stock IO 一般指的是BIO。是一个比较传统的通信方式,模式简单使用方便。但并发处理能力低通信耗时依赖网速
BIO 设计原理:
服务器通过一个Acceptor线程负责监听客户端请求和为每个客户端创建一个新的线程进行链路处理。典型的一请求一应答模式。若客户端数量增多,频繁地创建和销毁线程会给服务器打开很大的压力。后改良为用线程池的方式代替新增线程,被称为伪异步IO。

服务器提供IP地址和监听的端口,客户端通过TCP的三次握手与服务器连接,连接成功后,双放才能通过套接字(Stock)通信。
小结:BIO模型中通过Socket和ServerSocket完成套接字通道的实现。阻塞,同步,建立连接耗时

BIO服务器代码,负责启动服务,阻塞服务,监听客户端请求,新建线程处理任务。

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/*** IO 也称为 BIO,Block IO 阻塞同步的通讯方式* 比较传统的技术,实际开发中基本上用Netty或者是AIO。熟悉BIO,NIO,体会其中变化的过程。作为一个web开发人员,stock通讯面试经常问题。* BIO最大的问题是:阻塞,同步。* BIO通讯方式很依赖于网络,若网速不好,阻塞时间会很长。每次请求都由程序执行并返回,这是同步的缺陷。* BIO工作流程:* 第一步:server端服务器启动* 第二步:server端服务器阻塞监听client请求* 第三步:server端服务器接收请求,创建线程实现任务*/
public class ITDragonBIOServer {private static final Integer PORT = 8888; // 服务器对外的端口号  public static void main(String[] args) {  ServerSocket server = null;  Socket socket = null;  ThreadPoolExecutor executor = null;  try {  server = new ServerSocket(PORT); // ServerSocket 启动监听端口  System.out.println("BIO Server 服务器启动.........");  /*--------------传统的新增线程处理----------------*//*while (true) { // 服务器监听:阻塞,等待Client请求 socket = server.accept(); System.out.println("server 服务器确认请求 : " + socket); // 服务器连接确认:确认Client请求后,创建线程执行任务  。很明显的问题,若每接收一次请求就要创建一个线程,显然是不合理的。new Thread(new ITDragonBIOServerHandler(socket)).start(); } *//*--------------通过线程池处理缓解高并发给程序带来的压力(伪异步IO编程)----------------*/  executor = new ThreadPoolExecutor(10, 100, 1000, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(50));  while (true) {  socket = server.accept();  // 服务器监听:阻塞,等待Client请求 ITDragonBIOServerHandler serverHandler = new ITDragonBIOServerHandler(socket);  executor.execute(serverHandler);  }  } catch (IOException e) {  e.printStackTrace();  } finally {  try {  if (null != socket) {  socket.close(); socket = null;}  if (null != server) {  server.close();  server = null;  System.out.println("BIO Server 服务器关闭了!!!!");  }  executor.shutdown();  } catch (IOException e) {  e.printStackTrace();  }  }  }  
}

BIO服务端处理任务代码,负责处理Stock套接字,返回套接字给客户端,解耦。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import com.itdragon.util.CalculatorUtil;public class ITDragonBIOServerHandler implements Runnable{  private Socket socket;  public ITDragonBIOServerHandler(Socket socket) {  this.socket = socket;  }  @Override  public void run() {  BufferedReader reader = null;  PrintWriter writer = null;  try {  reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));  writer = new PrintWriter(this.socket.getOutputStream(), true);  String body = null;  while (true) {  body = reader.readLine(); // 若客户端用的是 writer.print() 传值,那readerLine() 是不能获取值,细节  if (null == body) {  break;  }  System.out.println("server服务端接收参数 : " + body);  writer.println(body + " = " + CalculatorUtil.cal(body).toString());}  } catch (IOException e) {  e.printStackTrace();  } finally {  if (null != writer) {  writer.close();  }  try {  if (null != reader) {  reader.close();  }  if (null != this.socket) {  this.socket.close();  this.socket = null;  }  } catch (IOException e) {  e.printStackTrace();  }  }  }  
}

BIO客户端代码,负责启动客户端,向服务器发送请求,接收服务器返回的Stock套接字。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Random;
/*** BIO 客户端* Socket :         向服务端发送连接* PrintWriter :    向服务端传递参数* BufferedReader : 从服务端接收参数*/
public class ITDragonBIOClient {private static Integer PORT = 8888;  private static String IP_ADDRESS = "127.0.0.1";  public static void main(String[] args) {  for (int i = 0; i < 10; i++) {  clientReq(i);  }  }  private static void clientReq(int i) {  Socket socket = null;  BufferedReader reader = null;  PrintWriter writer = null;  try {  socket = new Socket(IP_ADDRESS, PORT); // Socket 发起连接操作。连接成功后,双方通过输入和输出流进行同步阻塞式通信  reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 获取返回内容  writer = new PrintWriter(socket.getOutputStream(), true);  String []operators = {"+","-","*","/"};Random random = new Random(System.currentTimeMillis());  String expression = random.nextInt(10)+operators[random.nextInt(4)]+(random.nextInt(10)+1);writer.println(expression); // 向服务器端发送数据  System.out.println(i + " 客户端打印返回数据 : " + reader.readLine());  } catch (Exception e) {  e.printStackTrace();  } finally {  try {  if (null != reader) {  reader.close();  }  if (null != socket) {  socket.close();  socket = null;  }  } catch (IOException e) {  e.printStackTrace();  }  }  }  
}

NIO

NIO 全称New IO,也叫Non-Block IO 是一种非阻塞同步的通信模式。
NIO 设计原理:
NIO 相对于BIO来说一大进步。客户端和服务器之间通过Channel通信。NIO可以在Channel进行读写操作。这些Channel都会被注册在Selector多路复用器上。Selector通过一个线程不停的轮询这些Channel。找出已经准备就绪的Channel执行IO操作。
NIO 通过一个线程轮询,实现千万个客户端的请求,这就是非阻塞NIO的特点。
1)缓冲区Buffer:它是NIO与BIO的一个重要区别。BIO是将数据直接写入或读取到Stream对象中。而NIO的数据操作都是在缓冲区中进行的。缓冲区实际上是一个数组。Buffer最常见的类型是ByteBuffer,另外还有CharBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer,DoubleBuffer。
2)通道Channel:和流不同,通道是双向的。NIO可以通过Channel进行数据的读,写和同时读写操作。通道分为两大类:一类是网络读写(SelectableChannel),一类是用于文件操作(FileChannel),我们使用的SocketChannel和ServerSocketChannel都是SelectableChannel的子类。
3)多路复用器Selector:NIO编程的基础。多路复用器提供选择已经就绪的任务的能力。就是Selector会不断地轮询注册在其上的通道(Channel),如果某个通道处于就绪状态,会被Selector轮询出来,然后通过SelectionKey可以取得就绪的Channel集合,从而进行后续的IO操作。服务器端只要提供一个线程负责Selector的轮询,就可以接入成千上万个客户端,这就是JDK NIO库的巨大进步。

说明:这里的代码只实现了客户端发送请求,服务端接收数据的功能。其目的是简化代码,方便理解。github源码中有完整代码。
小结:NIO模型中通过SocketChannel和ServerSocketChannel完成套接字通道的实现。非阻塞/阻塞,同步,避免TCP建立连接使用三次握手带来的开销。

NIO服务器代码,负责开启多路复用器,打开通道,注册通道,轮询通道,处理通道。

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;
/*** NIO 也称 New IO, Non-Block IO,非阻塞同步通信方式* 从BIO的阻塞到NIO的非阻塞,这是一大进步。功归于Buffer,Channel,Selector三个设计实现。* Buffer   :  缓冲区。NIO的数据操作都是在缓冲区中进行。缓冲区实际上是一个数组。而BIO是将数据直接写入或读取到Stream对象。* Channel  :  通道。NIO可以通过Channel进行数据的读,写和同时读写操作。* Selector :  多路复用器。NIO编程的基础。多路复用器提供选择已经就绪状态任务的能力。* 客户端和服务器通过Channel连接,而这些Channel都要注册在Selector。Selector通过一个线程不停的轮询这些Channel。找出已经准备就绪的Channel执行IO操作。* NIO通过一个线程轮询,实现千万个客户端的请求,这就是非阻塞NIO的特点。*/
public class ITDragonNIOServer implements Runnable{  private final int BUFFER_SIZE = 1024; // 缓冲区大小  private final int PORT = 8888;        // 监听的端口  private Selector selector;            // 多路复用器,NIO编程的基础,负责管理通道Channel private ByteBuffer readBuffer = ByteBuffer.allocate(BUFFER_SIZE);  // 缓冲区Buffer  public ITDragonNIOServer() {  startServer();  }  private void startServer() {  try {  // 1.开启多路复用器  selector = Selector.open();  // 2.打开服务器通道(网络读写通道)  ServerSocketChannel channel = ServerSocketChannel.open();  // 3.设置服务器通道为非阻塞模式,true为阻塞,false为非阻塞  channel.configureBlocking(false);  // 4.绑定端口  channel.socket().bind(new InetSocketAddress(PORT));  // 5.把通道注册到多路复用器上,并监听阻塞事件  /** * SelectionKey.OP_READ   : 表示关注读数据就绪事件  * SelectionKey.OP_WRITE  : 表示关注写数据就绪事件  * SelectionKey.OP_CONNECT: 表示关注socket channel的连接完成事件  * SelectionKey.OP_ACCEPT : 表示关注server-socket channel的accept事件  */  channel.register(selector, SelectionKey.OP_ACCEPT);  System.out.println("Server start >>>>>>>>> port :" + PORT);  } catch (IOException e) {  e.printStackTrace();  }  }  // 需要一个线程负责Selector的轮询  @Override  public void run() {  while (true) {  try {  /** * a.select() 阻塞到至少有一个通道在你注册的事件上就绪  * b.select(long timeOut) 阻塞到至少有一个通道在你注册的事件上就绪或者超时timeOut * c.selectNow() 立即返回。如果没有就绪的通道则返回0  * select方法的返回值表示就绪通道的个数。 */  // 1.多路复用器监听阻塞  selector.select();  // 2.多路复用器已经选择的结果集  Iterator<SelectionKey> selectionKeys = selector.selectedKeys().iterator();  // 3.不停的轮询  while (selectionKeys.hasNext()) {  // 4.获取一个选中的key  SelectionKey key = selectionKeys.next();  // 5.获取后便将其从容器中移除  selectionKeys.remove();  // 6.只获取有效的key  if (!key.isValid()){  continue;  }  // 阻塞状态处理  if (key.isAcceptable()){  accept(key);  }  // 可读状态处理  if (key.isReadable()){  read(key);  }  }  } catch (IOException e) {  e.printStackTrace();  }  }  }  // 设置阻塞,等待Client请求。在传统IO编程中,用的是ServerSocket和Socket。在NIO中采用的ServerSocketChannel和SocketChannel  private void accept(SelectionKey selectionKey) {  try {  // 1.获取通道服务  ServerSocketChannel serverSocketChannel = (ServerSocketChannel) selectionKey.channel();  // 2.执行阻塞方法  SocketChannel socketChannel = serverSocketChannel.accept();  // 3.设置服务器通道为非阻塞模式,true为阻塞,false为非阻塞  socketChannel.configureBlocking(false);  // 4.把通道注册到多路复用器上,并设置读取标识  socketChannel.register(selector, SelectionKey.OP_READ);  } catch (IOException e) {  e.printStackTrace();  }  }  private void read(SelectionKey selectionKey) {  try {  // 1.清空缓冲区数据  readBuffer.clear();  // 2.获取在多路复用器上注册的通道  SocketChannel socketChannel = (SocketChannel) selectionKey.channel();  // 3.读取数据,返回  int count = socketChannel.read(readBuffer);  // 4.返回内容为-1 表示没有数据  if (-1 == count) {  selectionKey.channel().close();  selectionKey.cancel();  return ;  }  // 5.有数据则在读取数据前进行复位操作  readBuffer.flip();  // 6.根据缓冲区大小创建一个相应大小的bytes数组,用来获取值  byte[] bytes = new byte[readBuffer.remaining()];  // 7.接收缓冲区数据  readBuffer.get(bytes);  // 8.打印获取到的数据  System.out.println("NIO Server : " + new String(bytes)); // 不能用bytes.toString()  } catch (IOException e) {  e.printStackTrace();  }  }  public static void main(String[] args) {  new Thread(new ITDragonNIOServer()).start();  } 
}

NIO客户端代码,负责连接服务器,声明通道,连接通道

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;public class ITDragonNIOClient {private final static int PORT = 8888;  private final static int BUFFER_SIZE = 1024;  private final static String IP_ADDRESS = "127.0.0.1";  public static void main(String[] args) {  clientReq();}  private static void clientReq() {// 1.创建连接地址  InetSocketAddress inetSocketAddress = new InetSocketAddress(IP_ADDRESS, PORT);  // 2.声明一个连接通道  SocketChannel socketChannel = null;  // 3.创建一个缓冲区  ByteBuffer byteBuffer = ByteBuffer.allocate(BUFFER_SIZE);  try {  // 4.打开通道  socketChannel = SocketChannel.open();  // 5.连接服务器  socketChannel.connect(inetSocketAddress);  while(true){  // 6.定义一个字节数组,然后使用系统录入功能:  byte[] bytes = new byte[BUFFER_SIZE];  // 7.键盘输入数据  System.in.read(bytes);  // 8.把数据放到缓冲区中  byteBuffer.put(bytes);  // 9.对缓冲区进行复位  byteBuffer.flip();  // 10.写出数据  socketChannel.write(byteBuffer);  // 11.清空缓冲区数据  byteBuffer.clear();  }  } catch (IOException e) {  e.printStackTrace();  } finally {  if (null != socketChannel) {  try {  socketChannel.close();  } catch (IOException e) {  e.printStackTrace();  }  }  } }
}

AIO

AIO 也叫NIO2.0 是一种非阻塞异步的通信模式。在NIO的基础上引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现。
AIO 并没有采用NIO的多路复用器,而是使用异步通道的概念。其read,write方法的返回类型都是Future对象。而Future模型是异步的,其核心思想是:去主函数等待时间。

小结:AIO模型中通过AsynchronousSocketChannel和AsynchronousServerSocketChannel完成套接字通道的实现。非阻塞,异步

AIO服务端代码,负责创建服务器通道,绑定端口,等待请求。

import java.net.InetSocketAddress;
import java.nio.channels.AsynchronousChannelGroup;
import java.nio.channels.AsynchronousServerSocketChannel;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*** AIO, 也叫 NIO2.0 是一种异步非阻塞的通信方式* AIO 引入了异步通道的概念 AsynchronousServerSocketChannel和AsynchronousSocketChannel 其read和write方法返回值类型是Future对象。*/
public class ITDragonAIOServer {private ExecutorService executorService;        // 线程池private AsynchronousChannelGroup threadGroup;   // 通道组public AsynchronousServerSocketChannel asynServerSocketChannel;  // 服务器通道 public void start(Integer port){  try {  // 1.创建一个缓存池  executorService = Executors.newCachedThreadPool();  // 2.创建通道组  threadGroup = AsynchronousChannelGroup.withCachedThreadPool(executorService, 1);  // 3.创建服务器通道  asynServerSocketChannel = AsynchronousServerSocketChannel.open(threadGroup);  // 4.进行绑定  asynServerSocketChannel.bind(new InetSocketAddress(port));  System.out.println("server start , port : " + port);  // 5.等待客户端请求  asynServerSocketChannel.accept(this, new ITDragonAIOServerHandler());  // 一直阻塞 不让服务器停止,真实环境是在tomcat下运行,所以不需要这行代码  Thread.sleep(Integer.MAX_VALUE);  } catch (Exception e) {  e.printStackTrace();  }  }  public static void main(String[] args) {  ITDragonAIOServer server = new ITDragonAIOServer();  server.start(8888);  }  
}

AIO服务器任务处理代码,负责,读取数据,写入数据

import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousSocketChannel;
import java.nio.channels.CompletionHandler;
import java.util.concurrent.ExecutionException;
import com.itdragon.util.CalculatorUtil;public class ITDragonAIOServerHandler implements CompletionHandler<AsynchronousSocketChannel, ITDragonAIOServer> {  private final Integer BUFFER_SIZE = 1024;  @Override  public void completed(AsynchronousSocketChannel asynSocketChannel, ITDragonAIOServer attachment) {  // 保证多个客户端都可以阻塞  attachment.asynServerSocketChannel.accept(attachment, this);  read(asynSocketChannel);  }  //读取数据  private void read(final AsynchronousSocketChannel asynSocketChannel) {  ByteBuffer byteBuffer = ByteBuffer.allocate(BUFFER_SIZE);  asynSocketChannel.read(byteBuffer, byteBuffer, new CompletionHandler<Integer, ByteBuffer>() {  @Override  public void completed(Integer resultSize, ByteBuffer attachment) {  //进行读取之后,重置标识位  attachment.flip();  //获取读取的数据  String resultData = new String(attachment.array()).trim();  System.out.println("Server -> " + "收到客户端的数据信息为:" + resultData);  String response = resultData + " = " + CalculatorUtil.cal(resultData);  write(asynSocketChannel, response);  }  @Override  public void failed(Throwable exc, ByteBuffer attachment) {  exc.printStackTrace();  }  });  }  // 写入数据private void write(AsynchronousSocketChannel asynSocketChannel, String response) {  try {  // 把数据写入到缓冲区中  ByteBuffer buf = ByteBuffer.allocate(BUFFER_SIZE);  buf.put(response.getBytes());  buf.flip();  // 在从缓冲区写入到通道中  asynSocketChannel.write(buf).get();  } catch (InterruptedException e) {  e.printStackTrace();  } catch (ExecutionException e) {  e.printStackTrace();  }  }  @Override  public void failed(Throwable exc, ITDragonAIOServer attachment) {  exc.printStackTrace();  }  
}

AIO客户端代码,负责连接服务器,声明通道,连接通道

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousSocketChannel;
import java.util.Random;public class ITDragonAIOClient implements Runnable{  private static Integer PORT = 8888;  private static String IP_ADDRESS = "127.0.0.1";private AsynchronousSocketChannel asynSocketChannel ;  public ITDragonAIOClient() throws Exception {  asynSocketChannel = AsynchronousSocketChannel.open();  // 打开通道  }  public void connect(){  asynSocketChannel.connect(new InetSocketAddress(IP_ADDRESS, PORT));  // 创建连接 和NIO一样  }  public void write(String request){  try {  asynSocketChannel.write(ByteBuffer.wrap(request.getBytes())).get();  ByteBuffer byteBuffer = ByteBuffer.allocate(1024);  asynSocketChannel.read(byteBuffer).get();  byteBuffer.flip();  byte[] respByte = new byte[byteBuffer.remaining()];  byteBuffer.get(respByte); // 将缓冲区的数据放入到 byte数组中  System.out.println(new String(respByte,"utf-8").trim());  } catch (Exception e) {  e.printStackTrace();  }  }  @Override  public void run() {  while(true){  }  }  public static void main(String[] args) throws Exception {  for (int i = 0; i < 10; i++) {ITDragonAIOClient myClient = new ITDragonAIOClient();  myClient.connect();  new Thread(myClient, "myClient").start(); String []operators = {"+","-","*","/"};Random random = new Random(System.currentTimeMillis());  String expression = random.nextInt(10)+operators[random.nextInt(4)]+(random.nextInt(10)+1);myClient.write(expression);  }}  
}

常见面试题

1 IO,NIO,AIO区别
IO 阻塞同步通信模式,客户端和服务器连接需要三次握手,使用简单,但吞吐量小
NIO 非阻塞同步通信模式,客户端与服务器通过Channel连接,采用多路复用器轮询注册的Channel。提高吞吐量和可靠性。
AIO 非阻塞异步通信模式,NIO的升级版,采用异步通道实现异步通信,其read和write方法均是异步方法。

2 Stock通信的伪代码实现流程
服务器绑定端口:server = new ServerSocket(PORT)
服务器阻塞监听:socket = server.accept()
服务器开启线程:new Thread(Handle handle)
服务器读写数据:BufferedReader PrintWriter
客户端绑定IP和PORT:new Socket(IP_ADDRESS, PORT)
客户端传输接收数据:BufferedReader PrintWriter

3 TCP协议与UDP协议有什么区别
TCP : 传输控制协议是基于连接的协议,在正式收发数据前,必须和对方建立可靠的连接。速度慢,合适传输大量数据。
UDP : 用户数据报协议是与TCP相对应的协议。面向非连接的协议,不与对方建立连接,而是直接就把数据包发送过去,速度快,适合传输少量数据。

4 什么是同步阻塞BIO,同步非阻塞NIO,异步非阻塞AIO
同步阻塞IO : 用户进程发起一个IO操作以后,必须等待IO操作的真正完成后,才能继续运行。
同步非阻塞IO: 用户进程发起一个IO操作以后,可做其它事情,但用户进程需要经常询问IO操作是否完成,这样造成不必要的CPU资源浪费。
异步非阻塞IO: 用户进程发起一个IO操作然后,立即返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知。类比Future模式。

总结

1 BIO模型中通过SocketServerSocket完成套接字通道实现。阻塞,同步,连接耗时。
2 NIO模型中通过SocketChannelServerSocketChannel完成套接字通道实现。非阻塞/阻塞,同步,避免TCP建立连接使用三次握手带来的开销。
3 AIO模型中通过AsynchronousSocketChannelAsynchronousServerSocketChannel完成套接字通道实现。非阻塞,异步。
BIO NIO AIO 对比

到这里BIO,NIO,AIO的知识点就梳理完了。下一章是Netty的入门 编解码 数据通信知识。如果觉得不错可以点个“推荐”。也可以“关注”我,一起学习,一起成长。正常情况一周一更。学习方向是JAVA架构师。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. C语言的那些题(二)——进制之循环移位

    今天,和大家分享一道关于进制问题中的循环移位,大家应该知道,系统语言中提供的按位左移 《 和按位右移 》都是非循环的。那什么叫循环移位呢?所谓循环移位是指在移位时不丢失移位前原范围的位,而是将它们作为另一端的补入位。例如循环右移n位,指各位右移n位,原来的低n位…...

    2024/4/24 16:25:06
  2. neo4j(一).初识图数据库neo4j

    neo4j是图数据库初识neo4j,首先我们要知道neo4j是图数据库。我们平常用的数据库一般是RDBMS(关系型数据库),那么什么是图数据库呢?既然有了关系型数据库,那么为什么要有图数据库呢? 1.什么是图数据库 简单来说: 图形数据库(图形数据库也称为图形数据库管理系统或GDBMS。…...

    2024/4/24 16:25:06
  3. 说说C#的async和await(转)

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/nele/p/4804161.html目录一个简单的例子:1 public class MyClass2 3 {4 5 public MyClass()6 7 {8 9 DisplayValue(); //这里不会阻塞 10 11 System.Diagnostics.Debug.WriteLine("My…...

    2024/4/24 16:25:07
  4. MapInfo介绍(一)

    需要安装这两个软件时,应该先装mapinfo 再装mapxtreme. 1、 MapInfo MapInfo是美国MapInfo公司的桌面地理信息系统软件,是一种数据可视化、信息地图化的桌面解决方案。 它依据地图及其应用的概念、采用办公自动化的操作、集成多种数据库数据、融合计算机地图方法、使用地理…...

    2024/5/2 17:31:00
  5. request_queue, request, bio

    bio 代表一个IO 请求request 是bio 提交给IO调度器产生的数据,一个request 中放着顺序排列的bio当设备提交bio 给IO调度器时,IO调度器可能会插入bio,或者生成新的requestrequest_queue代表着一个物理设备,顺序的放着request===========================分割线=============…...

    2024/4/24 16:25:02
  6. Android PackageManager源码浅析以及静默安装实现方式

    Aandroid应用管理 >http://blog.csdn.net/sk719887916/article/details/50314017 skay整理。 >2016了 本篇成了我的开年之博,距上次做静默安装和辅助服务已经有半年之多,最近一直在做项目中的插件功能,也一直没时间整理平时接触的东西,甚至年终总结,今天就…...

    2024/5/2 16:11:29
  7. 宋宝华:Linux文件读写(BIO)波澜壮阔的一生

    点击上方“公众号” 可以订阅哦!前言网上关于BIO和块设备读写流程的文章何止千万,但是能够让你彻底读懂读明白的文章实在难找,可以说是越读越糊涂!我曾经跨过山和大海 也穿过人山人海我曾经问遍整个世界 从来没得到答案本文用一个最简单的read(fd, buf, 4096)的代码,分析它…...

    2024/4/19 13:50:05
  8. MapInfo点符号制作方法

    Mapinfo提供了多种点符号制作方法,通过不同的方法制作出来的点符号具有不同的特性;Mapinfo还支持以下三种点符号制作方法: 1、利用Mapinfo提供的“符号”工具,制作点符号。利用该工具制作的点符号,存放在Mapinfo安装目录下的Mapinfo.fnt文件中。该工具制作生成的也为位图符…...

    2024/4/29 7:09:18
  9. 文章目录导航

    前言由于写的文章已经是有点多了,为了自己和大家的检索方便,于是我就做了这么一个博客导航。由于更新比较频繁,因此隔一段时间才会更新目录导航哦~想要获取最新原创的技术文章欢迎关注我的公众号:Java3y为了大家方便,刚新建了一下qq群:742919422,大家可以去交流交流。目…...

    2024/4/14 21:38:41
  10. C# Task await

    private async Task<int> WaitInt(){return await Task.Run<int>(() =>{return 1;});}...

    2024/4/14 21:38:38
  11. Ubuntu16.04中 neo4j安装与使用

    使用Debian repositorywget -O - https://debian.neo4j.org/neotechnology.gpg.key | sudo apt-key add - echo deb https://debian.neo4j.org/repo stable/ | sudo tee /etc/apt/sources.list.d/neo4j.list sudo apt-get update选择社区版安装sudo apt-get install neo4jNeo4j…...

    2024/5/2 18:15:25
  12. 2.1.9 C语言中的移位运算

    参考链接:https://blog.csdn.net/lim_dev/article/details/68953269 转载于:https://www.cnblogs.com/AI-Cobe/p/9147810.html...

    2024/4/14 21:38:36
  13. maven聚合工程tomcat插件启动没有 Starting ProtocolHandler ["http-bio-8081"]

    Starting ProtocolHandler ["http-bio-8081"]无法显示,一般有三个原因: (1)数据库连不上; (2)注册中心连不上(我这里用的是zookeeper); (3)mybatis逆向工程自动生成的mapper出错,比如多遍生成。 以上原因在没有加log4j日志的情况下,不会报错,即显示一…...

    2024/4/14 21:38:36
  14. Python协程:从yield/send到async/await

    Python由于众所周知的GIL的原因,导致其线程无法发挥多核的并行计算能力(当然,后来有了multiprocessing,可以实现多进程并行),显得比较鸡肋。既然在GIL之下,同一时刻只能有一个线程在运行,那么对于CPU密集的程序来说,线程之间的切换开销就成了拖累,而以I/O为瓶颈的程序…...

    2024/4/14 21:38:34
  15. 地图文件(MapInfo.txt)参数意义(z)

    1.FIGHT 战斗区域(如果设FIGHT3 ,就是行会地图常设定的可复活三次.) 2.SAFE 安全区域 3.DARK 地图是黑暗的 4.NEEDHOLE 是否需要洞,配合mapinfo里 xx,xx -> yy,yy使用(MONSTER 任何怪物RACE代码设为95都可.xx,xx为进入洞口坐标,在Mongen.txt里xx坐标刷新一怪物即可) 5.NOREC…...

    2024/4/24 16:25:00
  16. 安装图数据库neo4j

    引用自: https://datawookie.netlify.com/blog/2016/09/installing-neo4j-on-ubuntu-16.04/如引用所示, 我在官方网站下载的一直在appImage, 一怒之下直接查找shell的安装方式 sudo wget --no-check-certificate -O - https://debian.neo4j.org/neotechnology.gpg.key | sudo a…...

    2024/4/24 16:24:59
  17. verilog中有符号负数的移位与加减以及与C语言的不同

    在变量后加signed,可以在加减,比较大小时,成为有符号数的加减法或比较。但是对于移位,编译器并不像C语言的编译器一样,有符号数,移位对于负数最高位补1,正数补0。而是都补零。所以对于负数的移位,如下if(baseline1<0)baseline1 <= -((-baseline1)>>3);else…...

    2024/4/24 16:24:58
  18. 【Netty】谈谈你对BIO的理解?

    一、简介BIO 同步阻塞IO 一个连接一个线程,可以通过线程池机制来改善适用于连接数目比较小且固定的架构。二、BIO编程流程(1)服务端启动一个serverSocket(2)客户端启动Socket对服务器进行通信,默认情况下服务器端需要对每个客户建立一个线程与之通信。(3)客户端发出请…...

    2024/4/24 16:24:57
  19. 用delphi操作mapinfo

    1.概述MapInfo Professionnal 6.0是美国MapInfo公司开发的一种桌面地理信息系统开发平台,因为它小巧玲珑、易学易用,同时对空间数据具有强大的采集、存贮、分析等功能,所以成为世界上最为流行的桌面地理信息系统。目前利用MapInfo开发应用程序主要有三种方式。分别是单纯利用…...

    2024/4/24 16:24:57
  20. Neo4j构建知识图谱

    知识图谱的一些概念和实战 参考:(https://blog.csdn.net/m0_37565948/article/details/81133041) 教程: 参考:(https://www.w3cschool.cn/neo4j/neo4j_spring_data_example.html)...

    2024/4/24 16:24:55

最新文章

  1. 目标检测算法YOLOv3简介

    YOLOv3由Joseph Redmon等人于2018年提出&#xff0c;论文名为&#xff1a;《YOLOv3: An Incremental Improvement》&#xff0c;论文见&#xff1a;https://arxiv.org/pdf/1804.02767.pdf &#xff0c;项目网页&#xff1a;https://pjreddie.com/darknet/yolo/ 。YOLOv3是对YOL…...

    2024/5/2 20:21:40
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 基于单片机的数据串口通信研究

    摘要:随着信息化和工业化的快速发展,单片机相关技术也迅速发展。随着多媒体计算机信息技术的不断发展,单片机技术被广泛应用于多种行业。单片机是一种快捷、方便及效率高的微型处理器,可连接PC 机串行接口,以完成与外界设备的通信,如检测系统。单片机是控制系统的核心所在…...

    2024/5/1 18:10:54
  4. ROS2高效学习第十章 -- ros2 高级组件之大型项目中的 launch 其二

    ros2 高级组件之大型项目中的 launch 1 前言和资料2 正文2.1 启动 turtlesim&#xff0c;生成一个 turtle &#xff0c;设置背景色2.2 使用 event handler 重写上节的样例2.3 turtle_tf_mimic_rviz_launch 样例 3 总结 1 前言和资料 早在ROS2高效学习第四章 – ros2 topic 编程…...

    2024/5/2 10:47:23
  5. 基于AI智能识别技术的智慧展览馆视频监管方案设计

    一、建设背景 随着科技的不断进步和社会安全需求的日益增长&#xff0c;展览馆作为展示文化、艺术和科技成果的重要场所&#xff0c;其安全监控系统的智能化升级已成为当务之急。为此&#xff0c;旭帆科技&#xff08;TSINGSEE青犀&#xff09;基于视频智能分析技术推出了展览…...

    2024/4/30 17:11:11
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/2 9:28:15
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57