自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

崔显龙的博客

简约至上

  • 博客(64)
  • 问答 (1)
  • 收藏
  • 关注

原创 赛马问题分析

最坏情况:C2全场第2名,C3全场第3名,则还需要C4与此时全场第4名进行一场比赛,确定最终的全场第4名,共计比赛11场。若J2未获取第2名,则需要J3与当前第3名进行第12场比赛,决出第3名(即全场第4名),共计12场;最好情况:C3未获得全场前3名位置,则C4必定不是全场前4名,则比赛结束,共计比赛10场;若全程都是情况三(最坏情况),则需要增加3场比赛,得出第2-4名次,最终比赛12场;保留:C2有可能成为第2-4名,C3有可能成为第3-4名,C4有可能成为第4名。

2020-08-20 22:22:26 757

原创 ElasticSearch 学习笔记:聚合(Aggregation) - Top Hits

聚合后,每一个聚合Bucket里面仅返回指定顺序的前N条数据。

2020-02-21 13:19:26 13038 1

原创 Spring Boot 学习笔记:请求参数解析与返回数据处理

在刚刚使用 Spring 的时候,经常会有些疑问:(1)Spring 是如何帮我们把请求数据自动解析绑定到 Controller 方法入参?(2)Spring 是如何将 Controller 返回结果处理成 Response 返回给调用方的?(3)@RequestBody、@ResponseBody是干什么用的?(4)HttpMessageConverter、Converter有什么关系和区别?

2019-11-24 19:58:34 1622 1

原创 后端项目结构管理

结合个人工作经验,对后端项目模块结构管理有一些见解,通过博文记录一下,欢迎各位博友指导。

2019-11-03 16:02:00 1741 1

原创 Java 踩坑记录

当原包装类属性为null时(age==null),拆箱操作导致NullPointerException异常。不同浏览器对数值长度有不同的限制,导致数值会被截取掉部分内容(后面部分二进制位1变成0),最终显示错误。目前没有找到根本解决方案,临时方案是提供String类型字段,将长数值以字符串类型返回给前端展示。Functions是com.google.common.base包中的类,使用了错误的类方法。Integer包装类在遇到操作符==时,会先进行拆箱操作,然后获取实际数值进行比较;

2019-11-03 14:52:34 1187 1

原创 Git:分支管理

结合个人工作经验,对代码分支管理有一些见解,通过博文记录一下,欢迎各位博友指导。

2019-10-30 15:56:40 1482 1

原创 随记:真伪随机数

在Java中,可以通过 Random 构造一个对象,用于生成随机数。在构造方法中,可以传入一个 long 类型的 seed 参数作为“种子”,内部会基于这个“种子”来生成随机数,代码如下:long seed = System.currentTimeMillis();Random random = new Random(seed);random.nextInt(); // 生成一个随机i...

2019-09-10 16:51:17 574 1

原创 Java i++ 与 ++i 原理

记得大学期间学习C语言的时候,对于 i++ 和 ++i (i-- 和 --i)的理解,一直似懂非懂的状态,因为很多人给出的解释都不够严谨,比如:i++是在操作之后增加,而++i是在操作之前增加。但是,如何确定“操作”的时间点呢?由于平时使用的时候,没有出现过什么问题,为了代码的可读性,也不会刻意写一些“看似很牛X”的复杂且冗长的代码,这个问题也就没有去深究。今天突然心血来潮,想弄清楚其中的原理,并以此文作为记录。

2019-08-30 11:22:29 16454 5

原创 Spring Boot 学习笔记:启动过程方法

【代码】Spring Boot 学习笔记:启动过程方法。

2019-08-20 13:30:12 247 1

原创 图论-广度遍历:单词接龙

给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。中文版 LeetCode 127题 - 单词接龙 问题。转换过程中的中间单词必须是字典中的单词。如果不存在这样的转换序列,返回 0。每次转换只能改变一个字母。所有单词只由小写字母组成。(源自LeetCode)所有单词具有相同的长度。字典中不存在重复的单词。

2019-08-05 14:53:49 273 1

原创 Git:使用多个账号(ssh-key)

问题背景工作使用的时候,使用公司的GitLab仓库,仓库域名为gitlab.biz.domain,员工账号为[email protected];维护个人项目的时候,使用GitHub仓库,仓库域名为github.com,个人账号为[email protected];两个仓库都通过ssh-key验证,本地git提交代码时,可以根据需要,使用不同的key,提交至不同的仓库。解决方案本地生成两套...

2019-08-01 20:54:02 701 1

原创 随记:判断是否更新字段

问题背景:在封装通用的数据库操作类时,对于“增、删、查”的编码没有太大问题,但是对于“改(更新)”,却出现了一个问题。在首次存储一条记录时,可以将目标对象的所有字段值原样存入即可,有值则存值,为null则存null。但在更新的时候,对于为null的字段,如何区分是“不更新该字段”,还是“将该字段更新为null”?当然,可以先进行一次读取操作,然后在修改DTO对象的字段值,最终完全覆...

2019-07-12 14:51:05 1163

原创 链表:快慢指针

快慢指针法是链表算法中常用的一种方法,通过两个步长不同的移动指针,可以帮助解决一些链表中的问题。通常,慢指针每次移动一个节点,快指针每次移动两个节点,因此,二者的路径存在一个二倍的数学关系(偶数节点情况下)。

2019-07-09 13:41:49 1149 2

原创 最小堆:TopK问题

在解决TopK问题时,综合各方面考虑,最小堆方案比较好,其时间复杂度为O(n*lgK),空间复杂度为O(K)。(1)构造一个大小为K的最小堆,用于存储当前TopK元素,堆顶为TopK元素中最小的元素,即第K个元素;由于空间复杂度取决于K值,因此,可应用于大量流数据的TopK问题(无法将全部数据载入内存的情况)。(2)每读入一个元素,与堆顶元素比较,若大于堆顶元素,则替换堆顶元素,并将新的堆顶元素进行排序。

2019-06-13 16:16:23 1371 2

原创 状态机:只出现一次的数字II

以二进制数的角度考虑每一个数组元素,统计每一个二进制位上出现1的次数并对3取模(相当于:重复元素出现3次会被抵消清零),最终可以得到只出现一次的元素的二进制位情况,例如:对于 [ 9, 2, 2, 3, 2, 9, 9] 数组,其二进制位统计情况如表所示。通过观察,对于 nb1 的关系表达式,有公共项 ~ob2 可以提取,即 nb1 = ~ob2 & (ob1 & ~input | ~ob1 & input)注释:标红部分为计数增加的情况,由于取值范围为 0-2,因此,2 + 1 = 0。

2019-05-26 19:42:12 570 1

原创 动态规划:单词拆分

给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被拆分为一个或多个在字典中出现的单词。(2)然后,从剩余部分开始,继续遍历寻找子字符串,若某子串str2为字典里的某个单词,则str1+str2部分满足条件;(1)首先,从开始位置,遍历寻找子字符串,若某子串str1为字典里的某个单词,则str1部分满足条件;其中,绿色部分表示当前步骤找到的满足条件的子字符串,黑色部分表示之前步骤确定的满足条件的子字符串部分。下面,通过图解方式,来描述该问题的动态规划思路。

2019-05-16 19:46:59 1510 1

原创 回溯算法(试探算法)

以此类推,当最后一个满足条件的子字符串结束位置正好在原字符串 s 结尾处,则表示正好将原字符串 s 分割为多个回文子串,即该分割方案是满足条件的一个解。)是一种按指定策略遍历所有可能路径的方法,在遍历的过程中,找出所有满足条件的解。每走一步,判断当前情况是否满足条件,若满足条件,则在该路径上继续试探,若不满足条件,则回溯(回退)至上一步,然后换一条路径继续试探。例题:给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。由于该题需要找到所有满足条件的方案,因此,使用回溯算法进行求解。

2019-05-16 10:48:25 961 1

原创 动态规划:鸡蛋掉落

你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X <= N)。通过上述方案,可以找到题目的答案,但是,无法通过 LeetCode 检测,因为耗时超过限制。由于鸡蛋的数量在寻找过程中是变化的,即某一步骤的鸡蛋数量,取决于前一步骤的鸡蛋是否破碎。,因此,对于 1 <= X <= N 的所有解,应该取最小的一个解,即。

2019-05-15 13:48:57 2422 1

原创 Java 8 日期、时间与格式化

本文目录1 Instant2 ZoneId3 LocalDateTime4 ZonedDateTime5 关系图解6 时间格式化7 相关文章1 InstantInstant 表示基于世界标准时间(UTC)的时间线上的某一个时间点,通常用作事件的时间戳。Instant 取值为 基于世界标准时间 从1970/01/01 00:00:00.000 到 某一...

2019-05-13 18:32:50 10362 6

原创 异或(^)的性质与应用

本文目录1 基本概念2 异或应用3 相关文章1 基本概念1.1 符号异或是一种二进制的位运算,符号以XOR 或 ^ 表示。1.2 运算规则相同为0,不同为1,即1 ^ 1 = 00 ^ 0 = 01 ^ 0 = 1由运算规则可知,任何二进制数与零异或,都会等于其本身,即 A ^ 0 = A。1.3 异或性质(1)交换律: ...

2019-05-10 16:06:28 88012 11

原创 Java动态代理

Proxy 利用 InvocationHandler 动态创建一个符合指定接口的代理实例,用于代理某个实现了指定接口的目标类的实例。(2)在 handler 的 invoke 方法中,通过反射机制,调用了目标实例 target 的相应方法,从而完成代理功能;(1)当通过 proxy代理实例 调用某接口方法时,内部实际调用的是 handler 的 invoke 方法;proxy 相当于创建了一个目标类接口的模板,target 则是实现了接口方法的目标类的实例。proxy 表示代理了目标类接口的代理实例。

2019-04-24 16:29:30 221

原创 Spring Boot 学习笔记:MongoTemplate 移除 _class 字段

使用 Spring Boot 中 MongoTemplate 插入数据的时候,会将对象类型以 _class 字段一起存入MongoDB数据库。若不想存入 _class 数据,就需要从MongoTemplate入手,移除相应逻辑。通过Google和Baidu搜索到的方法,都是通过自定义MongoDbFactory和MongoTemplate的方式,在生成相应Bean的时候,最终以nul...

2018-07-26 21:08:20 5104 6

原创 MongoDB 学习笔记:Sharded Cluster

Shard Key(片键)由文档中的一个或多个字段组成,Shard Key 中的字段必须是某个索引的前缀,即至少需要创建一个索引,且该索引以 Shard Key 作为前缀字段,或该索引仅包含Shard Key字段。当各Shard上的数据量不均衡时,超过某个阈值,将会引发Chunk的迁移操作,数据量过多的Shard中的部分数据,将会以Chunk为单位,迁移至其它Shard中,以达到各Shard相对均衡的状态。Router本身不存储数据,而是用于请求的路由,将请求分发至相应的Shard节点。

2018-07-23 10:35:43 1588 1

原创 Spring Boot 学习笔记:Schedule

可通过实现SchedulingConfigurer接口并重写configureTasks方法,对定时任务进行属性设置,或得到Registrar对象。· 是否有访问外部系统,但未设置超时时长情况:例如,Http访问、Email发送等。· 日志信息从哪里开始中断,判断出现问题的范围;· 是否有异常信息,是否由异常导致程序停止;· 是否某个定时任务中存在死循环;

2018-07-16 12:08:02 914 1

原创 ElasticSearch 学习笔记:常用内容

通过 search_after 关键词分页查询,实际在各分片中,将直接根据上一项值,查询到各分片的下一页数据,然后只需要汇总各分片下一页数据(数量由 size 决定)并排序,根据最终排序返回结果。在程序中,统一使用别名对索引进行访问,当索引发生变动时,无需修改程序代码,仅需要创建新索引(例如:demo-index-v2),导入旧索引数据,并将旧索引别名迁至新索引即可。因此,建议索引名称增加版本号(例如:demo-index-v1),同时,为索引创建别名(例如:demo-index)。

2018-06-21 15:31:14 725 1

原创 Spring Boot 学习笔记:以JSON格式返回对象

方式一:@RestController注解类方式二:@Controller注解类@ResponseBody注解方法作为Controller返回值的对象类,必须拥有相应字段的Getter和Setter方法。否则,无法自动转化为JSON格式字符串,导致异常。同时,还可以通过JSON相关注解,对类的字段进行一些定制化,例如:@JsonIgnore 忽略某字段@JsonProperty 指定对应的JSON字段名称网络上有很多关于这方面的介绍,因此,不再赘述。

2018-06-16 17:12:21 2505 1

原创 Metrics 简介

定期将Metric Registry对象发送至监控服务器,即定期将其中存放的所有Metric对象发送给监控服务器。记录1次,增加一个计时值duration记录,单位由unit指定;最近1/5/15分钟,每秒mark的指数加权移动平均值;获取75/95/98/99/99.9百分位记录值。自创建Meter时起,平均每秒mark多少次;自创建Meter时起,一共mark多少次;结束计时,记录1次,增加一个计时值记录;获取其中最小值/最大值/中位值/平均值。详见Meter对应方法。获取指定百分位记录值。

2018-01-29 16:51:16 3685 1

原创 位运算:减法与补码

为保证运算操作简单,计算机处理器被设计为只能进行加法操作,因此,需要将减法操作转为加法操作。由于取模计算特性可知,对于减法操作,可以找到一个相应的正数,通过加上这个正数,到达与原减法操作结果相同的刻度位置。而这个正数值,正是原负数的补码的数值部分。由于一个刻度位置,可对应正负两个数值(仅考虑合法范围内的数值),因此,需要通过符号位来确定最终结果。

2018-01-27 12:44:01 3289

原创 ElasticSearch 学习笔记:Mapping

若不指定search_analyzer,则默认使用analyzer指定分词器,即创建文档和查询时,使用相同的分词器。search_analyzer指定查询时,查询条件中,该查询字段值用哪种分词器进行分词处理;指明该字段值是否被单独存储在ES中,从而,可以独立于_source存储,进行单独获取。若激活该功能,ES会将所有字段值拼接在一起,以空格分隔,保存在一个大的字符串中。指定是否保存用户传递的原始JSON文档数据,在查询时,可返回相应的数据。analyzer指定创建文档时,用哪种分词器对字段进行分词处理;

2018-01-25 12:05:11 534 1

原创 ElasticSearch 学习笔记:Multi Search

批量查询接口(Multi Search API)允许在一次请求中执行多个查询操作,并将查询结果一起返回。

2018-01-23 15:57:11 9719 2

原创 ElasticSearch 学习笔记:Reindex

internal 表示迁移全部数据 且 完全覆盖冲突文档(即使目标索引文档版本新于源索引文档)。external 表示迁移全部数据 且 更新旧版本冲突文档。注意:若需要向已存在的索引迁移数据,则不需要创建新的索引。create 表示仅创建目标索引不存在的文档。inline:ES 5.6版本之前;source:ES 5.6版本及以后。

2018-01-16 17:30:35 3215 1

原创 Maven:build标签

<!-- build根标签 --><build> <!-- 指定打包文件名称(可用于除去jar文件版本号) --> <finalName>maven-build-demo</finalName> <!-- 指定过滤资源目录 --> <filters> <filte...

2018-01-03 14:57:41 6332

原创 Spring Boot 学习笔记:常见注解

若在入口类已使用 @SpringBootApplication 或 @EnableAutoConfiguration 注解,则无需通过 @Import 导入其它 @Configuration 注解的类,Spring Boot 框架会自动扫描并导入这些 @Configuration 注解的类。在Spring启动阶段,自动扫描指定路径下的文件,将@Configuration、@Component、@Controller、@Service、@Repository注解的类加入到Bean清单。

2017-12-29 23:16:53 395 1

原创 约束校验浅析

使用了表达式语言(Expression Language),依赖于javax.el:javax.el-api.jar和org.glassfish.web:javax-el.jar两个包。在Spring Boot项目中,tomcat-embed-el集成了el和el实现类,因此,不需要pom.xml添加依赖的el相关包。提供对Java Bean Validation的具体实现,并提供额外的约束接口及实现。元素必须是一个数字,其值必须大于等于指定的最小值。元素必须是一个数字,其值必须大于等于指定的最小值。

2017-12-29 20:45:05 629

原创 Maven依赖问题

1 加载顺序根据dependency顺序加载,若存在相同Class,则先加载的Class生效。2 Tomcat与Servlet在Spring Boot中内置了Tomcat相关包,在内置的Tomcat中,包含Servlet相关类。由于某种原因,先加载了低版本的Servlet类,可能会导致Tomcat启动失败。例如:内置Tomcat 8.5版本,依赖Servlet ...

2017-12-29 13:02:15 217

原创 SLF4J使用简介

Slf4J(Simple Logging Façade for Java),即简单日志门面,提供统一的日志调用接口,但并未提供相应的具体实现。应用程序启动时,动态绑定具体的日志框架,例如:log4j、logback、java.util.logging等。

2017-12-29 12:42:37 1643 1

原创 Log4j2使用简介

在接口实现中对ServletContext添加了Log4jServletContextListener,log4jConfigLocation默认为/WEB-INF/log4j2.xml。在Servlet 3.0及以后版本中,Servlet提供了ServletContainerInitializer接口,在Servlet容器初始化阶段执行该接口。应用中使用log4j2日志框架,通过适配器,实现log4j2底层转调slf4j接口。应用中使用slf4j日志框架,绑定log4j2作为接口的具体实现。

2017-12-28 10:38:03 712

原创 图解ThreadLocal工作原理

多线程操作同一对象情况,如图所示:使用ThreadLocal定义的变量,将指向当前线程本地的一个LocalMap空间。ThreadLocal变量作为key,其内容作为value,保存在本地。多线程对ThreadLocal对象进行操作,实际上是对各自的本地变量进行操作,不存在线程安全问题,如图所示:...

2017-12-24 23:11:18 1547 1

原创 Spring Boot 学习笔记:图解 Spring MVC 启动顺序

在学习 Spring 的过程中,对其启动过程并不是很了解,因而导致对整体的启动流程没有一个很好的全局观。通过学习和查询资料,大概梳理了一下 Spring MVC 框架的启动过程,对整体流程有一个初步的认识。若有任何问题,欢迎指点纠正,以免误导他人。...

2017-12-24 22:04:43 1006

原创 java.util.concurrent.atomic

本文目录1 Compare And Swap(CAS)2 Atomic1 Compare And Swap(CAS)CAS是一种无锁的非阻塞算法。CAS是一种乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个可以更新变量的值,其它线程都将失败,并继续尝试更新。在CAS中有3个操作数:内存值V,预期旧值A,新值B。当且仅当预期旧值A与内存值...

2017-11-27 12:58:29 262

空空如也

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

TA关注的人

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