序列化

  • 序列化
  • 1、背景
  • 2、定义
  • 3、序列化评价指标
  • 4、序列化实例
  • 参考

序列化

1、背景

  • 1、在TCP的连接上,它传输数据的基本形式就是二进制流,也就是一段一段的1和0。

  • 2、在一般编程语言或者网络框架提供的API中,传输数据的基本形式是字节,也就是Byte。一个字节就是8个二进制位,8个Bit。

    • 二进制流和字节流本质上是一样的。对于我们编写的程序来说,它需要通过网络传输的数据是结构化的数据,比如,一条命令、一段文本或者一条消息。对应代码中,这些结构化的数据都可以用一个类或者一个结构体来表示。
  • 序列化的用途除了用于在网络上传输数据以外,

  • 将结构化数据保存在文件中(将对象存储于硬盘上),因为文件内保存数据的形式也是二进制序列。

问题:
在内存里存放的任何数据,它最基础的存储单元也是二进制比特,也就是说,我们应用程序操作的对象,它在内存中也是使用二进制存储的,既然都是二进制,为什么不能直接把内存中,对象对应的二进制数据直接通过网络发送出去,或者保存在文件中呢?为什么还需要序列化和反序列化呢?

  • 内存里存的东西,不通用, 不同系统, 不同语言的组织可能都是不一样的, 而且还存在很多引用,指针,并不是直接数据块。内存中的对象数据应该具有语言独特性,例如表达相同业务的User对象(id/name/age字段),Java和PHP在内存中的数据格式应该不一样的,如果直接用内存中的数据,可能会造成语言不通。只要对序列化的数据格式进行了协商,任何2个语言直接都可以进行序列化传输、接收。
  • 一个数据结构,里面存储的数据是经过非常多其他数据通过非常复杂的算法生成的,因为数据量非常大,因此生成该数据结构所用数据的时间可能要非常久,生成该数据结构后又要用作其他的计算,那么你在调试阶段,每次执行个程序,就光生成数据结构就要花上这么长的时间。假设你确定生成数据结构的算法不会变或不常变,那么就能够通过序列化技术生成数据结构数据存储到磁盘上,下次又一次执行程序时仅仅须要从磁盘上读取该对象数据就可以,所花费时间也就读一个文件的时间。
  • 虽然都是二进制的数据,但是序列化的二进制数据是通过一定的协议将数据字段进行拼接。第一个优势是:不同的语言都可以遵循这种协议进行解析,实现了跨语言。第二个优势是:这种数据可以直接持久化到磁盘,从磁盘读取后也可以通过这个协议解析出来。

2、定义

要想使用网络框架的API来传输结构化的数据,必须得先实现结构化的数据与字节流之间的双向转换。这种将结构化数据转换成字节流的过程,称为序列化,反过来转换,就是反序列化。

  • 简单来说,序列化就是将对象实例的状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它依据流重构对象。这两个过程结合起来,能够轻松地存储和数据传输。
    • 比如,能够序列化一个对象,然后使用HTTP 通过 Internet 在client和server之间传输该对象。

3、序列化评价指标

  • 1、可读性
    • 序列化后的数据最好是易于人类阅读的
  • 2、实现复杂度
    • 实现的复杂度是否足够低
  • 3、性能
    • 序列化和反序列化的速度越快越好
  • 4、信息密度
    • 序列化后的信息密度越大越好,也就是说,同样的一个结构化数据,序列化之后占用的存储空间越小越好
03   | 08 7a 68 61 6e 67 73 61 6e | 17 | 01
User |    z  h  a  n  g  s  a  n  | 23 | true
  • 1.首先我们需要标识一下这个对象的类型,这里面我们用一个字节来表示类型,比如用 03 表示这是一个 User 类型的对象。
  • 2.我们约定,按照 name、age、married 这个固定顺序来序列化这三个属性。按照顺序,第一个字段是 name,我们不存字段名,直接存字段值“zhangsan”就可以了,由于名字的长度不固定,我们用第一个字节 08 表示这个名字的长度是 8
    个字节,后面的 8 个字节就是 zhangsan。
  • 3.第二个字段是年龄,我们直接用一个字节表示就可以了,23 的 16 进制是 17 。
  • 4.最后一个字段是婚姻状态,我们用一个字节来表示,01 表示已婚,00 表示未婚,这里面保存一个 01。

同样的一个User对象,JSON序列化后({"name":"zhangsan","age":"23","married":"true"})

  • JSON序列化后需要47个字节,专用的序列化方法只要12个字节就够了。
  • 专用的序列化方法显然更高效,序列化出来的字节更少,在网络传输过程中的速度也更快。但缺点是,需要为每种对象类型定义专门的序列化和反序列化方法,实现起来太复杂了,大部分情况下是不划算的。

4、序列化实例

案例1:

//Srlz1.cpp: 将一个类的一个对象序列化到文件#include <iostream>#include <fcntl.h>#include <vector>#include <stdio.h>using namespace std;//定义类CA//数据成员:int x;//成员函数:Serialize:进行序列化函数//             Deserialize反序列化函数//             Show:数据成员输出函数class CA{private:int x;  //定义一个类的数据成员。       public:CA()    //默认构造函数{x = ;}CA(int y):x(y)    //定义构造函数,用初始化列表初始化数据成员{}virtual ~CA()    //析构函数{}public://序列化函数:Serialize//成功,返回0,失败,返回0;int Serialize(const char* pFilePath) const{int isSrlzed = -;FILE* fp;   //define a file pointer//以读写方式打开文件,并判断是否打开;if ((fp = fopen(pFilePath, "w+")) == NULL){printf("file opened failure\n");return -;  //若打开失败,则返回-1;}//调用fwrite函数,将对象写入文件;isSrlzed = fwrite(&x, sizeof(int), , fp);           //判断写入是否成功;if ((- == isSrlzed) || ( == isSrlzed)){printf("Serialize failure\n");return -;  //若写入失败,则返回-1;}if(fclose(fp) != ) //关闭文件{printf("Serialize file closed failure.\n");return -;}printf("Serialize succeed.\n");return ;   //序列化成功,返回0;}           //反序列化函数://成功,返回0,失败,返回-1;int Deserialize(const char* pFilePath){int isDsrlzed = -;FILE* fp;//以读写方式打开文件,并判断是否打开;if ((fp = fopen(pFilePath, "r+")) == NULL){printf("file opened failure.\n");return -;}//调用fread函数,读取文件中的对象 ;isDsrlzed = fread(&x, sizeof(int), , fp);//判断是否成功读入if ((- == isDsrlzed)||( == isDsrlzed)){printf("Deserialize failure.\n");return -;    //若读取失败,则返回-1;}if(fclose(fp) != ){printf("Deserialize file closed failure.\n");return -;}printf("Deserialize succeed.\n");return ;        //反序列化成功,则返回0;}           //成员对象输出显示函数void Show(){cout<< "in Show():"<< x << endl;}};
 int main(int argc, char const *argv[]){CA as();    //定义一个类对象,并初始化;     //调用序列化函数,将对象as序列化到文件data.txt中;as.Serialize("data.txt");   CA ad;        //定义一个类对象,用来记录反序列化对象//调用反序列化函数,将文件data.txt中的对象反序列化到ad对象;ad.Deserialize("data.txt");    ad.Show();    //调用输出显示函数;    return ;  }

更详细的案例,简单注释:
1、CharVec.h : 定义一个 vector < char> 类型字节数组,也就是一个定义的容器,为下面的DataStream中存放数据提供接口:

#ifndef CHARVEC_H
#define CHARVEC_H 
#include <memory>
class CharVec{
public:CharVec();    CharVec(const CharVec &vec);   CharVec &operator =(const CharVec &vec);   ~CharVec();bool operator ==(const CharVec &vec) const;size_t size() const;//vector里实际存放数据的大小size_t capacity() const;//capacity是vector的内存分配大小char *begin() const;char *end() const;void push(const char *data, int len);void push(const std::string &str);void push(char c);void removeFromFront(int len);void clear();
private:void checkAndAlloc();void reallocate();void free();std::pair<char *, char *> allocAndCopy(char *begin, char *end);
private:char *m_Elements;   // 首元素char *m_FirstFree;  // 最后一个实际元素之后的位置char *m_Cap;        // 分配内存末尾之后的位置std::allocator<char> m_Allocator;  // 内存分配器
};
#endif // CHARVEC_H

2、CharVec.cpp :对CharVec.h 声明的函数进行定义

// CharVec.cpp
#include "CharVec.h"
CharVec::CharVec() :m_Elements(nullptr), m_FirstFree(nullptr),m_Cap(nullptr)
{}//构造函数
CharVec::CharVec(const CharVec &vec)//拷贝构造
{auto newData = allocAndCopy(vec.begin(), vec.end());//allocAndCopy分配空间,并且初始化m_Elements  = newData.first;m_FirstFree = newData.second;m_Cap       = newData.second;
}
CharVec &CharVec::operator =(const CharVec &vec)//=重载
{auto newData = allocAndCopy(vec.begin(), vec.end());free();m_Elements  = newData.first;m_FirstFree = newData.second;m_Cap       = newData.second;return *this;
}
CharVec::~CharVec()//析构
{free();
}bool CharVec::operator ==(const CharVec &vec) const//==重载
{if (m_Elements == vec.m_Elements &&m_FirstFree == vec.m_FirstFree &&m_Cap == vec.m_Cap) {return true;}return false;
}
size_t CharVec::size() const//当前元素数目
{return m_FirstFree - m_Elements;
}
size_t CharVec::capacity() const//容器总的空间大小
{return m_Cap - m_Elements;
}char *CharVec::begin() const
{return m_Elements;
}
char *CharVec::end() const
{return m_FirstFree;
}
void CharVec::push(const char *data, int len)
{if (len <= 0) {return ;}for (int i = 0; i < len; ++i) {push(data[i]);}
}
void CharVec::push(const std::string &str)
{push(str.c_str(), str.size());
}
void CharVec::push(char c)
{checkAndAlloc();m_Allocator.construct(m_FirstFree++, c);
}
void CharVec::removeFromFront(int len)//从m_Element开始释放掉len长度的数据。
{if (len > size()) {return ;}char *from = m_Elements;char *to = m_Elements + len;m_Elements += len;for (int i = 0; i < len; ++i) {m_Allocator.destroy(--to);}m_Allocator.deallocate(from, m_Elements - from);
}
void CharVec::clear()//容器清空操作
{free();m_Elements = nullptr;m_FirstFree = nullptr;m_Cap = nullptr;
}
//checkAndAlloc()会先判断size是不是和capacity相等,
//然后调用reallocate进行内存的分配,重新分配的空间是原来的2倍,
//然后数据转移,使用std::move而不是拷贝可以提高效率。
void CharVec::checkAndAlloc()
{if (size() == capacity()) {reallocate();}
}
void CharVec::reallocate()//类似vector的扩容操作
{auto newCapacity = size() ? 2 * size() : 1;//重新分配的空间是原来的2倍auto newData = m_Allocator.allocate(newCapacity);//allocate分配空间auto dest = newData;auto ele = m_Elements;for (size_t i = 0; i != size(); ++i) {m_Allocator.construct(dest++, std::move(*ele++));//construct初始构造}free();m_Elements  = newData;m_FirstFree = dest;m_Cap       = m_Elements + newCapacity;
}
void CharVec::free()
{if (m_Elements) {for (auto p = m_FirstFree; p != m_Elements;) {m_Allocator.destroy(--p);//destroy析构对象,此时空间还是可以使用}m_Allocator.deallocate(m_Elements, m_Cap - m_Elements);//deallocate回收空间}
}std::pair<char *, char *> CharVec::allocAndCopy(char *begin, char *end)
{auto startPos = m_Allocator.allocate(end - begin);return {startPos, std::uninitialized_copy(begin, end, startPos)};
}

3、DataHeader类的声明:定义id,及headerlen,totalLen相关客户属性

// DataHeader.h#ifndef DATAHEADER_H
#define DATAHEADER_Hstruct DataHeader
{DataHeader(int id = 0);bool operator==(const DataHeader &header);void reset();const static int s_HeaderLen = 3 * sizeof(int);int m_Id;int m_HeaderLen;int m_TotalLen;
};
#endif // DATAHEADER_H

3、DataStream.h:

  • 支持序列化和反序列化操作,
    • 枚举继承char类型意思是说这个枚举里的枚举值底层是用char来存储的
  • 支持是序列化相关的数据类型,
  • 往这个类的写数据和读数据都是提供了两种形式,
  • 流式操作符(<< 或者 >> )和函数(readVal,writeVal)
// DataStream.h
#ifndef DATASTREAM_H
#define DATASTREAM_H
#include <memory>
#include <map>
#include <list>
#include <vector>
#include <set>
#include "DataHeader.h"
#include "CharVec.h"class CustomTypeInterface;//前向声明
class DataStream
{
public:DataStream(std::unique_ptr<DataHeader> *header = nullptr);DataStream(const DataStream &stream);DataStream& operator =(const DataStream &stream);enum class DataType : char {UnKnown,Boolean,Char,WChar,Int,UInt,Int64,Double,String,WString,Vector,List,Map,Set,CustomType,};bool operator == (const DataStream &stream) const;// 指数组里存放的数据int totalSize() const { return m_Header->m_TotalLen; }//数据的总长int headerSize() const { return m_Header->m_HeaderLen; }//头部的长度int dataSize() const {return m_Header->m_TotalLen - m_Header->m_HeaderLen;}//内容数据的长度void clear();// writevoid writeHeader();void writeData(const char *data, int len);//这里是写入不同数据类型的数据DataStream& operator<<(char val);void writeVal(char val);DataStream& operator<<(wchar_t val);void writeVal(wchar_t val);DataStream& operator <<(bool val);void writeVal(bool val);DataStream& operator <<(int val);void writeVal(int val);DataStream& operator <<(unsigned int val);void writeVal(unsigned int val);DataStream& operator <<(int64_t val);void writeVal(int64_t val);DataStream& operator <<(double val);void writeVal(double val);DataStream& operator <<(const std::string &val);void writeVal(const std::string &val);DataStream& operator <<(const std::wstring &val);void writeVal(const std::wstring &val);DataStream& operator <<(CustomTypeInterface *val);void writeVal(CustomTypeInterface *val);//这里是往不同的STL容器中写入模板类型的数据template<typename T>DataStream& operator <<(const std::vector<T>& val);template<typename T>void writeVal(const std::vector<T>& val);template<typename T>DataStream& operator <<(const std::list<T>& val);template<typename T>void writeVal(const std::list<T>& val);template<typename T1, typename T2>DataStream& operator <<(const std::map<T1, T2>& val);template<typename T1, typename T2>void writeVal(const std::map<T1, T2>& val);template<typename T>DataStream& operator <<(const std::set<T>& val);template<typename T>void writeVal(const std::set<T>& val);// readvoid readHeader(const char *data);template<typename T>bool readData(T *val);bool operator>>(char &val);bool readVal(char &val);bool operator>>(wchar_t& val);bool readVal(wchar_t &val);bool operator>>(bool &val);bool readVal(bool &val);bool operator>>(int &val);bool readVal(int &val);bool operator>>(unsigned int &val);bool readVal(unsigned int &val);bool operator>>(int64_t &val);bool readVal(int64_t &val);bool operator>>(double &val);bool readVal(double &val);bool operator>>(std::string &val);bool readVal(std::string &val);bool operator>>(std::wstring &val);bool readVal(std::wstring &val);bool operator>>(CustomTypeInterface *val);bool readVal(CustomTypeInterface *val);template<typename T>bool operator>>(std::vector<T> &val);template<typename T>bool readVal(std::vector<T> &val);template<typename T>bool operator>>(std::list<T> &val);template<typename T>bool readVal(std::list<T> &val);template<typename T1, typename T2>bool operator>>(std::map<T1, T2> &val);template<typename T1, typename T2>bool readVal(std::map<T1, T2> &val);template<typename T>bool operator>>(std::set<T> &val);template<typename T>bool readVal(std::set<T> &val);// Serialize and Deserializeint Serialize(char *buf) const;bool Deserialize(const char *buf, int len);
private:std::unique_ptr<DataHeader> m_Header;//存储的客户类型指针CharVec  m_DataBuffer;//存储的容器int  m_IsFirstWrite;//判断是否为第一次写入
};

4、DataStream.cpp:DataStream.h文件相关函数的实现

#include "DataStream.h"
#include "CustomTypeInterface.h"DataStream::DataStream(std::unique_ptr<DataHeader> *header) :m_IsFirstWrite(true)//构造函数的实现
{if (header == nullptr) {//header对象为空指针,重置新的对象指针m_Header.reset(new DataHeader);}else {m_Header.reset(header->release());//release()释放关联的原始指针,unique_ptr相关的函数}
}DataStream::DataStream(const DataStream &stream)//拷贝构造
{operator =(stream);
}DataStream &DataStream::operator =(const DataStream &stream)//=重载
{if (&stream == this) {//比较对象和原对象相同,没有赋值的必要了return *this;}m_Header.reset(new DataHeader);//重载并且初始化*m_Header = *stream.m_Header;//相关赋值操作m_DataBuffer = stream.m_DataBuffer;m_IsFirstWrite = stream.m_IsFirstWrite;return *this;
}bool DataStream::operator ==(const DataStream &stream) const//==重载
{if (&stream == this) {return true;}if (m_Header.get() == stream.m_Header.get() &&m_DataBuffer == stream.m_DataBuffer) {return true;}return false;
}void DataStream::clear()
{m_IsFirstWrite = true;m_DataBuffer.clear();m_Header->reset();
}void DataStream::writeHeader()
{int headerLen = DataHeader::s_HeaderLen;writeData((char *)&(m_Header->m_TotalLen), sizeof(int));writeData((char *)&headerLen, sizeof(int));writeData((char *)&m_Header->m_Id, sizeof(int));m_Header->m_HeaderLen = headerLen;
}void DataStream::writeData(const char *data, int len)
{if (len == 0) {return ;}//把他的type写入,//如果是第一写入,先把header写入, 然后再写数据,更新totalLenif (m_IsFirstWrite) {m_IsFirstWrite = false;writeHeader();}//然后在把数据写入m_DataBuffer.push(data, len);m_Header->m_TotalLen += len;//更新totalLenmemcpy(m_DataBuffer.begin(), &m_Header->m_TotalLen, sizeof(int));
}void DataStream::writeVal(char val)
{char type = (char)DataType::Char;writeData((char *)&(type), sizeof(char));writeData(&val, sizeof(char));
}void DataStream::writeVal(const std::string &val)
{char type = (char)DataType::String;writeData((char *)&(type), sizeof(char));int size = val.size();writeVal(size);writeData(val.c_str(), size);
}void DataStream::writeVal(CustomTypeInterface *val)
{val->serialize(*this, (char)DataType::CustomType);
}void DataStream::readHeader(const char *data)
{int *p = (int *)data;m_Header->m_TotalLen  = *p++;m_Header->m_HeaderLen = *p++;m_Header->m_Id        = *p++;m_Header->m_TotalLen -= m_Header->m_HeaderLen;m_Header->m_HeaderLen = 0;
}//从dataBuffer的数据取出来,然后更新totalLen.
//由于这个函数是模板函数,所以我们把他放在了头文件。
/*template<typename T>
bool DataStream::readData(T *val)
{int size = m_DataBuffer.size();int count = sizeof(T);if (size < count) {return false;}*val = *((T*)m_DataBuffer.begin());m_DataBuffer.removeFromFront(count);m_Header->m_TotalLen -= count;return true;
}*/
//先读取出来类型,然后读取数据
bool DataStream::readVal(char &val)
{char type = 0;if (readData(&type) && type == (char)DataType::Char) {return readData(&val);}return false;
}bool DataStream::readVal(std::string &val)
{char type = 0;if (readData(&type) && type == (char)DataType::String) {int len = 0;if (readVal(len) && len > 0) {val.assign(m_DataBuffer.begin(), len);m_DataBuffer.removeFromFront(len);m_Header->m_TotalLen -= len;}return true;}return false;
}bool DataStream::readVal(CustomTypeInterface *val)
{return val->deserialize(*this, (char)DataType::CustomType);
}int DataStream::Serialize(char *buf) const//序列化
{int totalLen = m_Header->m_TotalLen;int size = m_DataBuffer.size();if (size <= 0 || totalLen == 0 || size != totalLen) {return 0;}memcpy(buf, m_DataBuffer.begin(), totalLen);return totalLen;
}bool DataStream::Deserialize(const char *buf, int len)//反序列化
{if (buf == nullptr || len <= 0) {return false;}readHeader(buf);m_DataBuffer.clear();m_DataBuffer.push(buf + DataHeader::s_HeaderLen, len - DataHeader::s_HeaderLen);return true;
}

5、CustomTypeInterface:自定义类型,比如你自己定义了一个结构体,怎样传输它呢。我们为自定义的结构体定义一个接口类。

class CustomTypeInterface
{
public:virtual ~CustomTypeInterface() = default;virtual void serialize(DataStream &stream, char type) const = 0;virtual bool deserialize(DataStream &stream, char type) = 0;
};

测试

#include <iostream>
#include "DataStream.h"
#include "CustomTypeInterface.h"class Test : public CustomTypeInterface
{
public:SerializeAndDeserialize(Test, m_A * m_B);
public:int  m_A;bool m_B;
};
int main(int argc, char *argv[])
{char c1 = 'c';Test t;t.m_A = 1;t.m_B = false;DataStream stream;stream.writeVal(c1);stream.writeVal(&t);int size = stream.totalSize();char *data = new char[size];stream.Serialize(data); DataStream stream2;stream2.Deserialize(data, size);char c2;Test t2;stream2.readVal(c2);stream2.readVal(&t2);std::cout << c2 << t2.m_A << t2.m_B;return 0;}

在这里插入图片描述
代码地址:https://download.csdn.net/download/leapmotion/10762437

参考

1、 https://www.cnblogs.com/chjxbt/p/11458815.html
2、 https://www.bbsmax.com/A/kmzLo1jYdG/
3、https://blog.csdn.net/leapmotion/article/details/83687517

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

相关文章

  1. Android 源码添加一个自定义的系统服务

    做 android 开发,经常用到 xxxManager ,如果要添加一个自定义的系统服务,该如何操作呢? 基于 AN 6.0 ,新增 ThunderManager ,修改如下: 1.创建 IThunderService.aidl 在 frameworks/base/core/java/android/os/ 目录创建 IThunderService.aidl package android.os;// De…...

    2024/4/26 7:42:45
  2. 学习数据库第一节:

    添加数据库```csharpif (_userManager != null){_userManager.Dispose();_userManager = null;} }...

    2024/4/16 7:49:32
  3. 数据割接测试

    前言:本帖以oracle割接到mysql为例。 割接测试大体分为以下几个部分: 一、oracle部分确认所有的表有多少张,确认需要割接的表有多少张,不需要割接的表是否需要核对。 按照现网数据量等比例造割接数据。(尽量保证每个割接表都有数据,判断割接的正确性。) 导出oracle的数据。…...

    2024/4/16 7:48:46
  4. php 解析字符串编码方式 GB2312 UTF8

    //查看编码方式 $codeFormat = mb_detect_encoding($inStr, array("ASCII", "UTF-8", "GB2312", "GBK", "BIG5")); echo $codeFormat;//转码 if ($codeFormat == "UTF-8") {$outStr = iconv("UTF-8", &…...

    2024/4/16 7:49:07
  5. 基于HTML5 Canvas实现的图片马赛克模糊特效

    效果请点击下面网址: http://hovertree.com/texiao/html5/1.htm一、开门见山受美国肖像画家Chuck Close的启发,此脚本通过使用HTML5 canvas元素把图像转换成像素形式,这基本上是一个为canvas imageData功能的简单演示。此脚本现存于GitHub上,您可以在那里下载到脚本和示例。…...

    2024/4/16 7:48:41
  6. VS每次编译都重新编译整个工程解决办法

    文章转载至:https://blog.csdn.net/u011269262/article/details/50396001在使用VS2008编译C++程序的时候,每次修改工程中的某一个文件,点击“生成-仅用于项目-仅生成**”时,往往都是整个工程都需要重新编译一遍。由于这个工程代码量太大,每次编译完成都需要将近10分钟左右…...

    2024/4/16 7:49:12
  7. Qt生成UTF-8编码的MD5值

    MD5值采用UTF-8编码,代码如下: QString CommonHelper::md5(QString key) {QCryptographicHash md5(QCryptographicHash::Md5);md5.addData(key.toUtf8());return QString(md5.result().toHex()); }...

    2024/4/16 7:50:18
  8. 数据结构-图-最小生成树-克鲁斯卡尔算法(Kruskal)边多的用prim,边少的用kruskal

    思路:设置一个数组p[edgenum],存放访问过的边,设置一个边集数组结构,存放边的begin,end,weight. 把所有边放入边集数组,并按权重从小到大排序。n为p的下标 m为p的值 1:权重 7 输出 h e(7 4) 数组p(000070000) n=4 m=7 2:权重8 输出 i c (8 2) p(008070000…...

    2024/4/16 7:49:27
  9. MNN量化源码详解

    参考链接:https://www.zhihu.com/question/337513515...

    2024/4/19 0:42:25
  10. Gin框架踩坑——[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 400 with

    这个报错场景为 : 1.Gin框架、2.编写POST请求方式接口、3.使用结构体绑定方式接受参数 该坑现象为 : 当结构体绑定参数失败时(即参数有误、传错时),httpcode为400,无论开发者如何强制返回httpcode,code就是400 原因 : 行为 – 这些方法MustBindWith在引擎盖下使用。如果存在…...

    2024/4/18 18:43:32
  11. JavaScript的六种继承

    继承 简介 继承就是子类继承父类的属性和方法。要继承必须有父类。 JavaScript里面的继承分为六种:1、原型链继承;2、构造继承;3、实例继承;4、拷贝继承;5、组合继承;6、寄生组合继承。 继承的核心 proto: 对象特有的,指向上层(创建自己的那个构造函数)的原型对象(p…...

    2024/4/16 7:49:37
  12. 跨境电商shopee引流技巧,关于引流小知识,详细讲解我的引流方法

    流量作为不管是店铺还是平台来说都是绕不过去的弯。相信做网店的店主都会把引流放在重要的位置,都有自己的引流体系,绞尽脑汁的提高网站的流量,如何去涨粉,如何提高访问量,今天我给大家讲一下我的引流方法。一、关键词热搜词 我们的关键词都是针对自己的产品和店铺进行选择…...

    2024/4/26 1:54:16
  13. qDBus使用笔记

    如果我想开发一个启动多次只会出现一个进程的APP,使用qDbus非常适合简单。假设我想把我的MainWindow的slotCreateMainwindow导出为一个服务接口。步骤如下:1.改造我们的Mainwindow.h#define SERVICENAME "com.musicio.monitor" #define PATH "/monitor/object…...

    2024/4/16 6:51:19
  14. Spring事务处理机制之RuntimeException()和Exception()区别

    https://www.cnblogs.com/e-x-c-e-ption/p/11954027.html...

    2024/4/25 15:12:03
  15. SIM7600模块固件升级(模块自身升级)

    SIM7600模块固件升级(模块自身升级) 本文博客链接:https://editor.csdn.net/md/?articleId=107102723 作者:zsj ,转载请注明. 之前选购了一款4G通讯芯片——SIM7600CE,测试通过,应用到项目中,效果不错。 在第二批采购回来,进行简单测试(USB连接电脑发送AT指令)后,…...

    2024/4/24 13:23:30
  16. unity读取Excel

    使用unity5.6的和Excel是2016版本。新建工程,新建文件夹Plugins,然后导入两个dll,一个是EXCEL一个system.Data。读取脚本如下:using System.Collections.Generic; using UnityEngine; using System.Data; using System.IO; using Excel; public class DoExcel { public …...

    2024/4/16 7:50:33
  17. keil警告 xxx.axf: Warning: L6304W: Duplicate input file stag_wb55_ml\dbg_trace_1

    记录一个日常 包含文件重复的警告。...

    2024/4/17 10:37:27
  18. Spring整合Mybatis SQL语句的输出

    【1.修改Spring-Mybatis】<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><-- 添加此行代码 ,并创建一个mybatis-config.xml-->…...

    2024/4/16 7:50:23
  19. 数学建模--相关系数(3)--斯皮尔曼

    0.875和0.8721这两个结果不同的原因是,上面采用了一个规则:如果有数值相同,则将他们所在的位置取算术平均。必须保证用斯皮尔曼时,用的是列向量。0.8721我们使用的是双尾检验。0.0301:表示第一列数据和第二列数据R:显著性水平 P:P值 spss-斯皮尔曼皮尔逊斯皮尔曼总结:连续…...

    2024/4/16 7:49:58
  20. N个数之和

    题目 输入数字N,然后输入N个数,计算这N个数的和。 输入描述: 第一行输入一个整数N(0≤N≤50),第二行输入用空格分隔的N个整数。 输出描述: 输出为一行,为第二行输入的“N个整数之和”的计算结果。 import java.util.Scanner;public class Main {public static void main(S…...

    2024/4/16 7:50:03

最新文章

  1. 图神经网络 | 混合神经网络模型GCTN地铁客流预测

    随着城市人口的不断增加,城市交通也在迅速扩张,这对城市的可持续发展提出了新的挑战。与私家车相比,城市轨道交通可以减少与交通相关的能源消耗、出行成本、交通拥堵和环境污染。同时,研究表明,在城市轨道交通强度较高的城市,汽车保有量的增长相对较慢。因此,地铁、公交…...

    2024/4/26 16:25:00
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. 如何构建数据指标体系

    构建一套科学、完备且实用的数据分析指标体系是一项系统性的工程&#xff0c;其核心在于将业务理解、目标设定、度量标准选择、数据采集与整理、数据分析、指标体系构建、持续优化与改进等多个环节有机融合&#xff0c;以实现对业务状况的精准刻画、趋势预测及决策支持。以下是…...

    2024/4/25 2:13:05
  4. 【Java】假如把集合体系看作购物中心

    购物中心入口&#xff1a;Java集合框架 “Java集合广场”的购物中心&#xff0c;这是一个集合了各种奇特商店的地方&#xff0c;每个商店都充满了不同的宝藏&#xff08;数据结构&#xff09;。 一楼&#xff1a;基础集合区 - Collection接口 一楼是基础集合区&#xff0c;这…...

    2024/4/24 3:27:38
  5. jQuery(一)

    文章目录 1. 基本介绍2.原理示意图3.快速入门1.下载jQuery2.创建文件夹&#xff0c;放入jQuery3.引入jQuery4.代码实例 4.jQuery对象与DOM对象转换1.基本介绍2.dom对象转换JQuery对象3.JQuery对象转换dom对象4.jQuery对象获取数据获取value使用val&#xff08;&#xff09;获取…...

    2024/4/23 6:09:29
  6. 【外汇早评】美通胀数据走低,美元调整

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

    2024/4/25 11:51:20
  7. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/4/25 18:39:24
  8. 【外汇周评】靓丽非农不及疲软通胀影响

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

    2024/4/25 18:38:39
  9. 【原油贵金属早评】库存继续增加,油价收跌

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

    2024/4/25 18:39:23
  10. 【外汇早评】日本央行会议纪要不改日元强势

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

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

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

    2024/4/25 18:39:22
  12. 【外汇早评】美欲与伊朗重谈协议

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

    2024/4/25 18:39:20
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

    2024/4/25 16:48:44
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

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

    2024/4/26 16:00:35
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

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

    2024/4/25 18:39:16
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

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

    2024/4/25 0:00:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

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

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

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

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

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

    2024/4/25 18:39:12
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

    2024/4/25 2:10:52
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/4/25 18:39:00
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

    2024/4/25 13:19:01
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/4/25 18:38:58
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

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

    2024/4/25 18:38:57
  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