如何练就高效率团队

  • 本文纯粹是鸡汤,里面的内容也全是胡扯,如果觉得有点用,有可能是你经历过或者正在经历。

  • 风格迥异的团队文化,可以让在一个团队不可能发生的事情,在另一群人眼里变得十分简单。

不要猜

  • 在A团队,线上故障了,或者遇到了一个什么问题,经常遇到的对话如下:

– 这应该是xxx的问题,和我们这边没有关系。

– 这可能由于xxx超时引起的,我们也没有办法。

  • 很多很容易发现的问题就这样放松了警惕,慢慢积累成了重大问题。

Macos下vim YouCompleteMe快速安装记录

前言

  • 本文记录一次vim改造成eclipse的过程,用起来很爽。
  • mac 10.10.4

安装homebrew

1
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

在终端里运行这行命令即可安装homebrew安装工具。

输入一次密码。期间会用到git。

整一个好用的环境

1
2
3
4
brew rm -f python
brew rm -f macvim
brew install python
brew linkapps python

R U Ok--客户端网络优化实践

当愤怒的用户,张牙舞爪地告诉你他遇到问题的时候,往往已经病入膏肓。--题记

作者同全国各地愤怒的用户亲密接触了很长的时间之后,做出了以下总结,希望对后来的人们能够有一点启发。

一、用户IP是个不可靠的东西

  • 在实际的案例中,使用用户的IP地址去IP库里找用户属于哪个地域哪个运营商。
  • 不幸的是,IP库有可能不准。
  • 更不幸的是,连IP地址都可能是错的。实际案例中,我们遇到了运营商级别的流量劫持,用户本来是浙江移动,在某些服务器取得的IP居然是江苏电信。
  • 解决的办法:尽量不依赖IP,用smartDNS。或者多渠道纠正IP地址,使用本地客户端的运营商识别能力+电话号码地域识别。

大规模业务服务器开发总结

大比小好

开发阶段,服务不稳定,一个大服务不如一堆小服务; 运维阶段,服务都稳定了,一堆小服务又不如一个大服务。

大规模的时候了,如果能够一个进程搞定的,尽量不要拆两个进程。

Mac下更新gcc版本

  • 用ports升级,比较容易。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
localhost:hello chenzhen$ port search gcc
apple-gcc40 @5494 (lang)
    Apple's version of gcc 4.0

apple-gcc42 @5666.3_14 (lang)
    Apple's version of gcc 4.2

arm-aout-gcc @3.3.6 (cross, devel)
    gcc cross-compilers for arm-aout, with newlib runtime library.

arm-elf-gcc @4.7.3 (cross, devel)
    gcc cross-compilers for arm-elf, with newlib runtime library.

arm-elf-gcc3 @3.4.6_2 (cross, devel)
    gcc 3.x cross-compilers for arm-elf, with newlib runtime library.

arm-none-eabi-gcc @4.7.3_1 (cross, devel)
    The GNU compiler collection for arm-none-eabi

arm-none-linux-gnueabi-gcc @2005q3-2 (cross, devel)
    gcc 3.x cross-compilers for arm-none-linux-gnueabi.

arm-rtems-gcc @4.2.3 (cross, devel)
    gcc cross-compilers for arm-rtems, with newlib runtime library.

avr-gcc @4.9.1 (cross, devel)
    The GNU compiler collection for avr

Java IO在各版本中的提高

JDK8中的提高

在标准的(java.nio.charset.Charset)和扩展的charset实现方面,有许多改进。包括:

  • SelectorProvider在Solaris上有新实现(基于Solaris事件端口机制)。这种SelectorProvider有可能在一些工作负荷下有可能会提升性能和扩展性。/dev/poll这种SelectorProvider依旧是默认的。要使用Solaris事件端口机制,启动的时候要设置系统属性java.nio.channels.spi.Selector为sun.nio.ch.EventPortSelectorProvider。
  • /jre/lib/charsets.jar文件大小减小。
  • java.lang.String(byte[], *)构造函数和java.lang.String.getBytes()方法的性能改善。

Vpn搭建及pptpd因mtu上传下载慢一例

一、环境及安装

  • server: centos 6.3 (kvm虚拟机)。
  • client: ubuntu 10.04。
  • server上yum install安装pptpd,常规设置好ip分配、用户名密码,添加iptables set mss的参数。

    设置/etc/pptpd.conf中的localip与remoteip,分别表示虚拟出来的双方ip范围。
    设置/etc/ppp/chap-secrets中的用户名密码和连接ip等。
    service pptpd start
    iptables -A FORWARD -p tcp –syn -s 172.16.36.0/24 -j TCPMSS –set-mss 1356

  • client上apt-get install安装的pptpsetup,设置好用户名密码,启动vpn连接。

    /usr/sbin/pptpsetup –create vpn –server ...(server ip) –username vpn –password ASDF –encrypt –start

  • pptpd v1.4.0

二、遇到困难

  • scp client_file server 时,速度先很快,级数变慢,最后不动了。
  • scp server_file client 时,同上表现。

如何做一个快速运转的大规模网络开发公司

受《精益创业》 http://www.duokan.com/book/35802 这本书影响甚多,然而在思考和实施的过程中,却又遇到各种各样的问题。

不仅仅是一些令人苦恼的“人的问题”,还有一些,是无从下手、或者不知道未来是怎样的疑惑。

以下,列出一些“看得见的未来”,因为是一些系统已经在线上服务过亿的用户,如果你在思考相同的问题,也许会有一些用处。

一.流程与制度

1.代码质量

  • 没有经过适量单元测试的代码,不能发起code review。
  • codereview:每行code都经过超过两双眼睛阅读。
  • 没有经过code review的代码不能进入代码库。
  • 没有经过完整bvt测试的代码,不能merge到线上分支。
  • 没有完成上述流程的代码,不应该被用户访问到。

2.故障报告

  • 实际上最有效的制度是postmortem制度,但往往在国内被称为“故障报告”。
  • 如果在你的公司里,《故障报告》与工资是挂钩的,恭喜你,制度用错了。
  • 故障报告的本意,是让发生的故障告诉所有的人,让所有的工程师都学到,这次故障的起因是什么、如何避免。
  • 故障报告绝对不是用来惩罚和警告你犯错了。
  • 不情愿的故障报告,宣告了这个制度在你司实施的失败。
  • 经常性的重复的故障报告,一定是制度没有彻底实施或者招聘人员眼神错了(眼神错的几率小之又小)。

有关socket Read

  • 实际开发中,网络程序最可能遇到的就是数据没收到、收到错误数据这样诡异的问题.
  • 很多时候,都是由于对socket read的细节理解的不一致,导致了程序前后的矛盾。
  • 下面详细阐述整个read的过程。

网络IO型程序压力测试要点

一.突破客户端端口数限制

  • 这是第一个会遇到的问题,同一IP地址,最大端口只能到65535。
  • 现在能够直接找到的原因是TCP协议中(rfc793)定义了报头的端口长度为16位。(216=65536)
  • 但是从计算机网络的发展来看,端口长度定义同IPv4定义一样,都是当时的同志们拍脑袋的结果。

突破的办法

  • 一个机器绑定多个IP地址。
  • 搞无数机器或者虚拟机。