背着锄头的互联网农民

0%

设置仓库
1
2
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装container-selinux

container-selinux包的位置在http://mirror.centos.org/centos/7/extras/x86_64/Packages/目录下,搜索其中的最新版本,使用wget下载到本地。

1
2
wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.107-1.el7_6.noarch.rpm
rpm -ivh container-selinux-2.107-1.el7_6.noarch.rpm --nodeps --force
阅读全文 »

当我们使用hexo搭建好一个网站后,自然希望博客内容能用google搜索到。但是这里我们需要做一些事情,才能被Google搜索引擎搜索到。下文将详细介绍需要做的事情:

验证网站

在Google搜索引擎中输入如下内容,如果能看到你自己网站的内容,则说明验证成功。如果你的网站是新建立的,自然在这里搜索不到。本文一下内容将介绍如何能够被搜索到。

1
site:springzzj.github.io
阅读全文 »

概率论

我们需要描述一组数据时候,本质上需要描述每一个点。但是如果我们可以用分布去表示这些数据,就只需要均值或者方差分布参数,大大节省了存储空间。

离散型随机分布

伯努利分布:一次实验,结果只有两种结果。\(p(k)=p^k(1-p)^{(1-k)}, k\in\{0, 1\}\),期望:\(p\),方差:\(p(1-p)\)

二项分布:n次伯努利实验正好得到k次成功的概率,单次成功的概率为p。当n=1的时候退化到伯努利分布。当p=0.5的时候,整体上和正态分布图形类似。\(p(k)=C_n^kp^k(1-p)^{n-k}\),期望:\(np\),方差:\(np(1-p)\)

几何分布:进行n次伯努利实验,在获取成功前需要进行多少次实验。分布图形是越往前概率越大,\(p(k)=(1-p)^{k-1}p\), 期望\(\frac{1}{p}\), 方差是\(\frac{(1-p)}{p^k}\)

泊松分布:单位时间内独立事件发生次数的概率分布,它是二项分布n很大而p很小时的极限。泊松分布可以把单位时间切成n次,每次成功的概率为p,那么单位时间内出现k次的概率就是二项分布,所以泊松分布是二项分布的一种极限形式。它的分布图形也和二项分布类似,特别是n很大而p很小时。\(p(k)=\frac{e^{-\lambda}\lambda^k}{k!}\), 期望和方差都是\(\lambda\),其中k是发生的次数,\(\lambda\)是发生的平均次数,当\(\lambda>=20\)时,泊松分布趋向于正态分布。

阅读全文 »

  1. 初始化co-routine-env(在任意一个线程中调用co-create都会引发该函数,如果没有初始化则初始化)
  • 针对当前线程实例化一个env出来
  • 创建初始co-routine(主线程中co-routine),分配栈空间128K(该栈空间没有用到),设置回调函数为NULL,is_main=true
  • 将初始co-routine加入到env中Call-stack数组中,形成调用栈
  • 设置env中的epoll实例
阅读全文 »

本文中我们在Mac机器上使用Docker配置TensorFlow-Serving环境,并提供Http预测接口。

安装Docker
1
brew cask install docker
下载TensorFlow-Serving镜像
1
docker pull tensorflow/serving
阅读全文 »

腾讯目前主要的盈利主要分为四个部分:游戏收入、数字收入、网络广告、金融及企业服务。第三季度收入970亿左右,这四个部分占比差不多。先说结论,预计腾讯明年能保持20%的增长,给予30倍PE。从本质上看,微信的海量用户使得腾讯能够在很多领域都能做到后发制人,比如依赖微信红包发展起来微信支付一举打破支付宝的绝对优势、依赖小程序额朋友圈使得社交广告的增速稳步增加、腾讯云能起来跟微信也息息相关,所以只要有微信,任何一个领域都不能忽视腾讯。所以我觉的短视频这个赛道短暂的失利对腾讯造不成什么大的威胁,腾讯的发展脚步不会停下来。下面逐步展开这四部分分别来说:

阅读全文 »

概述

秒杀系统是指大量用户同时抢购数量有限的商品,瞬时造成服务端的尖峰压力, 服务端需要保证高并发处理,同时又要保证高可用性、商品不会超发、快速扩容缩容、系统容错、降级熔断等,融合了各种服务端技术。

我们以电商的购买流程举例,电商购买分为放入购物车、下单、支付三个步骤。购物车服务是用来管理用户将要购买的商品,单独一个服务。下单服务是服务端创建订单并减库存的服务,如果库存减为0,则不能再卖出商品,减库存需要做到幂等和防超发。支付系统是对订单进行最终的支付, 如果过期没有支付需要再返回库存。总体上来说订单ID在整个流程中是唯一的,试用订单ID来保证幂等性。如果以微信红包系统来举例的话,经历微信包红包、发红包、抢红包、拆红包的过程。抢红包类似电商的减库存,用户抢到红包但是不知道多少钱,抢到红包的人是说有资格拿到钱(拆红包时有可能失败)。拆红包类似最终支付到账的流程,后台随机给用户分配抢到的金额并写入到数据库中

秒杀系统中,一个重要的概念的幂等性,因为分布式系统中存在各种重试(事务补偿),在各个层面都要做的幂等性,才能有效的防止重复购买和数据一致性。

下面我们按照客户端、服务端、缓存、数据库来说明下各个阶段需要做的事情。

阅读全文 »

近期,线上服务偶尔会出现超时情况。说一下背景,我们的开发语言是java,在单台物理机上部署了3个java模块,他们之间互相调用。服务p999耗时有时候会超过10s,按道理我们的业务不会停滞这么长时间,并且在长时间内只有一台机器多次出现了这个问题。下面是我们的分析流程:

  1. 登录机器查看WARN报警日志,事故发生时刻打印了大批WARN日志。进一步发现,在大批打印日志之前,有很长时间没有打印任何日志。怀疑可能是java模块GC导致的stop the world。

  2. JVM中增加了-XX:+PrintGC参数,会将gc日志输出到指定文件。查看gc日志,发现确实有长时间stop the world的情况,并和问题发生时间吻合。但是有时候出现在minor gc中,有时候出现在普通的safepoint安全点位置。说明并不单纯是gc导致的,但是问题发生原因肯定和stop the world有关。

    阅读全文 »

自动驾驶概述

自动驾驶技术不需要人为操作,仅仅通过GPS、惯导、雷达等感知设备即可达到自动导航及行驶的目标。自动驾驶技术分为5个级别: - 等级0:即无自动。驾驶随时掌握著车辆的所有机械、物理功能,仅配备警报装置等无关主动驾驶的功能也算在内。 - 等级1:驾驶人操作车辆,但个别的装置有时能发挥作用,如电子稳定程式(ESP)或防锁死刹车系统(ABS)可以帮助行车安全。 - 等级2:驾驶人主要控制车辆,但系统阶调地自动化,使之明显减轻操作负担,例如主动式巡航定速(ACC)结合自动跟车和车道偏离警示,而自动紧急煞停系统(AEB)透过盲点侦测和汽车防撞系统的部分技术结合。 - 等级3:驾驶人需随时准备控制车辆,自动驾驶辅助控制期间,如在跟车时虽然可以暂时免于操作,但当汽车侦测到需要驾驶人的情形时,会立即回归让驾驶人接管其后续控制,驾驶必须接手因应系统无力处理的状况。 - 等级4:驾驶人可在条件允许下让车辆完整自驾,启动自动驾驶后,一般不必介入控制,此车可以按照设定之道路通则(如高速公路中,平顺的车流与标准化的路标、明显的提示线),自己执行包含转弯、换车道与加速等工作,除了严苛气候或道路模糊不清、意外,或是自动驾驶的路段已经结束等等,系统并提供驾驶人“足够宽裕之转换时间”,驾驶应监看车辆运作,但可包括有旁观下的无人停车功能。(有方向盘自动车) - 等级5:驾驶人不必在车内,任何时刻都不会控制到车辆。此类车辆能自行启动驾驶装置,全程也不须开在设计好的路况,就可以执行所有与安全有关之重要功能,包括没有人在车上时的情形,完全不需受驾驶意志所控,可以自行决策。(无需方向盘自动车)

阅读全文 »

概述

本文参考官方的java使用TensorFlow库的例子,将深度学习模型保存成pb文件,在java环境中加载模型并做预测。

环境安装

安装pip
1
2
3
yum -y install epel-release
yum install python-pip
pip install --upgrade pip
安装TensorFlow、Keras、numpy
1
2
3
pip install tensorflow  //安装的是最新的tensorflow2.1版本
pip install keras
pip install numpy
阅读全文 »