Awezome

  • 主页
  • 随笔
所有文章 友链 关于我

Awezome

  • 主页
  • 随笔

被移除的 tcp_tw_recycle

2018-05-13

之前遇到一个问题,访问线上某台机器总是在一断时间出现连不上的情况,查了好久才发现是 tcp_tw_recycle 这个参数被设置成了1。

NAT网络前的client经过NAT处理后,对服务端来说看上去IP+端口都一样,client会携带各自的timestamp值并非是递增的,开启tcp_tw_recycle后,会丢弃timestamp值不符合递增条件的数据包,这样有的连接就直接被断掉了,造成无法访问的场景。

最佳实践

net.ipv4.tcp_timestamps=1
net.ipv4.tcp_tw_recycle=0
net.ipv4.tcp_tw_reuse=1 //开启可以重用TIME_WAIT套接字

查看与设置

Linux 使sysctl来查看和设置内核参数

1
2
3
4
sysctl -a | grep "tcp_tw" 
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
sysctl -w net.ipv4.tcp_tw_recycle=0
sysctl -p

Linux 4.12 已经移除了 tcp_tw_recycle 这个参数,https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=95a22caee396cef0bb2ca8fafdd82966a49367bb

  • Linux
  • Linux

阅读全文

Mac多PHP版本共存

2018-01-22

先安装 php

1
2
3
brew install php56
brew unlink php56
brew install php71

主要用到 php-version 扩展,执行php-version可以查看和切换当前使用的版本和未使用的版本

1
2
3
4
brew install php-version
source $(brew --prefix php-version)/php-version.sh

php-version

进入PHP的配置目录把php-fpm的端口默认端口修改掉。

5.6的配置文件在 /usr/local/etc/php/5.6/php-fpm.conf

7.1的配置文件在 /usr/local/etc/php/7.1/php-fpm.d/

  • PHP

阅读全文

解决ssh 远端vim中文乱码的问题

2017-10-26

sudo vi /etc/ssh_config

注释

1
#SendEnv LANG LC_*
  • Other

阅读全文

[转] React 的ES5 ES6写法对照表

2016-06-10

很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教程和例子都是ES5版本的,所以很多人在学习的时候连照猫画虎都不知道怎么做。今天在此整理了一些ES5和ES6的写法对照表,希望大家以后读到ES5的代码,也能通过对照,在ES6下实现相同的功能。

模块
引用
在ES5里,如果使用CommonJS标准,引入React包基本通过require进行,代码类似这样:

1
2
3
4
5
6
7
8
9
10
11
12
//ES5
var React = require("react");
var {
Component,
PropTypes
} = React; //引用React抽象组件

var ReactNative = require("react-native");
var {
Image,
Text,
} = ReactNative; //引用具体的React Native组件

在ES6里,import写法更为标准

1
2
3
4
5
6
7
8
import React, { 
Component,
PropTypes,
} from 'react';
import {
Image,
Text
} from 'react-native'

注意在React Native里,import直到0.12+才能正常运作。

导出单个类
在ES5里,要导出一个类给别的模块用,一般通过module.exports来导出

1
2
3
4
5
//ES5
var MyComponent = React.createClass({
...
});
module.exports = MyComponent;
  • react
  • react-native
  • React

阅读全文

React Native : Mac 下 Android 环境及IDE配置

2016-06-09

一时感兴趣,想玩一把React Native,花了好几个时间搭环境,主要坑在网速上,简单做下总结。

基本工具

Mac开发的话首先要有Homebrew和Node.js环境,这个安装教程很多就不多说了。

1
2
brew install watchman
brew install Flow

*针对iOS开发,我们只需要安装Xcode 7.0或者7.0以后版本,该可以通过App Store进行下载安装

For Android

安装最新版的JDK 1.8 javac -version
安装Genymotion android模拟器,https://www.genymotion.com/

安装Android SDK: 当然也可以安装Android Studio来进行安装,不过Android Studio不是必须的。http://www.androiddevtools.cn/这个地方下载现成的包也行。

  • react
  • react-native
  • React

阅读全文

Modern PHP : 传值、引用和对象标识符

2016-06-05

对象传值还是引用?

先说个好理解的,boolean、integer、double、string 这些都是传值,传值就是传递过程完全复制一次,如果要对这些类型传引用那么就要加个&。

对于object,默认情况下理解对象是通过引用传递的,但其实这不是完全正确的。真正的是:从结果来看是类似于传引用,从过程来看是传值。

对于这个理解,先看几个概念:

标识符

准确的讲PHP中没有指针这个概念,都是底层来实现,而标识符这个概念和指针类似,指向对象真正的内存地址。一个对象变量已经不再保存整个对象的值,只是保存一个标识符来访问真正的对象内容。

下面用来表示标识符。将对象赋值给另外一个变量,就是复制一份标识符。比如创建个一对象,$a=new Bog(), 真正的存在变量里的是标识符:$a=[id]->address ,这一点非常重要。如果赋值给另外一个变量 $b=[id_copy]->address

引用

  • php
  • PHP

阅读全文

Modern PHP : 生成器及实例

2016-06-02

概念

PHP中的生成器(Generator)说简单点就是一种特殊的迭代器(Iterator),不过与标准的PHP迭代器不同,标准的迭代器通常都是在内存中全部计算过的数据集进行迭代,而生成器可以动态的计算并交出下一个值,这样可以不占用宝贵的系统内存。因为生成器是 forward-only 的迭代,在迭代开始后不能 rewind ,所以同一个生成器不能迭代多次。

yield

使用生成器要用到yield关键字。yield 与 return 相似,不同的是 yield 不会终止函数的执行,而是为循环提供一个值并暂停生成器函数的执行。

1
2
3
4
5
6
7
8
9
10
<?php
function myGenerator() {
yield 'value1';
yield 'value2';
yield 'value3';
}

foreach (myGenerator() as $yieldedValue) {
echo $yieldedValue, PHP_EOL;
}

当一个生成器被调用的时候,它返回一个可以被遍历的对象.当你遍历这个对象的时候(例如通过一个foreach循环),PHP 将会在每次需要值的时候调用生成器函数,并在产生一个值之后保存生成器的状态,这样它就可以在需要产生下一个值的时候恢复调用状态。一旦不再需要产生更多的值,生成器函数可以简单退出,而调用生成器的代码还可以继续执行,就像一个数组已经被遍历完了。

对比

再看一个传统生成随机数的例子:

  • php
  • PHP

阅读全文

Modern PHP : 闭包和匿名函数

2016-05-29

概念

闭包(closures)是指在创建时封装的状态的函数,匿名函数(Anonymous functions)是指没有名称的函数。在PHP中,闭包和匿名函数被看成一种东西。理论上是不同的,可以理解闭包是由匿名函数构成的一种“结构”。

像string,int等,可以把闭包函数作为变量的值来使用。PHP会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号。

创建闭包

1
2
3
4
5
6
$anonyFunc = function ($name) {
return 'Hello ' . $name;
};

echo $anonyFunc->__invoke("Josh");
echo $anonyFunc("Josh");

闭包的情况是:

1. 创建一个继承Closure类的闭包对象

2. 实现Closure类中的__invoke()方法

3. 把闭包赋值给$anonyFunc对象

4. 调用变量名后面有(),实际调用__invoke()方法

在array_map中的例子,这种做法更简单,比传统的先定义一个函数再调用要快一点,之前的做法还把回调的实现和使用场所隔离开了。

  • php
  • PHP

阅读全文

分类算法学习笔记:朴素贝叶斯及垃圾过滤

2016-05-08

贝叶斯方法源于贝叶斯生前为解决一个“逆概”问题写的一篇文章。假设袋子里面有N个白球,M个黑球,摸一个球是黑球的概率是多少?如果反过来看:如果我们事先并不知道袋子里面黑白球的比例,而是随意摸出一个球知道颜色之后,那么求袋子里面的黑白球的比例。类比一下,我们可以知道我们自己邮箱里的垃圾邮件是哪些,也可以通过概率知道哪些词经常出现在垃圾邮件里,那么当收到一封邮件时,我们可以根据邮件里的词,从求这封新的邮件是垃圾邮件的概率。

贝叶斯算法通过已知的P(A|B),P(A),和P(B)三个概率计算P(B|A)发生的概率,其中

  • S:S是样本空间,是所有可能事件的总和。
  • P(A):是样本空间S中A事件发生的概率。
  • P(B):是样本空间S中B事件发生的概率。
  • P(A∩B):是样本空间S中A事件和B事件同时发生的概率。
  • P(A|B):是条件概率,是B事件已经发生时A事件发生的概率,P(A|B)=P(A∩B)/P(B)。

贝叶斯公式 P(B|A)=P(A|B)*P(B)/P(A)

在贝叶斯公式中,每一种概率都有一个特定的名字:

  • P(B)是”先验概率”(Prior probability)。
  • P(A)是”先验概率”(Prior probability)。
  • P(A|B)是已知B发生后A的条件概率,叫做似然函数(likelihood)。
  • P(B|A)是已知A发生后B的条件概率,是我们要求的值,叫做后验概率。
  • P(A|B)/P(A)是调整因子,也被称作标准似然度(standardised likelihood)。

通过出现的关键词对垃圾邮件的计算公式如下:
P(垃圾邮件|出现关键词)=P(出现关键词|垃圾邮件)*P(垃圾邮件)/P(出现关键词)

  • Algorithm

阅读全文

Bitmap 算法解释与应用

2016-04-04

有这样一个问题:给40亿个不重复的unsigned int的整数,没排序。再给一个数,快速判断这个数是否存在40亿个整数中?内存限制2G。

40亿个数,我们先看内存占用:(40亿*4)/1024/1024/1024=14.9G (int 占4字节32bit),所以用传统的内存排序肯定不可以。

这里要用到Bitmap算法,Bitmap就是用一个bit位来映射某个元素的value值,key则是该元素值

就是用一个bit位来标识一个int整数,这样需要的内存空间为:40亿/8/1024/1024=476M。

假设我们要对5个不重复的数(4,7,2,5,3)排序。确定最大值是7,数值范围是0~7,共8个数,需要8bit,即1byte。

从0计数,从右往左,即
00000000 –> 76543210

给这5个数赋值:
00010000 (第一个数4)
10010000 (第二个数7)
10010100 (第三个数2)
10110100 (第四个数5)
10111100 (第五个数3)

最终结果为10111100,遍历这8个bit位,将值为1输出,排序结果为 (7,5,4,3,2)

  • 算法
  • Algorithm

阅读全文

123…6Next »
© 2014-2019 Awezome
Hexo Theme Zilia by Awezome