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

前言

  • 相信你会遇到使用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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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.rhkb.cn/news/131596.html

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

相关文章

垃圾收集算法

1.如何判断对象是否存活&#xff1f; 1.1引用计数算法 基本思路&#xff1a; 在对象中添加一个引用计数器每当有一个地方引用它的时候&#xff0c;计数器就加1每当有一个引用失效的时候&#xff0c;计数器就减-1当计数器的值为0的时候&#xff0c;那么该对象就是可被GC回收的…

vue基础知识八:为什么data属性是一个函数而不是一个对象?

一、实例和组件定义data的区别 vue实例的时候定义data属性既可以是一个对象&#xff0c;也可以是一个函数 const app new Vue({el:"#app",// 对象格式data:{foo:"foo"},// 函数格式data(){return {foo:"foo"}} })组件中定义data属性&#xff…

网站文章生成技术-网站文章生成工具免费

大家好&#xff0c;今天我想和大家分享一些关于网站文章生成的疑虑和期待。作为一个常常需要在网站上发布文章的人&#xff0c;我对这项技术的发展充满了好奇和担忧。在这篇文章中&#xff0c;我将坦率地表达我的想法&#xff0c;希望能引发一些思考。 让我谈一谈我的疑虑。网站…

基于SSM的农产品仓库管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

TypeScript命名空间和模块

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 命名空间&#xff08;Namespace&#xff09; 命名空间&#xff08;Namespace&#xff09;使用场景 第三方库 兼容…

【C语言】【strcpy的使用和模拟实现】

1.strcpy的使用&#xff1a; char* strcpy(char* destination,const char* source)返回类型是字符指针&#xff0c;参数是接受方字符串的首地址和要拷贝的字符串的首地址 从接受地的‘\0’开始拷贝&#xff0c;会将源字符串中的’\0’也拷贝过来目标空间必须足够大&#xff0…

【JavaEE】_CSS引入方式与选择器

目录 1. 基本语法格式 2. 引入方式 2.1 内部样式 2.2 内联样式 2.3 外部样式 3. 基础选择器 3.1 标签选择器 3.2 类选择器 3.3 ID选择器 4. 复合选择器 4.1 后代选择器 4.2 子选择器 4.3 并集选择器 4.4 伪类选择器 1. 基本语法格式 选择器若干属性声明 2. 引入…

terraform简单的开始-安装和一些配置

terraform的安装&#xff1a; 官方下载&#xff1a; 浏览器打开terraform官方主页https://www.terraform.io/ 点击Download Terraform 跳转到程序下载页面&#xff1a; 找到自己对应的操作系统&#xff0c;按照操作系统选择安装terraform的方式&#xff1a; linux为例&…

LabVIEW利用人工神经网络辅助进行结冰检测

LabVIEW利用人工神经网络辅助进行结冰检测 结冰对各个领域构成重大威胁&#xff0c;包括但不限于航空航天和风力涡轮机行业。在起飞过程中&#xff0c;飞机机翼上轻微积冰会导致升力降低25%。研究报告称&#xff0c;涡轮叶片上的冰堆积可在19个月的运行时间内造成29MWh的功率损…

《86盒应用于家居中控》——实现智能家居的灵动掌控

近年来&#xff0c;智能家居产品受到越来越多消费者的关注&#xff0c;其便捷、舒适的生活方式让人们对未来生活充满期待。作为智能家居方案领域的方案商&#xff0c;启明智显生产设计的86盒凭借出色的性能和良好的用户体验&#xff0c;成功应用于家居中控系统&#xff0c;让家…

数据在内存中的存储——练习3

题目&#xff1a; 3.1 #include <stdio.h> int main() {char a -128;printf("%u\n",a);return 0; }3.2 #include <stdio.h> int main() {char a 128;printf("%u\n",a);return 0; }思路分析&#xff1a; 首先二者极其相似%u是无符号格式进行…

基于SSM的旅游网站系统

基于SSM的旅游网站系统【附源码文档】、前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色&#xff1a;管理员、用户 管理员&#xff1a;用户管理、景点…

【Linux】多线程互斥与同步

文章目录 一、线程互斥1. 线程互斥的引出2. 互斥量3. 互斥锁的实现原理 二、可重入和线程安全三、线程和互斥锁的封装1. 线程封装1. 互斥锁封装 四、死锁1. 死锁的概念2. 死锁的四个必要条件3. 避免死锁 五、线程同步1. 线程同步的理解2. 条件变量 一、线程互斥 1. 线程互斥的…

教你制作作业查询系统

嗨&#xff0c;各位老师们&#xff0c;今天我要给你们介绍一个超级方便的工具——易查分&#xff01;你知道吗&#xff0c;利用易查分&#xff0c;我们可以轻松制作一个便捷高效的作业查询系统哦&#xff01; 是不是想有个自己的分班or成绩查询页面&#xff1f;博主给老师们争取…

使用js搭建简易的WebRTC实现视频直播

首先需要一个信令服务器&#xff0c;我们使用nodejs来搭建。两个端&#xff1a;发送端和接收端。我的目录结构如下图&#xff1a;流程 创建一个文件夹 WebRTC-Test。进入文件夹中&#xff0c;新建一个node的文件夹。使用终端并进入node的目录下&#xff0c;使用 npm init 创建p…

01-从JDK源码级别剖析JVM类加载机制

上一篇&#xff1a;JVM虚拟机调优大全 1. 类加载运行全过程 当我们用java命令运行某个类的main函数启动程序时&#xff0c;首先需要通过类加载器把主类加载到JVM。 public class Math {public static final int initData 666;public static User user new User();public i…

20230913java面经整理

1.hashmap为什么重写hashcode必须重写equals&#xff1f;不重写hashcode&#xff1f; hashcode判断对象存放的索引值&#xff0c;equals判断相同索引下对象是否相同&#xff0c;不同则存放&#xff08;链表&#xff09; hashcode提升查询效率&#xff0c;通过哈希计算&#xf…

性能测试 —— Jmeter定时器

固定定时器 如果你需要让每个线程在请求之前按相同的指定时间停顿&#xff0c;那么可以使用这个定时器&#xff1b;需要注意的是&#xff0c;固定定时器的延时不会计入单个sampler的响应时间&#xff0c;但会计入事务控制器的时间 1、使用固定定时器位置在http请求中&#xf…

idea中的debug界面上没有进入方法的红色按钮

问题描述&#xff1a; 这里缺少进入系统方法的红色按钮。 问题解决方法&#xff1a; 在上面图片红框范围内右键点击进入。 点击号 搜索 ‘force’ 添加即可完成 上下拖动即可调整界面按钮顺序

Azure + React + ASP.NET Core 项目笔记一:项目环境搭建(一)

不重要的目录标题 前提条件第一步&#xff1a;新建文件夹第二步&#xff1a;使用VS/ VS code/cmd 打开该文件夹第三步&#xff1a;安装依赖第四步&#xff1a;试运行react第五步&#xff1a;整理项目结构 前提条件 安装dotnet core sdk 安装Node.js npm 第一步&#xff1a;新…