1.三个思考题
- 爬虫原理是什么
- 从哪里爬取网页内容
- 爬到的内容长什么样
进程 | 线程 | |
---|---|---|
定义 | 进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构的汇集。 | 线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 |
根本区别 | 进程是操作系统资源分配的基本单位 | 线程是处理器任务调度和执行的基本单位 |
资源开销 | 每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销 | 可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计 数器(PC),线程之间切换的开销小。 |
包含关系 | 如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的 | 线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。 |
内存分配 | 进程之间的地址空间和资源是相互独立的 | 同一进程的线程共享本进程的地址空间和资源 |
影响关系 | 一个进程崩溃后,在保护模式下不会对其他进程产生影响 | 一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。 |
执行过程 | 每个独立的进程有程序运行的入口. 顺序执行序列和程序出口,可并发执行 | 线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,可并发执行 |
哈希表:也叫做散列表。是根据关键字和值(Key-Value)直接进行访问的数据结构。也就是说,它通过关键字 key 和一个映射函数 Hash(key) 计算出对应的值 value,然后把键值对映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数(散列函数),用于存放记录的数组叫做 哈希表(散列表)。 哈希表的关键思想是使用哈希函数,将键 key 和值 value 映射到对应表的某个区块中。可以将算法思想分为两个部分:
向哈希表中插入一个关键字:哈希函数决定该关键字的对应值应该存放到表中的哪个区块,并将对应值存放到该区块中
在哈希表中搜索一个关键字:使用相同的哈希函数从哈希表中查找对应的区块,并在特定的区块搜索该关键字对应的值
单调栈是一种栈式的数据结构,它的特点在于:栈内元素从栈底到栈顶呈现非递增或者非递减。
对于一个一维数组:arr = [2, 1, 5, 6, 2, 3],如何建立一个从栈底到栈顶的非递减栈呢?
首先,从数组的0下标开始,因为此时栈为空,直接将下标0压入栈中。
动态规划(Dynamic Programming)是一种分阶段求解决策问题的数学思想,它通过把原问题分解成简单的子问题来简化求解的难度。如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。
关于回溯算法的介绍:回溯其实就存在于递归函数下面,回溯算法是一种暴力搜索法。对于一些问题来说,能够使用暴力搜索法解决就已经很好了,使用一层一层的for循环嵌套,根本都搜索不出来的时候,使用回溯算法就可以搜索出所有解法。
回溯算法能够解决的问题: