LXZ的原创知识库

记录,思考,成长,回忆


  • 首页

  • 分类

  • 归档

【笔记】Vue学习

发表于 2022-01-10 | 分类于 笔记

[笔记系列文章说明]: 该类型的文章是笔者学习过程中整理的学习笔记.

Vue 是一种JS,HTML,CSS渲染框架,通过其独特的绑定渲染方式,使页面编程更加方便,容易(JS语法糖).

生态圈

  1. Vue Router
  2. Vuex
  3. Vue Loader
  4. Vue Test Utils
  5. Vue Dev-Tools
  6. Vue CLI
  7. Vetur
阅读全文 »

【笔记】ECMAScript6学习

发表于 2021-12-21 | 分类于 笔记

[笔记系列文章说明]: 该类型的文章是笔者学习过程中整理的学习笔记.

ECMAScript6 是JS的版本升级,主流浏览器和手机固件都已支持解析. 对过去来说的JS其实也是ECMAcript, 不过是老版本,名字也没有变. 6版本对JS的编写规则进行了封装, 形成了一套新的编写方式. 对于不支持解析的容器上,
可以通过EC6转EC5工具进行转换后运行(如Babel)

背景故事

ECMAScript 和 JavaScript 的关系 ECMAScript是发布国际标准的组织,JavaScript是Netscape创建的,后提交给ECMAScript ECMAScript= 标准 JavaScript= 实现(
3.0)
ECMAScript的版本 从3.0到 3.1=5 到6 中间版本没有通过…

语法

新的关键字

一, let(只作用于代码块内的变量声明关键字)

1
2
3
{
let name = "脆饼";
}

1, 适用于局部使用的变量: for循环, 临时变量 2, let非顺序执行将报错,var将显示undefined(var的变量提升未执行先使用将导致undefined)
3, let在区块中后者覆盖前者,前者将报错失效(单位内唯一性)
4, var中作用域为全局和方法中, ECMA6增加区块作用域,使用let实现

二, const(常量声明且初始化)

1
const DEFAULT_VALUE = 3;

1, 声明后必须赋值 2, 再赋值将报错 3, 支持区块作用域 4, 地址级别的常量,类似JAVA中的对象常量

阅读全文 »

【文档】STC-stcconfig 分布式动态配置中心使用手册

发表于 2021-12-17 | 分类于 文档

[文档系列文章说明]: 该类型的文章是对项目使用进行说明.

代码地址: https://github.com/lvxingzhi/stcconfig

概述

感谢使用stcconfig分布式动态配置中心, 为了更好地使用相关功能, 请按顺序阅读如下内容

stcconfig能做什么?

stcconfig 分布式动态配置中心包含模块: stcconfig-server, stcconfig-client, stcconfig-web, demo-client
stcconfig-server: 配置管理中心, 管理相关数据, 维护zookeeper相关节点, 提供对外API, 支持配置文件下载
stcconfig-client: 配置客户端, 项目引入后可通过注解动态注入配置, 配置更新后实时更新配置文件, 参数值
stcconfig-web: 配置管理WEB端, 通过UI方式管理环境,项目,配置文件

概念说明

环境: 常见的项目开发部署通常包括多环境, 环境类型帮助定义区分不同的环境去使用
项目: 以开发的项目模块为单位,可用于区分不同系统间的配置文件
配置: 即配置文件元数据

适用范围

如果你的项目基于Spring/Spring boot/Spring cloud, 那么就可以使用stcconfig进行配置的管理

架构图

阅读全文 »

【方案】前后端数据传输加密实现方案 - 后端实现

发表于 2021-11-19 | 分类于 方案

[方案系列文章说明]: 该类型的文章是我在使用和学习中认为不错的解决办法,当然会有更好的方案,也一定会有, 所以文章具有一定的局限性, 请结合自己的思考辩证的看.

继续上代码

1, 加密工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/**
* 前后端请求加解密工具
*
* @Description
* @Author xingzhi.lv
* @Version 1.0
* @Date 2021/7/2 15:36
*/
public class RequestAESUtils {
private static final String ENCRYPT_TYPE = "AES";
private static final String CIPHER_MODEL = "AES/ECB/PKCS5Padding";

/**
* 初始化加密
*
* @return
* @throws Exception
*/
private static Cipher createAesCipher() throws Exception {
return Cipher.getInstance(CIPHER_MODEL);
}

/**
* AES方式加密
* Base64输出
*
* @param content
* @return
* @throws Exception
*/
public static String encryptByAES(String content, String key) throws Exception {
Cipher cipher = createAesCipher();
KeyGenerator keyGenerator = KeyGenerator.getInstance(ENCRYPT_TYPE);
keyGenerator.init(128, new SecureRandom(key.getBytes()));
SecretKeySpec secretKeySpec = new SecretKeySpec(Arrays.copyOf(key.getBytes(StandardCharsets.UTF_8), 16), ENCRYPT_TYPE);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] bytes = cipher.doFinal(content.getBytes());
// 对字节数组加密生成字符串
BASE64Encoder base64encoder = new BASE64Encoder();
String result = base64encoder.encode(bytes);
return result;
}

/**
* AES方式解密
* Base64输入
*
* @param content
* @return
* @throws Exception
*/
public static String decryptByAes(String content, String key) throws Exception {
// 对字符串解密形成数组-> 再转为对应编码字符串
BASE64Decoder dencode = new BASE64Decoder();//创建解码对象
byte[] bytes = dencode.decodeBuffer(content);//得到字节数组
Cipher cipher = createAesCipher();
KeyGenerator keyGenerator = KeyGenerator.getInstance(ENCRYPT_TYPE);
keyGenerator.init(128, new SecureRandom(key.getBytes()));
SecretKeySpec secretKeySpec = new SecretKeySpec(Arrays.copyOf(key.getBytes(StandardCharsets.UTF_8), 16), ENCRYPT_TYPE);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] resultDecryptByte = cipher.doFinal(bytes);
return new String(resultDecryptByte);
}

// public static void main(String[] args) throws Exception {
// String encryContent = RequestAESUtils.encryptByAES("138", "0000000000000000");
// System.out.println(encryContent);
// String content = RequestAESUtils.decryptByAes(encryContent, "0000000000000000");
// System.out.println(content);
// System.out.println(RequestAESUtils.decryptByAes("1BUqgKqSChvYM6xwB5wIzA==", "0000000000000000"));
// }

}

阅读全文 »

【方案】前后端数据传输加密实现方案 - 前端实现

发表于 2021-11-19 | 分类于 方案

[方案系列文章说明]: 该类型的文章是我在使用和学习中认为不错的解决办法,当然会有更好的方案,也一定会有, 所以文章具有一定的局限性, 请结合自己的思考辩证的看.

上代码

1, 引入加密工具包-CryptoJS

1
<script src="/layui/cryptojs/aes.js"></script><script src="/layui/cryptojs/mode-ecb-min.js"></script>

2, 加密方法

1
2
3
4
5
function encryptAesParam(content){
  const key = CryptoJS.enc.Utf8.parse("0000000000000000");
  var ciphertext = CryptoJS.AES.encrypt(content+"", key,{mode: CryptoJS.mode.ECB,    padding:CryptoJS.pad.Pkcs7  }).toString();
  return ciphertext;
}
阅读全文 »

【方案】前后端数据传输加密实现方案

发表于 2021-11-19 | 分类于 方案

[方案系列文章说明]: 该类型的文章是我在使用和学习中认为不错的解决办法,当然会有更好的方案,也一定会有, 所以文章具有一定的局限性, 请结合自己的思考辩证的看.

在处理前后端安全上,需要对数据进行加密增加安全性,这里列出我的方案

背景

前后端数据传输要求对敏感信息进行加密后传输, 后台统一进行解密后进入Controller

方案

1, 加密方式: AES/ECB/PKCS5Padding (PKCS5Padding,PKCS7Padding效果相同)
2, 生成的密文编码: UTF-8
3, 秘钥长度: 16位, 0000000000000000
4, 数据块长度: 128
5, header中设置加密开关,加密属性

key value
isEncrypt true/false 解密/不解密
decryptFields user|age|id 需要解密的字段,以|分割

6, 支持请求方式: method支持GET/POST
7, 支持数据类型: contentType支持application/json,application/x-www-form-urlencoded

阅读全文 »

【项目】STC-stcconfig 分布式动态配置中心

发表于 2021-11-03 | 分类于 项目

[项目系列文章说明]: 该类型的文章是对项目的实现方案和部分代码进行说明.

STC-stcconfig 分布式动态配置中心: 包含服务端,客户端包,WEB管理三大模块组成
1,可实现配置,环境,项目三级管理.
2,客户端动态下载,注解方式加载配置文件配置.
3,服务端管理环境,zookeeper节点管理,版本管理,历史记录管理.
4,WEB管理实现配置文件更新,客户端实时变更.

代码地址: https://github.com/lvxingzhi/stcconfig

系统实现原理

注解实现配置注入
核心容器管理配置与注解对象,实现动态更新
https配置文件下载
zookeeper节点管理实现配置层级管理,监控机制实现订阅
服务器mysql持久化配置文件,客户端持久化本地
基于layui实现UI

依赖

1, spring boot
2, mysql
3, zookeeper
4, fastjson, lombok等

难点

1, 客户端实现动态配置文件下载,更新,监听
2, 服务端实现zookeeper节点管理,更新,对比,删除

阅读全文 »

【项目】STC-stcdatacache

发表于 2021-11-03 | 分类于 项目

[项目系列文章说明]: 该类型的文章是对项目的实现方案和部分代码进行说明.

除了使用Spring cache之外, 项目对自定义缓存扩展有一定需求的情况下, 自己动手编写一个针对方法级别的缓存(可扩展支持到类,但不易维护, 不建议使用类级别的).
结合STC-stcconfig动态配置系统, 可实现缓存的动态删除, 缓存开关实时生效.

代码地址: https://github.com/lvxingzhi/stcdatacache

系统实现原理

利用Spring 提供的AOP机制,实现对方法的扩展.
利用Spel表达式实现方法入参与缓存key动态匹配.
预定义缓存接口,实现对不同缓存方式的兼容.
异常处理保证业务的可用性.
整理并不复杂, 流程图略.

依赖

1, Spring
2, 任意分布式缓存

阅读全文 »

【方案】业务中MQ的使用方案分析

发表于 2021-11-01 | 分类于 方案

[方案系列文章说明]: 该类型的文章是我在使用和学习中认为不错的解决办法,当然会有更好的方案,也一定会有, 所以文章具有一定的局限性, 请结合自己的思考辩证的看.

业务中使用MQ遇到的常见问题,进行分析并给出一个合理的解决方案.

常见使用方式及问题

场景一

1
2
3
4
S1: open Transaction
S2: 处理业务
S3: 发送MQ消息
S4: commit Transaction

问题
1, 当S3失败,大量阻塞业务,可能造成整个业务线雪崩
2, 当S4失败,造成业务数据回滚, MQ消息发送成功,产生异常数据

场景二

1
2
3
4
S1: open Transaction
S2: 处理业务
S3: commit Transaction
S4: 发送MQ消息

问题
1,当S4失败, 造成MQ未正常发送,产生消费业务线产生异常数据

阅读全文 »

【方案】Redis+数据库双写问题

发表于 2021-11-01 | 分类于 方案

[方案系列文章说明]: 该类型的文章是我在使用和学习中认为不错的解决办法,当然会有更好的方案,也一定会有, 所以文章具有一定的局限性, 请结合自己的思考辩证的看.

业务中使用Redis进行数据缓存,通常会遇到数据一致性问题,这里进行分析和讨论几种方案.

常见使用方式及问题

场景一

1
2
3
4
S1: update/delete redis
S2: open Transaction
S3: 处理业务
S4: commit Transaction

问题
1, 并发时, 缓存删除后事务执行期间,其他线程的读将造成缓存脏数据
结论
脏数据的概率非常大,方案淘汰

阅读全文 »
12…6下一页

55 日志
5 分类
1 标签
GitHub E-Mail
© 2016 — 2022 吕兴志
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4