spacemacs rectangle 操作

mark

  • rectangle-mark-mode C-x SPC

operations

  • open-rectangle c-x r o
  • kill-rectangle C-x r k
  • delete-rectangle C-x r d
  • yank-rectangle C-x r y
  • string-insert-rectangle unbound
  • string-rectangle C-x r t
  • number-to-register C-x r N

git 常用命令

  • 创建 git 库

    git init
  • 添加文件

    git add --all
  • 提交文件

    git commit -am "message"
  • 获取远程库

    git clone https://a.com/b.git
  • 从远程更新分支

    git pull
  • 向远程推送更新

    git push
  • 查看分支信息

    git branch -av
  • 创建并切换到分支

    git checkout -b v2.1
  • 创建分支,对应到远程分支,不切换当前分支

    git branch v2.1 remotes/origin/v2.1
  • 创建并切换到远程分支

    git checkout -t origin/v2.1
  • 查看当前状态

    git status
  • 清除本地修改

    git reset --hard
  • 添加远程仓库地址

    git remote add origin https://a.com/b.git
  • 修改远程仓库地址

    git remote set-url origin https://a.com/b.git
  • 将目录从 repo 中删除

    git rm --cached -r mydir
  • linux 下忽略文件权限修改

    git config --global core.fileMode false
  • 更新 submodules 到 master 分支最新

    git submodule foreach "(git checkout master; git pull origin master)&"
  • 将 SVN 库整个迁移到 GIT

    svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt
    git svn clone --stdlayout --no-metadata --authors-file=users.txt svn://hostname/path dest_dir
    cd dest_dir
    git checkout -b origin/branch_name
    git push --all origin
    

maven 打包时间戳问题

maven 打包时,可以生成时间戳属性,利用该属性来组装包名。

<version>5.0.${build.time}B</version>
<properties>
  <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
</properties>

对资源文件开启 filtering 功能,资源文件中的 POM 变量在打包过程中会被自动替换。在 java 代码中访问 properties 资源文件,就可以取到版本号。

<resource>
  <directory>src/main/resources</directory>
  <filtering>true</filtering>
</resource>

但是,这个时间戳属性有个问题,生成的时间 ${maven.build.timestamp} 是 UTC 时间,无法修改时区。网上找到一个办法,可以用插件解决这个问题。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.8</version>
  <executions>
    <execution>
      <id>timestamp-property</id>
      <goals>
        <goal>timestamp-property</goal>
      </goals>
      <configuration>
        <name>build.time</name>
        <pattern>yyyyMMdd'.'HHmm</pattern>
        <timeZone>GMT+8</timeZone>
      </configuration>
    </execution>
  </executions>
</plugin>

该插件生成的属性 ${build.time} 已经是本地时区。

但是,在 IDEA 中, Build Projects ,再 Build Artifacts... ,属性文件中的 ${project.version} 并没有被替换。

摸索了一阵,发现 IDEA Build Projects 并不会调用 maven 生命周期,导致 plugin 不被执行。虽然 maven 自带变量可以被替换,但是自定义变量却不会被替换。

使用工具按钮的 maven install 打包,资源中的变量可以被正常替换。

还有一个方法,可以将 IDEA 的 Build 与 maven goal 绑定起来:

bind maven goal

图1  绑定 maven goal

mysql 占用 cpu 高问题分析

  • htop 查看 cpu 占用情况 mysql 占用了 95% 以上的 cpu 资源,java 占用 cpu 不多。
  • 查看 mysql 进程列表,未发现明显异常

    mysql -u root -p
    show processlist;
    
  • 将查询时间在 1 秒以上的 sql 语句记录到 log 中

    set global slow_query_log=1;
    set global long_query_time=1;
    set global slow_query_log_file="/var/log/mysql/slow-queries.log";
    
  • 查看 log,发现部分 sql 语句查询时间竟然有半分多钟