- 博客(25)
- 收藏
- 关注
原创 二叉树的修改与构造
二叉树的修改与构造文章目录二叉树的修改与构造1. "226. 翻转二叉树"2. “105. 从前序与中序遍历序列构造二叉树”3. "[ 从中序与后序遍历序列构造二叉树](https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/)"4. “[654. 最大二叉树](https://leetcode-cn.com/problems/maximum-binary-tree/)”5. “
2021-08-08 19:14:28 323
原创 二叉树的属性
二叉树的属性文章目录二叉树的属性1. “101. 对称二叉树”2. “104. 二叉树的最大深度”3. “111. 二叉树的最小深度”4. “222. 完全二叉树的节点个数”5. “110. 平衡二叉树”6. "257. 二叉树的所有路径"7. "404. 左叶子之和"8. "513. 找树左下角的值"9. "112. 路径总和"1. “101. 对称二叉树”先来想一下如果我们要人工的判断一棵树是否是对称的,我们会怎么做?肯定是首先判断根节点的左子树是否等于根节点的右子树,然后如果相等再判断左子
2021-08-07 22:27:25 497
原创 二叉树的遍历
二叉树的遍历1. “144. 二叉树的前序遍历”递归解法:class Solution { private List<Integer> ans = new ArrayList<>(); public List<Integer> preorderTraversal(TreeNode root) { dfs(root); return ans; } private void dfs(TreeNode
2021-08-06 20:56:12 121
原创 LeetCode-单调栈
单调栈1. “739. 每日温度”https://github.com/youngyangyang04/leetcode-master/blob/master/problems/0739.%E6%AF%8F%E6%97%A5%E6%B8%A9%E5%BA%A6.mdclass Solution { public int[] dailyTemperatures(int[] temperatures) { Deque<Integer> stack = new Link
2021-08-06 20:55:33 198
原创 LeetCode-贪心算法
贪心算法文章目录贪心算法1. “455. 分发饼干”2. “1005. K 次取反后最大化的数组和”3. "860. 柠檬水找零"序列问题4. "376. 摆动序列"5. “738. 单调递增的数字”股票问题6. “122. 买卖股票的最佳时机 II“7. ”714. 买卖股票的最佳时机含手续费“两个维度权衡问题8. "135. 分发糖果"9. "406. 根据身高重建队列"区间问题10. ”55. 跳跃游戏“11. "45. 跳跃游戏 II"12. "452. 用最少数量的箭引爆气球"13. "435.
2021-08-04 22:21:13 803 1
原创 动态规划之打家劫舍
动态规划之打家劫舍文章目录动态规划之打家劫舍1. "198. 打家劫舍"2. "198. 打家劫舍(变种:输出路径)"3. "213. 打家劫舍 II"4. "337. 打家劫舍 III"1. “198. 打家劫舍”[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qcieTkVK-1627915876727)(https://z3.ax1x.com/2021/08/02/fSf64s.png)]dp数组定义:dp[i]代表偷窃0~i号房屋所能获得的最大金额递推公式:偷
2021-08-02 22:52:15 1628
原创 动态规划之子序列
动态规划之子序列文章目录动态规划之子序列不连续子序列1. “300. 最长递增子序列”2. "1143. 最长公共子序列"3. "1035. 不相交的线"连续子序列4. "674. 最长连续递增序列"5. "718. 最长重复子数组"6. "53. 最大子序和"编辑距离7. “115. 不同的子序列”8. “583. 两个字符串的删除操作”9. “72. 编辑距离“回文10. “516. 最长回文子序列”11. “647. 回文子串”12. “5. 最长回文子串”不连续子序列1. “300. 最长递增
2021-08-01 23:48:19 536 1
原创 动态规划之股票问题
动态规划之股票问题文章目录动态规划之股票问题1. “121. 买卖股票的最佳时机”2. “122. 买卖股票的最佳时机 II”3. “123. 买卖股票的最佳时机III”4. “188. 买卖股票的最佳时机 IV”5. “309. 最佳买卖股票时机含冷冻期”6. “714. 买卖股票的最佳时机含手续费”1. “121. 买卖股票的最佳时机”](https://i0.hdslb.com/bfs/album/a10d1c5b8ea00e9379a0b2b8439d2330b62962a6.png)首先确
2021-07-29 16:33:43 306
原创 Dubbo--消息派发
Dubbo消息派发Dubbo服务器端接受到消息后会解析请求得到消息,消息有五种派发策略all(默认):所有消息都派发到业务线程池中执行direct:所有消息都放在IO线程上执行message:只有请求和响应消息派发给业务线程池执行,其他消息(包括连接和断开连接)都在IO线程上执行connection:连接和断开连接在IO线程上执行,其他消息都派发给业务线程池execution:只有请求消息派发给业务线程池,其他消息派发给业务线程池首先查看NettyServer这个类,NettyServer
2021-07-26 22:51:38 296
原创 @Mapper和@Reference
关于Mybatis中的@Mapper以及Dubbo中的@Reference文章目录关于Mybatis中的@Mapper以及Dubbo中的@Reference@Mapper@Mapper总结@Reference@Reference总结在应用层面,在Mybatis中的@Mapper以及Dubbo中的@Reference有着异曲同工之妙。在Mybatis中,在Dao接口上加上@Mapper注解,就可以通过@Autowired注入bean,而XML文件通常放在resource目录中;在Dubbo中,consum
2021-07-22 22:26:59 290
原创 HashMap以及concurrentHashMap剖析
文章目录HashMap红黑树扩容HashMap在多线程下的问题concurrentHashMap为什么concurrentHashMap是弱一致性的?在JDK1.8之后HashMap以及concurrentHashMap的实现与JDK1.7中非常不同,JDK1.8对此进行了很大的优化,尤其是coucurrentHashMap。在1.8中,concurrentHashMap的结构与HashMap已经非常的相似了,我们先来看看HashMap。HashMapHashMap的主干是一个Entry数组,一个En
2020-12-24 22:23:20 583
原创 JUC并发包源码阅读之读写锁
文章目录写锁读锁锁降级关于读写锁的概念我们都非常熟悉,读锁是共享的,多个线程可以同时获取多个读锁,而写锁是排他的,并且在有线程持有读锁时,不能获得写锁,反之也一样。这在mysql中也是类似的,但在java中读写锁可以进行锁降级,锁降级就是当线程拥有写锁时,这时他要获得读锁,就不会释放写锁再获得读锁,而是这个写锁降级成为读锁。这个特性十分重要,在下面会有详细的介绍。写锁下面先来看看写锁的获取,写锁的lock()方法会调用acquire()方法 public final void acquire(int
2020-12-21 22:53:26 184
原创 JUC并发包源码阅读之await()和signal()
await()在java多线程中,有多种方式等待、唤醒,有wait()和notify以及await()和signal(),wait()和notify()是在Object中使用的,通常用于synchronized,而await()和signal()通常在lock()中使用。线程在获得锁的前提下,调用await()会使线程释放锁并加入到Condition等待队列阻塞,直到接收到signal()命令,重新加入到同步队列。除了使用方法上的不同,两种还有特性上的不同,在等待队列中的线程可以响应中断,而wait()不
2020-12-18 21:23:54 432 2
原创 JUC并发包源码阅读之ReetrantLock.lock()
JUC并发包源码阅读之ReetrantLock.lock()我们从代码最顶层开始看起,ReetrantLock默认实现的是NonfairSync,NonfairSync的lock()方法如下,非常简单/*** Performs lock. Try immediate barge, backing up to normal* acquire on failure.*/final void lock() { if (compareAndSetState(0, 1)) //尝试cas获取锁,如果s
2020-12-17 12:22:35 91
原创 多线程并发原子性、可见性、有序性的实现
文章目录JMM是什么如何解决可见性?volatile的底层实现如何解决原子性?通过总线锁定保证原子性通过缓存锁定保证原子性java中通过锁和循环CAS保证原子性使用循环CAS实现原子操作CAS实现原子操作的三大问题如何解决有序性?as-if-serial语义happens-before重排序数据依赖性和控制依赖性数据依赖性控制依赖性内存屏障LoadLoad屏障StoreStore屏障LoadStore屏障StoreLoad屏障java中内存屏障的使用volatile获取锁和释放锁final域顺序一致性内存模
2020-12-14 20:29:37 712
原创 关于Mysql——索引,事务,锁
文章目录索引MyISAM的特点InnoDB的特点锁表锁行锁意向锁插入意向锁行锁的实现事务undo logredo log隐藏字段关于InnoDB中隔离性的介绍MVCC多版本控制ReadView可见性比较算法ReadView在RC和RR间的差异索引在MySQL中常用的有两种引擎,InnoDB和MyISAM。MyISAM的特点不支持事务,只支持表级锁(这是大部分情况下不使用MyISAM的原因)B+树叶子节点存储的是数据指针,所以因此可知MyISAM的索引文件和数据文件是分开存储的,对于MyISAM,
2020-12-03 19:28:53 425
原创 MYSQL调优:查询
《高性能MYSQL》阅读笔记这里将介绍在执行查询过程中,MYSQL服务器将会做的一些操作。语句解析器和预处理MYSQL将通过语句解析器将SQL语句进行解析,生成一棵对应的“解析树”,MYSQL解析器将通过使用MYSQL语法规则和验证解析查询。查询优化器语法树被认为是合法后,由优化器将其转化成执行计划。一条查询可以有多种执行计划,这些不同的执行计划最后得出的结果都是相同的,查询优化器的作用就是在这些不同的执行计划之间找出最好的一种执行计划。MSQL使用基于成本的优化器,它将预测一个查询使用某种.
2020-06-19 10:22:19 136
原创 MYSQL调优:高性能索引
创建高性能的索引《高性能MYSQL》阅读笔记索引的优点索引大大减小了需要检索的数据量避免了排序和临时表将随机I/O变为顺序I/O索引类型B-TREE索引大多数存储引擎都支持B-TREE索引,但是InnoDB使用B+TREE。不同的存储引擎具体实现B-TREE的方式也不尽相同。例如,MyISAM使用前缀压缩减小索引存储空间,而InnoDB使用原数据格式保存。并且MyISAM使用数据的物理地址引用被索引的数据,而InnoDB根据主键引用被索引的行。B-TREE索引的有效类型1.全值匹
2020-06-18 18:06:48 125
原创 MYSQL调优:数据类型优化
如何选择合适的数据类型?1.数据类型尽量小一般情况下,应该尽量选择可以正确处理数据的最小数据类型,更小的数据类型占用更小的CPU缓存,内存和磁盘,处理时需要的CPU周期也更小。2.尽量简单简单数据类型的操作通常需要更少的CPU周期,例如,整形比字符串操作代价更低,存储时间时应该使用数据库内建的类型(date,time,datetime)而不是使用字符串。3.尽量避免使用NULL通常情况下,尽量指定类为NOT NULL,除非真的需要存储NULL。因为当表中存储的数据有NULL时,MYSQL更难进行
2020-06-17 18:01:39 201
原创 详解redis:Sentinel哨兵机制
《Redis设计与实现》笔记Sentinel是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。一、Sentinel的启动当一个Sentinel启动时,它将执行以下步骤:1)初始化服务器因为Se...
2020-03-31 13:50:18 179
原创 详解redis:主从复制功能
《Redis设计与实现》笔记用户可以通过SLAVEOF命令或设置slaveof选项,让一个服务器复制另一个服务器,复制的服务器被称为从服务器(slave),被复制的叫做主服务器(master)。主从服务器保存相同的数据库状态。那么从服务器怎么复制主服务器呢?redis从2.8开始通过PSYNC命令进行复制,PSYNC命令具有完整重同步和部分重同步两种模式:一、完整重同步完整重同步用于...
2020-03-30 17:37:23 97
原创 详解redis:RDB持久化和AOF持久化
《Redis设计与实现》笔记RDB持久化通过保存数据库中的键值对来记录数据库状态,而AOF持久化通过保存Redis服务器执行的写命令来记录数据库状态一、RDB的创建和载入有两个命令可以生成RDB文件,一个是SAVE,一个是BGSAVE。SAVE命令会阻塞服务器进程,直到RDB文件完成创建,在服务器阻塞期间,服务器不能处理任何命令请求。BGSAVE命令会派生出一个子进程,然后由子进程...
2020-03-30 13:46:04 104
原创 详解redis:对象和数据结构
《Redis设计与实现》笔记redis并没有直接使用数据结构来实现键值对数据库,而是将数据结构封装成对象来使用,对象包含字符串对象,列表对象,哈希对象,集合对象和有序集合对象这五种类型的对象,数据结构包含链表,字典(底层由hash实现),跳跃表,整数集合,压缩列表。接下来将逐一介绍这些对象和数据结构。对象的类型和编码redis中每一个键对值都包含两个对象,一个对象为键对象(一般为字符串对...
2020-03-29 21:36:34 168
原创 RocketMQ学习笔记:Broker故障延迟机制
RocketMQ学习笔记:Broker故障延迟机制Broker故障延迟机制是什么《RocketMQ技术内幕》学习笔记Broker故障延迟机制是什么当producer发送消息失败并且开启了重试机制(retryTimesWhenSendFailed=true或retryTimesWhenSendAsyncFailed=true),接下来将会重新选择消息队列,那么是如何进行重新选择消息队列的呢...
2020-03-25 15:24:08 2042 4
原创 RocketMQ学习笔记:NameServer路由中心
RocketMQ学习笔记:NameServer路由中心NameServer简介路由元信息路由注册路由删除路由发现《RocketMQ技术内幕》学习笔记NameServer简介如上图所示,broker启动时向所有NameServer发送心跳请求,producer在发送消息前向NameServer获取broker地址列表,并通过负载均衡算法从列表中选择一台broker进行消息发送。NameSe...
2020-03-24 18:28:54 356
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人