- 博客(94)
- 收藏
- 关注
原创 【二分查找】875. 爱吃香蕉的珂珂
珂珂可以决定她吃香蕉的速度 k (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 k 根。如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。返回她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)。输入:piles = [30,11,23,4,20], h = 5。输入:piles = [30,11,23,4,20], h = 6。输入:piles = [3,6,7,11], h = 8。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。
2022-10-17 23:16:26
152
原创 【快速排序】select k查询
215. 数组中的第K个最大元素给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。/*** 功能:给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。* 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。* 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。*
2022-10-16 09:55:19
237
原创 【快速排序】
三路快速排序解决了 一个相同元素数组时间复杂度为 o(n²)问题,而一个有序数组时间复杂度为 o(n²) 解决方式则为使用左侧替换随机索引值解决。问题:如果是个等值数组,元素够多会造成栈溢出。时间复杂度为 o(nlogn)
2022-10-15 14:33:19
390
原创 【 归并排序】
有序的归并排序是 o(n)级别 -->n/2+n/4+n/8+…因为每一层都不需要merge,每两个叶子节点都通过一个节点生成的。o(nlogn)级别,因为每一层处理数据量是 o(n)级别,一共有 logn 层。归并排序是无法原地排序的。
2022-10-08 23:07:55
117
原创 【归并排序】统计逆序对个数
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。比如一个序列为 4,5,1,3,2, 那么这个序列的逆序数为7,逆序对分别为(4, 1), (4, 3), (4, 2), (5, 1), (5, 3), (5, 2),(3, 2)。
2022-10-08 20:35:13
301
原创 插入排序 和 选择排序
时间复杂度是:1+2+3+…+n ==> (1+n) * n /2 ==> ½ * n² + ½ * n ==> o(n ²)对于有序的插入排序,它的时间复杂度是 o(n),但是整体一般认为 o(n²)。循环不变量:[0,i)是排好序的,[i,n) 是无序的。不开辟新数组空间排序。类似于扑克牌插入排序。
2022-09-18 21:58:04
152
原创 栈的语法匹配问题解决
给定⼀个字符串,只包含 ( , [ , { , ) , ] , } ,判定字符串中的括号匹配是否合法。 * 如 ”()” , “()[]{}” 是合法的 * 如 “(]”, ”([)]” 是⾮法的
2022-09-18 19:17:06
114
原创 springcloud 统一配置中心config server
一、config server作用:1、不方便维护,所以该系统的服务公用一份配置。2、配置内容的安全和权限3、热加载(config服务启动后,任何对配置文件得改动不需要重启服务,可以热加载)二、配置pom文件 <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifact.
2022-08-24 22:03:40
408
原创 Spring Bean 生命周期
3、对于 prototype 的 bean 多例模式,何时调用getBean对象时创建bean对象,之后则不会再管理后续的生命周期(不会调用destory方法)。1、BeanPostProcessor 后置处理器不是单独针对某一个bean生效,而是针对IOC容器中所有bean都会执行。2、spring容器默认是使用单例模式,容器启动时创建所有单例bean,容器关闭时销毁bean。MyBeanPostProcessor 后置处理器。1、spring只帮我们管理单例bean。......
2022-08-14 08:38:52
171
原创 spring 高级装配
如下有两种方式一种是分别两个xml表示两个环境,第二种是一个xml里面配置两个并设置profile属性,如下就是第二种演示。①如果同时设置了spring.profile.active=dev和spring.profile.default=pro,只激活dev配置。②如果没有配置spring.profile.active,只配置了spring.profile.default,才会读取default配置。③那些没有定义在profile中的bean,任何时候都创建。下面是web.xml中配置。..........
2022-07-20 22:25:19
251
原创 第十七章:容器深入研究
第十七章:容器深入研究文章目录第十七章:容器深入研究前言二、collection的可选操作1、未获支持的操作三、List的功能方法总结前言提示:这里可以添加本文要记录的大概内容:二、collection的可选操作1、面向对象设计中的契约,无论你选择如何实现该接口,都可以向接口发送消息,但是可选操作违反这基本原则。2、collection中的增加或移除都是可选操作,意味着实现类并不需要这些方法提供功能定义。3、未获支持的操作,可以延迟到需要时在实现。4、ArrayList、HashSet
2022-02-16 22:35:37
788
原创 十九章:枚举类型
十九章:枚举类型一、Enum类二、enum基本特性1、方法案例2、静态导入3、向enum中添加新方法4、switch语句中的enum实例5、values() 的神秘之处三、使用接口组织枚举四、使用Enum替代标志五、EnumMap一、Enum类public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable { //枚举实例常量名 private f
2021-09-25 20:40:26
243
原创 二十章:注解
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、元注解二、注解元素1.注解元素类型2.默认值限制三、注解不支持继承四、注解与反射总结前言1、注解也称为元数据2、注解的出现简化一些重复的开发,经常配合aop使用3、没有元数的注解,叫标记注解4、注解更加干净整洁,易读代码,方便扩展5、以及编译时类型检查一、元注解元注解专职负责注解其他注解,一般就是我们的自定义注解注解作用描述@Target注解作用的位置;ElementType参数
2021-09-09 22:48:44
315
原创 Dubbo整合springboot基本使用
1、服务提供者配置application.yml文件server: port: 8083 #项目端口 spring: application: name: meting-user #服务名称 dubbo: server: true #开启dubboservice服务 registry: zookeeper://localhost:2181 #注册到注册中心 protocol: #dubbo服务提供者使用的协议及端口 name: du
2021-03-13 15:37:40
236
原创 springboot实现自定义自动装配
实现方法激活自动装配 - @EnableAutoConfiguration实现自动装配 - XXXAutoConfiguration配置自动装配实现 - META-INF/spring.factories1、Springboot服务引导类@EnableAutoConfigurationpublic class MyAutoConfigruationBootStrap { public static void main(String[] args) { Config
2020-11-26 15:39:24
834
1
原创 RabbitMQ 集群构建
一、集群架构模式1、主备模式实现RabbitMQ高可用集群,一般在并发和数据量不高的情况下,也称为Warren模式。与主从模式区别:主从模式中从节点提供读功能,而主备模式中备用节点不提供,用来主节点挂了HaProxy切换备用节点作用。2、远程模式远程模式可以实现双活的一种模式,简称Shovel模式,所谓Shovel就是我们可以吧消息进行不同数据中心的复制工作,可以跨地域的让两个MQ集群互联。由于前面MQ服务过热,达到阈值,所以加上Shovel进行消息同步,提高订单确认速度,保证可靠性。3
2020-11-10 16:39:45
622
1
原创 RabbitMQ 高级特性
一、如何保证消息100%投递成功①保障消息成功发出②保障MQ节点成功接收③发送端收到MQ节点(Broker)确认应答④完善的消息进行补偿机制(因为前面可以能哪一步出现网络问题导致失败)解决方案如下:1、消息入库,然后发送成功后修改状态,外加定时任务轮询发送失败的消息生产者在发送消息前,先将业务信息和要发送的消息分布入库到对应的数据库;第二步在将消息发送的MQ中;第三步是MQ接收到消息反馈给发送者;第四步监听确认接收到了消息更新消息状态;如果步骤一都失败那就需要使用快速失败;有一个分布式定
2020-11-09 14:50:14
487
原创 RabbitMQ 概念和基本用法
一、互联网大厂为什么选择RabbitMQ①RabbitMQ是使用Erlang语音编写的,并且基于AMQP协议;②它是一个开源的消息代理和队列服务器,可以通过普通协议实现夸语言、跨平台之间的高性能、高可靠、可用性数据共享服务。③可以提供可靠的投递模式(confirm)、返回模式(return)④与springAMQP整合完美,提供丰富的api⑤集群模式丰富、表达式配置、HA模式、镜像队列模型二、RabbitMQ 是如何做到高性能的核心就是Erlang语言,这种语言具有和原生socket一样的低延
2020-11-03 17:29:48
511
原创 springcloud 服务容错和Hystrix
服务间调用出现故障,而这个服务又被其他服务调用,然后级联效应,又由于请求是同步的,导致服务发生雪崩效应一、二、作用服务降级、依赖隔离、服务熔断、监控服务降级:优先核心服务,非核心服务不可用或若可用通过HystrixCommand注解指定fallbackMethod(回退函数)中具体实现降级逻辑、三、环境配置 <dependency> <!--触发服务降级--> <groupId>org.springframewo
2020-11-02 11:06:52
167
原创 微服务拆分
一、微服务拆分哪些不适合:1、系统包含很多强事务场景2、业务相对稳定,迭代周期长3、访问压力不大,可用性要求不高二、服务拆分方法论1、单一职责、高内聚。低耦合2、关注点分离-按职责、业务-按通用性-按粒度先拆分业务功能在拆分对应的数据...
2020-10-30 23:49:06
245
原创 springCloud eureka
服务启动时向注册中心注册,注册中心为了保证高可用性使用集群方式,客户端想要访问任何一个服务可以从注册中心拿取,也可以由代理转发请求到可用服务器。服务注册和发现:客户端发现:eureka就是,就是客户端通过注册中心按照负载均衡机制(轮询、hash等)从注册中心获取到ip,然后访问。服务端发现:典型的nginx、zookeeper、kuberneters,客户端通过主机的ip和端口向代理发送请求,代理将请求转发到任何一个可用的服务上;注册中心和后台注册服务是对客户端不可见得。一、注册中心服务端
2020-10-28 21:40:56
163
原创 synchronized
一、synchronized1、原理:synchronize是线程互斥的,所以能保证共享数据一致性。synchronize底层是有 monitorenter 和 monitorexit 两个jvm指令;他能保证任何线程在enter之前从主内存中读取共享数据,在exit将共享数据刷新到主内存。可参考 深入synchronize原理2、如下反编译带有synchronize代码程序:3、获取 和 释放 对象关联的monitor锁机制synchronize是不可中断的只有像sleep、wai
2020-10-14 14:16:39
348
原创 自旋锁、乐观锁、悲观锁、重入锁、公平锁
1、乐观锁:假定没有冲突,在更新数据时比较发现不一致时,则读取新值修改后重试更新。(自旋锁就是一种乐观锁)2、悲观锁:假定会发生冲突,所有操作都加上锁,比如读数据操作。3、自旋锁:循环使用cup时间,尝试cas操作直至成功返回true,不然一直循环。(比较内存值与线程旧值是否一致,一致则更新,不然则循环)4、共享锁(多读):给资源加上读锁,其他线程也可以加读锁,可以同时读,不可以加写锁。5、独享锁(单写):给资源加上写锁,可以修改资源,其他线程不能再加锁。6、可重入锁、不可重入锁:线程获取到一把锁
2020-10-13 23:36:24
2393
原创 线程安全问题
一、可见性、有序性// 1、 jre/bin/server 放置hsdis动态链接库// 测试代码 将运行模式设置为-server, 变成死循环 。 没加默认就是client模式,就是正常(可见性问题)// 2、 通过设置JVM的参数,打印出jit编译的内容 (这里说的编译非class文件),通过可视化工具jitwatch进行查看// -server -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+LogCompilatio...
2020-10-12 18:40:28
238
原创 线程池
一、为什么要用线程池1、频繁的创建、启动、关闭线程消耗大量的系统资源2、提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;3、方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场))。4、提供更强大的功能,延时定时线程池。详情参考...
2020-10-11 11:11:56
200
转载 读写分离锁,读写锁设计模式
对于共享数据的操作无非读和写,多线程条件下,对于共享资源是否冲突,如下图:如上可以看出对于写操作是不需要加锁的,这样可以很大提升性能;写操作都需要具有排他方式的加锁。public class ReadWriteLock { //等待读操作线程数 private int watingReades; //正在读得线程数,这里支持多线程同时读取 private int readeingReades; //等待写的线程数 private int wateingW
2020-09-22 13:39:06
598
原创 十三章:字符串
十三章:字符串public final class String extends Object implements Serializable, Comparable, CharSequenceString是被final修饰的不可变类一、不可变StringString对象是不可变的,具有可读特性,无论对它如何操作都不会改变该物理位置的对象,只会生成新的对象。每当String对象传给方法...
2020-03-15 10:20:02
127
原创 十二章:通过异常处理错误
十二章:通过异常处理错误七、java异常标准1、 Throwable:作为异常抛出的基类,实现Serializable(方便序列化存储和数据传输)。 ①Error:继承自Throwable,用作编译时错误和系统错误。 ②Excepton:可以被抛出的基本类型,常用的有RuntimeException。通常用户使用的自定义异常需要望文生义,所以异常通常使用名称就知道是什么问题,而...
2020-03-08 16:51:10
298
原创 第十章:内部类
第十章:内部类1、内部类表面上看就是一种代码隐藏机制2、其实内部类能与外部类通信,并且含有一个外部类的引用,所以能访问外部类所有的成员,包括private3、内部类解决一部分的语言设计问题;类具有单继承的局限性,接口可以多继承、多实现,当然类也能多重继承(A继承B,B继承C);然而多个内部类可以继承或实现多个接口,保证了语言的完整性。一、链接外部类内部类有权访问内部类所有成员,包括私有...
2020-02-24 20:19:45
170
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人