实现页面水印效果
工作项目里实现过的需求,学习了相关代码总结出这篇文章
实现水印的思路从页面层次上来看,水印可以理解为覆盖在最高层的一层透明背景,虽然覆盖在最高层,但是不应该影响底层任何事件的触发
可以通过 canvas 绘制字符串的图片,然后转化为图片作为背景循环平铺到一个 div 里
这个 div 就是水印图
代码实现绘制水印图片1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859function setWatermark(str: string): HTMLDivElement | null { const id = "1.1351.1561.215515"; const lastEle = document.getElementById(id); if (lastEle !== null) { document.body.removeChild(lastEle); } ...
Git rebase和cherry-pick
认识 rebaserebase,正如字面意思,重新选择基点
比如下面这个图,这张图片里有两个分支 feature 和 master
起初,两个分支均为 commit A 为基点,feature 分支延伸出了 D 和 E 两个 commit,master分支延伸出了B和C两个 commit
如果执行了在master分支执行
12# at branch featuregit rebase master
则feature分支的基点会从A变成 master的最新 commit C。这就是 rebase
rebase 之后,不论是 feature 还是 master ,他们都在同一条提交线上
对比 rebase 和 merge还用上面的例子
有这样的一个提交例子
现在试一下不同的操作对提交树产生的影响
如果使用 rebase
为保证相同的顺序 (ABCDE),需要切换到 feature 分支,rebase master 分支
12# at branch featuregit rebase master
如果使用 merge
12# at branch mastergit merge f ...
实现简单的VDOM
VDom 的含义和实现原文地址原文是一篇讲得很明白的文章,本文基本上是照着写了一遍不但学到了 VDOM 相关的一些东西,原生 JS 的方法也熟悉了一遍,收获颇丰
一文说清「VirtualDOM」的含义与实现
如何理解 VDom前端常做的事情就是根据数据状态的更新,来更新页面视图。然而频繁的更新 DOM 会造成回流或者重绘,引发性能下降,页面卡顿因此我们需要方法避免频繁更新 DOM 树思路就是对比 DOM 差距,只更新需要更新的节点,而不是整棵树实现这个算法的基础,需要遍历 DOM 树的结点,来进行比较更新为了更快地处理,不使用 DOM 对象,而改用 JS 对象他就像是 JS 与 DOM 之间的一层缓存
如何表示 VDom借助 ES6 的 class,表示 VDom 的语义化更强。一个基础的 VDom 需要有标签名,标签属性以及子节点
1234567class Element { constructor(tagName, props, children) { this.tagName = tagName; this.props = props; ...
MySQL学习:增删改查
插入记录的基本语法第一种语法123INSERT INTO 表 VALUES(值1, 值2, 值3);-- 示例INSERT INTO USER VALUES(2, 'homu', 'homuhomu');
用这种方法插入数据,表中有多少个字段就必须输入多少个值不能多也不能少…若有默认值,不想上传也可以输入 null
第二种语法123INSERT INTO 表(字段1, 字段2, 字段3, ...字段n) VALUES(值1, 值2, 值3, ...值n);-- 示例INSERT INTO users(id, username, password, age) VALUES(3, 'akemi', 'homuhomu', 12);
除非有必填字段需要写入值之外,如果有默认值的不想写可以不写,mysql 会自动补全默认值相比第一种语法,这种更为常用
插入多条记录1INSERT INTO user(username, password) values('homu', 'homuho ...
MySQL学习:索引
索引的优点索引用于快速找出某个列中有特定值的一行不适用索引,Mysql 必须从第一条记录开始,读完整个表直到找出相关的行。表越大,花费时间越多。如果表中查询的列有一个索引,Mysql 能快速到达一个位置去搜寻到数据文件的中间,没有必要读取所有的数据
但是索引也不宜过多,索引越多,写入和修改的速度就越慢。写入修改数据时,索引也会修改
Mysql 索引类型
索引类型
功能说明
普通索引
最基本的索引,没有任何限制
唯一索引
某一行启用了唯一索引,则不允许这一列行数据中有重复的值,针对这一列的每一行数据都要求是唯一的
主键索引
这是一种特殊索引,不允许有空值,一般在建表的时候同时创建主键索引,常用于用户 ID
全文索引
对于需要全局搜索的数据,进行全文索引
普通索引为表的某字段添加索引
1234alter table 表 add index(字段);-- 示例alter table users add index(username);-- 给users表中的username字段添加索引
唯一索引1alter table 表 add unique(字段);
全 ...
MySQL学习:数据类型
MySQL 中存的是数据。只要是数据,我们就会规定数据的类型。在表的字段中规定了使用的是某个数据类型。那么,在插入的数据中就要使用对应的数据类型。并且,遵守数据类型的长度要求。
所有数据类型
数值类型
整型
浮点型
字符串类型
日期时间类型
复合类型
空间类型(用的不多)
整型
MySQL 数据类型
所占字节
值范围
tinyint
1 字节
-127~128
smallint
2 字节
-32768~32767
mediumint
3 字节
-8388608~8388607
int
4 字节
-2147483648~2147483647
bigint
5 字节
+-9.22*10 的 18 次方
整型长度不同,在实际使用过程也不同
MySQL 以一个可选的显示宽度指示器的形式对 SQL 标准进行扩展,这样当从数据库检索一个值时,可以把这个值加长到指定的长度。例如,指定一个字段的类型为 INT(6),就可以保证所包含数字少于 6 个的值从数据库中检索出来时能够自动地用空格填充。需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的值的 ...
MySQL学习:常用数据字段sql语句
修改表字段类型基本语法
1234alter table 表名 modify 字段名 字段类型;-- 示例-- 将user表的password类型改为varchar(30)alter table user modify password varchar(30);
12Query OK, 0 rows affected (0.02 sec)Records: 0 Duplicates: 0 Warnings: 0
查看表结构
1desc user;
1234567+----------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| username | varchar(20) | YES | | NULL | || password | varchar(30) | YES | ...
MySQL学习:常用数据表sql语句-1
创建表基本语法
123create table 表名(字段1 字段类型, 字段2 字段类型, ...字段n 字段类型);-- 示例:创建一个user表,有username和password两个字段create table user(username varchar(20), password varchar(20));
关于数据类型的知识,会在后面记录
查看数据表结构基本用法
123desc 表名;-- 示例desc user;
1234567+----------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| username | varchar(20) | YES | | NULL | || password | varchar(20) | YES | | NULL ...
也许是上海最难忘的一年
这篇文章拖了太久了… 但是依然有很多事情想要记录下来
也许大多都不是高兴的吧
今年都做了什么辞去工作准备旅游首先就是辞职
大概二月份的时候提出离职,三月离开了现在这家公司
辞职的原因很多
公司技术部团队很小,一个前端(我)一个后端,一个设计师。以前的设计师跳槽了,新的是后来又招的。新的设计师的沟通方式和我俩合不来… 经常闹矛盾 orz 我是会躲避矛盾的那种人,于是小团队不合就成为了辞职的原因之一
公司社保欠缴一年多,虽然工资有发,但是员工人人都担心着公司是不是快不行了(其实并没有),因为社保的问题,也有些不愉快
在这家公司一年半,确实开阔了视野(毕竟是坐落在上海市中心的留学公司),技术上也有不小的进步,但是这个公司的项目用的技术并不先进,基本都是在维护。我想找一个新的工作,尝试开阔自己的技术面
我想玩,上班挺累的,像辞职去旅游,也和朋友约好了时间,已经订好了三月份的机票
于是我就辞职了…
遭遇疫情但是辞职后马上遇到了天灾人祸,也就是让我感觉最难受最难忘的上海疫情封城
维基百科上称这次疫情封城为:2022 年 3 月上海市 2019 冠状病毒病聚集性疫情
当时和在上海的朋友一起 ...
Vue3移除的Api
Vue3 移除的 API按键修饰符
不再支持 keycode 作为 v-on 的修饰符
不再支持 config.keyCode
1234567891011121314151617<!-- 2.x --><!-- 键码版本 --><input v-on:keyup.13="submit" /><!-- 别名版本 --><input v-on:keyup.enter="submit" /><!-- 通过全局 config.keyCodes 选项 --><script> Vue.config.keyCodes = { f1: 112, };</script><input v-on:keyup.112="showHelpText" /><input v-on:keyup.f1="showHelpText" /><!-- 3.x --><!-- 新规 ...