ARTS-week19

Algorithms

Path Sum
思路: 递归找左右子节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if (!root) {
return false;
}
if (!root->left && !root->right) {
return sum == root->val;
}
return hasPathSum (root->left, sum - root->val) ||
hasPathSum(root->right, sum - root->val);
}
};

Best Time to Buy and Sell Stock
思路: 遍历一次数组,记录遍历最小值,每次计算当前值和最小值之间的差值做为利润,然后每次选较大的利润。

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public:
int maxProfit(vector<int>& prices) {
int low = INT_MAX;
int res = 0;
for (int i = 0; i < prices.size(); ++i) {
low = min(low, prices[i]);
res = max(res, prices[i] - low);
}
return res;
}
};

Review

本周阅读英文文章 Selenium 4 is releasing soon: What every QA must know?

1)Selenium4 WebDriver将完全符合W3C标准
2)新的插件系统
3)新的Cli运行程序。完全基于Node.js,支持并行执行测试用例
4)WebDriver Playback
5)更友好的Grid UI
6)文档也将更新

Technique

加速Python程序的运行
1.使用函数
文中提到,像这样定义在全局范围的代码运行起来要比定义在函数中运行慢的多。 这种速度差异是由于局部变量和全局变量的实现方式(使用局部变量要更快些)。使用函数带来15-30%的性能提升是很常见的。

2.尽可能去掉属性访问
每一次使用点(.)操作符来访问属性的时候会带来额外的开销。它会触发特定的方法,比如__getattribute__()__getattr__(),这些方法会进行字典操作操作。
比如将如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
import math

def compute_roots(nums):
result = []
for n in nums:
result.append(math.sqrt(n))
return result

# Test
nums = range(1000000)
for n in range(100):
r = compute_roots(nums)

当修改为下面的形式,在我的机器上测试,运行时间比上面提升4s:

1
2
3
4
5
6
7
8
9
from math import sqrt

def compute_roots(nums):

result = []
result_append = result.append
for n in nums:
result_append(sqrt(n))
return result

3.理解局部变量
compute_roots()再次修改,在我的机器上,比from math import sqrt形式的代码,在运行时间上又有了2s的提升:

1
2
3
4
5
6
7
8
9
import math

def compute_roots(nums):
sqrt = math.sqrt
result = []
result_append = result.append
for n in nums:
result_append(sqrt(n))
return result

是因为额外的加速原因是因为对于局部变量sqrt的查找要快于全局变量sqrt。

4.避免不必要的抽象
任何时候当你使用额外的处理层(比如装饰器、属性访问、描述器)去包装你的代码时,都会让程序运行变慢。

5.使用内置的容器

6.避免创建不必要的数据结构或复制

Share

SSL压力测试工具
只需要一台执行单一攻击的电脑就能迅速消耗服务器资源,造成服务器拒绝服务。这个攻击方式的本质是针对开启重新协商功能的服务器,消耗其CPU资源,在协商加密算法的时候服务器CPU的开销是客户端的15倍左右。

0%