设计模式|①开篇
设计模式到底是什么?
总结起来就一句话:设计模式就是一些过去技术的大师们总结出来的一系列写代码的套路。
大佬们经过实践总结又将其这些套路分为三类:创建型、结构型、行为型。
创建型模式,是为了创建对象使用的,至于为什么创建个对象(直接new一个不就完事了吗)还需要如此多不同的套路,后续你就知道,这边不赘述。
结构性模式,是用来组织不同的小对象,从而变成更大更复杂结构的对象。
行为型模式,是用来控制协调不同的对象的运行流程,因为实际开发场景下,不可能是孤零零一个对象在运行,会涉及多个对象交互,这中间的协调工作就会使用到行为型模式。
每一类型的模式都包含多个具体模式,如下图(共23种设计模式)。后续每篇文章都会对其中一个模式做详解剖析,这边就不再赘述。
这些套路到底好在哪里?
很多人学设计模式觉得很难,很重要原因是,不知道这个模式到底好在哪里?解决了什么痛点?我能用它来干啥?所以只能生搬硬套。其实模仿也是无可厚非的,进步就是从模仿优秀者开始的。但是如果想要能驾驭一门知识,还是需要了解其本质的。
所以这边需要提一下一个跟设计模式紧密相关的概念——面向对象的七大设计原则。其实, ...
项目中常用到的MySQL优化
EXPLAIN
做MySQL优化,我们要善用EXPLAIN查看SQL执行计划。
下面来个简单的示例,标注(1、2、3、4、5)我们要重点关注的数据:
EXPLAIN字段说明
type列:连接类型。一个好的SQL语句至少要达到range级别。杜绝出现all级别。
key列:使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式。
key_len列:索引长度。
rows列:扫描行数。该值是个预估值。
extra列:详细说明。注意,常见的不太友好的值,如下:Using filesort,Using temporary。
SQL语句中IN包含的值不应过多
MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果数值较多,产生的消耗也是比较大的。再例如:select id from t where num in(1,2,3)对于连续的数值,能用between就不要用in了;再或者使用连接来替换。
SELECT语句务必指明字段名称
SELECT *增加很多不必要的消耗(CPU、IO、内存、网络带宽);增加了使用覆盖索引的可能性; ...
工作中能用到的Git命令大全
分支操作
git branch:创建分支
git branch -b:创建并切换到新建的分支上
git checkout:切换分支
git branch:查看分支列表
git branch -v:查看所有分支的最后一次操作
git branch -vv:查看当前分支
git brabch -b 分支名 origin/分支名:创建远程分支到本地
git branch --merged:查看别的分支和当前分支合并过的分支
git branch --no-merged:查看未与当前分支合并的分支
git branch -d 分支名:删除本地分支
git branch -D 分支名:强行删除分支
git branch origin :分支名:删除远处仓库分支
git merge 分支名:合并分支到当前分支上
暂存操作
git stash:暂存当前修改
git stash apply:恢复最近的一次暂存
git stash pop:恢复暂存并删除暂存记录
git stash list:查看暂存列表
git stash drop 暂存名(例:stash@{0}):移除某 ...
ArrayList集合为什么不能使用foreach增删改
导语
编程过程中常常需要使用到集合,而ArrayList也是我们常常使用的,但是最近在一次删除和增加中出现了一些问题,分享记录下。
请看下面两段代码,哪段代码会报错呢,或者都成功呢。
12345678910111213141516List<String> arrayList1 = new ArrayList<>();arrayList1.add("1");arrayList1.add("2");for (String s : arrayList1) { if ("1".equals(s)) { arrayList1.remove(s); }}List<String> arrayList2 = new ArrayList<>();arrayList2.add("2");arrayList2.add("1");for (String s : arrayList2) ...
Mysql错误码大全
mysql错误码大全
错误消息信息列在share/errmsg.txt文件中。“%d”和“%s”分别代表编号和字符串,显示时,它们将被消息值取代。
错误值列在share/errmsg.txt文件中,用于生成include/mysqld_error.h和include/mysqld_ername.h MySQL源文件中的定义。
SQLSTATE值列在share/errmsg.txt文件中,用于生成include/sql_state.h MySQL源文件中的定义。由于更新很频繁,这些文件中可能包含这里未列出的额外错误消息。
错误:1000 SQLSTATE: HY000 (ER_HASHCHK)
消息:hashchk
错误:1001 SQLSTATE: HY000 (ER_NISAMCHK)
消息:isamchk
错误:1002 SQLSTATE: HY000 (ER_NO)
消息:NO
错误:1003 SQLSTATE: HY000 (ER_YES)
消息:YES
错误:1004 SQLSTATE: HY000 (ER_CANT_CREATE_FILE)
消息:无法 ...
Oracle错误码大全
oracle错误码大全
本篇文章是对oracle错误代码进行了详细的总结与分析,需要的朋友参考下:
ORA-00001: 违反唯一约束条件 (.)
ORA-00017: 请求会话以设置跟踪事件
ORA-00018: 超出最大会话数
ORA-00019: 超出最大会话许可数
ORA-00020: 超出最大进程数 ()
ORA-00021: 会话附属于其它某些进程;无法转换会话
ORA-00022: 无效的会话 ID;访问被拒绝
ORA-00023: 会话引用进程私用内存;无法分离会话
ORA-00024: 单一进程模式下不允许从多个进程注册
ORA-00025: 无法分配
ORA-00026: 丢失或无效的会话 ID
ORA-00027: 无法删去当前会话
ORA-00028: 您的会话己被删去
ORA-00029: 会话不是用户会话
ORA-00030: 用户会话 ID 不存在。
ORA-00031: 标记要删去的会话
ORA-00032: 无效的会话移植口令
ORA-00033: 当前的会话具有空的移植口令
ORA-00034: 无法在当前 PL/SQL 会话中
ORA-000 ...
Influxdb介绍
Influxdb介绍influxdb influxdb官方文档
安装:systemctl status influxdsystemctl start influxd
influxDB名词:
database:数据库;
measurement:数据库中的表;
points:表里面的一行数据。influxDB中独有的一些概念
Point由时间戳(time)、数据(field)和标签(tags)组成。
time:每条数据记录的时间,也是数据库自动生成的主索引;
fields:各种记录的值;
tags:各种有索引的属性。
series:series是共同retention policy,measurement和tag set的集合。series表示这个表里面的所有的数据可以在图标上画成几条线(注:线条的个数由tags排列组合计算出来)概念
InfluxDB HTTP API 默认在8086端口运行InfluxDB查看InfluxDB版本1influx -version
注意事项
GROUP BY 参数只能是time和tag
fill(200):表示如果这个时间段没有数据,以200填充, ...