ARTS 07 - 使用 supervisor 配置 ngrok 内网穿透为守护进程

用户头像
jerry.mei
关注
发布于: 2020 年 08 月 16 日
ARTS 07 - 使用 supervisor 配置 ngrok 内网穿透为守护进程


ARTS左耳朵耗子提出来的一个打卡任务。每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西!我希望这个事可以给大家得到相应的算法、代码、技术和影响力的训练。



这是我的第七周打卡。这周在做文档的在线预览功能时用到了微软的 Office API,需要它能够访问到文件的地址,所以得在公网上才能使用这个功能。在本地调试的时候,就不太方便了。所以想到了使用 ngrok 来做一个内网穿透,并把它添加到操作系统的守护进程中,就可以一直使用了。



Algorithm



206. 反转链表



描述:



题解:



思路一:使用迭代



使用迭代的思路跟之前所有链表的解法大同小异,主要是通过画图的方式来理清节点之间的关系。遍历整个链表,将当前节点的 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
}



时间复杂度:O(n)



思路二:使用递归



递归的解法自己想半天没有想明白,官方的题解看了很久才看懂。主要感觉平时算法基本都是用迭代比较多,递归的思想并没有理解很透彻,练得也比较少。在网上找了一篇文章:为什么你学不会递归?告别递归,谈谈我的一些经验,里面刚好举了一个反转链表的例子,讲得比较通俗易懂。



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
}



时间复杂度:O(n)



Review



A Collection of Tips for Elixir’s Interactive Shell (IEx)



这篇文章讲的是关于 Elixir 里的 Iex 的一些小技巧。在日常使用中,掌握这些小技巧往往能让我们事半功倍。



目前接触比较多的有以下几个Tips:



  • 获取帮助



Elixir 在 iex 中内置了语言的帮助文档,这种做法十分棒。开发者不用跳到外部去翻阅各种资料,直接敲一个命令就可以查看语法了。比如: h Enum 就可以显示 Enum 模块的语法。

  • 重新编译项目或模块

# 重新编译整个项目
iex> recompile
# 编译具体的模块
iex> r MinitwitterWeb.PostController



  • .iex.exs 文件



在项目中新建一个 .iex.exs 文件,里面可以写一些 aliasimport 语句,在 iex 中就可以直接使用了

alias Minitwitter.Accounts.User
alias Minitwitter.Accounts.Relationship
iex> Relationship
Minitwitter.Accounts.Relationship



  • 在 iex 中加载 module 或 script



使用 c/1 命令可以在 iex 中编译文件

iex> c "lib/issues.ex"
iex> c "./elixir_book.exs"



  • 多行写法



在命令行中,通常写一行再按 Enter 键就会直接执行了,对于多行的写法我们可以借助括号来实现

iex(16)> ([1, [2], 3] <-- Works fine when surrounded by parenthesis
...(16)> |> List.flatten()
...(16)> )
[1, 2, 3]



另外有一些之前没有接触过的,但感觉使用也蛮频繁的:



  • 列出模块中所有的宏和函数



使用 exports 或者 module_info

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 提供了 v ,我们可以使用它来获取历史命令的值。

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



分享文章:使用 supervisor 配置 ngrok 内网穿透为守护进程



这周做了一个使用 Office 在线预览文档的功能,需要 Office 的在线预览 API 能够访问到文件的地址。在本地调试的时候,可以使用 ngrok 来做一个内网穿透,就不用上到公网上去测试了。



发布于: 2020 年 08 月 16 日 阅读数: 43
用户头像

jerry.mei

关注

Coding is ARTS 2019.01.03 加入

全栈工程师,技术作者,关注大前端、web全链路研发等领域 个人网站:http://www.jerrymei.cn

评论

发布
暂无评论
ARTS 07 - 使用 supervisor 配置 ngrok 内网穿透为守护进程