[leetcode+剑指 offer] 左旋转字符串

leetcode 上开了 《剑指 offer 》专栏,深夜回家特来水一下。题解后续补上~ 代码:

单元测试案例:

一次子进程继承信号屏蔽字导致的功能异常问题排查过程

近来一直在做部门疑难问题的排查工作,最近也准备在周分享上做一个小培训 (交流)——「排查问题的方法和思路」 。回想历史问题处理,觉得这是个很不错的案例,便回溯了一下排查过程记录下来。 一、问题背景 有一个应用层程序,依赖信号接收配置更新事件。 即程序依赖某个配置文件,当配置更新后,需要通过信号告知程序也 ... 阅读更多

C++中的异常处理

一、异常处理 1.1 异常的基本用法 C 语言中因为没有异常处理 (只能通过返回值来判断错误) 机制一直被诟病,因此 C++也引入了 try...catch 机制,使得 C++也能像 java/python 一样来捕获异常。 它的用法和大多数其他语言基本一致,非常简单: [crayon-694753281ba6631 ... 阅读更多

I/O 模型

一、 I/O 模型分类 unix 环境下有 5 中 IO 模型: 阻塞式 I/O 非阻塞式 I/O I/O 多路复用 信号驱动 I/O 异步 I/O(POSIX 中的 aio_系列函数) 常用的是前三种方式,特别是多路 I/O 复用是目前使用最广泛的 I/O 模型。它不仅包含了阻塞和非阻塞,同时也包含了异步调用。非阻塞+异步是效率最高 ... 阅读更多

epoll 中的边缘触发 ET 和水平触发 LT 模式

epoll 中的触发模式有两种,边缘触发和水平触发,默认情况下使用的是水平触发。 边缘触发 (ET) 的意思是当电平出现变化的时候才触发事件,如果设置了边缘触发,执行 epoll_wait 时,内核检测到数据到达后立马返回到应用层。但是这仅仅只返回这一次,如果缓冲区中的数据没有读取完,再次执行 epoll_wa ... 阅读更多

猴子拿苹果问题-匿名信号量

一、猴子拿苹果问题 逛脉脉时,看到一网友遇到的面试题:有 9 个苹果,2 只猴子。一个猴子每次拿 2 个苹果,一个猴子每次拿 3 个苹果。如果剩余的苹果数量不够猴子拿的数量,则停止拿苹果。请用多线程的方式模拟上面的描述。 看到问题的第一眼,觉得很有趣,脑海中第一个想到的就是通过信号量来实现,因为信号量是最适合做线 ... 阅读更多

进程间通信之共享内存

共享内存是所有 IPC 通信中效率最高的,它通过把文件映射到用户进程空间,然后直接通过地址访问来实现多进程通信。相对于其他 IPC 通信方式而言,少去了把数据从用户空间复制到内核空间,再从内核空间复制到用户空间的过程,因此效率相当高。 用图形来表示就是: 操作共享内存的函数: [crayon-6947532 ... 阅读更多

进程间通信之信号量

一、信号量 信号量有两种,一种的有名信号,一种是无名信号。有名信号一般用于进程间同步,无名信号一般用于于线程间同步。创建或打开一个信号的函数:

name 参数致命信号量的名字,由于信号量内部保存在系统内核中,多个进程间可以直接通过指定信 ... 阅读更多