泛型拾遗
Java 泛型类型系统
基本语法
java 的泛型没有 template 关键字。
类型形参叫作 type variable,可以在类/方法里当具体类型如 String 使用,类型实参叫作 type parameter。也有些场景下,String 是 type argument。在甲骨文文档中的描述如下:
Type Parameters: K - the type of keys maintained by this map V - thetype of mapped values
是否需要使用 type witness 取决于 compiler 是否有 enough information 来 infer 编译结果 - 又见 type inference。
泛型方法的 type variable 在 modifier(public static)和 return value 之间。
List 是 generic type。List 是 Parameterized type。
绑定类型(bounding type)
明确要绑定 type variable 到某个类型,才可以 ...
MySQL 基本功
插件式架构MySQL的插件式架构.xmind
索引问题索引的出现是为了减少单一维度查询时,搜索数据的成本。
索引的基础架构索引的分类不同的存储引擎支持不同的索引数据结构。
MySQL 支持的索引类型至少包括:BTree索引、Hash索引、full-text全文检索、R-Tree索引。
Innodb 支持的索引数据结构只有 B+树。
B+树索引
B 树扩充了二叉平衡树,让每个节点能够存储的数据大大提升。
B+ 树从 B 树演变而来,B 树每个节点都存储数据,但高度高,只有查找离根节点近的数据的速度是快的;B+树所有数据都存储在叶子节点,所以查询到特定的数据必须走完查询路径,也因此 B+树的查找速度稳定,遍历全部数据和范围查找的算法稳定(不用上溯下钻)。两种数据结构,各有所长。
B+树的每个节点可以被认为是一个磁盘块(block)-可以认为 MySQL 的磁盘块等同于 OS 的数据页,大小通常为 4k/8k/16k。磁盘块通常是双层的,第一层表示存储的数据项(data entry),第二层表示指向子节点的指针(pointer)。但 B+树本身只有叶子节点真实数据,非叶子节点存储的数据指引了 ...
一次大表翻页实验
explain 的解释https://www.cnblogs.com/butterfly100/archive/2018/01/15/8287569.html
假设慢查询是 100ms。
测试前准备一千万行数据12345678910111213141516171819202122232425262728CREATE TABLE `tb_ins_pay_order` () ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='';drop database test_db;create database test_db;drop table tb_ins_pay_order;truncate table tb_ins_pay_order;drop procedure if exists doWhile;DELIMITER // tb_ins_pay_orderCREATE PROCEDURE doWhile()BEGINDECL ...
六顶思考帽
六顶思考帽®是爱德华·德博诺博士开发的一种思维训练工具,它提供了“平行思维”的工具,全面思考问题的模型,避免将时间浪费在互相争执上。
人们参加会议都是抱着解决问题的共同目的而来的,然而发生争吵很多时候吵的并不是事实,而是情绪。人们总是还未真正理解对方的观点就陷入了和对方喋喋不休的争执之中。
所谓“六顶思考帽”是指蓝帽(指挥帽)、白帽(数据帽)、红帽(情感帽)、黄帽(乐观帽)、黑帽(谨慎帽)、绿帽(创新帽)。
六顶思考帽®是爱德华·德博诺博士开发的一种思维训练工具,它是目前全球最有影响力的创新思维训练课程。它提供了“平行思维”的工具,避免将时间浪费在互相争执上。强调的是“能够成为什么”,而非 “本身是什么”,是寻求一条向前发展的路,而不是争论谁对谁错。运用德博诺的六顶思考帽,将会使混乱的思考变得更清晰,使团体中无意义的争论变成集思广益的创造,使每个人变得富有创造性。它运用于会议管理,团队沟通,流程改进,产品研发/设计,制定决策,解决问题和领导力提升等领域。大部分世界500强企业学习使用过六顶思考帽后,都认为六帽帮助他们大大提高了工作效率,并且使会议时间减少了50%。自1984年被发现应用 ...
Maven 的依赖管理
Maven 的配置和依赖是单根继承的Maven 的模块继承是无法进行多继承的,只能使用单根继承。
Maven 中 dependencies 与 dependencyManagement 的区别dependencies 即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
dependencyManagement 里只是声明依赖和它们的版本,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且 version 和 scope 都读取自父 pom; 另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
有效 pom123mvn help:effective-pom > effective-pom.xml# 获取某个指定 artifact 的依赖树 mvn dependency:tree -Dverbose -Dincludes=com.fasterxml.jackson.core:jackson-core
下载依赖 ...
MyISAM 和 InnoDB 的区别
参考:https://www.zhihu.com/question/20596402
区别:
InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一;
InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败;
InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
InnoDB 最小的锁粒度是行锁,MyISAM ...
代码大全
第 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 章 何处有更多的信息
JUnit4/JUnit5 注解
junit4
junit5
特点
@BeforeClass
@BeforeAll
在当前类的所有测试方法之前执行。注解在【静态方法】上。
@AfterClass
@AfterAll
在当前类中的所有测试方法之后执行。注解在【静态方法】上。
@Before
@BeforeEach
在每个测试方法之前执行。注解在【非静态方法】上。
@After
@AfterEach
在每个测试方法之后执行。注解在【非静态方法】上。
彩色 UML 建模
常见的例子
MomentInterval:订单、消费、事务、退款申请
Role:购买对象、供应商、购买人、服务提供商、消费者(这些东西更偏向于元数据)、审核方、发起方。role 按照原书而言是 person 可以 associate 的一些角色,person 可以根据 role 进行一些 action。RBAC 体系即这一思想的实践。保险的干系人在元数据的设定上也是一种role。
PartyPlaceThing:Role 的具体实现:投保人、被保人、用户、商家、产品、客服。注意,这一类型几乎穷尽了所有的领域实体,也包括各种 person。
Description:订单的附属对象:消费码、数量、联系⼈、游玩人;用户的附属对象:用户 ID;商家的附属对象:商家 ID、商家名称;产品的附属对象:产品名称、产品价格、产品 ID;退款申请的附属对象:场景金额原因
架构型、彩色和领域无关的组件四色模型.xmind
架构型构造型即 stereotype,架构型即 archetype。
四种彩色的架构型
粉色的时刻时段(MI)架构型,粉色的时刻时段明细(MIDetail)架构型。由业务和法律需求我们 ...
git 难点知识汇总
git 支持的协议协议有几种:https:// 协议、git:// 协议或者使用 SSH 传输协议,比如 user@server:path/to/repo.git或者ssh://[user@]server/project.git。
local协议就是在本机的两个文件系统(一个可能是 NFS也可能不是)之间进行传输的协议,并不值得推荐。
从安全来讲:ssh强制鉴权,这要求repo不能被匿名分发;而git协议正相反,无法鉴权,但速度最快。
areas
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交表示数据已经安全地保存在本地数据库中。
staging area 也叫 index。add 就是把文件 index/staging 的过程。git 里经常混用 index 这个单词。
git 的这些区域都存在于 .git 文件夹下。用 clone 命令得到远端仓库的文件是得到远端仓库的每一个版本,不会遗漏。所以除了server hook 以外,仓库可以这样被保存和重建。git 是 version-based ...