摘要:
TCP socket 编程 讲一下 socket 编程 步骤 1. 使用 socket 模块 2. 建立 TCP socket 客户端和服务端 3. 客户端和服务端之间的通信 图解 编程 举个例子 tcp_server.py: tcp_client.py: 运行结果: 使用 socket 发送 HT 阅读全文
摘要:
TCP 三次握手和四次挥手 作为面试会被经常考察的的点,自己复习了一下,总结如下: TCP 三次握手 先上图: 所谓三次握手,是指建立一个 TCP 连接时,需要客户端和服务器总共发送 3 个包。 第一次握手(SYN=1, seq=J) 建立连接时,客户端发送 SYN 包到服务器,并进入 状态,等待服 阅读全文
摘要:
python 装饰器 描述 python 中一切皆对象,函数也可以当作参数传递 装饰器就是接受一个函数作为参数,添加功能后返回一个新函数的函数或类。 python 中使用 @ 来使用装饰器。(@ 只是装饰器的语法糖,可以等价替代为其他) 装饰器经常用到的功能就是在代码中添加 log 日志。 实例 下 阅读全文
摘要:
leecode刷题(31) 回文数 回文数 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 示例 2: 示例 3: 进阶: 你能不将整数转为字符串来解决这个问题吗? 思路 关于字符串的题目, 双端遍历法 可以解决很多问题。这里虽然是整数,但是我们 阅读全文
摘要:
TOPK 问题 描述 如从海量数字中寻找最大的 k 个,这类问题我们称为 TOPK 问题,通常使用堆来解决: 求前 k 大,用最小堆 求前 k 小,用最大堆 例子 现有列表 , 求前 2 个大的元素。 如传入列表和 k = 2,输出 。 思路 1. 先放入元素前 k 个建立一个最小堆 2. 迭代剩余 阅读全文
摘要:
leecode刷题(30) 二叉树的后序遍历 二叉树的后序遍历 给定一个二叉树,返回它的 后序 遍历。 示例: 思路 跟上道题一样,我们使用递归的思想解决。 后序遍历: 先处理左子树,然后是右子树,最后是根 代码如下 Java 描述 python 描述 总结 对比如下: 阅读全文
摘要:
leecode刷题(29) 二叉树的中序遍历 二叉树的中序遍历 给定一个二叉树,返回它的 中序 遍历。 示例: 思路 跟上一道题一样,用递归的思想很快就能解决。 中序遍历: 先处理左子树,然后是根,最后是右子树。 代码如下 Java 描述 python 描述 总结 对比如下: 阅读全文
摘要:
leecode刷题(28) 二叉树的前序遍历 二叉树的前序遍历 给定一个二叉树,返回它的 前序 遍历。 示例: 思路 这道题我们用递归的思想很容易就能解出来。前序遍历,我们先处理根,之后是左子树,然后是右子树。 代码如下 Java 描述 python 描述 总结 两门语言的代码量差不多,用递归几行就 阅读全文
摘要:
leecode刷题(27) 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 思路 以前做过合并两个有序链表的问题,所以刚开始想到的解法与之类似,我们可以先合并两个有序链表,再用合并的新链表去合并第三个链表: 其实如果我们学习过堆相关 阅读全文
摘要:
leecode刷题(26) 用栈实现队列 用栈实现队列 使用栈实现队列的下列操作: push(x) 将一个元素放入队列的尾部。 pop() 从队列首部移除元素。 peek() 返回队列首部的元素。 empty() 返回队列是否为空。 示例: 说明: 你只能使用标准的栈操作 也就是只有 , , , 和 阅读全文