Navicat15 /16 已连接数据库密码解密

news2025/1/24 5:40:34

前言

  • 相信你会遇到使用navicat忘记已连接数据密码的问题吧!实在是,密码太多容易忘记!!!

  • 感谢大佬as_dmy的文章如何查看navicat已连接数据库密码,然后才有了此文!

  • 1.0版本需要手动查看导出的connections.ncx文件中的加密密码值,然后解密

  • 2.0版本直接选择文件【支持一个数据库密码的导出文件】,然后解密

  • 源码相关资源免费获取!请查看工具获取章节内容!

  • 有愿意研究源码的可以看看

源码

1.0 版本源码

import javax.crypto.*;
import javax.crypto.spec.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.nio.charset.StandardCharsets;

public class NavicatPasswordGUI {
    private JFrame frame;
    private JComboBox<String> versionComboBox;
    private JTextField originalPasswordTextField;
    private JTextField encryptedPasswordTextField;
    private JTextField decryptedPasswordTextField;

    private String blowKey = "3DC5CA39";
    private byte[] blowIv = hexStringToByteArray("d9c7c3c8870d64bd");
    private String aesKey = "libcckeylibcckey";
    private String aesIv = "libcciv libcciv ";

    public NavicatPasswordGUI() {
        frame = new JFrame("Navicat Password Encryption/Decryption");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 250);
        frame.setLayout(new GridLayout(5, 2));

        JLabel versionLabel = new JLabel("navicat Version:");
        versionComboBox = new JComboBox<>(new String[]{"11", "12"});
        frame.add(versionLabel);
        frame.add(versionComboBox);

        JLabel originalPasswordLabel = new JLabel("Original Password:");
        originalPasswordTextField = new JTextField();
        frame.add(originalPasswordLabel);
        frame.add(originalPasswordTextField);

        JLabel encryptedPasswordLabel = new JLabel("Encrypted Password:");
        encryptedPasswordTextField = new JTextField();
        encryptedPasswordTextField.setEditable(false);
        frame.add(encryptedPasswordLabel);
        frame.add(encryptedPasswordTextField);

        JLabel decryptedPasswordLabel = new JLabel("Decrypted Password:");
        decryptedPasswordTextField = new JTextField();
        frame.add(decryptedPasswordLabel);
        frame.add(decryptedPasswordTextField);

        JButton encryptButton = new JButton("Encrypt");
        frame.add(encryptButton);

        JButton decryptButton = new JButton("Decrypt");
        frame.add(decryptButton);

        encryptButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    int version = Integer.parseInt((String) versionComboBox.getSelectedItem());
                    String originalPassword = originalPasswordTextField.getText();
                    NavicatPassword navicatPassword = new NavicatPassword(version);
                    String encryptedPassword = navicatPassword.encrypt(originalPassword);
                    encryptedPasswordTextField.setText(encryptedPassword);
                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(frame, "Error: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
        });

        decryptButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    int version = Integer.parseInt((String) versionComboBox.getSelectedItem());
                    String encryptedPassword = decryptedPasswordTextField.getText();
                    NavicatPassword navicatPassword = new NavicatPassword(version);
                    String decryptedPassword = navicatPassword.decrypt(encryptedPassword);
                    originalPasswordTextField.setText(decryptedPassword);
                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(frame, "Error: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
        });

        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new NavicatPasswordGUI();
            }
        });
    }

    private byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
        }
        return data;
    }
}

class NavicatPassword {
    private int version;
    private String blowKey = "3DC5CA39";
    private byte[] blowIv = hexStringToByteArray("d9c7c3c8870d64bd");
    private String aesKey = "libcckeylibcckey";
    private String aesIv = "libcciv libcciv ";

    public NavicatPassword(int version) {
        this.version = version;
    }

    public String encrypt(String input) throws Exception {
        switch (version) {
            case 11:
                return encryptEleven(input);
            case 12:
                return encryptTwelve(input);
            default:
                throw new IllegalArgumentException("Unsupported version: " + version);
        }
    }

    public String decrypt(String input) throws Exception {
        switch (version) {
            case 11:
                return decryptEleven(input);
            case 12:
                return decryptTwelve(input);
            default:
                throw new IllegalArgumentException("Unsupported version: " + version);
        }
    }

    private String encryptEleven(String input) throws Exception {
        int round = input.length() / 8;
        int leftLength = input.length() % 8;
        StringBuilder result = new StringBuilder();
        byte[] currentVector = blowIv.clone();

        for (int i = 0; i < round; i++) {
            byte[] temp = encryptBlock(xorBytes(input.getBytes(StandardCharsets.UTF_8), currentVector));
            currentVector = xorBytes(currentVector, temp);
            result.append(byteArrayToHexString(temp));
        }

        if (leftLength != 0) {
            currentVector = encryptBlock(currentVector);
            result.append(byteArrayToHexString(xorBytes(input.substring(8 * round).getBytes(StandardCharsets.UTF_8), currentVector)));
        }

        return result.toString().toUpperCase();
    }

    private byte[] encryptBlock(byte[] block) throws Exception {
        Cipher cipher = Cipher.getInstance("Blowfish/ECB/NoPadding");
        SecretKeySpec secretKeySpec = new SecretKeySpec(blowKey.getBytes(StandardCharsets.UTF_8), "Blowfish");
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
        return cipher.doFinal(block);
    }

    private byte[] decryptBlock(byte[] block) throws Exception {
        Cipher cipher = Cipher.getInstance("Blowfish/ECB/NoPadding");
        SecretKeySpec secretKeySpec = new SecretKeySpec(blowKey.getBytes(StandardCharsets.UTF_8), "Blowfish");
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
        return cipher.doFinal(block);
    }

    private byte[] xorBytes(byte[] bytes1, byte[] bytes2) {
        byte[] result = new byte[bytes1.length];
        for (int i = 0; i < bytes1.length; i++) {
            result[i] = (byte) (bytes1[i] ^ bytes2[i]);
        }
        return result;
    }

    private String decryptEleven(String upperString) throws Exception {
        String input = upperString.toLowerCase();
        int round = input.length() / 16;
        int leftLength = input.length() % 16;
        StringBuilder result = new StringBuilder();
        byte[] currentVector = blowIv.clone();

        for (int i = 0; i < round; i++) {
            byte[] encryptedBlock = hexStringToByteArray(input.substring(16 * i, 16 * (i + 1)));
            byte[] temp = xorBytes(decryptBlock(encryptedBlock), currentVector);
            currentVector = xorBytes(currentVector, encryptedBlock);
            result.append(byteArrayToHexString(temp));
        }

        if (leftLength != 0) {
            currentVector = encryptBlock(currentVector);
            result.append(byteArrayToHexString(xorBytes(input.substring(16 * round).getBytes(StandardCharsets.UTF_8), currentVector)));
        }

        return new String(hexStringToByteArray(result.toString()), StandardCharsets.UTF_8);
    }

    private String encryptTwelve(String input) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        SecretKeySpec secretKeySpec = new SecretKeySpec(aesKey.getBytes(StandardCharsets.UTF_8), "AES");
        IvParameterSpec ivSpec = new IvParameterSpec(aesIv.getBytes(StandardCharsets.UTF_8));
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivSpec);
        byte[] encrypted = cipher.doFinal(input.getBytes(StandardCharsets.UTF_8));
        return byteArrayToHexString(encrypted).toUpperCase();
    }

    private String decryptTwelve(String upperString) throws Exception {
        byte[] input = hexStringToByteArray(upperString.toLowerCase());
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        SecretKeySpec secretKeySpec = new SecretKeySpec(aesKey.getBytes(StandardCharsets.UTF_8), "AES");
        IvParameterSpec ivSpec = new IvParameterSpec(aesIv.getBytes(StandardCharsets.UTF_8));
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivSpec);
        byte[] decrypted = cipher.doFinal(input);
        return new String(decrypted, StandardCharsets.UTF_8);
    }

    private byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
        }
        return data;
    }

    private String byteArrayToHexString(byte[] bytes) {
        StringBuilder result = new StringBuilder();
        for (byte b : bytes) {
            result.append(String.format("%02X", b));
        }
        return result.toString();
    }
}

2.0 版本源码


import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.swing.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class NavicatPasswordGUI {
    private final JFrame frame;
    private final JComboBox<String> versionComboBox;
    private final JTextField originalPasswordTextField;
    private final JTextField encryptedPasswordTextField;
    private final JTextField decryptedPasswordTextField;
    private final JButton selectFileButton;

    private final String blowKey = "3DC5CA39";
    private final byte[] blowIv = hexStringToByteArray("d9c7c3c8870d64bd");
    private final String aesKey = "libcckeylibcckey";
    private final String aesIv = "libcciv libcciv ";

    public NavicatPasswordGUI() {
        frame = new JFrame("Navicat Password Encryption/Decryption");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 250);
        frame.setLayout(new GridLayout(6, 2));

        JLabel versionLabel = new JLabel("navicat Version:");
        versionComboBox = new JComboBox<>(new String[]{"11", "12"});
        frame.add(versionLabel);
        frame.add(versionComboBox);

        JLabel originalPasswordLabel = new JLabel("Original Password:");
        originalPasswordTextField = new JTextField();
        frame.add(originalPasswordLabel);
        frame.add(originalPasswordTextField);

        JLabel encryptedPasswordLabel = new JLabel("Encrypted Password:");
        encryptedPasswordTextField = new JTextField();
        encryptedPasswordTextField.setEditable(false);
        frame.add(encryptedPasswordLabel);
        frame.add(encryptedPasswordTextField);

        JLabel decryptedPasswordLabel = new JLabel("Decrypted Password:");
        decryptedPasswordTextField = new JTextField();
        decryptedPasswordTextField.setEditable(false);
        frame.add(decryptedPasswordLabel);
        frame.add(decryptedPasswordTextField);

        selectFileButton = new JButton("Select File");
        frame.add(selectFileButton);

        JButton encryptButton = new JButton("Encrypt");
        frame.add(encryptButton);

        JButton decryptButton = new JButton("Decrypt");
        frame.add(decryptButton);

        selectFileButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser fileChooser = new JFileChooser();
                int returnValue = fileChooser.showOpenDialog(null);
                if (returnValue == JFileChooser.APPROVE_OPTION) {
                    File selectedFile = fileChooser.getSelectedFile();
                    try {
                        // 使用DOM解析XML文件
                        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                        DocumentBuilder builder = factory.newDocumentBuilder();
                        Document doc = builder.parse(selectedFile);

                        // 查找密码字段
                        NodeList connectionsList = doc.getElementsByTagName("Connection");
                        if (connectionsList.getLength() > 0) {
                            Element connectionElement = (Element) connectionsList.item(0);
                            String password = connectionElement.getAttribute("Password");
                            decryptedPasswordTextField.setText(password);
                        } else {
                            JOptionPane.showMessageDialog(frame, "No Connection element found in the XML file.", "Error", JOptionPane.ERROR_MESSAGE);
                        }
                    } catch (ParserConfigurationException | IOException | org.xml.sax.SAXException ex) {
                        JOptionPane.showMessageDialog(frame, "Error reading XML file: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
            }
        });


        encryptButton.addActionListener(e -> {
            try {
                int version = Integer.parseInt((String) versionComboBox.getSelectedItem());
                String originalPassword = originalPasswordTextField.getText();
                NavicatPassword navicatPassword = new NavicatPassword(version);
                String encryptedPassword = navicatPassword.encrypt(originalPassword);
                encryptedPasswordTextField.setText(encryptedPassword);
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(frame, "Error: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
            }
        });

        decryptButton.addActionListener(e -> {
            try {
                int version = Integer.parseInt((String) versionComboBox.getSelectedItem());
                String encryptedPassword = decryptedPasswordTextField.getText();
                NavicatPassword navicatPassword = new NavicatPassword(version);
                String decryptedPassword = navicatPassword.decrypt(encryptedPassword);
                originalPasswordTextField.setText(decryptedPassword);
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(frame, "Error: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
            }
        });

        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new NavicatPasswordGUI());
    }

    private byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
        }
        return data;
    }
}

class NavicatPassword {
    private final int version;
    private final String blowKey = "3DC5CA39";
    private final byte[] blowIv = hexStringToByteArray("d9c7c3c8870d64bd");
    private final String aesKey = "libcckeylibcckey";
    private final String aesIv = "libcciv libcciv ";

    public NavicatPassword(int version) {
        this.version = version;
    }

    public String encrypt(String input) throws Exception {
        switch (version) {
            case 11:
                return encryptEleven(input);
            case 12:
                return encryptTwelve(input);
            default:
                throw new IllegalArgumentException("Unsupported version: " + version);
        }
    }

    public String decrypt(String input) throws Exception {
        switch (version) {
            case 11:
                return decryptEleven(input);
            case 12:
                return decryptTwelve(input);
            default:
                throw new IllegalArgumentException("Unsupported version: " + version);
        }
    }

    private String encryptEleven(String input) throws Exception {
        int round = input.length() / 8;
        int leftLength = input.length() % 8;
        StringBuilder result = new StringBuilder();
        byte[] currentVector = blowIv.clone();

        for (int i = 0; i < round; i++) {
            byte[] temp = encryptBlock(xorBytes(input.getBytes(StandardCharsets.UTF_8), currentVector));
            currentVector = xorBytes(currentVector, temp);
            result.append(byteArrayToHexString(temp));
        }

        if (leftLength != 0) {
            currentVector = encryptBlock(currentVector);
            result.append(byteArrayToHexString(xorBytes(input.substring(8 * round).getBytes(StandardCharsets.UTF_8), currentVector)));
        }

        return result.toString().toUpperCase();
    }

    private byte[] encryptBlock(byte[] block) throws Exception {
        Cipher cipher = Cipher.getInstance("Blowfish/ECB/NoPadding");
        SecretKeySpec secretKeySpec = new SecretKeySpec(blowKey.getBytes(StandardCharsets.UTF_8), "Blowfish");
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
        return cipher.doFinal(block);
    }

    private byte[] decryptBlock(byte[] block) throws Exception {
        Cipher cipher = Cipher.getInstance("Blowfish/ECB/NoPadding");
        SecretKeySpec secretKeySpec = new SecretKeySpec(blowKey.getBytes(StandardCharsets.UTF_8), "Blowfish");
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
        return cipher.doFinal(block);
    }

    private byte[] xorBytes(byte[] bytes1, byte[] bytes2) {
        byte[] result = new byte[bytes1.length];
        for (int i = 0; i < bytes1.length; i++) {
            result[i] = (byte) (bytes1[i] ^ bytes2[i]);
        }
        return result;
    }

    private String decryptEleven(String upperString) throws Exception {
        String input = upperString.toLowerCase();
        int round = input.length() / 16;
        int leftLength = input.length() % 16;
        StringBuilder result = new StringBuilder();
        byte[] currentVector = blowIv.clone();

        for (int i = 0; i < round; i++) {
            byte[] encryptedBlock = hexStringToByteArray(input.substring(16 * i, 16 * (i + 1)));
            byte[] temp = xorBytes(decryptBlock(encryptedBlock), currentVector);
            currentVector = xorBytes(currentVector, encryptedBlock);
            result.append(byteArrayToHexString(temp));
        }

        if (leftLength != 0) {
            currentVector = encryptBlock(currentVector);
            result.append(byteArrayToHexString(xorBytes(input.substring(16 * round).getBytes(StandardCharsets.UTF_8), currentVector)));
        }

        return new String(hexStringToByteArray(result.toString()), StandardCharsets.UTF_8);
    }

    private String encryptTwelve(String input) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        SecretKeySpec secretKeySpec = new SecretKeySpec(aesKey.getBytes(StandardCharsets.UTF_8), "AES");
        IvParameterSpec ivSpec = new IvParameterSpec(aesIv.getBytes(StandardCharsets.UTF_8));
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivSpec);
        byte[] encrypted = cipher.doFinal(input.getBytes(StandardCharsets.UTF_8));
        return byteArrayToHexString(encrypted).toUpperCase();
    }

    private String decryptTwelve(String upperString) throws Exception {
        byte[] input = hexStringToByteArray(upperString.toLowerCase());
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        SecretKeySpec secretKeySpec = new SecretKeySpec(aesKey.getBytes(StandardCharsets.UTF_8), "AES");
        IvParameterSpec ivSpec = new IvParameterSpec(aesIv.getBytes(StandardCharsets.UTF_8));
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivSpec);
        byte[] decrypted = cipher.doFinal(input);
        return new String(decrypted, StandardCharsets.UTF_8);
    }

    private byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
        }
        return data;
    }

    private String byteArrayToHexString(byte[] bytes) {
        StringBuilder result = new StringBuilder();
        for (byte b : bytes) {
            result.append(String.format("%02X", b));
        }
        return result.toString();
    }
}

打包步骤

  1. 编写并保存上述Java代码为一个.java文件

  2. 打开终端或命令提示符,进入包含.java文件的目录。

  3. 使用Java编译器(javac)编译Java类文件。例如:

    javac NavicatPasswordGUI.java
    

在这里插入图片描述

  1. 创建一个包含MANIFEST.MF文件的目录,其中包含以下内容:

    Manifest-Version: 1.0
    Main-Class: NavicatPasswordGUI
    
  2. 打包成JAR文件,使用以下命令:

    • 创建一个名为NavicatPasswordGUI.jar的JAR文件,其中包含Java类以及MANIFEST文件。
    jar cfm NavicatPasswordGUI.jar MANIFEST.MF *.class
    
  3. 运行JAR文件,或者双击:

    java -jar NavicatPasswordGUI.jar
    

在这里插入图片描述

工具获取

  • 相关资源获取 NavicatPassword Decryp tools.zip

操作方法

导出navicat数据库连接信息

  1. 打开navicat,点击文件➡导出连接
    在这里插入图片描述

  2. 勾选需要导出的连接,注意,勾选“导出密码”
    在这里插入图片描述

使用工具

  • 相信使用navicat的小伙伴,电脑一定配置了java环境,如果有例外,请自行百度,安装java环境!

工具1.0使用方法

  1. 打开connections.ncx复制password内容
    在这里插入图片描述
  2. 双击打开1.0版本目录下jar包 ,选择navicate版本,粘贴复制的密码内容,点击解密即可
    在这里插入图片描述
  • Navicat 15和Navicat 16请选择版本为12,其他请尝试不同版本的的解密!
  • 如果版本选择错误,会出现乱码的结果,请多多尝试

工具2.0 使用方法

  1. 运行工具,选择导出的连接文件,点击解密即可
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/996170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GET 和 POST请求的区别是什么

GET和POST是HTTP请求的两种基本方法&#xff0c;要说它们的区别&#xff0c;接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中&#xff0c;POST通过request body传递参数。 你轻轻松松的给出了一个“标准答案”&#xff1a; GET在浏览器回退时是无害的…

互联网真实赚钱平台有哪些?分享六大类正规靠谱的线上平台

互联网已经和我们的生活密不可分&#xff0c;我们每天都穿梭在网络的世界里&#xff0c;感受着信息的洪流&#xff0c;但同时也感受到了贫富差距的日益拉大。然而&#xff0c;互联网的蓬勃发展也为我们提供了一个机会——通过在线平台赚取真实的收入。 尽管在这个领域中存在着许…

QUIC协议连接详解(二)

目录 一&#xff1a;RTT解释 二&#xff1a;QUIC 1-RTT连接 三&#xff1a;QUIC 0-RTT连接 一&#xff1a;RTT解释 在介绍QUIC协议的连接之前先科普一下什么是RTT。RTT是Round-Trip Time的英文缩写&#xff0c;翻译过来就是一趟来回的时间即往返时延。时间计算即从发送方发送…

工作每天都在用的 DNS 协议,你真的了解么?

♥ 前 言 我们经常访问一些网址的时候&#xff0c;浏览器里输入类似于 www.baidu.com 这样的地址&#xff0c;那么在浏览器里输入这个地址---> 百度服务器给我们返回这个百度的页面&#xff0c;中间的过程是什么样的呢&#xff1f; 带着这个问题&#xff0c;我们一起来解…

答题题库模拟考试流量主小程序源码开发

一款专门为练题开发的题库答题考试模拟小程序&#xff0c;适用于多种用户群体&#xff0c;驾照考题、各种职业考试、英语四六级等等。接入流量主功能&#xff0c;运营方可以更灵活的配置收益方式。 小程序核心功能介绍&#xff1a; 1、多题型支持&#xff0c;判断题、单选题…

记一次Nacos线程数飙升排查

近日有个项目用到了Nacos做注册中心。运行一段时间发现Nacos服务的线程数达到了1k。这肯定是不正常的。 环境&#xff1a; Nacos-server 2.2.3docker-compose编排部署 nacos:image: "nacos/nacos-server:latest"environment:- JAVA_OPTS-XX:MetaspaceSize128m -XX:…

PLC-Recorder离线分析软件Ana里为什么不能显示变量的编号?

在PLC-Recorder在线软件里&#xff0c;大家可以在曲线上找到变量的编号&#xff08;由通道编号、变量类型、同类型序号组成&#xff09;。这个编号也是各软件识别变量的唯一标识。在变量和PLC很多时&#xff0c;可以方便地找到对应的PLC&#xff0c;如下&#xff1a; 有朋友问&…

【QGIS】Openstreetmap获取路网数据

目录 一、从Openstreetmap获取路网数据 1.1 根据城市名获取对应ID 1.2 根据城市ID获取路网数据 二、下载安装QGIS 2.1 下载QGIS 2.2 安装QGIS 2.3 页面语言设置 三、将获取到的osm文件拖入QGIS 一、从Openstreetmap获取路网数据 在大多数研究中&#xff0c;经常使用到的…

类欧笔记存档

电子版&#xff1a;https://blog.csdn.net/zhangtingxiqwq/article/details/132718582

【JavaScript手撕代码】instanceof

目录 instanceof手写详解 instanceof 手写 /* * param {Object} obj 需要判断的数据 * param {Object} constructor 这里请注意 * return {Boolean} **/ function myInstanceof(obj, constructor){if (![function, object].includes(typeof obj) || obj null) return falsel…

第 362 场 LeetCode 周赛题解

A 与车相交的点 数据范围小直接暴力枚举 class Solution { public:int numberOfPoints(vector <vector<int>> &nums) {unordered_set<int> vis;for (auto &p: nums)for (int i p[0]; i < p[1]; i)vis.insert(i);return vis.size();} };B 判断能否…

操作系统之课后习题——引论

&#xff08;一&#xff09;简答题 1.在计算机系统上配置OS的目标是什么&#xff1f;作用主要表现在哪几个方面&#xff1f; 答&#xff1a; 在计算机系统上配置OS&#xff0c;主要目标是实现&#xff1a;方便性、有效性、可扩充性和开放性&#xff1b; OS的作用主要表现在以下…

腾讯云CVM标准型S4服务器性能测评_CPU_网络收发包PPS详解

腾讯云服务器CVM标准型S4性能测评&#xff0c;包括S4云服务器CPU型号、处理器主频、网络收发包PPS、队列数、出入内网带宽能力性能参数说明&#xff0c;标准型 S4 实例是次新一代的标准型实例&#xff0c;CPU采用2.4GHz主频的Intel Xeon Skylake 6148处理器&#xff0c;腾讯云百…

2024浙大MEM提面结果已出,笔试过线率让人堪忧

众所周知&#xff0c;浙大MEM项目对于申请提前批面试并获得“优秀”资格的考生提供了“联考笔试达到国家线&#xff0c;政治成绩合格即可拟录取”的优惠政策。这一政策也成为近几年每年提面申请人数超过1000名考生参加提前批面试的重要推动力。今天&#xff0c;考生们终于迎来了…

字符编码基本介绍

基础概念 字符 任何一个文字或符号都是一个字符&#xff0c;不同的编码导致一个字符所占的内存不同。字符集 字符的集合就叫字符集。字符编码(charset encoding&#xff0c;简写为 encoding) 1. 定义字符集中的字符如何编码为特定的二进制数。2. 字符集和字符编码一般一一对…

企业架构LNMP学习笔记36

1、MySQL的负载均衡&#xff1a; 1&#xff09;在各个数据库授权远程登录用户&#xff1b; 2&#xff09;在各个数据库创建不同的识别数据库&#xff1b; 3&#xff09;配置转发规则&#xff1b; 4&#xff09;查看测试&#xff1b; 1、在各个数据库授权远程登录用户&#…

Qt6中使用Qt Charts

官方文档&#xff1a;Qt Charts 6.5.2 如果你是使用 CMake 构建的&#xff0c;则应在 CMakeLists.txt 中添加如下两行代码&#xff1a; find_package(Qt6 REQUIRED COMPONENTS Charts)target_link_libraries(mytarget PRIVATE Qt6::Charts) 其中 mytarget 为你的项目名称。一共…

管理类联考——数学——汇总篇——知识点突破——浓度

&#x1f44a; 溶液溶质溶剂&#xff1b;浓度 溶质 溶液 \frac{溶质}{溶液} 溶液溶质​100% 溶质 溶质 溶剂 \frac{溶质}{溶质溶剂} 溶质溶剂溶质​100%。重要等量关系 ①浓度不变准则&#xff1a;将溶液分成若干份&#xff0c;每份的浓度相等&#xff0c;都等于原来溶液的浓…

Python教程(13)——Python运算符详解|算术运算符|比较运算符|逻辑运算符|位运算符

Python运算符 算术运算符比较运算符赋值运算符逻辑运算符逻辑运算类型逻辑运算本质 位运算符 Python的运算符是用于执行各种操作的符号或符号组合。它们用于操作数据并进行算术、比较、逻辑和其他类型的运算。我们所熟知的加减乘除也是运算符中的一种。Python提供了多种类型的运…

无涯教程-JavaScript - COUPNCD函数

描述 COUPNCD函数返回一个数字,该数字表示结算日期之后的下一个息票日期。 语法 COUPNCD (settlement, maturity, frequency, [basis])争论 Argument描述Required/OptionalSettlement 证券的结算日期。 证券结算日期是指在发行日期之后将证券交易给买方的日期。 RequiredMa…