离职总结:大公司与小公司的个人体验 - CSDN学院

蛮有感慨的,转载自CSDN学院

离职在即,在准备下一个工作环境的这段时间,忽然有一阵感慨,工作近五年,在这段时间中,体验了两种不同的工作环境:一个规模很大,各种开发体系完备的大公司,另一个(也是目前的)是一个规模 100 人左右的小公司。目前正在准备离职中,对于两种不同的环境,很想评论一些什么,但是由于目前工作年限较低,也没什么资格作什么评论,在这个时间,在这样一个心态下,就给自己留点什么,对于今后彷徨时,给自己一个参考(不说谁好谁坏)。

很多人在买车时担心,车子是好是坏,总是会参考各种论坛的各种评论,近来我也在逛论坛,也在参考其他人的评论,但是好坏参半,究竟如何选择仍然拿不定主意,但是,其中的一条吸引了我的目光:汽车就像是一段路,而大家的口碑就是地图,地图只是一个参考,路好不好走还是要自己走走才知道。

在离职的时候彷徨过,走了之后要找一个怎样的工作,要去一个怎样的公司,要走一个怎样的方向,记得当时很流行的就是去一个小公司拼几年,没有那么多文档,没有那么多流程,你只要编码就好,而且钱多多。

当时真的就觉得,小公司没有这些流程,效率一定会高很多,却不甘心由一个那么大的公司跳到一个只有一间小办公室这样的公司。拿不定主意的时候又想到了北漂,多么流行的一个就业方向,虽然向往,却没有向北京投出一个简历。

后来有一个外企的机会,借着这个机会,也去一趟首都,总不至于在中国这么久却没去过首都,太说不过去了,但是,当我真正坐在会议室里,看着面试官很悠闲的听完我所做过的项目,就结束了面试后,开始感觉到现实的残酷和自身的不足了,北漂适合我么?当我在游北京看到每天的地铁二号线的人山人海时,我放弃了,这里不适合我。是啊,适不适合,不是别人一句话说的算的,还是要亲自体验才能知道是否合适。

流程控制,大公司讲流程,全程 QA 跟随,每一个环节都有很正式的「小仪式」。参与过的一定都很痛苦,QA 怎么那么烦啊,什么事都管,每天的例会,每周的早会,都会有 QA 唠唠叨叨……


使用脚本备份还原 postgresql

定期备份

#!/bin/sh
. /etc/profile

dt=$(date +%Y-%m-%d-%H%M)
pg_dump -F c -Z 9 -d exampleDb > /var/local/pg_dump/exampleDb.all.$dt.dump

还原

pg_restore -d exampleDb exampleDb.all.dump

服务器迁移还原脚本

sudo -u postgres bash -c "psql -c \"ALTER USER postgres WITH PASSWORD 'postgres';\""
sudo -u postgres bash -c "psql -c \"CREATE USER exampleDb WITH PASSWORD 'exampleDb';\""
sudo -u postgres bash -c "psql -c \"CREATE DATABASE exampleDb OWNER exampleDb;\""
sudo -u postgres bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE exampleDb to exampleDb;\""
cp postgresql.conf /etc/postgresql/9.4/main
cp pg_hba.conf /etc/postgresql/9.4/main
sudo -u postgres pg_restore -d exampleDb exampleDb.all.dump

离线获取 Docker 镜像

在内网中使用 docker 源,标准的方式是使用 harbor。如果是小量的只需要几个镜像,我们可以使用 docker save 和 docker load 的命令,将外部的容器镜像导入内部。下面介绍一下用法,最后还附带一个一键保存、还原所有镜像的脚本。

保存单个镜像

  1. 环境准备

    • 服务器node01、node02
    • node01可以访问外网,node02不能访问外网,但node01与node02之间是互通的
    • node01和node02均已成功安装并启动Docker
  2. 在node01上,从远程仓库获取镜像

    docker pull nginx
    	
    Using default tag: latest
    latest: Pulling from library/nginx
    8176e34d5d92: Pull complete
    5b19c1bdd74b: Pull complete
    4e9f6296fa34: Pull complete
    Digest: sha256:4771d09578c7c6a65299e110b3ee1c0a2592f5ea2618d23e4ffe7a4cab1ce5de
    Status: Downloaded newer image for nginx:latest
    
  3. 归档

    docker save -o nginx.tar library/nginx
    

    docker save : 将指定镜像保存成 tar 归档文件。 -o :输出到的文件。

  4. 将保存好的nginx.tar上传至服务器node02上

    scp nginx.tar root@node02:/tmp
    
  5. 登录node02,加载nginx.tar

    docker load -i /tmp/nginx.tar
    
    014cf8bfcb2d: Loading layer [==================================================>]  58.46MB/58.46MB
    832a3ae4ac84: Loading layer [==================================================>]  53.91MB/53.91MB
    e89b70d28795: Loading layer [==================================================>]  3.584kB/3.584kB
    Loaded image: nginx:latest
    

    docker load : 加载指定的tar归档文件格式的镜像。-i :指定要读取的tar归档文件格式的镜像。

批量保存镜像

如果需要保存比较多的镜像,这种笨重的方式显然不合适,我找到了这个脚本,一键打包/加载所有镜像,非常好用。

下载链接:hydra1983/docker_images.sh

源码备份如下:

#!/bin/bash

readonly DB_FILE="$(pwd)/images.db"
readonly IMG_DIR="$(pwd)/images"

save-images() {
  echo "Create ${DB_FILE}"
  echo "$(docker images|grep -v 'IMAGE ID'|awk '{printf("%s %s %s\n", $1, $2, $3)}'|column -t)" > "${DB_FILE}"
  
  echo "Read ${DB_FILE}"
  local images
  while read -r image; do
     images+=("$image"); 
  done <<< "$(cat ${DB_FILE})"

  echo "Create ${IMG_DIR}"
  if [[ ! -d "${IMG_DIR}" ]]; then
    mkdir "${IMG_DIR}"
  fi
  
  local name tag id
  for image in "${images[@]}"; do
    name=$(echo $image|awk '{print $1}')
    tag=$(echo $image|awk '{print $2}')
    id=$(echo $image|awk '{print $3}')
        
    if [[ "${id}" != "" ]]; then
      local imgPath="${IMG_DIR}/${id}.dim"

      if [[ ! -f "${imgPath}" ]] ; then
        echo "[DEBUG] save ${id} ${name}:${tag} to ${imgPath}"
        (time  docker save -o "${imgPath}" ${name}:${tag}) 2>&1 | grep real
      else
        echo "[DEBUG] ${id} ${name}:${tag} already saved"
      fi
    fi    
  done
}

load-images() {
  if [[ ! -f "${DB_FILE}" ]]; then
    echo "No ${DB_FILE} to read"
    exit 0
  fi

  if [[ ! -d "${IMG_DIR}" ]]; then
    echo "No ${IMG_DIR} to load images"
    exit 0
  fi

  echo "Read ${DB_FILE}"
  local images
  while read -r image; do
     images+=("$image"); 
  done <<< "$(cat ${DB_FILE})"

  local name tag id
  for image in "${images[@]}"; do
    name=$(echo $image|awk '{print $1}')
    tag=$(echo $image|awk '{print $2}')
    id=$(echo $image|awk '{print $3}')
        
    if [[ "${id}" != "" ]]; then
      local imgPath="${IMG_DIR}/${id}.dim"

      if [[ "$(docker images|grep ${id} | grep ${name} | grep ${tag})" == "" ]]; then        
        if [[ "$(docker images|grep ${id})" == "" ]]; then
          echo "[DEBUG] load ${id} ${name}:${tag} from ${imgPath}"
          docker load -i "${imgPath}"
        else
          echo "[DEBUG] tag ${id} as ${name}:${tag}"
          docker tag ${id} ${name}:${tag}
        fi
      else
        echo "[DEBUG] ${id} ${name}:${tag} already loaded"
      fi
    fi
  done
}

$@

参考资料