【Golang】多线程爬虫的实现 〇、前言Golang 是一种并发友好的语言,使用 goroutines 和 channels 可以轻松地实现多线程爬虫。具体地说,实现的是多协程。协程是一种比线程更轻量化的最小逻辑可运行单位,它不受操作系统调度,由用户调度。因此对于协程并发的控制,有较高的要求。 一、goroutine(Go 协程)Go 协程(Goroutine)是与其他函数同时运行的函数。可以认为 Go 协程是轻量级的线程, 2023-05-05 Golang #开发语言 #golang #爬虫
【day11】链表高精度加法 题目 1:两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 1: 输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 2023-03-23 LeetCode #算法 #数据结构 #链表
【day10】链表的合并 题目 1:合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4] 思路:采用递归的方法: 12345678910111213class Solution { public ListNode 2023-03-22 LeetCode #算法 #数据结构 #链表
【day09】链表的旋转与反转 题目 1:旋转链表 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 示例 1: 输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3] 思路 1:每次写后退一个,然后循环 k 次: 123456789101112131415161718192021222324252627struct ListNode* 2023-03-21 LeetCode #算法 #数据结构 #leetcode
【day08】移除与插入链表元素 题目 1:设计链表 你可以选择使用单链表或者双链表,设计并实现自己的链表。单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点。假设链表中的所有节点下标从 0 开始。实现 MyLinkedList 类:MyLinkedList() 初始化 MyLinke 2023-03-20 LeetCode #算法 #数据结构 #leetcode
【day07】二维数组及滚动数组 题目 1:杨辉三角 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows = 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 思路 1:利用多维数组模拟的方法: 123456789101112131415161718192 2023-03-19 LeetCode #算法 #数据结构 #leetcode
【day06】数组的遍历 题目 1:最大连续 1 的个数 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。 示例 1: 输入:nums = [1,1,0,1,1,1]输出:3解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3. 思路 1:很简单,直接模拟: 1234567891011121314151617181920class Solution { 2023-03-13 LeetCode #算法 #数据结构 #leetcode
【day05】统计数组中的元素 题目1:错误的集合 集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。给定一个数组 nums 代表了集合 S 发生错误后的结果。请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。 示例 1: 输入:nums = [1,2,2,4]输出:[2,3 2023-03-12 LeetCode #算法 #数据结构 #leetcode
exec()函数家族详细 〇、前言fork 函数之后,如果想要把子进程换成一个我想要执行的进程,这时,就不得不使用 exec()函数了,这也是 fork()的意义所在。当然,exec系列的函数也可以将当前进程替换掉,不一定非要 fork()一个子进程。常见的 fork()调用例子有很多,比如从 wechat 发起一个语音电话、从 bash 或者zsh执行一个 a.out 程序,都是在利用exec系统调用将新产生的子进程 2023-03-11 系统编程 #linux
对fork() 函数的理解 fork()的基本概况fork() 函数调用成功之后,会有两个返回值。当前进程,也就是父进程返回子进程的 pid,子进程返回 0。如果函数调用错误,返回为-1。 1234567891011121314#include <stdio.h>#include <unistd.h>int main(void) { int i = 0; printf(&qu 2023-03-11 系统编程 #linux