ARTS - 2020.08.03 ~ 2020.08.09

ARTS打卡 - 10

1. Algorithm

17. Letter Combinations of a Phone Number

题目大意是根据给定的数字字符串,计算出数字在手机键盘上对应的字母可能的组合。

题目其实可以转换为一个排列组合的问题,就是不同的字符串之间的不同组合有多少种,解法如下:

  1. 截取数字字符串,例如:“1” 对应 “abc”
  2. 遍历当前数字对应的字符串,递归下一位数字,直到数字字符串的最后一位。下面是代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void combinationNumber(String str, String subStr, int index){
if(index == str.length()){
result.add(subStr);
return;
}

char c = str.charAt(index);
int pos = c - '1';
String value = phoneStr[pos];

for(int i = 0; i < value.length(); i++) {
combinationNumber(str, subStr.concat(String.valueOf(value.charAt(i))), index+1);
}
}

2. Review

  • Node.js and Websockets best practices checklist
  • Node.js 中使用websocket的最佳实践,不仅仅适用于webSocket,也同样适用于所有的三方库。
    • 安全性
      • 使用token验证安全性
        • 使用wss代替ws,类似https/http
  • 可扩展性
    • 断开连接
  • 刷新连接
    • 自动重连
    • 监控

3. Tip

  • 在使用Xcode的LLDB调试的时候,输入print xxx都会提示一个错误,error: Couldn't IRGen expression, no additional error, 查了一下原因是:使用carthage管理的项目,在下载有些包时会直接从官网下载二进制的Framework,就是这个原因导致的上述错误(具体是为什么我还没查到 😅)。解决方法是重新下载包且加上不使用二进制包:

    1
    carthage update --platform iOS --no-use-binaries

4. Share

剖析Promise内部结构,一步一步实现一个完整的、能通过所有Test case的Promise类

在js中,promise使用是很普遍的,这篇文章从很详细的角度,例如如何处理异常,如何在不同的Promise对象之间使用通用的then,在pending,resolve,reject三种不同的状态下如何处理事件,一步一步通过一个最简单的promise实现演变到实际使用中的promise实现。