自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 设计模式之迭代器模式

在现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方法就必须修改程序源代码,这违背了 “开闭原则”。既然将遍历方法封装在聚合类中不可取,那么聚合类中不提供遍历方法,将遍历方法由用户自己实现是否可行呢?答案是同样不可取,因为这种方式会存在两个缺点:暴露了聚合类的内部表示,使其数据不安全;增加了客户的负担。“迭代器模式”能较好地克服以上缺点,它在客户访问类与聚合类之间插入一个

2021-08-01 16:13:17 168

转载 设计模式之组合模式

在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣服与衣柜、以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来实现会很方便。组合模式的定义与特点组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系

2021-08-01 16:00:53 149

转载 设计模式之策略模式

在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。如果使用多重条件转移语句实现(即硬编码),不但使条件语句变得很复杂,而且增加、删除或更换算法要修改原代码,不易维护,违背开闭原则。如果采用策略

2021-07-25 16:43:14 153

转载 设计模式之外观模式

在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。图 1 给出了客户去当地房产局办理房产证过户要遇到的相关部门。外观模式的定义与特点外观(Fa

2021-07-25 14:36:54 118

转载 设计模式之模板方法模式

在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。这样的例子在生活中还有很多,例如,一个人每天会起床、吃饭、做事

2021-07-18 21:01:27 393

转载 设计模式之装饰器模式

上班族大多都有睡懒觉的习惯,每天早上上班时间都很紧张,于是很多人为了多睡一会,就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰器模式来实现。装饰器模式的定义与特点装饰器(Decora

2021-07-17 21:04:27 130

转载 设计模式之观察者模式

在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。这样的例子还有很多,例如,股票价格与股民、微信公众号与微信用户、气象局的天气预报与听众、小偷与警察等。在软件世界也是这样,例如,Excel 中的数据与折线图、饼状图、柱状图之间的关系;MVC 模式中的模型与视图的关系;事件模型中的事件源与事件处理者。所有这些,如果用观察者模式来

2021-07-10 19:58:58 148

原创 设计模式之桥接模式

模式动机设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:• 第一种设计方案是为每一种形状都提供一套各种颜色的版本。• 第二种设计方案是根据实际需要对形状和颜色进行组合。对于有两个变化维度(即两个变化的原因)的系统,采用方案二来进行设计系统中类的个数更少,且系统扩展更为方便。设计方案二即是桥接模式的应用。桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。模式定义

2021-07-04 10:05:07 1397 2

转载 设计模式之适配器模式

现实生活中的适配器本文讨论适配器模式。适配器模式是23中设计模式之一,它的主要作用是在新接口和老接口之间进行适配。它非常像我们出国旅行时带的电源转换器。为了举这个例子,我还特意去京东上搜了一下电源转换器,确实看到了很多地方的标准不一样。我们国家的电器使用普通的扁平两项或三项插头,而去外国的话,使用的标准就不一样了,比如德国,使用的是德国标准,是两项圆头的插头。如果去德国旅游,那么我们使用的手机充电器插头无法插到德国的插排中去,那就意味着我们无法给手机充电。怎样解决这个问题呢?只要使用一个电源转化器就行了。

2021-06-27 16:38:15 176

转载 设计模式之代理模式

在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。代理模式的定义与特点代理模式的定义:由于某些原因需要给某对象提供一个代理以控

2021-05-23 21:00:54 77

转载 SpringCloud---Sentinel

简介Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。Sentinel 具有以下特性:丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数

2021-05-22 22:12:21 864

转载 SpringCloud---Feign

一、Feign的概念Feign是一个声明式Web Service客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。使用主要包括两个:Feign 和 OpenFeign

2021-05-16 21:19:21 81

转载 SpringCloud---Ribbon

先看一下官方的结构图在一个微服务架构中,服务中心我们以Eureka举例,客户端从EurekaServer拿到服务注册表时,会先缓存到本地。然后通过Ribbon组件决定去调用哪一个具体服务实例。Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端实现负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中Load Balancer后面的所有机器,Ribbon会自动的帮助你基于某种规则(如简单

2021-04-24 21:10:26 68

转载 Spring Cloud Alibaba配置中心 - nacos

基本概念同样的我们首先也先介绍一下和注册中心相关的一些基本名词概念:命名空间(namespace):和注册中心一样,命名空间属于Nacos顶层的结构,用于进行租户级别的隔离,我们最常用的就是不同环境比如测试环境,线上环境进行隔离。配置管理:系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。配置项:一个具体的可配置的参数与其值域,通常以 param-key=param-value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ER

2021-04-18 20:18:54 221

原创 设计模式之建造者模式

模式的定义与特点建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。该模式的主要优点如下:封装性好,构建和表示分离。扩展性好,各个具体的建造者相互独立,有利于系统的解耦。客户端不必知道产品内部组成的细节,建造者可以对创建过程逐步细化,而不对其它模块产生任何影响,便于控制细节

2021-04-18 19:47:05 5097

转载 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)

园子里关于23种设计模式的博文已经可以说是成千上万、车载斗量、屯街塞巷、不计其数、数不胜数、摩肩接踵、汗牛充栋、车水马龙、门庭若市、琳琅满目直至让人眼花缭乱了。在这样的大环境下之所以来写设计模式类的博文,并不是像一些"非主流"的爱情观那样"宁缺毋滥"。 只是其一呢,因为相当于给自己做一个总结,加深一下自己这方面的认识,因为掌握了和把它写出来我感觉后者还可以对技能有一个提升,其二呢是因为最近公司...

2021-04-11 17:46:36 153

转载 Java设计模式之单例模式

在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。单例模式的定义与特点单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程序的

2021-04-05 21:50:40 145

转载 RocketMq常见面试题汇总

1、说说你们公司线上生产环境用的是什么消息中间件?见【2、多个mq如何选型?】2、多个mq如何选型?3、为什么要使用MQ?因为项目比较大,做了分布式系统,所有远程服务调用请求都是同步执行经常出问题,所以引入了mq4、RocketMQ由哪些角色组成,每个角色作用和特点是什么?5、RocketMQ中的Topic和JMS的queue有什么区别?queue就是来源于数据结构的FIFO队列。而Topic是个抽象的概念,每个Topic底层对应N个queue,而数据也真实存在queue上的。6、Ro

2021-03-28 16:22:17 1177

原创 RocketMQ常见面试题汇总

1、说说你们公司线上生产环境用的是什么消息中间件?见【2、多个mq如何选型?】2、多个mq如何选型?3、为什么要使用MQ?因为项目比较大,做了分布式系统,所有远程服务调用请求都是同步执行经常出问题,所以引入了mq4、RocketMQ由哪些角色组成,每个角色作用和特点是什么?5、RocketMQ中的Topic和JMS的queue有什么区别?queue就是来源于数据结构的FIFO队列。而Topic是个抽象的概念,每个Topic底层对应N个queue,而数据也真实存在queue上的。6、Ro

2021-03-28 16:20:14 454

原创 RocketMQ之分布式事务篇(搞懂消息事务,一篇就够!)

前言在系统变的复杂后,分布式、微服务等架构技术,就要考虑到应用在系统中了。尤其数据量大了后,就需要对数据库进行拆分。一旦数据库进行了分拆,那就出现很多头疼的问题,其中之一就是事务问题。那我们就来看看问题是怎么出现的?场景进行数据拆分后,就类似上面的架构上图中我们就拿用户的数据进行举例,用户量一旦几千万时,就需要进行分库分表;上图就分了3个库,每个库都保证了高可用。这样的架构设计,会遇到事务问题,我们来看看具体的业务场景:用户A转账100元给用户B,这个业务比较简单,我们来分析一下里面具体的步骤

2021-03-20 20:44:42 235

原创 利用Redis进行分布式限流,实现令牌桶算法

分布式限流方案计数:简单,双倍临界情况漏桶:恒定速度,不能应对峰值令牌桶:允许一定突然,丢掉部分请求有待商榷,令牌桶普遍用得多一些成熟方案可见,阿里Sentinel:https://sentinelguard.io/zh-cn/docs/basic-implementation.html计数实现原理:没超出显示进行自增local key = "rate.limit:" .. KEYS[1]local limit = tonumber(ARGV[1])local expire_time =

2021-03-14 17:13:41 1869

原创 RocketMQ可靠性传输关键点详解

讨论可靠性传输这个问题,我们需要从三个角度来分析:生产者弄丢数据、RocketMQ弄丢数据、消费者弄丢数据。消费端弄丢了数据对于消费端,如果我们在使用 Push 模式的情况下,只有我们消费返回成功,才会异步定期更新消费进度到 Broker 上。  如果消费端异常崩溃,可能导致消费进度未更新到 Broker 上,那么无非是 Consumer 可能重复拉取到已经消费过的消息。关于这个,就需要消费端做好消费的幂等性。Broker弄丢了数据我们首先来看看Broker的刷盘和复制方式。刷盘(1)

2021-02-28 20:56:49 200

原创 RocketMQ之Producer

一、RocketMQ 4.X 生产者常见核心配置compressMsgBodyOverHowmuch :消息超过默认字节4096后进行压缩retryTimesWhenSendFailed : 失败重发次数maxMessageSize : 最大消息配置,默认128ktopicQueueNums : 主题下面的队列数量,默认是4autoCreateTopicEnable : 是否自动创建主题 Topic, 开发建议为 true,生产要为 falsedefaultTopicQueueNums : 自动

2021-01-24 22:45:41 832

原创 RocketMQ之NameServer详解

NameServer介绍Name Server 是专为 RocketMQ 设计的轻量级名称服务,具有简单、可集群横吐扩展、无状态,节点之间互不通信等特点。整个Rocketmq集群的工作原理如下图所示:可以看到,Broker集群、Producer集群、Consumer集群都需要与NameServer集群进行通信:Broker集群:Broker用于接收生产者发送消息,或者消费者消费消息的请求。一个Broker集群由多组Master/Slave组成,Master可写可读,Slave只可以读,Master

2021-01-23 22:20:50 8218 1

原创 分布式锁的前世今生

一、为什么要使用分布式锁我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug!注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间!后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图:上图可以看到,变量A存在JVM1、JVM2、JVM3三个JVM内存中(这个变量A主要体

2021-01-17 11:14:20 133

转载 分布式系统理论进阶 - Paxos

最近在学习zk的zab协议,Zookeeper的ZAB,Viewstamped Replication(VR),raft,multi-paxos,这些都可以被称之为Leader-based一致性协议。基本都是对经典paxos的优化而提出。本文将详细介绍Paxos的实现。Basic Paxos何为一致性问题?简单而言,一致性问题是在节点宕机、消息无序等场景可能出现的情况下,相互独立的节点之间如何达成决议的问题,作为解决一致性问题的协议,Paxos的核心是节点间如何确定并只确定一个值(value)。也许

2021-01-02 11:28:26 90

原创 信号量(Semaphore)-你真的了解吗?

什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问

2020-12-06 20:13:20 7787

原创 ZooKeeper概览

相信大家对 ZooKeeper 应该不算陌生,但是你真的了解 ZooKeeper 是什么吗?如果没有学过 ZooKeeper,那么本文将会是你进入 ZooKeeper 大门的垫脚砖;如果你已经接触过 ZooKeeper ,那么本文将带你回顾一下 ZooKeeper 的一些基础概念。什么是 ZooKeeper下面这段内容摘自《从 Paxos 到 ZooKeeper 》第四章第一节的某段内容,推荐大家阅读一下:Zookeeper 最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多

2020-12-06 12:52:19 76

原创 Redis缓存设计与优化

缓存的受益与成本受益:1.加速读写:通过缓存加速读写速度:CPU L1/L2/L3Cache、Linux page Cache加速硬盘读写、浏览器缓存、Ehcache缓存数据库结果2.降低后端负载:后端服务器通过前端缓存降低负载:业务端使用Redis降低后端MySQL负载等成本:1.数据不一致 :缓存层和数据层有时间窗口不一致,和更新策略有关2.代码维护成本:多了一层缓存逻辑3.运维成本:例如Redis Cluster使用场景1.降低后端负载:对高消耗的SQL:join结果集/分组统计结果缓存

2020-11-29 10:16:54 139

原创 递归的内涵与经典应用

一 引子 大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归。毋庸置疑地,递归确实是一个奇妙的思维方式。对一些简单的递归问题,我们总是惊叹于递归描述问题的能力和编写代码的简洁,但要想真正领悟递归的精髓、灵活地运用递归思想来解决问题却并不是一件容易的事情。 递归:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。若

2020-11-25 19:18:57 380

原创 Redis Cluster(集群)

呼唤集群并发量 ops数据量 大数据数据分布顺序分区和哈希分区哈希分布节点取余分区 --------建议多倍扩容比较好,数据迁移量少一致性哈希分区 --------token环,只影响邻近节点,对其他节点影响小(节点多时候建议)虚拟槽分区 --------前两者是客户端分片,后者是redis-cluster,服务端管理节点、槽、数据搭建集群Redis Cluster架构节点 cluster-ena

2020-11-15 10:59:09 157

原创 Redis之Sentinel详解

主从复制高可用?主从复制,主挂掉后需要手工来操作麻烦写能力和存储能力受限 (主从复制只是备份,单节点存储能力) #其实分布式后面再讲sentinel监控多套redissentinal的默认端口26379,形成如下的安装配置(其实就是单机多实例)客户端链接流程: 1.Sentinel地址集合 2.masterName 3.不是代理模式实现原理故障转移尤sentinel领导者节点完成.

2020-11-08 18:07:38 139

原创 学通java位运算,一篇就够!

什么是位运算下面以一张图来演示一下位运算规则位运算快在哪里?位运算真的快了吗?下面以左移一位与乘以2来实验一下public void multiply2_1() { int i = 1; i = i << 1;}public void multiply2_2() { int i = 1; i *= 2;}优化分为两部分,一个是编译器优化,另一个是处理器优化编译好之后,用javap -c来看下编译好的class文件,字节码是:public

2020-11-07 09:58:52 189

原创 Redis复制的原理与优化

主从复制作用数据副本扩展读性能简单作用1.一个master可以有多个slave2.一个slave只能有一个master3.数据流向是单向的,master到slave主从复制的配置两种实现方式: slaveof命令 slaveof 127.0.0.1 6379断掉主从不会删掉数据,但是再找新的主时候会被清空全部复制和部分复制run_id:b75a2ccffc783a8379934046ad8d716e91740cd9master_repl_offset:10

2020-10-25 10:28:13 121 2

原创 redis持久化的优化思路

fork操作 1.同步操作 2.与内存量息息相关:内存越大,耗时越长(与机器类型有关) 3.info:latest_fork_usec进程外开销AOF 追加阻塞

2020-10-25 10:15:23 101

原创 1024节,又是动归的2天。。

视频拼接你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。视频片段 clips[i] 都用区间进行表示:开始于 clips[i][0] 并于 clips[i][1] 结束。我们甚至可以对这些片段自由地再剪辑,例如片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, T])。返回所需片段的最小数目,如果无法完成该任务,则返回

2020-10-25 09:47:50 127

原创 Leetcode-重排链表

给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.class Solution { public vo

2020-10-21 13:01:44 427

原创 Leetcode-长按键入

你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。示例 1:输入:name = “alex”, typed = “aaleex”输出:true解释:‘alex’ 中的 ‘a’ 和 ‘e’ 被长按。示例 2:输入:name = “saeed”, typed = “ssaaedd”输出:false解释:‘e

2020-10-21 12:59:42 70

原创 Redis持久化的取舍和选择

持久化作用RDB触发机制—不容忽略方式1.全量复制 主从复制2.debug reload debug机制3.shutdownAOFRDB现存问题: 耗时,耗性能 --- fork(), IO性能 不可控,丢失数据什么是AOFAOF三种策略 always everysec noAOF重写作用:减少磁盘占用量加速恢复速度AOF重写实现两种方式bg

2020-10-19 12:43:29 99

原创 多数元素-多种解法

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2暴力简单的暴力方法(即枚举数组中的每个元素,再遍历一遍数组统计其出现次数,时间复杂度为 o(N2)) 的算法我们需要找出时间复杂度小于o(N2)) 的优秀做法哈希思路我们知道出现次数最多的元素大于 n/2次,所以可以用

2020-10-17 10:43:37 2187

空空如也

空空如也

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

TA关注的人

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