- 博客(259)
- 资源 (11)
- 收藏
- 关注
原创 go 内存模型和内存顺序(memory model and memory order in go)
内存模型首先,官方文档有大致介绍总结下来:建议多个goroutines 并发修改数据时候,那就串行化。具体可以用go 经典的channel,再不济用sync包里的 mutex 或者 atomic 也行。如果你很屌,不想串行化并发控制,那么注意一下几点:1. happens before至于 happens before 和 happens after 的具体定义,可以看官方文档。要知道,单 goroutine 下,hapens before 顺序就是程序书写顺序。2. package in
2021-08-14 19:21:26
540
原创 红黑树演进
看这个 https://www.cs.princeton.edu/~rs/talks/LLRB/RedBlack.pdf,茫然。看这个 https://zhuanlan.zhihu.com/p/340419231 拾人牙慧。
2021-01-10 13:30:23
402
原创 iptables vs nftables, using firewall-cmd
最近用 firewall-cmd 做一些网络问题上的实验,困惑于本后的工作原理。做了一些quick search,整理一些文章,当作以后备忘吧。https://medium.com/@iced_burn/compare-firewalld-iptables-nftables-netfilter-de08a8d21b5bhttps://ungleich.ch/en-us/cms/blog/2018/08/18/iptables-vs-nftables/#:~:text=IPtables%20is%20ab
2021-01-10 12:13:28
810
转载 tcp网络协议图示
作者:小林coding链接:https://zhuanlan.zhihu.com/p/146752547来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。01 TCP 三次握手的性能提升TCP 是面向连接的、可靠的、双向传输的传输层通信协议,所以在传输数据之前需要经过三次握手才能建立连接。那么,三次握手的过程在一个 HTTP 请求的平均时间占比 10% 以上,在网络状态不佳、高并发或者遭遇 SYN 攻击等场景中,如果不能有效正确的调节三次握手中的参数,就.
2021-01-01 17:26:26
1043
原创 时间管理大师
时间管理自测1、电话打扰我的工作,而且无比的冗长。2、公司内外的人来拜访我,使我无法完成自己的工作。3、会议时间拖得太长,会议结果效果不佳。4、推迟要花费大量时间去处理的棘手工作,很难把它们做完,因为很难静得下心来。(能拖就拖)5、做事没有明确的先后顺序,尝试同时解决很多工作,把太多的时间花费在琐碎的小事上,无法专注于最重要的任务。6、只有在时间很紧迫的时候,才能按时间表完成任务,因为期间会发生没有预计到的情况,或者是做了太多别的事情。7、写邮件和读邮件花了太多的时间。8、与其他人的沟通存在
2020-11-07 22:26:25
535
1
原创 按下键盘计算机具体发生了点儿啥?
indexinterrupt如何通知到CPU?终端处理程序是啥?CPU怎么找到ISR?CPU怎么知道当前中断的interrupt number?老问题了,在网上搜罗了一圈,没有啥靠谱的回答。其实这种问题,在大学里学习的计算机基础课程里都有很好的回答。可惜网上很少有人能够把这些基础只是串起来。啥基础知识呢?对于计算机专业的学生来说(cs student),就是《计算机组成原理》以及《操作系统》两门课。键盘输入,这种操作就是典型的计算硬件和软件(这里的软件就是OS)相互配合来完成的。咋配合呢?中断机制
2020-10-08 18:18:58
881
原创 查看python进程运行栈
reference首先保证进程运行机器上有GDB和pyrasite# Redhat, CentOS, etc$ yum install gdbpip install pyrasite找到卡住的python进程ID,然后用pyrasite-shell attach上去# Assuming process ID is 12345$ pyrasite-shell 12345进入 python repl 环境,然后输入from __future__ import print_function
2020-06-17 15:46:50
3594
原创 数字签名与认证
https 协议在真正进行 http 通信之前,需要 浏览器与服务器 之间协商好加密密钥,而在协商之前,浏览器会先验证服务器的合法性。怎么验证浏览器的合法性呢?肯定需要第三方认证机构的支持,这个第三方就是CA机构。CA机构CA机构会给浏览器和服务器各自一个证书:浏览器这边边的这书保存的是CA给服务器分配的公钥,比如:服务器公钥baidu.comkey.pub A...
2020-05-10 23:22:10
639
原创 tcpdump 速查
basictcpdump -nvvv -i any-n: 打印ip port, 而非hostname, portname-v: verbose, -vvv 三级 verbose-i:指定网络interface针对IP port 进行过滤tcpdump -nvvv -i any -c 20 '(port 80 or port 443) and host 10.0.3.169'打印包...
2020-04-09 13:50:59
1049
原创 既然有GIL了那么为什么在python中多线程编码时候还需要加锁?
GIL由于 python 解释器(Cpython interpreter)不是线程安全(thread-safe)的,所以 Cpython interpreter 的实现中使用了GIL(global interpreter lock)来阻止多线程同时在一个 pyobject 上操作。这里所说的 “不是线程安全“ 是指Cpython interpreter在内存管理上不是线程安全的。比如,两个线程同...
2020-01-22 15:37:55
5270
原创 ssh 代理设置
1. 直接指定命令参数- o 指定 ProxyCommand 。可以通过 ProxyCommand 告诉 ssh client 如何与代理进行通讯,通过代理与运程主机建立 ssh 链接。ssh -p 36000 -o "ProxyCommand corkscrew 127.0.0.1 12759 %h %p" -o "ControlMaster auto" -o "ControlPath ~...
2019-12-05 16:50:51
2330
原创 命令行(bash)并发请求(压测)server
while :; do for i in $(seq 4); do time PYTHONIOENCODING=utf-8 PYTHONHOME=venv http_proxy= venv/bin/python client.py 127.0.0.1 & pids[$i]=$!; done; for pid in ${pids[*]}; do wait $pid; done; done...
2019-12-01 23:53:27
2828
原创 python 虚拟环境设置
参考下面的 shell 脚本设置#! /bin/bashset -eu# generate python2.7 project# it's the first time that I generate project using python2.7 last week# it took me a lot of time to handle the python2.7 virtual ...
2019-11-22 17:18:11
236
原创 检查环境变量设置
问题: 如何找到 LC_CTYPE 这个环境变量在哪儿定义的?可以按照下面顺序检查Some places to look first:System wide/etc/environment: specifically meant for environment variables/etc/env.d/*: environment variables, split in multipl...
2019-11-22 16:57:43
352
原创 保留当前环境变量执行 sudo 操作
当执行sudo "command"或者sudo bash -c "your command or scripts"时候,你在当前执行当 interactive shell 上设置当环境变量或者定义在自己的 login shell 初始化脚本(比如~/.bashrc, ~/.bash_profile)里的环境变量不会生效。如何让这些变量在 sudo 情况下生效呢?sudo -E ba...
2019-11-22 11:51:21
2200
原创 golang 标准库 http 的 client 为什么必须手动关闭 resp.Body
使用 golang http client 请求,我们通常是这么干的resp, err := http.Get(...)if err != nil {..}defer resp.Body.Close()为啥必须 resp.Body.Close() 呢?回答这个问题其实需要回答两个问题:resp.Body.Close() 做了啥?为啥这么做?1 resp.Body.Clo...
2019-10-06 14:21:36
5565
原创 golang 标准库 http client 超时设置
golang 官方提供的 http 包里的 http client 可以通过一下两种方法设置超时(其他一些精细的超时控制比如设置 transport 里的 dial connect 的超时时间不在这里讨论)。1 client.Timeout// 设置1s超时cli := http.Client{Timeout: time.Second}2 req.WithContext// 设置1s超...
2019-10-05 23:23:44
17791
原创 linux 系统调用
https://blog.packagecloud.io/eng/2016/04/05/the-definitive-guide-to-linux-system-calls/
2019-08-11 22:22:04
264
原创 ssh端口转发(打洞)
local port forwarding举例来说,工作中常见场景,一台 mysql 数据库 1.2.3.4:3306 在本地网络环境中不通,不过在远程开发机 1.2.3.5 上可以连通,通常需要 ssh 到 1.2.3.5上,然后 mysql client 命令行链接。使用 ssh local port forwarding 可以做到直接在本地连接1.2.3.4:3306ssh -fN ...
2019-07-14 12:59:35
985
原创 一键安装gcc 和 docker
写了一个脚本,自动化gcc 和 docker安装过程。优点:自动化快速不依赖网络屏蔽配置细节缺点:5. 对安装过程无感知6. 只能安装固定版本docker( docker ce 18),gcc( 9.1)gcc 脚本制作过程:shell 脚本 installgcc.sh#! /bin/bash# This is just a little script that ...
2019-07-13 19:34:13
2621
原创 批量重命名文件
为了避免ide跳转到 golang plan9 代码,需要把所有 “plan9” 到文件重命名,加上后缀.bak。find .local/go/src -name "*plan9*" -type f | xargs -n 1 sh -c 'f=$0; d=$(dirname $f); b=$(basename $f); mv $f $d/${b/$b/$b.bak}'...
2019-07-13 13:29:58
283
原创 文件操作为啥需要及时手动 close?
目前知道的原因:文件打开后保存在操作系统buffer中,如果程序异常退出,造成系统资源浪费。使用 file.close(),能够让os及时将buffer中的数据flush到文件里。防止在频繁open操作的场景下的file descriptors耗尽(文件描述符泄漏)。// todo待看源码验证。...
2019-07-06 12:37:57
3342
原创 多线程导致的内存泄漏
Joinable threads VS Detached threads线程有两种运行模式:Joinable ModeDetached ModeJoinable Thread & pthread_join()#include <stdlib.h>#include <stdio.h>#include <string.h>#include...
2019-06-28 22:59:54
4294
原创 内存释放free函数如何知道内存大小
想知道free如何工作那肯定需要知道malloc如何工作,正所谓怎么来的就怎么回去。使用malloc分配内存时候根据参数指定的大小,分配一块内存,然后返回这块内存的起始位置给调用者,这就是调用者拿到的所谓的指针。起始这个指针并不是真正的起始位置,真正的指针在malloc返回指针 p 的前面,内存分配器在 p 的前面用两个字节的空间来存放分配的内存大小信息。看下图:...
2019-06-28 15:19:05
2639
原创 pre-binary 安装docker
由于公司centos开发机有网络完全设置,总是存在网络不通或者外网不通或者yum源不全等各种各样等问题,导致我安装docker环境处处碰壁。现在这里记录一下我是用 pre-binaries 离线安装docker的过程。1. 准备 pre-binaries在这里下载二进制打包文件 https://download.docker.com/linux/static/stable/x86_64/ 。...
2019-03-15 19:50:16
192
原创 linux进程虚拟内存
http://csapp.cs.cmu.edu/2e/ch9-preview.pdfhttp://engineering.pivotal.io/post/virtual_memory_settings_in_linux_-_the_problem_with_overcommit/https://manybutfinite.com/post/anatomy-of-a-program-in-mem...
2018-12-06 23:30:17
4520
原创 为啥redis是单线程的?
看到网上一些讨论,现在在这里整理一下。多线程编程复杂并且线程之间需要加锁,影响性能CPU并不是瓶颈,网络才是瓶颈。redis 是一个server,通过网络io与多个client交互。多线程并不意味着更快。redis设计成单线程就是为了避免线程之间的锁竞争,使得内存访问超级快。...
2018-11-22 16:13:43
270
原创 虚拟机实现(C语言)
reference: https://felixangell.com/blog/implementing-a-virtual-machine-in-c/介绍这里写篇文章介绍一下用C语言实现虚拟机。我喜欢从事底层程序的工作, 比如编译器、解释器、解析器和虚拟机等。所以我写这篇文章来学习一下虚拟机是如何工作的,以此来带领自己进入底层编程领域。前提继续这篇文章之前你需要有:GCC/Cla...
2018-11-01 23:16:38
14798
2
原创 执行机器码
首先生成机器码为下面函数生成机器码:// mul.cint mul(int a, int b) { return a*b;}然后编译汇编之,生成 object 文件: gcc -c mul.c -o mul.o从 mul.o 中提取机器码:objdump -j .text -d mul.omul.o: file format elf64-x86-64Disa...
2018-10-25 21:37:22
4033
原创 C语言实现协程(coroutine)
Donald Knuth 说过:“子程序就是协程的一种特例。”编程过程中,最常用的就是函数调用,这时对于调用方来说,被调函数就是子程序(subroutine)。可以把协程理解相互配合工作的函数,函数之间可以相互切换,并且能够从上次切换的状态重新开始执行。python 程序中的 yield 关键字可以将一个函数停止执行并保持执行状态,等待再次被调用。 def rangeN(a, b...
2018-10-22 14:17:05
7725
原创 达夫设备(duff's device)
达夫设备(Duff’s device)是 c 编程语言里将循环展开的编程技巧。具体就是使用 switch 和 loop 结合,将 case 写在 loop 里面。下面代码展示里其执行过程:#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;string.h&gt;void copy(int src[], int ...
2018-10-22 12:21:58
1241
原创 使用 dlv 调试 golang 程序
使用 dlv 前取消编译时优化go build -gcflags='all=-N -l'取消测试用例编译时优化go test -c --gcflags='all=-N -l'使用 dlvto be continue…
2018-10-17 22:03:39
2012
原创 结构体内存布局`alignof`
首先看看下面这个程序对输出#include &lt;stdio.h&gt;#include &lt;stdint.h&gt;#include &lt;stdalign.h&gt;typedef uint32_t MYSIZE;struct Node{ char *Data;// 1 --- 指针变量,如果在64位操作系统上,占用8byte struct Node...
2018-09-10 11:46:40
1018
原创 共享内存
方式1 使用mmap#include &lt;sys/mman.h&gt;#include &lt;stdlib.h&gt;#include &lt;strings.h&gt;#include &lt;unistd.h&gt;#include &lt;errno.h&gt;#include &lt;stdio.h&a
2018-09-10 11:12:51
250
原创 linux 下的 autotools 使用
在Linux环境下,当拿到一份源码,安装过程通常简单如下:./configuremakemake installc project 源码中通常有个 configure 程序,确切来说他是一个shell脚本。他的作用就是检测当前操作系统和一些执行环境(比如依赖和编译器等),然后根据这些信息生成 Makefile 文件。 一般项目中不会有 Makefile ,通过configure...
2018-08-23 22:12:11
630
计算机中断处理机制(interrupt)
2020-10-08
numpy for python 2.7 (windows 64 bit)
2014-12-12
增强学习教程2
2014-12-05
增强学习教程
2014-12-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人