生而为人

程序员的自我修养

0%

本地运行

1
hexo generate
1
hexo server

服务器部署

1
2
3
hexo clean
hexo d -g
hexo deploy

源码提交

1
2
3
4
git checkout -b blog-source
git add -A
git commit -m "init blog"
git push origin blog-source

参考资料

如何用 Github 搭建博客

bad indentation of a mapping entry

  1. title中缩进不正常,均要用tab缩进

warning: adding embedded git repository: themes/next

1
2
3
4
5
6
7
8
9
10
11
12
13
14
warning: adding embedded git repository: themes/next
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint:
hint: git submodule add <url> themes/next
hint:
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint:
hint: git rm --cached themes/next
hint:
hint: See "git help submodule" for more information.

git仓库包含子仓库时,add报错的解决办法

参考资料

hexo部署成功仍未更新或无法打开的情况

修改scheme后发布不起作用

Hexo博客 Next更换修改主题样式 不生效的解决

怎么理解flink的有状态

数据仓库建设中的数据建模方法

实体建模

数据建模-建模方法三:实体建模

实体建模法也有着自己先天的缺陷,由于实体说明法只是一种抽象客观世界的方法,因此,注定了该建模方法
只能局限在业务建模和领域概念建模阶段。因此,到了逻辑建模阶段和物理建模阶段,则是范式建模和维度建模发挥长处的阶段

实体是现实世界中存在的事物或发生的事件,是现实世界中任何可识别、可区分的事物。实体可以是人,可以是物,也可以是发生的某件事,比如一场篮球比赛。每一个实体都必须具备一定的特征,用来区分一个个实体,这些特征称为属性,每个实体可以用若干个属性来刻画,每个属性又有一定的取值类型和取值范围,属性是变量,其取值范围是属性的值域。实体建模法是根据客观世界中的一个个实体,以及实体之间的关系,在数据建模的过程中引入这种区分方法,将整个业务分成一个个实体,从而建立数据模型。实体建模可以比较容易的实现模型的划分,抽象出具体的业务概念,创建符合自己需要的数据库模型。实体建模是对客观世界的抽象,因此该方法建立的模型具有一定的局限性,适合于特定的领域。

维度建模法

维度在数学上指独立参数的数据,在数据分析领域,是指描述事物的角度和方面,是数据库当中,描述某一事物的方法和属性的数目。维度建模就是针对给定的事物,使用不同的描述方法,记录该事物在不同分类方法当中每个属性的值。如对人进行维度建模时,按照性别的维度可以分为男和女,按照年龄段可以分为儿童、少年、青年、中年、老年,按照收入水平可以分为3000以下、3000-6000、6000-10000,10000以上等集中类别。

维度建模法的好处是对于某个事物,可以在各个维度进行预处理,进行统计、分类、排序等,提高数据库操作性能,同时维度建模法建立的数据模型比较直观,可以紧密围绕业务需求建立模型,直观的反应业务中的问题,建模方法简单,不需要进行特别的抽象处理。但是维度建模法同时也存在缺点,一是在数据建模时需要进行预处理,存在大量的预处理工作,并且当业务需求发生变化时,需要重新定义维度,重新进行新维度的数据预处理,在数据预处理过程中往往存在大量数据冗余,另外就是在进行维度建模时,仅仅依靠维度进行建模,不能保证数据来源的准确性和一致性,不适合在数据库底层使用。

范式建模法

范式就是规则,是符合某一级别关系模式的集合,构造数据库时必须遵循一定的规则。关系数据库中的关系必须满足一定的规则,即满足不同的范式。

范式建模法是将原始数据信息根据一定的数据结构和转换模型,分解、转化为规范的格式,使数据遵守一定的约束条件,每一个数据项所表达的意思明确,不产生歧义,同时各条数据之间相互独立,不存在依赖关系。

建模过程

3NF范式建模,实体模型中的关系作为fact表,实体作为维度表

Update

1. 单条更新

2. 批量更新

1
2
3
4
5
6
7
UPDATE mytable 
SET myfield = CASE other_field
WHEN 1 THEN 'value'
WHEN 2 THEN 'value'
WHEN 3 THEN 'value'
END
WHERE id IN (1,2,3)

Select

1. limit

1
2
语句1:select * from student limit 9,4 //第一个参数表示从该参数的下一条数据开始,第二个参数表示每次返回的数据条数。
语句2:slect * from student limit 4 offset 9

mysql limit分页

sql注入漏洞

修复方案:
如果拼接参数是SQL的查询参数都可以通过将mybatis配置文件中的 $ 改为 #,来解决
替换规则如下:
1.将 WHERE some_field = ‘${变量}’ 替换为 WHERE some_field = #{param}

2.将 like ‘%${变量}%’ 替换为 like concat(‘%’, #{变量}, ‘%’)

3.将 like concat(‘%’, ${变量}, ‘%’) 替换成 like concat(‘%’, #{变量}, ‘%’)

4.将 WHERE some_field IN (${变量}) 替换为

WHERE some_field IN

#{item}

对于拼接的变量不是SQL参数的,而是字段名、表名的情况,可以使用安全SDK检查输入是否是合法的标识符。
1.pom 引入安全SDK依赖

com.sankuai.security
sec-sdk
${尽可能最新版本}

\2. 代码中检查输入的变量的值是否是合法的标识符。
String sortName = req.getParameter(“sortName”);
if (sortName != null && !SecSdk.isValidSqlIdentifier(sortName)) {
// 危险,可能有SQL注入,
// return or throw exception
}

参考文档:
SQL注入介绍:https://sectraining.sankuai.com/?source=source-scanner/#/document/30001
安全SDK文档:https://km.sankuai.com/page/234776924

CORS 安全配置不当

XSS 跨站脚本攻击

越权类安全问题

原理

Flink 原理与实现:理解 Flink 中的计算资源

优化

Flink 滑动窗口优化

超长滑动窗口优化及解决方案

数据源

flink系列-4、flink自定义source、sink

Flink 如何自定义Source

Flink-04-Flink自定义Source

Flink——自定义Source

5分钟Flink - 自定义Source源

join

Flink如何实现3个实时流同时join,leftjoin,rightjoin

Flink Operator之CoGroup、Join以及Connect

方法详解

richXXXFunction的open,clone方法执行

doris的分区规则

为什么表结构的分区与分区字段里去重值数量不一样?