微信聊天记录做成词云~

2023-05-16

最近快毕业了,所以想把微信聊天记录全部导出、做成词云、然后寄给好友,想想都很浪漫,哈哈。先上词云结果图(结果图拿《三国演义》做的,想啥呢,我才不会把我的聊天记录发到网上,哈哈),然后教大家如何不花钱(也不要C币)做出高清的聊天记录词云。(想花钱做的请下载“卓师兄”得到聊天记录,使用微词云得到高清词云图,大概200元就可以搞定)

我是个小白,在制作过程中遇到了很多坑,所以我会说很多,也许比较啰嗦,也算是希望大家别踩我的坑,哈哈。

步骤分为以下几个部分:1、微信应用数据备份。2、微信数据库解密。3、微信聊天记录提取和处理。4、词云制作。

1、微信应用数据备份。

微信数据备份网上教程很多(点我进入知乎的备份教程),我的手机型号是华为畅享8 Plus(FLA-AL10),因此只要你是华为手机,直接跟着我的教程走就完全没有问题。华为手机助手这个坑我踩过,别用,哈哈,还是自带的老版本备份软件最好!

(1)卸载本机的华为备份软件。新版本的备份软件不能备份微信应用数据,所以要卸载。如果你找不到“备份”图标,那就可以这样卸载:设置->应用和管理->应用管理->备份->卸载。

(2)下载并安装8.0版的华为备份软件。点我下载华为备份8.0。

(3)备份微信应用数据。照着下面图片的步骤就行,步骤6后面会提示设置密码,需要点击跳过。我的最终备份文件路径为“内部存储\Huawei\Backup\backupFiles\2020-05-29_10-54-12\com.tencent.mm.db"。

                           

                    

2、微信数据库解密。

看雪论坛的newx大神详细讲解过手机版和电脑版解密的方法(点我进入newx大神的主页),我几乎照搬他的教程,自己琢磨出了一套我的方法。

(1)微信备份数据库转为文件夹格式。使用楼月安卓手机备份文件提取器来把com.tencent.mm.db变为文件夹格式。(点我下载楼月软件)。为了方便借鉴我的教程,本教程所有文件全部放到D:\weiXinCiYun中。如下图,把第一节中的数据库文件放到D:\weiXinCiYun\com.tencent.mm.db,然后提取为D:\weiXinCiYun\data。

对了,楼月其实还有微信聊天记录导出恢复助手,但是收费100元,而且效果一般。

(2)获取IMEI。IMEI(International Mobile Equipment Identity)就是国际移动设备识别码,即通常所说的手机序列号,用来区分每部手机。如下图可以从华为手机的设置中得到IMEI,双卡的IMEI有两个,你需要看看自己用的是哪张。也可以通过记事本打开D:\weiXinCiYun\data\data\com.tencent.mm\MicroMsg\compatibleinfo.cfg,里面的乱码里有一串15位的数字,就是IMEI。如果上面俩办法还是不行,那您进入2-(3)来获取IMEI。

                      

(3)获取UIN,计算出最终密码。UIN(User INformation)就是用户信息识别码,每个人的UIN不同。之前可以通过抓取网页版微信的数据得到,现在个人不能登录网页版微信了(反正我登陆不了,哈哈)。首先呢,数据库破解密码计算公式如下。如果你问我谁破解出了这个密码公式,我只能说:有内鬼,终止交易(ΩДΩ)

                                                                       密码=前7位(MD5((IMEI+KEY)密码=取前六位(MD5(IMEI + UIN))))

下面我们来破解吧!下载一个Java的集成开发环境,比如我下载了IntelliJ IDEA(其实我不会java,但是我会照着百度新建工程、运行代码,哈哈)。将D:\weiXinCiYun\data\data\com.tencent.mm\MicroMsg下的两个文件“compatibleinfo.cfg”(存着IMEI信息)和“systeminfo.cfg”(存着UIN信息)放到java工程D:\weiXinCiYun\JavaPrj下。然后用Java的Hashmap解码,获取信息,MD5处理,取其前7位即可。java代码和操作流程如下:

package com.company;
import java.io.FileInputStream;             // 文件输入流
import java.io.FileNotFoundException;       // 文件未找到的异常处理
import java.io.IOException;                 // 输入输出异常处理
import java.io.ObjectInputStream;           // 输入流
import java.security.MessageDigest;         // 支持MD5算法
import java.util.HashMap;                   // 支持哈希算法
public class Main {
    // main函数
    public static void main(String[] args) {
        try {
            // 取手机的IMEI
            // 读入CompatibleInfo.cfg文件
            ObjectInputStream in = new ObjectInputStream(new FileInputStream("CompatibleInfo.cfg"));
            Object DL = in.readObject();
            // java的哈希转换
            HashMap hashWithOutFormat = (HashMap) DL;
            String s = String.valueOf(hashWithOutFormat.get(Integer.valueOf(258)));
            System.out.println("IMEI:"+s);

            // 获取微信UIN,与IMEI获取类似
            ObjectInputStream in1 = new ObjectInputStream(new FileInputStream("systemInfo.cfg"));
            Object DJ = in1.readObject();
            HashMap hashWithOutFormat1 = (HashMap) DJ;
            String t = String.valueOf(hashWithOutFormat1.get(Integer.valueOf(1)));
            System.out.println("uin:"+t);

            //合并到一个字符串,然后使用MD5算法,取其前6位
            s = s + t;
            s = encode(s); // MD5
            System.out.println("密码是 : " + s.substring(0, 7));
            in.close();
            in1.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // MD5计算
    public static String encode(String content)
    {
        try {
            MessageDigest digest = MessageDigest.getInstance("MD5");
            digest.update(content.getBytes());
            return getEncode32(digest);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

    // 十进制转十六进制
    private static String getEncode32(MessageDigest digest)
    {
        StringBuilder builder = new StringBuilder();
        for (byte b : digest.digest())
        {
            builder.append(Integer.toHexString((b >> 4) & 0xf));
            builder.append(Integer.toHexString(b & 0xf));
        }
        return builder.toString();

    }
}

(4)取出聊天记录。2-(3)里最后一张图的调试界面已经显示出了密码,我们下载一个数据库软件,用密码对数据库解密就行。一定要下载sqlcipher2版本,其它数据库软件不行,我试过,哈哈,点我下载sqlcipher2。D:\weiXinCiYun\data\data\com.tencent.mm\MicroMsg\c2f9b29c3178c858d04e3ac3382b7c33\enmicromsg.db这个数据库存放着微信的聊天记录,最后两级路径可能不同,但enmicromsg.db名称是固定的。用sqlcipher打开enmicromsg.db,将其中的message表输出为csv即可,最后把message.csv转为message.xlsx。具体操作如下图:

3、微信聊天记录提取和处理

将上节的message.xlsx放到D:\weiXinCiYun下面。然后打开,我来讲解一下该excel每列内容的含义。我这里复制了很多简书“唐九十九藏”大神的内容(点我看唐九十九藏的内容)。

1、msgId:Message Identity,消息标识,取值2,3,4,5...,用来区分每条消息,相当于消息的身份证。

2、msgSvrId:不知道啥意思,哈哈。

3、type:消息类型,1-文本,3-图片,34-语音,43-视频,47-微信外部成系列开发的表情包49-做成微信格式的外部网页链接。10000-撤回消息,1048625-微信外部单独开发的表情包,285212721-微信公众号推送的自动消息,419430449-微信红包(未更新时会有类似提示)。

4、status:不知道啥意思,o(╥﹏╥)o

5、isSend:0-收到消息,1-发送消息。

6、isShowTimer:不知道啥意思,我的16万条消息里面,它都是空。

7、createTime:消息发送/收到的时间。这里用的是UNIX时间戳。

8、talker:WXID,即微信号码。

9、content:聊天记录。

10、imgPath:Image Path,微信图像、语音、视频等大文件的存储路径。

11、reserved:不知道啥意思,(ΩДΩ)

12、lvbuffer:几乎全是“{”,感觉没啥用。

13、transContent:不知道啥意思,我的16万条消息里面,它都是空。

14、transBrandWording:不知道啥意思,我的16万条消息里面,它都是空。

15、talkerId:微信好友的唯一号码,它相当于微信里的身份证号。

16、bizClientMsgId:如果变量非空,那么type就是285212721,status就是3,isSend就是3,content就是~SEMI_XML~,所以我猜应该是微信号推送消息的某种号码。

17、bizChatId:大部分值都是-1,微信运动相关行其值为空。估计没啥意义。

18、bizChatUserId:不知道啥意思,我的16万条消息里面,它都是空。

19、msgSeq:与msgId差一个常数,感觉很鸡肋,有时候还是空。

20、flag:msgSeq有值,则flag=0,msgSeq为空,则flag也为空。

将下面的Matlab代码放到D:\weiXinCiYun下运行,将代码第13行的yourID改为你想要微信联系人的talkerId就行。代码运行结果中user.contentText矩阵里的content那一列就是对应talkerId的用户的所有文字聊天记录(图片和网页之类的东西我剔除了),把content那一列复制下来,放到'李某某.txt'中。把具体代码和matlab界面如下:

% 选择是否从初始化,excel里导入数据
if(1)
    close all; clear; clc;
    fileName = 'message.xlsx';
    range = 'A1:T2';
    [num, txt, raw] = xlsread(fileName);    
end

% message为数据库聊天记录message表
yourName = '李某某';
myName = '王某某'
message = raw;
yourID = 193;

% user为your的单个结构体,下面的...Id存储某列值在message里的列数
ans = ['开始新建', yourName, '的user数据...']
yourFullName = yourName;                % 你的名字
myFullName = myName;                     % 我的名字
user.talkerId = yourID;                         % 用户编码:咱只需要本用户的数据,其余数据丢弃
user.typeIndex = 3;                              % 聊天记录类型的列数:1文字消息,其余全不要
user.isSendIndex = 5;                           % 发送类型的列数:0接收,1发送
user.creatTimeIndex = 7;                     % 发送时间的列数
user.contentIndex = 9;                         % 发送内容的列数
user.imgPathIndex = 10;                       % 图像路径的列数
user.talkerIdIndex = 15;                        % 对方的微信ID的列数
user.contentLengthIndex = 21;            % 内容发送内容长度的列数

% 选取某个人的聊天记录:将talkerId与对方相同的message留下,其余的抛弃
user.message = [];
sizeMessage = size(message);
for i = 1:sizeMessage(1)
    i
    if cell2mat(message(i, user.talkerIdIndex)) == user.talkerId
        user.message = [user.message; message(i, :)];
    end
end

% 删去聊天记录中的非文本信息
sizeUserMessage = size(user.message);
user.contentText = [];                   % 聊天记录里的文本
user.contentOther = [];                 % 聊天记录除了文本图片的其它
for i = 1:sizeUserMessage(1)
    i
    switch cell2mat(user.message(i, user.typeIndex))
        case 1          % 文本聊天记录
            % 尝试将聊天记录转为字符串类型
            try
                charTmp = char(user.message(i, user.contentIndex));
                catchState = 0;
            catch
                catchState = 1;
            end
            if ~catchState              % 聊天记录可以转为字符串
                % 正则表达式,提取出charTmp里的汉字,赋给hanZi
                hanZi = char(regexp(charTmp,'[^\x00-\xff]{1,}','match'));
                lengthHanZi = length(hanZi);
                lengthCharTmp = length(charTmp);
                % 如果单个聊天记录长度大于10,并且汉字数量少于总数量的一半,那么认为是系统的红包、语音、链接等无用信息,放入other里
                if (lengthCharTmp > 10) && (lengthHanZi < (lengthCharTmp / 2))
                    user.contentOther = [user.contentOther; user.message(i, :)];
                else
                    % 将有用数据保存,开辟新的最后一列,保存消息长度,以便后续查找最多消息的一天、查找最多消息等操作。
                    user.contentText = [user.contentText; user.message(i, :) lengthCharTmp];
                    % 将Unix时间改为Matlab时间
                    unixTime = user.contentText(end, user.creatTimeIndex); 
                    unixTime = unixTime{1};
                    matlabTime = datestr(UnixTime2MatlabTime(unixTime), 'yyyy-mm-dd HH:MM:SS');
                    user.contentText(end, user.creatTimeIndex) = cellstr(matlabTime);
                end
            else                               % 聊天记录不可以转为字符串
                user.contentOther = [user.contentOther; user.message(i, :)];
            end 
        otherwise     % type非1,则不是文本消息,放入other里
            user.contentOther = [user.contentOther; user.message(i, :)];
    end
end


ans = '运行结束'

4、词云制作

词云就是把一大篇文章里的词语摘出来,根据词语使用频率的高低,在图片里根据不同的大小来显示,非常直观,而且很浪漫。词云制作我几乎照搬bilibili up主同济子豪兄的内容, 如果你有兴趣了解词云制作的细节,可以去看他的b站词云制作讲解视频(点我进入同济子豪兄的b站视频)

(1)安装相应的词云库和中文分词组件库。windows在PowerShell里运行下面的pip代码就行。跟词云关系最大的两个模块就是WordCloud和jieba。WordCloud是制作词云的库,小巧精悍,功能强大,1小时就可以了解完它的所有接口函数(点我进入WordCloud官网)。jieba是分析中文词语的库,接口函数很多,可以分析各种词性、短语等(点我进入jieba的github网站)。

pip install numpy matplotlib pillow wordcloud imageio jieba snownlp itchat -i https://pypi.tuna.tsinghua.edu.cn/simple

(2)下面到了激动人心的词云制作环节!上一节中,我们已经把某人的聊天记录全部放到“李某某.txt”里了,我已经把python代码给你弄好啦,你直接放到D:\weiXinCiYun跑就行,生成词云图片是5657×4000的,超级高清,刚好是A4纸的打印尺寸,可以彩印出来给同学看,哈哈,代码大约得运行2分钟。代码和结果如下(当然还是三国演义啦,我才不贴我的聊天记录):

# 导入词云制作库wordcloud和中文分词库jieba
import jieba
import wordcloud

# 导入imageio库中的imread函数,并用这个函数读取本地图片,作为词云形状图片
import imageio

# 构建并配置词云对象w,注意要加scale参数,提高清晰度
w = wordcloud.WordCloud(width= 5657,
                        height=4000,
                        background_color='white',
                        font_path='msyh.ttc',
                        )

# 对来自外部文件的文本进行中文分词,得到string
f = open('李某某.txt',encoding='utf-8')
txt = f.read()
txtlist = jieba.lcut(txt)
string = " ".join(txtlist)

# 将string变量传入w的generate()方法,给词云输入文字
w.generate(string)

# 将词云图片导出到当前文件夹
w.to_file('李某某的词云.png')

5、作者的私货

其实微信聊天记录导出、python生成词云等东西在google里、百度里已经是玩烂的东西了,但google和百度里面竟然没有一篇完整的、详尽的教程,所以我才想做一篇,而且制作过程中自己也提高了很多,很有趣,哈哈。大家要遵纪守法、做一个好公民,微信聊天记录只许查看自己的呦~

本文的所有代码和步骤已经说得很明白了,上文也全部给出了。鉴于也许有些C币大佬愿意打赏我,或者懒得挨个下载,我把我的关于微信做词云的所有代码、工程、安装包等做成了一个压缩包,里面包含了所有东西,还夹带了一点点的matlab微信聊天记录处理函数(Unix时间、matlab时间、中文时间互相转换函数),如果你想一股脑地全部下载,想看看我的私货matlab代码的话,可以下载我的私货压缩包呦——(点我下载全部代码和资源和私货的压缩包!)。

我写完这篇文章是2020年6月1号,儿童节,希望大家保持童心,保持好奇。昨天ellon musk的spaceX公司发射了载人航天器"龙"号,它的二级火箭和载人航天器都可以回收,太牛逼了。“龙”号和国际空间站对接了,还送了2个NASA的航天员,厉害啊。真的希望我国的航天事业赶紧发展,有生之年看见我国翱翔于星辰大海。

 

 

 

 

 

 

 

        

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信聊天记录做成词云~ 的相关文章

  • 通过反射获取类和父类的属性和属性值

    通过反射我们可以获取到一个类的属性和方法 但获取父类的private的属性却不可以直接获取 需要递归调用superclass来获取属性 SuperClass java public class SuperClass private Stri
  • 利用旧电脑搭建NAS(黑群晖)

    准备工作 硬件 物品描述U盘 2个1个用来安装nas系统 xff0c 一个做成pe盘引导旧电脑启动旧电脑1个用来搭建nas任意可用电脑1个用户调试nas 软件 名称描述芯片无忧查询u盘的PID VIDOSFMount用于引导img映像文件W
  • vue3-elementPlus 大合集

    elementPlus 的 导入 第一步 安装 也可以直接 cdn 导入 npm install element span class token operator span plus span class token operator s
  • Debian用apt-get 安装软件时出现的问题!

    本想安装个搜狗输入法 xff0c 用dpkg命令安装的 xff0c 但这种安装方式不会自动安装依赖 xff0c 结果不仅没装成功 xff0c 以后使用apt get命令总会报下面这种缺少依赖的问题 root 64 debian apt ge
  • Flutter和Rust如何优雅的交互

    前言 文章的图片链接都是在github上 xff0c 可能需要 你懂得 xff1b 本文含有大量关键步骤配置图片 xff0c 强烈建议在合适环境下阅读 Flutter直接调用C层还是蛮有魅力 xff0c 想想你练习C 43 43 xff0c
  • samba服务配置

    Tip xff1a 1 centos7访问win10共享目录时 xff0c 可能需要指定协议版本 xff0c 默认版本过低 可能无法访问 xff1b 参考链接 xff1a http www mamicode com info detail
  • 阿里云网站备案-注销备案的办法

    当我们因为各种原因要注销备案时 xff0c 可能会遇到以下这些问题 那么老魏汇总了相关答案 xff0c 并且列出来给大家参考用 1 注销主体与注销网站的区别 网站备案分成两部分 xff0c 一部分是备案主体 xff08 个人或企事业单位 x
  • nodeJs(多行数据删除)

    nodeJs 多行数据删除 由于要删除多行数据 xff0c 前台就会要传多条数据到后台 xff1b 1 ajax多次发送数据到后台 xff1f 1 一般不会用这种方法 xff0c 我们要避免ajax与后台交互的次数 2 数组的传送 xff1
  • 【洛谷】P1593 因子和

    洛谷P1593 因子和 题目描述 输入两个整数 a 和 b xff0c 求 a b a b a b 的因子和 由于结果太大 xff0c 只要输出它对 9901取模的结果 输入格式 仅一行 xff0c 为两个整数 a 和 b 输出格式 输出一
  • 隐式类型转换

    转换的规则 若参与运算的数据类型不同 xff0c 则先转换成同一类型 xff0c 然后进行运算 所有的浮点运算都是以双精度进行的 xff0c 即使仅含float单精度量运算的表达式 xff0c 也要先转换成double型 xff0c 再作运
  • Android Studio调式手机时提示 device supports but apk only supports armeabi-v7a

    转载来自 https blog csdn net lbj demo article details 81503078 1 核对你手机的 CPU 架构 目前的 Android 支持的架构 CPU架构描述armeabi第5代 ARM v5TE
  • 三种常见的http content-type详解

    介绍 http协议是建立在tcp ip协议之上的应用层协议 xff0c 主要包括三个部分 xff0c 状态行 xff0c 头部信息 xff0c 消息主体 对应一个http请求就是 xff1a 请求行 xff0c 请求头 xff0c 请求体
  • Git用户名/密码/邮箱,及设置git配置

    一 查看信息 xff1a 查看用户名 xff1a git config user name 查看邮箱 xff1a git config user email 查看密码 xff1a git config user password 二 设置信
  • 步进电机梯形加减速

    步进电机梯形加减速 xfeff 1 为什么要使用加减速2 算法原理2 1 特点2 2 概念2 3 公式2 4 脉冲时间间隔计算2 5 加减速度与步数的关系 3 算法理论实现3 1 设置计算3 1 1 最小间隔 min delay3 1 2
  • 11. shell循环 for

    shell循环 for 1 C语言风格的 for 循环2 Python风格的 for in 循环2 1对 value list 的说明2 1 1 直接给出具体的值2 1 2 给出一个取值范围2 1 3 使用命令的执行结果2 1 4 遍历数组
  • 06-链表的基本操作(插入与删除)

    插入与删除 C语言实现 1 利用哨兵简化实现难度2 链表中插入结点3 链表中删除节点4 完整实现 1 利用哨兵简化实现难度 针对链表的插入 删除操作 xff0c 需要对插入第一个结点和删除最后一个结点的情况进行特殊处理 这样代码实现起来就会
  • 24-经典排序算法之 冒泡排序

    冒泡 1 冒泡排序 xff08 Bubble Sort xff09 2 代码实现3 算法分析4 代码优化4 1思路4 2 算法实现 1 冒泡排序 xff08 Bubble Sort xff09 冒泡排序只会操作相邻的两个数据 每次冒泡操作都
  • [Eclipse]-Eclipse下导入外部jar包的3种方式

    Eclipse下导入外部jar包的3种方式 1 最常用的普通操作方式2 快速版的操作方式 用户Jar包式3 快速版的操作方式 文件夹导入式 1 最常用的普通操作方式 右击 项目 选择Properties xff0c 在弹出的对话框左侧列表中
  • 1.FFmpeg(Windows版)安装

    FFmpeg Windows版 官网下载与安装 1 FFmpeg官网 官网地址是 xff1a https ffmpeg org ffmpeg介绍 xff1a https www ffmpeg org about html 关于ffmpeg使
  • 19.Win10安装Linux(Ubuntu 20.04)双系统

    Win10安装Linux xff08 Ubuntu 20 04 xff09 双系统 1 电脑配置2 下载Ubuntu 系统镜像2 1官网地址2 2 阿里2 3 清华源 3 制作U盘启动盘3 1 UltraISO 下载地址3 2 Etcher

随机推荐

  • 22.Ubuntu出现“由于没有公钥,无法验证下列签名”

    由于没有公钥 xff0c 无法验证下列签名 1 无公钥错误2 输入命令导入公钥3 注意 1 无公钥错误 使用sudo apt update时出现以下错误 xff1a 我图中的公钥就是 xff1a 3B4FE6ACC0B21F32 xff08
  • 15. Java字符串操作(StringJoiner)

    字符串操作 xff08 StringJoiner xff09 1 StringJoiner2 在字符串拼接中体验下StringJoiner 3 StringJoiner构造方法4 StringJoiner成员方法5 练习6 总结 1 Str
  • 39.Java-interface接口

    interface接口 1 interface2 接口的定义和使用3 接口中成员的特点4 接口和类之间的关系5 实例6 接口中新增的方法6 1 JDK8以后新增2种方法6 1 1 允许在接口中定义默认方法6 1 2 允许在接口中定义静态方法
  • 修改工单号码的流水号

    The job number is defined by sequence WIP JOB NUMBER S in the database The WIP numbering also uses the prefix defined in
  • 40.java-单列集合Set(HashSet,LinkedHashSet,TreeSet)

    Set集合 1 Set集合特点2 Set集合实现类3 HashSet3 1 底层原理3 1 1 哈希表组成3 1 2 哈希值3 1 3 对象的哈希值特点 3 2 数据添加元素的过程3 3 HashSet的三个问题3 4 实例 xff1a 去
  • 41.Java单列集合LinkedList

    单列集合LinkedList 1 LinkedList集合2 源码3 ArrayList和LinkedList的区别 1 LinkedList集合 在许多情况下 xff0c ArrayList效率更高 xff0c 因为通常需要访问列表中的某
  • hiveh和presto中date_add

    日期增加函数 date add语法 hive gt select date add 2016 12 29 10 presto gt select date add day 1 TIMESTAMP 2014 03 08 09 00 00 ht
  • synchronized关键字

    https tech meituan com 2018 11 15 java lock html https juejin im post 5ae6dc04f265da0ba351d3ff https leejay top posts Sy
  • CAS

    一 CAS简介 比较并交换 compare and swap CAS xff0c 是原子操作的一种 xff0c 可用于在多线程编程中实现不被打断的数据交换操作 xff0c 从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预
  • 帧内预测

    转载于 xff1a https www cnblogs com charybdis p 6049108 html 为什么要有帧内预测 xff1f 因为一般来说 xff0c 对于一幅图像 xff0c 相邻的两个像素的亮度和色度值之间经常是比较
  • 找出数组中没有出现的最小正整数

    题目描述 xff1a 给定一个无序整型数组arr 找到数组中未出现的最小整数 例子 arr 61 1 2 3 4 return 1 arr 61 1 2 3 4 return 5 时间复杂度O n 空间复杂度O 1 解题思路 xff1a x
  • 公有云弹性IP的实现原理及优势

    原文链接 xff1a http news west cn 26218 html 在利用公有云服务部署我们的应用时 xff0c 为了访问到我们的服务器 xff0c 我们需要为我们的服务部署公网IP 公有云服务商除了可以为服务器提供固定的公网I
  • vim 怎么取消高亮 或取消选中状态

    原文链接 xff1a https blog csdn net weixin 40539892 article details 78946659 神操作 在vim中编写代码 xff0c 常常会遇到多行注释和取消注释的情况 xff0c 在VS中
  • 工单关联销售订单

    CREATE OR REPLACE TRIGGER CUX WIP DISCRETE JOBS BEFORE INSERT ON INV MTL RESERVATIONS FOR EACH ROW when NEW SUPPLY SOURC
  • P2P(Peer to Peer)对等网络

    P2P xff08 Peer to Peer xff09 对等网络 P2P技术属于覆盖层网络 Overlay Network 的范畴 xff0c 是相对于客户机 服务器 C S 模式来说的一种网络信息交换方式 在C S模式中 xff0c 数
  • JAVA四大域对象总结

    JAVA四大域对象总结 根据有作用范围由小到大 xff1a page 当前jsp页面 page域指的是pageContext request 一次请求 request域request HttpServletContext session 一
  • Java中如何判断两个对象是否相等

    如何判断两个对象相等 xff0c 这个问题实际上可以看做是如何对equals方法和hashcode方法的理解 从以下几个点来理解equals和hashCode方法 xff1a 1 equals的作用及与 61 61 的区别 2 hashco
  • nginx中的日志管理

    我们观察nginx的server段 可以看到如下类似信息 access log logs host access log main 这说明 该server 它的访问日志的文件是 logs host access log 使用的格式 main
  • 用SQL来校验证件号码是否合法

    正确时返回证件号 xff0c 错误时返回错误原因 select t centno xingming ZJHM FUNC AAC002 15 18 ZJHM from TABLEt where ZJHM lt gt FUNC AAC002 1
  • 微信聊天记录做成词云~

    最近快毕业了 xff0c 所以想把微信聊天记录全部导出 做成词云 然后寄给好友 xff0c 想想都很浪漫 xff0c 哈哈 先上词云结果图 xff08 结果图拿 三国演义 做的 xff0c 想啥呢 xff0c 我才不会把我的聊天记录发到网上