1. el-table 嵌套 el-image 导致侧边栏滚动条失效

网络上有说是因为el-table内容溢出导致的,也可能是el-image中的clickHandler覆盖body的overflow属性导致的。

遇到的实际情况是,el-table中的el-image在不设置width/height的情况下,需要重新刷新页面才会展示el-table的侧边滚动条。遗憾的是在单独element-ui的环境下,并没有成功复现这个bug,所以具体原因还不清楚。

解决方案是给el-image设置width/height。

1
2
3
4
5
6
7
<el-table-column label="图片" width="85" fixed="left" align="center">
<template 2. -scope="scope">
<div class="my-el-row">
<el-image :src="scope.row.picurl" style="width: 4vw;height: 4vw;" />
</div>
</template>
</el-table-column>

2. axio提交数据后刷新数据不是最新的

提交数据后想要看到最新的数据,需要将“刷新函数”写在 .then(reponse => { ‘执行刷新’ }), 若是在外侧,在axio请求成功之前,函数照样执行,不能保证刷新到最新数据

3. vue 项目传参:

(1) 一般直接使用json格式传递即可:{参数名 : 参数值}

(2) 复杂参数,例如列表,使用 {参数名: JSON.stringify(参数值)},然后后台再进行json解析

4. 使用SortableJS对el-table进行排序时容易遗漏row-key

5. textarea参数使用GET方法传递给后台会丢失换行符,应该使用POST方法

(这一点应该不属于vue)

6. 同router.path的情况下组件复用的问题:

统一处理方法是,tagview不可复用,每次添加新的tagview时,移除相同path的其他view,避免后续编程人员因为忘记监听query/params变化导致错误

7. 常用组件易错点:

  1. el-table的Event: select与select-all都需要处理

8. 执行后运行接口问题:

检查portfinder包的版本

检查环境变量是佛有port-*之类的变量

9. Header参数编码问题

因为系统内部分参数,如username是中文,而采用http-header中存储,而http-header只支持英文字符,因此在需要判断header参数时,应将参数写在body中。例如接口中判断登录人时,应前台body写:{username: this.$store.username}

10. el-popover手动关闭问题

el-table-column添加了 fixed=”left” 或 fixed=”right”后,el-popover无法使用id进行关闭

11. 页面缓存

要保证路由中的name与组件的name一致

1
2
3
4
5
6
{
path: '....',
component: () => import('@/views/..../...'),
name: 'ThisNameMustBeSame',
meta: { title: '...', icon: 'tab', noCache: false, roles: ['...'] }
}
1
2
3
export default {
name: 'ThisNameMustBeSame'
}

12. elment-ui走马灯总有滚动条的问题 el-carousel滚动条问题

需要设置height值

1
<el-carousel height="100px" >

13. el-input的change事件与input事件的区别

change事件仅“仅在输入框失去焦点或用户按下回车时触发”

input事件是“在 Input 值改变时触发”

14. JS中的计算问题

和java一样,js中涉及到数值计算,要用bigNumber

15. 时间格式问题

16. 常用数组操作

注意区分slice与splice

https://www.cnblogs.com/tu-0718/p/10396545.html

 **slice()定义:**从已有的数组中返回你选择的某段数组元素

 **slice()语法:**arrayObject.slice(start,end)

 **①:**start表示从何处开始选取,end表示从何处开始结束选取,表示一个选取的范围

 **②:**start可以为负数,此时它规定从数组尾部开始算起的位置。也就是-1 ,指最后一个元素,-2 指倒数第二个元素,以此类推

 **③:**end如果没有被指定参数,数组会包含从 start 到最后一个数组元素的所有元素

 **④:**slice()方法不会修改数组本身,而是返回所选取范围的数组元素。如果想删除数组中的某一个元素,需要使用splice()

 **splice()**

 **splice()定义:**从数组中添加或删除元素,然后返回被删除的数组元素。

 **splice()语法:**arrayObject.splice(index,howmany,item1,.....,itemX)

 **①:**index表示从什么位置开始添加或删除数组元素

 **②:**howmany表示删除的元素数量,如果为0,则表示不删除数组元素

 **③:i**tem1,.....,itemX表示新增的数组元素

 **④:**splice()方法会改变原始数组

17. element-ui table合并单元格问题

函数返回值表达的不同含义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 舍弃该单元格
{
rowspan: 0,
colspan: 0
}

// 保留,不跨单元格
{
rowspan: 1,
colspan: 1
}

// a > 1, b > 1时,跨单元格
{
rowspan: a,
colspan: b
}

18. 下载文件乱码问题

iconv-lite可解决axios下载文件名中文乱码问题,关键代码: 

1
2
const iconv = require('iconv-lite') 
fileName = iconv.decode(fileName, 'UTF-8')

19. vue-element-admin中刷新当前tagview

1
2
3
4
5
6
7
8
9
10
11
12
13
import store from '@/store'

export function refreshView(thisobj) {
// In order to make the cached page re-rendered
store.dispatch('tagsView/delAllCachedViews', thisobj.$route)
const { fullPath } = thisobj.$route
thisobj.$router.replace({
path: '/redirect' + fullPath
})
}

// 调用
refreshView(this)

20. Promise.prototype.finally()方法

1
2
3
4
5
6
7
8
apiMethod({
data...
}).then(response => {
// 请求成功执行的代码
}).finally(() => {
// 不管请求失败成功与否, 总是执行
// 此处可以放置类似loading = false之类的代码
})

21. 使用VSCODE编辑支持eslint的项目时报错

VScode默认使用jshint,需要配置关闭jshint。

1
"jshint.enable": "false"

22. TODO

前言

第一章 Maven简介

1 何为Maven

  • Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理
  • 构建:build,指的是编译、运行单元测试、生成文档、打包和部署等繁琐且不起眼的工作
  • maven用途之一:自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。
  • maven是一个构建工具,自动化构建,抽象构建过程,提供构建任务实现;跨平台,对外提供了一致的操作接口
  • maven还是依赖管理工具和项目信息管理工具,它提供中央仓库,帮我们自动下载构件
  • maven通过一组坐标能够找到任何一个Java类库
  • 管理项目信息:项目描述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址等,我们还能够轻松获得项目文档、测试报告、静态分析报告、源码版本日志报告等非常具有价值的项目信息
  • maven:约定优于配置

2 为什么需要maven

  • IDE的天生缺陷:
    • 依赖大量的手工操作:编译、测试、代码生成等工作都是相互独立的,很难一键完成所有工作
    • 很难在项目里统一所有的IDE配置
  • Make也许是最早的构建工具:
    • Make通过一系列目标和依赖将整个构建过程串联起来,同时利用本地命令完成每个目标的实际行为。Make的强大之处在于它可以利用所有系统的本地命令,但是make将自己和操作系统绑定在一起了,使用make就不能或很难实现跨平台构建
  • Ant:Another Neat Tool “另一个整洁的工具”
    • java版本的Make,跨平台,使用xml定义构建脚本
  • 不重复发明轮子

3 Maven与极限编程

  • 简单,交流与反馈,测试驱动开发,十分钟构建,持续集成,富有信息的工作区

4 被误解的Maven

  • 使用maven最高效的方式永远是命令行

提示汇总:

  1. Care About Your Craft. 关心你的技艺。
  2. Think! About Your Work. 思考!你的工作。
  3. 提供各种选择,不要找蹩脚的借口。
  4. 不要容忍破窗户。
  5. 做变化的催化剂。Be the Catalyst for Change!
  6. 记住大图景。Remember the Big Picture!
  7. 使质量成为需求问题。
  8. 定期为你的知识资产投资
  9. 批判地分析你读到的和听到的。
  10. 你说什么和你怎么说同样重要!
  11. DRY - Don’t Repeat Yourself. 不要重复你自己。
  12. Make It Easy To Reuse。 让复用变得容易。
  13. 消除无关事物之间的影响。
  14. 不存在最终决策。There Are No Final Decisions.
  15. 用曳光弹找到目标。Use Tracer Bullets to Find the Target.
  16. 为了学习而制作原型。Prototype to Learn.
  17. 靠近问题领域编程。Program Close to the Problem domain.
  18. 估算,以避免发生意外。Estimate to Avoid Surprises.
  19. 通过代码对进度表进行迭代。Iterate the Schedule with the Code.
  20. 用纯文本保存知识。Keep Knowledge in Plain Text.
  21. 利用命令Shell的力量。Use the Power of Command Shells.
  22. 用好一种编辑器。Use a Single Editor Well.
  23. 总是使用源码控制。Always Use Source Code Control
  24. 要修正问题,而不是发出指责。 Fix the Problem, not the Blame.
  25. 调试第一准则:不要恐慌。Don’t Panic.
  26. “Select”没有问题。不要先怀疑是第三方产品的问题
  27. 不要假定,要证明。
  28. 学习一种文本操纵语言,如Python,Tcl, Perl
  29. 编写能编写代码的代码。Write Code That Writes Code。
  30. 你不可能写出完美的软件
  31. 通过合约进行设计。Design with Contracts.
  32. 早崩溃。Crash Early.
  33. 如果它不可能发生,用断言确保它不会发生。If it can’t Happen, Use Assertions to Ensure That It won’t.
  34. 将异常用于异常的问题。Use Exceptions For Exceptional Problems.
  35. 要有始有终。Finish What You Start.
阅读全文 »

序 一

  • 加密数字货币:区块链1.0
  • 智能合约:区块链2.0
  • 建立跨组织互信的“区块链3.0”
  • 新一代信息技术的基石:区块链,人工智能,量子信息,移动通信,物联网

序 二

  • 互联网只是信息传递者,并不关心人与人之间的协作模式和信任构建方法;而区块链在信息互联网的基础上构建了一种新的可信的大规模协作方式方式,以解决数字经济发展的信任问题,被誉为下一代互联网的重要特征,因此区块链被寄予众多期望。
  • 区块链涉及技术: 哈希算法,数字签名,点对点传输,共识机制等
  • 以数据库为核心的信息系统解决了组织内的信息管理,以区块链为核心的信息系统实现了组织间的可信数据管理、共享及高效协作
  • 越是颠覆性的东西推广起来阻力越大,而一旦迸发将势不可挡

前言

  • 本书包括区块链的基础知识,对区块链的应用场景以及发展趋势的探究

第一部分 区块链技术

第一章 疯狂的比特币及其原理机制

海中月是天上月,眼前人是心上人,向来心是看客心,奈何人是剧中人。 —-原:张爱玲

也许每一个男子全都有过这样的两个女人,至少两个。娶了红玫瑰,久而久之,红的变了墙上的一抹蚊子血,白的还是“床前明月光”;娶了白玫瑰,白的便是衣服上沾的一粒饭黏子,红的却是心口上一颗朱砂痣

张爱玲在《倾城之恋》里借白流苏的口对范柳原说:“你最高的理想是一个冰清玉洁而又富地挑逗性的女人。冰清玉洁,是对于他人。挑逗,是对于你自己。”可见,张爱玲也是不赞成佟振保对女人的二分法。

谁都没错,但却是不对的。

  同事送了一本张爱玲的中短篇小说集,《红玫瑰与白玫瑰》,原本用来打发闲暇时间,可越来越发现,应当早些时候读的。
  给我最大冲击的是小说“红玫瑰与白玫瑰”。
  男主角名叫振保,初恋是一名外国女,名叫玫瑰,“坐怀不乱”的分了手,文中讲“这女人在外国没什么,在中国却行不通”。第二个女人是一个已婚妇女,这段恋情便是题目中热烈的红玫瑰。虽然红玫瑰已婚,但他们还是相爱了,至少从后来再相遇振保大哭,我觉得振保是爱的。振保当时的生活“来之不易”,又有母亲,社会在有形或无形地施压,也或许只是自己放不下,即便红玫瑰主动与她丈夫坦白,要和振保结婚,振保却抛弃了她。后来,娶了“笼统的白净”的白玫瑰,处女,大家闺秀,不擅交际,一位社会上看“再理想不过的”妻子。

  张爱玲在《倾城之恋》里借白流苏的口对范柳原说:“你最高的理想是一个冰清玉洁而又富地挑逗性的女人。冰清玉洁,是对于他人。挑逗,是对于你自己。”

  记得李笑来在某本书上提到过一个概念,叫做“SB速率”,你有多快的感觉到昨天是个SB,你的成长速度就有多快。读了张爱玲后,才发现自己以前的头脑被困住了,当然,如今仍然困在其中,不过至少看到了一些枷锁痕迹。当然,解开枷锁也是要付出代价的。

发生错误之后应该尽快检测出错误
尽量让错误/警告在编译的时候就出现
尽量异常,不要试图隐藏错误

阅读全文 »

第一章 mysql架构与历史

概要地描述了MySQL的服务器架构、各种存储引擎之间的主要区别,以及这些区别的重要性。

MySQL 逻辑架构

MySQL 逻辑架构图
MySQL 逻辑架构图

第一层:连接管理,授权认证,安全等
第二层:核心服务层,查询解析、分析、优化、缓存以及所有的内置函数,跨存储引擎的功能,包括存储过程,触发器,视图等
第三层:存储引擎,负责数据的存储和提取。服务器通过API与存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明。存储引擎API包含几十个底层函数,用于执行诸如“开启一个事务”或者“根据主键提取一行记录”等操作。但存储引擎不会去解析SQL,不同存储引擎之间也不会相互通信,而只是简单地响应上层服务器的请求。

拉迪亚德·吉卜林写给即将奔赴一战战场儿子的励志诗

阅读全文 »

  1. 代码分层的很重要

在原本的单体架构中,想要单独拆分一个模块出来单独的部署与运行,但是原本的代码层级混乱,给代码拆分和迁移增加了很多工作量。

例如,原本的单体架构大致可分为Controller/Service/Module+基本的配置常量。(在sprintboot中Module更多的阐述为entity)
理想情况下,将某个模块涉及到的Controller/Service+所有的数据entity拷贝出来,按照新框架的格式对相应的接口/拦截器等等进行修改即可。
但是,由于代码层次不明显,entity中存在调用各个service的方法,导致如果导入所有entity,则需要导入很多额外的包。