自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 工作分解结构(WBS)

把一个项目,按一定的原则分解,项目分解成任务,任务再分解成一项项工作,再把一项项工作分配到每个人的日常活动中,直到分解不下去为止。(2)纵向到底:足够低层精细到可由确定的人与时间进行完成,这里的时间应精确到小时,即多少个小时能完成一个基本任务。核心是将工作分解为更小、更便于管理的工作单元(工作包),可以对其进行时间、成本的估计、执行、监控。(3)范围:项目可提供的产品、服务、成果的总和。(1)可验证:有一个明确、可重复的结果。(4)可估算的工期与可接受的可变范围。(2)可交付:满足功能、服务、需求。

2023-10-26 17:04:18 68

原创 软件研发人力成本预测规范

软件研发过程中的困难往往来源与两个部分:第一是交付指标的不明确、第二是技术复杂度过高,这两个困难造成的实际结果也是软件研发时间的拉长带来的成本提升,因此在一开始应充分避免这两种情况或积极寻求替代方案,在遇到问题的情况下应考虑该问题带来的可能时间成本以计算效费比,这样的时间一般应该保持在20%以内为益,超过这个时间则应考虑暂时性的中止。人力估算的核心的工作分解(WBS),这部分的内容可参见文档《工作分解结构》,通过该方法将人力成本分解为可估算、可预测的基本工作单位以实现在整个项目成本的估算。

2023-10-26 17:03:36 108

原创 Kafka 一些基本原理

Kafka

2023-02-18 17:38:14 212 1

原创 接口设计 - 性能

概述保证接口快速响应方案程序设计无状态设计服务的无状态化就是冗余部署的多个服务模块(进程),使其完全对等,即部署多个相同服务,请求到任一服务的处理结果完全一样目的 弹性扩容 快速扩容 案例:登录接口设计 用户登陆后,服务器生成验证信息token 服务器不保存token,将token返回给客户端 用户发生下一次的请求,客户端把该token重新发送给服务端 服务端依据token对用户进行权限校验 内存算法设计 LR

2021-06-30 23:24:19 223

原创 设计一个基础流程系统

业务要求 流程环节可以自定义 流程可自定义指派 具有审批权限的人员才能够看到数据进行相关审批 业务分析 流程需要指定某一个人,或某一个角色进行审批,要么使用某一个人,要么定义个某一个角色,二者不可叠加 已经进入审批环节的数据,即便已经修改流程节点,仍然使用修改之前的流程 业务定义 流程 通过:同意到下一级 驳回到上一级:驳回到当前审批环节的上一级 驳回到发起人:当前审批人驳回到发起人 否

2021-06-27 02:33:44 242

原创 Redis 缓存穿透/缓存击穿/缓存雪崩

缓存穿透概念缓存穿透是指用户大量请求缓存、数据库没有的数据,导致没有办法更新缓存,每一次的请求都会到数据库上,导致数据库压力过大解决方案 接口校验 缓存空值 布隆过滤器 缓存击穿概念缓存击穿是指缓存中没有但数据库中有的数据,在缓存当中常常没读到数据而去数据库取数据引起数据库压力过大,这种情况通常是因为缓存内容过期导致解决方案 加互斥锁 热点数据设置不过期 缓存雪崩概念缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力

2021-06-20 23:58:50 69

原创 接口设计-安全

概述本文介绍几种对外接口的安全性设计要求 传输过程中不泄漏 传输结果可被识别 方案数据加密概念:针对数据传输过程中容易被抓包的问题,对关键信息进行加密操作方案 关键信息加密,例如对密码进行MD5加密 通过对消息的结构化,对返回内容进行加密 { code:200, message:"success" data:{ //返回时对data内容进行加密 } } 将HTTP 改为 HTTP...

2021-06-20 15:14:26 413

原创 CentOS7 安装 Docker

更新系统yum update -y安装插件yum install -y yum-utils 添加docker安装地址yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo安装docker-ce,默认安装最新版本yum install docker-ce docker-ce-cli containerd.io如果希望安装其他版本-查找dockeryu

2021-06-19 23:35:07 53

原创 Docker 安装 RabbitMQ

拉取镜像需要指定版本:拉取的镜像包含 web 控制台docker pull rabbitmq:management创建本地文件夹mkdir /etc/rabbitmq启动容器docker run -d --name rabbit -v /etc/rabbitmq:/var/lib/rabbitmq --hostname rabbit -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 -p 15672:15

2021-06-19 21:42:10 71

原创 RabbitMQ 简单实例

MQ应用场景 异步处理 日志处理 =》kafka 流量削峰 应用解耦 基本使用 发送消息 @Autowired private AmqpTemplate amqpTemplate;​ public void send() { amqpTemplate.convertAndSend("exchange","key", "now:" + DateUtil.currentDate()); } 接收消息...

2021-06-19 20:50:14 68

原创 Docker 安装 Redis

获取redis镜像docker pull redis创建挂载的目录mkdir -p /etc/redis/confcd /etc/redis/conf/创建配置文件touch redis.conf修改redis.conf以下配置适用于redis 6.0下载地址:https://redis.io/topics/config/# Redis configuration file example.## Note that in order to read the

2021-06-19 19:07:40 39

原创 Docker 安装 Mysql

Docker 安装 Mysql下载镜像docker pull mysql执行命令docker run --name mysql -e MYSQL_ROOT_PASSWORD=12345678 -p 3306:3306 -d mysql参数信息 –name:给新创建的容器命名,此处命名为mysql -e:配置信息,此处配置mysql的root用户的登陆密码 -p:端口映射,表示在这个容器中使用3306端口(第二个)映射到本机的端口号也为3306(第一个)

2021-06-19 18:22:42 45

原创 libcurl

例子 API 目标本文档试图描述使用libcurl编程时要考虑的一般原则和一些基本方法。该文本将主要关注C接口,也能够在其他类型的接口上得到应用,它们通常非常接近于C接口。本文档将“用户(the user)”称为编写使用libcurl的源代码的人。通常将“程序(the program)”是用户编写的使用libcurl进行传输的收集源代码,该程序在libcurl之外。要获得有关此处所述的选项和功能的更多详细信息,请参阅其详细手册页。构建构建C程序有许多不同的方法。 本章将..

2020-09-15 22:14:35 1251

原创 ZEROMQ 第 4 章 - 可靠地请求响应模型

第三章中我们使用实例介绍了高级请求-应答模式,本章我们会讲述请求-应答模式的可靠性问题,并使用ZMQ提供的套接字类型组建起可靠的请求-应答消息系统。本章将介绍的内容有: 客户端请求-应答 最近最少使用队列 心跳机制 面向服务的队列 基于磁盘(脱机)队列 主从备份服务 无中间件的请求-应答 什么是可靠性? 要给可靠性下定义,我们可以先界定它的相反面——故障。如果我们可以处理某些类型的故障,那么我们的模型对于这些故障就是可靠的...

2020-09-15 22:11:55 594

原创 Spring --- AOP(2) --- 动态代理

设计模式 动态代理 为其他对象提供一种代理以控制对象的访问权限 使用代理模式创建代理对象,控制目标对象的访问,在不改变目标对象的情况下调价额外的功能 UML类图 优点 代理模式能将代理对象与目标对象分离,一定程度上降低了耦合度 代理模式在客户端和目标对象之间起到了中介作用 代理对象也可以对目标对象添加额外功能 缺点 一定程度上增加了系统的复杂度,降低了性能 ...

2020-09-15 22:03:43 79

原创 Spring --- AOP(1)

AOP技术实现 动态代理 预编译 横切关注点 软件开发中,分布于应用中多处的功能被称为横切关注点 主要功能 日志记录 性能统计 安全控制 事务处理 异常处理 其他功能 将无法纵向继承体系的(OOP方式)进行抽象的重复性代码提供了解决方案 AOP术语 连接点(JoinPoint) 程序执行的某个特定位..

2020-09-15 22:03:09 58

原创 Spring-IOC(4)

方式: 自动装配 用于减少甚至消除<property>元素和<constructor-arg>元素 自动检测 用于检测需要需要自动识别哪些类需要装配为Bean 自动装配 设置<bean>的autowire属性 byName id需要与属性名一致 依据属性名来匹配 精确匹配 ...

2020-09-15 22:02:43 66

原创 Spring-IOC(2)

Spring获取ApplicationContext应用上下文实例的方式 ClassPathXmlApplication(从类路径下的XML配置文件中加载),把应用上下文定义文件当做类资源 ApplicationContext ctx = new ClassPathXmlApplication("com/lzx/context/beans.xml") FileSystemXmlApplicationContext ---读取文件系统下的XML配置文件并加载上下文定义...

2020-09-15 22:00:26 71

原创 Spring-IOC(1)

控制反转 通过容器来控制业务对象之间的依赖关系 控制反转是应用本身不负责依赖对象的创建的及维护,依赖对象的创建及维护是由外部容器负责的。 这样的控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转 控制权转移带来的好处就是降低了业务对象之间的依赖程度 依赖注入 方式 构造器注入 方法注入 接口注入 Spring的IoC容...

2020-09-14 21:30:47 58

原创 Spring(1)--- 概念

新的技术 AOP(面向切面编程) DI(依赖注入) 概念 Spring是分层的JavaEE应用一站式的轻量级开源框架,以控制反转(InverseofControl , IoC)和面向切面编程(Aspect Oriented Programming,AOP)为内核,提供了表现层SpringMVC 、持久层SpringJDBC以及业务层事务管理等众多的企业级应用技术 特点 方便解耦,简化开发(核心) 通过Sp...

2020-09-14 21:29:49 44

原创 Java 多态

定义 相同的行为,不同的实现 一个对象有多种的形式的能力 分类 静态多态 编译时系统决定调用 使用重载实现 动态多态 运行时实现 使用动态绑定和重写实现 动态多态技术 向上转型技术 定义: 一个父类的引用变量可以指向不同的子类对象 一个子对象可以被当做一..

2020-09-14 21:26:08 96

原创 Java 静态方法

静态   方便在没有创建对象的情况下来进行调用(方法/变量)。 static修饰的全局变量被称为静态变量,类变量 package sta;public class Sta {public static int a; //类变量//无论创建多少个对象,类中的类变量也只有一个public Sta(){}public Sta(int num){ // this.a= nu...

2020-09-14 21:24:55 198

原创 Java---集合框架(6)---Collection

Collection (接口)集合框架父接口--->Set和List 静态方法 package function;import java.util.List;import java.util.ArrayList;import java.util.Collections;public class TestFunction {@SuppressWarnings({ "unchecked", "rawtypes" })public void ...

2020-09-14 21:23:56 80

原创 Java---集合框架(5)---Map

键值对形式 增删查改 public class TestMap {public TestMap() Map<String, String> map = new HashMap<String, String>();map.size();//在添加时,key重复,相当于值的修改map.put("key1", "value1");...

2020-09-14 21:23:13 62

原创 Java---集合框架(4)--- Set

HashSet到底是如何判断两个元素重复。 通过hashCode方法和equals方法来保证元素的唯一性,add()返回的是boolean类型 判断两个元素是否相同,先要判断元素的hashCode值是否一致,只有在该值一致的情况下,才会判断equals方法,如果存储在HashSet中的两个对象hashCode方法的值相同equals方法返回的结果是true,那么HashSet认为这两个元素是相同元素,只存储一个(重复元素无法存入)。 注意:HashSet集合在判断元素是否相..

2020-09-14 21:22:19 72

原创 Java---集合框架(3)--- 泛型/Iterator

泛型优点 泛型允许我们为集合提供一个可以容纳的对象类型,因此,如果你添加其它类型的任何元素,它会在编译时报错。这避免了在运行时出现ClassCastException,因为你将会在编译时得到报错信息。 泛型也使得代码整洁,我们不需要使用显式转换和instanceOf操作符。它也给运行时带来好处,因为不会产生类型检查的字节码指令。 Iterator 一个Collection中使用迭代器方法来获取迭代器实例 Iterator<String&..

2020-09-14 21:20:32 104

原创 2020-09-14

Comparable < --- > Comparator 比较器,用于排序 Collection/Array --->静态方法、工具类 集合 List :可重复、次序排列 Set :不可重复,内部排序机制 Map:数据对,内部排序机制 ...

2020-09-14 21:20:00 71

原创 Java高并发-CAS

概念 比较并交换 表面理解:线程的期望值与主内存的值一致则修改主内存的值,如果不一致则修改线程值 深入理解:CPU并发原语,判断内存中的某个位置的值是否为预期值,如果是则修改 原理 自旋锁 unSafe类 CAS核心类 Native Method就是一个java调用非java代码的接口,其方法实现为非Java语言,解决了一些例如直接的底层控制问题 Unsafe 类存在于sun.misc包中,其通过调用native 方法进行一些底层控制,例如内存操.

2020-09-13 15:30:33 126

原创 Java中util.Date和sql.Date的相互转换

Java中Date的两个类java.util.Date通常情况下用它获取当前时间或构造时间java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分 它们都有getTime方法返回毫秒数,都可以直接构造代码示例:// util.date转换成sql.datejava.util.Date utilDate = new java.util.Date(); //获取当前时间System.out.println(utilDate);java.s...

2020-09-11 20:59:11 196

原创 Java---常用类(4)---StringBuffer/StringBuilder

用于对字符串类型的修改 性能:StringBuilder>StringBuffer>String append() toString()   最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,也便于加深自己学习过程中对这些知识点的记忆,如果哪里有误,恳请指正。  这三个类之间的区别主...

2020-09-11 20:58:35 73

原创 Java---数据库---JDBC(3)

//应该在sql语句加limit,根据分页的条件来获取对应数据,再填充进去1. 对于一些数据库而言,有自己的分页方法。比如MySql使用limit子句实现分页,而Oracle使用rownum来限制结果集的大小和位置。2. 分页的两个侧路:一种是将全部的内容查询出来再分页(查完再分);一种是根据页要显示的内容去查询(用多少查多少)。其实两种分页方法从字面上很容易理解的,但是具体使用的时候就是查完再分大多用在查询比较复杂的实例上。而用多少查多少是用在结果集很大,而且分页麻烦的实例上。(我在这..

2020-09-11 20:57:39 46

原创 Java---数据库---JDBC(2)

开发流程 加载驱动 创建连接对象 创建声明语句对象 执行sql语句 executeUpdate(sql) 完成增删查改 executeQuery (sql) 获得结果集 关闭对象 Class.forName("com.mysql.jdbc.Driver");con = (Connection) DriverManager.g...

2020-09-11 20:52:38 42

原创 Java---数据库---JDBC(1)

JDBC(Java Data Base Connectivity,Java数据库连接),一组API DB Driver 四种驱动程序 JDBC - ODBC Bridge 效率低 Native-API party-Java driver 本地驱动 net-protocal all-Java driver(JDBC Proxy) 网络协议 native-protoc...

2020-09-11 20:51:57 79

原创 dtd规范

可扩展标记语言(Extensible Markup Language) 默認字符集:UTF-8 DTD(Document Type Definition,文档类型定义)是一套标记的语法规则,它定义了元素、子元素、属性及其取值,规定了用户在DTD关联的XML文档中可以使用什么标记、各个标记出现的顺序以及标记的层次关系,并定义了实体。 值含义#REQUIRED用来告诉XML解析程序,该元素的所有实例都必须有该属性的值,就像数据表中某一个字段为NOT NUL..

2020-09-11 20:50:42 637

原创 dom4j

一、基本使用方式 语法 1、获取根元素Element root = document.getRootElement(); 2、获取某个元素下的子元素Element db_element = root.element("db"); 3、获取元素的子元素集合1List<Element> db_list = db_element.elements();//所有子元素 4、获取元素属性的值element.attributeVa...

2020-09-11 20:33:45 158

原创 软件设计的七大原则

原则一:(SRP:Singleresponsibilityprinciple)单一职责原则又称单一功能原则核心:解耦和增强内聚性(高内聚,低耦合)描述:类被修改的几率很大,因此应该专注于单一的功能。如果你把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题。原则二:开闭原则(OCP:OpenClosedPrinciple)核心思想:对扩展开放,对修改关闭。即在设计...

2020-09-11 20:30:46 760

原创 ArrayList动态扩容机制

初始化:有三种方式默认的构造器,将会以默认的大小来初始化内部的数组: public ArrayList(); 用一个ICollection对象来构造,并将该集合的元素添加到ArrayList: public ArrayList(Collection<? extends E> c) 用指定的大小来初始化内部的数组: public ArrayList(int initialCapacity) 这里我们来重点关注一下无参数构造器的实现过程: 而在之前JDK1,6...

2020-09-11 20:29:43 103

原创 消息中间件

中间件 一种独立的系统软件或服务程序 分布式应用软件借助这种软件在不同的技术之间共享资源 解决应用耦合、异常处理、流量削峰 实现高性能、高可用、可伸缩和最终一致性架构 应用场景 异步处理 用户注册之后,服务器需要发注册邮件和短信 应用解耦 流量削峰 JMS消息服务 JMS(Java Message Service,Java消息服务)API是...

2020-09-11 20:27:27 104

原创 Java高并发-Volatile

概念 轻量级的同步机制 特征 保证可见性 在某个线程改变变量时及时通知其他线程该变量已被修改 不保证原子性 非线程安全 解决方法 在并发包中提供了多种解决方法,如在进行number++时,可使用AtomicInteger实现增减操作原理:CAS/自旋锁 使用sync 禁止指令重排 指令重排单线程确保最终执行结果和程序顺序一致 处理器在进行重排时必须考虑指令的数据依赖性 多线程环境下由于编译器优化,指令执行顺序会变

2020-09-09 21:55:47 89

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除