题目描述见:点击跳转
解析思路
leetcode 中国中的一个中等难度面试题——把数字翻译成字符串,是一个较为简单的动态规划问题(虽然简单我也不会呀)。
咋一看这个题目描述是懵逼的,思考 10 分钟无果,果断看了解题思路,豁然开朗。
假设数字的长度为$n$,第$i$个数为$x_i$,长度为$n$的数字结果为$f(n)$
我们开始找规律:
众所周知,消息队列是应用系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有 ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ.
但是如果你不想为你的系统引入一个重量级(相对 redis 来说)的 mq,但是想要享受解耦、异步消息等特性,通过本文你就 get 到了,通过 redis 实现一个简单版的 mq。
利用 redis 的队列结构来实现消息队列。redis 单个队列最多支持 2*32-1 条数据,对于大部分应用是完全够用的。
简单来说就是:
注意:代码仅供个人尝鲜使用,请勿用于真实生产环境
代码仅可在 springboot 环境中使用
注解代码如下:
1 | @Target(ElementType.TYPE) |
被该注解修饰的类,将会接收 topic 下的消息。
接口代码如下:
1 | public interface RedisConsumer { |
本接口用于定于接受消息的处理方法。
本部分为核心代码,首先需要获取代码中被注解修饰的类,然后建立一个循环从 redis 队列中取数据,最后调用类对象的 deal 方法消费消息,如果 deal 方法抛出错误,认为消费失败,重新将该数据放入队列中。
1 | /** |
run 方法在 spring 扫描完毕后调用,通过实现ApplicationRunner
接口实现,通过 spring 的方法来获取所有被MqConsumer
接口注解的类(否则需要自己写类加载器)。数据汇总完毕后使用一个线程来进行无线循环从 redis 队列中取数据。
1 | private Runnable loop() { |
loop 方法无限循环根据 topic 从 redis 中取数据,如果取到数据,调用 pushTask 方法执行,如果执行报错将会进行数据回补。
完整代码见本文结尾
运行项目后调用,MainController
中的接口即可测试。
完整代码:github
本文原创发布于:手把手教你用 redis 实现一个简单的 mq 消息队列
通常情况下当 npm 无法下载依赖时,我们使用 cnpm 就够了。但是总是存在特殊情况的:
那就需要给 npm 设置代理了
npm 原生支持 http 代理,直接设置即可
1 | # 假设本地代理端口为8080 |
npm 不支持 socks 代理,但是我们可以用一个工具将 http 代理转成 socks 代理,然后将 npm 代理地址设置到这个工具的地址。
1 | # 假设本地socks5代理端口为8081 |
相当于又加了一个中间层,将 http 转成 socks。
1 | npm config delete proxy |
最近写的一个个人项目(传送门:全终端云书签)中需要用到全文检索功能,目前 mysql,es 都可以做全文检索,mysql 胜在配置方便很快就能搞定上线(参考这里),不考虑上手难度,es 在全文检索方面是完胜 mysql 的。
最后决定使用 es。使用最新的 7.2 版本。java 客户端使用 es 官方的 high level client(官方文档),为什么用这个有以下几点原因:
本文主要内容如下:
总集篇:react 实战之多人聊天室
上一篇搭建了 reat 的环境,本篇正式开始编码了。先实现以下三个通用功能:
鉴于本人设计水平有限(抠脚),所以这三个页面的风格将参考简书网页版。
打开简书的注册页和登录页发现结构都是一样的,背景加上中间的输入框,如下图所示:
观察登录、注册两个页面的结构可以发现真正变化的部分只有中间的表单,所以我们可以将表单外的其他部分作为一个公共布局给这些页面来复用。
总览篇:react 实战之云书签
本篇是实战系列的第一篇,主要是搭建 react 开发环境,在create-react-app
的基础上加上如下功能:
注意:需要 node 版本大于 8.0.
1 | npm install -g create-react-app |
1 | create-react-app bookmark-world |
一个合格的全栈开发怎么能不会 react 呢?所以从现在开始系统的学习 react 开发。目标:完成完成一个云书签,包含前后台。
基于create-react-app
进行开发,选择这个框架有以下两个原因:
antd pro
,umi.js
这类开箱即用的,隐藏了太多细节,也不考虑。今天在开发中遇到了这样一个问题,antd 的 table 组件,在内容太多时会折行显示,如何才能让它不折行并且用省略号显示超出内容呢?
可以同给给单元格设置这样的 css 来达到效果:
1 | /* 设置最大宽度,不能用width */ |