web

http跨域时的options请求

出于安全考虑,并不是所有域名访问后端服务都可以。其实在正式跨域之前,浏览器会根据需要发起一次预检(也就是option请求),用来让服务端返回允许的方法(如get、post),被跨域访问的Origin(来源或者域),还有是否需要Credentials(认证信息)等。那么浏览器在什么情况下能预检呢? 浏览器将CORS请求分为两类:简单请求(simple request)和非简单请求(not-simple-request),简单请求浏览器不会预检,而非简单请求会预检。这两种方式怎么区分?

阅读全文

libreoffice

将.doc格式文档转为txt格式

libreoffice –headless –convert-to txt path-to-your-doc.doc

同样可以指定转换后的文件输出路径,也可以批量地将doc/docx/wps文件传给LibreOffice接口

libreoffice –headless –convert-to html –outdir /your/output/dir /your/doc_docx_wps/files/*.{dosx,doc,wps}

阅读全文

Numbering

nternational Numbering Plans is specialised in world-wide (tele)communications related numbering plans, and offers a range of on-line services for a variety of market segments in the global telecommunications sector. Most on-line services are free of charge for personal or limited use. For professional and business use various subscriptions are available.

阅读全文

c++虚函数指针

虚函数的实现是,内存中首个4BYTE包含的是指向虚函数表的指针,然后再在表中包含指向实现该虚函数的实际内存地址

阅读全文

WebAuthn

World Wide Web Consortium (W3C) 宣布 Web Authentication API (WebAuthn) 成为正式的 Web 标准。WebAuthn 现在是一项无密码登录验证的开放标准,为 Web 应用和服务提供了无密码的公钥身份认证接口,获得了 Airbnb、阿里巴巴、Apple、Google、IBM、Intel,、Microsoft、Mozilla、PayPal、SoftBank、腾讯和 Yubico 等公司的支持,允许用户使用生物识别、移动设备等登录在线账号。主流浏览器如 Google Chrome、Mozilla Firefox 和 Microsoft Edge 都已经在去年加入了对 WebAuthn 的支持,苹果的 Safari 浏览器则在预览版中加入了对 WebAuthn 的支持。 W3C的WebAuthn推荐FIDO 联盟的FIDO2规范集的核心组成部分。FIDO2是支持公钥加密和多因素身份验证的标准 - 特别是通用身份验证框架(UAF)和通用第二因子(U2F)协议。为了促进采用,FIDO联盟提供测试工具和认证计划

阅读全文

cache Control

Cache-Control 计算一个response的Freshness Lifetime(新鲜生命周期、有效期)值的规则为:

阅读全文

远程桌面

https://github.com/rustdesk/rustdesk

阅读全文

copilot

https://www.zhihu.com/question/22867411/answer/2476235600

阅读全文

playbackRate 手动控制多倍播放

document. querySelector(‘video’).playbackRate=3

阅读全文

ip 归属地代理

所有的上网设备都会被分配一个IP地址,每个IP地址都有一个归属地,即IP属地。 IP代理畸形产业爆火,最低6元即可更改IP

阅读全文

clash

https://github.com/Loyalsoldier/clash-rules https://lancellc.gitbook.io/clash/start-clash/clash-tun-mode https://github.com/Dreamacro/clash/wiki/premium-core-features

阅读全文

全球电话号码正则

/**

  • 底层 全球电话号码 正则验证 **/ export function GLOBALPHONE(c,p){ let e = c, g = new Map([ [‘ar-DZ’, /^(+?213|0)(5|6|7)\d{8}$/], [‘ar-SY’, /^(!?(+?963)|0)?9\d{8}$/], [‘ar-SA’, /^(!?(+?966)|0)?5\d{8}$/], [‘en-US’, /^(+?1)?[2-9]\d{2}2-9\d{6}$/], [‘cs-CZ’, /^(+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/], [‘de-DE’, /^(+?49[ .-])?([(]{1}[0-9]{1,6}[)])?([0-9 .-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/], [‘da-DK’, /^(+?45)?(\d{8})$/], [‘el-GR’, /^(+?30)?(69\d{8})$/], [‘en-AU’, /^(+?61|0)4\d{8}$/], [‘en-GB’, /^(+?44|0)7\d{9}$/], [‘en-HK’, /^(+?852-?)?[569]\d{3}-?\d{4}$/], [‘en-IN’, /^(+?91|0)?[789]\d{9}$/], [‘en-NZ’, /^(+?64|0)2\d{7,9}$/], [‘en-ZA’, /^(+?27|0)\d{9}$/], [‘en-ZM’, /^(+?26)?09[567]\d{7}$/], [‘es-ES’, /^(+?34)?(6\d{1}|7[1234])\d{7}$/], [‘fi-FI’, /^(+?358|0)\s?(4(0|1|2|4|5)?|50)\s?(\d\s?){4,8}\d$/], [‘fr-FR’, /^(+?33|0)[67]\d{8}$/], [‘he-IL’, /^(+972|0)([23489]|5[0248]|77)[1-9]\d{6}/], [‘hu-HU’, /^(+?36)(20|30|70)\d{7}$/], [‘it-IT’, /^(+?39)?\s?3\d{2} ?\d{6,7}$/], [‘ja-JP’, /^(+?81|0)\d{1,4}[ -]?\d{1,4}[ -]?\d{4}$/], [‘ms-MY’, /^(+?6?01){1}(([145]{1}(-|\s)?\d{7,8})|([236789]{1}(\s|-)?\d{7}))$/], [‘nb-NO’, /^(+?47)?[49]\d{7}$/], [‘nl-BE’, /^(+?32|0)4?\d{8}$/], [‘nn-NO’, /^(+?47)?[49]\d{7}$/], [‘pl-PL’, /^(+?48)? ?[5-8]\d ?\d{3} ?\d{2} ?\d{2}$/], [‘pt-BR’, /^(+?55|0)-?[1-9]{2}-?[2-9]{1}\d{3,4}-?\d{4}$/], [‘pt-PT’, /^(+?351)?9[1236]\d{7}$/], [‘ru-RU’, /^(+?7|8)?9\d{9}$/], [‘sr-RS’, /^(+3816|06)[- \d]{5,9}$/], [‘tr-TR’, /^(+?90|0)?5\d{9}$/], [‘vi-VN’, /^(+?84|0)?((1(2([0-9])|6([2-9])|88|99))|(9((?!5)[0-9])))([0-9]{7})$/], [‘zh-CN’, /^(+?0?86-?)?1[345789]\d{9}$/], [‘zh-TW’, /^(+?886-?|0)?9\d{8}$/] ]); return new Promise(( resolve, reject) => { resolve(g.get(e).test(p)); }) };

https://blog.csdn.net/weixin_42408771/article/details/116522404

阅读全文

git 删除远程分支

第一步:先修改本地分支重命名

阅读全文

怪异模式

页面通常有两种版本:为网景(Netscape)的 Navigator 准备的版本,以及为微软(Microsoft)的 Internet Explorer 准备的版本。当 W3C 创立网络标准后,为了不破坏当时既有的网站,浏览器不能直接弃用这些标准。因此,浏览器采用了两种模式,用以把能符合新规范的网站和老旧网站区分开。

阅读全文

gitbook

sudo npm install gitbook -g sudo npm install -g gitbook-cli

阅读全文

Surge

https://manual.nssurge.com/book/understanding-surge/cn/ 核心能力有四项:

阅读全文

webSocket保持长连接

解说:今天用nginx反代通讯项目,发现平均1分钟左右,就会出现webSocket连接中断,然后查看了一下,是nginx出现的问题。

阅读全文

stun nat类型及打洞原理

nat 类型分4种

阅读全文

路由器抓包

路由抓包能干什么。

阅读全文

rc

α、β、λ 常用来表示软件测试过程中的三个阶段。

阅读全文

oauth2

Oauth2:         是一种安全的授权框架,提供了一套详细的授权机制。用户或应用可以通过公开的或私有的设置,授权第三方应用访问特定资源。它详细描述了系统中不同角色、用户、服务前端应用(比如API),以及客户端(比如网站或移动App)之间怎么实现相互认证。

阅读全文

hsts

使用“chrome://net-internals/#hsts”中delete domain无效。 原本想升级成https协议,后因某些原因打算继续使用http协议,然后发现在搜索框中输入 http://网站 后,会直接变成https:// 只有这个网站会有这个情况,目前没找到解决方法,重装Chrome估计有效。

阅读全文

WebDAV

WebDAV是指允许您在服务器上读取和编辑文件的机制,可以在Web浏览器上完成。 WebDAV(Web Dub)是一种技术和功能,可以使用Web服务器进行文件共享和编辑,目前可用于许多租赁服务器计划,还有用户自己设置VPS等方法。

阅读全文

OpenIM

pc端下载:

阅读全文

Chrome开发者工具调试web socket应用

使用Chrome开发者工具,web socket应用的调试显得异常方便。

阅读全文

webrtc openmeeting2 ion

https://github.com/MsloveDl/bbb4go https://github.com/pion/ion https://pionion.github.io/docs/frontend/Intro/

阅读全文

video审核

https://github.com/tencentyun/qcloud-documents/blob/master/product/%E8%A7%86%E9%A2%91%E6%9C%8D%E5%8A%A1/%E7%82%B9%E6%92%AD/%E5%BC%80%E5%8F%91%E8%80%85%E6%8C%87%E5%8D%97/%E8%A7%86%E9%A2%91%E5%A4%84%E7%90%86/%E8%A7%86%E9%A2%91%20AI/%E8%A7%86%E9%A2%91%E5%86%85%E5%AE%B9%E5%AE%A1%E6%A0%B8.md https://github.com/tencentyun/qcloud-documents/blob/master/product/%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B8%8EAI/%E4%B8%87%E8%B1%A1%E4%BC%98%E5%9B%BE2.0/%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97/%E6%95%8F%E6%84%9F%E5%86%85%E5%AE%B9%E5%AE%A1%E6%A0%B8.md

阅读全文

文本审核

https://github.com/sy-records/wp-baidu-textcensor

阅读全文

图片防盗链原理及实现

防盗链原理:

阅读全文

jmeter

Jmeter由Apache公司开源的一个纯java压力测试工具,其应用范围非常广泛,一般我们用于高并发,分布式限流等数据量大的情况下,对接口进行压力测试;

阅读全文

flutter

https://flutterchina.club/ React Native、Weex等一直存在一个问题,就是性能跟原生App存在很大的差异。这跟它们的原理有很大的关系,下面从原生App,RN、Weex,Flutter的简单原理说一下它们的不同。

阅读全文

apipost

https://www.apipost.cn/?baidu/mock/ad

阅读全文

5WHY分析法

所谓5why分析法,又称“5问法”,也就是对一个问题点连续以5个“为什么”来自问,以追究其根本原因。

阅读全文

webrtc-解决方案

https://github.com/lynckia/licode https://github.com/versatica/mediasoup https://github.com/owtf/owtf

阅读全文

coturn

https://github.com/coturn/coturn

阅读全文

第三只眼:网络监控软件技术驱动原理

https://www.dszysoft.com/product_video.htm

阅读全文

jekyll 升级

gem eventmachine fatal error: ‘openssl/ssl.h’ file not found

阅读全文

outsystems低代码

https://www.outsystems.com/downloads/

阅读全文

http 302 303 307

RFC1945(http://tools.ietf.org/html/rfc1945#page-34),也就是HTTP1.0在介绍302时说,如果客户端发出POST请求后,收到服务端的302状态码,那么不能自动的向新的URI发送重复请求,必须跟用户确认是否该重发,因为第二次POST时,环境可能已经发生变化(嗯,POST方法不是幂等的),POST操作会不符合用户预期。但是,很多浏览器(user agent我描述为浏览器以方便介绍)在这种情况下都会把POST请求变为GET请求。 RFC2616(http://tools.ietf.org/html/rfc2616#section-10.3.3),也就是HTTP1.1在介绍302时说,如果客户端发出非GET、HEAD请求后,收到服务端的302状态码,那么就不能自动的向新URI发送重复请求,除非得到用户的确认。(又是-,-)但是,很多浏览器都把302当作303处理了(注意,303是HTTP1.1才加进来的,其实从HTTP1.0进化到HTTP1.1,浏览器什么都没动),它们获取到HTTP响应报文头部的Location字段信息,并发起一个GET请求。

状态码——303和307
阅读全文

mac lsof

lsof -i tcp: ps -M https://www.bbsmax.com/A/xl56GKW0dr/ htop 来源于 top,top 是 Unix/linux 下功能强大的性能检测工具之一,用于实时检测并统计进程的属性和状态,基于 ncurses 库,可上显示文字界面。但是 top 已经非常陈旧,不支持鼠标点击操作,不支持查看进程的各个子线程的信息(对于我来说,这个非常重要,有助于分析代码的效率并优化),不支持 color 显示,易用性较差。htop 是在终端下观察系统资源分布的一个小工具, 功能与 top 类似, 但 top 是全一色的,htop 是彩色的,效果比较好。

阅读全文

sourcegraph

https://sourcegraph.com/search https://github.com/sourcegraph/sourcegraph 开启大小写敏感 开启正则表达式 启用结构化搜索 查看Sourcegraph文档及简介 启用Sourcegraph扩展(需要登录) 在选定的行上显示Git blame行注释 开启长行模式 下载当前查看的文件 永久链接(具有完整的git提交SHA) 切换回github网页

阅读全文

五类网线6类网线

五类线的速度最高能达到100Mb/s,频率能达到100Mhz,所以说五类线可以支持百兆以下的网超五类线的速度最高能达到1Gb/s(1000Mb/s),频率也是100Mhz,超五类线可以支持千兆以下的网六类线的速度最高能达到10Gb/s,频率是250Mhz,六类线可以支持万兆网,主要用于万兆局域网等超六类线的速度最高能达到10Gb/s,频率是500Mhz,超六类线也可以支持万兆网 https://www.zhihu.com/question/20305170

阅读全文

UUID

由于Base64编码使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符。所以才有Base64名字的由来。Base64相当于使用64进制来表示数据,相同长度位数的情况下要比16进制表示更多的内容

阅读全文

文件分段上传

https://blog.csdn.net/qq_15964039/article/details/105578965

阅读全文

submodules

git 添加子模块 fatal: You are on a branch yet to be born

阅读全文

sls cli sls sdk

https://aliyun-log-cli.readthedocs.io/en/latest/README_CN.html?spm=5176.2020520112.0.0.369734c0A8TKe4#%E5%AE%89%E8%A3%85

阅读全文

图片直接展示还是直接被下载

为什么有的图片链接在浏览器中可以直接打开,有的却显示下载,这两种模式有什么区别?

阅读全文

console

chrome

阅读全文

修改请求参数http网络请求方法

POST 用于向表单提交数据,传送的数据放在请求体中。 在POST请求中,请求参数放在请求体中,服务器会根据POST请求体中的参数创建一个页面,然后返回给客户端。POST不具有幂等性。

阅读全文

apn

APN指一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络。 APN在GPRS骨干网中用来标识要使用的外部PDN(Packet data network,分组数据网,即常说的Internet),在GPRS网络中代表外部数据网络的总称。APN由以下两部分组成: APN网络标识:是用户通过GGSN/PGW(Gateway GPRS Support Node,GPRS网关支持节点/PDN Gateway,分组数据网网关)可连接到外部网络的标识,该标识由网络运营者分配给ISP(Internet Service Provider,因特网业务提供者)或公司,与其固定Internet域名一致,是APN的必选组成部分。例如 , 定义移动用户通过该接入某公司的企业网,则APN的网络标识可以规划为“www.ABC123.com”。 APN运营者标识:用于标识GGSN/PGW所归属的网络,是APN的可选组成部分。其形式为“MNCxxxx.MCCyyyy.gprs”(3G网络中),或者“MNCxxxx.MCCyyyy.3gppnetwork.org(4G网络中)。 APN实际上就是对一个外部PDN的标识,这些PDN包括企业内部网、Internet、WAP网站、行业内部网等专用网络。网络侧如何知道手机到底做了激活以后要访问哪个网络呢(因为每个网络分配的IP可能都是不一样的,有的是私网,有的是公网IP),这就要靠APN来区分了,当然各个运营商可能名字不一样。

阅读全文

国内公共DNS

腾讯 DNS:119.29.29.29、182.254.116.116

阅读全文

git clone 提速几十倍的小技巧

git clone https://github.com/kubernetes/kubernetes –depth=1

阅读全文

浏览器fetch api

由于Chrome(和大多数其他浏览器)支持Fetch API,因此现在很容易从devtools控制台发出HTTP请求。

阅读全文

code-server

https://github.com/cdr/code-server

阅读全文

jaguar walle

https://github.com/meolu/walle-web https://gitlab.com/sdnlab/jaguar https://deploybot.com/ https://www.sdnlab.com/21220.html https://github.com/nvwa-io/nvwa-io https://github.com/chgl16/SDN-Mininet-Floodlight

阅读全文

geetest

https://www.geetest.com/contact/#report

阅读全文

Gitlab

对于公司的私有Gitlab仓库,没有对https支持,在使用最新版本的go get命令时,需要使用-insecure参数来支持http,但如果导入的包里边依赖了需要https的仓库,就不好使了

阅读全文

app调用浏览器打开网页的方法

https://www.oschina.net/question/2005457_2206638 在APP调用浏览器有两种方法: 1.使用openApp 2.使用openWin

阅读全文

系统集成商

https://www.zhihu.com/question/25285308

阅读全文

TP-Link路由器怎么reset

1、TP-Link路由器在电源插口的旁边有一个oss/reset按键,需要恢复出厂设置的时候,长按oss/reset按键,直到路由器上所有的指示灯熄灭,松开oss/reset按键,这时就已经把TP-Link路由器恢复到了出厂设置

阅读全文

monorepo

Monorepo 是管理项目代码的一个方式,指在一个项目仓库 (repo) 中管理多个模块/包 (package),不同于常见的每个模块建一个 repo。

阅读全文

jmeter

http://jmeter.apache.org/download_jmeter.cgi

阅读全文

github copilot

https://zhuanlan.zhihu.com/p/385234436

阅读全文

codeql

QL是一种查询语言,支持对C++,C#,Java,JavaScript,Python,go等多种语言进行分析,可用于分析代码,查找代码中控制流等信息。

阅读全文

c10m

Errata Security的CEO Robert Graham,以及他在Shmoocon 2013大会上的“无稽之谈”—— C10M Defending The Internet At Scale。

阅读全文

408

408 Request Timeout 响应状态码 408 Request Timeout 表示服务器想要将没有在使用的连接关闭。一些服务器会在空闲连接上发送此信息,即便是在客户端没有发送任何请求的情况下。

阅读全文

jekyll

/jekyll-3.6.3/lib/jekyll/tags/include.rb:193: warning: Using the last argument as keyword parameters is deprecated

阅读全文

github不再支持密码方式登录需要用token

2021年8月13日起,github不再支持密码方式push,需要把密码换成token的方式,我们推送的时候报错如下:

git push
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: 无法访问 'https://github.com/xiazemin/MyBlogSrc/':The requested URL returned error: 403

如何解决呢,参考官方的wiki https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token 先到个人设置里设置token,按照上面这个wiki一步步操作就行了,很详细

阅读全文

路由器,集线器,交换机,网桥,光猫

https://github.com/xiaobaiTech/golangFamily https://mp.weixin.qq.com/s/Zdc95_hjjxqxhuvQspUDmA

集线器,英文里也叫hub。 它是汇聚网线的中心,因此就叫集线器。

阅读全文

git 远端意外挂断了

fatal: 远端意外挂断了 git config http.postBuffer 100000000 将数据POST到远程系统时,智能HTTP传输使用的缓冲区的最大大小(以字节为单位).对于大于此缓冲区大小的请求,将使用HTTP/1.1和Transfer-Encoding:chunked来避免在本地创建大型打包文件.默认值为1 MiB,足以应付大多数请求. https://www.it1352.com/2100612.html

阅读全文

vie 架构

https://www.zhihu.com/question/19869164

阅读全文

poc 测试

POC测试,即Proof of Concept,是业界流行的针对客户具体应用的验证性测试,根据用户对采用系统提出的性能要求和扩展需求的指标, 在选用服务器上进行真实数据的运行,对承载用户数据量和运行时间进行实际测算,并根据用户未来业务扩展的需求加大数据量以验证系统和平台的承载能力和性能变化。

阅读全文

木兰社区

https://mulanos.oschina.net/

阅读全文

国密SM1 SM2 SM3 SM4

国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。

阅读全文

map swagger

swagger2 不支持 map 就是key value 都不能变换 https://stackoverflow.com/questions/41867499/swagger-editor-dictionary-parameter-definition?noredirect=1&lq=1

阅读全文

HttpOnly

只有服务器操作Cookie 才能保证一些必要的安全。但有时候,可能需要前端来增删改查 Cookie, 这个时候咱们的主角出现了——HttpOnly 如果某一个Cookie 选项被设置成 HttpOnly = true 的话,那此Cookie 只能通过服务器端修改,Js 是操作不了的,对于 document.cookie 来说是透明的。

阅读全文

POST PUT PATCH的区别

在HTTP中,PUT被定义为idempotent(幂等的)方法,POST则不是,这是一个很重要的区别

阅读全文

vscode 批量合并请求

1,方法一 go to vs code and press Ctrl+shift+p (command palette) or go to view and open command palette manually and type “merge” in your command palette, now you can see the Accept all current changes.

2,方法二 在左侧菜单栏点击右键,合并所有请求 https://stackoverflow.com/questions/52288120/how-can-i-accept-all-current-changes-in-vscode-at-once

阅读全文

uIrecorder

UIRecorder 是一端录制,多端使用的便捷 UI 自动化测试工具 https://uirecorder.com/ Support all user operation: key event, mouse event, alert, file upload, drag, svg, shadow dom Support mobile native APP(Android, iOS) recorde, powered by macaca: https://macacajs.com/ No interference when recording: the same as self test Record test file saved in local Support kinds of expect: val,text,displayed,enabled,selected,attr,css,url,title,cookie,localStorage,sessionStorage Support image diff Support powerful var string Support common test case: one case call another Support parallel test Support i18n: en, zh-cn, zh-tw Support screenshots after each step Support HTML report & JUnit report Support multi systems: Windows, Mac, Linux Test file base on NodeJs: jWebDriver

阅读全文

selenium

https://www.selenium.dev/ Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。

阅读全文

UiAutomator

1.UiAutomator——基于UIAutomation的用户界面自动化测试框架,可以跨应用工作,谷歌亲生的。 2.Robotium——基于Instrumentation开发出来的一套测试框架 3.Appium——跨平台 https://www.cnblogs.com/liuyuxuan/p/5614923.html https://blog.csdn.net/u010570077/article/details/79532496

阅读全文

多浏览器兼容测试平台F2etest

https://blog.csdn.net/silsin/article/details/82798242

阅读全文

websocket 抓包

Chrome控制台 (1)F12进入控制台,点击Network,选中ws栏,注意选中Filter。 (2)刷新页面会得到一个ws链接。 (3)点击链接可以查看链接详情

阅读全文

octotree

https://www.runoob.com/w3cnote/octotree-github-repo.html octotree 是一款chrome插件,用于将 Github 项目代码以树形格式展示,而且在展示的列表中,我们可以下载指定的文件,而不需要下载整个项目。

阅读全文

防止暴力破解

1、网站管理入口禁止使用弱口令帐号,建议使用复杂口令,比如:大小写字母与数字的组合,口令长度不小于8位等; 2、验证码在服务端校验; 3、建议采用防高频策略,针对同一IP短时间内的高频请求进行限时锁定; 4、第三方WEB防火墙来加固整个网站系统。 5、诱导/模糊提示

阅读全文

Chrome

Chrome为什么打开一个页面,会有4个进程?

阅读全文

Spectacle swagger gitlab

https://github.com/sourcey/spectacle

阅读全文

git fast-forward

fast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。 因为在这个过程中没有创建commit

阅读全文

gitlab 加入测试报告及覆盖率

首先在项目中安装cover pip install coverage 用这个命令生成整个测试报告 coverage html

阅读全文

cherry pick

这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。

阅读全文

Parallels

https://www.parallels.cn/pd/general/?utm_source=baidu&utm_medium=ppc

阅读全文

驼峰翻译助手

https://marketplace.visualstudio.com/items?itemName=svenzhao.var-translation

阅读全文

CORS 简单请求

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS

阅读全文

gitee GitHub Actions

https://www.liaoxuefeng.com/wiki/896043488029600/1163625339727712 https://gitee.com/

阅读全文

github antion 同步代码到gitee

https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh

阅读全文

roam edit roam redearch

https://roamedit.com/next/home.php?plugin=outline/roam&to=daily/today

阅读全文

文本相似度匹配算法

用余弦相似度算法计算文本相似度 句子A:这只皮靴号码大了。那只号码合适。 句子B:这只皮靴号码不小,那只更合适。 1、分词: 使用结巴分词对上面两个句子分词后,分别得到两个列表: listA=[‘这‘, ‘只‘, ‘皮靴‘, ‘号码‘, ‘大‘, ‘了‘, ‘那‘, ‘只‘, ‘号码‘, ‘合适‘] listB=[‘这‘, ‘只‘, ‘皮靴‘, ‘号码‘, ‘不小‘, ‘那‘, ‘只‘, ‘更合‘, ‘合适‘]

2、列出所有词,将listA和listB放在一个set中,得到: set={‘不小’, ‘了’, ‘合适’, ‘那’, ‘只’, ‘皮靴’, ‘更合’, ‘号码’, ‘这’, ‘大’} 将上述set转换为dict,key为set中的词,value为set中词出现的位置,即‘这’:1这样的形式。 dict1={‘不小’: 0, ‘了’: 1, ‘合适’: 2, ‘那’: 3, ‘只’: 4, ‘皮靴’: 5, ‘更合’: 6, ‘号码’: 7, ‘这’: 8, ‘大’: 9},可以看出“不小”这个词在set中排第1,下标为0。

3、将listA和listB进行编码,将每个字转换为出现在set中的位置,转换后为: listAcode=[8, 4, 5, 7, 9, 1, 3, 4, 7, 2] listBcode=[8, 4, 5, 7, 0, 3, 4, 6, 2] 我们来分析listAcode,结合dict1,可以看到8对应的字是“这”,4对应的字是“只”,9对应的字是“大”,就是句子A和句子B转换为用数字来表示。

4、对listAcode和listBcode进行oneHot编码,就是计算每个分词出现的次数。oneHot编号后得到的结果如下: listAcodeOneHot = [0, 1, 1, 1, 2, 1, 0, 2, 1, 1] listBcodeOneHot = [1, 0, 1, 1, 2, 1, 1, 1, 1, 0]

阅读全文

gitlab ci

.gitlab-ci.yml 在git项目的根目录下的一个文件,记录了一系列的阶段和执行规则。GitLab-CI在push后会解析它,根据里面的内容调用runner来运行。

阅读全文

bigwatermelon 合成大西瓜 合成华中大

https://github.com/bullhe4d/bigwatermelon https://mp.weixin.qq.com/s/P6DCADhNJuKxr2tk7AN_9g

阅读全文

Surge for Mac+Charles同时分析网络请求

https://github.com/wujunchuan/wujunchuan.github.io/issues/1 打开surge 打开Charles系统代理 设置Charles的外部代理为surge的端口 设置SwitchyOmega走系统代理

阅读全文

proxy

Charles与Shadowsocks共存 在mac下开发常用charles这个抓包工具,同时希望开着ss翻墙。如果都使用默认配置,两者都挂系统代理,会产生冲突 两者同时打开时,proxy pac用的是ss的,系统优先使用pac代理,这时所有流量都走ss了,不通过charles。   解决方法:   让请求先通过charles,charles再转发给ss。   指定http(s)代理端口为charles,charles设置外部代理为ss。最终访问网络的是ss,charles作为前置代理。      打开charles的external proxy settings,配置http(s)的外部代理地址为ss:      http://www.51testing.com/html/19/n-3727219.html      https://blog.csdn.net/weixin_43307577/article/details/88998565      https://blog.csdn.net/an168bang521/article/details/101207874      https://kigkrazy.github.io/charles/2019/04/22/fiddler-catch-with-ss/      http://www.cocoachina.com/articles/27448

阅读全文

mac M1 安装 brew

安装Rosetta 2

阅读全文

tcp http WebSocket长连接区别

一、HTTP的长连接和短连接区别 首先需要消除一个误解:HTTP协议是基于请求/响应模式的,因此客户端请求后只要服务端给了响应,本次HTTP请求就结束了,没有长连接这一说。那么自然也就没有短连接这一说了。

阅读全文

rpc

RPC调用和HTTP调用

阅读全文

http2

1,二进制传输 http2采用二级制传输,相对于http1的文本传输安全性要高

阅读全文

protobuf 为什么那么快

在分布式应用或者微服务架构中,各个服务之间通常使用json或者xml结构数据进行通信,通常情况下,是没什么问题的,但是在高性能和大数据通信的系统当中,如果有办法可以压缩数据量,提高传输效率,显然会给用户带来更快更流畅的体验。

阅读全文

c10k

http://www.kegel.com/c10k.html

阅读全文

axure 产品画图工具

Axure只是一种快速原型制作工具,是产品经理的基础技能。

阅读全文

udp 超出长度丢弃问题

UDP报文长度限制,在IPv4下是65507字节(65535-8字节UDP header-20字节 IPheader) 长度限制内的包都可以发 fragmentation发生在IP层,一个长UDP报文,会被分为若干个fragment,封成IP包发送接收端收到所有的fragment之后,会在IP层组装成一个完整的UDP datagram交给你的UDP recv函数 只要有一个fragment丢了,整个UDP报文就丢了 所以作为没有ACK的UDP协议,一般我们不希望出现分包发送的情形,以避免累积丢包率,导致实际报文的丢包率很高 根据IEEE的要求,IPv4的网络,至少要保证MTU不低于576,于是扣除一些IP、UDP header的长度,548长度的UDP包可以认为是不会发生fragmentation的 但是人们喜欢冗余,喜欢留余地,所以很多人实践中,把这个限制写成了512 https://stackoverflow.com/questions/20314308/understanding-how-to-send-larger-data-chunks-over-udp-reliably/20317315#20317315

阅读全文

通过ip获取用户地理信息原理

IP地址有统一综合bai规划管理的du 比如某个省 划分100个IP段归这个范围使zhi用 省级部门接下来把20个一组 划分给某市dao使用 市区呢又把5个段分给某运营商去使用 其余的还有计划的投放企业应用,民用,公共事业范围等等… 所以每个IP都有其固定的 可查的 使用范围 运营商处可以查询任何时间 任何场所 使用的某IP详细日志记录档案

阅读全文

稳定性

二、单服务稳定性

阅读全文

SameSite cookie

chrome 新策略导致跨域后会重定向 浏览器访问:chrome://flags/#same-site-by-default-cookies 设置由默认Default改为disabled 默认情况下,谷歌将开始为从Chrome 80开始的用户实施新的cookie策略,该策略计划于2020年初发布。 本文解释了您需要了解的有关新SameSite cookie策略的所有信息,如 Adobe Target 何支持这些策略,以及如何使用 Target 来符合Google Chrome的新SameSite cookie策略。 从Chrome 80开始,Web开发人员必须明确指定哪些cookies可以跨网站工作。 这是谷歌计划为改善网络隐私和安全性而发布的多项声明中的第一个。 鉴于Facebook在隐私和安全方面一直处于热门地位,苹果等其他主要企业也迅速利用这一机会创造新的隐私和安全捍卫者身份。 苹果率先宣布今年年初通过ITP 2.1和最近ITP 2.2对其cookie政策进行了修改。在ITP 2.1中,Apple完全阻止第三方Cookie,并将在浏览器上创建的Cookie保存仅七天。 在ITP 2.2中,cookies只保存一天。 谷歌的公告远没有苹果那么咄咄逼人,但这是朝着同一个最终目标迈出的第一步。 有关Apple策略的详细信息,请参 阅Apple Intelligent Tracking Prevention(ITP)2.x 。 什么是cookies,它们是如何使用的? 在深入了解Google对其cookies策略的更改之前,我们先了解Cookie是什么以及它们的使用方式。 简而言之,Cookie是存储在Web浏览器中的小文本文件,用于记住用户属性。 Cookies很重要,因为当用户浏览Web时,它们会增强用户的体验。 例如,如果您在电子商务网站上购物并向购物车中添加内容,但不登录或在该访问中购买,则Cookie会记住您的物品并将它们保存在购物车中,供您下次访问。 或者,想象一下,如果您每次访问您喜爱的社交媒体网站时都被迫重新输入用户名和密码。 Cookies也解决了这个问题,因为它们存储有助于网站识别您身份的信息。 这些类型的Cookie称为第一方Cookie,因为它们是由您访问的网站创建和使用的。 第三方Cookie也存在。 为了更好地理解这些问题,我们来考虑以下示例: 假设某家名为“朋友”的社交媒体公司提供了一个“共享”按钮,其他网站通过该按钮允许“朋友”用户在“朋友”源上共享该网站的内容。 现在,用户在使用“共享”按钮的新闻网站上阅读一篇新闻文章,并单击它以自动发布到其“朋友”帐户。 为了实现此目的,加载新闻文章后,浏览器会 platform.friends.com 从中获取“朋友共享”按钮。 在此过程中,浏览器将包含用户登录凭据的Friends cookie附加到好友服务器的请求中。 这样,好友就可以代表用户在其源中发布新闻文章,而无需用户登录。 这一切都可以通过使用第三方Cookie实现。 在这种情况下,第三方Cookie将保存在浏览器上 platform.friends.com ,以便 platform.friends.com 代表用户在“朋友”应用程序中发布。 如果您想象一下,如何在没有第三方Cookie的情况下实现此使用案例,用户将必须执行大量手动步骤。 首先,用户必须复制指向新闻文章的链接。 其次,用户必须单独登录“朋友”应用程序。 然后,用户单击“创建帖子”按钮。 然后,用户将复制并粘贴文本字段中的链接,最后单击“发布”。 正如您所看到的,第三方Cookie可以极大地减少手动步骤,从而帮助用户体验。 更一般地说,第三方Cookie使得数据存储在用户浏览器上成为可能,而无需该用户显式访问网站。 安全问题 虽然Cookies增强了用户体验和强大的广告功能,但它们也可能引入安全漏洞,如跨站点请求伪造(CSRF)攻击。 例如,如果用户登录银行站点以支付信用卡账单并离开该站点而不注销,然后浏览到同一会话中的恶意站点,则可能发生CSRF攻击。 恶意站点可能包含向银行站点发出请求的代码,该请求在页面加载时执行。 由于用户仍然通过银行站点身份验证,因此会话Cookie可用于启动CSRF攻击,以从用户的银行帐户发起资金转移事件。 这是因为,每次访问站点时,HTTP请求中都会附加所有Cookie。 由于这些安全问题,谷歌现在正在尝试缓解这些问题。 Target如何使用cookies? 尽管如此,让我们看看如何使 Target 用cookies。 为了首先使 Target 用,您需要在站点上安 Target 装JavaScript库。 这使您能够在访问您网站的用户的浏览器上放置第一方Cookie。 当用户与您的网站交互时,您可以通过JavaScript库将用户的行为和兴趣数 Target 据传递给您。 JavaScript Target 库使用第一方Cookie提取有关用户的标识信息以映射到用户的行为和兴趣数据。 然后,这些数据将被用 Target 于推动您的个性化活动。 Target还(有时)使用第三方Cookie。 如果您拥有多个位于不同域上的网站并且希望跟踪这些网站中的用户旅程,则可以通过利用跨域跟踪来使用第三方Cookie。 通过在 Target JavaScript库中启用跨域跟踪,您的帐户将开始使用第三方Cookie。 当用户从一个域跳到另一个域时,浏览器与的后端服务器通信 Target,在此过程中,会创建第三方Cookie并将其放置在用户的浏览器上。 通过用户浏览器上的第三方Cookie, Target 可以为单个用户跨不同域提供一致的体验。 Google的新Cookie菜谱 为了避免在跨站点发送cookies以保护用户时提供保护,Google计划添加对称为SameSite的IETF标准的支持,该标准要求Web开发人员使用Set-Cookie头中的SameSite属性组件管理cookies。 可以将三个不同的值传递到 SameSite 属性:Strict、Lax 或 None。 值 描述 Strict 只有在访问最初设置的域时,才可访问具有此设置的 Cookie。换言之,Strict 会完全阻止跨站点使用 Cookie。这一选择最适合需要高安全性的应用程序,如银行。 Lax Cookies with this setting are sent only on same-site requests or top-level navigation with non-idempotent HTTP requests, like HTTP GET . 因此,如果第三方可以使用Cookie,但增加了安全优势,保护用户免受CSRF攻击的侵害,则使用此选项。 None 使用此设置的Cookie将像Cookies现在的工作方式一样工作。 请牢记以上几点,Chrome 80为用户引入了两个独立设置:“SameSite by default cookies”和“Cookies without SameSite必须是安全的。” 这些设置将在Chrome 80中默认启用。

阅读全文

graphql

什么是 GraphQL GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。

阅读全文

AKF拆分原则

《可扩展艺术》一书提出了一个系统可扩展模型–AKF可扩展立方(Scalability Cube)。

阅读全文

git apply 补丁

一、 patch 和diff 的区别 Git 提供了两种补丁方案,一是用git diff生成的UNIX标准补丁.diff文件,二是git format-patch生成的Git专用.patch 文件。 .diff文件只是记录文件改变的内容,不带有commit记录信息,多个commit可以合并成一个diff文件。 .patch文件带有记录文件改变的内容,也带有commit记录信息,每个commit对应一个patch文件。

阅读全文

graphql

https://zhuanlan.zhihu.com/p/88009926 https://blog.5udou.cn/#/blog/detail/GraphQLXue-Xi-Zhi-Ji-Chu-Pian-99 http://spec.graphql.org/June2018/ http://blog.thankbabe.com/2018/04/20/graphql/ https://graphql.org/graphql-js/ https://github.com/graphql/graphql-js https://graphql.cn/code/#javascript GraphQL 请求体: 使用GraphQL语言定义的一个或多个操作或者数据片段,类型是字符串。 操作: 可以被GraphQL执行引擎理解的一次查询、修改或订阅。

阅读全文

开发常用工具tool

tool

JSON在线编辑器 - 站长工具
JSON格式化高亮工具 - 在线JSON校验格式化工具(K JSON)
JSON和GET请求字符串互转 - 站长工具
Postman | Apps
Base64编码/解码器 在线解码
UrlEncode编码/UrlDecode解码 - 站长工具
在线工具 - 程序员的工具箱
在线文本比较工具 - 众人搜索网
DiffNow - Compare files online. Powered by ExamDiff Pro.
URL解码 - 在线URL解码器
代码对比/归并
UrlEncode编码/UrlDecode解码 - 站长工具
JSON Diff - The semantic JSON compare tool
在线工具 —— 开源中国社区
Dns检测|Dns查询 - 站长工具
短链在线生成 - 站长工具
百度短网址
开发工具 - 精品MAC应用分享
inMap — 基于 Canvas 的大数据可视化库 - canvas - ItBoth
TalkingData/inmap: Map visualization
在线地图经度纬度查询 — 经纬度查询地名|地名查询经纬度 —GPSspg
在线加密解密
Cscope Home Page
SSD VPS Servers, Cloud Servers and Cloud Hosting by Vultr - Vultr.com
php5.6在线执行,php代码在线测试,在线调试工具网站
任意发件人发送邮件、伪造发件人发送电子邮件、伪造电子邮件地址发送邮件--查错网
Tabs 标签页 - Ant Design
xiazemin/editor.md: The open source embeddable online markdown editor (component).
goroutine和coroutine的区别
JSON压缩转义工具,JSON转义,JSON压缩一行
经纬度距离计算小工具
在线多项式曲线拟合 在线函数曲线拟合 - aTool在线工具
Golang库集合 - 简书
_index.ipynb - Colaboratory
Github Actions:所有软件开发者必须掌握的技能 - Front-End Study - SegmentFault 思否
Engineering Uber Beacon: Matching Riders and Drivers in 24-bit RGB Colors | Uber Engineering Blog
Introduction · GitBook
《分布式对象存储 原理 架构及Go语言实现》(胡世杰)【简介_书评_在线阅读】 - 当当图书
etcd技术内幕【下载 在线阅读 书评】
golang 调用 php7详解及实例_php技巧_脚本之家
互联网技术窝
js反混淆|js反压缩|反编译js
net/http/pprof (net/http) - Go 中文开发手册 - 开发者手册 - 云+社区 - 腾讯云
牛儿吃草仗剑天涯
Nginx 启动初始化过程 · 理解 Nginx 源码 · 看云
访问范围约束 · Concurrency in Go 中文笔记 · 看云
在线JSON校验格式化工具(Be JSON)
进制转换 - 在线工具
debug/dwarf(调试/dwarf) - [ Go 中文开发手册 ] - 在线原生手册 - php中文网
lukasz-madon/awesome-remote-job: A curated list of awesome remote jobs and resources. Inspired by https://github.com/vinta/awesome-python
Awesome Go
Read A Go Developer's Notebook | Leanpub
Introduction · Consul入门指南
知识管理-程序员的自我修养
微信生态玩法简介-v3
界面 | 微信开放文档
架构师之路_w3cschool

阅读全文

graphql

https://aws.amazon.com/cn/blogs/china/aws-joins-the-graphql-foundation/ https://mp.weixin.qq.com/s/9P_16cNEF0puHg75fVL1xA https://juejin.im/tag/GraphQL https://www.jianshu.com/search?q=GraphQL&page=1&type=note https://github.com/search?q=graphql

阅读全文

git查看某个文件的提交历史

git log –pretty=oneline 文件名 文件名是文件路径+文件名,输入完整 输入正确后,打印出版本号的列表 git show <文件名> 版本号:是上个命令的输出,黄色字体部分就是git版本号 文件名:格式如上

阅读全文

pixijs

PixiJS是一个2D渲染引擎,能自动侦测并使用WebGL或Canvas。

阅读全文

cgi python nginx

nginx不支持cgi,也就是nginx 不能直接执行外部脚本。但是nginx支持fastcgi。所以为了在nginx运行fastcgi,我们采用flup,flup是fastcgi的一种实现。这里是官网https://www.saddi.com/software/flup/ 我用最简单的模式就是 nginx+flup。

  • 第一步安装flup。当前目录转为\python安装目录\Lib\site-packages 但后用easy_install安装flup的egg文件。
  • 第二步就是配置nginx.conf文件,我用最简单的配置:
阅读全文

dsl 美团海盗 中间件

海盗就是一个用来对支持泛化调用(上述所说)的服务进行编排,然后获取预期结果的一个中间件。使用该中间件调用方可以根据场景来对目标服务进行编排,按需调用。

阅读全文

Conductor

Netflix Conductor框架是典型的服务编排框架,通过Conductor还可以实现工作流和分布式调度,性能非常卓越。

阅读全文

Choreography choreography

SOA中的两个概念:编制(orchestration)和编排(choreography)

阅读全文

BPM与ESB

BPM:业务流程管理 –监控处理流程的轨迹以及处理过程

阅读全文

YAML 语言教程

它的基本语法规则如下。

阅读全文

dhcp

http://www.yunweipai.com/34069.html 主机获取网络配置可以通过两种方式:

阅读全文

IntelliJ IDEA插件

一般来说,开发人员开发的IntelliJ平台插件主要分为如下几类:

阅读全文

PHPStorm插件 插件编写

首先intellij是一个在代码不完整的情况下能拿到一颗不完整的AST的代码分析器,然后因为本身代码解析和编辑器高度耦合,导致代码/AST的同步更新非常低成本。这是大前提。 https://www.bilibili.com/video/av50066814

阅读全文

FreeSwitch

Voice over Internet Protocol,缩写为VoIP)是一种语音通话技术,经由网际协议(IP)来达成语音通话与多媒体会议,也就是经由互联网来进行通信。其他非正式的名称有IP电话(IP telephony)、互联网电话(Internet telephony)、宽带电话(broadband telephony)以及宽带电话服务(broadband phone service)。

阅读全文

一次http请求,谁会先断开TCP连接?什么情况下客户端先断,什么情况下服务端先断?

总结: (不考虑keepalive)

阅读全文

graphQL

https://blog.csdn.net/qq_41882147/article/details/82966783 一种用于 API 的查询语言。 ask exactly what you want.

阅读全文

nginx lua

Nginx可以说是标配组件,但是主要场景还是负载均衡、反向代理、代理缓存、限流等场景;而把Nginx作为一个Web容器使用的还不是那么广泛。Nginx的高性能是大家公认的,而Nginx开发主要是以C/C++模块的形式进行,整体学习和开发成本偏高;如果有一种简单的语言来实现Web应用的开发,那么Nginx绝对是把好的瑞士军刀;目前Nginx团队也开始意识到这个问题,开发了nginxScript:可以在Nginx中使用JavaScript进行动态配置一些变量和动态脚本执行;而目前市面上用的非常成熟的扩展是由章亦春将Lua和Nginx粘合的ngx_lua模块,并且将Nginx核心、LuaJIT、ngx_lua模块、许多有用的Lua库和常用的第三方Nginx模块组合在一起成为OpenResty,这样开发人员就可以安装OpenResty,使用Lua编写脚本,然后部署到Nginx Web容器中运行。从而非常轻松就能开发出高性能的Web服务。

阅读全文

lambda

https://aws.amazon.com/cn/blogs/china/easily-build-serverless-applications-using-aws-lambda-and-aws-step-functions/ Serverless(无服务器)应用可以说是当前的行业热点,用户无需预配置或管理服务器,只需要部署功能代码,AWS Lambda会在需要的时候执行代码并自动缩放, 从每天几个请求到每秒数千个请求,轻松地实现FaaS (Function as a Service)。无服务器应用的使用场景非常广阔,从微服务架构,到批处理、流处理、运维自动化和移动计算。

阅读全文

php_json_encode_zval

son解析在php,或者说在任何编程语言中都非常常见。但是,你是否知道,json解析在php中是以扩展形式存在。

阅读全文

cJSON c语言json库

支持c c++ 的库https://github.com/nlohmann/json ansic 的json库 https://github.com/DaveGamble/cJSON 文档翻译 https://github.com/faycheng/cJSON 如何使用cJSON呢? 添加cJSON.c到你的项目中,并且把cJSON.h放置到你的项目头文件的搜索路径中。 例如,你可以使用下面命令编译一个使用cJSON的小例子:(tests目录下有相关文件)

阅读全文

brew install 问题解决

$python -V Python 3.6.0

阅读全文

BOOT_LDFLAGS

brew install gcc 卡住解决方法 brew install gcc 进行到

阅读全文

wechat

https://crm.drip.im/ https://www.wxb.com/ https://www.weixinhost.com/ https://github.com/zhangdaiscott/jeewx-boot https://github.com/geesondog/rhaphp https://github.com/overtrue/wechat https://www.easywechat.com/

阅读全文

php.ini中session的配置

1、设置session存储形式 session.save_handler=files   

阅读全文

books

https://book.douban.com/subject/26938710/ https://book.douban.com/subject/30333919/ https://book.douban.com/subject/34793521/ https://book.douban.com/subject/26772677/ https://book.douban.com/subject/33425123/ https://book.douban.com/subject/27127050/ https://book.douban.com/subject/34466272/ https://book.douban.com/subject/30418855/ https://book.douban.com/subject/30486354/ https://book.douban.com/subject/30186150/ https://book.douban.com/subject/26875239/ https://book.douban.com/subject/10797189/ https://book.douban.com/subject/30468597/ https://book.douban.com/subject/4199741/ https://book.douban.com/subject/27197032/ https://book.douban.com/subject/27044219/ https://book.douban.com/subject/27204133/ https://book.douban.com/subject/34442131/ https://book.douban.com/subject/26265544/ https://book.douban.com/subject/10746113/ https://book.douban.com/subject/27665112/ https://book.douban.com/subject/1139336/ https://book.douban.com/subject/25900403/ https://book.douban.com/subject/26434583/ https://book.douban.com/subject/4279678/ https://book.douban.com/subject/6801697/ https://book.douban.com/subject/25809330/ https://book.douban.com/subject/1139426/ https://book.douban.com/subject/26912767/

阅读全文

postman

https://github.com/postmanlabs/postman-app-support/ Postman介绍 Postman是google开发的一款功能强大的网页调试与发送网页HTTP请求,并能运行测试用例的的Chrome插件。其主要功能包括:

阅读全文

补偿还是幂等来解决一致性问题

一、「补偿」机制的意义? 以电商的购物场景为例:

阅读全文

postman 压力测试

下面是在网上随便抓了一个请求地址来做演示,把请求地址填入地址栏,此请求为GET请求。点击Send发送请求,请求结果将会在下方显示出来。每次的请求历史数据,会被记录下来,但是经常使用的请求,还是保存一下,这么每次用的时候,选择就行了,及其方便。

阅读全文

gem rvm bundle

rvm 是用来管理 ruby 的,ruby 的其中一个“程序”叫 rubygems ,简称 gem,而用来管理项目的 gem 的,叫 bundle ,他俩完全是不同的东西,相同的只是都可以管理gem。

阅读全文

brew

https://github.com/Homebrew/homebrew-php https://github.com/Homebrew/homebrew-core Homebrew是Mac下得套件管理器,类似于Linux系统中的 yum 或者 apt-get ,它能让你的Mac更完美。 安装: ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” 卸载: ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)” // 当你记不清软件的名字的时候,你可以使用search,只需要写去几个字母,他就会帮你联想,并把所有可能的结果输出给你 brew search 查看使用brew安装的东西,安装在哪里 brew –cache /Users/didi/Library/Caches/Homebrew Homebrew 是基于 OS X 的套件管理工具,是一个开源的 Ruby 脚本,专门用于快速下载软件;

阅读全文

phpar

最近在看composer,是下载了一个composer.phar,然后放到/usr/local/bin目录下,就可以全局使用composer了,然而并不懂phar是什么,还以为是个PHP的扩展,要用phpize编译的,看了这篇文章后才懂韩天峰-php中phar包的使用

阅读全文

ssm 业务应用监控

业务监控, 主要侧重对业务状态数据的实时监控, 收集数据后对业务数据进行深入的统计分析, 帮助业务方发现问题, 定位问题根源. 这其中数据分为: 业务自身输出的业务日志(比如: 提单, 推单, 接单等状态数据), 业务异常, 报警事件等.

阅读全文

cqrs 命令和查询责任分离

https://mp.weixin.qq.com/s/mfjtDrdVQYfLuh4pNaHpZw 命令和查询责任分离(CQRS)是指将数据存储的读取和更新操作分开的一种模式。实施 CQRS 据称可以提高性能、可扩展性和安全性。迁移到 CQRS 模式所创造的灵活性,使系统能够随着时间的推移而更好地发展。不过 CQRS 模式有一些众所周知的陷阱,本文介绍了三种实用的场景。

阅读全文

四种常见的POST提交数据方式对应的content-type取值

用curl 查看请求头和响应头 curl,全称CommandLine URL 或 CommandLine Uniform Resource Locator,顾名思义,curl命令是在命令行方式下工作,利用URL的语法进行数据的传输或者文件的传输。

阅读全文

system-design-primer

https://github.com/donnemartin/system-design-primer/blob/master/README-zh-Hans.md

阅读全文

Commit message 和 Change log 编写指南

http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html Git 每次提交代码,都要写 Commit message(提交说明),否则就不允许提交。

阅读全文

SOFA

蚂蚁金服开源了分布式框架 SOFA,楼主写了一个 demo,体验了一下 SOFA 的功能,SOFA 完全兼容 SpringBoot(当然 Dubbo 也是可以兼容的)。

阅读全文

HTTP3

https://mp.weixin.qq.com/s/oFWMqLvj8W-BsAeIGNgg7g 我们在去年Cloudflare 生日那天支持HTTP/3,它是HTTP/2的后继产品。我们的目标一直是帮助大家建立更好的Internet。在标准上进行协作是其中很大的一部分工作,我们很幸运做到了这一点。

阅读全文

为什么DNS使用UDP而不是TCP

DNS在进行区域传输的时候使用TCP,普通的查询使用UDP。为什么查询是使用UDP呢?网络上大部分答案都说UDP性能更好,打开网页速度快。如果是这样的话,为什么HTTP却是使用TCP呢? https://mp.weixin.qq.com/s/BF0EOyN2PtqN9ec0oyYS8g DNS在进行区域传输的时候使用TCP,普通的查询使用UDP。为什么查询是使用UDP呢?网络上大部分答案都说UDP性能更好,打开网页速度快。如果是这样的话,为什么HTTP却是使用TCP呢?

阅读全文

DNS原理和智能DNS及CDN

CDN是什么

阅读全文

WebRTC Gaming as a Service

https://webrtchacks.com/open-source-cloud-gaming-with-webrtc/ https://github.com/giongto35/cloud-game https://blog.sqreen.com/dynamic-instrumentation-go/ https://github.com/mattn/golisp https://github.com/adamluzsi/testcase https://github.com/autom8ter/geodb

阅读全文

severless

https://www.jdon.com/soa/serverless.html 什么是Serverless无服务器架构?   Serverless不代表再也不需要服务器了,而是说:开发者再也不用过多考虑服务器的问题,计算资源作为服务而不是服务器的概念出现。Serverless是一种构建和管理基于微服务架构的完整流程,允许你在服务部署级别而不是服务器部署级别来管理你的应用部署,你甚至可以管理某个具体功能或端口的部署,这就能让开发者快速迭代,更快速地开发软件。

阅读全文

Java各种规则引擎

一. Drools规则引擎 简介: Drools就是为了解决业务代码和业务规则分离的引擎。 Drools 规则是在 Java 应用程序上运行的,其要执行的步骤顺序由代码确定 ,为了实现这一点,Drools 规则引擎将业务规则转换成执行树。 特性: 优点:    1、简化系统架构,优化应用    2、提高系统的可维护性和维护成本    3、方便系统的整合    4、减少编写“硬代码”业务规则的成本和风险 3.原理: 使用方式: (1)Maven 依赖:

阅读全文

工作流与BPM

工作流与BPM其实是两个概念,不过现在已经融合为一了,工作流顾名思义基于人的工作的流程,因为只有人才会工作work,当然机器也会工作,因此BPM(业务流程管理)的概念更进一步了,已经不管是人和机器,都是基于业务流程本身的一种管理,业务流程需要人工完成,那么人工必须完成任务;而业务流程需要机器完成,机器应该会自动完成,这个自动完成不是直接执行SQL操作数据库,而是基于服务之间的调用流程,是服务的组合完成,比如有一个数据库注册服务A和邮件服务B,如果需求要求注册后发送邮箱确认,那么使用流程实现服务A+服务B,而且能够每次用户注册都会执行这个流程。

阅读全文

EDA事件驱动架构

事件代表过去发生的事件,事件既是技术架构概念,也是业务概念。以事件为驱动的编程模型称为事件驱动架构EDA。

阅读全文

Aviator java的表达式引擎化框架

Aviator是一个高性能、轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值。现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢?

阅读全文

线程数与QPS计算

01 最佳线程数计算 1.1 cpu密集型 n+1 当因为页缺失或其它故障而导致某一线程暂停时,额外的线程可以保证cpu的时钟周期不被浪费

阅读全文

X-Content-Type-Options nosniff

如果服务器发送响应头 “X-Content-Type-Options: nosniff”,则 script 和 styleSheet 元素会拒绝包含错误的 MIME 类型的响应。这是一种安全功能,有助于防止基于 MIME 类型混淆的攻击。

阅读全文

brew install 慢的解决方法

brew install 慢的原因 brew install 会先去执行 brew update 而 brew update,会依次更新

阅读全文

MacOS 下使用 PHPStorm 打开隐藏文件夹

PHPStorm 打开项目时,仅支持选择目录,不支持文件拖拽,所以,有些隐藏目录(如/usr…)是无法选择的,相信遇到这个尴尬的问题的,应该不止我一个。(其他支持文件夹拖拽的编辑器并没有这个问题,如Sublime等) 因为以前都是自定义web根目录,所以没遇到这个问题,虽说配置文件改改根目录即可,但属于绕过问题,并没解决。我也尝试过,使用ln命令给要打开的隐藏目录创建一个链接在桌面,但是并没有解决问题,所以,就异想天开的尝试了下面的方法。

阅读全文

COMPOSER_HOME 环境变量

全局执行 global global 命令允许你在 COMPOSER_HOME 目录下执行其它命令,像 install、require 或 update。

阅读全文

JSON Schema

http://json-schema.org/ https://github.com/json-schema-org/json-schema-spec https://github.com/json-schema-org/json-schema-spec https://datatracker.ietf.org/doc/draft-handrews-json-schema/ https://datatracker.ietf.org/doc/draft-handrews-relative-json-pointer/ https://datatracker.ietf.org/doc/draft-handrews-json-schema-validation/ https://datatracker.ietf.org/doc/draft-handrews-json-schema-hyperschema/ 要真正理解 JSON Schema,首先需要知道什么是 JSON。

阅读全文

Iaas Paas Saas

IaaS(Infrastructure as a Service)基础设施即服务 SaaS(Software as a Service)软件即服务 PaaS(Platform as a Service)平台即服务 把Iass(基础设施)、Pass(平台)、Sass(软件)理解成这栋楼的三部分。基础设施在最下端,平台在中间,软件在顶端。别的一些“软”的层可以在这些层上面添加。 https://www.zhihu.com/question/21641778 IaaS:Infrastructure-as-a-Service(基础设施即服务) 第一层叫做IaaS 举例:几年前如果你想在办公室或者公司的网站上运行一些企业应用,你需要去买服务器,或者别的高昂的硬件来控制本地应用,才能让你的业务正常运行。 但现在可以租用IaaS公司提供的场外服务器,存储和网络硬件。这样一来,便大大的节省了维护成本和办公场地。 PaaS:Platform-as-a-Service(平台即服务) 第二层就是所谓的PaaS 举例: PaaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。这节省了你在硬件上的费用,也让分散的工作室之间的合作变得更加容易。网页应用管理,应用设计,应用虚拟主机,存储,安全以及应用开发协作工具等。 SaaS:Software-as-a-Service(软件即服务) 第三层也就是所谓SaaS 举例:生活中,几乎我们每一天都在接触SaaS云服务,比如:我们平时使用的苹果手机云服务,网页中的一些云服务等。

阅读全文

Git Flow

https://nvie.com/posts/a-successful-git-branching-model/ Git Flow 的概念   在使用Git的过程中如果没有清晰流程和规划,否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护。 Git版本管理同样需要一个清晰的流程和规范。 Vincent Driessen 为了解决这个问题提出了 A Successful Git Branching Model 以下是基于Vincent Driessen提出的Git Flow 流程图 https://www.jianshu.com/p/41910dc6ef29 Git Flow 的常用分支 Production 分支 也就是我们经常使用的Master分支,这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直接修改

阅读全文

为什么流媒体直播的延迟很高

https://draveness.me/whys-the-design-live-streaming-latency 通信技术的发展促进了视频点播和直播业务的兴起,4G 和 5G 网络技术的进步也使得流媒体技术变得越来越重要,但是网络技术并不能解决流媒体直播的高延迟问题,本文不会介绍网络对直播业务的影响,而是会分析直播中常见的现象 — 主播和观众之间能够感觉到的明显网络延迟。除了业务上要求的延迟直播之外,有哪些因素会导致视频直播的延迟这么高呢? 当观众通过弹幕与主播进行互动时,从我们看到弹幕到得到主播的响应可能要经过 5s 甚至更长的时间,虽然主播看到弹幕的时间与观众看到弹幕的时间不会有太大的差别,但是直播系统将主播的音视频数据传输到客户端或者浏览器需要较长的时间,这个从主播端到观众端传输数据的时间一般被称作端到端的音视频延迟。

阅读全文

DB2 NoSQL JSON

快速变化的应用程序环境需要一种灵活的机制来存储数据,并在不同应用程序层之间传递数据。事实证明,JSON (Java™ Script Object Notation) 是一种用于移动、交互式应用程序的重要技术,它减少了模式设计的开销,消除了数据转换的需要。

阅读全文

Gflag

一、gflags是什么

阅读全文

c++ Traits

traits,又被叫做特性萃取技术,说得简单点就是提取“被传进的对象”对应的返回类型,让同一个接口实现对应的功能。因为STL的算法和容器是分离的,两者通过迭代器链接。算法的实现并不知道自己被传进来什么。萃取器相当于在接口和实现之间加一层封装,来隐藏一些细节并协助调用合适的方法,这需要一些技巧(例如,偏特化)。最后附带一个小小的例子,应该能更好地理解 特性萃取。

阅读全文

gulp webpack grunt requirejs

  1. 书写方式 grunt 运用配置的思想来写打包脚本,一切皆配置,所以会出现比较多的配置项,诸如option,src,dest等等。而且不同的插件可能会有自己扩展字段,导致认知成本的提高,运用的时候要搞懂各种插件的配置规则。 gulp 是用代码方式来写打包脚本,并且代码采用流式的写法,只抽象出了gulp.src, gulp.pipe, gulp.dest, gulp.watch gulp.task等接口,运用相当简单。经尝试,使用gulp的代码量能比grunt少一半左右。
阅读全文

rollup

https://github.com/rollup/rollup http://rollupjs.org/guide/en/

阅读全文

Node.js RESTful API

什么是 REST? REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。

阅读全文

Node.js GET POST请求

表单提交到服务器一般都使用 GET/POST 请求。

阅读全文

node

Node.js 创建第一个应用 如果我们使用 PHP 来编写后端的代码时,需要 Apache 或者 Nginx 的 HTTP 服务器,并配上 mod_php5 模块和 php-cgi。

阅读全文

grunt

以现在前端js激增的态势,一个项目下来几十个js文件轻轻松松 对于复杂一点的单页应用来说,文件上百简直是家常便饭,那么这个时候我们的js文件应该怎么处理呢? 另外,对于css文件,又该如何处理呢?? 这些都是我们实际工作中要遇到的问题,比如我们现在框架使用zepto、backbone、underscore 我们要如何将他们合成一个libs文件,这都是令人头疼的问题

阅读全文

Node.js Express 框架

Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

阅读全文

exports

Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。

阅读全文

electron nodejs源码打包为可执行程序

https://github.com/electron/electron-quick-start electron: npm install -g electron electron-packager git clone https://github.com/electron/electron-quick-start.git 将代码加到mainWindow之前 electron-packager . 特点:可以包含html,生成包比较大

阅读全文

npm 和 cnpm

npm 允许用户从NPM服务器下载别人编写的第三方包到本地使用。 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用 npm命令 npm -v 来测试是否成功安装 查看当前目录已安装插件:npm list 更新全部插件: npm update [ –save-dev ] 使用 npm 更新对应插件: npm update [ -g ] [ --save-dev] 使用 npm 卸载插件: npm uninstall [ -g ] [ --save-dev ] cnpm 淘宝团队做的国内镜像,因为npm的服务器位于国外可能会影响安装。淘宝镜像与官方同步频率目前为 10分钟 一次以保证尽量与官方服务同步。 安装:命令提示符执行 npm install cnpm -g --registry=https://registry.npm.taobao.org cnpm -v 来测试是否成功安装 通过改变地址来使用淘宝镜像 npm的默认地址是https://registry.npmjs.org/ 可以使用npm config get registry查看npm的仓库地址 可以使用npm config set registry https://registry.npm.taobao.org来改变默认下载地址,达到可以不安装cnpm就能采用淘宝镜像的目的,然后使用上面的get命令查看是否成功。 nrm nrm包安装命令: npm i nrm -g nrm能够管理所用可用的镜像源地址以及当前所使用的镜像源地址,但是只是单纯的提供了几个url并能够让我们在这几个地址之间方便切换 nrm ls即nrm list,查看所有可用的镜像,并可以切换。*号表示当前npm使用的地址,可以使用命令nrm use taobao或 nrm use npm来进行两者之间的切换。 nrm ls命令 -g -S -D -g:全局安装。 将会安装在C:\ Users \ Administrator \ AppData \ Roaming \ npm,并且写入系统环境变量;非全局安装:将会安装在当前定位目录;全局安装可以通过命令行任何地方调用它,本地安装将安装在定位目录的node_modules文件夹下,通过要求调用; -S:即npm install module_name --save,写入package.json的dependencies ,dependencies 是需要发布到生产环境的,比如jq,vue全家桶,ele-ui等ui框架这些项目运行时必须使用到的插件就需要放到dependencies -D:即npm install module_name --save-dev,写入package.json的devDependencies ,devDependencies 里面的插件只用于开发环境,不用于生产环境。比如一些babel编译功能的插件、webpack打包插件就是开发时候的需要,真正程序打包跑起来并不需要的一些插件。 为什么要保存在package.json 因为node_module包实在是太大了。用一个配置文件保存,只打包安装对应配置文件的插件,按需导入

阅读全文

使用Browserify解决浏览器加载require没有被定义

https://github.com/browserify/browserify

阅读全文

babelify

https://github.com/babel/babelify

阅读全文

babel

https://www.webpackjs.com/loaders/babel-loader/ https://www.babeljs.cn/

阅读全文

ES6

为什么要处理ES6语法呢?当我们使用新语法来写代码,一些浏览器如果不支持那么就会报错,导致用户体验非常糟糕。我们使用babel来将ES6语法处理成ES5语法,就可以解决这个问题。

阅读全文

DelayQueue 延迟队列实现原理

使用场景

阅读全文

延迟队列设计

当订单⼀一直处于未⽀支付状态时,如何及时的关闭订单,并退还库存? 定时的爆款商品自动上下架、广告的定时更新如何做到?

阅读全文

Charles不能捕获localhost请求

官网解决方案 Some systems are hard coded to not use proxies for localhost traffic, so when you connect to http://localhost/ it doesn’t show up in Charles. The workaround is to connect to localhost.charlesproxy.com/ instead. This points to the IP address 127.0.0.1, so it should work identically to localhost, but with the advantage that it will go through Charles. This will work whether or not Charles is running or you’re using Charles. If you use a different port, such as 8080, just add that as you usually would, e.g. localhost.charlesproxy.com:8080. You can also put anything in front of that domain, e.g. myapp.localhost.charlesproxy.com, which will also always resolve to 127.0.0.1. Alternatively you can try adding a ‘.’ after localhost, or replace localhost with the name of your machine, or use your local link IP address (eg. 192.168.1.2). If Charles is running and you’re using Charles as your proxy, you can also use local.charles as an alternative for localhost. Note that this only works when you’re using Charles as your proxy, so the above approaches are preferred, unless you specifically want requests to fail if not using Charles

阅读全文

Abort trap 6

$/Users/didi/.composer/vendor/bin/phpcbf dyld: Library not loaded: /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib Referenced from: /usr/local/opt/php@7.0/bin/php Reason: image not found Trace/BPT trap: 5 $ which php /usr/local/opt/php@7.0/bin/php

阅读全文

为什么要用npm scripts替代gulp

前端自动化的配套工具估计都离不开gulp或者是grunt,有一些或许会用上webpack辅助用上最新的ES6语法等;但是不知道大家在使用gulp众多插件的时候有没有碰到过一些问题,比如:有一些插件你仅仅需要用到其中一点点的API、插件更新速度非常慢、有一些插件碰到bug的时候调试起来非常麻烦等。所以总结一下gulp或者grunt其实都会有以下问题:

阅读全文

gulp

gulp是基于Nodejs的自动任务运行器。 她能自动化地完成 javascript、sass、less、html/image、css 等文件的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。 她借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单。 gulp主要用到node中的两个模块,fileSystem和stream,文件系统可以对文件进行操作,比如读取文件、写入文件、创建文件、修改文件名、删除文件等;而数据流主要分为读取流、写入流和双工流;这里还有一个管道pipe的概念,管道可以使文件对象从一个流安全的流入到另一个流。 gulp就是先创建一个读取流、一个写入流,在创建若干个双工流,对双工流进行数据的处理,比如去空字符,然后通过管道将读取流、不同功能的双工流、写入流依次连接起来,从而实现对文件的操作处理 1.gulp是什么? 前端构建工具,gulp是基于Nodejs,自动化地完成 javascript、coffee、sass、less、html/image、css 等文件的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单。流,Node将几乎所有IO操作都抽象成了stream的操作,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。

阅读全文

upstream

git中upstream丢失问题Your branch is based on ‘origin/xxxx’, but the upstream is gone. 前使用了git clone 直接把github上自己项目的一个分支拉到了本地,输入:

阅读全文

网关中间件

网关常用功能 统一接入:为各种无线应用提供统一接入服务;

阅读全文

OmniPlan 项目排期管理工具

选择模版 软件内置4个模版(排期1是我加的,忽略)

阅读全文

levenshtein

python_Levenshtein 该包中的几个计算字串相似度的几个函数实现。

阅读全文

pull

作为一个messaging system,Kafka遵循了传统的方式,选择由producer向broker push消息并由consumer从broker pull消息。一些logging-centric system,比如Facebook的Scribe和Cloudera的Flume,采用非常不同的push模式。事实上,push模式和pull模式各有优劣。

阅读全文

chrome 无法打开https 网站问题解决

1,备份书签 在计算机上打开 Chrome。 点击右上角的“更多”图标 更多。 依次选择书签 然后 书签管理器。 依次点击顶部的“更多”图标 更多 然后 导出书签。 Chrome 会将您的书签导出为 HTML 文件。您可以使用此文件将书签导入另一个浏览器。 2,卸载浏览器 3,清空配置(这一步很重要,不然重装也没用) rm -rf ~/Library/Application\ Support/Google/Chrome/Default (光这个也不可以,需要外层目录也干掉)

阅读全文

scp

cp -C应该被认为只是一种方便.如果文件可以被显着压缩,那么最好首先在源上压缩它,传输压缩的表单,最后在目标上压缩 但是只是针对单个文件进行压缩如果是多个小文件最好用 tar -zcvf go1.10.tar ./ $scp go1.10.tar xiaoju@10.96.83.51:/home/xiaoju/goLang/src/github.com/go 使用ssh+tar 传输文件与scp比较 使用cat 输出文件 tar -zcvf - ./ |ssh posp@192.168.3.55 “cat >/home/posp/xxx.tar.gz real 1m26.803s user 1m21.459s sys 0m5.323s 使用dd生成文件 tar -zcvf - ./ |ssh posp@192.168.3.55 “dd of=/home/posp/xxx.tar.gz real 1m27.242s user 1m21.475s sys 0m5.840s 直接在传输的时候直接解压 tar -zcvf - ./ |ssh posp@192.168.3.55 “tar -zxvf - -C /home/posp/trans1” real 1m27.242s user 1m21.475s sys 0m5.840s 使用Scp传输文件(没有压缩) scp -r ./ posp@192.168.3.55:/home/posp/chenchen_test/trans1 real 6m54.000s user 0m41.940s sys 0m12.742s ps: 因为空洞文件压缩后会非常小,没有压缩传输的话非常耗费时间

阅读全文

flutter

https://github.com/flutter/flutter https://flutterchina.club/ Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。 Flutter框架分三层 Framework,Engine, Embedder

阅读全文

git Patch

认识 GIT DIFF git diff 命令我们用得太多了,默认返回工作区和暂存区的文件详细差异。 什么叫详细差异? 工作区与暂存区的每一行数据变更都能够在这个命令中看到,多用于提交代码前的再次审阅,避免出错。 当然,git diff 不仅能提供工作区和暂存区的文件对比,可以说能提供任意文件差异,如下:

阅读全文

微服务架构下的分布式事务问题

ACID理论:关系型数据库的事务满足 ACID 的特性,具有 ACID 特性的数据库支持数据的强一致性,保证了数据本身不会出现不一致。适用于传统的单体架构。 CAP理论:在分布式系统下, 包含三个要素:Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性),并且三者不可兼得。分布式系统要求保证分区容错性,只能在数据强一致性(C)和可用性(A)之间做平衡,即选择CP或者AP。比如Zookeeper为CP系统保证强一致性牺牲一定的可用性;Eureka为AP系统保证较高可用性牺牲一定的一致性。另外,CAP理论中是忽略网络延迟,也就是当事务提交时,从节点A复制到节点B,但是在现实中这个是明显不可能的,所以总会有一定的时间是不一致。所以CAP一般适用于局域网系统的理论基础。 BASE理论:解决 CAP 理论中分布式系统的可用性和一致性不可兼得的问题,提出最终一致性。即,最终数据是一致的就可以了,而不是实时保持强一致。例如,支付成功,订单也成功,但增加积分失败,此时,不应回滚支付和订单,而应通过一些 补偿方法来让积分得以正确地增加。 本地事务 基于数据库的ACID理论 基于undo、redo日志记录 undo日志实现回滚、redo日志实现commit场景异常的恢复

阅读全文

HTTP

在1991年发布了HTTP 0.9版,在1996年发布1.0版,1997年是1.1版,1.1版也是到今天为止传输最广泛的版本(初始RFC 2068 在1997年发布, 然后在1999年被 RFC 2616 取代,再在2014年被 RFC 7230 /7231/7232/7233/7234/7235取代),2015年发布了2.0版,其极大的优化了HTTP/1.1的性能和安全性,而2018年发布的3.0版,继续优化HTTP/2,激进地使用UDP取代TCP协议,目前,HTTP/3 在2019年9月26日 被 Chrome,Firefox,和Cloudflare支持 HTTP 0.9 / 1.0 0.9和1.0这两个版本,就是最传统的 request – response的模式了,HTTP 0.9版本的协议简单到极点,请求时,不支持请求头,只支持 GET 方法,没了。HTTP 1.0 扩展了0.9版,其中主要增加了几个变化:

阅读全文

微信小程序底层原理

页面渲染的方式主要有三种

阅读全文

http2

HTTP2.0大幅度的提高了web性能,在HTTP1.1完全语意兼容的基础上,进一步减少了网络的延迟。实现低延迟高吞吐量。对于前端开发者而言,减少了优化工作。 二进制分帧 首部压缩 流量控制 多路复用 请求优先级 服务器推送 二进制分帧 在不改变HTTP1.x的语义、方法、状态码。URL以及首部字段的情况下,HTTP2.0是怎样突破HTTP1.1的性能限制,改进传输性能,实现低延迟高吞吐量的呢?关键之一就是在应用层(HTTP)和传输层(TCP)之间增加一个二进制分帧层。 在整理二进制分帧及其作用的时候我们先来铺垫一点关于帧的知识:

阅读全文

DNS 劫持

DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能访问或访问的是假网址。

阅读全文

artifactory

https://s0about0gitlab0com.icopy.site/devops-tools/jfrog-artifactory-vs-gitlab.html JFrog Artifactory是一种工具,用于存储构建过程的二进制输出以用于分发和部署. Artifactory支持多种软件包格式,例如Maven,Debian,NPM,Helm,Ruby,Python和Docker. JFrog提供高可用性,复制,灾难恢复,可伸缩性,并且可以与许多本地和云存储产品一起使用.

阅读全文

HTTPS

HTTPS可以防止中间人篡改内容吗? 我搜到Wireshark可以通过导入CA,进而解密HTTPS内容。那么如果是客户端程序来访问HTTPS的话,用户就有办法查看请求返回内容了。

阅读全文

CSRF、XSS、sql注入、DDOS流量攻击

CSRF攻击 (浏览器攻击):跨站请求伪造攻击 ,CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性        攻击者一般会使用吸引人的图片去引导用户点击进去他设定好的全套,然后你刚登录的A网站没有关闭,这时候攻击者会利用JS事件去模拟用户请求A网站信息,从而就得到了目的。预防措施:为表单提交都加上自己定义好的token然后加密好,后台也一样的规则然后进行对比。        跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站指令码(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。 防范手段 对于上面说的第一个例子: 1、检查Referer字段:HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。在处理敏感数据请求时,通常来说,Referer字段应和请求的地址位于同一域名下。 2、添加校验token XSS攻击(服务端):跨站脚本攻击, XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨大的,是web安全的头号大敌        攻击者一般通过script标签对网站注入一些可执行的代码,这样就可以很轻松的获取到用户的一些信息。预防措施:strip_tags() 函数,过滤掉输入、输出里面的恶意标签和使用htmlentities()函数把标签字符串转换成html实体。 跨网站指令码(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程式的安全漏洞攻击,是代码注入的一种。它允许恶意使用者将程式码注入到网页上,其他使用者在观看网页时就会受到影响。这类攻击通常包含了HTML以及使用者端脚本语言。

alert(“hey!you are attacked”)</script> 也可以做一些其他的事情,例如: 1、窃取网页浏览中的cookie值,为接下来的CSRF做准备 2、劫持流量实现恶意跳转 这个很简单,就是在网页中想办法插入一句像这样的语句: window.location.href=”http://www.baidu.com”;</script> 3、注入脚本获得其他信息 常用的xss攻击绕过过滤的一些方法: 1、大小写绕过 http://192.168.1.102/xss/example2.php?name=alert(“hey !”)</scRipt> 2、利用过滤后返回语句再次构成攻击语句来绕过 http://192.168.1.102/xss/example3.php?name=pt–>alert(“hey!!”)</scRi</script>pt> 这个利用原理在于只过滤了一个script标签。 3、并不是只有script标签才可以插入代码 http://192.168.1.102/xss/example4.php?name= 4、编码脚本代码绕过关键字过滤 有的时候,服务器往往会对代码中的关键字(如alert)进行过滤,这个时候我们可以尝试将关键字进行编码后再插入,不过直接显示编码是不能被浏览器执行的,我们可以用另一个语句eval()来实现。eval()会将编码过的语句解码后再执行。 例如alert(1)编码过后就是 \u0061\u006c\u0065\u0072\u0074(1)

阅读全文

HTTP_X_FORWARDED_FOR

一、如果没有使用代理服务器,

阅读全文

Dapper

http://bigbully.github.io/Dapper-translation/ http://static.googleusercontent.com/media/research.google.com/zh-CN//archive/papers/dapper-2010-1.pdf https://github.com/TaXueWWL/lite-tracer https://www.ibm.com/developerworks/cn/web/wa-distributed-systems-request-tracing/index.html https://zipkin.io/ https://github.com/openzipkin/zipkin https://github.com/naver/pinpoint 基于HTTP同步调用,能实现TraceId的传递,SpanId的生成及传递,ParentSpanId的获取。 应用层无感知,业务请求无需显示传递链路信息。 由于我们是在应用层协议传递TraceId、SpanId、parentSpanId,则Http头是传递参数的最佳位置。这里只进行HTTP协议层的传递,如果要进一步 实现在RPC协议中的传递,我们就需要在RPC的序列化协议中增加定制化字段,将TraceId、SpanId传递下去 对于ParentSpanId而言,首次请求的时候,父Span不存在,因此默认为-1,后续进行分析的时候只要遇到某个Trace节点的父Span为-1,则表示这个请求 是首次请求,也就是Dapper论文中提到的Trace树形结构中的根节点。 对于每个 Trace 树,Trace 都要定义一个全局唯一的 Trace ID,在这个跟踪中的所有 Span 都将获取到这个 Trace ID。 每个 Span 都有一个 Parent Span ID 和它自己的 Span ID。 追踪系统中用 Span 来表示一个服务调用的开始和结束时间,也就是时间区间。追踪系统记录了 Span 的名称以及每个 Span ID 的 Parent Span ID,如果一个 Span 没有 Parent Span ID 则被称为 Root Span,当前节点的 Parent Span ID 即为调用链路上游的 Span ID,所有的 Span 都挂在一个特定的追踪上,共用一个 Trace ID。

阅读全文

matrix

Java 目前最为流行的 metrics 库是来自 Coda Hale 的 dropwizard/metrics,该库被广泛地应用于各个知名的开源项目中。例如 Hadoop,Kafka,Spark,JStorm 中。

阅读全文

Lockless

https://docs.microsoft.com/zh-cn/windows/win32/dxtecharts/lockless-programming?redirectedfrom=MSDN https://en.cppreference.com/w/cpp/atomic 在 2014 年的 C++ 大会上,Herb Sutter 做了 C++ 无锁(译注:lock-free,意为不使用锁来保持代码的同步)编程的演讲,在演讲中他解释了无锁编程的基本概念,并用三种算法展示了无锁技术。

阅读全文

分布式限流

两个基础限流算法是漏斗算法和令牌算法 分布式限流 如果你的应用是单个进程,那么限流就很简单,请求的计数算法都可以在内存里完成。限流算法几乎没有损耗,都是纯内存的计算。但是互联网世界的应用都是多节点的分布式的,每个节点的请求处理能力还不一定一样。我们需要考虑的是这多个节点的整体请求处理能力。 单个进程的处理能力是1w QPS 并不意味着整体的请求处理能力是 N * 1w QPS,因为整体的处理能力还会有共享资源的能力限制。这个共享资源一般是指数据库,也可以是同一台机器的多个进程共享的 CPU 和 磁盘 等资源,还有网络带宽因素也会制约整体的请求量。 这时候请求的计数算法就需要集中在一个地方(限流中间件)来完成。应用程序在处理请求之前都需要向这种集中管理器申请流量(空气、令牌桶)。 每一个请求都需要一次网络 IO,从应用程序到限流中间件之间。

阅读全文

sso

单点登录(Single Sign On) 以server群如何生成、验证ID的方式大致分为两种: “共享Cookie” 本质上cookie只是存储session-id的介质,session-id也可以放在每一次请求的url里。 SSO-Token方式因为共享session的方式不安全,所以我们不再以session-id作为身份的标识。我们另外生成一种标识,把它取名SSO-Token(或Ticket),这种标识是整个server群唯一的,并且所有server群都能验证这个token,同时能拿到token背后代表的用户的信息。 用户登录成功拿到token(或者是session-id)后怎么让浏览器存储和分享到其它域名下?同域名很简单,把token存在cookie里,把cookie的路径设置成顶级域名下,这样所有子域都能读取cookie中的token。这就是共享cookie的方式 跨域的时候怎么办 要实现SSO,需要以下主要的功能: 所有应用系统共享一个身份认证系统。   统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行效验,判断其有效性。 所有应用系统能够识别和提取ticket信息   要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。    单点登录 有一个独立的认证中心,只有认证中心才能接受用户的用户名和密码等信息进行认证,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,当用户提供的用户名和密码通过认证中心认证后,认证中心会创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌即得到了授权,然后创建局部会话。 当用户还没进行用户登录的时候 用户去访问系统1的保护资源 ,系统1检测到用户还没登录,跳转至SSO认证中心,SSO认证中心也发现用户没有登录,就跳转到用户至认证中心的登录页面 用户在登录页面提交用户相应信息后,认证中心会校验用户信息,如果用户信息正确的话认证中心就会创建与该用户的全局会话(全局会话过期的时候,用户就需要重新登录了。全局会话中存的信息可能有令牌,用户信息,及该在各个系统的一些情况),同时创建授权令牌,然后进行下一步,否则认证中心给出提示(用户信息有误),待用户再次点击登录的时候,再一次进行校验用户信息 认证中心带着令牌跳转到用户最初请求的地址(系统1),系统1拿到令牌后去SSO认证中心校验令牌是否有效,SSO认证中心校验令牌,若该令牌有效则进行下一步 注册系统1,然后系统1使用该令牌创建和用户的局部会话(若局部会话过期,跳转至SSO认证中心,SSO认证中心发现用户已经登录,然后执行第3步),返回受保护资源 用户已经通过认证中心的认证后 用户访问系统2的保护资源,系统2发现用户未登录,跳转至SSO认证中心,SSO认证中心发现用户已经登录,就会带着令牌跳转回系统2,系统2拿到令牌后去SSO认证中心校验令牌是否有效,SSO认证中心返回有效,注册系统2,系统2使用该令牌创建与用户的局部会话,返回受保护资源。

阅读全文

sso oauth

SSO是为了解决一个用户在鉴权服务器登陆过一次以后,可以在任何应用中畅通无阻,一次登陆,多系统访问,操作用户是实打实的该应用的官方用户,用户的权限和分域以鉴权服务器的存储为准。

阅读全文

cors

CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。

阅读全文

tengine

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。它的目的是打造一个高效、安全的Web平台。 http://tengine.taobao.org 继承Nginx-1.17.3的所有特性,兼容Nginx的配置; 支持HTTP的CONNECT方法,可用于正向代理场景; 支持异步OpenSSL,可使用硬件如:QAT进行HTTPS的加速与卸载; 增强相关运维、监控能力,比如异步打印日志及回滚,本地DNS缓存,内存监控等; Stream模块支持server_name指令; 更加强大的负载均衡能力,包括一致性hash模块、会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线,以及动态解析upstream中出现的域名; 输入过滤器机制支持。通过使用这种机制Web应用防火墙的编写更为方便; 支持设置proxy、memcached、fastcgi、scgi、uwsgi在后端失败时的重试次数 动态脚本语言Lua支持。扩展功能非常高效简单; 支持按指定关键字(域名,url等)收集Tengine运行状态; 组合多个CSS、JavaScript文件的访问请求变成一个请求; 自动去除空白字符和注释从而减小页面的体积 自动根据CPU数目设置进程个数和绑定CPU亲缘性; 监控系统的负载和资源占用从而对系统进行保护; 显示对运维人员更友好的出错信息,便于定位出错机器; 更强大的防攻击(访问速度限制)模块; 更方便的命令行参数,如列出编译的模块列表、支持的指令等; 可以根据访问文件类型设置过期时间; [2019-08-20] Tengine-2.3.2 开发版正式发布 (changelog)

阅读全文

id 生成器

在应用程序中,经常需要全局唯一的ID作为数据库主键。如何生成全局唯一ID?

阅读全文

shortUrl

我们在新浪微博上公布网址的时候。微博会自己主动判别网址。并将其转换。比如:http://t.cn/hrYnr0。 为什么要这样做的,原因我想有这样几点: 1、微博限制字数为140字一条,那么假设我们须要发一些连接上去,可是这个连接很的长。以至于将近要占用我们内容的一半篇幅。这肯定是不能被同意的。所以短网址应运而生了。 2、短网址能够在我们项目里能够非常好的对开放级URL进行管理。 有一部分网址能够会涵盖性、暴力、广告等信息。这样我们能够通过用户的举报,全然管理这个连接将不出如今我们的应用中,应为相同的URL通过加密算法之后,得到的地址是一样的。 3、我们能够对一系列的网址进行流量,点击等统计,挖掘出大多数用户的关注点。这样有利于我们对项目的兴许工作更好的作出决策。 1.压缩 实现一种算法,将长地址转换成短地址。然后再实现一种逆运算,将短地址转换成原来的地址。 问题,复杂场景无法覆盖,只能对简单的url可行 2.Hash算法 将一个长URL进行Hash运算,然后将Hash值作为这个长链接的唯一标示。但是通常容易想到的不一定是最优的,我们知道Hash有可能产生碰撞,Hash碰撞的解决,会增强短链接系统的复杂度。

阅读全文

openretry

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。 http://openresty.org/cn/

阅读全文

nginx

2019-09-19 unit-1.11.0 version has been released, featuring static content support, application namespace isolation, and support for WebSockets in Java Servlet Containers.

阅读全文

clang

Clang是一个C语言、C++、Objective-C语言的轻量级编译器。源代码发布于BSD协议下。Clang将支持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。 http://clang.llvm.org/ GCC:GNU(Gnu’s Not Unix)编译器套装(GNU Compiler Collection,GCC),指一套编程语言编译器,以GPL及LGPL许可证所发行的自由软件,也是GNU项目的关键部分,也是GNU工具链的主要组成部分之一。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。1985年由理查德·马修·斯托曼开始发展,现在由自由软件基金会负责维护工作。GCC原本用C开发,后来因为LLVM、Clang的崛起,它更快地将开发语言转换为C++。

阅读全文

p2p 打洞

1、打洞解决了什么问题? 我们平常使用的一般都为私有ip,但是私有ip之间是不能直接通信的,如果要进行通信只能通过公网上的服务器进行数据的转发,难道我们每次发送数据都要经过公网上的服务器转发吗?也不是不可以,但是服务器的承受能力就会大大增加。此时就需要我们的打洞技术的出现了,打洞的出现解决了私有ip之间直接通信的问题(还是需要经过一次公网服务器) 例如:QQ中的聊天就广泛的使用到了打洞技术 2、打洞的实现过程与原理 私有ip的数据都要经过路由器的转发,路由器上有一张NAPT表(IP端口映射表),NAPT表记录的是【私有IP:端口】与【公有IP:端口】的映射关系(就是一一对应关系),本文讲到的路由均是以NAPT为工作模式,这并不影响对打洞。实际中的数据实际发送给的都是路由器的【公有IP:端口】,然后经过路由器进过查询路由表后再转发给【私有的IP:端口】的。

阅读全文

travis ci

ravis CI 提供的是持续集成服务(Continuous Integration,简称 CI)。它绑定 Github 上面的项目,只要有新的代码,就会自动抓取。然后,提供一个运行环境,执行测试,完成构建,还能部署到服务器。

阅读全文

空间索引

1、使用索引,适合建立索引的数据结构是【Hash】和【树】 2、可能索引方案包括:B树,网格索引,四叉树索引、R树索引、GeoHash 3、B树是针对一维数据【单个字段】使用,空间对象(点、线、面)是多维数据 通用二维数据解决方案(点、线、面) 1、网格索引 (1)索引实现:使用Hash数据结构实现,单位网格对应于HashMap中的一个桶,该网格关联的对象对应存储在相应桶的链表中 (2)局限性:网格索引在对象空间分布均匀时效率比较高 如果空间对象分配不均匀,那么最终会得到大量空白网格,浪费存储空间 网格尺寸不好确定,太大则索引效率低,太小则形成很多空白空格

阅读全文

502 504

500 Internal Server Error 内部服务错误:顾名思义500错误一般是服务器遇到意外情况,而无法完成请求。解决的方法:查看nginx、php的错误日志文件,从而看出端倪;如果是脚本的问题,则需要修复脚本错误,优化代码。 502 Bad Gateway错误、504 Bad Gateway timeout 网关超时。解决方法:使用nginx代理,而后端服务器发生故障;或者php-cgi进程数不够用;php执行时间长,或者是php-cgi进程死掉;已经fastCGI使用情况等都会导致502、504错误。 501,服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。 503,服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。(服务不可用) 502 Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。 504 Gateway Time-out:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。

阅读全文

ssl ssh

一、SSL

阅读全文

FastCGI MIT 文档

http://www.mit.edu/~yandros/doc/specs/fcgi-spec.html#S1 FastCGI Specification Mark R. Brown Open Market, Inc. Document Version: 1.0 29 April 1996 Copyright © 1996 Open Market, Inc. 245 First Street, Cambridge, MA 02142 U.S.A. Tel: 617-621-9500 Fax: 617-621-1703 URL: http://www.openmarket.com/

阅读全文

git彻底删除提交历史

git为我们提供了”后悔药”, 但有时候我们会将一些敏感数据提交至git仓库,虽然使用了git rm删除文件,但是文件仍然存在在提交历史中。git提供了两个工具给我们去彻底删除提交历史的方法。 git filter-branch

阅读全文

fpm graceful

用HUP信号使Nginx加载新的配置文件 当Nginx接收到HUP信号的时候,它会尝试着去解析并应用这个配置文件,如果没有问题,那么它会创建新的worker进程,并发送信号给旧的 worker进程,让其优雅的退出。 接收到信号的旧的worker进程会关闭监听socket,但是还会处理当前的请求,处理完请求之后,旧的 worker进程退出。 当你想升级Nginx到一个新的版本,增加或减少module的时候 发送USR2信号给master进程。master进程会把自己的.pid文件重命名为.oldbin(例 如,/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新的二进制文件,从而启动一个新的master进程和新的worker进程.

阅读全文

thrift transport

transport类体系架构与TProtocol类体系架构一样,所以这里就不重复叙述了,想了解可转去TProtocol类体系架构分析那篇。  下面将对transport层的几种transport类进行介绍:

阅读全文

TProtocol 协议和编解码

客户端和服务器通过约定的协议来传输消息(数据),通过特定的格式来编解码字节流,并转化成业务消息,提供给上层框架调用。

阅读全文

thrift 源码

Thrift定义一套IDL(Interface Definition Language)用于描述接口,通常后缀名为.thrift,通过thrift程序把.thrift文件导出成各种不一样的代码的协议定义。除此之外,Thrift自定了一套C/S交互的框架,帮助开发者免去人工解包/打包协议的工作。下面会按文件从里到外仔仔细细地分析Thrift整个框架体系。

阅读全文

clion 支持跳转配置

clion 是最好用的c语言编辑器

阅读全文

GEODNS GeoIP

GeoDNS 是什么,可以说是SLB + IP Geolocation + DNS View 组合 https://github.com/abh/geodns 我在A 国有一台server ,B 国有另一台server

阅读全文

BitTorrent协议分析

BitTorrent(简称BT)是一个文件分发协议,每个下载者在下载的同时不断向其他下载者上传已下载的数据。而在FTP、HTTP协议中,每个下载者从FTP或HTTP服务器处下载自己所需要的文件,各个下载者之间没有交互。当非常多的用户同时访问和下载服务器上的文件时,由于FTP服务器的处理能力和带宽的限制,下载速度会急剧下降,有的用户根本访问不了服务器。BT协议与FTP协议不同,它的特点是下载的人越多下载的速度越快,其原因在于每个下载者将已下载的数据提供给其他下载者下载,它充分利用了用户的上载带宽。BT协议通过一定的策略保证上传的速度越快,下载的速度也越快。

阅读全文

Zabbix 监控组件及流程

Zabbix监控组件主要包括:Zabbix Server、Zabbix Proxy、Zabbix Agent;其中Zabbix Server包括:WEB GUI、Database、Zabbix Server。 每个模块工作职责:

阅读全文

vrrp keepalived

VRRP:Virtual Router Redundancy Protocol,虚拟路由冗余协议。VRRP说白了就是实现地址漂移的,是一种容错协议,在提高可靠性的同时,简化了主机的配置。该协议能够实现将可以承担网关功能的一组路由器加入到备份组中,形成一台虚拟路由器,由VRRP的选举机制决定哪台路由器承担转发任务,局域网内的主机只需将虚拟路由器配置为缺省网关。

阅读全文

dig

linux下查询域名解析有两种选择,nslookup或者dig Dig是域信息搜索器的简称(Domain Information Groper),使用dig命令可以执行查询域名相关的任务。

阅读全文

高qps接入层方案

一、问题域 nginx、lvs、keepalived、f5、DNS轮询,每每提到这些技术,往往讨论的是接入层的这样几个问题: 1)可用性:任何一台机器挂了,服务受不受影响 2)扩展性:能否通过增加机器,扩充系统的性能 3)反向代理+负载均衡:请求是否均匀分摊到后端的操作单元执行 二、上面那些名词都是干嘛的

阅读全文

线程技术(Hyper-Threading Technology)

有多线程(multi-threading)的概念,这很好理解,因为线程是进程最小的调度单位,一个进程至少包含一个线程。 CPU特有的超线程技术。简单来说就是,多线程比较软,超线程比较硬,二者本质上都是虚拟化。

阅读全文

悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。

阅读全文

application binary interface

ABI/应用程序二进制接口 (application binary interface)描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口 。 ABI涵盖了各种细节,如: 数据类型的大小、布局和对齐;调用约定(控制着函数的参数如何传送以及如何接受返回值),例如,是所有的参数都通过栈传递,还是部分参数通过寄存器传递;哪个寄存器用于哪个函数参数;通过栈传递的第一个函数参数是最先push到栈上还是最后;系统调用的编码和一个应用如何向操作系统进行系统调用;以及在一个完整的操作系统ABI中,目标文件的二进制格式、程序库等等。[1] ABI不同于API ,API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译 ,然而ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。 ABI掩盖了各种细节,例如:调用约定控制着函数的参数如何传送以及如何接受返回值;系统调用的编码和一个应用如何向操作系统进行系统调用;以及在一个完整的操作系统ABI中,对象文件的二进制格式、程序库等等。一个完整的ABI,像 Intel二进制兼容标准 (iBCS) ,允许支持它的操作系统上的程序不经修改在其他支持此ABI的操作系统上运行。其他的 ABI 标准化细节包括C++ name decoration和同一个平台上的编译器之间的调用约定,但是不包括跨平台的兼容性。在Unix的操作系统中,存在很多运行在同一件平台上互相相关但是不兼容的操作系统(尤其是80386兼容系统)。有一些努力尝试标准化A I,以减少销售商将程序移植到其他系统时所需的工作。然而,直到现在还没有很成功的例子,虽然LBS正在为Linux做这方面的努力。 它描述了应用程序与OS之间的底层接口。ABI涉及了程序的各个方面,比如:目标文件格式、数据类型、数据对齐、函数调用约定以及函数如何传递参数、如何返回值、系统调用号、如何实现系统调用等。 一套完整的ABI(比如:Intel Binary Compatibility Standard (iBCS)),可以让程序在所有支持该ABI的系统上运行,而无需对程序进行修改。

阅读全文

Server Name Indication

SNI (Server Name Indication)是用来改善服务器与客户端 SSL (Secure Socket Layer)和 TLS (Transport Layer Security) 的一个扩展。主要解决一台服务器只能使用一个证书(一个域名)的缺点,随着服务器对虚拟主机的支持,一个服务器上可以为多个域名提供服务,因此SNI必须得到支持才能满足需求。

阅读全文

checkstyle

现在很多开源工具都可以对代码进行规范审核,比较流行的有以下几款,大致给个简单介绍。

阅读全文

www-authenticate

www-authenticate是早期的一种简单的,有效的用户身份认证技术。 很多网站验证都采用这种简单的验证方式来完成对客户端请求的数据的合法性进行验证。尤其在嵌入式领域中,此方法使用较多。 缺点:这种认证方式在传输过程中是明码传输的,采用的用户名密码加密方式为BASE-64,其解码过程非常简单,网络上很容易搜索到编解码的源码。采用这种认证方式对于普通用户是较安全的,但稍懂TCP/IP协议和HTTP传输协议和验证过程的,破解这种验证用户名和密码是非常简单的。所以其认证技术并不是很安全。 二、认证过程

阅读全文

rstp

https://github.com/EasyDarwin/Course#%E4%B8%80%E6%AC%A1%E5%9F%BA%E6%9C%AC%E7%9A%84rtsp%E6%93%8D%E4%BD%9C%E8%BF%87%E7%A8%8B RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的IETF RFC标准。该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。HTTP与RTSP相比,HTTP请求由客户机发出,服务器作出响应;使用RTSP时,客户机和服务器都可以发出请求,即RTSP可以是双向的。RTSP是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通讯协定并不在其定义的范围内,服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。而前面提到的允许同时多个串流需求控制(Multicast),除了可以降低服务器端的网络用量,更进而支持多方视讯会议(Video Conference)。因为与HTTP1.1的运作方式相似,所以代理服务器〈Proxy〉的快取功能〈Cache〉也同样适用于RTSP,并因RTSP具有重新导向功能,可视实际负载情况来转换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。 RTSP(Real-TimeStream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。

阅读全文

WebDAV

WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。

阅读全文

TCP_NODELAY

TCP/IP协议中针对TCP默认开启了Nagle算法。Nagle算法通过减少需要传输的数据包,来优化网络 启动TCP_NODELAY,就意味着禁用了Nagle算法,允许小包的发送。对于延时敏感型,同时数据传输量比较小的应用,开启TCP_NODELAY选项无疑是一个正确的选择。比如,对于SSH会话,用户在远程敲击键盘发出指令的速度相对于网络带宽能力来说,绝对不是在一个量级上的,所以数据传输非常少;而又要求用户的输入能够及时获得返回,有较低的延时。如果开启了Nagle算法,就很可能出现频繁的延时,导致用户体验极差。当然,你也可以选择在应用层进行buffer,比如使用java中的buffered stream,尽可能地将大包写入到内核的写缓存进行发送;vectored I/O(writev接口)也是个不错的选择。对于关闭TCP_NODELAY,则是应用了Nagle算法。数据只有在写缓存中累积到一定量之后,才会被发送出去,这样明显提高了网络利用率(实际传输数据payload与协议头的比例大大提高)。但是这由不可避免地增加了延时;与TCP delayed ack这个特性结合,这个问题会更加显著,延时基本在40ms左右。当然这个问题只有在连续进行两次写操作的时候,才会暴露出来 最近排查 Redis 的 Redis server went away 问题时,发现 Redis 的 PHP 扩展里面特意使用 setsockopt() 函数设置了 sock 套接字的 TCP_NODELAY 项,用来禁用了 Nagle’s Algorithm 算法 首先看我用 ab 不加 -k 选项的结果很好,不超过 1ms 的响应时间。但一旦我加上了 -k 选项启用 HTTP Keep-Alive,结果就变成了这样:40ms 原来这是 TCP 协议中的 Nagle‘s Algorithm 和 TCP Delayed Acknoledgement 共同起作 用所造成的结果。 Nagle’s Algorithm 是为了提高带宽利用率设计的算法,其做法是合并小的TCP 包为一个,避免了过多的小报文的 TCP 头所浪费的带宽。如果开启了这个算法 (默认),则协议栈会累积数据直到以下两个条件之一满足的时候才真正发送出去:

阅读全文

subline text3 插件编写

新建插件

  1. 通过Tools -> New Plugin…来打开一个初始化的插件编辑文件。 初始化后的插件有如下内容
  2. 通过Preferences -> Browse Packages…打开Packages文件夹,在该文件夹下建立个子文件夹,名字为你想开发的插件名字,如:defineReplace。 回到插件开发的初始化编辑器页面,通过 ctrl+s 保存这个文件,并放到你建立的子文件夹下,文件名如:defineReplace.py 。 3、通过 ctrl+` 快捷键或者View -> Show Console 打开SublimeText的控制台。 并在输入框执行如下的命令:view.run_command(‘example’) 执行结果如下,第一行插入了Hello,World!: 4、ExampleCommand类名字改为你想要的插件名字,如: definereplaceCommand(将Command之前的名称先全部小写,当然还有其他方式),然后就可以开发该插件对应的功能了,当然这时候输入的命令也变成了view.run_command(‘definereplace’),这样执行才有效。
阅读全文

bom

BOM(Byte Order Mark),字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码。 在UCS 编码中有一个叫做 “Zero Width No-Break Space” ,中文译名作“零宽无间断间隔”的字符,它的编码是 FEFF。而 FFFE 在 UCS 中是不存在的字符,所以不应该出现在实际传输中。UCS 规范建议我们在传输字节流前,先传输字符 “Zero Width No-Break Space”。这样如果接收者收到 FEFF,就表明这个字节流是 Big-Endian 的;如果收到FFFE,就表明这个字节流是 Little- Endian 的。因此字符 “Zero Width No-Break Space” (“零宽无间断间隔”)又被称作 BOM。 UTF-8 不需要 BOM 来表明字节顺序,但可以用 BOM 来表明编码方式。字符 “Zero Width No-Break Space” 的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的字节流,就知道这是 UTF-8编码了。Windows 就是使用 BOM 来标记文本文件的编码方式的。 字符U+FEFF如果出现在字节流的开头,则用来标识该字节流的字节序,是高位在前还是低位在前。如果它出现在字节流的中间,则表达零宽度非换行空格的意义,用户看起来就是一个空格。从Unicode3.2开始,U+FEFF只能出现在字节流的开头,只能用于标识字节序,就如它的名称——字节序标记——所表示的一样;除此以外的用法已被舍弃。取而代之的是,使用U+2060来表达零宽度无断空白。 类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但对于 PHP来说,BOM是个大麻烦。 在网页上使用BOM是个错误。BOM设计出来不是用来支持HTML和XML的。要识别文本编码,HTML有charset属性,XML有encoding属性,没必要拉BOM撑场面。虽然理论上BOM可以用来识别UTF-16编码的HTML页面,但实际工程上很少有人这么干。毕竟UTF-16这种编码连ASCII都双字节,实在不适用于做网页。其实说BOM是个坏习惯也不尽然。BOM也是Unicode标准的一部分,有它特定的适用范围。通常BOM是用来标示Unicode纯文本字节流的,用来提供一种方便的方法让文本处理程序识别读入的.txt文件是哪个Unicode编码(UTF-8,UTF-16BE,UTF-16LE)。Windows相对对BOM处理比较好,是因为Windows把Unicode识别代码集成进了API里,主要是CreateFile()。打开文本文件时它会自动识别并剔除BOM。Windows用这个有历史原因,因为它最初脱胎于多代码页的环境。而引入Unicode时Windows的设计者又希望能在用户不注意的情况下同时兼容Unicode和非Unicode(Multiple byte)文本文件,就只能借助这种小trick了。相比之下,Linux这样的系统在多locale的环境中浸染的时间比较短,再加上社区本身也有足够的动力轻装前进(吐槽:微软对兼容性的要求确实是到了非常偏执的地步,任何一点破坏兼容性的做法都不允许,以至于很多时候是自己绑住自己的双手),所以干脆一步到位进入UTF-8。当然中间其实有一段过渡期,比如从最初全UTF-8的GTK+2.0发布到基本上所有GTK开发者都弃用多locale的GTK+1.2,我印象中至少经历了三到四年。BOM不受欢迎主要是在UNIX环境下,因为很多UNIX程序不鸟BOM。主要问题出在UNIX那个所有脚本语言通行的首行#!标示,这东西依赖于shell解析,而很多shell出于兼容的考虑不检测BOM,所以加进BOM时shell会把它解释为某个普通字符输入导致破坏#!标示,这就麻烦了。其实很多现代脚本语言,比如Python,其解释器本身都是能处理BOM的,但是shell卡在这里,没办法,只能躺着也中枪。说起来这也不能怪shell,因为BOM本身违反了一个UNIX设计的常见原则,就是文档中存在的数据必须可见。BOM不能作为可见字符被文本编辑器编辑,就这一条很多UNIX开发者就不满意。顺便说一句,即使脚本语言能处理BOM,随处使用BOM也不是推荐的办法。各个脚本语言对Unicode的处理都有自己的一套,Python的 # – coding: utf-8 –,Perl的use utf8,都比BOM简单而且可靠。另一个好消息是,即使是必须在Windows和UNIX之间切换的朋友也不会悲催。幸亏在UNIX环境下我们还有VIM这种神器,即使遇到BOM挡道,我们也可以通过 set nobomb; set fileencoding=utf8; w 三条命令解决问题。最后回头想想,似乎也真就只有Windows坚持用BOM了。P.S.:本问题是自己的第150个回答。突然发现自己回答得很少很少⋯⋯P.S. 2:突然想起需要解释一下为什么说VIM去除bomb的操作需要在UNIX下完成。因为VIM在Windows环境下有一个奇怪的bug,总是把UTF-16文件识别成二进制文件,而UNIX(Linux或者Mac都可以)下VIM则无问题。这个问题从VIM 6.8一直跟着我到VIM 7.3。目前尚不清楚这是VIM的bug还是我自己那个.vimrc文件的bug。如有高手解答不胜感激。

阅读全文

curl get 发送post数据

出现错误:

阅读全文

csrf token

CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。 这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对,但这种方法的难点在于如何把 token 以参数的形式加入请求。对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。 而对于 POST 请求来说,要在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,这样就把 token 以参数的形式加入请求了。 如果说这个Token是指的用户登录的凭据,并用以维持登录状态的话,也就是说一个用户必须要输入用户名密码并验证通过后,服务器才会分配一个Token,传回并储存在客户端作为凭证(同时储存在服务器上)。因此并不是每个人都可以获得这个Token,只有能提供正确用户密码的客户端才可以。 之后每一次操作,都需要客户端向服务器提供这个Token,以验证登录状态,如果考虑安全性的话,还可以增加对User-Agent、IP等信息的验证。 CSRF防范方法: (1)验证码 (2)refer头 (3)Token 说明:理解token的作用,他是一个随机的值,是服务器端前一个请求给的,是一次性的,可以防止csrf这种恶意的携带自己站点的信息发请求或者提交数据(这个动作一般需要获取你的前一个请求的响应返回的token值,加大了难度,并不能完全杜绝)。 注意当然不能写到cookie中,因为浏览器在发出恶意csrf请求时,是自动带着你的cookie的。

阅读全文

ssh config

在 $HOME/.ssh/config 中加入以下内容: Host * ControlPersist yes ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p 这种方式第一次需要输入密码,然后一段时间内不需要输入密码了。 SSH 文件的结构及解释算法 本地系统的每个用户都可以维护一个客户端的 SSH 配置文件,这个配置文件可以包含你在命令行中使用 ssh 时参数,也可以存储公共连接选项并在连接时自动处理。你可以在命令上中使用 ssh 来指定 flag ,以覆盖配置文件中的选项。

阅读全文

google authenticator 工作原理

Google authenticator是一个基于TOTP原理实现的一个生成一次性密码的工具,用来做双因素登录,市面上已经有很多这些比较成熟的东西存在,像是一些经常用到的U盾,以及数字密码等 实现源码 Google authenticator版本 https://github.com/google/google-authenticator-android

阅读全文

sublime for mac 实现 ctrl+左键 跳转函数

首先要告诉大家,最后效果和win上功能一致,非常好用,用法改变,改成:鼠标停留出现Tag框!快捷键ctrl+` 或者View->Show Console,输入如下代码(sublime text3),安装咱们的 插件管理器Package Control插件:import  urllib.request,os;pf=’Package Control.sublime-package’;ipp=sublime.installed_packages_path();urllib.request.install_opener(urllib.request.build_opener(urllib.request.ProxyHandler()));open(os.path.join(ipp,pf),’wb’).write(urllib.request.urlopen(‘http://sublime.wbond.net/’+pf.replace(‘ ‘,’%20’)).read())回车能一秒就能看到右下角提示安装好了,接着往下走! 打开Sublime Text 2/3软件,在Preferences(设置)菜单中打开Package Control(插件管理器)2打开菜单后找到install packages,回车执行,拉取插件列表要等一小会3输入ctags回车安装,稍等一会看到左下角提示安装成功就好了4这时你在打开的文件中,右键菜单中会多一个Navigate to Definition菜单项5这时在侧左栏的工程/项目文件上右键会看到CTags: Rebuild Tags菜单项6如果,右键菜单中执行Navigate to Definition菜单项,左下角会有如下提示:[Errno 1] /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ctags: illegal option – Rusage: ctags [-BFadtuwvx] [-f tagsfile] file …

阅读全文

git rebase

rebase在git中是一个非常有魅力的命令,使用得当会极大提高自己的工作效率;相反,如果乱用,会给团队中其他人带来麻烦。它的作用简要概括为:可以对某一段线性提交历史进行编辑、删除、复制、粘贴;因此,合理使用rebase命令可以使我们的提交历史干净、简洁!

阅读全文

libiop

https://github.com/wangzhione/libiop 一个c语言开发的跨平台网络IO库

阅读全文

HttpClient

个人分类: httpcomponent/httpclient 连接池技术作为创建和管理连接的缓冲池技术,目前已广泛用于诸如数据库连接等长连接的维护和管理中,能够有效减少系统的响应时间,节省服务器资源开销。其优势主要有两个:其一是减少创建连接的资源开销,其二是资源的访问控制。连接池管理的对象是长连接,对于HTTP连接是否适用,我们需要首先回顾一下长连接和短连接。

阅读全文

http_proxy

支持http以及Sock4、Sock5类型的代理。

阅读全文

thrift 遇到的坑

1,not enough arguments in call to oprot.Flush have () want (context.Context) 原因idl 编译器与thrift lib 的版本不一致,生成idl用0.9.2 ,thrift go lib 版本是0.10.0 解决方案 ~/goLang/src/git.apache.org/thrift.git$git tag 0.10.0 0.11.0 0.2.0 0.3.0 0.4.0 0.5.0 0.6.0 0.6.1 0.7.0 0.8.0 0.9.0 0.9.1 0.9.2 0.9.3 hier git checkout 0.9.2 编译通过 2,编译完成,运行失败 ./client: line 1: syntax error near unexpected token newline' ./client: line 1: !' 原因:main函数(只能应用于package main) 解决方案:改main函数包名为main 3,接口实现不对 cannot use EchoServerImp literal (type *EchoServerImp) as type echo.Echo in argument to echo.NewEchoProcessor: *EchoServerImp does not implement echo.Echo (wrong type for Echo method) have Echo(context.Context, *echo.EchoReq) (*echo.EchoRes, error) want Echo(*echo.EchoReq) (*echo.EchoRes, error) 原因:实现接口的时候方法多了一个参数 4,client: Expected protocol id 82 but got 00 server: error processing request: Incorrect frame size (2183201028) 两边idl 不对应 5,cannot find package "golang.org/x/net/context" in any of: .../projects/go-projects/src/github.com/blevesearch/bleve/vendor/golang.org/x/net/context (vendor tree) 解决方案:cd src mkdir golang.org cd golang.org mkdir x cd x git clone git@github.com:golang/net.git --depth 1 6,non-standard import "github.com/mattn/go-sqlite3" in standard package "iislog" GO有两个路径需要定义,一个是GO自身的安装目录 GOROOT,这个目录只能放标准包,也就是”standart packages“。另一个是GOPATH,也就是工作目录,这里用来放第三方包,也就是“non-standard packages”。 http://mirrors.hust.edu.cn/apache/thrift/0.9.3/ 7,GOPATH=`pwd` /home/xiaoju/go/bin/go get github.com/golang/mock/gomock package golang.org/x/net/context: unrecognized import path "golang.org/x/net/context" (https fetch: Get https://golang.org/x/net/context?go-get=1: dial tcp 216.239.37.1:443: i/o timeout) $mkdir -p src/golang.org/x git clone https://github.com/golang/mock 8,关于gopath中的目录 golang_org golang.org google.golang.org 三个优先使用 golang.org 9.thrift 0.9.3 编译只能用 go version go1.10.4 linux/amd64 版本才能编译通过 10,编译go git clone https://github.com/golang/go cd go git tag git checkout go1.9 export GOROOT_BOOTSTRAP="/home/xiaoju/go1.8.1/" ./make.bash 8,# command-line-arguments src/github.com/xiazemin/thrift/gen-go/echo/framed/server/echo.go:34:29: cannot use thrift.NewTFramedTransport(thrift.NewTTransportFactory()) (type *thrift.TFramedTransport) as type thrift.TTransportFactory in argument to thrift.NewTSimpleServer4: *thrift.TFramedTransport does not implement thrift.TTransportFactory (missing GetTransport method) src/github.com/xiazemin/thrift/gen-go/echo/framed/server/echo.go:34:57: cannot use thrift.NewTTransportFactory() (type thrift.TTransportFactory) as type thrift.TTransport in argument to thrift.NewTFramedTransport: thrift.TTransportFactory does not implement thrift.TTransport (missing Close method) 解决方案:用 thrift.NewTFramedTransport(thrift.NewTFramedTransportFactory(thrift.NewTTransportFactory())), 替代 thrift.NewTFramedTransport(thrift.NewTTransportFactory()), 但是 出现: # command-line-arguments src/github.com/xiazemin/thrift/gen-go/echo/framed/server/echo.go:34:29: cannot use thrift.NewTFramedTransport(thrift.NewTFramedTransportFactory(thrift.NewTTransportFactory())) (type *thrift.TFramedTransport) as type thrift.TTransportFactory in argument to thrift.NewTSimpleServer4: *thrift.TFramedTransport does not implement thrift.TTransportFactory (missing GetTransport method) src/github.com/xiazemin/thrift/gen-go/echo/framed/server/echo.go:34:63: cannot use thrift.NewTFramedTransportFactory(thrift.NewTTransportFactory()) (type thrift.TTransportFactory) as type thrift.TTransport in argument to thrift.NewTFramedTransport: thrift.TTransportFactory does not implement thrift.TTransport (missing Close method) 应该是:thrift.NewTFramedTransportFactory(thrift.NewTTransportFactory()) 9,failed: EOF 原因传输协议不一样: protocolFactory := thrift.NewTCompactProtocolFactory() protocolFactory :=thrift.NewTBinaryProtocolFactoryDefault() 不能通信 10,Request error reading struct: error reading field 0: Not enought frame size 3 to read 8 bytes 原因: idl 定义不一致,改成一致才可以

阅读全文

thrift

1,使用optional字段,不用判断是否设置。如果没有设置,内容为0(int)或者空(string)。

阅读全文

Nginx/LVS/HAProxy负载均衡软件的优缺点

一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术。具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了;如果机器不少,可以用DNS轮询,LVS所耗费的机器还是比较多的;大型网站或重要的服务,且服务器比较多时,可以考虑用LVS。

阅读全文

haproxy_exp

定义独立日志文件

阅读全文

haproxy

HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。 HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。 https://github.com/HAProxy/HAProxy 目录:

  • doc //文档目录,值得所有文档读一遍
    • internals //实现原理
    • design-thoughts //设计中的一些思路想法
  • include
    • proto //协议相关,包括proto_tcp proto_http proto_udp session等
    • common
    • import
    • types //对应entites.pdf 中的HAProxy 各种实体定义
  • src //所有的c文件 HAProxy 初步介绍 建议从 doc/intro.txt开始,intro.txt 主要介绍LoadBanlance的基本原理、HAProxy能干啥不能干啥,HAProxy 总体在各方面的设计思想以及具体的使用指引 management.txt 主要讲如何多节点部署组成集群,如何实现无缝升级 configuration.txt 主要讲解配置文件的使用 architechure LB的最佳架构以及如何与其他第三方产品交互 proxy-proto 讲解什么是proxy 协议以及需要注意的要点 HAProxy的能力: TCP 双向 proxy HTTP 反向代理 SSL 解包 TCP 异常流量处理,如SYN flood HTTP 流量均衡化 HTTP Fix Tool 解决http 头缺失、错误等 Content Based Switch ,基于内容端口复用 Traffic Regular 流量规则化,限流限速 DDOS 防火墙 Server Network Traffic Http Compreess offloader http解压缩 HAProxy 支持的负载均衡算法 HAProxy支持的负载均衡算法以及适用的场景如下:
阅读全文

haproxy+keepalived实现高可用集群搭建

HAproxy简介

阅读全文

expect 100 continue

100-continue 是用于客户端在发送 post 数据给服务器时,征询服务器情况,看服务器是否处理 post 的数据,如果不处理,客户端则不上传 post 是数据,反之则上传。在实际应用中,通过 post 上传大数据时,才会使用到 100-continue 协议。 客户端策略 如果客户端有 post 数据要上传,可以考虑使用 100-continue 协议。在请求头中加入 {“Expect”:”100-continue”} 如果没有 post 数据,不能使用 100-continue 协议,因为这会让服务端造成误解。 并不是所有的 Server 都会正确实现 100-continue 协议,如果 Client 发送 Expect:100-continue 消息后,在 timeout 时间内无响应,Client 需要立马上传 post 数据。 有些 Server 会错误实现 100-continue 协议,在不需要此协议时返回 100,此时客户端应该忽略。 服务端策略 正确情况下,收到请求后,返回 100 或错误码。 如果在发送 100-continue 前收到了 post 数据(客户端提前发送 post 数据),则不发送 100 响应码(略去)。 参考RFC文档:http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3

阅读全文

Jenkins和SonarQube集成

Jenkins与SonarQube 集成插件的安装与配置 Jenkins 是一个支持自动化框架的服务器,我们这里不做详细介绍。Jenkins 提供了相关的插件,使得 SonarQube 可以很容易地集成 ,登陆 jenkins,点击”Manage Jenkins”,选择“Mange Plugins”点击“Avzilable”,搜索“Sonar”选中“SonarQube Scanner for Jenkins”点击安装插件,安装后好如下图: 点击”Manage Jenkins”,选择“Configure System”将SonarQube server的信息填入,点击保存。如图: 在jenkinse服务器上下载sonar-scanner,下载地址:https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip

阅读全文

sonarQube之平台搭建及sonar-scanner扫描

SonarQube为静态代码检查工具,采用B/S架构,帮助检查代码缺陷,改善代码质量,提高开发速度,通过插件形式,可以支持Java、C、C++、JavaScripe等等二十几种编程语言的代码质量管理与检测。 通过客户端插件分析源代码,sonar客户端可以采用IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式,并通过各种不同的分析机制对项目源代码进行分析和扫描,并把分析扫描后的结果上传到sonar的数据库,通过sonar web界面对分析结果进行管理 架构图 可以从七个维度检测代码质量: (1)复杂度分布(complexity):代码复杂度过高将难以理解 (2) 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方 (3) 单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况 (4) 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范 (5) 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读 (6) 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug (7) 结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度 SonarQube安装 搭建分两大步:服务端跟客户端 服务端 ◆进入条件: 1、准备Java环境,这里略去配置 2、需要安装MySQL (支持数据库种类见sonar.properties),这里略去配置 3、sonar https://docs.sonarqube.org ◆数据库配置: 1、创建sonar数据库 2、选择conf/sonar.properties文件,配置数据库设置,默认已经提供了各类数据库的支持,这里选择MySQL数据库,默认已经准备了支持各种数据库,只需将MySQL注释部分去掉,顺便改了sonarQube的端口sonar.web.port=1011 sonar.jdbc.url=jdbc:mysql://localhost:1010/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance sonar.jdbc.driver=com.mysql.jdbc.Driver sonar.jdbc.username=root sonar.jdbc.password=root ◆sonar 将下载的soar安装包后,解压,随意放置一个地方 注:JDK的环境和系统环境,要对应,我是windows系统,JDK位64位,选windows-x86-64 进入bin目录后,点击SonarStart.bat,页面输入http://localhost:1011/,进入页面,配置成功 客户端 前面已经说了客户端可以通过IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式进行扫描分析,这一节先记录Sonar-Scanner扫描 ◆下载sonar-scanner解压,将bin文件加入环境变量path中如我的路径E:\sonar\sonar-scanner\bin将此路径加入path中 ◆修改sonar scanner配置文件, conf/sonar-scanner.properties。根据数据库使用情况进行取消相关的注释即可,同时需要添加数据库用户名和密码信息,即配置要访问的sonar服务和mysql服务器地址 ◆创建sonar-project.properties文件,以java工程为例在工程根目录下新建立一个sonar-project.properties配置文件

阅读全文

launchctl

launchctl是一个统一的服务管理框架,可以启动、停止和管理守护进程、应用程序、进程和脚本等。 launchctl是通过配置文件来指定执行周期和任务的。 编写plist文件 launchctl 将根据plist文件的信息来启动任务。 plist脚本一般存放在以下目录:

阅读全文

tcc 分布式事务

两阶段提交(Two Phase Commit,下文简称2PC),简单的说,是将事务的提交操作分成了prepare、commit两个阶段。其事务处理方式为: 1、 在全局事务决定提交时,a)逐个向RM发送prepare请求;b)若所有RM都返回OK,则逐个发送commit请求最终提交事务;否则,逐个发送rollback请求来回滚事务; 2、 在全局事务决定回滚时,直接逐个发送rollback请求即可,不必分阶段。

  • 需要注意的是:2PC机制需要RM提供底层支持(一般是兼容XA),而TCC机制则不需要。
阅读全文

git

$ git clone git@git.xxxx.git Cloning into ‘intelligent-ranking’… fatal: cannot run ssh: No such file or directory fatal: unable to fork 查看用户主目录,确实没有对应的 .ssh 目录。 解决方案1:openssh 进行安装 解决方案2:没有装ssh命令,所以git地址得用http方式不能用git开头的。 $ git clone https://git.xxxxx git中ssh与https究竟有何不同 1.clone项目:使用ssh方式时,首先你必须是该项目的管理者或拥有者,并且需要配置个人的ssh key。而对于使用https方式来讲,就没有这些要求。 2.push:在使用ssh方式时,是不需要验证用户名和密码,如果你在配置ssh key时设置了密码,则需要验证密码。而对于使用https方式来讲,每次push都需要验证用户名和密码。

阅读全文

xterm.js tty.js 基于浏览器的终端模拟器

tty.js https://github.com/chjj/tty.js/ xterm.js https://github.com/xtermjs/xterm.js https://xtermjs.org/ pty.js https://github.com/chjj/pty.js 需要了解它的工作原理。

阅读全文

gorpc

十多年来,谷歌一直使用一个叫做Stubby的通用RPC基础框架,用它来连接在其数据中心内和跨数据中心运行的大量微服务。其内部系统早就接受了如今越来越流行的微服务架构。拥有一个统一的、跨平台的RPC的基础框架,使得服务的首次发行在效率、安全性、可靠性和行为分析上得到全面提升,这是支撑这一时期谷歌快速增长的关键。

阅读全文

HAProxy

apache、nginx之类的反向代理(转发)功能,通常只能用于http协议,其它协议就不好使了(注:nginx据说商业版的,支持tcp协议了)。

阅读全文

Nutch

Nutch是一个开源Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。 Nutch的组成: 爬虫crawler和查询searcher。Crawler主要用于从网络上抓取网页并为这些网页建立索引。Searcher主要利用这些索引检索用户的查找关键词来产生查找结果。两者之间的接口是索引,所以除去索引部分,两者之间的耦合度很低。 Crawler和Searcher两部分尽量分开的目的主要是为了使两部分可以分布式配置在硬件平台上,例如将Crawler和Searcher分别放在两个主机上,这样可以提升性能 Nutch的目标:

阅读全文

ldap 轻量目录访问协议

  1. 目录服务 目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。
阅读全文

查看某行代码的git修改历史

使用: ~/gitEditHis.sh file code

1
2
3
4
5
6
7
8
9
 #!/bin/bash
version=`git log $1  |grep commit |awk '{print $2}' `
for i in $version;
do
 echo $i ;
 git checkout $i;
git blame $1  |grep $2;
 done
git checkout master
阅读全文

mergely_CodeMirror_DiffMatchPatch前端文本diff

CodeMirror CodeMirror Github: https://github.com/codemirror/CodeMirror CodeMirror Demo: http://codemirror.net/demo/merge.html

阅读全文

ifconfig

ifconfig是linux中用于显示或配置网络设备(网络接口卡)的命令,英文全称是network interfaces configuring。配置网卡的IP地址语法例:ifconfig eth0 192.168.0.1 netmask 255.255.255.0 系统命令编辑 Linux命令:ifconfig 语法 ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<硬件地址>] [media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>] [-pointopoint<地址>] 补充说明 补充说明:ifconfig可设置网络设备的状态,或是显示当前的设置。 参数 参 数: [网络设备] 网络设备的名称。 down 关闭指定的网络设备。 up 启动指定的网络设备。 -arp 打开或关闭指定接口上使用的ARP协议。前面加上一个负号用于关闭该选项。 -allmuti 关闭或启动指定接口的无区别模式。前面加上一个负号用于关闭该选项。 -promisc 关闭或启动指定网络设备的promiscuous模式。前面加上一个负号用于关闭该选项。 add<地址> 设置网络设备IPv6的IP地址。 del<地址> 删除网络设备IPv6的IP地址。 media<网络媒介类型> 设置网络设备的媒介类型。 mem_start<内存地址> 设置网络设备在主内存所占用的起始地址。 metric<数目> 指定在计算数据包的转送次数时,所要加上的数目。 mtu<字节> 设置网络设备的MTU。 netmask<子网掩码> 设置网络设备的子网掩码。 tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址。 -broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理。 -pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能。 网卡命令 无论是Linux 自动安装还是我们手工安装,Linux 都会向你询问有关网络的问题并配置相关的软件。这个用于配置网卡的基本命令就是ifconfig。 在执行ifconfig 命令后,系统将在内核表中设置必要的参数,这样Linux 就知道如何与网络上的网卡通信。ifconfig 命令有以下两种格式: ※ifconfig [interface] ※ifconfig interface [aftype] option | address … ifconfig 的第一种格式(或使用不带任何参数的ifconfig 命令)可以用来查看当前系统的网络配置情况。 在刚刚安装完系统之后,实际上是在没有网卡或者网络连接的情况下使用Linux,但通过ifconfig 可以使用回绕方式工作,使计算机认为自己工作在网络上。 下面我们运行一下ifconfig 命令,不带参数的ifconfig 命令可以显示当前启动的网络接口,其输出结果为: [root@machine1 /sbin]#ifconfig eth0 Link encap:Ethernet HWaddr 52:54:AB:DD:6F:61 inet addr:210.34.6.89 Bcast:210.34.6.127 Mask:255.255.255.128 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:46299 errors:0 dropped:0 overruns:0 frame:189 TX packets:3057 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 Interrupt:5 Base address:0xece0 lo Link encap:Local Loopback inet addr:127.0.0.1Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:3924 Metric:1 RX packets:44 errors:0 dropped:0 overruns:0 frame:0 TX packets:44 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 其中以eth0 为首的部分是本机的以太网卡配置参数,这里显示了网卡的设备名/dev/eth0 和硬件的MAC 地址52:54:AB:DD:6F:61,MAC 地址是生产厂家定的,每个网卡拥有的唯一地址。 不过我们可以手工改动网卡的MAC 地址,只要我们在/etc/rc.d/init.d/中的network 中加入: ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx Jiania 解说 注: eth0,eth1,eth2,代表网卡一,网卡二,网卡三 hw 代表hardware 硬件意思 ether 代表ethernet以太网的意思 然后重启,此时再用ifconfig 命令查看一下,我们就会发现网卡的MAC 地址已经变成xx:xx:xx:xx:xx:xx了。 配置网卡 配置网卡的IP地址 ifconfig eth0 192.168.0.1 netmask 255.255.255.0 在eth0上配置上192.168.0.1 的IP地址及24位掩码。若想再在eth0上在配置一个192.168.1.1/24 的IP地址怎么办?用下面的命令 ifconfig eth0:0 192.168.1.1 netmask 255.255.255.0 这时再用ifconifg命令查看,就可以看到两个网卡的信息了,分别为:eth0和eth0:0.若还想再增加IP,那网卡的命名就接着是:eth0:1、eth0:2……想要几个就填几个。ok! 配置网卡的硬件地址 ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx就将网卡的硬件地址更改了,此时你就可以骗过局域网内的IP地址绑定了。 将网卡禁用 ifconfig eth0 down 将网卡启用 ifconfig eth0 up ifconfig 命令的功能很强大,还可以设置网卡的MTU,混杂模式等。

阅读全文

subnet_mask 子网掩码

子网掩码(subnet mask)是每个使用互联网的人必须要掌握的基础知识,只有掌握它,才能够真正理解TCP/IP协议的设置。 子网掩码——屏蔽一个IP地址的网络部分的“全1”比特模式。对于A类地址来说,默认的子网掩码是255.0.0.0;对于B类地址来说默认的子网掩码是255.255.0.0;对于C类地址来说默认的子网掩码是255.255.255.0。 利用子网掩码可以把大的网络划分成子网,即VLSM(可变长子网掩码),也可以把小的网络归并成大的网络即超网。 子网掩码的设定必须遵循一定的规则。与二进制IP地址相同,子网掩码由1和0组成,且1和0分别连续。子网掩码的长度也是32位,左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。这样做的目的是为了让掩码与ip地址做按位与运算时用0遮住原主机数,而不改变原网络段数字,而且很容易通过0的位数确定子网的主机数(2的主机位数次方-2,因为主机号全为1时表示该网络广播地址,全为0时表示该网络的网络号,这是两个特殊地址)。只有通过子网掩码,才能表明一台主机所在的子网与其他子网的关系,使网络正常工作。 子网掩码通常有以下2种格式的表示方法: 1. 通过与IP地址格式相同的点分十进制表示 如:255.0.0.0 或255.255.255.128 2. 在IP地址后加上”/”符号以及1-32的数字,其中1-32的数字表示子网掩码中网络标识位的长度 如:192.168.1.1/24 的子网掩码也可以表示为255.255.255.0

阅读全文

gateway

网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同层–应用层。 网关(Gateway)又称网间连接器、协议转换器。默认网关在网络层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。 【说明:由于历史的原因,许多有关TCP/IP的文献曾经把网络层使用的路由器称为网关,在今天很多局域网采用都是路由来接入网络,因此通常指的网关就是路由器的IP!】 在OSI中,网关有两种:一种是面向连接的网关,一种是无连接的网关。当两个子网之间有一定距离时,往往将一个网关分成两半,中间用一条链路连接起来,我们称之为半网关。 按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是最常用的,在这里我们所讲的“网关”均指TCP/IP协议下的网关。 那么网关到底是什么呢?网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢?网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。 在和 Novell NetWare 网络交互操作的上下文中,网关在 Windows 网络中使用的服务器信息块 (SMB) 协议以及NetWare网络使用的 NetWare 核心协议 (NCP) 之间起着桥梁的作用。网关也被称为 IP路由器。 手动设置适用于电脑数量比较少、TCP/IP参数基本不变的情况 自动设置就是利用DHCP服务器来自动给网络中的电脑分配IP地址、子网掩码和默认网关。这样做的好处是一旦网络的默认网关发生了变化时,只要更改了DHCP服务器中默认网关的设置,那么网络中所有的电脑均获得了新的默认网关的IP地址。这种方法适用于网络规模较大、TCP/IP参数有可能变动的网络。另外一种自动获得网关的办法是通过安装代理服务器软件(如MS Proxy)的客户端程序来自动获得,其原理和方法和DHCP有相似之处。 协议 (GGP) 核心网关为了正确和高效地路由报文需要知道Internet其他部分发生的情况,包括路由信息和子网特性。 网关关系及图片说明 网关关系及图片说明 当一个网关处理重负载而使速度特别慢,并且这个网关是访问子网的惟一途径时,通常使用这种类型的信息,网络中的其他网关能剪裁交通流量以减轻网关的负载。 GGP主要用于交换路由信息,不要混淆路由信息(包括地址、拓扑和路由延迟细节)和作出路由决定的算法。路由算法在网关内通 常是固定的且不被GGP改变。核心网关之间通过发送GGP信息,并等待应答来通信,之后如果收到含特定信息的应答就更新路由表。 注意GGP的最新改进SPREAD已经用于Internet,但它还不如GGP普及。GGP被称为向量-距离协议。要想有效工作,网关必须含有互联网络上有关所有网关的完整信息。否则,计算到一个目的地的有效路由将是不可能的。因为这个原因,所有的核心网关维护一张Internet上所有核心网关的列表。这是一个相当小的表,网关能容易地对其进行处理。 外部 (EGP) 外部网关协议用于在非核心的相邻网关之间传输信息。非核心网关包含互联网络上所有与其直接相邻的网关的路由信息及其所连机器信息,但是它们不包含Internet上其他网关的信息。对绝大多数EGP而言,只限制维护其服务的局域网或广域网信息。这样可以防止过多的路由信息在局域网或广域网之间传输。EGP强制在非核心网关之间交流路由信息。 由于核心网关使用GGP,非核心网关使用EGP,而二者都应用在Internet上,所以必须有某些方法使二者彼此之间能够通信。Internet使任何自治(非核心)网关给其他系统发送“可达”信息,这些信息至少要送到一个核心网关。如果有一个更大的自治网络,常常认为有一个网关来处理这些可达信息。 和GGP一样,EGP使用一个查询过程来让网关清楚它的相邻网关并不断地与其相邻者交换路由和状态信息。EGP是状态驱动的协议,意思是说它依赖于一个反映网关情况的状态表和一组当状态表项变化时必须执行的一组操作。 内部 (IGP) 有几种内部网关协议可用,最流行的是RIP和HELLO,另一个协议称为开放式最短路径优先协议(OSPF),这些协议没有一个是占主导地位的,但是RIP可能是最常见的IGP协议。选择特定的IGP以网络体系结构为基础。RIP和HELLO协议都是计算到目的地的距离,它们的消息包括机器标识和到机器的距离。 一般来讲,由于它们的路由表包含很多项,因此消息比较长。RIP和HELLO一直维护相邻网关之间的连接性以确保机器是活跃的。路由信息协议使用广播技术。意思是说网关每隔一定时间要把路由表广播给其他网关。这也是RIP的一个问题,因为这会增加网络流量,降低网络性能。HELLO协议与RIP的不同之处在于HELLO使用时间而不是距离作为路由因素。这要求网关对每条路由有合理的准确时间信息。由于这个原因,所以HELLO协议依赖于时钟同步消息。 开放式最短路径优先协议是由Internet工程任务组开发的协议,希望它能成为居于主导地位的IGP。用“最短路径”来描述协议的路由过程不准确。更好一些的名字是“最优路径”, 这其中要考虑许多因素来决定到达目的地的最佳路由。 应用 应用网关在应用层上进行协议转换。例如,一个主机执行的是ISO电子邮件标准,另一个主机执行的是Internet 电子邮件标准,如果这两个主机需要交换电子邮件,那么必须经过一个电子邮件网关进行协议转换,这个电子邮件网关是一个应用网关。NCP是工作在OSI第七层的协议,用以控制客户站和服务器间的交互作用,主要完成不同方式下文件的打开、关闭、读取功能。 信令网关,中继网关,还有接入网关: 信令网关SG,主要完成7号信令网与IP网之间信令消息的中继,在3G初期,对于完成接入侧到核心网交换之间的消息的转接(3G之间的RANAP消息,3G与2G之间的BSSAP消息),另外还能完成2G的MSC/GMSC与软交换机之间ISUP消息的转接。 中继网关又叫IP网关,同时满足电信运营商和企业需求的VoIP设备。中继网关(IP网关)由基于中继板和媒体网关板建构,单板最多可以提供128路媒体转换,两个以太网口,机框采用业界领先的CPCI标准,扩容方便具有高稳定性、高可靠性、高密度、容量大等特点. 接入网关是基于IP的语音/传真业务的媒体接入网关,提供高效、高质量的话音服务,为运营商、企业、小区、住宅用户等提供VoIP解决方案。 除此之外,网关还可以分为:协议网关、应用网关和安全网关 协议网关 协议网关通常在使用不同协议的网络区域间做协议转换。这一转换过程可以发生在OSI参考模型的第2层、第3层或2、3层之间。但是有两种协议网关不提供转换的功能:安全网关和管道。由于两个互连的网络区域的逻辑差异,安全网关是两个技术上相似的网络区域间的必要中介。如私有广域网和公有的因特网。 应用网关 应用网关是在使用不同数据格式间翻译数据的系统。典型的应用网关接收一种格式的输入,将之翻译, 然后以新的格式发送。输入和输出接口可以是分立的也可以使用同一网络连接。 应用网关也可以用于将局域网客户机与外部数据源相连,这种网关为本地主机提供了与远程交互式应用 网关 网关 的连接。将应用的逻辑和执行代码置于局域网中客户端避免了低带宽、高延迟的广域网的缺点,这就使得客户端的响应时间更短。应用网关将请求发送给相应的计算机,获取数据,如果需要就把数据格式转换成客户机所要求的格式。 安全网关 安全网关是各种技术有趣的融合,具有重要且独特的保护作用,其范围从协议级过滤到十分复杂的应用级过滤。 可以说,网关是一种充当转换重任的计算机系统或设备。在使用不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同时,网关也可以提供过滤和安全功能。大多数网关运行在OSI 7层协议的顶层——应用层。

阅读全文

default_gateway 默认网关

一个用于 TCP/IP 协议的配置项,是一个可直接到达的 IP 路由器的 IP 地址。配置默认网关可以在 IP 路由表中创建一个默认路径。 一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。现在主机使用的网关,一般指的是默认网关。 一台电脑的默认网关是不可以随随便便指定的,必须正确地指定,否则一台电脑就会将数据包发给不是网关的电脑,从而无法与其他网络的电脑通信。默认网关的设定有手动设置和自动设置两种方式 网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。网络B向网络A转发数据包的过程也是如此。所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢?网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。 自动设置就是利用DHCP服务器来自动给网络中的电脑分配IP地址、子网掩码和默认网关。这样做的好处是一旦网络的默认网关发生了变化时,只要更改了DHCP服务器中默认网关的设置,那么网络中所有的电脑均获得了新的默认网关的IP地址。这种方法适用于网络规模较大、TCP/IP参数有可能变动的网络。 另外一种自动获得网关的办法是通过安装代理服务器软件(如MS Proxy)的客户端程序来自动获得,其原理和方法和DHCP有相似之处。 如果您有多个接口并为每个接口配置了一个默认网关,那么默认情况下 TCP/IP 将根据接口速度自动计算接口跃点数。此接口跃点数将成为所配置的默认网关的路由表中的默认路由的跃点数。最高速度的接口具有默认路由的最低跃点数。这样,只要在多个接口上配置多个默认网关,就会使用最快速度的接口将通信转发到其默认网关。 如果相同速度的多个接口具有相同的最低接口跃点数,那么根据绑定顺序,将使用第一个网络适配器的默认网关。如果第一个网络适配器不可用,则使用第二个网络适配器的默认网关。 在 TCP/IP 的早期版本中,多个默认网关都具有设置为1的默认路由跃点数,并且使用的默认网关将取决于接口顺序。有时,这会给确定TCP/IP协议正在使用哪一个默认网关带来一些困难。 默认情况下,接口跃点数的自动确定已经通过“Internet 协议(TCP/IP)”协议高级属性的“IP 设置”选项卡上的“自动跃点计数”复选框启用。 可以禁用接口跃点数的自动确定并键入新的接口跃点数。 网关技术 现行的IPV4的IP地址是32位的,根据头几位再划分为A、B、C三类地址;但由于INTERNET的迅猛发展,IP资源日渐枯竭,可供分配的IP地越来越少,跟一日千里的INTERNET发展严重冲突,在IPV6还远未能全面升级的情况下,惟有以代理服务器的方式,实行内部网地址跟公网地址进行转化而实现接入INTERNET。 中介作用的代理服务器就是一个网关,也就是这个网关带给现阶段的多媒体通讯系统无尽的烦恼。在IP资源可怜的情况下,惟有以网关甚至多层网关的方式接入宽带网, 因为多媒体通讯系统的协议如H.323等要进行业务的双方必须有一方有公网的IP地址,但是现在的宽带有几个用户能符合这个要求?microsoft的NETMEETING等等多媒体通讯系统就是处于这种尴尬的位置;跨网关成为头疼的难题。

阅读全文

bridge 网桥 Linux下的虚拟网桥

网桥(Bridge)是早期的两端口二层网络设备,用来连接不同网段。网桥的两个端口分别有一条独立的交换信道,不是共享一条背板总线,可隔离冲突域。网桥比集线器(Hub)性能更好,集线器上各端口都是共享同一条背板总线的。后来,网桥被具有更多端口、同时也可隔离冲突域的交换机(Switch)所取代。 网桥(Bridge)像一个聪明的中继器。中继器从一个网络电缆里接收信号, 放大它们,将其送入下一个电缆。相比较而言,网桥对从关卡上传下来的信息更敏锐一些。网桥是一种对帧进行转发的技术,根据MAC分区块,可隔离碰撞。网桥将网络的多个网段在数据链路层连接起来。 网桥也叫桥接器,是连接两个局域网的一种存储/转发设备,它能将一个大的LAN分割为多个网段,或将两个以上的LAN互联为一个逻辑LAN,使LAN上的所有用户都可访问服务器。 扩展局域网最常见的方法是使用网桥。最简单的网桥有两个端口,复杂些的网桥可以有更多的端口。网桥的每个端口与一个网段相连。 网桥将两个相似的网络连接起来,并对网络数据的流通进行管理。它工 作于数据链路层,不但能扩展网络的距离或范围,而且可提高网络的性能、可靠性和安全性。网络1 和网络2 通过网桥连接后,网桥接收网络1 发送的数据包,检查数据包中的地址,如果地址属于网络1 ,它就将其放弃,相反,如果是网络2 的地址,它就继续发送给网络2.这样可利用网桥隔离信息,将同一个网络号划分成多个网段(属于同一个网络号),隔离出安全网段,防止其他网段内的用户非法访问。由于网络的分段,各网段相对独立(属于同一个网络号),一个网段的故障不会影响到另一个网段的运行。 网桥可以是专门硬件设备,也可以由计算机加装的网桥软件来实现,这时计算机上会安装多个网络适配器(网卡)。 网桥的功能在延长网络跨度上类似于中继器,然而它能提供智能化连接服务,即根据帧的终点地址处于哪一网段来进行转发和滤除。网桥对站点所处网段的了解是靠“自学习”实现的,有透明网桥、转换网桥、封装网桥、源路由选择网桥 网桥的存储和转发功能与中继器相比有优点也有缺点,其优点是: 使用网桥进行互连克服了物理限制,这意味着构成LAN 的数据站总数和网段数很容易扩充。 网桥纳入存储和转发功能可使其适应于连接使用不同MAC 协议的两个LAN,因而构成一个不同LAN 混连在一起的混合网络环境。 网桥的中继功能仅仅依赖于MAC 帧的地址,因而对高层协议完全透明。 网桥将一个较大的LAN 分成段,有利于改善可靠性、可用性和安全性。 网桥的主要缺点是:由于网桥在执行转发前先接收帧并进行缓冲,与中继器相比会引入更多时延。由于网桥不提供流控功能,因此在流量较大时有可能使其过载,从而造成帧的丢失。 网桥的优点多于缺点正是其广泛使用的原因。 网桥工作在数据链路层,将两个LAN连起来,根据MAC地址来转发帧,可以看作一个“低层的路由器”(路由器工作在网络层,根据网络地址如IP地址进行转发)。 远程网桥通过一个通常较慢的链路(如电话线)连接两个远程LAN,对本地网桥而言,性能比较重要,而对远程网桥而言,在长距离上可正常运行是更重要的。 网桥优点 1、过滤通信量。网桥可以使用局域网的一个网段上各工作站之间的信息量局限在本网段的范围内,而不会经过网桥溜到其他网段去。 2、扩大了物理范围,也增加了整个局域网上的工作站的最大数目。 3、可使用不同的物理层,可互连不同的局域网。 4、提高了可靠性。如果把较大的局域网分割成若干较小的局域网,并且每个小的局域网内部的信息量明显地高于网间的信息量,那么整个互连网络的性能就变得更好。 网桥缺点 1、由于网桥对接收的帧要先存储和查找站表,然后转发,这就增加了时延。 2、在MAC子层并没有流量控制功能。当网络上负荷很重时,可能因网桥缓冲区的存储空间不够而发生溢出,以致产生帧丢失的现象。 3、具有不同MAC子层的网段桥接再一起时,网桥在转发一个帧之前,必须修改帧的某些字段的内容,以适合另一个MAC子层的要求,增加时延。 4、网桥只适合于用户数不太多(不超过几百个)和信息量不太大的局域网,否则有时会产生较大的广播风暴。 [1] 特性 数据链路层互联的设备是网桥(bridge),在网络互联中它起到数据接收、地址过滤与数据转发的作用,用来实现多个网络系统之间的数据交换。 网桥的基本特征 1.网桥在数据链路层上实现局域网互连; 2.网桥能够互连两个采用不同数据链路层协议、不同传输介质与不同传输速率的网络 3.网桥以接收、存储、地址过滤与转发的方式实现互连的网络之间的通信; 4.网桥需要互连的网络在数据链路层以上采用相同的协议 5.网桥可以分隔两个网络之间的通信量,有利于改善互连网络的性能与安全性。

阅读全文

wins

WINS是Windows Internet Name Service,即Windows网络名称服务。它提供一个分布式数据库,能在路由网络的环境中动态地对IP地址和NETBios名的映射进行注册与查询。 WINS用来登记NetBIOS计算机名,并在需要时将它解析成为IP地址。WINS数据库是动态更新的。 WINS提供一个分布式数据库,它的作用是在路由网络的环境中对IP地址和NetBIOS名的映射进行注册与查询。 这可能是解决NetBIOS名与IP地址之间转换的比较合适的一种方法,对于比较复杂的网络如互联网更是如此。 LMHOSTS文件在广播式系统中有一点缺点,它是基于广播的,所以对网络的通信量是一个沉重的负担,这个问题并未得到解决。有人设计了通过路由协议进行单播式的动作对NetBIOS名字进行注册和解析。如果采用这个协议,那就可以解决了广播的问题,也就没有必要使用LMHOSTS文件了,使动态配置的灵活性与方便性得到重新体现,使得这个系统可以和DHCP协议无缝连接。我们可以想象,当DHCP给一台计算机分配了一个地址后,这个更新可以直接在WINS数据库中体现。用户和管理员都不需要进行任何额外的工作,十分方便。WINS协议可以和NBNS一起工作,但是因为WINS数据库备份的问题没有解决,因为它不能和别的NetBIOS名字服务器一起工作,数据不能在WINS服务器和非WINS服务器间进行复制。 WINS是基于客户服务器模型的,它有两个重要的部分,WINS服务器和WINS客户。我们首先看一下服务器,它主要负责处理由客户发来名字和IP地址的注册和解除注册信息。如果WINS客户进行查询时,服务器会返回当前查询名下的IP地址。服务器还负责对数据库进行备份。而客户主要在加入或离开网络时向WIN服务器注册自己的名字或解除注册。当然了,在进行通信的时候它也向服务器进行查询,以确定远程计算机的地址。 我们使用WINS的好处在什么地方呢?WINS就是以集中的方式进行IP地址和计算机名称的映射,这种方式可以简化网络的管理,减少网络内的通信量,但是这种集中式的管理方式可以和星型结构相比,我们有理由怀疑它可以会成为网络的瓶颈。在本地的域控制器不在路由器管理网段的另一段时,客户仍然可以游览远程域,在集中处理的时候,数据都会集中于这个服务器中,一定要注意不要让这个节点失败。 WINS的另外一个重要特点是可以和DNS进行集成。这使得非WINS客户通过DNS服务器解析获得NetBIOS名。这对于网络管理提供了方便,也为异种网的连接提供了另一种手段。我们可以看到,使用集中管理可以使管理工作大大简化,但是却使网络拓朴结构出现了中心结点,这是一个隐性的瓶颈,而如果采用分布式的管理方式,却有个一致性的问题,也就是如果一个服务器知道了这个改变,而另一个不知道,那数据就不一致了,这时候要有一些复杂的算法来解决这一问题,两台服务器要想知道对方的情况,不可能不进行通信,也就无形中加重了网络负担。网络就是这样,集中起来就加大了单机的处理压力,而分布了就增加了网络传输量,天下没有十全十美的事情。

阅读全文

routing_table 路由表

路由表是指路由器中保存着的各种传输路径的相关数据,供路由选择时使用。路由表中保存着子网的标志信息、网上路由器的个数和下一个路由器的名字等内容。路由表可以是由系统管理员固定设置好的,也可以由系统动态修改,可以由路由器自动调整,也可以由主机控制。 由系统管理员事先设置好固定的路由表称之为静态(static)路由表,一般是在系统安装时就根据网络的配置情况预先设定的,它不会随未来网络结构的改变而改变。 在动态路由中,管理员不再需要与静态路由一样,手工对路由器上的路由表进行维护,而是在每台路由器上运行一个路由协议。这个路由协议会根据路由器上的接口的配置(如IP地址的配置)及所连接的链路的状态,生成路由表中的路由表项。 动态路由协议通过路由信息的交换生成并维护转发引擎所需的路由表,当网络拓扑结构改变时动态路由协议可以自动更新路由表,并负责决定数据传输最佳路径。常见的动态路由协议有RIP、OSPF、IS-IS、BGP等 [1] 。 路由表中通常包含以下信息: Dest:目的逻辑网络或子网地址。 Mask:目的逻辑网络或子网的掩码。 Gw:与之相邻的路由器的端口地址,即该路由的下一跳IP地址。 Interface:学习到该路由条目的接口,也是数据包离开路由器去往目的地将经过的接口。 Owner:路由来源,表示该路由信息是怎样学习到的。 Pri:路由的管理距离,即优先级,决定了来自不同路由来源的路由信息的优先权。 Metric:度量值,表示每条可能路由的代价,度量值最小的路由就是最佳路由。Metric只有当同一种动态路由协议,发现多条到达同一目的网段路由的时候,才有比较性。不同路由协议的Metric不具有可比性。 路由来源(Owner)有三类,分别是直连路由(direct)、静态路由(static)、动态路由。 动态路由Owner信息为RIP、OSPF、IS-IS、BGP等,由动态路由协议生成,能够根据网络的拓扑变化调整相应的路由信息,适应大规模和复杂的网络。 对于动态路由表,当你去掉一条连线时,它会自动去掉其路由。路由器的每一个接口对应不同网络,而一条连接两个路由器连线的两个端点IP应该属于同一网络。 设置的IP地址时,如果路由器的其它端口已有这个网络了,则提示已有这个网络,并显示对应的端口。 特点: 1、节点增删时工作量少。 2、网络拓扑变化,协议自动调整。 3、配置不易出错。 4、对网络扩容性好。 5、需要占用路由器资源。

阅读全文

routing_protocol 路由协议

常见路由协议介绍 常见的路由协议有RIP、IGRP(Cisco私有协议)、EIGRP(Cisco私有协议)、OSPF、IS-IS、BGP等。 RIP、IGRP、EIGRP、OSPF、IS-IS是内部网关协议(IGP),适用于单个ISP的统一路由协议的运行,一般由一个ISP运营的网络位于一个AS(自治系统)内,有统一的AS number(自治系统号)。BGP是自治系统间的路由协议,是一种外部网关协议,多用于不同ISP之间交换路由信息,以及大型企业、政府等具有较大规模的私有网络。 RIP RIP“路由信息协议(Route Information Protocol)”的简写,主要传递路由信息,通过每隔30秒广播一次路由表,维护相邻路由器的位置关系,同时根据收到的路由表信息计算自己的路由表信 息。RIP是一个距离矢量路由协议,最大跳数为16跳,16跳以及超过16跳的网络则认为目标网络不可达。此协议通常用在网络架构较为简单的小型网络环境.现在分为RIPv1和RIPv2两个版本,后者支持VLSM技术以及一系列技术上的改进。RIP的收敛速度较慢。 PS:路由收敛指网络的拓扑结构发生变化后,路由表重新建立到发送再到学习直至稳定,并通告网络中所有相关路由器都得知该变化的过程。也就是网络拓扑变化引起的通过重新计算路由而发现替代路由的行为。 OSPF OSPF协议是“开放式最短路径优先(Open Shortest Path First)”的缩写,属于链路状态路由协议。OSPF提出了“区域(area)”的概念,每个区域中所有路由器维护着一个相同的链路状态数据库 (LSDB)。区域又分为骨干区域(骨干区域的编号必须为0)和非骨干区域(非0编号区域),如果一个运行OSPF的网络只存在单一区域,则该区域可以是 骨干区域或者非骨干区域。如果该网络存在多个区域,那么必须存在骨干区域,并且所有非骨干区域必须和骨干区域直接相连。OSPF利用所维护的链路状态数据 库,通过最短生成树算法(SPF算法)计算得到路由表。OSPF的收敛速度较快。由于其特有的开放性以及良好的扩展性,目前OSPF协议在各种网络中广泛部署。 IS-IS IS-IS协议是Intermediate system to intermediate system(中间系统到中间系统)的缩写,属于链路状态路由协议。标准IS-IS协议是由国际标准化组织制定的ISO/IEC 10589:2002 所定义的,标准IS-IS不适合用于IP网络,因此IETF制 定了适用于IP网络的集成化IS-IS协议(Integrated IS-IS)。和OSPF相同,IS-IS也使用了“区域”的概念,同样也维护着一份链路状态数据库,通过最短生成树算法(SPF)计算出最佳路径。 IS-IS的收敛速度较快。集成化IS-IS协议是ISP骨干网上最常用的IGP协议。 IGRP IGRP协议是“内部网关路由协议(Interior Gateway Routing Protool)”的缩写,由Cisco于 二十世纪八十年代独立开发,属于Cisco私有协议。IGRP和RIP一样,同属距离矢量路由协议,因此在诸多方面有着相似点,如IGRP也是周期性的广 播路由表,也存在最大跳数(默认为100跳,达到或超过100跳则认为目标网络不可达)。IGRP最大的特点是使用了混合度量值,同时考虑了链路的带宽、 延迟、负载、MTU、可靠性5个方面来计算路由的度量值,而不像其他IGP协议单纯的考虑某一个方面来计算度量值。目前IGRP已经被Cisco独立开发的EIGRP协议所取代,版本号为12.3及其以上的Cisco IOS(Internetwork Operating System)已经不支持该协议,现在已经罕有运行IGRP协议的网络。EIGRP 由于IGRP协议的种种缺陷以及不足,Cisco开发了EIGRP协议(增强型内部网关路由协议)来取代IGRP协议。EIGRP属于高级距离矢量 路由协议(又称混合型路由协议),继承了IGRP的混合度量值,最大特点在于引入了非等价负载均衡技术,并拥有极快的收敛速度。EIGRP协议在 Cisco设备网络环境中广泛部署。 BGP 为了维护各个ISP的独立利益,标准化组织制定了ISP间的路由协议BGP。 BGP是“边界网关协议(Border Gateway Protocol)”的缩写,处理各ISP之间的路由传递。但是BGP运行在相对核心的地位,需要用户对网络的结构有相当的了解,否则可能会造成较大损失。 路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。 路由选择部分的核心是路由处理机,路由处理机可以根据选定的路由协议构造出路由表,同时经常或定期和相邻路由器交换路由信息来更新和维护自身的路由表。 分组转发部分包括一组输入端口、交换结构和一组输出端口。交换结构又称交换组织,它的作用就是根据转发表把收到的IP数据报从路由器合适的端口转发出去。交换结构可看成一个在路由器中的网络 WMN的动态性,多跳性使得传统的路由协议不能够很好的处理无线网状网中拓扑结构和链路状态的快速变化。 WMN由Ad hoc网络发展而来,Ad hoc网络重点在移动,而WMN重点在无线。目前主流的WMN路由协议也是从Ad hoc网络路由协议发展而来。主要包括三种类型的路由协议:先验式路由协议、反应式路由协议、混合式路由协议。 在先验式路由协议中,无论是否有通信需求,每个节点采用周期性的路由分组广播维护一张包含到达其他节点的路由信息的路由表,当检测到网络拓扑结构变化的时候,节点在网络中交换并更新路由表。源节点一旦要送分组,可以立即获得指向目的节点的路由。 这类的路由协议通常是通过修改现有的有线路由协议来适应 Ad Hoc无线网络要求,如通过修改路由信息协议(RIP)得到的目的节点序列距离矢量协议(DSDV)。 因此这种路由协议的时延较小,但是协议需要大量的路由控制报文路由,协议的开销较大。 常用的先验式路由协议有 DSDV,HSR,GSR,WRP等。 DSDV协议 DSDV协议的基本原理是:每一个节点维持一个到其它节点的路由表,表的内容为路由的“下一跳”节点。DSDV创新之处是为每一条路由设置一个序列号,序列号大的路由为优选路由,序列号相同时,跳数少的路由为优选路由。正常情况下,节点广播的序列号是单调递增的偶数,当节点B发现到节点D的路由(路由序列号为s)中断后,节点B就广播一个路由信息,告知该路由的序列号变为s+l,并把跳数设置为无穷大,这样,任何一个通过B发送信息的节点A的路由表中就包括一个无穷大的距离,这一过程直到A收到一个到达D的有效路由(路由序列号为s+1-1)为止。 使用分层次的路由选择方法,可将因特网的路由协议划分为: 内部网关协议IGPI(nterior Gateway Protocol):具体的协议有多种,如:RIP和OSPF等。 外部网关协议EGP(External Gateway Protocol):目前使用的协议就是BGP 下面我们分别介绍: 路由信息协议RIP(RoutingInformation Protocol) RIP采用距离向量算法,最大优点是简单。在实际使用中已经较少适用。RIP协议允许一条路径最多只能包含15个路由器。因此,“距离”等于16时即相当于不可达。可见RIP只适用于小型互联网。对于规模较大的网络应当使用OSPF协议。RIP不能在两个网络之间同时使用多条路由。RIP选择一条具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。RIP进程使用UDP的520端口来发送和接收RIP分组。RIP分组每隔30s以广播的形式发送一次,为了防止出现“广播风暴”,其后续的的分组将做随机延时后发送。在RIP中,如果一个路由在180s内未被刷,则相应的距离就被设定成无穷大,并从路由表中删除该表项。RIP分组分为两种:请求分组和响应分组。 RIP协议的特点是: 仅和相邻路由器交换信息 路由器交换的信息是当前本路由器所知道的全部信息,即自己的路由表 按照固定的时间间隔交换路由信息 RIP协议存在的一个问题是:当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。 开放最短路径优先OSPF(OpenShortest Path First) OSPF原理简单,实现复杂,使用了Dijkstra提出的最短路径算法SPF。 OSPF最主要特征是使用分布式链路状态协议,而不是像RIP那样的距离向量协议。和RIP协议相比,OSPF的三个要点和RIP都不一样。 1、 向本自治系统中所有路由器发送信息。这里使用的方法是洪泛法(Flooding) 洪泛法(Flooding) 在OSPF协议中,当链路状态发生变化时要用Flooding向所有路由器发送信息。 例如,源节点希望发送一段数据给目标节点。源节点首先通过网络将数据副本传送给它的每个邻居节点,每个邻居节点再将数据传送给各自的除发送数据来的节点之外的其他。如此继续下去,直到数据传送目标节点或者数据设定的生存期限为0为止。 2、 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息,“链路状态”包括本路由器和哪些路由器相邻,以及链路的一些度量信息。而RIP协议发送的是到所有路由器的距离和下一跳路由器。 3、 只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息。 由于各路由器之间频繁的交换路由信息,因此所有路由器最终都能建立一个链路状态数据库,这个数据库实际上就是全网的拓扑结构图。RIP协议中的每一个路由器虽然知道所有网络的距离以及下一跳路由器,但却不知道全网的拓扑结构(只有到了下一跳路由器,才能知道再下一跳应当怎样走)。 OSPF的更新过程收敛的快是其重要优点。(“收敛”就是在自治系统中所有的节点都得到正确的路由选择信息的过程) OSPF不用UDP而是直接用IP数据报传送(其IP数据报首部的协议字段值为89) OSPF共有以下5种分组类型: 1、问候(Hello)分组,用来发现和维持邻站的可达性。 2、数据库描述(Database Description)分组,向邻站发出自己链路状态数据库中所有链路状态项目的摘要信息。 3、链路状态请求(Link State Request)分组,像对方请求发送某些链路状态项目的详细信息。 4、链路状态更新(Link State Update)分组,用洪泛法对全网更新链路状态。 5、链路状态确认(Link State Acknowledgment)分组,对链路更新分组的确认。 为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫做区域。下图表示一个自治系统划分为4个区域。每个区域都有一个32位的区域标志符(用点分十进制表示) 当然,一个区域也不能太大,一个区域内的路由器最好不超过200个。 划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个自治系统,这就减少了整个网络上的通信量。 外部网关协议BGP BGP是不同AS(Area System)的路由器之间交换路由信息的协议。 边界网关协议BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。BGP采用了路径向量路由选择协议。 一般说来,两个BGP发言人都是通过一个共享网络连接起来的。一个BGP发言人要与其他自治系统的BGP发言人交换路由信息,就要先建立TCP连接(端口号为179),然后在此连接上交换BGP报文以建立BGP会话,利用BGP会话交换路由信息。 在RFC4271中规定了BGP-4的4种报文: 1、OPEN(打开)报文,用来与相邻的另一个BGP发言人建立关系,使通信初始化。 2、UPDATE(更新)报文,用来通告某一路由的信息,以及列出要撤销的多条路由。 3、KEEPALIVE(保活报文),用来周期性的证实邻站的连通性。 4、NOTIFICATION(通知)报文,用来发送检测到的差错。 在RFC2918中增加了ROUTER—REQUEST报文,用来请求对等端重新通告。 反应式路由协议 反应式路由协议又称为随选型路由协议或者按需路由协议。是专门针对移动自组织网络工作组MANET(Mobile Ad-hoc NETworks)环境提出来的。与表驱动路由协议相反,该类协议并不事先生成路由,而是仅在源节点需要时才这样做。因此,路由表信息是按需建立的,它可能仅仅是整个拓扑结构信息的一部分。 节点并不保存整个网络的及时准确的路由信息。当源节点要向目的节点发送报文时,源节点在网络中发起路由查找过程,找到相应的路由后,才开始发送报文。为了提高效率,节点可以将找到的路由保存在缓存中供后续发送使用。反应式路由协议按需路由的特点可以较好地适应节点移动较为频繁的无线网络环境,节点发生移动后,只需要更新需要发送数据的相关路径的路由信息即可。 混合式路由协议 混合式路由是将先验式路由协议和反应式路由协议两种路由方式的组合,在局部范围内使用先验式路由协议,维护准确的路由信息,并可以缩小路由控制消息传播的范围。当目标节点较远时,则使用反应式路由协议查找发现路由。ZRP协议就是混合式路由协议的代表。 ZRP协议是一种专为多变的通信环境(如可重构无线网络,RwN)设计的平铺式路由协议。在每个节点定义一个区域,此区域包含一些节点,这些节点的距离(也就是跳数)在一个限定的范围之内。这个距离被成为区域半径rzone。每一个节点只需要知道它的路由区域内的拓扑结构,而且其路由信息随着区域内的拓扑更新而更新。这样,尽管网络很大,但更新仅仅在局部区域进行。由于距离大于1,这样区域就有大量重叠。

阅读全文

router 路由协议

路由器提供了异构网互联的机制,实现将一个网络的数据包发送到另一个网络,路由就是指导IP数据包发送的路径信息。路由协议是在路由指导IP数据包发送过程中事先约定好的规定和标准。

阅读全文

rip 路由信息协议

RIP(Routing information Protocol,路由信息协议)是应用较早、使用较普遍的内部网关协议(Interior Gateway Protocol,IGP),适用于小型同类网络的一个自治系统(AS)内的路由信息的传递。RIP协议是基于距离矢量算法(Distance Vector Algorithms,DVA)的。它使用“跳数”,即metric来衡量到达目标地址的路由距离。文档见RFC1058、RFC1723。它是一个用于路由器和主机间交换路由信息的距离向量协议,目前最新的版本为v4,也就是RIPv4。 至于上面所说到的“内部网关协议”,我们可以这样理解。由于历史的原因,当前的 INTERNET 网被组成一系列的自治系统,各自治系统通过一个核心路由器连到主干网上。而一个自治系统往往对应一个组织实体(比如一个公司或大学)内部的网络与路由器集合。每个自治系统都有自己的路由技术,对不同的自治系统路由技术是不相同的。用于自治系统间接口上的路由协议称为“外部网关协议”,简称EGP (Exterior Gateway Protocol);而用于自治系统内部的路由协议称为“内部网关协议”,简称 IGP。内部网关与外部网关协议不同,外部路由协议只有一个,而内部路由器协议则是一族。各内部路由器协议的区别在于距离制式(distance metric, 即距离度量标准)不同,和路由刷新算法不同。RIP协议是最广泛使用的IGP类协议之一,著名的路径刷新程序Routed便是根据RIP实现的。RIP协议被设计用于使用同种技术的中型网络,因此适应于大多数的校园网和使用速率变化不是很大的连续线的地区性网络。对于更复杂的环境,一般不使用RIP协议。

  1. RIP工作原理 RIP协议是基于Bellham-Ford(距离向量)算法,此算法1969年被用于计算机路由选择,正式协议首先是由Xerox于1970年开发的,当时是作为Xerox的“Networking Services(NXS)”协议族的一部分。由于RIP实现简单,迅速成为使用范围最广泛的路由协议。 路由器的关键作用是用于网络的互连,每个路由器与两个以上的实际网络相连,负责在这些网络之间转发数据报。在讨论 IP 进行选路和对报文进行转发时,我们总是假设路由器包含了正确的路由,而且路由器可以利用 ICMP 重定向机制来要求与之相连的主机更改路由。但在实际情况下,IP 进行选路之前必须先通过某种方法获取正确的路由表。在小型的、变化缓慢的互连网络中,管理者可以用手工方式来建立和更改路由表。而在大型的、迅速变化的环境下,人工更新的办法慢得不能接受。这就需要自动更新路由表的方法,即所谓的动态路由协议,RIP协议是其中最简单的一种。 在路由实现时,RIP作为一个系统长驻进程(daemon)而存在于路由器中,负责从网络系统的其它路由器接收路由信息,从而对本地IP层路由表作动态的维护,保证IP层发送报文时选择正确的路由。同时负责广播本路由器的路由信息,通知相邻路由器作相应的修改。RIP协议处于UDP协议的上层,RIP所接收的路由信息都封装在UDP协议的数据报中,RIP在520号UDP端口上接收来自远程路由器的路由修改信息,并对本地的路由表做相应的修改,同时通知其它路由器。通过这种方式,达到全局路由的有效。 RIP路由协议用“更新(UNPDATES)”和“请求(REQUESTS)”这两种分组来传输信息的。每个具有RIP协议功能的路由器每隔30秒用UDP520端口给与之直接相连的机器广播更新信息。更新信息反映了该路由器所有的路由选择信息数据库。路由选择信息数据库的每个条目由“局域网上能达到的IP地址”和“与该网络的距离”两部分组成。请求信息用于寻找网络上能发出RIP报文的其他设备。 RIP用“路程段数”(即“跳数”)作为网络距离的尺度。每个路由器在给相邻路由器发出路由信息时,都会给每个路径加上内部距离。在如图9-31中,路由器3直接和网络C相连。当它向路由器2通告网络142.10.0.0的路径时,它把跳数增加1。与之相似,路由器2把跳数增加到“2”,且通告路径给路由器1,则路由器2和路由器1与路由器3所在网络142.10.0.0的距离分别是1跳、2跳。 路由器的收敛机制 任何距离向量路由选择协议(如RIP)都有一个问题,路由器不知道网络的全局情况,路由器必须依靠相邻路由器来获取网络的可达信息。由于路由选择更新信息在网络上传播慢,距离向量路由选择算法有一个慢收敛问题,这个问题将导致不一致性产生。RIP协议使用以下机制减少因网络上的不一致带来的路由选择环路的可能性。 记数到无穷大机制 RIP协议允许最大跳数为15。大于15的目的地被认为是不可达。这个数字在限制了网络大小的同时也防止了一个叫做“记数到无穷大”的问题。 水平分割法 水平分割规则如下:路由器不向路径到来的方向回传此路径。当打开路由器接口后,路由器记录路径是从哪个接口来的,并且不向此接口回传此路径 破坏逆转的水平分割法 水平分割是路由器用来防止把一个接口得来的路径又从此接口传回导致的问题的方案。水平分割方案忽略在更新过程中从一个路由器获取的路径又传回该路由器。有破坏逆转的水平分割方法是在更新信息中包括这些回传路径,但这种处理方法会把这些回传路径的跳数设为16(无穷)。通过把跳数设为无穷,并把这条路径告诉源路由器,有可能立刻解决路由选择环路。否则,不正确的路径将在路由表中驻留到超时为止。破坏逆转的缺点是它增加了路由更新的的数据大小。 保持定时器法 保持定时器法可防止路由器在路径从路由表中删除后一定的时间内(通常为180秒)接受新的路由信息。它的思想是保证每个路由器都收到了路径不可达信息,而且没有路由器发出无效路径信息。 触发更新法 有破坏逆转的水平分割将任何两个路由器构成的环路打破,但三个或更多个路由器构成的环路仍会发生,直到无穷(16)时为止。触发式更新法可加速收敛时间,它的工作原理是当某个路径的跳数改变了,路由器立即发出更新信息,不管路由器是否到达常规信息更新时间都发出更新信息。 RIP信息格式。各字段解释如下: Command:命令字段,8位,用来指定数据报用途。命令有五种:Request(请求)、Response(响应)、Traceon(启用跟踪标记,自v2版本后已经淘汰)、Traceoff(关闭跟踪标记,自v2版本后已经淘汰)和 Reserved(保留)。 Version:RIP版本号字段,16位。 Address Family Identifier:地址族标识符字段,24位。它指出该入口的协议地址类型。由于 RIP2版本可能使用几种不同协议传送路由选择信息,所以要使用到该字段。IP协议地址的Address Family Identifier为2。 Route Tag:路由标记字段,32位,仅在v2版本以上需要,第一版本不用,为0。用于路由器指定属性,必须通过路由器保存和重新广告。路由标志是分离内部和外部 RIP 路由线路的一种常用方法(路由选择域内的网络传送线路),该方法在 EGP或IGP都有应用。 IP Address:目标IP地址字段,IPv4地址为32位。 Subnet Mask:子网掩码字段,IPv4子网掩码地址为32位。它应用于IP地址,生成非主机地址部分。如果为0,说明该入口不包括子网掩码。也仅在v2版本以上需要,在RIPv1中不需要,为0。 Next Hop:下一跳字段。指出下一跳IP地址,由路由入口指定的通向目的地的数据包需要转发到该地址。 Metric:跳数字段。表示从主机到目的地获得数据报过程中的整个成本。
阅读全文

netbios

NETBIOS协议是由IBM公司开发,主要用于数十台计算机的小型局域网。该协议是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的统一的命令集,作用是为了给局域网提供网络以及其他特殊功能。系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名-——特指基于NETBIOS协议获得计算机名称——解析为相应IP地址,实现信息通讯,所以在局域网内部使用NetBIOS协议可以方便地实现消息通信及资源的共享。因为它占用系统资源少、传输效率高,所以几乎所有的局域网都是在NetBIOS协议的基础上工作的。NetBIOS是Network Basic Input/Output System的简称,一般指用于局域网通信的一套API NetBIOS是一个网络协议,在上世纪80年代早期由IBM和Sytec联合开发,用于所谓的PC-Network。虽然公开发表的文档很少,协议的API却成为了事实上的标准。   随着PC-Network被令牌环和以太网取代,NetBIOS也应该退出历史舞台。但是,由于很多软件使用了NetBIOS的API,所以NetBIOS被适配到了各种其他的协议上,比如IPX/SPX和TCP/IP。   使用令牌环和以太网传输的NetBIOS现在被称为NetBEUI。在Micrsoft Windows 98发布之前,一直广泛使用。在TCP/IP上运行的NetBIOS称为NBT,由RFC 1001和RFC 1002定义。NBT的基本思想是在基于IP的网络上模拟基于NetBIOS的PC-Network。NBT在Windows 2000中引入,是现在首选的NetBIOS传输。 NetBIOS是网络的基本输入输出系统。 NetBIOS 定义了一种软件接口以及在应用程序和连接介质之间提供通信接口的标准方法。NetBIOS 是一种会话层协议,应用于各种 LAN (Ethernet、Token Ring 等)和 WAN 环境,诸如 TCP/IP、PPP 和 X.25 网络。 NetBIOS 使得应用程序无需了解包括差错恢复(会话模式)在内的网络细节。NetBIOS 请求以网络控制块(NCB:Network Control Block)的形式提供,NCB 中包含了信息存放位置和目标名称等信息。 NetBIOS 提供开放系统互联(OSI)模型中的会话层和传输层服务,但不支持标准帧或数据格式的传输。NetBIOS 扩展用户接口(NetBEUI)支持标准帧格式,它为 NetBIOS 提供网络层和传输层服务支持。 NetBIOS 支持两种通信模式:会话(session)或数据报(datagram)。会话模式是指两台计算机为“对话”建立一个连接,允许处理大量信息,并支持差错监测和恢复功能。数据报模式面向“无连接”(信息独立发送)操作,发送的信息较小,由应用程序提供差错监测和恢复功能。此外数据报模式也支持将信息广播到局域网中的每台计算机上。 NetBIOS 名称为 16 字节长(必要情况下使用填充位填满),对使用的字节值几乎没有限制。对于不执行路由的小型网络,将 NetBIOS 名称映射到 IP 地址上有三种方法: 1. IP 广播 - 当目标地址不在本地 cache 上时,广播一个 包含目标计算机 NetBIOS 名称的数据包。目标计算机返回其 IP 地址。 2. lmhosts 文件 - 这是一个负责映射 IP 地址和 NetBIOS 计算机名称的文件。 3. NBNS - NetBIOS 命名服务器负责将 NetBIOS 名称映射到 IP 地址上。该服务由 Linux 环境下的后台程序(nmbd daemon)执行。 NetBIOS 数据包有很多不同格式,主要取决于服务和信息类型,以及用以传送 NetBIOS 数据包的传输协议。NetBIOS 包含三种基本服务:NAME、SESSION 和 DATAGRAM。作为例子,我们提供 TCP/IP 环境中的 NetBIOS 名称数据包格式: Header (12 bytes) Question Entry (variable) Answer Resource Records (variable) Authority Resource Records (variable) Additional Resource Records (variable) NBTSTAT命令可以用来查询涉及到NetBIOS信息的网络机器。另外,它还可以用来消除NetBIOS高速缓存器和预加载LMHOSTS文件。这个命令在进行安全检查时非常有用。 用法:nbtstat [-a RemoteName] [-A IP_address] [-c] [-n] [-R] [-r] [-S] [-s] [-RR] 参数 :-a 列出为其主机名提供的远程计算机名字表。 -A 列出为其IP地址提供的远程计算机名字表。 -c 列出包括了IP地址的远程名字高速缓存器。 -n 列出本地NetBIOS名字。 -r 列出通过广播和WINS解析的名字。 -R 消除和重新加载远程高速缓存器名字表。 -S 列出有目的地IP地址的会话表。 -s 列出会话表对话。 -RR 发送数据包名称到WINS,然后开始刷新 NBTSTAT生成的列标题具有以下含义: Input :接收到的字节数。 Output :发出的字节数。 In/Out :无论是从计算机(出站)还是从另一个系统连接到本地计算机(入站)。 Life :在计算机消除名字表高速缓存表目前“度过”的时间。 Local Name :为连接提供的本地NetBIOS名字。 Remote Host :远程主机的名字或IP地址。 Type :一个名字可以具备两个类型之一:unique or group 在16个字符的NetBIOS名中,最后一个字节往往有具体含义,因为同一个名可以在同一台计算机上出现多次。这表明该名字的最后一个字节被转换成了16进制。 State NetBIOS连接将在下列“状态”(任何一个)中显示: 状态含义: Accepting: 进入连接正在进行中。 Associated: 连接的端点已经建立,计算机已经与IP地址联系起来。 Connected: 这是一个好的状态!它表明您被连接到远程资源上。 Connecting: 您的会话试着解析目的地资源的名字-IP地址映射。 Disconnected: 您的计算机请求断开,并等待远程计算机作出这样的反应。 Disconnecting: 您的连接正在结束。 Idle: 远程计算机在当前会话中已经打开,但没有接受连接。 Inbound: 入站会话试着连接。 Listening: 远程计算机可用。 Outbound: 您的会话正在建立TCP连接。 Reconnecting: 如果第一次连接失败,就会显示这个状态,表示试着重新连接 不管使用哪一种传输方式,NetBIOS提供三种不同的服务: 名字服务:名字登记和解析 会话服务:可靠的基于连接的通信 数据包服务:不可靠的无连接通信 当NetBIOS是数据链路层协议时,可以通过5Ch中断访问其功能。传递给这些函数的消息使用NCB格式。 NetBIOS和NetBEUI被设计为仅仅用于局域网,因此不支持路由,并且最多只能处理72个节点或者设备。NetBIOS和NetBEUI经常使用广播实现,尤其是名字服务的相关操作。 NBT使用一个或多个NBNS(NetBIOS Name Server(s))将名字服务扩展到多个子网。NBNS是动态DNS的一种,Microsoft的NBNS实现称为WINS。另外,为了将虚拟的NetBIOS网络扩展到多个IP子网,WINS标准还引入了一个或者多个NBDD(NetBIOS Datagram Distribution) 服务器。

阅读全文

lmhosts

hosts:包含由IP地址和相应的主机名称组成的静态查询表 lmhosts:包含由IP地址和相应的NetBIOS计算机名称组成的静态查询表 lmhosts是用来进行NETBIOS名静态解析的。将NETBIOS名和IP地址对应起来,功能类似于DNS,只不过DNS是将域名/主机名和IP对应。 LMHOSTS 文件是个纯文本文件,微软提供了一个示例程序 LMHOSTS.SAM,位于 C:\WinNT\System32\Drivers\Etc 目录下。

阅读全文

dhcp

DHCP 是 Dynamic Host Configuration Protocol(动态主机分配协议)缩写,它的前身是 BOOTP。BOOTP 原本是用于无磁盘主机连接的网络上面的:网络主机使用 BOOT ROM 而不是磁盘起动并连接上网络,BOOTP 则可以自动地为那些主机设定 TCP/IP 环境。但 BOOTP 有一个缺点:您在设定前须事先获得客户端的硬件地址,而 且,与 IP 的对应是静态的。换而言之,BOOTP 非常缺乏 “动态性” ,若在有限的 IP 资源环境中,BOOTP 的一对一对应会造成非常可观的浪费。 DHCP 可以说是 BOOTP 的增强版本,它分为两个部份:一个是服务器端,而另一个是客户端。所有的 IP 网络设定数据都由 DHCP 服务器集中管理,并负责处理客户端的 DHCP 要求;而客户端则会使用从服务器分配下来的IP环境数据。比较起 BOOTP ,DHCP 透过 “租约” 的概念,有效且动态的分配客户端的 TCP/IP 设定,而且,作为兼容考虑,DHCP 也完全照顾了 BOOTP Client 的需求。 DHCP 的分配形式 首先,必须至少有一台 DHCP 工作在网络上面,它会监听网络的 DHCP 请求,并与客户端搓商 TCP/IP 的设定环境。它提供两种 IP 定位方式: Automatic Allocation 自动分配,其情形是:一旦 DHCP 客户端第一次成功的从 DHCP 服务器端租用到 IP 地址之后,就永远使用这个地址。 Dynamic Allocation 动态分配,当 DHCP 第一次从 HDCP 服务器端租用到 IP 地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放(release)这个 IP 地址,以给其它工作站使用。当然,客户端可以比其它主机更优先的更新(renew)租约,或是租用其它的 IP 地址。 动态分配显然比自动分配更加灵活,尤其是当您的实际 IP 地址不足的时候,例如:您是一家 ISP ,只能提供 200 个IP地址用来给拨接客户,但并不意味着您的客户最多只能有 200 个。因为要知道,您的客户们不可能全部同一时间上网的,除了他们各自的行为习惯的不同,也有可能是电话线路的限制。这样,您就可以将这 200 个地址,轮流的租用给拨接上来的客户使用了。这也是为什么当您查看 IP 地址的时候,会因每次拨接而不同的原因了(除非您申请的是一个固定 IP ,通常的 ISP 都可以满足这样的要求,这或许要另外收费)。当然,ISP 不一定使用 DHCP 来分配地址,但这个概念和使用 IP Pool 的原理是一样的。 DHCP 除了能动态的设定 IP 地址之外,还可以将一些 IP 保留下来给一些特殊用途的机器使用,它可以按照硬件地址来固定的分配 IP 地址,这样可以给您更大的设计空间。同时,DHCP 还可以帮客户端指定 router、netmask、DNS Server、WINS Server、等等项目,您在客户端上面,除了将 DHCP 选项打勾之外,几乎无需做任何的 IP 环境设定。 DHCP 的工作原理 根据客户端是否第一次登录网络,DHCP 的工作形式会有所不同。 第一次登录的时候: 寻找 Server。当 DHCP 客户端第一次登录网络的时候,也就是客户发现本机上没有任何 IP 数据设定,它会向网络发出一个 DHCP DISCOVER 封包。因为客户端还不知道自己属于哪一个网络,所以封包的来源地址会为 0.0.0.0 ,而目的地址则为 255.255.255.255 ,然后再附上 DHCP discover 的信息,向网络进行广播。 在 Windows 的预设情形下,DHCP discover 的等待时间预设为 1 秒,也就是当客户端将第一个 DHCP discover 封包送出去之后,在 1 秒之内没有得到响应的话,就会进行第二次 DHCP discover 广播。若一直得不到响应的情况下,客户端一共会有四次 DHCP discover 广播(包括第一次在内),除了第一次会等待 1 秒之外,其余三次的等待时间分别是 9、13、16 秒。如果都没有得到 DHCP 服务器的响应,客户端则会显示错误信息,宣告 DHCP discover 的失败。之后,基于使用者的选择,系统会继续在 5 分钟之后再重复一次 DHCP discover 的过程。 提供 IP 租用地址。当 DHCP 服务器监听到客户端发出的 DHCP discover 广播后,它会从那些还没有租出的地址范围内,选择最前面的空置 IP ,连同其它 TCP/IP 设定,响应给客户端一个 DHCP OFFER 封包。 由于客户端在开始的时候还没有 IP 地址,所以在其 DHCP discover 封包内会带有其 MAC 地址信息,并且有一个 XID 编号来辨别该封包,DHCP 服务器响应的 DHCP offer 封包则会根据这些资料传递给要求租约的客户。根据服务器端的设定,DHCP offer 封包会包含一个租约期限的信息。 接受 IP 租约。如果客户端收到网络上多台 DHCP 服务器的响应,只会挑选其中一个 DHCP offer 而已(通常是最先抵达的那个),并且会向网络发送一个DHCP request广播封包,告诉所有 DHCP 服务器它将指定接受哪一台服务器提供的 IP 地址。 同时,客户端还会向网络发送一个 ARP 封包,查询网络上面有没有其它机器使用该 IP 地址;如果发现该 IP 已经被占用,客户端则会送出一个 DHCPDECLINE 封包给 DHCP 服务器,拒绝接受其 DHCP offer ,并重新发送 DHCP discover 信息。 事实上,并不是所有 DHCP 客户端都会无条件接受 DHCP 服务器的 offer ,尤其这些主机安装有其它 TCP/IP 相关的客户软件。客户端也可以用 DHCP request 向服务器提出 DHCP 选择,而这些选择会以不同的号码填写在 DHCP Option Field 里面: 换一句话说,在 DHCP 服务器上面的设定,未必是客户端全都接受,客户端可以保留自己的一些 TCP/IP 设定。而主动权永远在客户端这边。 租约确认。当 DHCP 服务器接收到客户端的 DHCP request 之后,会向客户端发出一个 DHCPACK 响应,以确认 IP 租约的正式生效,也就结束了一个完整的 DHCP 工作过程。 DHCP 发放流程 第一次登录之后: 一旦 DHCP 客户端成功地从服务器哪里取得 DHCP 租约之后,除非其租约已经失效并且 IP 地址也重新设定回 0.0.0.0 ,否则就无需再发送 DHCP discover 信息了,而会直接使用已经租用到的 IP 地址向之前之 DHCP 服务器发出 DHCP request 信息,DHCP 服务器会尽量让客户端使用原来的 IP 地址,如果没问题的话,直接响应 DHCPack 来确认则可。如果该地址已经失效或已经被其它机器使用了,服务器则会响应一个 DHCPNACK 封包给客户端,要求其从新执行 DHCP discover。 至于 IP 的租约期限却是非常考究的,并非如我们租房子那样简单, 以 NT 为例子:DHCP 工作站除了在开机的时候发出 DHCP request 请求之外,在租约期限一半的时候也会发出 DHCP request ,如果此时得不到 DHCP 服务器的确认的话,工作站还可以继续使用该 IP ;然后在剩下的租约期限的再一半的时候(即租约的75%),还得不到确认的话,那么工作站就不能拥有这个 IP 了。至于为什么不是到租约期限完全结束才放弃 IP 呢?,对不起,小弟也是不学无术之人,没有去深究了,只知道要回答 MCSE 题目的时候,您一定要记得 NT 是这么工作的就是了。 要是您想退租,可以随时送出 DHCPLEREASE 命令解约,就算您的租约在前一秒钟才获得的。 跨网络的 DHCP 运作 从前面描述的过程中,我们不难发现:DHCDISCOVER 是以广播方式进行的,其情形只能在同一网络之内进行,因为 router 是不会将广播传送出去的。但如果 DHCP 服务器安设在其它的网络上面呢?由于 DHCP 客户端还没有 IP 环境设定,所以也不知道 Router 地址,而且有些 Router 也不会将 DHCP 广播封包传递出去,因此这情形下 DHCP DISCOVER 是永远没办法抵达 DHCP 服务器那端的,当然也不会发生 OFFER 及其它动作了。要解决这个问题,我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP 请求,然后将此请求传递给真正的 DHCP 服务器,然后将服务器的回复传给客户。这里,Proxy 主机必须自己具有路由能力,且能将双方的封包互传对方。 若不使用 Proxy,您也可以在每一个网络之中安装 DHCP 服务器,但这样的话,一来设备成本会增加,而且,管理上面也比较分散。当然喽,如果在一个十分大型的网络中,这样的均衡式架构还是可取的。端视您的实际情况而定了。

阅读全文

arc phabricator 结合 arcanist 使用

arcanist 是 phabricator 接口的命令工具,主要用于提交 diff 和 push review 通过的commit。 安装 下载源码,然后指定系统的环境变量即可 $ some_install_path/ $ git clone https://github.com/phacility/libphutil.git $ some_install_path/ $ git clone https://github.com/phacility/arcanist.git 指定环境变量 – 修改 .bash_profile(如果装有 zsh, 则修改 .zshrc),下面的 /Users/Grissom/mydocs/arc/arcanist/bin 就是我本机 arc 源码所在的路径 $ export PATH=${PATH}:/usr/local/mysql/bin:/Users/Grissom/mydocs/arc/arcanist/bin – 然后运行以下命令使之起效 $ source .bash_profile – 查看是否安装好 $ arc help – 配置arc的默认编辑器,我使用vim $ arc set-config editor “vim” –配置默认的phabricator的uri,uri为团队的phabricator主页的url $ arc set-config default --在项目的根目录下建.arcconfig配置文件,文件中至少要填入以下内容 { "project.name": "对应 phabricator 的 project name", "phabricator.uri": "" }

阅读全文

站群

站群通常由几个到几百个网站组成,站群最简单的理解就是一群网站。而这些网站都是属于一个人的。那么这些网站就称之为此站长的站群。 站群,即一个人或一个团队操作多个网站,目的是通过搜索引擎获得大量流量,或者是将链接指向同一个网站,以提高搜索排名。 推广类站群系统的盈利模式其实很简单,就是通过聚集大量网站的流量做广告联盟,我们说站群系统做出来的网站,大部分是垃圾站,部分的站群系统也可以做正规站,是经过优化而成的!单价高的广告联盟要数百度联盟和谷歌联盟。主要还是做百度、谷歌的收录,一旦收录上去了,自然盈利的方法就多了! 由于搜索优化是需要分不同网站和分不同IP多域名的,为实现集成化管理与分站技术;因此要求我们的主要管理系统是要部署在一台服务器中方便管理,要具有数据采集自动化智能处理等功能,而子站部署再需要在不同的服务器和不同的空间上,并每个空间单独绑定域名。

阅读全文

Reactor and Proactor

一、 Reactor and Proactor 1 概述 IO读写时,多路复用机制都会依赖对一个事件多路分离器,负责把源事件的IO 事件分离出来,分别到相应的read/write事件分离器。涉及到事件分离器的两种模式分别就是 Reactor和Proactor,Reactor是基于同步IO的,Proactor是基于异步IO的。

阅读全文

Git内部原理 blob tree commit

参考:https://git-scm.com/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E5%BA%95%E5%B1%82%E5%91%BD%E4%BB%A4%E5%92%8C%E9%AB%98%E5%B1%82%E5%91%BD%E4%BB%A4 Git 内部原理 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式。我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的,不过也有人认为这些内容对于初学者来说可能难以理解且过于复杂。正因如此我把这部分内容放在最后一章,你在学习过程中可以先阅 读这部分,也可以晚点阅读这部分,这完全取决于你自己。

阅读全文

git默认不区分文件夹大小写

Windows 是不区分大小写的。大概是为了兼容。macOS 默认是『 Mac OS 扩展(日志式)』格式的磁盘,这个是不区分大小写的,而 Linux 是区分大小写的,所以其实还是要注意这个方面把。另外你可以把磁盘抹成『 Mac OS 扩展(区分大小写,日志式)』,但是有些软件可能就挂了,所以还是别瞎折腾了。可以通过 git mv 操作来避免 git 未识别:git mv myfolder tmp git mv tmp MyFolder 你也可以修改 git config 来达到区分大小写:git config core.ignorecase false

阅读全文

mysql 分页

MySql数据库提供了分页的函数limit m,n 语法 limit m起始第几条,n查询条数

阅读全文

thrift 低版本安装

mac 上可以用 brew install thrift 进行安装 $thrift -version Thrift version 0.11.0 但是我们需要 0.9.2

阅读全文

git add 删除文件问题

git add 删除文件名 没有问题 git add * 有问题 因为*不包括删除文件 但是git diff 里有删除文件,会导致删除文件未提交

阅读全文

dot

一、简介DOT & graphviz

  1. DOT DOT是一种文本图形描述语言。DOT语言文件通常具有.gv或是.dot的文件扩展名。当然,在编写好.dot或者.gv的文件之后,需要有专门的程序处理这些文件并将其渲染成为图片,dot就是其中一款程序,它可以将DOT语言描述的图形渲染成.png、.jpg、.pdf等多种类型。 当然,作为工具,dot本身是很原始的,就像gcc之于c代码,g++之于cpp代码一样,或许某些程序员会热衷于在终端使用这些工具,但也有很多人喜欢交互式的界面,所以就有了gvedit之类的工具,它提供交互式的窗口来使用dot等工具渲染DOT语言描述的图形。
  2. graphviz graphviz是一个开源软件包,上述dot和gvedit等工具都在该软件包中。 所以,不妨简单的认为DOT是一门图形描述语言而graphviz是处理该语言文件的一个集成化的工具。
  3. DOT & graphviz的局限性 graphviz中有很多工具可以将DOT语言的文本渲染成为图片,但正如我们所见,我们在享受方便的编码的同时,将图片的布局等任务交给了这些工具,虽然这些工具有很不错的布局算法支持,但仍不一定能满足我们的要求,所以当对图片的布局有特殊要求时,DOT & graphviz就显示出了它的局限性。当然,我们可以再使用其他图片编辑器校正DOT语言生成的图片,但这种时候,DOT & graphviz的方便性或许早就消失殆尽了。
  4. 什么人适合使用DOT & graphviz 就我个人体会而言,DOT & graphviz适合这些人使用: 1> 像我一样的画图小白并且喜欢操作键盘远胜于鼠标; 2> 没有熟练的掌握其他作图工具; 3> 对图片布局等没有特殊要求; 4> 要绘制的是流程图结构图之类的图而不是画小狗小猫山山水水。
阅读全文

netty

1.为什么选择Netty Socket通信(IO/NIO/AIO)编程仅仅是一个模型,如果想把这些真正的用于实际工作中,那么还需要不断的完善、扩展和优化。比如经典的TCP读包写包问题,或者是数据接收的大小,实际的通信处理与应答的处理逻辑等等一些细节问题需要认真的去思考,而这些都需要大量的时间和经历,以及丰富的经验。所以想学好Socket通信不是件容易事,那么接下来就来学习一下新的技术Netty,为什么会选择Netty?因为它简单!使用Netty不必编写复杂的逻辑代码去实现通信,再也不需要去考虑性能问题,不需要考虑编码问题,半包读写等问题。强大的Netty已经帮我们实现好了,我们只需要使用即可。

阅读全文

crlf 攻击

CRLF Injection很少遇见,这次被我逮住了。我看zone中(http://zone.wooyun.org/content/13323)还有一些同学对于这个漏洞不甚了解,甚至分不清它与CSRF,我详细说一下吧。

阅读全文

cscope

命令的帮助入口:

阅读全文

mathlatex

1,LaTeX for WordPress <对于WordPress博客来说,使用MathJax库的一个简单方法,就是直接使用一个叫LaTeX for WordPress插件。安装插件,简单配置,就可以使用MathJax的js库提供的数学公式在网页上的渲染支持。本博没有使用插件,而是直接在博客主题引用MathJax的js库。

阅读全文

npm registry

镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在):

阅读全文

制作地图

参考: https://bost.ocks.org/mike/map/ 用 D3 和 TopoJSON做一个地图

阅读全文

virtualenv

在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4。所有第三方的包都会被pip安装到Python3的site-packages目录下。

阅读全文

pip

1、pip下载安装 1.1 pip下载 # wget “https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb” –no-check-certificate # wget “https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb” –no-check-certificate 1.2 pip安装 # tar -xzvf pip-1.5.4.tar.gz # cd pip-1.5.4 # python setup.py install # tar -xzvf pip-1.5.4.tar.gz # cd pip-1.5.4 # python setup.py install

  1. pip使用详解 2.1 pip安装包 # pip install SomePackage […] Successfully installed SomePackage # pip install SomePackage […] Successfully installed SomePackage 2.2 pip查看已安装的包 # pip show –files SomePackage Name: SomePackage Version: 1.0 Location: /my/env/lib/pythonx.x/site-packages Files: ../somepackage/init.py […] # pip show –files SomePackage Name: SomePackage Version: 1.0 Location: /my/env/lib/pythonx.x/site-packages Files: ../somepackage/init.py […] 2.3 pip检查哪些包需要更新 # pip list –outdated SomePackage (Current: 1.0 Latest: 2.0) # pip list –outdated SomePackage (Current: 1.0 Latest: 2.0) 2.4 pip升级包 # pip install –upgrade SomePackage […] Found existing installation: SomePackage 1.0 Uninstalling SomePackage: Successfully uninstalled SomePackage Running setup.py install for SomePackage Successfully installed SomePackage 2.5 pip卸载包 $ pip uninstall SomePackage Uninstalling SomePackage: /my/env/lib/pythonx.x/site-packages/somepackage Proceed (y/n)? y Successfully uninstalled SomePackage
  2. pip参数解释 # pip –help Usage:
    pip [options]
阅读全文

p2p

1.1 Peer-To-Peer 介绍

阅读全文

nat

  1. IPv4协议和NAT的由来
阅读全文

json_shell

解析简单json

1
2
3
4
5
6
7
8
9
 #!/bin/bash
s="{\"rv\":0,\"flag\":1,\"url\":\"http://www.jinhill.com\",\"msg\":\"test\"}"
parse_json(){
 #echo "$1" | sed "s/.*\"$2\":\([^,}]*\).*/\1/"
echo "${1//\"/}" | sed "s/.*$2:\([^,}]*\).*/\1/"
}
echo $s
value=$(parse_json $s "url")
echo $value

解析URL Query

1
2
3
4
5
6
7
 #!/bin/bash
s="http://www.zonetec.cn/WlanAuth/portal.do?appid=aaaa&apidx=0"
parse(){
 echo $1 | sed 's/.*'$2'=\([[:alnum:]]*\).*/\1/'
}
value=$(parse $s "appid")
echo $value
阅读全文

Django_nginx_uwsgi

安装Python包管理 easy_install 包 https://pypi.python.org/pypi/distribute wget https://pypi.python.org/packages/source/d/distribute/distribute-0.6.49.tar.gz tar xf distribute-0.6.49.tar.gz cd distribute-0.6.49 python2.7 setup.py install easy_install –version 安装 uwsgi uwsgi:https://pypi.python.org/pypi/uWSGI

阅读全文

goclipse eclipse go 开发环境搭建+跳转支持

Eclipse Mars (4.5) 下载地址:https://www.eclipse.org/mars/ golang 1.6.0rc2 下载地址:http://www.golangtc.com/download goclipse 0.14.1 下载地址: https://github.com/GoClipse/goclipse eclipse在线安装地址:http://goclipse.github.io/releases/ eclipse+goclipse安装后不能联想和跳转问题解决 Window->Preferences->Go 指定$GOPATH 和$GOROOT

阅读全文

tcp_flag

在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.

阅读全文

url短链

什么是短链接 🔗 就是把普通网址,转换成比较短的网址。比如:http://t.cn/RlB2PdD 这种,在微博这些限制字数的应用里。好处不言而喻。短、字符少、美观、便于发布、传播。

阅读全文

大端小端

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中 判断方法 (一)指针法

1
2
3
4
5
6
7
8
9
10
11
 #include <stdio.h>
int main()
{
    int val = 1;
    char *ret = (char *)&val;
    if (*ret == 1)
        printf("小端存储");
    else
        printf("大端存储");
    return 0;
}

(二)联合法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 #include <stdio.h>
union UN
{
    int a;
    char c;
};
int main()
{
    union UN un;
    un.a = 1;
    if (un.c == 1)
        printf("小端存储");
    else
        printf("大端存储");
    return 0;
}

php 判断方法

1
2
3
4
5
6
7
8
9
10
11
<?php
define('BIG_ENDIAN', pack('L', 1) === pack('N', 1));
if (BIG_ENDIAN)
{
    echo "大端序";
}
else
{
    echo "小端序";
}
echo "\n";

PHP pack() 函数 函数把数据装入一个二进制字符串。 pack(format,args+) format 参数 L - unsigned long (always 32 bit, machine byte order) N - unsigned long (always 32 bit, big endian byte order) V - unsigned long (always 32 bit, little endian byte order)

阅读全文

server格式

CGI程序不是放在服务器上就能顺利运行,如果要想使其在服务器上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进行必要的设置。 配置:根据所使用的服务器类型以及它的设置把CGI程序放在某一特定的目录中或使其带有特定的扩展名。 ⑴CREN格式服务器的配置: 编辑CREN格式服务器的配置文件(通常为/etc/httpd.conf)在文件中加入:Exec cgi-bin/*/home/www/cgi-bin/*.exec。命令中出现的第一个参数cgi-bin/*指出了在URL中出现的目录名字,并表示它出现在系统主机后的第一个目录中,如:http://edgar.stern.nyn.***/cgi-bin/。命令中的第二个参数表示CGI程序目录放在系统中的真实路径。 CGI目录除了可以跟网络文件放在同一目录中,也可以放在系统的其它目录中,但必须保证在你的系统中也具有同样的目录。在对服务器完成设置后,须重新启动服务器(除非HTTP服务器是用inetd启动的)。 ⑵NCSA格式服务器的配置 在NCSA格式服务器上有两种方法进行设置: ①在srm.conf文件(通常在conf目录下)中加入:Script Alias/cgi-bin/cgi-bin/。Script Alias命令指出某一目录下的文件是可执行程序,且这个命令是用来执行这些程序的;此命令的两个参数与CERN格式服务器中的Exec命令的参数的含意一样。 ②在srm.conf文件加入:Add type application/x-httpd-cgi.cgi。此命令表示在服务器上增加了一种新的文件类型,其后第一个参数为CGI程序的MIME类型,第二个参数是文件的扩展名,表示以这一扩展名为扩展名的文件是CGI程序。 在用上述方法之一设置服务器后,都得重新启动服务器(除非HTTP服务器是用inetd启动的)。 编写语言 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。对初学者来说,最好选用易于归档和能有效表示大量数据结构的语言,例如UNIX环境中: · Perl (Practical Extraction and Report Language) · Bourne Shell或者Tcl (Tool Command Language) · PHP(Hypertext Preprocessor)) 由于C语言有较强的平台无关性,所以也是编写CGI程序的首选。
阅读全文

nginx_ssi

什么是SSI Server Side Include,通常称为服务器端嵌入,是一种类似于ASP的基于服务器的网页制作技术。大多数(尤其是基于Unix平台)的WEB服务器如Netscape Enterprise Server等均支持SSI命令。 为什么要用SSI 用个例子来说明,一个静态化的页面中,需要嵌入一小块实时变化的内容,。例如首页,大部分的页面内容需要缓存但是用户登录后的个人信息是动态信息,不能缓存。那么如何解决这个”页面部分缓存”问题,利用SSI就可以解决,在首页的静态页面中嵌入个人信息的动态页,由于是服务器端的嵌入,所以用户浏览的时候都是一个嵌入后的页面。 用途 主要有以下几种用途:
阅读全文

go升级遇到问题及解决方案

brew install go 会将新版go安装到 /usr/local/Cellar/go/1.9.2/ $ ls /usr/local/Cellar/go/1.9.2/ AUTHORS LICENSE bin INSTALL_RECEIPT.json README.md libexec 却少的库和编译工具都在libexec目录下,直接复制src 目录到goroot,虽然能解决找不到库文件的问题,但是会报 go tool: no such tool "compile" 将/usr/local/Cellar/go/1.9.2/libexec 设为gopath 会报 import cycle not allowed package cmd/dist imports bytes imports errors imports runtime imports unsafe imports runtime 解决办法: go官网下载安装包 https://golang.org/doc/install?download=go1.9.2.darwin-amd64.pkg
阅读全文

go_vs_code

一、GoLang的安装
阅读全文

jupyter_matplotlib

安装: $pip install matplotlib $jupyter notebook

1
2
import matplotlib
print(matplotlib.get_backend())

module://ipykernel.pylab.backend_inline

阅读全文

Jupyter_slides

使用jupyter完成后,需要将后缀为.ipynb文件转换成.html文件才能展示出效果

阅读全文

partion_function

Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。要注意,这里的偏函数和数学意义上的偏函数不一样。

阅读全文

高阶函数函数加里化(Currying)和偏函数应用(Partial Application)的比较

所谓高阶函数是指可一把函数作为参数,或者是可以将函数作为返回值的函数(我们见得闭包函数就是高阶函数)。

阅读全文

使用Phabricator做为Code Review工具

目录

阅读全文

netcat

NetCat是一个非常简单的Unix工具,可以读、写TCP或UDP网络连接(network connection)。它被设计成一个可靠的后端(back-end) 工具,能被其它的程序 程序或脚本直接地或容易地驱动。同时,它又是一个功能丰富的网络调试和开 发工具,因为它可以建立你可能用到的几乎任何类型的连接,以及一些非常有 意思的内建功能 最简单的使用方法,”nc host port”,能建立一个TCP连接,连向指定的 主机和端口。接下来,你的从标准输入中输入的任何内容都会被发送到指定的 主机,任何通过连接返回来的信息都被显示在你的标准输出上。这个连接会一 直持续下去,至到连接两端的程序关闭连接。注意,这种行为不同于大多数网 络程序,它们会在从标准输入读到一个文件结束符后退出。   NetCat还可以当服务器使用,监听任意指定端口的连接请求(inbound connection ),并可做同样的读写操作。除了较小限制外,它实际并不关心自 己以“客户端”模式还是“服务器”模式运行,它都会来回运送全部数据。在任何 一种模式下,都可以设置一个非活动时间来强行关闭连接。   它还可以通过UDP来完成这些功能,因此它就象一个telnet那样的UDP程序, 用来测试你的UDP服务器。正如它的“U”所指的,UDP跟TCP相比是一种不可靠的 数据传输,一些系统在使用UDP 传送大量数据时会遇到麻烦,但它还有一些用 途。   你可能会问“为什么不用telnet来连接任意的端口”?问题提得好(valid), 这儿有一些理由。Telnet有“标准输入文件结束符(standard input EOF)”问题, 所以需要在脚本中延迟计算以便等待网络输出结束。这就是netcat持续运行直 到连接被关闭的主要原因。Telnet也不能传输任意的二进制数据,因为一些特 定的字符会被解释为Telnet的参数而被从数据流中去除。Telnet还将它的一些 诊断信息显示到标准输出上,而NetCat会将这信息与它的输出分开以不改变真 实数据的传输,除非你要求它这么做。当然了,Telnet也不能监听端口,也不 能使用UDP。 NetCat没有这些限制,比Telnet更小巧和快捷,而且还有一些其 它的功能。

阅读全文

http-head 四种常见的 POST 提交数据方式

阅读全文

nginx lua

  • 为什么会选择 OpenResty 首先,它最大的特点就是用同步的代码逻辑实现非阻塞的调用,其次它有单进程内的 LRU cache 和进程间的 share DICT cache,而且它是揉合 nginx 和 LuaJIT 而产生的。
阅读全文

second post

picture Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas ultrices porta ultrices. Nulla gravida commodo aliquet. Quisque tincidunt enim quis odio vestibulum, et luctus ipsum lacinia. Cras malesuada sit amet erat vitae porttitor. Duis vitae mollis eros. Vestibulum eget tortor sodales, ullamcorper odio ac, tincidunt felis. Nunc interdum, mauris vitae ornare bibendum, risus libero aliquam ex, cursus feugiat mi libero in nulla. Nullam vel pulvinar ante. Vivamus vitae est aliquet, porttitor eros ut, facilisis erat. Sed malesuada nibh odio, at egestas libero commodo vitae. Integer laoreet lorem ac iaculis fermentum. Praesent sodales viverra purus non semper. Maecenas eu convallis neque. Integer velit nunc, facilisis vel nisi in, semper pretium lorem. Sed orci est, pellentesque sit amet volutpat a, tristique in leo. Ut at euismod dolor, non laoreet mi. Interdum et malesuada fames ac ante ipsum primis in faucibus.

阅读全文

first post

picture

Lorem ipsum dolor sit amet

consectetur adipiscing elit. Maecenas ultrices porta ultrices. Nulla gravida

, consectetur adipiscing elit. Maecenas ultrices porta ultrices. Nulla gravida commodo aliquet. Quisque tincidunt enim quis odio vestibulum, et luctus ipsum lacinia. Cras malesuada sit amet erat vitae porttitor. Duis vitae mollis eros. Vestibulum eget tortor sodales, ullamcorper odio ac, tincidunt felis. Nunc interdum, mauris vitae ornare bibendum, risus libero aliquam ex, cursus feugiat mi libero in nulla. Nullam vel pulvinar ante. Vivamus vitae est aliquet, porttitor eros ut, facilisis erat. Sed malesuada nibh odio, at egestas libero commodo vitae. Integer laoreet lorem ac iaculis fermentum. Praesent sodales viverra purus non semper. Maecenas eu convallis neque. Integer velit nunc, facilisis vel nisi in, semper pretium lorem. <!-- more --> Sed orci est, pellentesque sit amet volutpat a, tristique in leo. Ut at euismod dolor, non laoreet mi. Interdum et malesuada fames ac ante ipsum primis in faucibus.

阅读全文

Search

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required