diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/ 1/.keep" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/ 1/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/ 1/QQ\345\233\276\347\211\20720210606183845.jpg" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/ 1/QQ\345\233\276\347\211\20720210606183845.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..5e8ee1c73ac8c6f5ffdb609278fd232fc1c80e04 Binary files /dev/null and "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/ 1/QQ\345\233\276\347\211\20720210606183845.jpg" differ diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/ 1/QQ\345\233\276\347\211\20720210606183900.jpg" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/ 1/QQ\345\233\276\347\211\20720210606183900.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..b0885f2e181020496f1013d3e17a19ca066e411b Binary files /dev/null and "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/ 1/QQ\345\233\276\347\211\20720210606183900.jpg" differ diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/.keep" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/2/.keep" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/2/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/2/22_2.md" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/2/22_2.md" new file mode 100644 index 0000000000000000000000000000000000000000..106bd0364cda6aa26ba80d78680eb2d0756c2376 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/2/22_2.md" @@ -0,0 +1,147 @@ +# 二十二周第二节 + +## 链表 + +``` +class Node: + def __init__(self, data): + self.data = data + self.next = None + + def __str__(self): + return f"" + +class LinkedList: + def __init__(self): + self.head = None + self.end = None + + def append(self, node): + """ + 向链表尾部添加一个节点 + 1,尾部添加: end -> node + 2,当期头部没有节点: head -> node + :param node: + :return: + """ + if not self.head: + self.head = node + else: + self.end .next = node + self.end = node + + def insert(self, index, node): + """ + 向index值中插入一个节点 + 1插入的是中间节点,找到index值的节点,cur.next -> node node->next + 2遍历的过程中,结构index值超过了当前链表的长度,我们抛出异常 + 3在头部插入节点:head -> node ,node.next =head + :param index: + :param node: + :return: o + """ + #在原index值元素的左边插入 ->在元index-1值对应元素的右边插入 + cur = self.head + if index == 0: + node.next = self.head + self.head = node + return + + for i in range(index-1): + cur = cur.next + if cur is None: + raise IndexError("LinkedList insert node exceed max length") + + node.next, cur.next = cur.next, node + + if node.next is None: + self.end = node + + def remove(self, node): + """ + 通过遍历删除给定的节点 + 1. 移除的是中间节点: cur.next -> None, prev.next -> cur.next + 2. 移除的是头节点: head -> cur.next, cur.next -> None + 3. 移除的是尾节点: cur.next本身指向的就是None,和1一致, end -> prev + :param node: + :return: + """ + cur = self.head + prev = None + while cur: + if cur.data == node.data: + if prev is None: + self.head = cur.next + else: + prev.next = cur.next + cur.next = None + + if prev and prev.next is None: + self.end = prev + return + + prev = cur + cur = cur.next + + def reverse(self): + """ + 翻转当前链表 + 1. 中间节点: cur.next -> prev + 2. 头节点: cur.next -> prev + 3. 尾节点: cur.next -> prev + 4. 处理原本的head和end + :return: + """ + # 能被翻转说明链表长度 > 1 + if self.head and self.head.next: + cur = self.head.next + prev = self.head + + # 原本头节点的next需要断开 + self.head.next = None + # 原本头节点就变成了尾节点 + self.end = prev + while cur: + # 这里设计到next,cur, prev三个节点, 所以引入中间变量next + next = cur.next + cur.next = prev + + prev = cur + cur = next + + # 翻转后,头节点指向了原本的尾节点 + self.head = prev + else: + return + + def __str__(self): + """ + 通过遍历的方式打印当前链表 + 初始节点为head,如果当前指针指向的是null,说明我们到达了结尾 + :return: + """ + cur = self.head + result = "" + while cur: + result += str(cur) + "\t" + cur = cur.next + return result + + +if __name__ == "__main__": + node_1 = Node(1) + node_2 = Node(2) + node_3 = Node(3) + node_4 = Node(4) + + linked_list = LinkedList() + linked_list.append(node_1) + linked_list.append(node_2) + linked_list.append(node_3) + #linked_list.insert(1, Node(1.5)) + #linked_list.append(node_4) + #linked_list.remove(Node(1.5)) + #linked_list.reverse() + print(linked_list) +``` + diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/3/.keep" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/3/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/3/22_3.md" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/3/22_3.md" new file mode 100644 index 0000000000000000000000000000000000000000..6fe603361a2b3199d27c73cc5cb7d0a991cc3864 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/ 3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\344\272\214\345\221\250/3/22_3.md" @@ -0,0 +1,83 @@ +# 散列表,队列,栈,树和堆 + +- 散列函数 + +一个好的散列函数要满足以下条件:均匀铺满散列表,节约内存空间,散列冲突概率低 + +- [ ] 直接定址法 适合key是连续的或者比较小的情况 +- [ ] 数字分析法 找出key值的规律 +- [ ] 平分去中发 取关键字平方后的中间作为散列地址 +- [ ] 折叠法 将关键字分割成位数相同的几个部分,然后取这几个部分的叠加和作为散列函数 +- [ ] 随机数法 选择一个随机函数,取关机子的随机值为散列地址 +- [ ] 除留余数法 + +- 散列冲突 + + 不同的key理应得到不同的散列地址,散列冲突就是不同的key得到了同一个散列地址 + +- 解决散列冲突 + - [ ] 开放寻址法 线性的扫描列表,直到找到一个空单元 + - [ ] 链表法 所以散列值相同的元素都放到相同的位置的链表中 + +``` +class MyStack: + """ + 栈有固定长度, 需要考虑栈溢出和空栈的情况 + top属性用来指示栈顶的索引值 + """ + def __init__(self, _size=10): + self.stack = [] + self.top = -1 + self.size = _size + + def is_full(self): + return self.top == self.size - 1 + + def push(self, item): + """ + 首先判断当前栈是否已满 + :param item: + :return: + """ + if self.is_full(): + raise Exception("StackOverflow") + self.stack.append(item) + self.top += 1 + + def is_empty(self): + return self.top == -1 + + def pop(self): + """ + 首先要判断当前栈是不是空栈 + :return: + """ + if self.is_empty(): + raise Exception("StackUnderflow") + self.top -= 1 + return self.stack.pop() + +if __name__ == "__main__": + # 1 + 2 * 3 + my_stack = MyStack() + my_stack.push(1) + my_stack.push("+") + my_stack.push(2) + my_stack.push("*") + my_stack.push(3) + + # 简单示例运算过程, 实际情况执行要复杂的多, 背后的指令也更优雅 + # 栈只有一个元素的时候, 运算正式结束 + while my_stack.top > 0: + item_1 = my_stack.pop() + operator = my_stack.pop() + item_2 = my_stack.pop() + if operator == "*": + my_stack.push(item_1 * item_2) + elif operator == "+": + my_stack.push(item_1 + item_2) + + # 结果就在栈底 + print(my_stack.pop()) +``` + diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\345\221\250\347\254\224\350\256\260/chrome\345\274\200\345\217\221\350\200\205\345\267\245\345\205\267.md" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\345\221\250\347\254\224\350\256\260/chrome\345\274\200\345\217\221\350\200\205\345\267\245\345\205\267.md" new file mode 100644 index 0000000000000000000000000000000000000000..fc2b4c2ec65e91d031046604c5123ab43540bf82 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\345\221\250\347\254\224\350\256\260/chrome\345\274\200\345\217\221\350\200\205\345\267\245\345\205\267.md" @@ -0,0 +1,17 @@ +## chrome开发者工具 + +### 分析流程 + +​ 分析抓取的数据来自哪个请求,使用Fiddler抓包工具 + +​ ![微信截图_20210525194155](D:\作业\20\1\第一节\微信截图_20210525194155.png) + +![](D:\作业\20\1\第一节\微信截图_20210525203322.png) + +! + +[](https://cloudimge.com/image/C3U7w +https://cloudimge.com/image/C3EYU +https://cloudimge.com/image/C3tPZ +https://cloudimge.com/image/C3uTJ) + diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\345\221\250\347\254\224\350\256\260/\347\254\254\344\272\214\345\215\201\345\221\250-\347\254\254\344\272\214\350\212\202\350\257\276.md" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\345\221\250\347\254\224\350\256\260/\347\254\254\344\272\214\345\215\201\345\221\250-\347\254\254\344\272\214\350\212\202\350\257\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..17d46b1cee5cfd16d7ae2eece53c79d1d5ee29bc --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/3\347\217\255/3\347\217\255_\351\231\266\345\206\266/3\347\217\255_\351\231\266\345\206\266_\347\254\254\344\272\214\345\215\201\345\221\250\347\254\224\350\256\260/\347\254\254\344\272\214\345\215\201\345\221\250-\347\254\254\344\272\214\350\212\202\350\257\276.md" @@ -0,0 +1,57 @@ +# 第二十周-第二节课 + +## 还原被混淆的变量名 + +[https://cloudimge.com/image/CIldj +https://cloudimge.com/image/CIdMD +https://cloudimge.com/image/CIrXS +https://cloudimge.com/image/CIy0L +https://cloudimge.com/image/CIJSt]() + +pdd-restore.js 还原被混淆的变量名 + +``` +const n = require('./anti_confuse.js').n +const file = require("fs"); +// n("0x155", "uYFB") + +restoreJs = function (jsContent){ + //使用正则表达式匹配所以混淆函数 + let matchArray = jsContent.match(/n\("[^\"]+", "[^\"]+\)/g) + for(let i=0; i