ARTS 07 - 使用 supervisor 配置 ngrok 内网穿透为守护进程
是提出来的一个打卡任务。每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西!我希望这个事可以给大家得到相应的算法、代码、技术和影响力的训练。
这是我的第七周打卡。这周在做文档的在线预览功能时用到了微软的 Office API,需要它能够访问到文件的地址,所以得在公网上才能使用这个功能。在本地调试的时候,就不太方便了。所以想到了使用 ngrok 来做一个内网穿透,并把它添加到操作系统的守护进程中,就可以一直使用了。
Algorithm
描述:

题解:
思路一:使用迭代
使用迭代的思路跟之前所有链表的解法大同小异,主要是通过画图的方式来理清节点之间的关系。遍历整个链表,将当前节点的 next 指向它的 prev 即可。
function reverseList(linkedList) {
//定义三个指针:前一个节点,当前节点,下一个节点
let prev = null
let curr = linkedList
let nextTemp
while (curr != null) {
//存储下一个节点
nextTemp = curr.next
//把当前节点的next设置为prev
curr.next = prev
//当前节点变成上一个节点
prev = curr
//下一个节点变成当前节点
curr = nextTemp
}
return prev
}
时间复杂度:
思路二:使用递归
递归的解法自己想半天没有想明白,官方的题解看了很久才看懂。主要感觉平时算法基本都是用迭代比较多,递归的思想并没有理解很透彻,练得也比较少。在网上找了一篇文章:,里面刚好举了一个反转链表的例子,讲得比较通俗易懂。
function reverseList(head) {
if (head == null || head.next == null) return head
const p = reverseList(head.next)
head.next.next = head
head.next = null
return p
}
时间复杂度:
Review
这篇文章讲的是关于 里的 的一些小技巧。在日常使用中,掌握这些小技巧往往能让我们事半功倍。
目前接触比较多的有以下几个Tips:
获取帮助
Elixir 在 iex 中内置了语言的帮助文档,这种做法十分棒。开发者不用跳到外部去翻阅各种资料,直接敲一个命令就可以查看语法了。比如: 就可以显示 模块的语法。

重新编译项目或模块
# 重新编译整个项目
iex> recompile
# 编译具体的模块
iex> r MinitwitterWeb.PostController
.iex.exs 文件
在项目中新建一个 文件,里面可以写一些 、 语句,在 中就可以直接使用了
alias Minitwitter.Accounts.User
alias Minitwitter.Accounts.Relationship
iex> Relationship
Minitwitter.Accounts.Relationship
在 iex 中加载 module 或 script
使用 命令可以在 中编译文件
iex> c "lib/issues.ex"
iex> c "./elixir_book.exs"
多行写法
在命令行中,通常写一行再按 键就会直接执行了,对于多行的写法我们可以借助括号来实现
iex(16)> ([1, [2], 3] <-- Works fine when surrounded by parenthesis
...(16)> |> List.flatten()
...(16)> )
[1, 2, 3]
另外有一些之前没有接触过的,但感觉使用也蛮频繁的:
列出模块中所有的宏和函数
使用 或者
iex> exports Minitwitter.Accounts
iex> Minitwitter.Accounts.module_info
列出模块中所有的类型
iex(4)> t Enum <-- Lists all types in Enum module
@type acc() :: any()
@type default() :: any()
@type element() :: any()
@type index() :: integer()
@type t() :: Enumerable.t()
获取历史命令的值
如果上一个命令的结果没有赋值给一个变量,那么我们想获取它就比较麻烦了。 提供了 ,我们可以使用它来获取历史命令的值。
iex(5)> Enum.reverse([1, 2, 3])
[3, 2, 1]
iex(6)> reversed = v(5)
[3, 2, 1]
iex(7)> reversed
[3, 2, 1]
Tip
正则表达式在开发中偶尔会用到,所以平时这方面的知识比较欠缺。每次想写一个正则匹配,都是各种查资料,这次干脆花点时间重新学习了一下,主要是位置的匹配。
Share
这周做了一个使用 Office 在线预览文档的功能,需要 Office 的在线预览 API 能够访问到文件的地址。在本地调试的时候,可以使用 来做一个内网穿透,就不用上到公网上去测试了。