H2 is a Java SQL database, with following features:
H2 数据库支持三种连接方式,三种模式都支持内存、持久化到文件,三种模式对同时开启的数据库数量和连接数没有限制。
本地 JDBC 连接,最方便的一种,嵌入式下,JVM 启动 H2 数据库通过 JDBC 连接。
通过 JDBC 或者 ODBC API 远程连接数据库,可以部署在不同的 JVM 或者不同的物理机中。数据通过 TCP/IP 协议传输,比嵌入式慢。
第一个应用通过嵌入式打开 H2 数据库,同时数据库开启服务器模式,其他应用可以远程连接。
连接字符串
driver=org.h2.Driver
url=jdbc:h2:mem:testdb;MODE=MYSQL;DB_CLOSE_DELAY=-1
username=sa
password=
控制台启动
java -jar h2*.jar
在 Spring 应用中 maven 配置
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.x.xxx</version>
</dependency>
连接配置
driver=org.h2.Driver
url=jdbc:h2:mem:testdb;MODE=MYSQL;DB_CLOSE_DELAY=-1
username=sa
password=
最近几天在电脑上听歌,不由自主的在键盘上敲出了 http://music.163.com , 而在不久之前还是用 xiami.com 听歌呢,所以禁不住思考起来.
最早用电脑听歌还是应该用的酷狗,酷我,多米之类的电脑端软件,那个时候经常是将歌曲下载到自己电脑上,伴随着清脆的一声”Hello kugou”,才开始听歌之旅的. 那个时候听的歌曲还往往是知道名字,知道歌手,很有针对性的去听的.那个时候的播放列表还往往是本地的自己的列表,如果换一台电脑那些列表还不一定能够同步过去.虽然后来酷狗,酷我都做了同步播放列表的功能,但是那时候的体验和感受都留在了那个时候.
在大学的时候,渐渐的发现自己的播放曲库就那么几首歌,全部循环播放还是那么几首歌,所以萌生了寻找自己喜欢听的歌曲的想法,如果能有一个平台能够提供不间断播放的歌曲,能根据自己喜欢的歌曲推荐同样类似的歌曲,后来我找到了douban.fm这样一个平台,虽然我不知道豆瓣这个电台什么时候发布的,但它确实伴我走了多一段时间,也让我找到了很多喜欢的歌曲,我记得那时候听得最多的轻音乐电台,让我找到”班得瑞”这一系列的轻音乐.
可是用了一段时间的豆瓣FM就会发现出现了些问题,一是豆瓣FM不允许下载歌曲,虽然我的加心歌曲很多了,却一首也不允许我离线的播放.一旦离开了互联网,我就往往又回到了那几首歌的时候.这个时候如果在豆瓣FM找到了喜欢的歌再用酷狗,酷我,多米,百度之类的下载,也略显麻烦,况且如果喜欢的歌曲多了,还得一首一首的找并下载,这个过程太麻烦.二是我渐渐的发现有些我喜欢的歌从来不会在豆瓣FM中出现,并且豆瓣FM还经常出现某些人翻唱的歌曲.那个时候我就意识到是不是豆瓣FM的曲库并不是很完整,如果它本身的曲库就不是很完整,如何能推荐到那些缺失的好歌?
再后来就是转到了虾米,虽然知道虾米的曲库也并不是很全,但是至少感觉比豆瓣的要全一些,并且虾米至少还是一直是做音乐的嘛. 豆瓣转到虾米之后很长一段时间都是在用虾米电台在听歌,当然一些听歌习惯也留在了虾米.但后来移动大潮来临,那个时候虾米Android客户端还一直不错,至少在酷狗,酷我,百度等等客户端中还是值得一看和一用的.可是那个时候虾米的封闭就体现出来了.虾米因为下载需要类似积分的东西,所以在Android客户端中下载的音乐只有通过虾米客户端才能播放,虾米并不是直接以mp3保存的歌曲.那个时候还是并不是很在意这个问题,可是突然有一天我意识到,如果有一天虾米”倒闭”或者怎么样了呢?(⊙o⊙)… 那个时候开始我渐渐的将一些喜欢的歌曲下载到本地,那些歌曲列表也不怎么去贡献,只维护着自己喜欢的歌曲列表. 然后渐渐地将自己的听歌之路转到本地,那个时候还曾经找好用的PC音乐管理软件很长一段时间.
可是突然有一天网易发布了它自己的音乐播放网站和Android客户端,不愧是网易不鸣则已一鸣惊人,网易云音乐发布的时候就称自己跨平台,当然后来才慢慢发布了PC端和Mac端的软件,但是那个时候的Android应用一发布,我眼前就一亮,继承了网易新闻的操控性,美观性,并且功能强大.并且当时网易云音乐一发布曲库就很全面,我也不知道网易从哪里搞了这么多版权,总是他就是做到了. 于是开始试用最初还是觉得网易云音乐用来下载音乐很方便,成了Android手机上的音乐下载器,可是后来真的用了起来.有一天,我发现能导入虾米歌曲列表,能导入豆瓣FM加心歌曲,果断全部导入,自此以后虾米都很少打开了.
于是就出现了文章最前面出现的一幕.到现在总结下虾米和网易,虾米有一些小细节我很喜欢,但是已经不能抵挡我使用网易的大势了.不过那些小细节总结一下总还是可以提醒一下网易:
</embed>
经过这一些系列的回忆,对于一个互联网产品,我总结出几点:
在网络渐渐发展到可以流畅在WEB页面听歌的时候,类似酷狗,酷我这样的播放软件便会走下坡路.虽然我不知道酷狗,酷我之类现在活得是否还好,但至少让我这样的用户离开了.如果能够在网页上直接能够听歌,为何还要下个客户端呢?WEB是互联网的大潮.如果没有抓住这个大潮,可能就要吃亏了吧.虽然现在好像酷狗和酷我都已经可以在线播放了,可是我也已经不用了.没有什么特别理由,就是不好了吧.再其次酷狗,酷我根本没有我的播放习惯,随意就可以抛弃,换另外一个平台.这也就是我要谈的第二点—-账号系统.
所有的音乐库应该跟随者用户,用户登陆账号即可获取到所有的歌曲库.这一点网易就很聪明,在网易刚刚发布PC客户端的时候,如果用户不登陆就不能使用.用户可以收藏喜欢的歌曲,新建歌曲列表,分享歌曲列表,这样网易就能学习用户的习惯,推送更多用户喜欢的歌曲.
跨平台其实和第二点账号系统一样,账号应该跟随着用户走,对于一个产品应该是用户走到哪里,只要有个账户就能够轻易的获取到用户的所有资料,爱好,习惯.那当然,我用微软的Windows还好,还是用Google的Android,还是Apple的Mac,只要有用户在就要提供给用户获取自己产品的入口,当然网易WEB播放器是我见过的最好的.无论是从设计还是到操作性,都给人很亲切的感受.
当然虾米和网易都可以由用户生成音乐列表,而最近看到新闻说豆瓣FM也支持用户贡献音乐列表了.UGC是WEB2.0的特征,虾米雇再多的虾小编生成的内容也不会有用户多.所以干脆直接把内容编辑交给用户得了.当然现在发现好歌的途径又多了一点,不仅可以听自己喜欢的电台,还能关注兴趣相投的好友,看他分享的音乐列表.这些列表里是用户整理好的好听歌曲,去循环播放去啦.
当然如果你没有使用过网易云音乐,那么就请你试试吧:http://music.163.com/,如果你觉得我的歌曲品味和你的相似,也同样欢迎你提供更好的音乐.
之前的一篇文章就曾经提到字体的历史
在选择一款字体之前,先要了解几个术语
在选择一款字体的时候我会考虑以下几个点:
0
以及大小写 o
与 O
1
以及大写字母 I
以及小写字母 l
通过两两对比,最后选出你最喜欢的编程字体。
通过上面的对比,最后选择出来的我个人喜欢的字体。
Source Code Pro 是由 Adobe 公司设计的开源字体,使用很长一段时间的字体,中规中矩,字体很容易识别,非常适合日常编码使用。
Noto 字体是 Google 开发的一款开源字体,使用场景非常广泛的一个字体,当然用来做 Coding 也不是不行,不过也一样,比较中规中矩。
又一个等宽字体,在 Ubuntu 上看久了 Ubuntu Mono ,真实对比一下其他字体之后发现 Ubuntu Mono 字体胖胖的,所以字间距看起来很舒服。
DescriptionInconsolata is an open-source font created by Raph Levien and released under the SIL Open Font License. It is a humanist monospaced font designed for source code listing, terminal emulators, and similar uses.
个人使用的编程字体 Fira Code,用了很多年了。
为 Programming 设计的等宽字体。该字体为 Programming 做了非常多的特殊设计,比如大于等于,不等于等等。
这款字体区别与其他字体的另一个典型特点就是 @
, &
和 r
的区别。
更多编程字体预览:
在设计数据库字段时经常需要保存字符,MySQL 中有两个容易混淆的字段 CHAR 和 VARCHAR。
VARCHAR(10) 需要 11 个字节存储空间,VARCHAR(1000) 列需要 1002 字节存储,2 个字节用来存储长度信息。
适用场景:
与 CHAR 和 VARCHAR 类似的类型还有 BINARY 和 VARBINARY,存储的是二进制字符串。二进制字符串存储的是字节码而不是字符,填充也不一样,MySQL 填充 BINARY 采用的是 \0
零字节,而不是空格,检索时也不会去掉填充值。
当存储二进制,并且希望 MySQL 使用字节码而不是字符进行比较时,这些类型比较有用。MySQL 比较 BINARY 字符串时,每次按一个字节,并且根据该字节的数值比较。因此,二进制比较比字符比较简单很多,也就更快。
把对同一个表的修改合并为一个 alter 语句,避免多次拷贝,提高改表效率
合并
altertable t1 addcolumn a int;
altertable t1 addcolumn b int;
合并后
altertable t1 addcolumn a int, add column b int;
执行更新语句时尽量将同一张表的内容合并到一行。
UPDATE tablename SET column1 = "value1", column2 = "value2" ....
自增主键设置为 unsigned 类型, MySQL 表只能有一个主键,但是可以有多个唯一键,可以尝试将自增 ID 作为主键,实际有意义的字段作为唯一键。
假如有 idx1(a,b) 和 idx2(a) 时,idx2 是没有必要的,当查询语句是 where a=xx 时会使用 idx1
##Word目录自动生成
如果想要目录自动生成,就必须事先对文章标题进行格式化,我使用的方式是在大纲视图
中对章节标题进行一级二级三级格式化。另外的方法是通过格式中标题去给每一个标题添加样式。网上的教程太多了,我就做一个备忘吧,以后说不定在其他论文中也要生成目录。在格式化标题之后,导航窗口基本上就能显示一个简单的目录了,此时再自动生成目录一般不会出现太大的问题。
##Word页眉页脚
有些页需要重新从1页开始编号,则要在该页之前插入分节符。如需生成第1页 共XX页
这种格式的页码,最好不要手工输入总共的页码,因为可能需要修改论文内容,而如果手工修改可能最后不会自动更新,会造成很大的问题。最好是在文档部件->域->编号里面插入总页数。
##MP4转gif 项目因为在Android手机上,需要录制视频展示,Android(API level 19) 开发工具中提供了录制视频的方法:
adb shell screenrecord /sdcard/demo.mp4
在PC下连接手机,运行以上命令即可录制手机屏幕,视频格式为MP4,存放在手机SD卡,默认录制时间180s. 该命令还有其他一些参数,运行:
adb shell screenrecord --help
可以查看所有参数。几个可能会使用到的参数是:
官方文档: http://developer.android.com/tools/help/adb.html#screenrecord 中文参考: http://blog.csdn.net/wirelessqa/article/details/22725581
录制完视频之后面临的一个问题是,怎么转成gif供PPT或者演示使用。最初想到的方法是使用Photoshop,也找到了一些方法能够将MP4视频转成Web使用gif,但是因为Photoshop将视频每一帧都保存,消耗内存太大,之后适当的调整了几次效果都不是很好,生成的文件也比较大。所以后来就直接使用了迅雷看看的gif生成了,不过缺点很明显,分辨率被调到很小,图像变得不清晰了。
dd 命令可以复制文件并对原文件内容进行转换和格式处理。dd 命令经常被用来备份设备。
比如创建一个空文件:
dd if=/dev/zero of=test.txt bs=1M count=1
解释:
几个设备:
/dev/null
向其输入任何内容都会被吞掉/dev/zero
输入设备,用来初始化文件,提供无穷的 0.注意: 运行 dd 命令需要非常小心,如下命令如果不清楚其含义请千万不要轻易尝试。
可以使用如下的命令来测试磁盘的读写速度:
dd if=/dev/zero bs=1024 count=1 of=/tmp/test.file
dd if=/dev/zero bs=1G count=1 of=/tmp/1Gb.file
说明:
if
input fileof
output filebs
block size 表示同时读入/输出的块大小count
number of blocks ,拷贝的块个数oflag
synchronization I/O for data最后读写的文件大小是 bs 乘以 count 数。
将整块磁盘 /dev/sda 备份到 /dev/sdb,注意 sdb 上的数据将会被覆盖!!!
dd if=/dev/sda of=/dev/sdb bs=4M
创建一个 512M 大小的空文件
dd if=/dev/zero of=/path/to/file count=1024 bs=500000
利用随机数据填充磁盘,用以销毁数据
dd if=/dev/urandom of=/dev/sda1
备份
dd if=/dev/sda of=/root/sda.img
恢复镜像到指定盘
dd if=/root/sda.img of=/dev/sda
使用 gzip 压缩备份
dd if=/dev/sda | gzip > /root/image.gz
将压缩文件恢复
gzip -dc /root/image.gz | dd of=/dev/sda
dd bs=64k count=4k if=/dev/zero of=test
dd bs=64k count=4k if=/dev/zero of=test; sync
dd bs=64k count=4k if=/dev/zero of=test conv=fdatasync
dd bs=64k count=4k if=/dev/zero of=test oflag=dsync
dd 命令的区别在于写缓存的处理方式。
conv=fdatasync
执行之后,会执行一次同步操作oflag=dsync
在执行每次都会进行同步写入操作,这是最慢的一种很是,基本没有用到写缓存对于本博客的 Jekyll 修改全纪录
增加中文拼音支持 参考:
开源项目 Github
参考:
http://yizeng.me/2013/05/26/create-a-custom-jekyll-404-page/
什么是 dnsmasq
,从官方页面,或者 Wikipedia 上能知道,dnsmasq 可以提供 DNS Forward, 也可以作为 DHCP, 它被设计在低功耗,小内存的路由器,防火墙等小型设备上使用。现在的大部分 Linux 发行版都内置了 dnsmasq 。 dnsmasq 也常常被用来缓存 DNS 请求,用来加速访问过的地址速度。
Debian/Ubuntu:
sudo apt install dnsmasq
使用 dnsmasq 很大一部分应用场景就是缓存 DNS 解析,dnsmasq 首先会检查 /etc/hosts
等本地静态的 hosts 文件,然后使用 /etc/resolv.conf
配置的 DNS 服务器地址。
通常 dnsmasq 的配置文件都在 /etc/dnsmasq.conf
文件中,该文件配置详细内容可以参考如下注释。
这里主要配置 dnsmasq 作为 DNS Cache 服务器来使用。
# 配置额外的上级 DNS 主机 (nameserver)
# 通常会在定义的文件中配置域名服务器地址 nameserver 127.0.0.53
# 如果访问没有被解析过的域名,那么就会尝试使用文件中定义的地址去解析
resolv-file=/etc/resolv.conf
# 默认情况下 dnsmasq 会发送查询到它的任何上游 Dns 服务器上,如果取消注释,则 dnsmasq 则会严格按照 /etc/resolv.conf 中定义的 Dns Server 顺序进行查询,直到成功为止
# strict-order
# 如果不想 dnsmasq 读取 /etc/resolv.conf 文件获得它的上级 servers。即不使用上级 Dns 主机配置文件 (/etc/resolv.conf 和 resolv-file)可以开启改选项
#no-resolv
# 不允许 dnsmasq 通过轮询 /etc/resolv.conf 或者其他文件来获取配置的改变,则取消注释。
#no-poll
# 向上游所有服务器查询
all-servers
# 启用转发循环检测
dns-loop-detect
# 重启后清空缓存
clear-on-reload
# 完整域名才向上游服务器查询,如果是主机名仅查找 hosts 文件
domain-needed
# 为特定的域名指定解析它专用的 nameserver。一般是内部 Dns name server
# server=/myserver.com/192.168.55.1
# 指定 dnsmasq 默认查询的上游服务器,此处以 Google Public Dns 为例。
server=8.8.8.8
server=8.8.4.4
# 比如把所有.cn 的域名全部通过 114.114.114.114 这台国内 Dns 服务器来解析
server=/cn/114.114.114.114
server=/taobao.com/114.114.114.114
server=/jd.com/114.114.114.114
server=/qq.com/114.114.114.114
# no-hosts, 默认情况下这是注释掉的,dnsmasq 会首先寻找本地的 hosts 文件,再去寻找缓存下来的域名,最后去上级 Dns 服务器中寻找;而 addn-hosts 可以使用额外的 hosts 文件。
# Dns 解析 hosts 时对应的 hosts 文件,对应 no-hosts
addn-hosts=/etc/hosts
# Dns 缓存大小,Dns 解析条数
cache-size=1024
# 不缓存未知域名缓存,默认情况下 dnsmasq 会缓存未知域名并直接返回客户端
no-negcache
# 指定 Dns 同时查询转发数量
Dns-forward-max=1000
# 增加一个域名,强制解析到所指定的地址上,强行指定 domain 的 IP 地址
address=/doubleclick.net/127.0.0.1
# 知道这个原理之后,比如说可以屏蔽广告,把地址解析到一个本地地址
address=/ad.youku.com/127.0.0.1
address=/ad.iqiyi.com/127.0.0.1
# 多个 IP 用逗号分隔,192.168.x.x 表示本机的 ip 地址,只有 127.0.0.1 的时候表示只有本机可以访问。
# 通过这个设置就可以实现同一局域网内的设备,通过把网络 Dns 设置为本机 IP 从而实现局域网范围内的 Dns 泛解析(注:无效 IP 有可能导至服务无法启动)
# 监听的服务器地址,通过该地址提供服务
listen-address=192.168.x.x,127.0.0.1
# 对于新添加的接口不进行绑定。仅 Linux 系统支持,其他系统等同于 bind-interfaces 选项。
# bind-dynamic
# hosts 中主机有多个 IP 地址,仅返回对应子网的 IP
localise-queries
# 如果反向查找的是私有地址例如 192.168.x.x,仅从 hosts 文件查找,不转发到上游服务器
bogus-priv
# 对于任何解析到该 IP 的域名,将响应 NXDOMAIN 使得其解析失效,可多次指定
# 禁止跳转运营商广告站点
#bogus-nxdomain=64.xx.xx.xx
# 如果你想在某个端口只提供 Dns 服务,则可以进行配置禁止 dhcp 服务
no-dhcp-interface=
配置完成后,可以使用如下语法来检查正确性
dnsmasq --test
如果没有问题会输出 dnsmasq: syntax check OK.
在 Debian/Ubuntu 系电脑上可以使用:
sudo systemctl status dnsmasq.service
# or
sudo /etc/init.d/dnsmasq status
使用 nslookup
或者 dig
来查询 Dns 解析结果。
比如向 Google 提供的 Dns 服务器请求查询 einverne.info
域名的解析结果:
➜ dig einverne.info @8.8.8.8
; <<>> DiG 9.11.3-1ubuntu1.9-Ubuntu <<>> einverne.info @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53970
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;einverne.info. IN A
;; ANSWER SECTION:
einverne.info. 2398 IN A 69.163.x.x
;; Query time: 4 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Sep 20 16:26:54 CST 2019
;; MSG SIZE rcvd: 47
在 dig 的结果中可以看到一个 Query time, 连续查询某一个域名两次,可以观察该时间是否从之前的几十或者几百毫秒,变成 0 毫秒,由此来判断 dnsmasq 有没有生效。
或者直接 nslookup
➜ nslookup youtube.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: youtube.com
Address: 2.1.1.2
dnsmasq 会先去 hosts 文件中查看配置,然后再解析 /etc/dnsmasq.d/*.conf
下的 conf 配置,这些文件配置优先级高于 dnsmasq.conf。
DHCP 配置
dnsmasq 配置文件 (/etc/dnsmasq.conf),必要的配置如下:
# 选定需要侦听的网口
# Only listen to routers' LAN NIC. Doing so opens up tcp/udp port 53 to
# localhost and udp port 67 to world:
interface=<LAN-NIC>
# dnsmasq will open tcp/udp port 53 and udp port 67 to world to help with
# dynamic interfaces (assigning dynamic ips). dnsmasq will discard world
# requests to them, but the paranoid might like to close them and let the
# kernel handle them:
bind-interfaces
#设定可分配的 ip 地址段和租约时间
# Dynamic range of IPs to make available to LAN pc
dhcp-range=192.168.1.50,192.168.1.100,12h
#绑定某些机器的 ip-mac 地址对,使其具有固定的 ip 地址
# If you’d like to have dnsmasq assign static IPs, bind the LAN computer's
# NIC MAC address:
dhcp-host=aa:bb:cc:dd:ee:ff,192.168.1.50
dhcp-host=00:0e:7b:ca:1c:6e,daunbook,192.168.0.12
#为 192.168.0.12 设置主机名:dannbook
# dhcp 动态分配的地址范围
dhcp-range=192.168.2.100,192.168.2.240,24h
# 同上,不过给出了掩码
#dhcp-range=192.168.2.100,192.168.2.240,255.255.255.0,12h
# dhcp 服务的静态绑定
# dhcp-host=08:00:27:D1:CF:E2,192.168.8.201,infinite 无限租期
dhcp-host=08:00:27:D1:CF:E2,192.168.2.201,db2
dhcp-host=08:00:27:D6:F0:9F,192.168.2.202,db3
# 设置默认租期
# Set the limit on DHCP leases, the default is 150
#dhcp-lease-max=150
# 租约保存文件路径
#dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
# 通过 /etc/hosts 来分配对应的 hostname
#dhcp-host=judge
# 忽略下面 MAC 地址的 DHCP 请求
#dhcp-host=11:22:33:44:55:66,ignore
# dhcp 所在的 domain
domain=freeoa.net
# 设置默认路由出口
# dhcp-option 遵循 RFC 2132(Options and BOOTP Vendor Extensions), 可以通过 dnsmasq --help dhcp 来查看具体的配置
# 很多高级的配置,如 iSCSI 连接配置等同样可以由 RFC 2132 定义的 dhcp-option 中给出。
# option 3 为 default route
dhcp-option=3,192.168.8.1
# 设置 NTP Server. 这是使用 option name 而非选项名来进行设置
#dhcp-option=option:ntp-server,192.168.8.4,10.10.0.5
通常情况下工作的内容都会是打开一个文件进行编辑,但是 Vim 的强大之处不仅在于单文件编辑,更重要的是可以对多文件编辑,这些文件可以存在不同的 Tab 中,不同的 Windows 中,甚至不同的 buffer 中,这一篇主要就是集中整理一下 buffer 相关的操作内容。
A buffer is an area of Vim’s memory used to hold text read from a file. In addition, an empty buffer with no associated file can be created to allow the entry of text. –vim.wikia
Vim 中的 Buffer 是打开的文件,这意味着 Buffer 可能并不是当前可见的,Buffers 是 Vim 打开,存在于内存某个地方。通常只有一个 Buffer 可见。可以使用 :ls
来查看当前打开的 Buffers.
Vim 中的 Windows 是一个 viewport onto a single buffer
,可以通过 :spit
或者 :vsplit
来水平或者垂直打开文件。
Vim 中的 Tab 是 collection of one or more windows
. 可以允许用户来组织 Windows.
通常情况下 vim file1 file2
便是将两个文件放到了 buffer 中。
:e /path/to/file
也可以打开文件到 buffer 中:new
和 :vnew
:badd {filename}
添加到缓冲区,光标保持在当前缓冲移除缓冲区
:bd[elete]
:bunload
:bwipeout
:3,5bdelete
:bd file1
如果未保存会退出失败,强行退出
:bd!
删除缓冲区并不会影响缓冲区关联的文件,只是简单地把文件从内存中删除。
:bd2
:bd2
会将第二个 Buffer 从内存中移除。
使用 Ctrl + ^ 可以来在最近的缓冲去中切换。这个快捷键非常有用,得记住。可以使用如下命令来列出所有缓冲区:
:ls, :buffers " 列出所有缓冲区
在展示的列表中有一些 buffer 的状态:
-
非活动的缓冲区a
光标所在缓冲区h
隐藏缓冲区%
当前的缓冲区#
交换缓冲区, 可以使用 Ctrl + ^
=
只读缓冲区+
已经更改的缓冲区切换缓冲区:
:bn[ext]
:bp[revious]
:b {number, bufname}
:bfirst
:blast
说明:
:b <Tab>
“ 循环滚动 buffer 中的文件假如在后面对 vim 了解更多之后,安装了 fzf-vim 插件,那么也可以直接使用 :Buffers
来模糊查找当前打开的 Buffers.
在打开的所有 buffer 中替换操作:
:bufdo %s/pattern/replace/ge | update
top 命令能够实时显示系统中各个进程资源占用情况。可以用它来快速排查系统性能问题。
默认进入 top 时,各进程是按照 CPU 的占用量来排序的:
top
解释:
us
用户空间(user)占用 CPU 百分比sy
内核空间(system)占用 CPU 百分比ni
(nice)改变过优先级的进程占用 CPU 百分比id
(idle)空闲 CPU 百分比
wa
IO 等待(wait)占用 CPU 的百分比hi
硬中断(Hardware interrupts)占用 CPU 的百分比si
软中断(Software Interrupts)占用 CPU 的百分比st
(steal)第七行信息,包括:
在交互状态下按下 1
展开,查看每个 CPU 情况。
按下 Shift + <
或者 >
来改变排序规则。
top -c
top -p 12002
在 Linux 机器上使用 top 命令。常用的快键键是:
这 2 个快捷键在 macOS 上都不一样。对应的是,先输入 o,然后输入 CPU 则按 CPU 使用量排序,输入 rsize 则按内存使用量排序。
如果记不清了,可以在 top 的界面上按 ?
,在弹出的帮助界面中即可看到。