MyBatis-Plus字段加密解密

news2024/11/29 12:29:06
  1. 项目创建
  2. POM依赖
    <dependency><!--MyBatis-Plus 企业级模块-->
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-mate-starter</artifactId>
        <version>1.2.8</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.bouncycastle/bctls-jdk15on -->
    <dependency><!--SM2 SM3 SM4 加密算法依赖-->
        <groupId>org.bouncycastle</groupId>
        <artifactId>bctls-jdk15on</artifactId>
        <version>1.70</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.jasypt/jasypt -->
    <dependency><!--混合加密算法依赖-->
        <groupId>org.jasypt</groupId>
        <artifactId>jasypt</artifactId>
        <version>1.9.3</version>
    </dependency>
  3. YML配置
    spring:
      datasource:
        # 配置安全:https://blog.csdn.net/tongxin_tongmeng/article/details/128664932
        url: mpw:IlcV2VrLIr+z3ruf0oHP1sV3JuEvntw9QZDEYhQWDNHJ9Xkm7qZokxkEeTCPNqma
        username: mpw:aoVz0lDJNymnmrhw6LkQow==
        password: mpw:StRVtLG7vB6iKVt83du7fw==
        driver-class-name: com.mysql.cj.jdbc.Driver
    
    # Mybatis Mate 配置
    mybatis-mate:
      cert:
        # 请添加微信wx153666购买授权,不白嫖从我做起! 测试证书会失效,请勿正式环境使用
        grant: thisIsTestLicense
        license: TtY9GC88CzSkEmUhzIyvM2MJKvsgPyxoNCExH4/GhaBwuTQ93aeLaR6/dM49wMSk+oQdmqUibCM8b5H74s1Nx+2C5V3U1gKiLtddVc8Eg8oC1F2nLxOiDKDvPpdxWFGsPW6mQE2LDr+tK8GXpFS3N8xwmYy/gHCwQ4Avqp9JqBbke7pZzL2adIlxYHmCYpfNTN+NRHIEFaGFTBlzZHDb3UfJaeqLaAtWBol0QOPEM69Kz3JSemxBHnEO1ID75bwwmkgqC7Ps4z9iYAK9GLzzaPwSiFELNCmIvwa5YSJLxP9NMQUWbVGIRqehxnVqfgx/68+yIfpByqGTMxLR33yeEQ==
      # 全局配置加密算法密钥
      encryptor:
        # MD5_32 MD5_16 BASE64 AES SM2 SM3 SM4 需要 password,其他加密算法需要 password publicKey privateKey
        password: mybatis-mate-encryptor-password-666
        publicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCEOCMScPeNaJ0DP9N9vd/fXwPGUVnuxeGPpRePXfWuX/X/Yk5IMhwEfYLXictxQk/oAqGnqtDuS/PCL/7mqL+8wFSYnWWErCSkDdT6LjyD07l9dWv+Xj1UTEjP24sEgYA92f4AZyvhsw8I/Bj6a9a30r+kVOGoEZgGMf2c2xK4CQIDAQAB
        privateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAIQ4IxJw941onQM/0329399fA8ZRWe7F4Y+lF49d9a5f9f9iTkgyHAR9gteJy3FCT+gCoaeq0O5L88Iv/uaov7zAVJidZYSsJKQN1PouPIPTuX11a/5ePVRMSM/biwSBgD3Z/gBnK+GzDwj8GPpr1rfSv6RU4agRmAYx/ZzbErgJAgMBAAECgYBAlFK9DSQ8k14tWh1oizcvmO71DIMKluhHCvHo+pGnLAOxS0jFBoScxNkFga42kZcJ0U8337zQx5Q1ws+TxdRwHxQO889ZGQH3kOFB0ErUMTgFrTOakZhV0dMWzebkYitNcduSKZ1yfgM5ekF9k3owPIQhUNy8eXjagiLLb9/woQJBALwofOx+fuanQLC1yotFqYAx0XED9EpVPhS/G8mc4dZSNWZ548bIyq3ozP0CoHqriQo/X3NVzIJOU3rhn92fwj0CQQCz5FaeHzSqe1H4bTxzwgR5BUHttxrAPtktwfgCRgaSrZByjFldtP/dGaJmjR2Vzp848WcusJZlSlaLTfndm6W9AkEAoSxlZgctGNKn3Ta7mvU/Lmp+J7rlZU8DcK4LVXYnFXkx+OfsLvkMdE/4V7oKUUnih36lepxCJFSHubjPQf55WQJBAIUa8yxUkreCQAi9avmMGZsiVMH7tgOBfVjqKQQlpD9rxXG8f3Nitd93VD7lM3rhQ9byaBKX/vA7rQWuUK+0t1ECQDTGhLRJFZK4J7UGklTX94pknM/5rO3N/JPkFJcGilbgzkqy0s13D1K+8cR0qTn2DPW8vPoLQpVGuaATTTmMdvg=
    
    @SpringBootTest
    class MybatisPlusApplicationTests {
    
        @Test
        void contextLoads() throws Exception {
            Map<String, Key> keyMap = RSA.genKeyPair();
            String publicKey = RSA.getPublicKey(keyMap);
            String privateKey = RSA.getPrivateKey(keyMap);
            System.out.println("publicKey========="+publicKey);
            System.out.println("privateKey========="+privateKey);
        }
    
    }
    
    注意:password为任意字符串,publicKey和privateKey通过如上方法生成
  4. SQL脚本
    CREATE TABLE `encrypt` (
      `id` bigint NOT NULL COMMENT '主键ID',
      `MD5_32` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'MD5_32',
      `MD5_16` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'MD5_16',
      `BASE64` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'BASE64',
      `AES` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'AES',
      `RSA` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'RSA',
      `SM2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'SM2',
      `SM3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'SM3',
      `SM4` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'SM4',
      `PBEWithMD5AndDES` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'PBEWithMD5AndDES',
      `PBEWithMD5AndTripleDES` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'PBEWithMD5AndTripleDES',
      `PBEWithHMACSHA512AndAES_256` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'PBEWithHMACSHA512AndAES_256',
      `PBEWithSHA1AndDESede` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'PBEWithSHA1AndDESede',
      `PBEWithSHA1AndRC2_40` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'PBEWithSHA1AndRC2_40',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  5. 代码生成(MybatisX)
    @RestController
    @RequestMapping("/encrypt")
    public class EncryptController {
    
        @Autowired
        private EncryptService encrtptService;
    
        @PostMapping("/create")
        public Boolean create(@RequestBody Encrypt encrypt) {
            return encrtptService.save(encrypt);
        }
    
        @GetMapping("/get")
        public Encrypt get(@RequestBody Encrypt encrypt) {
            return encrtptService.getById(encrypt.getId());
        }
    
        @GetMapping("/getAll")
        public List<Encrypt> getAll() {
            return encrtptService.list();
        }
    
        @PutMapping("/update")
        public Boolean update(@RequestBody Encrypt encrypt) {
            return encrtptService.updateById(encrypt);
        }
    
        @DeleteMapping("/delete")
        public Boolean delete(@RequestBody Encrypt encrypt) {
            return encrtptService.removeById(encrypt);
        }
    
        @DeleteMapping("/deleteAll")
        public Boolean deleteAll() {
            return encrtptService.remove(new QueryWrapper<>());
        }
    
    }
  6. 加密算法
  7. 字段加密(@FieldEncrypt)
    /**
     *
     * @TableName encrypt
     */
    @TableName(value ="encrypt")
    @Data
    public class Encrypt implements Serializable {
        /**
         * 主键ID
         */
        @TableId(value = "id")
        private Long id;
    
        /**
         * MD5_32
         */
        @FieldEncrypt(algorithm = Algorithm.MD5_32)
        @TableField(value = "MD5_32")
        private String md532;
    
        /**
         * MD5_16
         */
        @FieldEncrypt(algorithm = Algorithm.MD5_16)
        @TableField(value = "MD5_16")
        private String md516;
    
        /**
         * BASE64
         */
        @FieldEncrypt(algorithm = Algorithm.BASE64)
        @TableField(value = "BASE64")
        private String base64;
    
        /**
         * AES
         */
        @FieldEncrypt(algorithm = Algorithm.AES)
        @TableField(value = "AES")
        private String aes;
    
        /**
         * RSA
         */
        @FieldEncrypt(algorithm = Algorithm.RSA)
        @TableField(value = "RSA")
        private String rsa;
    
        /**
         * SM2
         */
        @FieldEncrypt(algorithm = Algorithm.SM2)
        @TableField(value = "SM2")
        private String sm2;
    
        /**
         * SM3
         */
        @FieldEncrypt(algorithm = Algorithm.SM3)
        @TableField(value = "SM3")
        private String sm3;
    
        /**
         * SM4
         */
        @FieldEncrypt(algorithm = Algorithm.SM4)
        @TableField(value = "SM4")
        private String sm4;
    
        /**
         * PBEWithMD5AndDES
         */
        @FieldEncrypt(algorithm = Algorithm.PBEWithMD5AndDES)
        @TableField(value = "PBEWithMD5AndDES")
        private String pbewithmd5anddes;
    
        /**
         * PBEWithMD5AndTripleDES
         */
        @FieldEncrypt(algorithm = Algorithm.PBEWithMD5AndTripleDES)
        @TableField(value = "PBEWithMD5AndTripleDES")
        private String pbewithmd5andtripledes;
    
        /**
         * PBEWithHMACSHA512AndAES_256
         */
        @FieldEncrypt(algorithm = Algorithm.PBEWithHMACSHA512AndAES_256)
        @TableField(value = "PBEWithHMACSHA512AndAES_256")
        private String pbewithhmacsha512andaes256;
    
        /**
         * PBEWithSHA1AndDESede
         */
        @FieldEncrypt(algorithm = Algorithm.PBEWithSHA1AndDESede)
        @TableField(value = "PBEWithSHA1AndDESede")
        private String pbewithsha1anddesede;
    
        /**
         * PBEWithSHA1AndRC2_40
         */
        @FieldEncrypt(algorithm = Algorithm.PBEWithSHA1AndRC2_40)
        @TableField(value = "PBEWithSHA1AndRC2_40")
        private String pbewithsha1andrc240;
    
        @TableField(exist = false)
        private static final long serialVersionUID = 1L;
    
        @Override
        public boolean equals(Object that) {
            if (this == that) {
                return true;
            }
            if (that == null) {
                return false;
            }
            if (getClass() != that.getClass()) {
                return false;
            }
            Encrypt other = (Encrypt) that;
            return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
                && (this.getMd532() == null ? other.getMd532() == null : this.getMd532().equals(other.getMd532()))
                && (this.getMd516() == null ? other.getMd516() == null : this.getMd516().equals(other.getMd516()))
                && (this.getBase64() == null ? other.getBase64() == null : this.getBase64().equals(other.getBase64()))
                && (this.getAes() == null ? other.getAes() == null : this.getAes().equals(other.getAes()))
                && (this.getRsa() == null ? other.getRsa() == null : this.getRsa().equals(other.getRsa()))
                && (this.getSm2() == null ? other.getSm2() == null : this.getSm2().equals(other.getSm2()))
                && (this.getSm3() == null ? other.getSm3() == null : this.getSm3().equals(other.getSm3()))
                && (this.getSm4() == null ? other.getSm4() == null : this.getSm4().equals(other.getSm4()))
                && (this.getPbewithmd5anddes() == null ? other.getPbewithmd5anddes() == null : this.getPbewithmd5anddes().equals(other.getPbewithmd5anddes()))
                && (this.getPbewithmd5andtripledes() == null ? other.getPbewithmd5andtripledes() == null : this.getPbewithmd5andtripledes().equals(other.getPbewithmd5andtripledes()))
                && (this.getPbewithhmacsha512andaes256() == null ? other.getPbewithhmacsha512andaes256() == null : this.getPbewithhmacsha512andaes256().equals(other.getPbewithhmacsha512andaes256()))
                && (this.getPbewithsha1anddesede() == null ? other.getPbewithsha1anddesede() == null : this.getPbewithsha1anddesede().equals(other.getPbewithsha1anddesede()))
                && (this.getPbewithsha1andrc240() == null ? other.getPbewithsha1andrc240() == null : this.getPbewithsha1andrc240().equals(other.getPbewithsha1andrc240()));
        }
    
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
            result = prime * result + ((getMd532() == null) ? 0 : getMd532().hashCode());
            result = prime * result + ((getMd516() == null) ? 0 : getMd516().hashCode());
            result = prime * result + ((getBase64() == null) ? 0 : getBase64().hashCode());
            result = prime * result + ((getAes() == null) ? 0 : getAes().hashCode());
            result = prime * result + ((getRsa() == null) ? 0 : getRsa().hashCode());
            result = prime * result + ((getSm2() == null) ? 0 : getSm2().hashCode());
            result = prime * result + ((getSm3() == null) ? 0 : getSm3().hashCode());
            result = prime * result + ((getSm4() == null) ? 0 : getSm4().hashCode());
            result = prime * result + ((getPbewithmd5anddes() == null) ? 0 : getPbewithmd5anddes().hashCode());
            result = prime * result + ((getPbewithmd5andtripledes() == null) ? 0 : getPbewithmd5andtripledes().hashCode());
            result = prime * result + ((getPbewithhmacsha512andaes256() == null) ? 0 : getPbewithhmacsha512andaes256().hashCode());
            result = prime * result + ((getPbewithsha1anddesede() == null) ? 0 : getPbewithsha1anddesede().hashCode());
            result = prime * result + ((getPbewithsha1andrc240() == null) ? 0 : getPbewithsha1andrc240().hashCode());
            return result;
        }
    
        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append(getClass().getSimpleName());
            sb.append(" [");
            sb.append("Hash = ").append(hashCode());
            sb.append(", id=").append(id);
            sb.append(", md532=").append(md532);
            sb.append(", md516=").append(md516);
            sb.append(", base64=").append(base64);
            sb.append(", aes=").append(aes);
            sb.append(", rsa=").append(rsa);
            sb.append(", sm2=").append(sm2);
            sb.append(", sm3=").append(sm3);
            sb.append(", sm4=").append(sm4);
            sb.append(", pbewithmd5anddes=").append(pbewithmd5anddes);
            sb.append(", pbewithmd5andtripledes=").append(pbewithmd5andtripledes);
            sb.append(", pbewithhmacsha512andaes256=").append(pbewithhmacsha512andaes256);
            sb.append(", pbewithsha1anddesede=").append(pbewithsha1anddesede);
            sb.append(", pbewithsha1andrc240=").append(pbewithsha1andrc240);
            sb.append(", serialVersionUID=").append(serialVersionUID);
            sb.append("]");
            return sb.toString();
        }
    }
  8. 加密测试
    加密前:
    {
    	"md532": "md532",
    	"md516": "md516",
    	"base64": "base64",
    	"aes": "aes",
    	"rsa": "rsa",
    	"sm2": "sm2",
    	"sm3": "sm3",
    	"sm4": "sm4",
    	"pbewithmd5anddes": "pbewithmd5anddes",
    	"pbewithmd5andtripledes": "pbewithmd5andtripledes",
    	"pbewithhmacsha512andaes256": "pbewithhmacsha512andaes256",
    	"pbewithsha1anddesede": "pbewithsha1anddesede",
    	"pbewithsha1andrc240": "pbewithsha1andrc240"
    }
    
    注意:调用控制器接口向数据库插入数据

    加密后:
    {
        "id": "1614832069533679617",
    	"md532": "0ed5449e148dfaac16d1247667d62554",
    	"md516": "838026c17d7ac626",
    	"base64": "YmFzZTY0",
    	"aes": "3420e2d91b8f913bb035258e5013cc6f",
    	"rsa": "FqVQIe05Q/usNmZZWA9omCf63WYbhT7z4Qsrpvr+RsWv70vV3hVK5sV1/HZvQL6uI9pU0dkdPDEwIzn0DCJIoVKCW3l7fubdOkjOgaqxv5tIdcLmZFl9XivzA6sDhSIzitFLAj4OJu2HgbF1fNDoVEdYqAD7BEMeNeCyQYyjNQk=",
    	"sm2": "sm2",
    	"sm3": "d0c7f21dc640a69786764d688920d4d968a103a437a6159b9e7cc7c4b826b8ac",
    	"sm4": "sm4",
    	"pbewithmd5anddes": "q30eLvs6615ATdqtscdIpSdZLgC+vg1/+8mLzeD2INo=",
    	"pbewithmd5andtripledes": "PjjKX2OkRE2D/mz3UZLTXXAsLkjuAk6rF8l4WVz/CaE=",
    	"pbewithhmacsha512andaes256": "N5GESK0bGjLsJGO4DadbUMNzPo6ov/svzNHCZg0S4gmrsMLSDMLHDO/6ZrPNsYhpBTR53Xmksi9fxwSU5ScshQ==",
    	"pbewithsha1anddesede": "1kGvVHNUKDbwYG1ZnLhaK2QPre3jFddM3tB6MQETzwE=",
    	"pbewithsha1andrc240": "my9MZrkBSRtwgV6/MjAjwug7HB/lKHTMzmZJeUOrCQY="
    }
    
    注意:数据库存储内容为密文,其中SM2与SM4加密失败,其他算法加密成功

    解密后:
    {
        "id": 1614832069533679617,
        "md532": "0ed5449e148dfaac16d1247667d62554",
        "md516": "838026c17d7ac626",
        "base64": "base64",
        "aes": "aes",
        "rsa": "rsa",
        "sm2": "sm2",
        "sm3": "d0c7f21dc640a69786764d688920d4d968a103a437a6159b9e7cc7c4b826b8ac",
        "sm4": "sm4",
        "pbewithmd5anddes": "pbewithmd5anddes",
        "pbewithmd5andtripledes": "pbewithmd5andtripledes",
        "pbewithhmacsha512andaes256": "pbewithhmacsha512andaes256",
        "pbewithsha1anddesede": "pbewithsha1anddesede",
        "pbewithsha1andrc240": "pbewithsha1andrc240"
    }
    
    注意:调用控制器接口查询数据,查询结果为加密前数据,其中MD5_32 MD5_16 SM3仍是密文,说明这三种算法不可逆

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

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

相关文章

规划之路:SLAM学习经验分享

针对想学SLAM的提问&#xff0c;我觉得我还是有一定的发言权。作为一个刚入坑SLAM一年多的初学者&#xff0c;首先想说的就是这个研究方向比较广&#xff0c;大方向按搭载传感器分为激光SLAM和视觉SLAM两种&#xff0c;激光SLAM搭载激光雷达&#xff0c;视觉SLAM搭载单目、双目…

[NSSRound#6 Team]Web学习

[NSSRound#6 Team]Web学习 文章目录[NSSRound#6 Team]Web学习前言一、[NSSRound#6 Team]check(V1)二、[NSSRound#6 Team]check(Revenge)总结前言 日常做点题娱乐下&#xff0c;刷到了[NSSRound#6 Team]中是三道web题&#xff0c;学习到了不少&#xff0c;记录下知识点。 提示&…

C语言综合练习6:制作贪吃蛇

1 初始化界面 因为还没学QT&#xff0c;我们就使用终端界面替代。 这里我们假设界面中没有障碍物&#xff0c;我们只需要设定界面的高宽就行&#xff0c;这是蛇的移动范围&#xff0c;我们可以写两个宏来规定界面的高宽 新建一个snake.c的文件 #define _CRT_SECURE_NO_WARNIN…

快出数量级的性能是怎样炼成的

前言&#xff1a;今天学长跟大家讲讲《快出数量级的性能是怎样炼成的》&#xff0c;废话不多说&#xff0c;直接上干货~我们之前做过一些性能优化的案例&#xff0c;不算很多&#xff0c;还没有失手过。少则提速数倍&#xff0c;多则数十倍&#xff0c;极端情况还有提速上千倍的…

关于IDEA配置本地tomcat部署项目找不到项目工件的问题解答

文章目录一 原因分析二 解决方案三 具体的操作方法3.1 打开项目结构找到工件3.2 添加具体的工件内容3.3 配置本地tomcat一 原因分析 可能是之前的项目再次打开后&#xff0c;没有及时配置项目结构中的工件信息&#xff0c;导致配置tomcat中看不到工件的信息 二 解决方案 解决…

react组件优化,当父组件数据变化与子组件无关时,控制子组件不重新渲染

首先 我们来建立一个场景 我们创建一个react项目 然后创建一个父组件 这里我要叫 record.jsx 参考代码如下 import React from "react"; import Subset from "./subset";export default class record extends React.Component{constructor(props){super(…

工作的同时,我也在这里做副业

文章目录一、什么是独自开&#xff1f;二、独自开能给我们带来什么利益&#xff1f;三、如何使用独自开&#xff1f;3.1、用户任务报价步骤13.2、用户任务报价步骤2四、未来的愿景一、什么是独自开&#xff1f; 独自开&#xff0c;全称独自开发一套系统&#xff0c;是基于商品…

CTP开发(2)行情模块的开发

我在做CTP开发之前&#xff0c;也参考了不少其他的资料&#xff0c;发现他们都是把行情和交易做在同一个工程里的。我呢之前也做过期货相关的交易平台&#xff0c;感觉这种把行情和交易做在一起的方法缺乏可扩展性。比如我开了多个CTP账户&#xff0c;要同时交易&#xff0c;这…

springMVC的学习拦截器之验证用户登录案例

文章目录实现思路关于环境和配置文件pomspring的配置文件关于idea的通病/常见500错误的避坑实现步骤编写登陆页面编写Controller处理请求编写登录成功的页面编写登录拦截器实现思路 有一个登录页面&#xff0c;需要写一个controller访问页面登陆页面提供填写用户名和密码的表单…

UE4c++日记1(允许 创类、蓝图读写/调用/只读、分类、输出日志打印语句)

目录 1允许创建基于xx的蓝图类 2允许蓝图读写/允许蓝图调用/只读 读写调用 只读 3为变量/函数分类 4输出日志打印一段话 1.先创建一个蓝图类 2.构建对象 3.写提示代码&#xff0c;生成解决方案 4.运行&#xff0c;打开“输出日志” 5.总结 创类-实例化对象&#xff08;构建…

2022年个人年终总结(一)

2022年个人年终总结&#xff08;一&#xff09;考研想法的萌生回顾过去一年-考研心路历程基础阶段&#xff08;1-6月&#xff09;强化阶段&#xff08;7-9月&#xff09;冲刺阶段&#xff08;10-12月&#xff09;感受总结特别感谢2022年是做梦的一年&#xff0c;花了一年的时间…

Zookeeper相关操作

Zookeeper概念 •Zookeeper 是 Apache Hadoop 项目下的一个子项目&#xff0c;是一个树形目录服务。 •Zookeeper 翻译过来就是 动物园管理员&#xff0c;他是用来管 Hadoop&#xff08;大象&#xff09;、Hive(蜜蜂)、Pig(小 猪)的管理员。简称zk •Zookeeper 是一个分布式的…

【C++】非递归实现二叉树的前中后序遍历

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;二叉树的…

如何运营个人技术博客

前言 本篇和大家聊聊如何运营个人技术博客&#xff0c;定位下做技术写作的目的&#xff0c;有哪些交流平台和输出方式&#xff0c;如何把控内容质量&#xff0c;整理了一些写作技巧和自己常用的写作工具&#xff0c;最后分享下如何在有限的时间里合理安排保证写作与工作的平衡。…

第九届蓝桥杯省赛 C++ A组 - 付账问题

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;蓝桥杯题解集合 &#x1f4dd;原题地址&#xff1a;付账问题 &#x1f4e3;专栏定位&#xff1a;为想考甲级PAT的小伙伴整理常考算法题解&#xff0c;祝大家…

理解CSS

CSS 作为前端技术栈中关键一环&#xff0c;对页面元素及样式呈现起到了直接作用。本节课旨在通过对 CSS 的工作流程及原理、页面中 CSS 使用方法等详细解读&#xff0c;帮助前端新手建立对 CSS 的全面而深刻的认知。 CSS概念 CSS 即 Cascading Style Sheets&#xff0c;是用来…

认识涤生大数据的几个月,彻底改变了我

1自我介绍 大家好&#xff0c;我是泰罗奥特曼&#xff0c;毕业于东北的一所不知名一本大学&#xff0c;学校在一个小城市里面&#xff0c;最热闹的地方是一个四层楼的商城&#xff0c;专业是信息管理与信息系统&#xff0c;由于是调剂的&#xff0c;所以我也不知道这个专业是干…

[JavaEE]阻塞队列

专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录: 1.阻塞队列的概念 2.标准库中的阻塞队列 3.生产者…

1999-2019年全国、各省市直辖区居民收入和消费支出情况面板数据

1999-2019年全国、各省市直辖区居民收入和消费支出情况面板数据 1、时间&#xff1a;1999-2019年 2、指标&#xff1a; 可支配收入、城镇居民家庭平均每人全年消费性支出、食品消费支出、医疗保健消费支出、农村居民家庭人均纯收入、农村居民家庭平均每人生活消费支出、食品…

【Unity URP】设置光源层Light Layers

光源层 (Light Layers) 功能允许配置某些光源仅影响特定的游戏对象。 此功能可以用于加亮在暗处的物体。 1.开启光源层&#xff0c;并设置光源层名称 在URP资源中&#xff0c;点击Lighting右侧的垂直省略号图标 (⋮)&#xff0c;勾选Show Additional Properties&#xff0c…