自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 编译原理之美 --- 05 | 语法分析(三):实现一门简单的脚本语言

simple_script.py #!/usr/bin/env python # -*- coding: utf-8 -*- from play_with_compiler.craft.simple_parser import SimpleParser from play_with_compil...

2019-12-29 18:12:37 193 0

原创 python 进程交互:Queue

#!/usr/bin/env python # -*- coding: utf-8 -*- import time import datetime import multiprocessing from multiprocessing import Process, Manager, Lock,...

2019-12-24 09:55:55 44 0

原创 centos 开启防火墙端口

查看所有打开的端口: firewall-cmd--zone=public --list-ports 添加端口: firewall-cmd --zone=public --add-port=80/tcp --permanent 重新载入: firewall-cmd --reload 参考 h...

2019-12-22 18:05:19 71 0

原创 python 进程与线程的交互

#!/usr/bin/env python # -*- coding: utf-8 -*- import time import datetime from multiprocessing import Process, Manager, Lock from Queue import Queue...

2019-12-22 04:57:30 65 0

原创 python --- 线程不适合计算密集型的例子

多个线程干同一件事 VS 一个线程干一件事 居然后者更快一些,原来 python 中的线程不适合计算密集型。 原因:https://www.dabeaz.com/usenix2009/concurrent/Concurrent.pdf #!/usr/bin/env python # -*- cod...

2019-12-19 17:49:16 86 0

原创 epoll 的 maxevents 参数

maxevents: Size (in terms of number of events) of the caller event buffer. 如果有超过 maxevents 的事件就绪,会被抛弃吗? epoll 源码:https://github.com/torvalds/linux/bl...

2019-12-12 17:22:27 117 0

原创 python 中 queue 高效的原因

queue 高效的原因:底层使用了 dequeue dequeue: [1] C 编写 [2] dequeu 的 append 和 popleft 方法的时间复杂度均为 O(1) [3] 完全避免了 realloc(),当空间不够时,再分配一个 block 即可 [4] 一个 block 的默认大...

2019-12-12 11:42:40 28 0

原创 git配置

[1] 生成 ssh key $ ssh-keygen -t rsa -C "你的git的注册邮箱" 接着又会提示你输入两次密码(该密码是你 push 文件的时候要输入的密码,而不是 github 管理者的密码),当然,你也可以不输入密码,直接按回车(推荐)。那么 push ...

2019-12-11 16:30:34 30 0

原创 编译原理之美 --- 04 | 语法分析(二):解决二元表达式中的难点

核心 循环代替左递归。 代码 以前: ''' 语法解析:加法表达式 ''' def additive(self, tokens): child1 = self.multiplicative(toke...

2019-12-09 22:32:27 145 0

原创 编译原理之美 --- 03 | 语法分析(一):纯手工打造公式计算器

simple_calculator.py #!/usr/bin/env python # -*- coding: utf-8 -*- from play_with_compiler.craft.base_type import ASTNode from play_with_compiler.cra...

2019-12-08 22:15:32 76 0

原创 react --- 父子组件间通信

子组件改变父组件的状态 父组件 class Father extends React.Component { constructor(props) { super(props) this.state = { myState: "myState", } ...

2019-12-07 16:13:34 34 0

原创 编译原理之美---正则文法和有限自动机:纯手工打造词法分析器

craf.h #ifndef _Craft_H_INCLUDED_ #define _Craft_H_INCLUDED_ #include <string> #include <vector> #include <queue> using namespace s...

2019-12-01 23:20:26 84 0

原创 eventfd 进程间同步

先打印“parent”,后打印“child” #define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <sys/eventfd.h> #include <unistd.h>...

2019-11-07 15:55:53 88 0

原创 轻量级容器程序

阳哥的程序:https://github.com/Pro-YY/jail 主进程: argp_parse 解析输入参数。 用 root 身份建立了 cgroup(限制一组进程的资源),rlimit(限制一个进程或者一个用户的资源)。 调用带 CLONE_NEW* 标志的 clone() 创建子进...

2019-11-06 19:45:51 78 0

原创 c --- 参数解析

例子一 原文:https://www.gnu.org/software/libc/manual/html_node/Argp-Example-1.html#Argp-Example-1 argp 最小的例子。 当有参数时,给出一条错误消息。 当指定选项“-- help”时,打印消息。 #inc...

2019-11-06 14:36:35 199 0

翻译 Mount namespaces, mount propagation, and unbindable mounts

在上一期命名空间系列的文章中,我们研究了挂载命名空间和共享子树的基本概念,包括挂载传播类型和对等组的概念。在这篇文章中,我们提供了各种传播类型操作的一些实际演示:MS_SHARED,MS_PRIVATE,MS_SLAVE 和 MS_UNBINDABLE。 MS_SHARED 和 MS_PRIVAT...

2019-11-04 01:36:24 83 0

翻译 Mount namespaces and shared subtrees

挂载命名空间是创建每-用户和每-容器文件系统树的强大而灵活的工具。本文中,我们将仔细研究共享子树特性,它可通过自动、可控的方式在挂载命名空间之间传播挂载和卸载事件。 引言 挂载命名空间是第一个添加到 Linux 的命名空间类型,出现在 2002 年的 Linux 2.4.19 中。它们可隔离命名空...

2019-11-03 20:55:40 44 0

翻译 Namespaces in operation, part 7: Network namespaces

自从上次我们研究 Linux 命名空间以来已经有一段时间了。我们的系列缺少了一篇,现在补上:网络命名空间。顾名思义,网络命名空间将网络设备、地址、端口、路由、防火墙规则等的使用划分在不同的盒子,基本上是在一个单独运行的内核实例中虚拟化网络。网络命名空间在 2.6.24 版进入内核,约 5 年前;大...

2019-11-03 16:43:36 50 0

翻译 Namespaces in operation, part 6: more on user namespaces

本文中,继续上周关于用户命名空间的讨论。特别的,我们看一下更多有关与用户命名空间、capabilities 的交互及用户命名空间与其它类型的命名空间的结合。本文是命名空间系列的最后一篇。 用户命名空间和 capabilities 每个进程都会关联特定用户命名空间。一个通过不带 CLONE_NEWU...

2019-11-02 23:03:24 52 0

翻译 Namespaces in operation, part 5: User namespaces

继续我们的命名空间系列文章,本文看一下用户命名空间,大部分实现于 Linux 3.8。(剩余的工作是 XFS 和其它文件系统中的一些改动;后者在 3.9 被合并)。用户命名空间与用户和组 ID 相映射。这意味着一个进程在某个用户命名空间内的用户和组 ID 可以与用户命名空间外的不同。最重要的是,一...

2019-11-01 11:13:55 86 0

翻译 Namespaces in operation, part 4: more on PID namespaces

在本文中,我们将继续上周关于 PID 命名空间的讨论(并扩展我们正在进行的关于命名空间的系列文章)。PID 命名空间的一个用途是实现一个进程包(容器),其行为类似于一个自包含的 Linux系统。init 进程是传统系统和 PID 命名空间容器的关键部分。因此,我们将研究 init 进程的特殊角色,...

2019-10-30 12:01:40 57 0

翻译 Namespaces in operation, part 1: namespaces overview

Linux 3.8 合并窗口接受了 Eric Biederman 的大量用户命名空间及相关的补丁。尽管仍有一些细节待完成,例如,许多 Linux 文件系统还不知道用户命名空间,但用户命名空间的实现已经在功能上完成了。 用户命名空间的完成是一个里程碑。首先,这项工作代表了迄今为止命名空间中最复杂实现...

2019-10-29 19:21:39 57 0

翻译 Namespaces in operation, part 2: the namespaces API

命名空间将全局系统资源包装在一个抽象中,使得命名空间中的进程认为它们拥有独立的资源实例。命名空间可用于多种目的,最重要的是实现容器,一种轻量级虚拟化技术。本系列的第二篇文章将看一下命名空间的一些细节和 API。本系列中的第一篇文章对命名空间进行了总览。本文将看一下命名空间 API 中的一些细节,并...

2019-10-29 17:20:32 45 0

翻译 Namespaces in operation, part 3: PID namespaces

接着前两篇命名空间文章(Part 1: namespaces overview and Part 2: the namespaces API),现在看一下 PID 命名空间。与 PID 命名空间相关的全局资源就是进程 ID 数字空间。这意味着在不同 PID 命名空间中的进程可以有相同的进程 ID。...

2019-10-28 22:28:38 77 0

原创 Node.js --- http-server

安装 npm install http-server -g 运行 http-server -p 1234 -p 后面是端口号,可以换 就可以在浏览器中访问了,记得加端口号,无需写一行代码就有了一个 server

2019-10-22 15:30:53 33 0

原创 Node.js --- require 中的全局变量

obj.js var S // 全局变量 function init(value) { S = { s: value } } init('hello') console.log("obj.js: " + S.s) m...

2019-10-21 16:00:25 133 0

原创 Node.js --- 重定向

var http = require('http'); http.createServer(function(request, response) { response.writeHead(301, {Location: 'http://baidu....

2019-10-18 18:13:44 34 0

原创 Node.js --- spawn 杀死正在执行的子进程

const { spawn } = require('child_process'); var child = spawn('sleep', ['10s']); var kill = spawn('kill', [ch...

2019-10-15 21:51:41 1116 0

原创 Node.js --- shelljs 杀死正在执行的子进程

const shell = require('shelljs') let cmd = shell.exec(`sleep 1m; echo a`, {async: true}) console.log(cmd.pid) cmd.kill('SIGINT')...

2019-10-15 16:51:13 109 0

原创 Node.js --- 全局变量

global.a = 'a' a = 'b' console.log(global.a) console.log(a) 结果: b b global.a = 'a' let a = 'b' console.log(g...

2019-10-14 17:12:42 24 0

原创 不用 80 端口更新 SSL 证书

更新 SSL 证书时出现如下问题: $ certbot renew --dry-run ... Attempting to renew cert (banana-6lfueg4a.pai.tcloudbase.com) from /etc/letsencrypt/renewal/banana-6l...

2019-10-10 15:02:58 247 0

原创 div控件是否显示

let isShow = true ... <div style={{display: isShow ? 'block': 'none'}}> 控件 </div>

2019-10-08 16:56:12 48 0

原创 Node.js --- async/await

async/await 使得异步代码看起来像同步代码 async 相当于星号 * await 相当于 yield 将 add() 视为一个需要运行很长时间的函数 js 默认为异步非阻塞 const sleep = () => new Promise((res, rej) => setT...

2019-10-06 19:02:07 50 0

原创 Node.js ---了解 Node.js

搭建网站中可能用到的 Nose.js 模块: Node.js 中的事件循环 参考 https://medium.com/front-end-weekly/javascript-event-loop-explained-4cd26af121d4 https://segmentfault.co...

2019-10-04 20:03:39 34 0

原创 .tar.xz 的压缩与解压

压缩: tar -Jcvf test.tar.xz test 解压: tar -Jxf test.tar.xz

2019-09-29 19:44:44 519 0

原创 Nodejs---promisify fs.mkdir

const {promisify} = require('util') const fs = require('fs') const mkdirAsync = promisify(fs.mkdir) mkdirAsync('/data/aa�...

2019-09-29 12:37:35 83 0

原创 react---刷新后会执行什么函数

react 组件,手动刷新页面后,后会执行组件的 componentDidMount() 函数

2019-09-24 23:52:31 272 0

原创 Requirement already satisfied: flask in /usr/local/lib64/python3.6/site-packages

问题描述 执行 pm2 start -s --name=hello hello.py 服务器没有启动成功 pm2 日志: vim ~/.pm2/logs/hello-error.log Traceback (most recent call last): File "/data/...

2019-09-23 22:53:58 738 0

原创 Node.js---npm ERR! code ELIFECYCLE npm ERR! errno 137

出现错误: npm ERR! code ELIFECYCLE npm ERR! errno 137 原因: 剩余内存不足,导致 OOM 用 free -m 可查看剩余内存 解决: 不知道如何解决,重启系统就好了

2019-09-17 21:59:15 892 1

原创 Rust---hello world

安装 curl https://sh.rustup.rs -sSf | sh source $HOME/.cargo/env 检查安装 cargo --version 创建新项目 cargo new hello-rust 运行 cd hello-rust/ cargo run 结果 Hel...

2019-09-16 09:45:40 495 0

提示
确定要删除当前文章?
取消 删除