自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。输入:nums = [2,7,11,15], target = 9。输入:nums = [3,2,4], target = 6。输入:nums = [3,3], target = 6。

2024-04-12 07:05:38 288

原创 LeetCode 543. 二叉树的直径

首先我们知道一条路径的长度为该路径经过的节点数减一,所以求直径(即求路径长度的最大值)等效于求路径经过节点数的最大值减一。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度。而任意一条路径均可以被看作由某个节点为起点,从其左儿子和右儿子向下遍历的路径拼接得到。解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。给你一棵二叉树的根节点,返回该树的 直径。两节点之间路径的 长度 由它们之间边数表示。输入:root = [1,2,3,4,5]输入:root = [1,2]

2024-04-12 06:58:07 172

原创 LeetCode 226. 翻转二叉树

这是一道很经典的二叉树问题。显然,我们从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点 root 的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以 root 为根节点的整棵子树的翻转。给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]输入:root = [2,1,3]输入:root = []输出:[2,3,1]

2024-04-12 06:37:49 275

原创 LeetCode 104. 二叉树的最大深度

因此我们可以用「深度优先搜索」的方法来计算二叉树的最大深度。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1)O(1)O(1) 时间内计算出当前二叉树的最大深度。如果我们知道了左子树和右子树的最大深度 lll 和 rrr,那么该二叉树的最大深度即为。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。输入:root = [3,9,20,null,null,15,7]输入:root = [1,null,2]方法一:深度优先搜索。

2024-04-11 22:34:36 161

原创 LeetCode 94. 二叉树的中序遍历

定义 inorder(root) 表示当前遍历到 root\textit{root}root 节点的答案,那么按照定义,我们只要递归调用 inorder(root.left) 来遍历 root\textit{root}root 节点的左子树,然后将 root\textit{root}root 节点的值加入答案,再递归调用inorder(root.right) 来遍历 root\textit{root}root 节点的右子树即可,递归终止的条件为碰到空节点。输入:root = [1,null,2,3]

2024-04-11 22:23:47 336

原创 LeetCode 239. 滑动窗口最大值

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。输入:nums = [1,3,-1,-3,5,3,6,7], k = 3。滑动窗口的位置 最大值。输入:nums = [1], k = 1。输出:[3,3,5,5,6,7]返回 滑动窗口中的最大值。

2024-04-10 21:25:37 383

原创 LeeCode 560.和为K的子数组

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数。子数组是数组中元素的连续非空序列。示例 1:输入:nums = [1,1,1], k = 2输出:2示例 2:输入:nums = [1,2,3], k = 3输出:2。

2024-01-25 10:40:00 403

原创 LeeCode 438.找到字符串中所有字母异位词.

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。示例 1:输入: s = “cbaebabacd”, p = “abc”输出: [0,6]解释:起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。示例 2:输入: s = “abab”, p = “ab”

2024-01-24 17:21:35 438

原创 LeeCode 3. 无重复字符的最长子串

链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/solutions/3982/hua-dong-chuang-kou-by-powcai/其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。时间复杂度:O(n)O(n)O(n)

2024-01-22 17:58:20 493

原创 LeeCode 42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9雨水面积 = 总面积(雨水 + 黑块)- 黑块总面积 = 每层面积的和。

2024-01-19 21:49:56 388

原创 LeetCode 15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]输入:nums = [0,1,1]输入:nums = [0,0,0]解释:唯一可能的三元组和为 0。输出:[[0,0,0]]

2024-01-18 19:51:57 442

原创 LeetCode 11. 盛最多水的容器

给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。击败12.01%使用 Java 的用户。击败10.37%使用 Java 的用户。击败60.63%使用 Java 的用户。击败8.94%使用 Java 的用户。返回容器可以储存的最大水量。说明:你不能倾斜容器。不需要计算的就不要计算。

2024-01-17 22:41:50 504

原创 LeetCode 283. 移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。输入: nums = [0,1,0,3,12]击败99.96%使用 Java 的用户。击败8.53%使用 Java 的用户。输出: [1,3,12,0,0]输入: nums = [0]

2024-01-17 21:49:22 516

原创 动态规划(未完)

动态规划步骤。

2024-01-09 23:07:15 403

原创 leetCode 128.最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。解释:最长数字连续序列是 [1, 2, 3, 4]。输入:nums = [0,3,7,2,5,8,4,6,0,1]请你设计并实现时间复杂度为 O(n) 的算法解决此问题。输入:nums = [100,4,200,1,3,2]击败56.66%使用 Java 的用户。击败10.55%使用 Java 的用户。

2024-01-07 09:37:47 500 1

原创 每次固定截取list

在这个示例中,我们遍历了 list 列表,并且使用 subList() 方法获取 5 个元素的子列表。每次循环时,我们都会检查元素下标 i 和下一个元素的下标 i + limit 的范围,以确保它们没有超出列表的大小。所有子列表都将添加到一个名为 resultList 的主列表中,最后我们输出该列表以验证每个子列表是否正确生成。你可以使用Java的subList()方法来获取一个固定大小的子列表。在该问题中,你可以遍历整个列表,在每5个元素结束时创建一个新的子列表,然后将该子列表添加到结果列表中。

2023-06-07 15:12:15 1016

原创 实现手动分页

1.IPageIPage info = new Page<>();@Override public IPage<DAlarmDetail> findPageAndList(DAlarmInfoVO vo) { List<DAlarmDetail> dAlarmDetails = getDAlarmDetails(vo); IPage<DAlarmDetail> info = new Page<>();

2022-04-12 12:41:22 588

原创 “\\xE7“ to UTF-8 in conversion from ASCII-8BIT to UTF-8 to UTF-16LE

Vagrant/embedded/gems/2.2.19/gems/childprocess-4.1.0/lib/childprocess/windows/process_builder.rb:44:in `encode!’: “\xE7” to UTF-8 in conversion from ASCII-8BIT to UTF-8 to UTF-16LE (Encoding::UndefinedConversionError)找到报错信息的process_builder.rb 44行,编码位置换成一下

2022-03-29 23:16:39 811

原创 linux命令

1.cp命令命令:cp dir1/a.doc dir2 表示将dir1下的a.doc文件复制到dir2目录下cp -r dir1 dir2 表示将dir1及其dir1下所包含的文件复制到dir2下cp -r dir1/. dir2 表示将dir1下的文件复制到dir2,不包括dir1目录说明:cp参数 -i:询问,如果目标文件已经存在,则会询问是否覆盖;2.scp命令例如:scp id_rsa.pub router_17@IP:/home/router_17/.ssh/authorized_ke

2022-03-28 17:54:23 121

原创 拷贝文件例子

RocketMQ中IOTinyUtils#copyFilestatic public void copyFile(String source, String target) throws IOException { File sf = new File(source); if (!sf.exists()) { throw new IllegalArgumentException("source file does not exist.");

2022-03-28 17:52:32 81

原创 redis题目

1.数据结构:是什么,怎么用五种String:哈希表:存一些结构化的数据扩展的:bigmap,布隆过滤器,bigmap:上千万亿级别的用户状态,比如:web,app的用户签到2.高可扩展:扩容,切片集群,数据分布,数据迁移3.高性能保证:为什么快?,为什么又满了?4.高可用技术:数据持久化,主从复制,哨兵机制,数据一致性1.Redis的优缺点各是什么?优点:快,数据类型丰富缺点:内存数据库(场景-持久化)2.Redis的AOF和RDB机制各是什么?有什么区别?AOF相当于记日志

2022-03-12 20:51:30 3093

原创 多线程-顺序执行

1.多线程如何保证顺序执行[1] 使用线程的join方法[2] 使用主线程的join方法[3] 使用线程的wait方法[4] 使用线程的线程池方法[5] 使用线程的Condition(条件变量)方法[6] 使用线程的CountDownLatch(倒计数)方法[7] 使用线程的CyclicBarrier(回环栅栏)方法[8] 使用线程的Semaphore(信号量)方法1.1用CompletableFuture只能保证线程执行顺序,不保证输出结果是顺序的public class Thr

2022-03-11 21:09:15 1249

原创 分布式锁-1数据库实现

分布式锁1.1分布式锁使用场景防重提交C端接口幂等秒杀扣减以前很多应用都是单节点部署,为了解决单节点,多线程访问资源的一致性问题,我们常用Java的s和lock实现微服务场景下无法满足,分布式场景下满足多进程可见并且互斥的锁1.2如果要实现一个优秀的分布式锁需要具备哪些特质锁对多节点可见这个锁对多节点互斥这个锁必须是高可用的,不能在业务执行中突然失效锁必须是高性能的,加锁时间几毫秒1.3业务场景怎么使用分布式锁第一步加锁第二部执行业务逻辑第三步释放锁1.4看起来很

2022-03-08 12:31:00 467

原创 spring事务实现原理

Spring中增强了事务的概念,为了解决方法A、方法B和方法C之间的事务关系,引入了事务传播机制的概念。Spring中的@Transactional注解的事务实现主要通过TransactionInterceptor拦截器来进行实现的,拦截目标方法,然后判断异常是不是目标异常,如果是目标异常就行进行回滚,否则就进行事务提交。...

2022-03-07 11:58:39 879

原创 spring boot事务不生效

对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了。在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到spring事务。确实,spring事务用起来贼爽,就用一个简单的注解:@Transactional,就能轻松搞定事务。我猜大部分小伙伴也是这样用的,而且一直用一直爽。但如果你使用不当,它也会坑你于无形。今天我们就一起聊聊,事务失效的一些场景,说不定你已经中招了。不信,让我们一起看

2022-03-07 09:42:44 5828 2

原创 sql优化常用的几种方法

1.EXPLAINtype列,连接类型。一个好的SQL语句至少要达到range级别。杜绝出现all级别。key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式。key_len列,索引长度。rows列,扫描行数。该值是个预估值。extra列,详细说明。注意,常见的不太友好的值,如下:Using filesort,Using temporary。2.SQL语句中IN包含的值不应过多MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好

2022-03-07 08:53:58 19708 11

原创 微服务-hystrix请求缓存

一次controller调用中,多次调用service@GetMapping("/cache-annotation-01") public List<ServiceInstance> useCacheByAnnotation01(@RequestParam String serviceId) { log.info("use cache by annotation01(controller) to get nacos client info: [{}]",

2022-03-05 06:08:43 558

原创 微服务-Ribbon,OpenFeign

使用配置/** * <h1>使用 Ribbon 之前的配置, 增强 RestTemplate</h1> * */@Componentpublic class RibbonConfig { /** * <h2>注入 RestTemplate</h2> * */ @Bean @LoadBalanced public RestTemplate restTemplate() { retur

2022-03-03 11:26:33 359

原创 redis

1.redis常用数据结构https://www.jianshu.com/p/674c9635b2b9字符串·哈希表列表集合有序集合1.1字符串简单动态字符串(SDS)flags为了选着// flags值定义#define SDS_TYPE_5 0#define SDS_TYPE_8 1#define SDS_TYPE_16 2#define SDS_TYPE_32 3#define SDS_TYPE_64 4压缩列表压缩列表(ziplist)是为了节约内存而设

2022-03-03 09:07:43 170

原创 JVM-垃圾回收

对象在年轻代移动过程对象→Eden区→m新生代收集器:seiel收集器:单核处理器最优。垃圾收集运行时候stop the world 只有垃圾收集器线程运行,其他线程处于安全点,也就是在内核态。垃圾收集器处于用户态。parNew收集器:除了多线程,其他和seiel一模一样。parllar scanvege: 标记复制算法。关注吞吐量,达成控制吞吐量的垃圾收集器。吞吐量= 运行时间/(运行时间+垃圾收集时间)涉及参数: 吞吐量,最大垃圾收集时间。怎么处理:多次运行mina GC,到时间就停止

2022-02-27 22:43:19 95

原创 MySQL-MVCC

1.什么是MVCCMVCC:全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是为MySQL并发场景下无锁生成读视图进行读操作来进行多版本控制。或者叫MVCC:一致性非锁定读mvcc是基于MySQL的回滚机制,在并发场景下为读操作做的的读取的一个优化。MVCC实现实现基于undo log 版本链 + ReadView机制https://www.51cto.com/article/641019.htmlundologundo log存在

2022-02-27 21:59:20 588

原创 MySql-索引

为什么不用hashmap模糊查寻没法做,hashcode找范围查找不用B树深度,减少IOb+树有序最左匹配原则聚簇索引:主键,B+树辅助索引:B+树,叶子节点存放所有的聚簇索引索引失效LOL + - * /not nulllike:不是所有的,最左匹配原则不会失效,%开头的会失效or :or前后都是索引字段不会失效,有一个不是索引就会失效L(联合索引):索引列顺序,按首个索引列开始加减乘除:select 字段 from 表 where age -1 = 20;索引会失效

2022-02-25 20:59:38 385

原创 JVM-虚拟机

虚拟机栈(线程栈):存放局部变量表 【还有对象引用地址(指向堆)】,操作数栈(加减的…等操作的值和结果临时存放),动态链接(找方法区(元空间)地址),方法出口(返回调用此方法的位置)程序计数器:存放程序执行的位置(地址)(多线程 程序执行可能被挂起,需要记录执行到哪里了)本地方法栈:native方法方法区(元空间):常量,静态变量,类信息堆:new出来的对象字节码引擎修改程序计数器的值...

2022-02-24 16:00:10 601

原创 ThreadLocal

123

2022-02-24 14:12:38 154

原创 netty 零拷贝

1.直接内存不是jvm堆内存,是机器物理内存可以用Java//分配堆内存ByteBuffer byteBuffer = ByteBuffer.allocate(100);//分配直接内存ByteBuffer byteBufferDirect = ByteBuffer.allocateDirect(100);返回指针,指针指向分配的内存2.零拷贝正常情况,非零拷贝数据→内核态→拷贝到直接内存→拷贝到用户态数据→用户态→拷贝到直接内存→拷贝到内核态netty零拷贝nett

2022-02-24 11:53:12 320

原创 netty 怎么分装Java Nio

服务端NioServerSocketChannel通过反射构造方法实例化一个NioServerSocketChannel实际是调用NioServerSocketChannel空的构造方法NioServerSocketChannel构造方法返回(java.nio)ServerSocketChannel最终将NioServerSocketChannel注册到eventLoop包装的selector...

2022-02-24 11:13:01 178

原创 netty reactor模型

netty是reactor模型的变种主从一主多从netty线程模型图一主多从bossgroup一个线程负责接收连接workergroup 多个线程负责收发数据client的soketchanne一旦建立,会被注册到wrokergroup的一个selector主从...

2022-02-24 09:42:24 131

原创 1. Hashmap底层数据结构,以及hash寻址的原理性问题?

hashmap底层就是一个数组,为了存储更多的数据他会在数组的桶位1.7 数组+ 列表1.8+数组+列表+红黑树存放寻址从put方法开始,关键put时先判断table是否为空,空的话会用扩容,默认16容量不为空的话,计算数组下标计算方式hashcode(&)与上length-1final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) {

2022-02-23 17:20:42 238

原创 nio原理

nio关键是selector(多路复用器)epoll原理三个关键函数epollCreat创建一个epoll实例,并返回一个非负数作为文件描述符(Linux系统一切皆文件)epollCtl会调用Linux操作系统EPOLL_CTL调用EPOLL_CTL才会真真监听evnt事件epollWaitslector内部有两个集合就绪事件列表rdlistchannel集合1.注册调register会把socketchannel和serverSocketChannel放到channel集

2022-02-23 16:27:51 856

原创 线程死锁及解决方案

线程死锁的四个必要条件如果在一个系统中以下四个条件同时成立,那么就能引起死锁:互斥性:线程对资源的占有是排他性的,一个资源只能被一个线程占有,直到释放。请求和保持条件:一个线程对请求被占有资源发生阻塞时,对已经获得的资源不释放。不剥夺:一个线程在释放资源之前,其他的线程无法剥夺占用。循环等待:发生死锁时,线程进入死循环,永久阻塞。解决方法:互斥性,可用ThreadLocal请求和保持条件,踢掉一个(结束一个)不剥夺,trylcok,加个超时时间,抢不到释放资源分布式锁,可以用DB

2022-02-23 13:24:11 3167

空空如也

空空如也

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

TA关注的人

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