写点什么

ARTS 打卡 第 30 周

用户头像
引花眠
关注
发布于: 2021 年 02 月 08 日

ARTS 简介

Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。


Algorithm

力扣(LeetCode)79. 单词搜索


给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。


board =[  ['A','B','C','E'],  ['S','F','C','S'],  ['A','D','E','E']]
给定 word = "ABCCED", 返回 true给定 word = "SEE", 返回 true给定 word = "ABCB", 返回 false
提示:
board 和 word 中只包含大写和小写英文字母。1 <= board.length <= 2001 <= board[i].length <= 2001 <= word.length <= 10^3
复制代码


解题思路:这道题是典型的深度优先搜索遍历,但是有需要注意的地方:、


  1. 需要从每个位置开始搜索遍历

  2. 结束条件如果字符不相等,那么直接返回 false 如果搜索的字符串长度与字符长度想等则返回 true


class Solution {    /**     * 对当前节点四个方向的模拟 是一个非常有用的技巧     */    private static int[][] directions = { { 0, 1 }, { 0, -1 }, { 1, 0 }, { -1, 0 } };
public boolean exist(char[][] board, String word) { if (board == null || board.length == 0 || board[0].length == 0 || word == null) { return false; } int rowLen = board.length; int colLen = board[0].length; boolean[][] visited = new boolean[rowLen][colLen]; for (int row = 0; row < rowLen; row++) { for (int col = 0; col < colLen; col++) { if (dnf(board, visited, row, col, word, 0)) { return true; } } } return false; }
/** * board[row][col]为起点 * * @param board * @param visited * @param row * @param col * @param word * @param indexOfWord * @return */ private boolean dnf(char[][] board, boolean[][] visited, int row, int col, String word, int indexOfWord) { if (board[row][col] != word.charAt(indexOfWord)) { return false; } if (indexOfWord == word.length() - 1) { return true; } visited[row][col] = true;
boolean result = false; int rowLen = board.length; int colLen = board[0].length; for (int[] dir : directions) { int nextRow = row + dir[0]; int nextCol = col + dir[1]; if (nextRow >= 0 && nextRow < rowLen && nextCol >= 0 && nextCol < colLen) { if (!visited[nextRow][nextCol]) { boolean flag = dnf(board, visited, nextRow, nextCol, word, indexOfWord + 1); if (flag) { result = true; break; } } } } visited[row][col] = false; return result; }
}
复制代码


ps:参考资料


  1. 《剑指Offer:名企面试官精讲典型编程题(第2版)》

  2. labuladong 的算法小抄

  3. labuladong的算法小抄-实体书


Review

学习-微服务架构模式系列,网站地址是:https://microservices.io 微服务架构-Pattern: Pattern: Idempotent Consumer 这篇文章的主要介绍了微服务架构下的通信模式:幂等消费者 背景:当使用消息代理(比如消息队列)时,一般会保障至少一次投递,但是这有一个副作用可能会投递多次。


问题:如何处理重复的消息


解决方法,使用幂等消费值,有些处理者本身就是幂等的,但是有些不是,需要通过记录消息的处理来达到幂等。


ps:《微服务架构设计模式》


Tips

记录我对于 Linux 的学习,网络管理的命令:


ps:“~” 表示为 home 目录,“.” 则是表示目前所在的目录,“…” 则表示当前目录的上一层目录 -h 用人类可读的格式展示(G(千兆字节),M(兆字节),K(千字节)),大部分命令有这个参数


ps

ps 显示了每个进程的资源使用情况 用法: ps [options] 不过因为历史原因,在不同的 Linux 系统还有 Unix 系统上,ps 的命令语法各不相同,所以目前的 ps 命令融合了不同派系的使用方法,ps 命令支持三种使用的语法格式


  1. UNIX 风格,选项可以组合在一起,并且选项前必须有“-”连字符

  2. BSD 风格,选项可以组合在一起,但是选项前不能有“-”连字符

  3. GNU 风格的长选项,选项前有两个“-”连字符


一般情况下可以混用,但是可能会有冲突 常用选项:


  1. -a 显示所有当前进程

  2. -e 显示系统所有进程

  3. -u 后接 euid 或 name 显示指定用户的进程

  4. -l:长格式显示更加详细的信息

  5. -f 格式化信息列表

  6. a 在 BSD 风格下,显示自己的进程

  7. x 在 BSD 风格下,显示没有控制终端的进程

  8. u 显示进程的归属用户及内存的使用情


从上面的描述我们能看到 aux 与 -aux 这两种参数组合的意义完全不同,在 man 文档中有如下描述:


Note that “ps -aux” is distinct from “ps aux”. The POSIX and UNIX standards require that “ps -aux” print all processes owned by a user named “x”, as well as printing all processes that would be selected by the -a option. If the user named “x” does not exist, this ps may interpret the command as “ps aux” instead and print a warning.This behavior is intended to aid in transitioning old scripts and habits. It is fragile, subject to change, and thus should not be relied upon.大致意思是:请注意"ps -aux"不同于"ps aux"。POSIX和UNIX的标准要求"ps -aux"打印用户名为"x"的用户的所有进程,以及打印所有将由-a选项选择的过程。如果用户名为"x"不存在,ps的将会解释为"ps aux",而且会打印一个警告。这种行为是为了帮助转换旧脚本和习惯。它是脆弱的,即将更改,因此不应依赖。
复制代码


ps #默认情况    PID TTY          TIME CMD1216874 pts/0    00:00:01 zsh1280028 pts/0    00:00:00 ps
复制代码


结果默认会显示 4 列信息。


PID: 运行着的命令(CMD)的进程编号 TTY: 命令所运行的位置(终端) TIME: 运行着的该命令所占用的 CPU 处理时间 CMD: 该进程所运行的命令


#显示用户进程 标准风格:  ps -e  ps -ef  ps -eF  ps -ely
#显示用户进程 BSD 风格: ps ax ps axu
复制代码


Share

最近在极客时间报名了训练营,时间有点不充分,后期会补上的。最近的学习编程范式简介


发布于: 2021 年 02 月 08 日阅读数: 10
用户头像

引花眠

关注

还未添加个人签名 2018.06.11 加入

还未添加个人简介

评论

发布
暂无评论
ARTS打卡 第30周