一、Socket简介

1、网络中进程间通信

本机进程使用进程号来区分不同的进程。进程间的通信方式有管道、信号、消息队列、共享内存、信号量等。
而网络中进程间通信,首先需要知道进程所在的主机,即网络中唯一的标识即网络层的IP地址,主机上的进程可以通过传输层的协议和端口号识别。

2、Socket原理

阅读全文 »

什么是生产者消费者模型

生产者-消费者模型($Producer-consumer problem$)是一个非常经典的多线程并发协作的模型,在分布式系统里非常常见。
523ef8e8b8be4722b1ba88c49bbd671d.png

这个模型一般由两类线程和一个缓冲区组成来组成:

1、生产者线程:生产数据,并把数据放入缓冲区中。
2、缓冲区:存放生产者生产的数据的地方。
3、消费者线程:从缓冲区里取数据,消费数据。

阅读全文 »

在实际开发中,我们把通用的函数和类分文件编写,称之为库。在其他的程序中,可以使用库中的函数和类。
一般来说,通用的函数和类不提供源代码文件(涉及到安全性和商业机密等问题),而是编译成二进制文件。
库的二进制文件有两种:静态库和动态库。

一、静态库

(1) 制作静态库

1
2
3
4
5
g++  -c  -o  lib库名.a  [源代码文件清单] 

-c 表示制作静态库
[lib库名.a] 为静态库文件名,如libpublic.a,库名为public

阅读全文 »

例题:树套树

题目描述

您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:

  1. 查询 $k$ 在区间内的排名

  2. 查询区间内排名为 $k$ 的值

  3. 修改某一位值上的数值

  4. 查询 $k$ 在区间内的前驱(前驱定义为严格小于 $x$,且最大的数,若不存在输出 -2147483647

  5. 查询 $k$ 在区间内的后继(后继定义为严格大于 $x$,且最小的数,若不存在输出 2147483647

阅读全文 »

例题:维护序列

题目描述

请写一个程序,要求维护一个数列,支持以下 $6$ 种操作:

编号 名称 格式 说明
1 插入 $\operatorname{INSERT}\ posi \ tot \ c_1 \ c_2 \cdots c_{tot}$ 在当前数列的第 $posi$ 个数字后插入 $tot$ 个数字:$c_1, c_2 \cdots c_{tot}$;若在数列首插入,则 $posi$ 为 $0$
2 删除 $\operatorname{DELETE} \ posi \ tot$ 从当前数列的第 $posi$ 个数字开始连续删除 $tot$ 个数字
3 修改 $\operatorname{MAKE-SAME} \ posi \ tot \ c$ 从当前数列的第 $posi$ 个数字开始的连续 $tot$ 个数字统一修改为 $c$
4 翻转 $\operatorname{REVERSE} \ posi \ tot$ 取出从当前数列的第 $posi$ 个数字开始的 $tot$ 个数字,翻转后放入原来的位置
5 求和 $\operatorname{GET-SUM} \ posi \ tot$ 计算从当前数列的第 $posi$ 个数字开始的 $tot$ 个数字的和并输出
6 求最大子列和 $\operatorname{MAX-SUM}$ 求出当前数列中和最大的一段子列,并输出最大和
阅读全文 »

例题:回文串

$Manacher$算法,又叫“马拉车”算法,只适用于在时间复杂度为$O(N)$的情况下求解一个字符串的最长回文子串长度的问题。

一、预处理

回文串长度个数为奇数,则其对称位置在某个字符。否则在两个字符中间,非常不利于计算回文串长度。

阅读全文 »

例题:历史的研究

题目描述

$IOI$ 国历史研究的第一人——$JOI$ 教授,最近获得了一份被认为是古代 $IOI$ 国的住民写下的日记。$JOI$ 教授为了通过这份日记来研究古代 $IOI$ 国的生活,开始着手调查日记中记载的事件。

日记中记录了连续 $N$ 天发生的事件,大约每天发生一件。

阅读全文 »

例题:HH的项链

题目描述

$HH$有一串由各种漂亮的贝壳组成的项链。$HH$ 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。$HH$ 不断地收集新的贝壳,因此,他的项链变得越来越长。

有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答…… 因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。

阅读全文 »
0%