ARTS 第三周分享
每周完成一个ARTS(也就是 Algorithm、Review、Tip、Share 简称ARTS):
- 每周至少做一个 leetcode 的算法题
- 阅读并点评至少一篇英文技术文章
- 学习至少一个技术技巧
- 分享一篇有观点和思考的技术文章。
Algorithm
Given the coordinates of four points in 2D space, return whether the four points could construct a square.
The coordinate (x,y) of a point is represented by an integer array with two integers.
Input: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
Output: True
思路:以某点(如 p1)为顶点,确定与其他三点的距离是否满足等边及勾股定理。
如果满足,轮换顶点(一般三个点即可,轮换四个点更稳妥)
1 | import org.junit.Assert; |
LeetCode 647. Palindromic Substrings
Given a string, your task is to count how many palindromic substrings in this string.
The substrings with different start indexes or end indexes are counted as different substrings even they consist of same characters.
Input: “abc”
Output: 3
Explanation: Three palindromic strings: “a”, “b”, “c”.
Input: “aaa”
Output: 6
Explanation: Six palindromic strings: “a”, “a”, “a”, “aa”, “aa”, “aaa”.
思路:求回文子串的个数,使用动归时边找边统计。
1 | import org.junit.Test; |
LeetCode 491. Increasing Subsequences
Given an integer array, your task is to find all the different possible increasing subsequences of the given array, and the length of an increasing subsequence should be at least 2 .
Example:
Input: [4, 6, 7, 7]
Output: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]
思路:使用 DFS 以及 visited 数组去重。
1 |
|
Review
Database Caching With Redis and Java
我们对缓存的要求主要有两点:
- 缓存部分数据,等待命中;
- 保持缓存跟 DB 的数据一致性。
- 主要解释了数据库的几种缓存策略:
- Read-Through Caching Strategy(直读缓存机制)。优先从缓存中读取,若没取到,则查 DB,同时将查到的数据在缓存中存一份。特点:适合读任务多的场景。比如新闻网站等的数据,会被大量阅读而不是修改。第一次从缓存中取数据时常常会失败,开发者可以考虑提前缓存一部分可能的热点数据。
- Write-Through Caching Strategy(直写缓存机制)。优先写入缓存,然后立即再写入 DB。
- Write-Behind Caching Strategy(写回缓存机制)。优先写入缓存,延后写回 DB 中。适合于写任务多的场景。特点:通常是由数据被替换出缓存时,才会被写到 DB 中;缺点:一旦断点,数据无法找回。
- 使用 Redisson 作为客户端的缓存操作(其将数据放入 Map 中)。
- 直读缓存机制中,若缓存未命中,则会通过
MapLoader
对象进行载入; - 直写缓存机制中,只有当缓存跟 DB 的数据都被
MapWriter
对象更新完成之后,才会退出 update 方法。 - 写回缓存机制中,同样使用
MapWriter
接口来完成异步更新,可以设置writeBehindThreads
参数来表示执行写操作的线程数量。
- 直读缓存机制中,若缓存未命中,则会通过
- 总结:Redisson 中的
RMap
,RMapCache
,RLocalCachedMap
,RLocalCachedMapCache
四个对象都支持上述策略,后两者的读操作更快一些。
Tip
今天分享一个在 Mac 电脑上使用 workflow (也叫自动操作)功能的实践。
自动化你的工作很重要!!
效果:自动改变图片分辨率,主要用来应对图片尺寸过大的问题。
步骤:
- 设置 workflow,如下图:
说明:将图片拖入 pics 文件夹中,此 workflow 会将图片缩放到1440像素,然后处理后的图片会在桌面上出现。上面的文件夹名称跟像素都可以按个人喜好设置。
- 如果需要修改此 workflow,如下图,在你的 pics 文件夹处右键,进入“文件夹操作设置”,就可以继续修改自定义的 workflow 了。
Share
本周分享的是最近写的一份代码实现,主要是关于类加载过程解读的,请点击下方链接查看: