Zhangxu's Blog.

第3周ARTS-内网穿透的通俗理解

Word count: 2,101 / Reading time: 7 min
2018/08/04 Share

A: 数字字符串求和
R: The Single Responsibility Principle
T: 内网穿透的通俗理解
S: 正在恋爱的对象遭到父母反对,应该怎么办?

Algorithm

题目

给定两个字符串形式的非负整数 num1num2 ,计算它们的和。

注意:

num1num2 的长度都小于 5100.
num1num2 都只包含数字 0-9.
num1num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

思路

将0到9字符的 ASCII 码按顺序存放到一个数组中,那么相应的 ASCII码值对应的索引就是真正的数字可以做转换之用。

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public String addStrings(String num1, String num2) {
char[] numArray1 = num1.toCharArray();
char[] numArray2 = num2.toCharArray();

long currentNum1 = 0;
long currentNum2 = 0;
for (char i : numArray1) {
currentNum1 = currentNum1 * 10 + this.codeToNum((byte) i);
}
for (char i : numArray2) {
currentNum2 = currentNum2 * 10 + this.codeToNum((byte) i);
}
return "" + (currentNum1 + currentNum2);
}

private int codeToNum(int code) {
int[] strToNum = {48, 49, 50, 51, 52, 53, 54, 55, 56, 57};
for (int i = 0; i < strToNum.length; i++) {
if (code == strToNum[i]) {
return i;
}
}
return -1;
}
}

Review

分享文章:The Single Responsibility Principle

本文阐述了,一个良好的设计应该具备的一个基本原则:单一职责原则

将因相同原因而改变的的功能聚集在一起,将因不同原因而改变的功能分开。

确切的说,就是一个功能模块只做一件事,并且把它做好。这意味着可以将我们的系统分成可独立部署的组件,组件与组件之间的状态不会互相影响,如果有需要更改某个组件并不需要重新部署其他组件。

Tip

内网穿透的通俗理解

最近看了微信公众平台的授权相关内容,但是想要在本机调试的话需要做内网穿透的工作,通过查阅资料实现了相关功能,借此总结下自己对于内网穿透粗浅的理解。

平日里我们访问的网站,背后都有服务器在支撑服务,而我们之所以能访问这台服务器是因为我们能在互联网中定位到他的IP地址。

这个IP是运营商分配的公网IP地址,在网络中是独一无二的,但是这样的IP资源很宝贵,不能无节制的分配。

但是很多机器都需要联网,怎么办?

回想下家里联网的场景,路由器通过拨号向运营商申请到了一个公网IP地址(下一次拨号还会变化),家里所有联网设备都通过这个IP地址和互联网上的其他设备通信。

与此同时路由器把自己与家中其他通过有线或无限的连接到路由器的设备组成了一个局域网,在这个局域网中每个设备都有一个自己的私有IP地址

路由器在这个局域网中的扮演的是网关的角色,其他设备网络请求和接受的流量都由路由器转发,因此路由器像是家里水网的总闸门,对于外部网络设备而言家里的局域网是个黑盒子,只有公网IP地址是可见的。

对于网站服务器来说本机IP就是公网IP地址,那么我开个服务,告诉别人IP地址和端口号人家就可以访问了。

但对于家里的电脑就不一样了,别人不可能通过这个私有IP地址访问你发布的服务,因为它在网络中并不惟一,很可能隔壁二毛家的电脑IP和你的一样。

那如果非要别人访问怎么办,有没有解决方案?

有,方案之一是借助一个拥有公网IP地址的服务器来做转发工作,提供这种转发服务(内网穿透技术)的有花生壳、ngrok等等,他们通常是有一整套客户端和服务端通信的系统。服务端安装在用来转发的服务器上,与内网你家电脑的客户端通过约定的协议通信,这样别人想要访问你电脑的服务只要固定的找这个转发服务器就可以了,IP也是固定不变的。

转发服务器通常会分配一个二级或三级域名给到你,这个域名是和你的客户端绑定的,这样你打开电脑上的客户端后,别人就可以通过这个域名将其解析至转发服务器,而后转发服务器再找到你的客户端最终完成内网的穿透。

Share

最近和同事聊天,聊到一个话题:如果你正在恋爱的对象遭到父母反对,应该怎么办?

他主张:婚恋不只是两个人的事,更是是两个家庭的的融合,应该听从父母的建议。

表面上这个问题是一个站队的问题,一边是你更照顾父母意见关心家庭融洽,另一边是你更在意和恋爱对象之间的关系。

但其实如果真的发生了这种事则是暗示了你和父母之间的关系出了点问题。

我们来思考一个问题:父母为什么干预你选择婚恋对象?

当然他们有很多为你好的理由,比如:

  • 我们是一家人,父母不会害你。
  • 你现在还年轻现在做的决定不觉得,将来是会后悔的。

这套背后有两个潜在的逻辑:

  • 父母其实并不真正了解你的恋爱对象,可能仅仅从他们不满意的点比如家庭背景、距离远近或者身高样貌直接一票否定。
  • 他们不满意,就不允许你们在一起,这本质想要要掌控子女的未来。

这是很可怕的,可怕在于父母必须要你顺从他们的意愿,他们还把你当作那个听话的小孩子。在可预见的将来,他们可不仅仅要干预你的择偶,很有可能还会干预你找工作、换工作、买房子,将来结婚的婚后生活他们很可能还要插一脚,指指点点。

而你很可能在从前的生活中,从来没有真正的反抗过父母的意愿。

这就是问题所在:

你一直是个听话的孩子,父母也习惯了你的听话,之后你长大了对待某个问题你有自己的看法(很明显你们某些观念上出现了分歧),但是父母反对,你会继续顺从?还是坚决和他们说一声:“我自己可以做主!”?

而事实上已然我们已经长成了一个成年人,我们比父母那一代接受更好的教育,拥有顺应新时代发展的价值观念,我们有足够的信息去判断一个人是否能陪伴自己度过下半生。那么当真正找到这样一个人,又为何让父母用他们的陈旧观念把你束缚住呢?

我的建议是和父母坦白:

我知道你们都是为我好,但是我不是以前的那个小孩子了,有些事情上,你们的意见和我出现了分歧,作为家人我会慎重考虑你们的建议。但我希望你们明白一件事,我有自己的想法我也相信自己的判断,不管怎样事情最后的觉定权都在我身上,你们不能陪我一辈子,我的人生还是我自己来掌控比较稳妥。

当你真正和父母敞开心扉拿出诚意沟通时,我相信大多数情况是父母会真的觉得你长大了。比较好的情况是那个站队的问题你两边都得到了,但如果父母还是想干预,咋办?这时千万不要心软,因为你不亮出你的决心,不为自己人生选择权争取,那就还是证明你依旧是那个小孩子。

原文作者: 张旭

原文链接: http://jshpy.cn/ARTS/ARTS03.html

发表日期: August 4th 2018, 5:50:29 pm

版权声明: 本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

CATALOG
  1. 1. Algorithm
    1. 1.1. 题目
    2. 1.2. 思路
    3. 1.3. 答案
  2. 2. Review
  3. 3. Tip
    1. 3.1. 内网穿透的通俗理解
  4. 4. Share