Browsed by
标签:SDN

程序员必读书单 1.0

程序员必读书单 1.0

閱讀本文約花費: 80 (分鐘)本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读。旨在成为最好最全面的程序员必读书单。 前言 Reading makes a full man; conference a ready man; and writing an exact man. Francis Bacon 优秀的程序员应该具备两方面能力: 良好的 程序设计 能力: 掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列); 理解计算机科学的核心概念(例如计算机系统结构、操作系统、编译原理和计算机网络); 熟悉至少两门以上编程语言(例如 C++,Java,C#,和 Python); 专业的 软件开发 素养: 具备良好的编程实践,能够编写可测试(Testable),可扩展(Extensible),可维护(Maintainable)的代码; 把握客户需求,按时交付客户所需要的软件产品; 理解现代软件开发过程中的核心概念(例如面向对象程序设计,测试驱动开发,持续集成,和持续交付等等)。 和其它能力一样, 程序设计 能力和 软件开发 素养源自项目经验和书本知识。项目经验因人而异(来自不同领域的程序员,项目差异会很大);但书本知识是相通的…

Read More Read More

数学之美番外篇:平凡而又神奇的贝叶斯方法

数学之美番外篇:平凡而又神奇的贝叶斯方法

閱讀本文約花費: 63 (分鐘) 概率论只不过是把常识用数学公式表达了出来。 ——拉普拉斯 目录 0. 前言1. 历史    1.1 一个例子:自然语言的二义性    1.2 贝叶斯公式2. 拼写纠正3. 模型比较与贝叶斯奥卡姆剃刀    3.1 再访拼写纠正    3.2 模型比较理论(Model Comparasion)与贝叶斯奥卡姆剃刀(Bayesian Occam’s Razor)    3.3 最小描述长度原则    3.4 最优贝叶斯推理4. 无处不在的贝叶斯    4.1 中文分词    4.2 统计机器翻译    4.3 贝叶斯图像识别,Analysis by Synthesis       4.4 EM 算法与基于模型的聚类    4.5 最大似然与最小二乘5. 朴素贝叶斯方法(又名“愚蠢者的贝叶斯(idiot’s bayes)”)    5.1 垃圾邮件过滤器 &nbs…

Read More Read More

怎样花两年时间去面试一个人

怎样花两年时间去面试一个人

閱讀本文約花費: 41 (分鐘)Joel Spolsky曾经感叹:招聘难,难于上青天(此处笔者稍加演绎:))。他有两个辛辣但不乏洞察力的断言:真正的牛人也许一辈子就投大概4次简历,这些家伙一毕业就被好公司抢走了,并且他们的雇主会给他们不赖的待遇,所以他们也不想挪窝。(刚刚去世的Dennis Ritchie就是这样一个人)而“人才”市场上能找到的大多都不是什么人才。招到这帮人轻则费钱重则把你公司搞挂。 (当我把这篇文章给邹欣老师review的时候,他说了另外两点:1. 最好的人也许不投简历,就决定去哪里了。所以要在他们做决定前找到他们。2. 比较差的会投很多次简历,找不到工作的时间越多,投的简历越多,给整个pool 带来很多噪音,top10%的简历也许根本不算全部人的top10%。) 诚然,也许没有哪个行业像IT行业这样,无形资产占据公司的绝大多数资产。拒坊间传言比尔·盖茨就曾经说过类似这样的话:只要允许我带走100个人我可以再造一个微软。这话没搜到原版出处,但是从一个侧面反映了IT公司当中智力资产所占的比例之重。 所以一个自然的推论就是,招聘也许是一个公司决策当中最最重要的一个环节。Joel Spolsky把他在这方面的观察,体会和洞见集结成了一本小册子《Smart and Gets Things Done》,开篇就挑战“产品是公司成败的关键”这个传统观念,他认为创造最适合工程师生…

Read More Read More

炸裂!40+ 图万字长文拿下 HTTP

炸裂!40+ 图万字长文拿下 HTTP

閱讀本文約花費: 38 (分鐘)>本文将从以下几个方面进行分享。其中包括HTTP发展史,HTTP缓存代理机制,常用的web攻击,HTTP和HTTPS的流量识别,网络协议学习的工具推荐以及高频HTTP与HTTPS的高频面试题题解等,开工。 @ 1989年,蒂姆·伯纳斯 – 李(Tim Berners-Lee)在论文中提出可以在互联网上构建超链接文档,并提出了三点. URI:统一资源标识符。互联网的唯一ID HTML:超文本文档 HTTP:传输超文本的文本传输协议 1 HTTP应用在哪儿 学习一门知识,采用五分钟时间看看这个知识是干啥的可能会更加有目的性。HTTP可谓无处不在,这里例举出几个。 2 HTTP是什么 HTTP(hypertext transport protocol)翻译过来为”超文本传输协议”,文本可以理解为简单的字符文字组合,也可以理解为更为复杂的音频或者图像等。那么将这个词语拆分为三个部分。 “超文本”和”文本”相比多了一个字”超”,这样看来比文本丰富,因为它可以将多种文本/图像等进行混合,更重要的是可以从一个文本跳转到另一个文本(文本连接)。 “传输”,传输的过程中需要沟通,沟通即可能一对一沟通也可能一对多沟通(进行内容协商),…

Read More Read More

数据中心网络架构浅谈(一)

数据中心网络架构浅谈(一)

閱讀本文約花費: 14 (分鐘)不论我们在讨论SDN,NFV或者其他的虚拟网络技术,有一点需要明确,网络数据包最终都是跑在物理网络上。物理网络的特性,例如带宽,MTU,延时等,最终直接或者间接决定了虚拟虚拟网络的特性。可以说物理网络决定了虚拟网络的“天花板”。在Mirantis对OpenStack Neutron的性能测试报告中可以看出,网络设备的升级和调整,例如采用高速网卡,配置MTU9000,可以明显提高虚拟网络的传输效率。在对网络性能进行优化时,有些物理网络特性可以通过升级设备或线路来提升,但是有些与网络架构有关。升级或者改动网络架构带来的风险和成本是巨大的,因此在架设数据中心初始,网络架构的选择和设计尤其需要谨慎。另一方面,在设计虚拟网络时,不可避免的需要考虑实际的物理网络架构,理解物理网络架构对于最终理解虚拟网络是不可缺少的。 接下来我将分几次说一说自己对数据中心网络架构的认识,想到哪说到哪,不对的地方请大家指正。 传统数据中心网络架构 在传统的大型数据中心,网络通常是三层结构。Cisco称之为:分级的互连网络模型(hierarchical inter-networking model)。这个模型包含了以下三层: Access Layer(接入层):有时也称为Edge Layer。接入交换机通常位于机架顶部,所以它们也被称为ToR(Top of Rack)交换机,它们物理…

Read More Read More

五分钟理解一致性哈希算法(consistent hashing)

五分钟理解一致性哈希算法(consistent hashing)

閱讀本文約花費: 9 (分鐘)   一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。     一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:1、平衡性(Balance):平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。2、单调性(Monotonicity):单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。 3、分散性(Spread):在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效…

Read More Read More

定时任务高效触发

定时任务高效触发

閱讀本文約花費: 4 (分鐘)开发中我们经常会遇到一些需要定时来解决的业务场景。比如,有这样一个需求:“如果连续30s没有请求包(例如登录,消息,keepalive包),服务端就要将这个用户的状态置为离线”。 轮询处理 将所有任务都添加到某集合中,定时轮询扫描,如果达到条件则进行相关处理; 方案的不足: 效率低下。已经被执行过记录,仍然会被扫描(只是不会出现在结果集中),存在大量的重复计算; 时效性差。时间误差取决于轮询的间隔;如果间隔过小,重复被扫描的次数更高,效率会变得更低下。 定时处理 每来一个任务,启动一个定时器,达到定时器时间,执行相关处理; 方案的不足: 定时数过多,导致内存使用率过高,容易导致崩溃。 环形队列处理 数据结构: 环形队列ListLoop,例如可以创建一个包含0-30的slot**环形队列**(本质是个数组); 每个环上的任务集合Slot,环上每一个slot是一个Set; 记录每个Task对应落到Slot的Map集合; 执行过程:第一步:启动一个timer,每隔1s,在上述环形队列中移动一格,0->1->2->3…->29->30->0…有一个CurrentSlotIndex指针来标识刚检测过的slot ;第二步:当有某用户uid有请求包到达时,从Map结构中,查找出这个uid存储在哪一个slot里;第三步:如果存在,从…

Read More Read More

浅谈服务治理与微服务

浅谈服务治理与微服务

閱讀本文約花費: 12 (分鐘)近期都在谈微服务,本人也正在做相关的工作,应领导要求做了一个微服务的分享,本篇文章主要来源于分享的PPT,所以有些简单,有问题可以在下面留言,大家 一起讨论。 本篇文章先简单介绍了互联网架构的演变,进而介绍了服务化,最后再介绍微服务,微服务是服务治理的升级也是互联网架构的进一步延伸。 互联网架构演变 一体架构 在计算机软件发展早期,一般桌面软件都是采用这种架构,不管是界面还是业务处理还是数据处理都放到一个包中。这种其实谈不上架构,但也可以说是很好的架构,因为它足够简单。 mvc架构 但随着浏览器的出现便产生了web应用,web应用的特点是界面部分是显示在浏览器中,服务处理是在服务容器中的,页面显示一般用css+js+html技术来处理,而后端可以用java、php等语言,这就产生了前后端分离。对于web系统,一体架构难以满足前后端分离的开发需求,因而便产生了MVC架构。 MVC才算的上真正意义上的架构,因为它除了解决了前后端分离问题,还引入了一种全新的开发模式,用一种业务逻辑、数据、界面显示分离的方法组织代码,使得整个应用层次更加分明,而且各个层次之间不但减低了耦合性,还提高了各个层次的可重用性。 但随着应用规模的不断扩大,应用模块不断增加,整个应用也显得越来越臃肿,维护起来也更加困难,因此便又产生了多应用架构。 多应用架构 多应用架构很简单,就是把…

Read More Read More

内网畅外网墙–再聊Nginx访问权限管理

内网畅外网墙–再聊Nginx访问权限管理

閱讀本文約花費: 6 (分鐘)接昨天。 low address bits of 192.168.101.0/16 are meaningless in /usr/local/nginx/conf/nginx.conf:122 网关 网关在网络层以上实现网络互连,是复杂的网络互连设备。网关既可以用于广域网互连,也可以用于局域网互连。 A:IP地址范围 192.168.1.1~192. 168.1.254,子网掩码 255.255.255.0B:IP地址范围 192.168.2.1~192. 168.2.254,子网掩码 255.255.255.0 计算所得(见下述计算方式):A 网络地址为 192.168.1.0,B网络地址为 192.168.2.0。 两个网络中的主机处在不同的网络里,而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。 网关 pk. 路由器 网关:一个大概念,不具体特指一类产品,只要连接两个不同的网络的设备都可以叫网关 路由器:连接两个或多个网络的硬件设备,路由器很显然能够实现网关的功能 缺省网关:是子网与外网连接的设备,通常是一个路由器。PC本身不具备路由寻址能力,所以PC要把所有的IP包发送到一个默认的中转地址上面进行…

Read More Read More

连接zookeeper时报”Path cannot be null”错误的解决方法

连接zookeeper时报”Path cannot be null”错误的解决方法

閱讀本文約花費: 3 (分鐘)   上周将公司生产环境中zookeeper集群中的一台zookeeper重启后,所有的连接此zookeeper的客户端都报如下错误: [ctvpay] 2018-03-23 10:57:08.569 — ERROR [main-EventThread] CuratorFrameworkImpl.java:529 – Watcherexceptionjava.lang.IllegalArgumentException: Path cannot be null        at org.apache.zookeeper.common.PathUtils.validatePath(PathUtils.java:45) ~[zookeeper-3.4.6.jar!/:3.4.6-1569965]        at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1572) ~[zookeeper-3.4.6.jar!/:3.4.6-1569965]        at com.netflix.curator.framework…

Read More Read More

深入学习MySQL事务:ACID特性的实现原理

深入学习MySQL事务:ACID特性的实现原理

閱讀本文約花費: 23 (分鐘) 本文主要介绍了MySQL事务的基础知识,它的原子性,持久性,隔离性,一致性等方面内容。 事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段。本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理。 MySQL博大精深,文章疏漏之处在所难免,欢迎批评指正。 一、基础概念 事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL支持事务,本文介绍基于MySQL5.6。 首先回顾一下MySQL事务的基础知识。 1. 逻辑架构和存储引擎 图片来源:csdn 如上图所示,MySQL服务器逻辑架构从上往下可以分为三层: (1)第一层:处理客户端连接、授权认证等。 (2)第二层:服务器层,负责查询语句的解析、优化、缓存以及内置函数的实现、存储过程等。 (3)第三层:存储引擎,负责MySQL中数据的存储和提取。MySQL中服务器层不管理事务,事务是由存储引擎实现的。MySQL支持事务的存储引擎有InnoDB、NDB Cluster等,其中InnoDB的使用最为广泛;其他存储引擎不支持事务,如MyIsam、Memory等。 如无特殊说明,后文中描述的内容都是基于InnoDB。 2. 提交和回…

Read More Read More

Docker容器与虚拟化技术——部署KVM虚拟化平台

Docker容器与虚拟化技术——部署KVM虚拟化平台

閱讀本文約花費: 16 (分鐘) 本文重点介绍了 部署KVM虚拟化平台,怎么搭建KVM虚拟化平台 ,使用KVM命令集管理虚拟机,KVM动态迁移,KVM性能优化。 部署KVM虚拟化平台 一、搭建KVM虚拟化平台 1、前置知识点 (1)什么是虚拟化 把硬件资源从物理方式转变为逻辑方式,打破原有物理结构,使用户可以灵活管理这些资源,并且允许1台物理机上同时运行多个操作系统,以实现资源利用率最大化和灵活管理的技术 (2)虚拟化层 ①X86平台指令集划分为4个特权模式:ring0-3 ②操作系统工作在ring0 ③应用程序使用ring3 ④驱动程序使用ring1-2 (3)虚拟化的优势 ①减少服务器数量,降低硬件采购成本 ②资源利用率最大化 ③降低机房空间、散热、电耗成本 ④硬件资源可动态调整,提高企业IT业务灵活性 ⑤高可用性 ⑥在不中断服务的情况下进行物理硬件调整 ⑦降低管理成本 ⑧具备更高效的灾备能力 (4)VMware虚拟化 ①vSphere是VMware公司2001年基于云计算推出的一套企业级虚拟化解决方案,核心组件为ESX,现已被ESXi取代。经历了5个版本改进,实现了虚拟化基础架构、高可用性、集中管理、性能监控等一体化解决方案。号称世界第一套云计算的操作系统 ②ESXi本身也是一个操作系统,采用Linux内核(VMKernel),安装方式为裸金属方式,直接安装在物理服务器上,不…

Read More Read More

Zookeeper典型应用场景介绍

Zookeeper典型应用场景介绍

閱讀本文約花費: 13 (分鐘) 本文主要通过几个例子来具体的说明Zookeeper在特定场景下的使用方式 ,希望对您的学习有所帮助。 1.前言 之前自己写了一些关于Zookeeper的基础知识,Zookeeper作为一种协调分布式应用高性能的调度服务,实际的应用场景也非常的广泛,这里主要通过几个例子来具体的说明Zookeeper在特定场景下的使用方式(下面的这些功能估计consul和etcd也能实现,以后学到了再说吧)。 2.具体应用 2.1.一致性配置管理 我们在开发的时候,有时候需要获取一些公共的配置,比如数据库连接信息等,并且偶然可能需要更新配置。如果我们的服务器有N多台的话,那修改起来会特别的麻烦,并且还需要重新启动。这里Zookeeper就可以很方便的实现类似的功能。 2.1.1.思路 将公共的配置存放在Zookeeper的节点中 应用程序可以连接到Zookeeper中并对Zookeeper中配置节点进行读取或者修改(对于写操作可以进行权限验证设置),下面是具体的流程图: 2.1.2.事例 数据库配置信息一致性的维护 配置类: public class CommonConfig implements Serializable{// 数据库连接配置private String dbUrl;private String username;private String pas…

Read More Read More

K8S基础概念

K8S基础概念

閱讀本文約花費: 9 (分鐘)一、核心概念 1、Node Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的Kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁、以及实现软件模式的负载均衡。 Node包含的信息: Node地址:主机的IP地址,或Node ID。 Node的运行状态:Pending、Running、Terminated三种状态。 Node Condition:… Node系统容量:描述Node可用的系统资源,包括CPU、内存、最大可调度Pod数量等。 其他:内核版本号、Kubernetes版本等。 查看Node信息: 2、Pod Pod是Kubernetes最基本的操作单元,包含一个或多个紧密相关的容器,一个Pod可以被一个容器化的环境看作应用层的“逻辑宿主机”;一个Pod中的多个容器应用通常是紧密耦合的,Pod在Node上被创建、启动或者销毁;每个Pod里运行着一个特殊的被称之为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效,在设计时我们可以充分利用这一特性将一组密切相关的服务进程放入同一个Pod中。 同一个Pod里的容器之间仅需通过l…

Read More Read More

云原生应用 Kubernetes 监控与弹性实践

云原生应用 Kubernetes 监控与弹性实践

閱讀本文約花費: 8 (分鐘) 本文向大家介绍一个云原生应用该如何在Kubernetes中无缝集成监控和弹性能力。希望对您的学习有所帮助。 前言 云原生应用的设计理念已经被越来越多的开发者接受与认可,而Kubernetes做为云原生的标准接口实现,已经成为了整个stack的中心,云服务的能力可以通过Cloud Provider、CRD Controller、Operator等等的方式从Kubernetes的标准接口向业务层透出。开发者可以基于Kubernetes来构建自己的云原生应用与平台,Kubernetes成为了构建平台的平台。 阿里云容器服务Kubernetes的监控总览 云服务集成 阿里云容器服务Kubernetes目前已经和四款监控云服务进行了打通,分别是SLS(日志服务)、ARMS(应用性能监控)、AHAS(架构感知监控服务)、Cloud Monitor(云监控)。 SLS主要负责日志的采集、分析。在阿里云容器服务Kubernetes中,SLS可以采集三种不同类型的日志 APIServer等核心组件的日志 Service Mesh/Ingress等接入层的日志 应用的标准日志 除了采集日志的标准链路外,SLS还提供了上层的日志分析能力,默认提供了基于APIServer的审计分析能力、接入层的可观测性展现、应用层的日志分析。在阿里云容器服务Kubernetes中,日志组件…

Read More Read More

Scroll Up