自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java 核心知识点——基础知识

java核心知识点——基础知识

2025-01-07 20:45:34 392

原创 面向对象分析和设计OOA/D,UML,GRASP

分析,强调是对问题和需求的调查研究,不是解决方案。例如,需要设计一个交易系统,那么如何使用他?他有什么功能?设计,强调满足需求概念上的解决方案。而不是实现。例如,数据库解决方案和软件对象描述。面向对象分析(object-oriented analysis):强调的是在问题领域内发现和描述对象或者概念。例如,在学生信息管理系统里包含学生,班级,课程等概念。面向对象的设计(object-oriented design):强调是定义软件对象以及他们如何协作以实现需求。

2025-01-04 18:50:04 1279 1

原创 CRC卡片分拣法,CRC建模,CRC模型

crc卡片分拣法,是一种对类之间关系进行建模的简单方法,使设计易于理解。通过从文档里提取类定义的常用方法。卡片分拣的过程可以识别类和了解类定义的内容。我们可以在建立概念模型和详细设计,头脑风暴阶段使用。CRC 是类Class,责任responsible,协作collaboration的简称。根据类所要扮演的职责来确定类。CRC卡片使用一个例子进行说明,编写一个21点游戏程序客户提供一个详细的问题描述,也就是21点规则说明我们开始设计这个系统。包括类、类的职责、类的交互行为用例,21点游戏规则。

2024-12-28 11:21:56 1582

原创 服务器反应慢,秒杀设计

在秒杀活动之前把数据同步到Redis里,在开始活动的时候,用户进行抢购,我们通过操作Redis对商品库存进行减扣,把减扣的消息发送到消息队列里,之后交给具体的业务系统进行处理,例如,订单,支付服务等,在处理完成之后,再和MySQL数据库进行交互,完成库存减扣的数据同步。在我们发红包的时候,相当于发放了一个虚拟商品,也会生成一个订单。在用户秒杀成功后,必须保证订单处理一定成功,不能因为程序原因,导致订单丢失,我们使用mq方式进行驱动,如果消费失败,就发起重试,还需要有报警机制,保证及时监控到预警。

2024-12-27 12:01:10 1125

原创 跨越问题,避免重复提交,手机扫码登录,分表迁移,连接池泄漏排查

在表里增加一个登录状态字段,用来记录登录状态,通过查询表中用户在线状态来统计同时在线人数,这种方法是经不起大量用户频繁操作的,因为在线状态统计是实时的,不能直接刷新用户在线状态变化的数据,上亿的用户不断登录和退出,会频繁修改数据库,使得数据库io压力极大,整个数据库性能被拖垮。随着网站访问量增加,一旦服务器或数据库出现问题,导致整个系统故障,造成所有服务不可用,而且功能修改,发布不方便,所以把系统拆分为多个子系统,例如,将用户,商品,订单按业务进行拆分,就是垂直拆分,把每个子系统部署到不同服务器上。

2024-12-27 12:00:31 1036

原创 云原生,云服务,服务网格,限流算法和oauth鉴权

iaas infrastructure as a Service 基础设施即服务,是面向企业或者开发者,提供基础资源支持,包括计算,存储,网络等,这样企业在开发APP时,只需要在公有的云平台上注册一个账号,支付相关费用配置各种云服务器,存储,网络带宽,不要操心机房选址,设备采购,实体服务器,存储,网络问题。以api,SDK的形式发放给客户调用,包括数据分析,人工智能,docker,消息推送,通信,语言识别,图像识别,统计,广告等。4.授权服务器,提供api的服务器,微信的open api服务。

2024-12-26 10:41:23 972

原创 消息中间件——rabbitmq,kafka,rocketmq

每消费一批消息,就会更新offset值,避免重复消费,默认情况下,在消息消费完成后,kafka会自动提交offset,消费端的自动提交有5秒间隔,在消费者消费的过程里,应用程序关闭或者机器宕机,这样offset没有提交,导致重复消费问题。但是在流量高峰时期,比如促销秒杀,如果QPS到达2万,订单系统就处理不过来,只能在超过负载后不允许用户下单,如果使用消息队列做缓冲,就可以取消这个限制,把超出负载的订单分散到一段时间处理,这样虽然有些用户下单十几秒后才收到下单成功的提示,但是比不能下单要好。

2024-12-26 10:38:34 2247

原创 分布式锁,分布式事务

例如,大型电商系统里的下单场景,会涉及扣库存,折扣计算,订单ID生成等服务,这些服务位于不同服务器和数据库里,那么下单是否成功,不仅取决于本地节点的数据库操作,还需要依赖其他服务的执行结果,这时分布式事务需要保证这些操作全部成功或全部失败。抢占锁的逻辑是,往表里插入一条数据,如果已经有其他线程获得了某个方法的锁,这时插入数据就会失败,这样就保证了互斥性,优点:实现简单,缺点:实现比较完善的分布式锁,还需要可重入性,锁的失效机制,没有获得锁的线程实现阻塞就会比较麻烦。环的数据分布范围是【0~232-1】。

2024-12-25 11:17:13 749

原创 分布式通信,微服务协调组件,zookeeper

远程调用,跨进程的调用方法。跨进程,跨同一台计算机的多个进程,多个jvm,多台计算机之间的进程。rpc,remote procedure call,远程过程调用,指通过网络从远程计算机上获取服务,而不需要了解代码的网络技术实现的一种协议。作用,A计算机提供一个服务,B计算机可以像调用本地服务一样去调用A计算机提供的服务。要实现rpc需要通过网络进行数据传输,并且对调用的过程进行封装,一般采用tcp作为底层传输协议。

2024-12-25 11:15:23 1257

原创 nosql,Redis,minio,elasticsearch

非关系型数据库,不保证数据acid特性,为了应对超大规模和高并发系统里多重数据种类带来的挑战,例如,Redis,HBASE,elacticsearch,mongodb使用场景,1.数据模型比较简单2.灵活性更强的数据库3.对数据库性能要求高4.不需要高度的数据一致性5.对于给定key,更加方便对应复杂的映射类型分类,键值对型数据库,用于内存缓存,处理大量数据高负载访问,代表产品,Redis列存储数据库,用于分布式数据存储和管理,扩展性强,代表产品,HBASE。

2024-12-24 10:13:12 1009

原创 MySQL数据库——数据类型,索引,事务,优化

在数据库应用场景里,应用程序每次向数据库发起crud操作的时候,都需要创建连接,在数据库访问量较大的情况下,频繁的创建连接会带来比较大的性能开销,使用连接池可以避免创建连接的开销,应用程序初始化的时候,提前初始化一部分连接并保存到连接池里,当需要使用连接的时候,直接从连接池里获取一个建立好连接。对于数据库而言所有的数据都保存在磁盘上,而磁盘io的效率低,随机磁盘io效率更低,树的高度决定的磁盘的io次数,io次数越少,性能提升就越高,这是采用B树作为索引存储结构的原因。这里涉及寻道和旋转时间的损耗。

2024-12-24 10:12:07 636

原创 mybatis框架——缓存,分页

因为每个用户在执行查询的时候都使用SQLSession来执行,为了避免每次都去查询数据库,mybatis把查询出来的数据保存到SQLSession的本地缓存里,如果SQL命中缓存,就可以直接从缓存里读取。占位符,相当于在preparedStatement预处理语句里设置参数,而preparedStatement里的SQL语句是预编译的,如果在设置的参数里包含特殊字符,会进行转义,他可以防止SQL注入。3.拦截器实现,通过拦截需要分页的SQL语句,并在这个SQL语句里动态拼接分页关键词,实现分页。

2024-12-23 12:56:48 758

原创 通信框架——dubbo,netty

从整体架构:dubbo和springCloud的模式都比较接近,都需要服务提供方、注册中心和服务消费方,差异不大。核心要素:springCloud 更胜一筹,在开发过程里只需要整合springCloud的子项目就可以顺利完成各种组件的融合,而dubbo需要通过实现各种filter来定制,开发成本及技术难度较高。协议:dubbo采用的是单一长连接和nio异步通信,适应于小数据量,大并发的服务调用,以及服务消费者机器数远大于服务提供者机器的数量。

2024-12-23 10:15:41 1077

原创 spring框架——mvc,SpringBoot,springcloud

一旦客户端发现与服务端的配置有差异,就表示服务端配置有更新,于是把服务端配置更新到客户端,这个过程里,可能因为客户端配置信息较多,导致比较时间较长,使得配置同步较慢,与nacos针对这个场景做了优化:1.减少网络通信数据量,客户端把需要进行比较的配置进行分片,每一个分片大小是3000,每次最多拿3000个配置到nacos服务端进行比较。这个组件只有一个方法 ResolveViewName,返回View对象,他是用来渲染的页面,他将程序返回的结果填入具体的模板里,生成具体的视图文件,jsp,html...

2024-12-22 13:02:30 768

原创 spring框架——bean

beanClass:对应配置属性Class必填,指向一个Java类lazyInit指定bean的实例是否延时加载。dependsOn定义bean实例化的依赖关系,依赖顺序,可以定义多个依赖对象factoryBeanName对应配置name,定义Bean的唯一标识,小写字母开头。constructArgumentValues对应配置constructor-arg,给有参构造方法注入参数scope:用于定义作用域,默认单例,单例,原型,请求,会话,全局会话。

2024-12-22 10:21:10 769

原创 spring框架——spring,ioc,aop,事务

1.创建代理对象,创建Bean实例从getBean方法开始,在创建实例之后,spring容器根据Aop的配置匹配目标类的类名,检查目标类是否满足切面规则,如果满足则调用ProxyFactory创建代理Bean并缓存到ioc容器里,创建代理对象时,根据目标对象自动选择不同代理策略,目标类实现了接口,那么使用jdk代理,没有接口使用cglib代理。BeanFactory是ioc容器的顶级接口,主要负责Bean的创建和访问,最主要的方法时getBean方法,在BeanFactory里完成对Bean的依赖注入。

2024-12-22 10:19:34 940

原创 java 核心知识点——常见设计模式

单例模式:一个类在任何情况下只有一个实例,并且提供一个全局访问点来获取实例。1.私有构造器 2.提供一个静态方法作为全局访问点。Java里至少有6种方法可以实现1.延迟加载,并使用监视器锁保证线程安全性。加锁造成性能问题。2.双重检查锁,缩小锁的范围提高性能。3.饿汉模式,私有的静态方法里初始化实例。在类加载的时候触发实例初始化,避免线程同步问题。或者在静态代码块里初始化实例。或者把初始化方法写在私有静态内部类里的私有常量中,由于只有在调用静态内部类的静态方法。

2024-12-21 13:13:15 717

原创 java 核心知识点——io与网络编程

io是指io流,他实现了从磁盘中的读取和写入。内存,网络都可以作为io流的数据来源和目的地。Java提供字节流和字符流实现数据流的操作。当程序向网络进行数据操作时,使用socket方式实现数据网络传输。基于socket的io通信属于阻塞式io,在连接及io事件未就绪的情况下,当前连接会处于阻塞状态,如果某个连接处理阻塞状态,那么后续连接都得等待。服务端能够处理的连接非常有限。nio是一种新的io机制,nio在效率上做了优化,并且新增量3个核心组件:channel,Buffer,selectors。

2024-12-21 13:11:54 632

原创 java 核心知识点——常用集合

数据结构,数组,默认长度0,可以指定长度。随着程序运行,添加元素,没有足够的空间存放新元素,自动触发扩容。add方法,如果size == elementData.length 容器里元素的数量等于数组的长度时,扩容调用grow方法。grow方法里面计算出新数组的长度。原来的1.5倍。Arrays.copyof复制数组,后面把当前要添加的元素加入数组。

2024-12-20 18:12:47 656

原创 java 核心知识点——JVM

虚拟机,像真实的计算机一样,能够运行字节码指令。好处是屏蔽了操作系统的细节,使用Java可以一处编写,到处运行。堆内存分为young generation(Eden space,survivor space),old generation。使用new创建对象的时候,jvm会在Eden space 分配一块内存来存储这个对象。Eden space内存不足时会触发young GC进行对象回收,存在引用关系的对象,jvm把他们移动到survivor space。

2024-12-20 18:12:08 900

原创 java 核心知识点——并发编程——线程池

线程池的原理

2024-12-19 21:10:12 551

原创 java 核心知识点——并发编程——线程

1.继承Thread类,优点:实现简单。只需要实例化继承类的实例,就可以使用自定义线程了。缺点:扩展性比较差,Java只支持单继承,具有继承关系的类就不能通过这种方式实现自定义线程。2.实现Runnable接口,优点:扩展性好,可以在此基础上继承其他的类,适用于多线程处理一份资源的场景。缺点:构造实例的过程相对繁琐一些。3.实现Callable接口,优点:扩展性好,支持回调并得到返回值,可以抛出受检查异常。缺点:调用过程比较繁琐。

2024-12-18 22:19:07 1021

原创 java 核心知识点——并发编程——JUC

可重入锁,线程获得互斥锁,在释放锁之前再去竞争同一把锁,不需要等待,只需要记录重入次数。例如,synchronized,ReentrantLock。作用,避免死锁。

2024-12-17 20:31:51 1074

java 核心知识点-并发编程-线程

java核心知识点,基础知识,思维导图,并发编程,线程

2024-12-18

java 核心知识点-并发编程-JUC

java核心知识点,基础知识,思维导图,并发编程,JUC

2024-12-17

Java核心知识点,基础知识,思维导图

Java核心知识点,基础知识,思维导图,数据类型,对象

2024-12-17

空空如也

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

TA关注的人

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