自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1711)
  • 资源 (3)
  • 论坛 (1)

原创 LeetCode 450 Delete Node in a BST(二叉搜索树中的删除结点)

问题:给出一个二叉搜索树,删除指定的结点,要求返回删除后的树。算法思路:1、删除的结点是叶子结点,则直接删除2、删除的结点只有一个子结点(左孩子右孩子),则直接用子结点替换3、删除的结点左右孩子结点都有,则找到右孩子的最小结点,与当前结点替换,然后在右孩子中删除最小结点具体代码参考:https://github.com/wuli2496/OJ/tree/master/LeetCode/450%20Delete%20Node%20in%20a%20BST...

2020-10-24 10:41:33 5

原创 rocketmq中producer设计与实现

1、类层次结构

2020-10-21 23:05:15 9

原创 NameServer的总控逻辑

NameServer接收其它角色报上来的状态,然后根据请求返回相应的状态。首先把执行线程池创建好,默认是8个线程。同时创建一个ScheduledExecutorService,周期性执行两个任务,一个是10s扫描失效的broker,一个是10m打印配置信息。创建负责网络通信的NettyRemotingServer,负责监听broker,producer,consumer发过来的请求,根据请示的命令来调用不同的processor来处理。这些不同的处理逻辑放到上面初始化的线程池中执行。this.remot

2020-10-19 21:43:12 8

原创 面向对象的特征

1、抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是数据抽象,二是过程抽象。数据抽象:就是用代码的形式表示现实世界中一类事物的特性,就是针对对象的属性。抽象出来的称作属性或者成员变量。过程抽象:就是用代码的形式表示现实世界中事物的一系列行为,就是针对对象的行为特征。抽象出来的一般就是方法。2、继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表

2020-10-18 22:06:53 9

原创 NameServer的启动

NamesrvStartup是模块的启动入口,NamesrvController是协调模板的功能1、解析命令行参数主要 是-c和-p参数。-c指定配置文件,包含NamesrvConfig及NettyServerConfig,这两个类方法的set方法指定的属性,在没有指定NettySeverConfig的监听端口时,默认监听端口是9876。-p来指定是否打印配置项,在指定些选项时,直接退出。public static NamesrvController createNamesrvControl.

2020-10-18 20:35:35 16

原创 rocket mq整体架构

1、体系结构(1)名称服务器:主要 是存储broker及topic元数据,并且给producer,consumer提供查询broker信息(2)broker :主要是存储消息,接收producer消息存储,consumer从这里取消息(3)producer:主要是向broker发送由业务应用生成的消息(4)consumer:主要是从broker拉取消息,将其输入业务应用2、整体流程(1)启动NameServer,起来后监听端口,等待producer,broker,consum

2020-10-18 15:43:49 31 1

原创 LeetCode 443 String Compression(双指针)

问题:给出一个字符串,对其压缩。对于连续出现的字符,用字符+出现次数来表示。单个情况时,数字1可以省略。思路:使用ancher来表示检查的起始位置,遍历时记录不相同的位置,此时作压缩替换。具体代码参考:https://github.com/wuli2496/OJ/tree/master/LeetCode/443%20String%20Compression...

2020-10-18 14:11:59 6

原创 LeetCode 316 Remove Duplicate Letters(删除重复字符)

问题:给出一个字符串,要求删除重复字符,字典序是最小并且保持字符的相对位置。思路:方法一,使用递归算法,在出现只出现一次的前缀字符串中确定最小字符,然后在剩下的子串中递归。方法二,使用栈做,先记录每个字符最后出现的位置。当字符小于栈顶字符时,并且位置小于栈顶字符最后出现位置,则出栈。具体代码参考:https://github.com/wuli2496/OJ/tree/master/LeetCode/Remove%20Duplicate%20Letters相似问题:1081. Smal

2020-10-18 13:18:17 10

原创 resultMap和resultType的区别

resultMap返回的列名与bean的属性名可以不一致,resultType则要求一致。就具体代码作分析。对于指定resultMap属性,直接读取字符串,而对于指定resultType会解析为具体的类.在使用MappedStatement.Builder设置resultMaps时,对于 resultMap使用逗号作分隔符,得到resultMap列表,而对于resultType只是构建单个resultMap(设置type为resultType的类,resultMappings为空列表)加入到resu

2020-10-13 22:20:30 17

原创 mybatis中sqlSession的设计与实现

sqlSession基于工厂方法来实现的,SqlSession和SqlSessionFactory的接口定义如下public interface SqlSession extends Closeable { /** * Retrieve a single row mapped from the statement key. * @param <T> the returned object type * @param statement * t

2020-10-12 22:34:41 25

原创 Floyd cycle算法

问题:对一个链表,判断是否有环。存在环时,求出环的起始位置及环长度使用快慢指针1、判断是否有环,快指针移动两步,慢指针每次移动一步,看快慢指针是否会相遇2、环的起始位置如上图所示,假设快慢指针相遇点为离环起始位置 b,快指针移动距离为a+(b+c)n+b,慢指针移动距离为a+b,则有a+(b+c)*n+b=2(a+b) => a = (n-1)(b+c) + c。为什么慢指针在第一圈时就相遇?因为假设在环起始位置时,环长度为L,快指针在环上位置为b',慢指针经过c'相遇,则有c'

2020-10-11 20:11:07 14

原创 LeetCode Linked List Cycle II(floyd cycle)

问题:给出一个链表,可能存在环,要求输出环的起点位置思路:使用Floyd cycle algorithm具体代码参考:https://github.com/wuli2496/OJ/tree/master/LeetCode/Linked%20List%20Cycle%20II

2020-10-11 10:29:54 12

原创 mybatis中 Executor的设计与实现

Executor的接口定义为public interface Executor { ResultHandler NO_RESULT_HANDLER = null; int update(MappedStatement ms, Object parameter) throws SQLException; <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, Res

2020-10-09 21:30:40 12 1

原创 mybatis中statementHandler的设计与实现

StatementHandler接口定义为Statement prepare(Connection connection, Integer transactionTimeout) throws SQLException; void parameterize(Statement statement) throws SQLException; void batch(Statement statement) throws SQLException; in

2020-10-07 22:45:55 10

原创 mybatis中KeyGenerator的设计与实现

key Generator主要是用于insert操作,其接口定义为public interface KeyGenerator { void processBefore(Executor executor, MappedStatement ms, Statement stmt, Object parameter); void processAfter(Executor executor, MappedStatement ms, Statement stmt, Object parameter

2020-10-06 15:19:51 19

原创 mybatis中ResultSetHandler的设计与实现

ResultSetHandler主要处理statement,cursor,callstatement三种类型的结果集,其接口定义如下:public interface ResultSetHandler { <E> List<E> handleResultSets(Statement stmt) throws SQLException; <E> Cursor<E> handleCursorResultSets(Statement stmt) t

2020-09-22 22:46:53 58

原创 mybatis对mapper.xml的解析(三)

mybatis中对语句的解析使用了组合模式,针对不同的sql结点处理抽象出了SqlNode。详细的设计图为

2020-09-20 19:24:37 32

原创 mybatis对mapper.xml的解析(二)

对select,insert,update,delete的解析是通过buildStatementFromContext来完成的,具体的解析是XMLStatementBuilder来完成的.1、解析语句中的includeXMLIncludeTransformer在解析include节点时,首先找到refid引用的节点,同时解析子节点property的name,value值对。接着在refid的引用的节点上应用applyIncludes递归调用。递归完后,用引用节点替换indlude节点。将引用节点的子

2020-09-17 21:36:44 17

原创 mybatis对mapper.xml的解析(一)

对于mapper配置文件的解析是通过XMLMapperBuilder来完成的,其主要是解析结点为mapper下的结点public void parse() { if (!configuration.isResourceLoaded(resource)) { configurationElement(parser.evalNode("/mapper")); configuration.addLoadedResource(resource); bindMappe

2020-09-16 22:37:56 10

原创 mybatis中config.xml文件的解析

config.xml文件的解析是主要是XMLConfigBuilder完成的,通过调用parseConfiguration来实现整个解析过程public Configuration parse() { if (parsed) { throw new BuilderException("Each XMLConfigBuilder can only be used once."); } parsed = true; parseConfiguration(pars

2020-09-14 23:16:24 24

原创 mybatis中缓存的设计与原理

缓存是基于装饰器设计模式来设计的,接口为Cache,实现类为PerpetualCache,具体的装饰器有基于淘汰策略的、对象引用类型的、序列化的、事务的、同步的、日志的(记录缓存命中率)、时间调度的。具体的类层次图如下...

2020-09-10 21:59:44 30

原创 mybatis中的mapper设计与原理

mapper是基于动态代理来设计的,其类图如下在MapperRegistry添加mapper时,会基于注解作解析public <T> void addMapper(Class<T> type) { if (type.isInterface()) { if (hasMapper(type)) { throw new BindingException("Type " + type + " is already known to the M

2020-09-09 22:37:24 30

原创 mybatis中的TypeHandler设计与实现

TypeHandler主要是用在从java数据写入数据库时,从数据库中读取数据时的从java到jdbc类型之间的转换。其类层次图为

2020-09-03 22:02:28 30

原创 UVa1491 - Compress the String(dfs)

问题:给出短字符串个数n,每个短字符串的长度上限L(1),L(2),...,L(n),一个长字符串s,问长字符串s是否可以压缩成n个字符串。思路:使用dfs,首先枚举当前字符串片段的长度,在确定了字符串片段长度后,枚举字符串片段的值,因为在填充数字时,要求只能是当前字符串后面的字符串片段索引。在确定了字符串填充后,看压缩后的字符串长度是否与原来字符串相等。具体代码参考:https://github.com/wuli2496/OJ/tree/master/UVa/1491%20Compress%2

2020-08-16 21:28:29 55

原创 LeetCode Path Sum III(前缀和)

问题:给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数思路:前缀和,用prefixSum来记录和为sum的个数c.初始时prefixSum(0)=1。路径总数等于到达当前结点的路径数+左、右子结点计算的路径总数。在更新prefixSum时,注意在出栈时数据的恢复。

2020-08-15 14:21:37 53

原创 LeetCode Find Right Interval(二分)

问题:给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的“右侧”。对于任何区间,你需要存储的满足条件的区间 j 的最小索引,这意味着区间 j 有最小的起始点可以使其成为“右侧”区间。如果区间 j 不存在,则将区间 i 存储为 -1。最后,你需要输出一个值为存储的区间值的数组。注意: 你可以假设区间的终点总是大于它的起始点。 你可以假定这些区间都不具有相同的起始点。思路:第一种方法暴力法,时间复杂度...

2020-08-15 14:09:37 53

原创 LeetCode Non-overlapping Intervals(dp,greedy)

问题:给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。思路:第一种方法使用动态规划,首先基于左端点排序。用 dp(i)表示在第i个区间时不重叠区间的数。则有dp(i) = max(dp(j) + 1),其中j属于[0,i),并且j与i不重叠。也可以基于右端点排序。第二种方法使用贪心法。首先基于左端点排序。如果前一区间与当前区间不重叠,则...

2020-08-15 13:50:15 37

原创 LeetCode Flatten a Multilevel Doubly Linked List(dfs)

问题:多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。思路:在遍历链表时,使用哨兵结点。在dfs时,如果当前结点为null,则返回前驱结点。否则将当前结点与前驱结点使用next,prev拼接起来。处理当前结点与children结点,同时再处理尾结点与当前结点的next结点具体代码

2020-08-15 12:25:33 47

原创 LeetCode Minimum Genetic Mutation(dfs,bfs)

问题:一条基因序列由一个带有8个字符的字符串表示,其中每个字符都属于 "A", "C", "G", "T"中的任意一个。假设我们要调查一个基因序列的变化。一次基因变化意味着这个基因序列中的一个字符发生了变化。例如,基因序列由"AACCGGTT" 变化至 "AACCGGTA" 即发生了一次基因变化。与此同时,每一次基因变化的结果,都需要是一个合法的基因串,即该结果属于一个基因库。现在给定3个参数 — start, end, bank,分别代表起始基因序列,目标基因序列及基因库,请找出能够使

2020-08-15 12:15:17 20

原创 LeetCode N-ary Tree Level Order Traversal(bfs)

问题:给出一个n叉树,输出层次遍历思路:bfs具体代码参考:https://github.com/wuli2496/OJ/tree/master/LeetCode/N-ary%20Tree%20Level%20Order%20Traversal

2020-08-15 12:08:51 17

原创 LeetCode Construct Quad Tree(dfs)

问题:给出一个n*n由0和1组成的二维数组,用四叉树来表示网格。要求返回四叉树的根结点。(1)如果当前网格值相同,则是叶子结点,将网格值赋值给结点(2)如果当前网格值不同,则不是叶子结点,结点值可以为True或者False(3)递归处理子网格作为其子结点思路:根据定义做就可以了。具体代码参考:https://github.com/wuli2496/OJ/tree/master/LeetCode/Construct%20Quad%20Tree...

2020-08-15 12:04:25 16

原创 LeetCode Longest Repeating Character Replacement(滑动窗口)

问题:给出一个由大写字母构成的字符串,可以对字符串最多作k次操作,将一个字符转换为另外一个字符。找出操作后最长的重复子串思路:使用滑动窗口,及用一个长度为26的数组记录字符个数。初始时,窗口大小为0,即left=right,在遍历时,如果更新字符计数及当前最大重复字符长度。如果滑动窗口大小大于(可变换的k次操作+最大重复字符长度),则将滑动窗口向右移动,即left+1,同时更新滑动窗口内的字符计数。具体代码参考:https://github.com/wuli2496/OJ/tree/mast

2020-08-15 11:33:56 22

原创 LeetCode Maximum XOR of Two Numbers in an Array(贪心、字典树)

问题:给出一个非空的整数数组,找到最大的两个数的异或值。要求时间复杂度为O(n)思路:根据二进制表示的前缀。 先求出最大数的位数,然后根据位数作位操作异或判断最大值。由于要求时间复杂度为O(n),在判断当前位数表示最大值时,先根据上一次求出的最大值作出假定,假定此次可能的最大值是上一次的值左移+1,在每次计算时,将对应数的相应位数的前缀放入hash集合中,在遍历前缀时,判断假定的最大值与当前前缀异或结果是否在集合中,如果在,说明假定的最大值是成立的,更新最大值。另外一种方法是使用字典树。具体代码

2020-08-15 11:20:43 31

原创 LeetCode Battleships in a Board

问题:给出一个二维数组,计算有多少个战舰。战舰用X表示,空槽用.表示。(1)假定是一个合法的甲板,由战舰和空槽表示。(2)战舰水平放置或者垂直放置。形状为1XN或者NX1(3)没有相邻的战舰思路:遍历过程上中,如果遇到.直接继续,如果当前为X,并且左边或者上边也是X则直接继续,否则个数加1具体参考:https://github.com/wuli2496/OJ/tree/master/LeetCode/Battleships%20in%20a%20Board...

2020-08-15 10:44:15 23

原创 mybatis从MapperStatement到PreparementStatement的过程

//MappedStatementpublic BoundSql getBoundSql(Object parameterObject) { BoundSql boundSql = sqlSource.getBoundSql(parameterObject); List<ParameterMapping> parameterMappings = boundSql.getParameterMappings(); if (parameterMappings == null.

2020-08-12 22:33:07 87

原创 Mybatis的解析模块基础

mybatis的基于配置文件的解析是基于XPathParser,在解析String类型时,会通过PropertyParser来做的,在解析时结合GenericTokenParser和TokenHandler来处理,TokenHandler是通过实现类VariableTokenHandler处理,其类结构图为...

2020-08-09 21:46:13 40

原创 ControlAdvice和ExceptionHandler处理异常的原理与设计

此两个注解的联合使用来处理异常时返回码的处理。其是怎么来实现的?处理异常是在DispatcherServlet的processHandlerExceptionprotected ModelAndView processHandlerException(HttpServletRequest request, HttpServletResponse response, @Nullable Object handler, Exception ex) throws Exception { //

2020-07-21 22:28:39 96

原创 AQS框架

1、框架其类结构扩展点为有两种资料共享方式:Exclusive和Share结点状态5种CANCELED(1):表示结点已取消调度SIGNAL(-1):表示后继结点在等待当前结点唤醒,后继结点入队时,会将前继结点状态更新为SIGNALCONDITION(-2):表示结点等待在Condition上,当其它线程调用Condition的signal方法后,CONDITION状态的结点将从等待队列转移到同步队列中。等待获取同步锁PROPAGATE(-3):在共享模式下,前继结点不仅

2020-07-05 21:59:11 864

原创 LeetCode Pacific Atlantic Water Flow(flood fill)

问题:给出一个二维数组,数组中的元素非负。左边和上边表示大平洋,右边和下边表示大西洋。水可以向上下左右四个方向流动,但是要求不高于它。要求输出可以到达两大洋的坐标思路:因为从高到不高于当前位置的位置流动,最综到达两大洋,可以反过来考虑。从四个边开始,从低到不低于其位置流动。具体代码参考:https://github.com/wuli2496/OJ/tree/master/LeetCode/Pacific%20Atlantic%20Water%20Flow...

2020-07-01 22:51:39 59

原创 LeetCode Partition Equal Subset Sum(动态规划)

问题:给出一个数组,问是否可以分成两个子集,其和相等思路:首先要求数组和是偶数,然后用动态规划来求。用dp(i,j)表示第i步时和为j是否可行,则有dp(i,j)= dp(i-1,j) || dp(i-1, j - nums[i]),其中j >= nums[i]具体代码参考:https://github.com/wuli2496/OJ/tree/master/LeetCode/Partition%20Equal%20Subset%20Sum...

2020-07-01 22:40:48 88

flash精彩实例chm

介绍flash基本操作以及mtv制作和as

2009-11-20

Linux C编程一站式学习

添加了GFDL许可证,正式网络发布。第三部分还很粗糙,错误也有不少,有待改进。第一部分和第二部分已经比较成熟,第二部分还差三章没写。

2009-09-11

Ubuntu Linux实用学习教程.pdf

Ubuntu 完全基于 Linux 操作系统, 可以免费得到社区及专业机构的支持。庞大的社区是它成长的沃土,请向这片动人的热忱敞开心扉。

2009-09-11

kgduu的留言板

发表于 2020-01-02 最后回复 2020-01-02

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