Design Pattern - 创建者
工厂模式理论工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型
它的主要意图是定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类执行。
简单来说就是为了提高代码结构的拓展性,屏蔽功能类的具体实现逻辑,外部只需要调用。这也是去掉众多ifelse的方式。缺点也很明显,需要实现的类非常多,如何去维护,怎样降低开发成本。
案例代码案例
itstack-demo-design-1-00
itstack-demo-design-1-01
itstack-demo-design-1-02
总结工厂模式是创建者模式,创建者模式是为了创建出屏蔽内部实现细节的类,这些类可以简化代码的维护,还能不断复用,进而优化代码。
工厂方法模式旨在让子类自己决定需要实例化哪一个工厂类。
抽象工厂模式理论抽象工厂模式和工厂方法模式都是为了解决接口选择问题。但在实现上,抽象工厂是一个中心工厂,创建其他工厂的模式。
工厂方法模式解决了一个系列的类的创建。而抽象工厂模式则解决了不同版本的一个系列的类的创建。
这个 ...
Hadoop数据体系-基本概念
Hadoop技术概述Hadoop是一种针对大数据处理的被行业广泛使用的关于数据处理挖掘的主流技术。
主要涉及到的技术点是大数据的分布式存储和计算框架
Hadoop的特点
高可靠性:数据存储使用集群部署在不同的机器上。当数据处理请求失败时,Hadoop将自动重新部署计算任务。
高扩展性:Hadoop可以非常容易的对集群中的节点进行拓展。
高效性:Hadoop可以在节点之间动态地移动数据,保证数据处理是多个节点并行执行,同时保证各个节点处理的动态平衡,最大化的提高数据处理的效率
高容错性:Hadoop提供了分布式文件系统HDFS。HDFS可以将文件冗余的保存在多个节点中,当某个节点出错或者宕机,可以读取其他节点的冗余数据,保证程序顺利运行。
低成本:Hadoop是开源的。
基于Java编写:Hadoop是一个基于Java语言开发的框架,因此运行在Linux系统上是非常理想的。Hadoop上的应用程序也可以使用其他语言编写,如C++和Python
Hadoop存储框架—HDFSHDFS是一种旨在普通硬件上有哪些的分布式文件系统。拥有非常优秀的容错能力,支持对应用程序数据的高吞吐量访问,并 ...
秋招小结
从今年的三月份开始准备秋招的,满打满算也有6个月了。从一开始的踌躇满志到如今的疲惫不堪,我这段时间称不上十分努力,但也比平日里要好的多了。
最后的成果。新一线,20+的工资,对于我这个考研半路找工作的同学来说,已经比较满意了。
毕竟吧,要知足长乐。(其实并不满足,因为我知道我可以找到更好的。哈哈)
6个月呀,说长不长,说短也不短,总结一下,还是很有趣的。
截止到我撰写本文的时间,是2024年10月21日,此时秋招基本已经结束,往后的流程多是补录或者是捡漏,不能考虑在内,目前需要准备的是考虑春招以及毕业。
春招和秋招的间隔其实并不远,也就差了2个月左右,大概明年2月中旬,就会陆陆续续开放,我目前打算去找一份实习,这份实习得是大厂的实习,如果找不到,就把时间用在巩固基础上。我的基础其实并不牢靠,六个月的时间往脑子里面硬塞了许多知识点,很多并没有理解透彻,同时,作为即将步入社会的程序员,需要进一步的提升,在各个方面。
其实,抛开社会给予学生的工作压力,单纯的作为一个计算机学生,我对于计算机的各个部分都有探索的欲望。理所当然,在接下来的时间里,我会系统的去学习操作系统、计算机网络、计算机组成原 ...
分布式设计-Redis集群-Mysql集群-Cloud
分布式系统的概念分布式系统是建立在网络之上的软件系统,拥有软件特性,所以分布式系统具有高度内聚性,和透明性。是建设于网络之上的高层软件,而不是硬件。
分布式系统特点分布式系统是多个服务器通过网络互联而构建的松耦合系统,其具备以下特点:
分布式:分布式由多台计算机组成,在地域上是独立分散的,可以分散在一个单位,一个城市,一个国家,或是全球范围内。整个系统的统一功能是分散在多个节点上实现的,因而分布式系统具有数据处理的分布式特性。
自治性:分布式系统各个节点包含自己独有的cpu和内存,具备独立的处理数据能力。一般来说每个节点是对等的,没有主次之分,可以自治的进行任务处理,还可以通过网络传输信息,协同完成任务处理。
并行性:一个大的任务可以按规则划分到多个计算节点上进行独立的子任务支持,体现了并行性。
全局性:分布式系统必须存在一个单一的,全局的通信机制,使得任何一个进程都能和其他进程通信,并且不区分本地通信和远程通信。在一个分布式集群中,往往所有机器具有统一的系统调用能力。
在不同的抽象层次上来说,分布式系统中每一个物理机,虚拟机,docker镜像,独立进程都可以认为是一个节点。
特有 ...
SPI机制
什么是SPI机制SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL和PostgreSQL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是 解耦。
当服务的提供者提供了一种接口的实现之后,需要在classpath下的META-INF/services/目录里创建一个以服务接口命名的文件,这个文件里的内容就是这个接口的具体的实现类。当其他的程序需要这个服务的时候,就可以通过查找这个jar包(一般都是以jar包做依赖)的META-INF/services/中的配置文件,配置文件中有接口的具体实现类名,可以根据这个类名进行加载实例化,就可以使用该服务了。JDK中查找服务的实现的工具类是:java.util.ServiceLoader。
MYSQL 深度分页问题的解决思路
深度分页问题描述分页语法LIMIT row_count; 返回前 row_count 条数据LIMIT offset, row_count; 返回 从 offset 行开始,接下来的 row_count 行数据LIMIT row_count OFFSET offset; 返回 从 offset 行开始,接下来的 row_count 行数据
为什么深度分页会变慢?设置一个 表结构
CREATE TABLE account ( id int(11) NOT NULL AUTO_INCREMENT COMMENT '主键Id', name varchar(255) DEFAULT NULL COMMENT '账户名', balance int(11) DEFAULT NULL COMMENT '余额', create_time datetime NOT NULL COMMENT '创建时间', update_time datetime NOT NULL ON UPDATE CURRENT_TIMEST ...
MySQL-实战-窗口函数
窗口函数MySQL8 窗口函数是一种特殊的函数,它可以在一组查询行上执行类似于聚合的操作,但是不会将查询行折叠为单个输出行,而是为每个查询行生成一个结果。窗口函数可以用来处理复杂的报表统计分析场景,例如计算移动平均值、累计和、排名等。它展现的主要威力在于「它能够让我们在不修改原有语句输出结果的基础上,直接添加新的聚合字段」。
语法解析window_function_name ( [argument1, argument2, ...] ) OVER ( [ PARTITION BY col1, col2, ... ] [ORDER BY col3, col4, ...] [ ROWS | RANGE frame_start AND frame_end ])
window_function_namewindow_function_name 函数可以是聚合函数或者非聚合函数。MySQL8 支持以下几类窗口函数,
序号函数:用于为窗口内的每一行生成一个序号,例如 ROW_NUMBER(),RANK(),DENSE_RANK() 等。
分布函数:用于计算窗口内的每一行在整个分区中的相 ...
Linux 命令记录
本文是为了巩固自己的基本能力,记录自己使用Linux的常用命令,日积月累,避免每次遇到问题都需要反复去查阅。
之前面试的时候,面试官给我了一些建议,希望我多学习一些Linux的相关操作,我记得重点的内容是 着重于Linux在对于项目开发运维方面需要用到的一些技能,比如有
如何检测系统资源占用。
如何快速的从日志中找到自己需要查看的内容。
如何通过分析工具,比如分析栈帧或者Dump日志来快速的定位到线上问题。
…
本文的目的包括但不仅限于以上,作为一个程序员,学习使用Linux是我的必经之路。
tar.gz 文件的解压tar.gz 文件是 Linux 中常见的压缩文件类型,它是通过 tar 进行打包后,再使用 gzip 进行压缩生成的。要解压这个文件,通常会使用 tar 命令,并结合相应的参数来操作。
参数说明
参数
含义
备注
-x
解压缩(extract)
解压缩打包文件(必须参数)
-z
通过 gzip 进行解压缩
用于处理 .gz 格式的压缩文件
-v
显示详细的解压缩过程
可以看到解压缩的文件名,方便查看过程(可选)
-f
指定文件名
后面需要跟上 ...
分库分表-入门
分库分表分库分表是企业里面针对常见的针对高并发、数据量大的场景下的一种技术优化方案
分库,分表,分库分表所谓”分库分表”,根本就不是一件事儿,而是三件事儿,他们要解决的问题也都不一样。
这三个事儿分别是”只分库不分表”、”只分表不分库”、以及”既分库又分表”。
什么时候分库?分库主要解决的是并发量大的问题。因为并发量一旦上来了,数据库就会成为瓶颈。因为数据库的连接数是有限的,虽然可以调整,但是也不是无限调整的。
当数据库的读或者写的QPS过高,导致数据库连接数不足了的时候,就需要考虑分库了,通过增加数据库实例的方式来提供更多的可用数据库链接,从而提升系统的并发度。
比较典型的分库的场景就是我们在做微服务拆分的时候,就会按照业务边界,把各个业务的数据从一个单一的数据库中拆分开,分表把订单、物流、商品、会员等单独放到单独的数据库中。
有的时候可能会需要把历史订单挪到历史库里面去。这也是分库的一种具体做法
什么时候分表?分库主要解决的是并发量大的问题,那分表其实主要解决的是数据量大的问题。
假如你的单表数据量非常大,因为并发不高,数据量连接可能还够,但是存储和查询的性能遇到了瓶颈了,你做 ...
Nginx
Nginx是什么Nginx是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好。
Nginx 专为性能优化而开发,性能是其最重要的要求,十分注重效率,有报告 Nginx 能支持高达 50000 个并发连接数
Nginx的功能
正向代理
正向代理:局域网中的电脑用户想要直接访问网络是不可行的,只能通过代理服务器来访问,这种代理服务就被称为正向代理。
反向代理
反向代理:客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端。
客户端通过Nginx来透明的调用后台服务器,Nginx来选择具体的Worker
负载均衡
当Nginx反向代理了多个同类型实例的时候,选择一个可以最大化并发量或者效率的服务器调用方式,来将请求路由到对应的Worker上,就是负载均衡
动静分离
根据用户请求的区别,将动态页面和静态页面的处理交给不同的服务器,加快解析的速度,降低单个服务器路由的压力。
高可用
Nginx 的配置文件user ...