从零开始学架构第零讲
一、架构设计相关的特性1. 架构设计的思维和程序设计的思维差异很大。架构设计的关键思维是判断和取舍,程序设计的关键思维是逻辑和实现。很多程序员在转换为架构师后,很难一开始就意识到这个差异,还是按照写代码的方式去思考架构,会导致很多困惑。
2. 架构设计没有体系化的培训和训练机制。大学的课程几乎没有架构设计相关的课程,架构设计的书籍更多的也只是关注某个架构设计点,没有体系化的架构设计书籍,导致程序员在学习上没有明确指导,只能自己慢慢摸索,效率低,容易踩坑。
3、程序员对架构设计的理解存在很多误区。例如:要成为架构师必须要有很强的技术天分;架构师必须有很强的创造力;架构设计必须要高大上才能体现架构师能力;架构一定要具备高可用、高性能……这些似是而非的误区让很多技术人员望而生畏,还没尝试就已经放弃了。
得益于移动互联网技术的快速发展,我在加入 UC 后有很多的机会直接参与架构设计,这些架构背后的业务形形色色,包括社交、电商、游戏、中间件、内部运营系统;用到的技术栈差异也比较大,包括 PHP,Java、C++ 等。虽然每次架构设计对我来说都是一个新的挑战,但正好也提供了非常好的机会,让我亲身体 ...
Mybatis-Plus
1、了解Mybatis-Plus1.1、Mybatis-Plus介绍MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官网:https://mybatis.plus/ 或 https://mp.baomidou.com/
愿景
我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
1.2、代码以及文档文档地址:https://mybatis.plus/guide/
源码地址:https://github.com/baomidou/mybatis-plus
1.3、特性
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写 ...
Linux-课堂笔记(二)
Linux-课堂笔记学习目标
能够熟练编写文件相关命令
能够熟练编写文件解压缩命令
能够熟练编写网络查看简单命令
能够熟练编写查看磁盘命令、挂载命令
能够知道如何使用命令进行分区、格式化
能够熟练使用yum进行查找、安装、卸载软件
能够熟练使用rpm进行查找、安装、卸载软件
能够熟练编写常用的shell脚本
1 Linux文件管理1.1 touch命令在Windows系统中,我们如果想创建一个文本文档或者word文件的时候,通常的做法是
鼠标右键---新建---文本文档,这样的话,我们就成功的创建了一个文件,而在Linux中,我们可以通过字符命令的形式进行创建
touch命令用于创建文件、修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
ls -l 可以显示档案的时间记录
使用者权限:所有权限用户
语法
touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]
参数说明:
a 改变档案的读取时间记录。
m 改变档 ...
Linux-课堂笔记(一)
Linux-课堂笔记(-)学习目标
能够知道什么是Linux系统以及它的应用场景
能够独立完成安装VMware虚拟机和网络配置
能够独立完成安装CentOS以及远程终端SecureCRT
能够熟练编写账户管理、用户组的增删改查和添加命令
能够熟练编写系统管理的常用命令
能够熟练编写目录常用命令
能够熟练编写权限常用命令
能够知道用户组实际应用场景
1 初识Linux在前面的课程中,我们无论是开发、测试。部署、存储都在Windwos操作系统的环境中,从今天开始我们一起学习下Linux,Linux系统和Windows系统最大的区别就是图形化界面操作和用途上有所差异,除了这两点,两者有异曲同工之妙,在国内, Linux 系统更多的是应用于服务器上,而桌面操作系统更多使用的是 Windows,也就是说Linux与Windows一样,同样也是操作系统只是在使用以及应用上有所差异,其他都是一样的;
因为Linux也是操作系统
所以在正式进入Linux学习之前,我们先简单的学习操作系统的知识,然后在讲解Linux
1.1 操作系统操作系统(Operation System, OS),是管理计算机 ...
项目管理之自动化构建部署(CICD)
项目管理之自动化构建部署(CICD)学习目标:
理解敏捷项目管理
掌握ones使用
掌握GitLab使用
了解Jenkins自动化项目构建与部署
1. 研发管理概述【目标】 学会使用研发管理协作工具ONES
【路径】1:了解研发管理概念
2:了解敏捷开发
3:了解DevOps
4:了解研发管理协作工具ONES
5:学会操作ONES
【讲解】1.1. 研发管理概念 研发管理就是在研发体系结构设计的基础之上,借助信息平台对研发进行的团队建设、流程设计、绩效管理、风险管理、成本管理、项目管理和知识管理等活动。管理活动的目的是实现组织目标。研发团队通过科学的研发管理方法可以保证软件开发及交付的稳定性,更高效的实现团队目标。
1.2. 研发管理能帮助企业做到什么
准确把控项目的全局和细节
使软件发布变成一件轻松、简单的事情
不断改进优化软件发布流程
提高软件发布质量
更快交付产品,快速将研发团队的工作转变为商业价值
1.3. 敏捷开发概述 现阶段,市场需求的不断变化与技术的快速革新使项目不确定性大大增加,研发团队需要快速响应变化才能适应行业发展。许多研发团队发现,在更频繁 ...
分布式锁
分布式锁1 分布式锁介绍1.1 为什么用分布式锁 在单机系统中,当多线程访问数据时,为了保证数据的正确性,我们一般都会采用加锁的方式,比较常见的synchronized或者ReentrantLock。他们都是由Java为我们提供的锁实现,能够让多个线程之间只能串行化执行,从而保证数据的正确性。
但是一旦将服务器从单机部署升级为多机部署后,则会发现Java提供的原生锁机制在多机部署下失效了。这是因为Java本身提供的锁,他们只对属于自己JVM里面的线程有效,对于其他JVM的线程是无效的。
1.2 场景示例 现在有一个电商系统,此时只通过一台机器进行部署,当用户下单时,首先会检查库存是否足够,只有当库存足够时,才会允许进行下单。
为了提高系统的并发性能,因此会首先将商品库存信息预热到redis中,当用户下单时,会更新redis中的库存信息。
此时在单线程下执行是没有任何问题的,但是假设现在某一商品库存数量为1,且同时有两个线程同时对该商品执行下单操作,线程A和线程B查询库存结果都为1,此时线程A先执行第三步更新mysql将库存数量由1变为0。 ...
Apache Dubbo
Apache Dubbo学习目标
了解应用架构演进过程
了解RPC远程调用方式
掌握Dubbo框架的架构【重点】
掌握Zookeeper注册中心的基本使用
掌握Dubbo生产者和消费者的开发【重点】
了解Dubbo的管理控制台的使用
了解Dubbo的相关配置
了解Dubbo的负载均衡(4种)
了解Dubbo的配置中心(难点 代码 Watch)
1. 应用架构的演进过程【目标】了解软件架构的演进过程
【路径】1:主流的互联网技术特点
2:架构演变的过程
(1):单体架构
(2):垂直架构
(3):分布式服务架构
(4):SOA架构
(5):微服务架构
【讲解】1.1. 主流的互联网技术特点分布式 、高并发、集群、负载均衡、高可用。
分布式:一件事情拆开来做。
集群:一件事情大家一起做。
负载均衡:将请求平均分配到不同的服务器中,达到均衡的目的。
高并发:同一时刻,处理同一件事情的处理能力(解决方案:分布式、集群、负载均衡)
高可用:系统都是可用的。
1.2. 架构演变的过程1.2.1. 单一应用架构(all in one)当网站流量很小时,只需一个应用,将所有功能都部署在一起 ...
Docker
Docker1.docker是什么
2.docker相关组件说明
3.docker的安装和启动
4.docker相关的容器的创建
5.docker的常用的命令
6.docker部署项目(系统)
1 docker的介绍 Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。这样就可以不用单独使用其他的运输工具。大家都用一个标准,搬运集装箱了。
1.不同的应用程序可能会有不同的应用环境,有些软件安装之后会有端口之间的冲突,这时候,可以使用虚拟机来实现隔离,但是使用虚拟机的成本太高,而且消耗硬件。
2.不同的软件的环境都不一样,比如:你用的是乌班图,里面有个数据库,现在要迁移到centos中,但是此时需要从新在centos安装数据库,如果版本不一致,或者不支持,就会出现问题。比较麻烦。有了docker之后就不用这么麻烦了,直接将开发环境 搬运到不同的环境即可。
3.在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。 ...
ElasticSearch-day01
day01课程目标
能够理解ElasticSearch的作用(第一章)
能够安装ElasticSearch服务(第二章)
能够理解ElasticSearch的相关概念(第三章)
能够使用java客户端操作ElasticSearch(第四章)
能够理解分词器的作用(第五章)
能够使用ElasticSearch集成IK分词器(第五章)
能够使用restful技术操作操作ElasticSearch(附加)
1 ElasticSearch简介1.1 什么是ElasticSearch? ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的 ...
ElasticSearch-day02
day02_ES学习目标
能够完成创建索引的操作
能够完成删除索引的操作
能够完成创建映射的操作
能够完成文档的增删改查
能够完成文档的分页操作
能够完成文档的高亮查询操作
能够搭建Spring Data ElasticSearch的环境
能够完成Spring Data ElasticSearch的基本增删改查操作
能够掌握基本条件查询的方法命名规则
第一章ElasticSearch常用编程操作1.索引相关操作为了方便,我们就在上一天的课程中的项目中来使用即可,创建一个测试类用作今天的测试
@SpringBootTest
@RunWith(SpringRunner.class)
public class EsApplicationTest03 {
@Autowired
private TransportClient transportClient;
@Autowired
private ObjectMapper objectMapper;
@Autowired
private ElasticsearchTemplate elas ...
Cookie&SessionJsp
Cookie&SessionJsp1 会话技术1.1 会话管理概述1.1.1 什么是会话这里的会话,指的是web开发中的一次通话过程,当打开浏览器,访问网站地址后,会话开始,当关闭浏览器(或者到了过期时间),会话结束。
举个例子:
例如,你在给家人打电话,这时突然有送快递的配送员敲门,你放下电话去开门,收完快递回来后,通话还在保持中,继续说话就行了。
1.1.2 会话管理作用什么时候会用到会话管理呢?最常见的就是购物车,当我们登录成功后,把商品加入到购物车之中,此时我们无论再浏览什么商品,当点击购物车时,那些加入的商品都仍在购物车中。
在我们的实际开发中,还有很多地方都离不开会话管理技术。比如,我们在论坛发帖,没有登录的游客身份是不允许发帖的。所以当我们登录成功后,无论我们进入哪个版块发帖,只要权限允许的情况下,服务器都会认识我们,从而让我们发帖,因为登录成功的信息一直保留在服务器端的会话中。
通过上面的两个例子,我们可以看出,它是为我们共享数据用的,并且是在不同请求间实现数据共享。也就是说,如果我们需要在多次请求间实现数据共享,就可以考虑使用会话管理技术了。
1.1 ...
EL表达式和JSTL
1 EL表达式和JSTL1.1 EL表达式1.1.1 EL表达式概述基本概念
EL表达式,全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。
基本语法
EL表达式的语法格式非常简单,写为 ${表达式内容}
例如:在浏览器中输出请求域中名称为message的内容。
假定,我们在请求域中存入了一个名称为message的数据(request.setAttribute("message","EL");),此时在jsp中获取的方式,如下表显示:
Java代码块
JSP表达式
EL表达式
<%<br/> <br/> String message = (String)request.getAttribute("message");<br/> out.write(message);<br/>%>
<%=request.getAttribute("message ...