写点什么

ARTS 打卡 第 8 周

用户头像
引花眠
关注
发布于: 2020 年 07 月 20 日

ARTS 简介

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

Algorithm k 个一组翻转链表

力扣(LeetCode)25. K 个一组翻转链表

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例:

给你这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5

说明:

你的算法只能使用常数的额外空间。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

解题思路:

这到题与上一题有些相似,但有不同,上一题是本题的特例,就是 k=2,所以解题思路可以参考,但是么词查找需要转换的节点的前一个节点有点费时,换一种思路

  1. 把链表分为 k 个元素一组的子链表,然后将这个子链表反转,然后再反转下一个子链表

  2. 需要注意的是,在翻转子链表时,要注意需要保存首节点与首节点的前一个节点,否则翻转之后不能链接

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */class Solution {     public ListNode reverseKGroup(ListNode head, int k) {        if (head == null || k == 1) {            return head;        }        ListNode ans = new ListNode(0);        ans.next = head;        ListNode pre = ans;//pre指向head的前一个节点        ListNode kthN = head;        int count = 0;        while (kthN != null) {            count++;            if (count % k == 0) {                pre = reverse(pre, kthN.next);                kthN = pre.next;            } else {                kthN = kthN.next;            }        }
return ans.next; }
/** * * @param pre * k个节点的子链表的首节点的前一个节点 * @param kthNodeNext * k个节点的子链表的尾节点的下一个节点 * @return */ private static ListNode reverse(ListNode pre, ListNode kthNodeNext) { ListNode first = pre.next;//保存第一个节点 ListNode prev = pre; ListNode curr = pre.next; ListNode next = curr.next; while (curr != kthNodeNext) { //reverse curr.next = prev; //next prev = curr; curr = next; if(next != null){ next = next.next; } } pre.next = prev; first.next = curr;//现在第一个节点应该是k个节点中的最后一个节点了 return first; }}
复制代码

Review 微服务架构模式系列

学习-微服务架构模式系列,网站地址是:https://microservices.io

微服务架构-Pattern: Shared database

这篇文章的主要介绍了微服务架构下如何进行持久化:共享数据库

强制要求:

  1. 松耦合

  2. 某些业务跨多个服务

  3. 某些业务查询涉及的数据跨多个服务

  4. 某些查询需要聚合多个服务的数据

  5. 数据系统能够很容易复制和共享,以扩大规模

  6. 不同的服务有不同的数据存储要求

解决方法:

多个服务共享一个数据库,通过每个服务自由的访问其他服务涉及的表,使用本地事物保证一致性。

好处

  1. 使用本地事物保持一致性,实现简单

  2. 一个数据库操作比较简单

缺点

  1. 开发耦合 其他服务都要访问同一个表,改变表结构困难

  2. 运行耦合 一个服务可能影响其他服务的运行

  3. 每一个服务需要的数据库类型可能不一致

Tips Linux 中查看文件内容的方法

记录我对于 Linux 的学习,文件相关的命令:

ps:”~” 表示为 home 目录,”.” 则是表示目前所在的目录,”..” 则表示当前目录的上一层目录

-h 用人类可读的格式展示(G(千兆字节),M(兆字节),K(千字节)),大部分命令有这个参数


cat 最常用的方式是将文件一次性全部输出到标准输出,或者将几个文件合并为一个文件

cat [-AbeEnstTuv] [–help] [–version] fileName

cat b.txtcat a.txt b.txt > c.txt
复制代码

more 与 cat 类似,不过是以分页的形式输出,按空格可以向前,按 b 可以退后,

格式:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]

常用参数:

-num 一次显示的行数

+num 从第 num 行开始显示

-s 当遇到有连续两行以上的空白行,就代换为一行的空白行

more b.txtmore +20 b.txt
复制代码

less 与 more 类似,但使用 less 可以随意浏览文件,可以使用方向键控制方向,而且 less 在查看之前不会加载整个文件。

格式:less [options] filename

常用参数:

-e 当文件显示结束后,自动离开

-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件

-i 忽略搜索时的大小写

-m 显示类似 more 命令的百分比

-N 显示每行的行号

-s 显示连续空行为一行

#显示行号less -N b.txt## 分页显示进程信息ps -aux | less
复制代码

ps: more 与 less 的不同

  1. less 提供了更丰富的控制方式,比如可以按键盘上下方向键显示上下内容,more 不能通过上下方向键控制显示

  2. less 不必读整个文件,加载速度会比 more 更快

  3. less 退出后 shell 不会留下刚显示的内容,而 more 退出后会在 shell 上留下刚显示的内容

head 查看文件的开头部分的内容

格式:head [options] filename

常用参数:

-q 隐藏文件名

-v 显示文件名

-c<数目> 显示的字节数。

-n<行数> 显示的行数,默认为 10,即显示 10 行的内容

head b.txt
复制代码

tail 查看文件的最后的内容,常用于查阅正在改变的日志文件

格式:tail [options] filename

-f 循环读取 常用于查阅正在改变的日志文件

-q 不显示处理信息

-v 显示详细的处理信息

-c<数目> 显示的字节数

-n<行数> 显示文件的尾部 n 行内容

tail -f xxx.log
复制代码

Share

最近对 Java 虚拟机的探索使用 HSDB 查看 jvm 内存,可能会有不足之处,之后会根据理解继续修改。


发布于: 2020 年 07 月 20 日阅读数: 59
用户头像

引花眠

关注

还未添加个人签名 2018.06.11 加入

还未添加个人简介

评论

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