/images/avatar.png

七大设计原则

单一职责原则(Single Responsibility Principle,简称SRP )

  • 核心思想:应该有且仅有一个原因引起类的变更
  • 问题描述:假如有类Class1完成职责T1,T2,当职责T1或T2有变更需要修改时,有可能影响到该类的另外一个职责正常工作。
  • 好处:类的复杂度降低、可读性提高、可维护性提高、扩展性提高、降低了变更引起的风险
  • 需注意:单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计得是否优良,但是“职责”和“变化原因”都是不可以度量的,因项目和环境而异。

抽象工厂模式

因为抽象工厂模式在spring中用的比较多,例如spring的心脏BeanFactory就是利用抽象工厂模式来管理bean的。最主要的就是把具体功能抽象出来

上代码

先建立产品的接口方法类

1
2
3
4
5
6
/**
 * 定义一个牛奶的接口
 */
public interface Milk {
    String getName();
}

产品实现功能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
/**
 * 伊利产品
 */
public class Erie implements Milk {
    @Override
    public String getName() {
        return "伊利";
    }
}
/**
 * 蒙牛产品
 */
public class Mengniu implements Milk {
    @Override
    public String getName() {
        return "蒙牛";
    }
}

学习docker常用命令

docker的配置安装

基本命令

1
2
3
4
5
6
7
docker info  docker基本信息
docker --help  帮助信息 比如docker search --help 这样就可以查看search语法
docker version  docker版本号
docker images  显示镜像
docker search 镜像名  搜索docker镜像
docker pull 镜像名  拉取镜像到本地
docker rmi 镜像id 删除镜像

初入学习git

git与svn的区别

  1. 首先核心的点就是git是分布式的,而svn不是分布式的
  2. git中每一个开发人员的电脑上都有一个Local Repository,所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作,等网络再次连接上Push到Server端;这也就是为什么git适合分布式的原因。
  3. svn相当于知识在本地拷贝了一份服务器上的代码,本地需要看日志记录是需要联网。
  4. svn比较简单只是需要一个放代码的地方拿下来用就ok。这种属于集中式的代码管理。

MySQL性能调优(6)解读58同城数据库设计军规30条

军规适用场景:并发量大、数据量大的互联网业务 只是解读:没必要完全效仿

基础规范

  1. 必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高
  2. 必须使用UTF8字符集不过现在基本上用 UTF8MB4 **解读:万国码,无需转码,无乱码风险,节省空间 UTF8MB4支持图像兼容4字节 **
  3. 数据表、数据字段必须加入中文注释 解读:N年后谁tm知道这个r1,r2,r3字段是干嘛的
  4. 禁止使用存储过程、视图、触发器、Event 解读:高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,CPU计算还是上移吧 划重点:面试遇到要做存储过程的公司还是走了吧
  5. 禁止存储大文件或者大照片 解读:为何要让数据库做它不擅长的事情?大文件和照片存储在文件系统或者存云服务也行,数据库里存URI多好

MySQL性能调优(5)Innodb引擎的MVCC

MVCC

Multiversion concurrency control (多版本并发控制) 并发访问(读或写)数据库时,对正在事务内处理的数据做多版本的管理。以达到用来避免写操作的堵塞,从而引发读操作的并发问题。 这里看一个案例

1
2
3
4
5
begin
// 这里默认是加上X锁的,在未做commit/rollback操作之前
update users set lastUpdate=now() where id =1; 
// 在其他的事务我们能不能进行对应数据的查询 但是我这时查询是能查到的当前时间这条记录
select * from users where id = 1;

先来看看MVCC的处理机制