emacs copy current line

emacs copy current line ;;copy current line (global-set-key (kbd “C-c C-w”) ‘copy-lines) (defun copy-lines(&optional arg) (interactive “p”) (save-excursion (beginning-of-line) (set-mark (point)) (next-line arg) (kill-ring-save (mark) (point)) ) )

2011-04-30 · 1 min · 28 words · -

find command

find command find 命令默认会递归遍历子目录 # find pathname -options find / -name '*task*.log' # find by file size # >100MB find . -type f -size +102400k -name 按文件名查找文件 # -name 按文件名查找文件 find . -name t.sql # 使用通配符时要加引号(单引号/双引号) find . -name 'bookmark*' # . 当前目录 # / 根目录 # 查 3 分钟前修改的文件 find . -mmin +3 -a, and -o, or -type f 表示查找文件而不是目录 -type d 目录类型 -prune prune 的功能就是当遇到某个文件夹的时候,跳过这个文件夹,不进去继续查找。 ...

2011-04-30 · 4 min · 685 words · -

chmod

chmod chmod a+x 1.sh chmod og+rwx 1.sh 格式: [ugoa…][+-=][rwxX…][,…] u 拥有者 g 与拥有者同组的 o 其它用户 a 三者都是 chmod -R a+rw folderName -R 对目录下和所有文件和子目录进行相同的权限变更

2011-04-24 · 1 min · 23 words · -

emacs 自动补全括号

emacs 自动补全括号 ;;; use groovy-mode when file ends in .groovy/.gradle or has #!/bin/groovy at start (autoload ‘groovy-mode “groovy-mode” “Groovy editing mode.” t) (add-to-list ‘auto-mode-alist ‘(".groovy$" . groovy-mode)) (add-to-list ‘interpreter-mode-alist ‘(“groovy” . groovy-mode)) (add-to-list ‘auto-mode-alist ‘(".gradle$" . groovy-mode)) ;;auto pair (defun code-mode-auto-pair () “autoPair” (interactive) (make-local-variable ‘skeleton-pair-alist) (setq skeleton-pair-alist ‘( (?` ?` _ “”") (?( ? _ " )") (?[ ? _ " ]") (?{ n > _ n ?} >) ...

2011-04-23 · 1 min · 99 words · -

emacs auto backup

emacs auto backup (setq backup-directory-alist ‘(("" . “~/backup/emacs/backup”))) (setq-default make-backup-file t) (setq make-backup-file t) (setq make-backup-files t) (setq version-control t) (setq kept-old-versions 2) (setq kept-new-versions 10) (setq delete-old-versions t)

2011-04-23 · 1 min · 29 words · -

shell command basic

shell command basic ascii to binary $ echo -n "A" | xxd -b 0000000: 01000001 A $ echo -n "A" | xxd -b | awk '{print $2}' 01000001 https://unix.stackexchange.com/questions/98948/ascii-to-binary-and-binary-to-ascii-conversion-tools base64 > hex echo "YWJj" |base64 -d|xxd Display the last users who have logged onto the system last Display the user and group ids of your current user id Display who is online w Show who is logged into the system who Show this month’s calendar cal printf export LC_NUMERIC="en_US.UTF-8" printf "%'f\n" 1234567.777 1,234,567.777000 ...

2011-04-23 · 3 min · 585 words · -

emacs 插件安装

emacs 插件安装 #edis .emacs (add-to-list 'load-path "/home/wiloon/.emacs.d/lisp") ;;; use groovy-mode when file ends in .groovy or has #!/bin/groovy at start (autoload 'groovy-mode "groovy-mode" "Groovy editing mode." t) ;;files end with .groovy , open as groovy mode (add-to-list 'auto-mode-alist '(".groovy$" . groovy-mode)) (add-to-list 'interpreter-mode-alist '("groovy" . groovy-mode))

2011-04-23 · 1 min · 46 words · -

emacs 查找替换字符串

emacs 查找替换字符串 M-% (然后会出现Query replace的字样) Query replace:<被替换字符串> Query replace <被替换字符串> with:<替换字符串> Query replacing <被替换字符串> with <替换字符串>: (? for help) **查询替换命令的选项如下: ** y 或者 空格 键 替换搜索到的字符串 n 或者 Del 键 取消替换搜索到的字符串 ^ 回到前一个搜索到的字符串 ! 替换所有没有替换的与模式匹配的字符串 ESC 键 退出本次查询搜索

2011-04-16 · 1 min · 38 words · -

emacs 配置/config

emacs 配置/config 中文环境 之后,在~/.Xresources (如果没有的话,自己建一个) ,加入下面内容: Xft.antialias: 1 Xft.hinting: 1 Xft.hintstyle: hintfull 调用X Window系统中的字体,并且开启抗锯齿。 之后在~/.emacs下面加入 (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(inhibit-startup-screen t)) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) ; source: http://steve.yegge.googlepages.com/my-dot-emacs-file (defun rename-file-and-buffer (new-name) "Renames both current buffer and file it's visiting to NEW-NAME." (interactive "sNew name: ") (let ((name (buffer-name)) (filename (buffer-file-name))) (if (not filename) (message "Buffer '%s' is not visiting a file!" name) (if (get-buffer new-name) (message "A buffer named '%s' already exists!" new-name) (progn (rename-file filename new-name 1) (rename-buffer new-name) (set-visited-file-name new-name) (set-buffer-modified-p nil)))))) (setq frame-title-format "emacs@%b") ; Set default window size (setq default-frame-alist \`((height . 35) (width . 123))) ;; Set font ;;设置DejaVu Sans Mono为默认情况下的字体,字号为12号。 ;;然后再设置一个字符集,设置字符集字体为WenQuanYi Micro Hei(文泉驿微米黑),当编码为非拉丁字母时, ;;系统自动会在/etc/fonts/cond.avail中寻找编码,比如汉字,就对应han,泰文就对应thai,等等. (set-default-font "DejaVu Sans Mono-11") (set-fontset-font (frame-parameter nil 'font) 'han '("WenQuanYi Micro Hei")) ;; the following function is to scroll the text one line down while keeping the cursor (defun scroll-down-keep-cursor () (interactive) (scroll-down 3)) ;; set cursor as bar (setq-default cursor-type \`bar) ;; hide tool bar (tool-bar-mode 0) ;; hide menu bar (menu-bar-mode 0) ;; hide scroll bar (scroll-bar-mode 0) ;;enable select to clipboard (setq x-select-enable-clipboard t) ;;允许使用C-z作为命令前缀 (define-prefix-command 'ctl-z-map) (global-set-key (kbd "C-z") 'ctl-z-map) ;;用C-z i快速打开~/.emacs文件。 (defun open-init-file ( ) (interactive) (find-file "~/.emacs")) (global-set-key "\C-zi" 'open-init-file) ;;启用ibuffer支持,增强\*buffer\* (require \`ibuffer) (global-set-key (kbd "C-x C-b") \`ibuffer) ;show line number (global-linum-mode t) ;;auto backup (setq backup-by-copying t ;自动备份 backup-directory-alist '(("." . "~/.saves")) ;自动备份在目录"~/.saves"下 delete-old-versions t ;自动删除旧的备份文件 kept-new-versions 6 ;保留最近的6个备份文件 kept-old-versions 2 ;保留最早的2个备份文件 version-control t) ;多次备份 ;显示光标所在的行号列号 (setq column-number-mode t) http://murphytalk.github.io/posts/2005/03/03/gai-bian-emacschuang-kou-biao-ti-ge-shi/#.WJpliCFNzWU ...

2011-04-16 · 2 min · 319 words · -

linux CLI

linux CLI 作为 Linuxer,必须具备一定的 CLI 操作能力。有时候用 CLI 会比用 GUI 会更方便快捷。 —-lcan http://lcan.info/2011/03/cli-software/#comment-53 以下列出我所知道的一些常用 CLI 软件,仅供参考。 中文终端。据我所知,目前主要有两个解决方案: zhcon 和 fbterm。两个我都用过,zhcon 较长时间不更新了,问题比较多。不小心加错参数,甚至可能会导致死机。所以我推荐 fbterm,这个还是很不错的,要使用的话,必须开启 framebuffer。虽然某些方面也有些瑕疵,不过就目前而言,应该算是一个比较好用的中文终端了。有人可能会问: “中文输入怎么解决?“嘿嘿,这个倒不用担心。比较简陋的有 fbterm_ucimf,另外还有基于 ibus 的 ibus-fbterm 可供选择。 多窗口管理神器: tmux。功能和 screen 差不多,不过我感觉 tmux 更加强大、友好!可以横着切、竖着切窗口。让你充分利用你的屏幕!实乃远程管理、多任务控之必备神器啊! 文件管理器: vim 风格的可以选 ranger,另外还有 mc 之类的。 任务管理器: htop。这个可以理解为 top 的加强版。 音乐播放器: moc。这个用来播放 mp3,wma,flac 等常见音频文件还是不错的,但是不支持 ape 和 cue。如果这类文件比较多的,那就只能另寻他方了。cmus 也不支持 ape。 视频播放器: mplayer。说这个之前,我想咆哮几句: 是谁说 Linux 终端下只能用字符方式看视频啊!!!!是谁说在终端下看视频纯属找虐 啊!!!!!乃们这是误人子弟啊!!!!有木有听说过 framebuffer!!!!有木有!!!!有木有听说过 fbdev 输出!!!!!有木 有!!!!!! 我以前被人误导,也一直认为在 tty 终端下只能以字符方式看视频,但是直到有一天,我无意中了解到了有 framebuffer 这个东西!!!!无意中看到 mplayer 的视频输出里有 fbdev!!!!于是在开启了 framebuffer 的 tty 下。 mplayer -vo fbdev2 “我要看的视频” 我看到了神马?!我看到了一个清晰的带颜色输出的视频,竟然和在图形界面下播放时的质量差不了多少!!!!有木有看到!!!有木有!!!! PDF/图片查看器: fbida。fbida 里面包含了fbi,fbgs,ida,exiftran 四个应用。其中 fbi 可以用来查看图片 (FBI啊,名字就很牛X) ,fbgs 可以用来查看 PDF。前提嘛,估计各位看软件名就知道了,必 须开启 framebuffer。 截图工具: fbgrab。不废话,看官方说明: fbgrab – takes screenshots using the framebuffer。在桌面环境下可以用scrot这个命令行软件截屏。 IM 软件: finch。这个可以看成是 pidgin 的 CLI 版。 IRC 聊天: irssi。一个很强大的 IRC 客户端。 邮件客户端: mutt。有关介绍请移步 wiki。这个我基本不用。 RSS 阅读器: snownews。 屏幕录像: recordmydesktop。此软件可用于录制 GNOME、KDE 等桌面。

2011-04-03 · 1 min · 123 words · -

accord, grant

accord, grant https://www.tjxz.cc/11067 give、accord、award、confer、grant、endow、present与bestow这组动词均含有“给予、赠给”之意。 give 最普通用词,泛指将自己的东西给予他人,所给予的东西,物质或非物质的均可。 She gave us a set of saucepans as a wedding present. 她送我的结婚礼物是一套深平底锅。 Can you give me a date for another appointment? 我能再和您约个时间吗? They never gave me a chance/choice. 他们从来就没给过我机会/选择余地。 Has the director given you permission to do that? 主任允许你那样做了吗? accord 侧重所给予的是应得的或是恰当的,或是因某种原因而适于接受的。 The massed crowds of supporters accorded him a hero’s welcome. 蜂拥云集的支持者们给予他英雄般的欢迎。 Certainly in our society teachers don’t enjoy the respect that is accorded to doctors and lawyers. 的确,在我们这个社会中,老师没有得到像医生和律师所受到的那种尊敬。 ...

2006-01-02 · 2 min · 230 words · -

gdb

gdb GDB是Linux下非常好用且强大的调试工具。GDB可以调试C、C++、Go、java、 objective-c、PHP等语言。对于一名Linux下工作的c/c++程序员,GDB是必不可少的工具 readelf -S main|grep debug # 查看寄存器的值 i registers # 以上输出不包括浮点寄存器和向量寄存器的内容。使用“i all-registers”命令,可以输出所有寄存器的内容 i all-registers # 打印单个寄存器的值,可以使用“i registers regname”或者“p $regname”,例如: i registers rsi # 用 gdb 调试 hello gdb ./hello # 在 _start 函数处添加一个断点 (gdb) b _start # run (gdb) r # 显示汇编代码, => 表示下一步要执行的行 (gdb) disassemble /m _start # 逐指令往后运行 (gdb) stepi # 查看寄存器的值 (gdb) i registers

2006-01-02 · 1 min · 59 words · -

sketch, 素描

sketch, 素描 素描的学习过程: 1石膏几何体. 2素描静物 3人物 学习石膏几何体和静物会解决的问题: 基本的绘画技巧、比例、构图、黑白灰、空间、虚实等,建立绘画思维和观察方法。 三:为什么要先学素描? 搞清楚素描学习的目地 素描学习是对绘画意识和能力的培养,不要只是去学习套路的技法,不然就失去了素描学习的意义。 说的简单点,素描会解决形,色,空间,体积,基本的透视关系,画面关系等问题。所有的视觉艺术(摄影,电影,设计,绘画)都会涉及到这些,重要性显而易见。 有很多学生一开始就会给老师说,我想学水彩,想学油画,不学素描太枯燥了。 如果你是想真学到东西,不了解素描你可能永远都是外行,除了我们的中国画,西方历史上的名家们谁没画过素描呢?只是有些艺术流派,有些艺术创作风格,特别是现代艺术,可能有些不需要很强的素描的基本功。但是他们都是画过大量的素描。 https://zhuanlan.zhihu.com/p/321783268

2006-01-02 · 1 min · 15 words · -

ubuntu install k8s

ubuntu install k8s ubuntu 24.04 安装 单节点 k8s sudo swapoff -a sudo sed -i '/swap/s/^/#/' /etc/fstab sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl # 安装 containerd, 我之前 已经 安装 了, 跳过这步 K8S_VER="v1.33.4" ARCH="amd64" # 下载二进制文件 curl -LO "https://dl.k8s.io/release/${K8S_VER}/bin/linux/${ARCH}/kubectl" curl -LO "https://dl.k8s.io/release/${K8S_VER}/bin/linux/${ARCH}/kubeadm" curl -LO "https://dl.k8s.io/release/${K8S_VER}/bin/linux/${ARCH}/kubelet" # 添加可执行权限 chmod +x kubectl kubeadm kubelet # 移动到系统 PATH 目录 sudo mv kubectl kubeadm kubelet /usr/local/bin/ /etc/systemd/system/kubelet.service [Unit] Description=kubelet: The Kubernetes Node Agent Documentation=https://kubernetes.io/docs/ After=containerd.service Wants=containerd.service [Service] ExecStart=/usr/local/bin/kubelet Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target sudo systemctl daemon-reload sudo systemctl enable kubelet VERSION="v1.34.0" curl -LO https://github.com/kubernetes-sigs/cri-tools/releases/download/${VERSION}/crictl-${VERSION}-linux-amd64.tar.gz sudo tar -C /usr/local/bin -xzvf crictl-${VERSION}-linux-amd64.tar.gz crictl --version # 如果之前 有过 初始化 sudo kubeadm reset -f sudo systemctl stop kubelet # 初始化集群, kubeadm 会启动 kubelet 服务 sudo kubeadm init --pod-network-cidr=10.244.0.0/16 install Kubernetes 1.28.2 on Ubuntu 22.04 ...

2006-01-02 · 5 min · 929 words · -

无状态服务, stateless service

无状态服务, stateless service https://blog.csdn.net/xiangxizhishi/article/details/79434749 一、定义 无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息 有状态服务(stateful service)则相反,它会在自身保存一些数据,先后的请求是有关联的 二、优劣 有状态服务常常用于实现事务(并不是唯一办法,下文有另外的方案)。举一个常见的例子,在商城里购买一件商品。需要经过放入购物车、确认订单、付款等多个步骤。由于HTTP协议本身是无状态的,所以为了实现有状态服务,就需要通过一些额外的方案。比如最常见的session,将用户挑选的商品(购物车),保存到session中,当付款的时候,再从购物车里取出商品信息 有状态服务可以很容易地实现事务,所以也是有价值的。但是经常听到一种说法,即server要设计为无状态的,这主要是从可伸缩性来考虑的。如果server是无状态的,那么对于客户端来说,就可以将请求发送到任意一台server上,然后就可以通过负载均衡等手段,实现水平扩展。如果server是有状态的,那么就无法很容易地实现了,因为客户端需要始终把请求发到同一台server才行,所谓“session迁移”等方案,也就是为了解决这个问题 三、session和cookie 基于session和cookie都可以实现事务,可以认为,session是有状态的,而cookie是无状态的 四、无状态实现事务的方法 并不是一定要用有状态服务才能实现事务,本文提供另外的几种方案作为参考 举一个多次提交的场景作为例子:用户需要提交很多数据,分为2个页面提交 这里就涉及到2次http请求,第一次提交字段1、2、3,第二次提交字段4、5、6 用session很容易实现这个需求,server只需要将第一次提交的数据,保存在session里,然后返回第2个表单作为相应;然后取出第一次提交的数据,和第二次提交的数据汇聚以后,一起存入数据库即可 不用session同样也可以实现,server接收到第一次请求以后,将数据作为隐藏元素,放在第2个表单里返回;这样用户第2次提交的时候,就隐含地再次提交了第一次的数据;server将所有数据存入数据库 用HTML5,则还可以进一步优化,client可以将第一次提交的数据,保存在sessionStorage里 用cookie也是类似的道理,同样可以实现,但是不太好 总的来说,3种替代方案(隐藏表单元素、sessionStorage、cookie)都避免了在server端暂存数据,从而实现了stateless service。本质上,这3种方案的请求里,都包含了所有必须的数据,符合本文一开始的定义 五、将有状态服务转换成无状态服务 根据本文一开始的定义,除了将所有信息都放在请求里之外,还有另外一种方法可以实现无状态服务,即将信息放在一个单独可共享的地方,独立于server存在 比如,同样还是采取session的方式,在服务端保存数据,减少每次client请求传输的数据量(节省流量);但是将session集中存放,比如放在单独的session层里。这种情况下,server同样是无状态的,可以做水平扩展 六、无状态类 引申一下,JAVA里有一种类的设计,可以称为无状态类。这种类的特征是只有方法没有字段,在三层架构(展现层、逻辑层、持久层)里,逻辑层经常可以看到这种类 我觉得无状态类和stateless server在思想上是一样的,这个类本身是没有状态的,所以当外部要调用它的方法时,需要在方法参数中传来所需的所有信息,不依赖该类自身的状态(字段值),在并发环境下,可以避免多线程带来的副作用 七、总结 有状态服务可以比较容易地实现事务,在不需要考虑水平扩展时,是比较好的选择 无状态服务的优势在于可以很方便地水平伸缩,但是在实现事务时,需要做一些额外的动作 可以通过剥离session等方法,将一个有状态服务,转换成无状态服务 关于这个话题,下面这个链接也不错: http://stackoverflow.com/questions/4495950/how-do-stateless-servers-work

2006-01-02 · 1 min · 37 words · -

分组 首先我们来了解下分组的概念。所谓分组,就是将一个数据包分成一个个更小的数据包。例如对于一个10GB的数据包,总不可以一次性发送过去吧,而是把它分成若干个小的数据包发送过去。 文件头一般是一些说明性数据,例如源地址和目标地址,数据类型等。数据部分就是真正要传达给对象的内容 电路交换 所谓交换,指的就是服务器与服务器之间的数据交换。数据传输交换的方式有几种,而电路交换便是其中的一种。 假如A和B之间要进行通信,我们就假设A要和E打个电话吧。当A输入E的电话号码,开始拨号之后,那么服务器要做的第一件事就是根据E的电话号码找到E在哪里,由于A通往E的路径有多条,会根据某种算法找到E之后,建立一条通路,然后进行数据的传输。 我们假设选的路径是A–>D—>E 找到一条通往E的路径并建立会话的过程中,我们称之为电路交换的第一阶段—建立连接。之后A和E在通话的过程中会始终霸占着这条路径,数据传输的过程称为电路交换的第二阶段—数据传输。 电路交换的第三阶段,也就是最后一个阶段—释放连接。A和B只要有一方挂了电话,那便了开始释放连接。 传输例题图: 在这个过程中,新建连接需要花销一定的额外时间 (想象你打电话的时候是不是出现正在拨号的字眼) ,释放连接也会花销一些额外的时间。 那么,电话交换的过程中,数据需要分组来传送吗? 答是不用的,因为电话交换的过程中,A和B两个人始终霸占着一条通信电路,他们每说一句话,都会实时被对方获取,因此数据是不用分组的。 从这也可以看出,电路交换的方式,在数据的传输上是比较高效、实时的,只要A一发出数据,E立马就能收到了,这也是为什么我们的电话通信使用的是电路交换的方式。 但由于一直霸占着这条路径,假如霸占的过程中A与E都在沉默不说话,那么将是对这条路径的极大浪费。因此,电路连接的方式资源的利用率是比较低的。 而且,如果你通话的时间超级短,可能花在新建连接的时间比通话的时间还要长,这就更加难受了。 稍微总结一下 电路连接的三个阶段: 建立连接。 数据传输。 释放连接。 优点: 传输速度快、高效。 实时。 缺点: 资源利用率低。 新建连接需要占据一定的时间,甚至比通话的时间还长。 分组交换 从名字分组字眼,我们就可以知道,这种方式数据包是分组成更小的数据包进行传输的。分组交换的数据传输过程和电路交换不一样,分组交换采取存储转发传输的机制。我们下面还是以A给E传输数据作为例子来讲解。 假如A要给E发送一个数据包P,但这个数据包有点大,需要分成三组,例如分成p1,p2,p3三个更小的数据包。 这时A给E传输数据不需要新建连接这个过程,即不需要寻找一个通往E的路径。而且A直接把小的数据包丢给附近的路由器,然后A就不管了,例如A把p1丢给了B,这个时候A就不在去管p1的,当B收到p1这个完整的小数据包之后,B再丢给E。 但是A不一定都会把剩下的数据包都丢给B,有可能会把其他的数据包p2丢给C,之后再把p3丢给D,然后C和D在转发丢给E。这些都是不确定的,会根据某种算法的选择路由器。 这里有一个关键词存储,就是说,B必须收到完整的p1数据包后才能进行转发,这也不难理解,因为p1数据包包含E的地址,如果不是完整的数据包,B也不知道该发给谁啊。 示例图: 从电路交换的机制我们可以看出如下的一些问题: 由于A把数据包丢给B之后就不管了,B什么时候会把p1转发出去,谁也不知道,而且可能B会绕几个圈子再发给E也是有可能的。因为,电路交换的机制在数据传输方面不具有实时性。 而且,很有可能会有很多路由器把数据包丢给B,这个时候就会造成通信阻塞,这时可能p1只能排队等待B来发送。 由于B路由器的容量是有限的,如果有太多的数据包丢给它,它可能会容纳不下,这时候就可能会出现丢包的情况。 再者,由于p1,p2,p3数据包都有文件头,里面都包含了A和E的一些信息,当然还有其他的信息。可以说这些文件头有很多重复的数据,因此分组交换发送的数据具有很多的重复无用数据。 当然,分组交换还包括时延的缺点,因为B必须收到一个完整的p1才能把p1转发出去,因为这个接受存储的过程中存在时延,这种时延也成为传输时延,当然还存在传播时延和处理时延等。所谓处理时延就是每次都得检查这个数据包的文件头和决定将该数据包传输给谁。 说了电路交换的这么多缺点,那总得有优点吧? 实际上,上面的那些缺点,其实都不是什么大问题的。电路交换最主要的优点就是设计简单,资源利用率高了。 总结下分组交换 分组交换采用把一个个小的数据包存储转发传输的机制。 主要的一些缺点: 不具有实时性。 存在延时。 会造成通信阻塞。 存在无用的重复数据。 会出现丢包的情况。 致命的优点: 设计简单。 资源利用率很高。 生活中的通信选择 两种交换传输的特点决定了我们平时的电话通信使用的是电路交换,像互联网中的微信等这种不要求实时的通信用分组交换。 这也就是为什么急事的时候会打电话,因为比较实时嘛。像微信这些,有时你发个信息,可能网络不好的话,或者太多人在同时使用的话,可能你的信息要过一阵子对方才能收到。 这里可能有些人会说,分组交换为何要把数据包分成一小个来存储转发呢?一个大的数据包发过去不好吗? 假如你的一个数据包100GB,那B这个路由器就得能存100GB的容量,可是发100GB的概率是极少数的,那把路由器设计成100GB不是很浪费?这也是为什么要分组成小数据包的原因之一。 当然,还有一种报文交换的方式,就是一整个数据包存储转发的,不过这种方式使用的比较少,再此就不详细展开了。 https://zhuanlan.zhihu.com/p/44316491

1 min · 62 words · -

coupling relationship, 耦合关系

coupling relationship, 耦合关系 耦合 不同模块之间的关系就是耦合,根据耦合程度可以分为 7 种,耦合度依次变低。 内容耦合 公共耦合 外部耦合 控制耦合 标记耦合 数据耦合, Data Coupling 非直接耦合 内容耦合 内容耦合是最紧的耦合程度,一个模块直接访问另一模块的内容,则称这两个模块为内容耦合。 公共耦合 一组模块都访问同一个全局数据结构,则称之为公共耦合。 外部耦合 一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为外部耦合。外部耦合和公共耦合很像,区别就是一个是简单变量,一个是复杂数据结构。 控制耦合 模块之间传递的不是数据信息,而是控制信息例如标志、开关量等,一个模块控制了另一个模块的功能。 从控制耦合开始,模块的数据就放在自己内部了,不同模块之间通过接口互相调用。 标记耦合 调用模块和被调用模块之间传递数据结构而不是简单数据,同时也称作特征耦合。 数据耦合, Data Coupling 调用模块和被调用模块之间只传递简单的数据项参数。相当于高级语言中的值传递。 非直接耦合 两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦合度最弱,模块独立性最强。 子模块无需知道对方的存在,子模块之间的联系,全部变成子模块和主模块之间的联系。 内聚 偶然内聚 逻辑内聚 时间内聚 通信内聚 顺序内聚 功能内聚 https://yanhaijing.com/program/2016/09/01/about-coupling/

1 min · 42 words · -

http method, get, head, post, options, put, delte, trace, connect

“http method, get, head, post, options, put, delete, trace, connect” https://www.cnblogs.com/machao/p/5788425.html HTTP Method 的历史: HTTP 0.9 这个版本只有 GET 方法 HTTP 1.0 这个版本有 GET HEAD POST 这三个方法 HTTP 1.1 这个版本是当前版本,包含 GET HEAD POST OPTIONS PUT DELETE TRACE CONNECT 这 8 个方法 我们先看看HTTP 1.1 规范的中文翻译 方法定义 (Method Definitions) HTTP/1.1常用方法的定义如下。虽然方法可以被展开,但新加的方法不能认为能分享与扩展的客户端和服务器同样的语义。 Hst 请求头域 (见13.23节) 必须能在所有的HTTP/1.1请求里出现。 9.1 安全和等幂 (Idempotent) 方法 9.1.1 安全方法 (Safe Methods) 实现者应当知道软件是代表用户在互联网上进行交互,并且应该小心地允许用户知道任何它们可能采取的动作(action),这些动作可能给他们自己或他人带来无法预料的结果。 特别的,GET和HEAD方法仅仅应该获取资源而不是执行动作 (action) 。这些方法应该被考虑是"安全"的。可以让用户代理用其他的方法,如: POST,PUT,DELETE,这样用户代理就能知道这些方法可能会执行不安全的动作。 自然的,保证当服务器由于执行GET请求而不能产生副作用是不可能的;实际上,一些动态的资源会考虑这个特性。用户并没有请求这些副作用,因此不需要对这些副作用负责。 9.1.2等幂方法 (Idempotent Mehtods) 方法可以有等幂的性质因为 (除了出错或终止问题) N>0个相同请求的副作用同单个请求的副作用的效果是一样 (译注: 等幂就是值不变性,相同的请求得到相同的响应结果,不会出现相同的请求出现不同的响应结果) 。方法GET,HEAD,PUT,DELETE都有这种性质。同样,方法OPTIONS和TRACE不应该有副作用,因此具有内在的等幂性。然而,有可能几个请求的序列是不等幂的,即使在那样的序列中所有方法都是等幂的。 (如果整个序列整体的执行的结果总是相同的,并且此结果不会因为序列的整体,部分的再次执行而改变,那么此序列是等幂的。) 例如,一个序列是非等幂的如果它的结果依赖于一个值,此值在以后相同的序列里会改变。 ...

5 min · 976 words · -

Infinitive 不定式

Infinitive 不定式 动词不定式一般是由“to + 动词原形”构成,还需要注意得是,这里的 to 是动词不定式的一部分,不做介词使用。举几个动词不定式的例子: to be to have to hold to sleep to spend 一定要注意的是,动词不定式中词尾从不以-ed或-ing结尾。动词不定式是动词的三种类型之一,具有动词、形容词、名词或副词的特征。在句子中通常可以作主语、宾语、补语、表语、定语、状语等。 https://liulingo.com/infinitive-yong-fa-he-li-zi

1 min · 19 words · -

iperf3 测速

iperf3 测速 install # centos yum install iperf3 # openwrt opkg install iperf3 #ubuntu apt-get install iperf3 windows https://iperf.fr/iperf-download.php#windows command server iperf3 -s client iperf3 -c 192.168.50.101 -t 104 # -c, --client <host> run in client mode, connecting to <host> # -t, --time time in seconds to transmit for (default 10 secs) Iperf3 是一个网络性能测试工具。Iperf 可以测试最大 TCP 和 UDP 带宽性能, 具有多种参数和 UDP 特性, 可以根据需要调整, 可以报告带宽、延迟抖动和数据包丢失. 对于每个测试, 它都会报告带宽, 丢包和其他参数, 可在 Windows、Mac OS X、Linux、FreeBSD 等各种平台使用, 是一个简单又实用的小工具。 ...

1 min · 163 words · -