Yuewen's Note

Writing 1000 Words a Day Changed My Life


  • 首页

  • 归档

  • 标签
Yuewen's Note

细说「幂等」

发表于 Dec 21 2017  |  Dec 21 2017

什么是幂等

幂等(idempotent)是一个数学 / 计算机学的概念。

一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。

幂等操作可以是一个数学函数、一个类方法、一个 API 调用 etc.

任意多次执行是指用相同参数,重复多次调用。

影响相同是指对业务状态的影响是一致的。这个概念比较抽象,用具体的例子说明。

阅读全文 »
Yuewen's Note

About HTTPS!

发表于 May 16 2017  |  Dec 21 2017

EVENT

2010 年 5 月,谷歌开始提供 HTTPS 加密搜索服务。

2014 年 8 月,谷歌曾调整搜索引擎算法,并称「比起同等 HTTP 网站,采用 HTTPS 加密的网站在搜索结果中的排名将会更高」。

2014 年 9 月, 百度在一份公告中表示「百度不会主动抓取 HTTPS 网页」

2015 年 3 月, 百度启用全站 HTTPS 加密搜索服务

2016 年 9 月,微信宣布小程序要求使用 HTTPS 请求进行网络通信。

2016 年 9 月,百度曾就「HTTPS 站点如何建设才能对百度友好」问题发布了一篇文章,给出了「提高 HTTPS 站点的百度友好度」的四项建议及具体操作。

2016 年 10 月,苹果要求 iOS 设备发起的所有请求必须在 2017 年 1 月 1 号之前使用 HTTPS。(WebView 内的请求不在要求范围内)

众所周知,HTTPS 在效率上要比 HTTP 差、在部分搜索引擎上 HTTPS 也会对SEO也会造成一定的负面影响、站点要支持 HTTPS 也必然会付出不少的精力。

可既然有这么多的问题和成本在里面,那为什么这么多的大厂还在争先恐后的推动 HTTPS 的发展和建设呢?

HTTP vs HTTPS

阅读全文 »
Yuewen's Note

Mac Skills - Improve Efficiency (Undone)

发表于 Apr 24 2017  |  Dec 21 2017

Tools

Homebrew - 软件包管理工具

类似 Ubuntu 下的 apt-get .

使用 Homebrew 可以安装 macOS 没有预装 但你需要的东西, 比如 wget

1
2
brew install wget
brew install nginx

也可以用来安装 macOS 预装了,但版本较低的软件,比如 vim

1
brew install vim

软件包存放目录 /usr/local/Cellar

Homebrew-Cask - Mac Application 的命令行管理工具

“To install, drag this icon…” no more!

它可以让我们更加优雅、简洁、快速的管理我们的 Mac 应用。

安装:

1
brew tap caskroom/cask

正常的 Mac 软件安装流程:打开官网,下载,双击 *.dmg , drag this icon into Folder Application

更加优雅的安装方式:

1
brew cask install google-chrome

软件存放目录 /usr/local/Caskroom

推荐安装的软件

1
2
3
4
5
6
7
8
# Chrome 浏览器
brew cask install google-chrome
# 文件同步工具 (需翻墙)
brew cask install dropbox
# 文本编辑器
brew cask install sublime-text
# Markdown 编辑器
brew cask install typora
阅读全文 »
Yuewen's Note

架构演进 at ArchSummit2016 (Undone)

发表于 Dec 7 2016  |  Dec 21 2017

架构演进 at ArchSummit2016

今天为大家介绍一下链家网的架构演进历史.

架构之痛

在 2014-2016 两年间,B 端用户由 3W 增加到 15 W, 网站点击数量由 80,000,000 提升到 1,600,000,000。

从业务图的最上面可以看出来, 整个系统的交易链路很长
整个平台主要分为 2B、2C 两大块。

对于 C 端用户, 如果系统出了问题, 用户可能就会丢失.

对于 B 端用户, 他们是非常敏感的, 如果系统出了问题会直接影响到他们的绩效, 奖金.

所以系统的稳定性对于链家而言是很重要的概念. 链家之前也很重视这块, 所以和一些知名的厂商进行了很深入的合作. 什么叫深入呢?

就是花了好几个亿, 订做了一整套完整的系统, 当时的系统非常的高大上. 支撑了过去很多年的业务发展.

C 端项目主要用 PHP 实现。
B 端项目主要用 Java 实现,运行在 商业 的 Websphere 容器中。
前端用 F5 做硬件负载。
B 端存储主要用 Oracle。 C 端存储主要用 MySQL

这么强大的一套系统, 运行的怎么样呢?

有时候很有规律, 每个月总有那么几天会挂掉;

有时候也不是那么有规律, 每次挂掉的原因都不一样.

  • 有时候没法登陆
  • 有时候登录了, 更可怕, 串号了
  • 还有时候, 数据库发生了死锁
  • 总之, 出现了各种各样奇葩的问题

当时在刚刚接手这套系统的时候, 就是在救火, 同事给我起的外号, 叫消防队长.

当时的情况就是拿着消防队长的钱, 操着卖白粉的心. 一个不小心就可能被十几万经纪人在背后默默的慰问了无数次.

阅读全文 »
Yuewen's Note

Git 分支管理策略

发表于 Nov 15 2016  |  Dec 23 2016

Git 分支管理策略

远程分支

master 分支

Release 版本 - 包含线上已发布代码。master 分支的代码只允许从 pre_release分支进行merge

pre_release 分支

预发布版本 - 发布到测试环境,用于产品 & 测试人员进行功能性测试。
包含本次 Release 时,预上线的所有功能。

Note:禁止提交任何正在开发中 & 不准备上线的功能代码。

dev 分支 - 此分支策略仅供参考

方案1:

Dev 版本 - 发布代码到开发公用的测试服务器,当开发的功能需要多个 Developer 协作完成时,可以把代码提交到 dev 分支。

dev 分支的代码,只需要在 push 前,保证代码的正确性即可(不要让其他人在检出项目后报错)。

方案2:

Dev版本 - 每个人新建自己的分支 dev_xxx(xxx 为开发人员自己的名字缩写)& push 到远程仓库。

主要用于保存本地代码在远程服务器的备份,防止开发工作丢失。

本地分支

feature-xxx - 功能性开发分支

Developer 在接到新需求时,可在本地自建 feature-xxx 分支。

在开发过程中,如果有需要,可以将代码 push 到 dev 分支,进行多人协作。

在功能开发完成后,

  • 如果预期发布,则将本地的此分支代码 merge 到 pre_release 分支 & push。
  • 如果不准备发布,则将本地的此分支代码保留。

bug-xxx - Bug 分支

在修复 Bug 时,

  • 如果 Bug 不着急 & 很好修复, 直接在 pre_release 分支修正后 push 到远程仓库即可。
  • 如果 Bug 不着急 & 很难修复,可能会影响到版本的发布,则在本地新建分支 bug-xxx ,修复完成后,根据是否需要在下次发版时修复此 bug 来决定是否推送到 pre_release 分支
  • 如果 Bug 是从线上环境发现,并需要立即解决。则:
    1. 从 master 分支新建分支 bug-xxx, 修正完成后,直接 push 到远程仓库,然后由项目负责人进行合并处理 & 发布上线
    2. 同时还需要把 bug-xxx 分支 merge 到 pre_release 分支 & push
Yuewen's Note

About Maven

发表于 Sep 9 2016  |  Oct 21 2016

序

在程序员的世界里, 有一个有驳常理的现象,优秀的程序员都是既懒又傻的。

因为懒,他才会写出各种各样的工具来替自己干活。

因为懒,他才会想办法避免去写无聊重复的代码——因此避免的代码的冗余,消减了维护的成本,使重构变得容易。

最终,这些由于懒惰激发出的动力而开发出的工具和最佳编程实践方法提升了产品的质量。

Maven 的诞生自然也难以摆脱这个既定的事实 - 只是因为程序员很懒 ╮(╯▽╰)╭, 还爱瞎折腾。

title_pic

阅读全文 »
Yuewen's Note

CentOS Scrapy - 安装

发表于 Jun 30 2015  |  Sep 14 2016

Demo 中安装版本为 1.0.0
前提 Python on Linux - 安装

scrapy 官方图片

安装 Twisted

  • 前往Twisted 官方下载页, 在页面中找到 Source 下载地址, 并复制
  • 登录 Linux 服务器的终端
  • cd /usr/local
  • wget https://pypi.python.org/packages/source/T/Twisted/Twisted-15.2.1.tar.bz2
  • tar xvf Twisted-15.2.1.tar.bz2
  • cd Twisted-15.2.1
  • python setup.py install

安装 lxml

  • yum install libxml2
  • yum install libxslt-devel
  • pip install lxml

安装 scrapy

  • yum install libffi-devel
  • pip install scrapy
  • scrapy version # 是否正常输出

REF : 官方文档

Yuewen's Note

Python on Linux - 安装

发表于 Jun 29 2015  |  Sep 14 2016

Demo 中安装版本为 2.7.10
日期: 20150629.0530

安装 sqlite

  • yum install sqlite-devel 安装新版本的 python 时, python(CentOS)需要重新编译sqlite3 的类库

安装 Python

  • 前往Python 官方下载页
  • 在页面中选择一个版本 如: 2.7.10. 在打开后的页面中, 将 Gzipped source tarball de 超链地址复制.
  • 登录Linux 服务器的终端
  • cd /usr/local
  • wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz
  • tar xvf Python-2.7.10.tgz
  • cd Python-2.7.10
  • ./configure
  • make & make install
  • python --version 是否显示正常版本号

安装 pip

  • wget https://bootstrap.pypa.io/get-pip.py
  • python get-pip.py
  • pip -V 是否显示正常版本号
Yuewen's Note

生活本该这样

发表于 Jun 16 2015  |  Sep 14 2016

li_jiang

你看, 生活好像本就该这样, 有一点小小的追求, 一点小小的期望. 随心, 随性的活着. 会遇到一点挫折, 会感到一点辛苦. 就好像一切都是那么的自然而然. 我们努力去感受平凡中那点滴的幸福, 而在一切的不如意的面前, 幸福也才显得更加弥足珍贵.

你说呢?

Yuewen's Note

Hello, World!

发表于 Jun 16 2015  |  Sep 14 2016

在 Programmer 的世界里, Hello World 永远是第一个老师. 就像刚刚折腾到的个人博客~, ta 还是第一个出生的~.

1
2
3
4
5
6
7
8
9
10
11
12
13
System.out.println("Hello, World!"); // Java
print u'Hello, World!' # python
console.log('Hello, World!'); // Javascript & nodejs
printf("Hello, World!"); /* c */
cout << "Hello, World!" << endl; /* c++ */
println("Hello, World!") // Swift
NSLog (@"Hello, World!") /* Objective-C */

博客框架选取: Hexo

Yuewen

Yuewen

虽然到现在也没想清楚, 但是我知道了比学习某个技能更重要的事情, 就是认知世界. 人类所能想象到的所有美好和黑暗, 都能从书里找到.

10 日志
14 标签
© 2017 Yuewen
由 Hexo 强力驱动
主题 - NexT.Muse