目录

最新文章

文本处理 6天前

  1. find 查找出需要处理的所有文件

  2. cat 将所有文件拼接,成为起始的stdin

  3. grepstdin流里过滤出,自己想要的行

  4. sedstdin流进行 字符串替换,tr 对流进行单个字符式的替换、去重、删除

  5. cutstdin中每一行,切出指定列,awk 也是切出指定多个列,还是可编程命令

  6. sort对所有行排序,排序好后,可以用uniq -c去除相同的行,再sort -nr到序输出

  7. wc -l统计下行数,或者sed '100,$d' 只取前 100 行

预处理器 6天前

本文是 C 预处理器的笔记,在 C++ 中已经不再建议使用预处理器实现功能了。

高效的命令行 6天前

使用命令行工作的一个总结。

大象UML 2周前

本文是《大象 thinking in UML》一书的笔记。

语言导学 2周前

这是 C++ 语言之父 Stroustrup 写的新书《A Tour of C++》的中文版。2015年出版的,值的一看。本文是笔记。

Go函数 2周前

文章无缩略内容。

Go标准库 2周前

记录了一些标准库函数的用法。

HTTPServer 2周前

文章无缩略内容。

启动外部程序 2周前

os 包有一个 StartProcess 函数可以调用或启动外部系统命令和二进制可执行文件;它的第一个参数是要运行的进程,第二个参数用来传递选项或参数,第三个参数是含有系统环境基本信息的结构体。

这个函数返回被启动进程的 id(pid),或者启动失败返回错误。

exec 包中也有同样功能的更简单的结构体和函数;主要是 exec.Command(name string, arg ...string)Run()。首先需要用系统命令或可执行文件的名字创建一个 Command 对象,然后用这个对象作为接收者调用 Run()。下面的程序(因为是执行 Linux 命令,只能在 Linux 下面运行)演示了它们的使用:

调试 2周前

打印变量

分布式网站 2周前

文章无缩略内容。

面向容错性架构 2周前

文章无缩略内容。

Go 2周前

文章无缩略内容。

网络工具 2周前

net-tools 与 iproute2

net-tools 起源于BSD,自2001年起,Linux社区已经对其停止维护,net-tools通过 procfs(/proc) 和 ioctl 系统调用去访问和改变内核网络配置。

而iproute2旨在取代net-tools,并提供了一些新功能。一些Linux发行版已经停止支持net-tools,只支持iproute2。而iproute2则通过netlink套接字接口与内核通讯。

  • net-tools中工具的名字比较杂乱

  • iproute2则相对整齐和直观,基本是ip命令加后面的子命令

虽然取代意图很明显,但是这么多年过去了,net-tool依然还在被广泛使用,最好还是两套命令都掌握吧。

Erlang中文教程 2周前

面向消息、面向并发的语言Erlang!!!

微软c编程 2周前

假想编译程序

MySQL节点 2周前

参考 Ubuntu 装机指南,获得一个干净的Server后,下面可以将这个Server做成MySQL节点。

Fcitx输入法 2周前

文章无缩略内容。

CPU 2周前

CPU两种工作模式:

  • 内核态:能访问所有硬件、能使用所有机器指令

  • 用户态:受限制的硬件访问、只能使用部分机器指令

编码 2周前

《编码 隐匿在计算机软硬件背后的语言》笔记

字符编码 2021年8月31日

本文介绍了常用的字符编码,以及收集了几个查看字符编码的工具网站。

运行环境 2021年8月31日

文章无缩略内容。

ssh 2021年8月31日

  • 认证:可信地判断出用户的身份,通过SSH登录,需要提供数字身份证明,通过测试后才允许登录

  • 加密:对数据进行加密,除接受者,其他人都无法理解数据

  • 完整性:确保网络上传输的数据到达目的地时,没有被改变

认证是双向的,包含了server 对 client 的验证,也包含了 client 对 server 的验证。

SSH 提供的端到端的加密,基础是随机密钥,每次通过验证后,都会产生一个会话,client 与 server 协商产生随机密钥,发送的数据全部使用该密钥加密。在会话结束后,该密钥被丢弃。对数据加密的算法有: Blowfish / DES / IDEA (对称加密) 等。

授权是认证之后进行的,可以对通过ssh登录的用户权限进行一些限制。

Xhprof 2021年6月30日

函数调用性能分析工具.

Xhprof GitHub官网

利用 XHProf 对 PHP 代码进行性能分析

PHP7 安装 xhprof

php的性能分析工具:xhprof

SHELL 2021年6月30日

文章无缩略内容。

PHP反射 2021年6月30日

文章无缩略内容。

PHP字符 2021年6月30日

PHP字符串笔记。

PHP对象 2021年6月30日

本文是PHP对象的笔记,也论述了一些PHP面向对象实现上的得与失。

PHP规范 2021年6月30日

PHP PSR 标准规范 合集,是一个比较好的中文翻译版本。

Xdebug 2021年6月30日

Xdebug 中文文档

Xdebug安装使用远程调试原理

设计模式 2021年6月30日

本文是PHP常用的设计模式的梳理。

Channel 2021年6月30日

性质

  • 向已经关闭的通道发送数据,会引发panic

  • close已经关闭的channel或值为nilchannel,会引发panic

  • 从已关闭接收数据,返回已缓冲数据或零值

  • 无论收发,nil通道都会阻塞

读取用户输入 2021年6月30日

文章无缩略内容。

Go语言 2021年6月30日

文章无缩略内容。

设计模式 2021年6月30日

文章无缩略内容。

补码 2021年6月30日

现实生活中,我们有加法、减法、乘法和除法,但在计算机中只有一个加法器。换句话说,加法运算在计算机中可以直接完成,减法、乘法和除法运算最终也得转换为加法才能实现。

数A减去数B,与数A加上"数B的补码"结果是一样的。这就是补码对于计算机的意义:将减法运算变成了加法运算。

网络层 2021年6月30日

文章无缩略内容。

PHP参考 2021年5月31日

PHP常用API参考。

概述 2021年5月31日

微服务设计 2021年5月31日

领域驱动设计

持续交付理论

每次提交均可发布

六边形架构理论

按需虚拟化

基础设施自动化

小型自治团队

大型集群系统

SOA (Service Oriented Architecture) :面向服务架构。微服务可以看成是SOA的一种特定方法。

微服务:一些协同工作的小而自治的服务。好处:

  • 技术异构

  • 弹性

  • 拓展性

  • 简化部署,可以灵活发布

  • 与公司组织结构相匹配

  • 可组合性,易于重用服务,构建新业务

  • 可替代性

可以重用的共享库在微服务中会是一个问题:

  • 如果两个微服务共享一个重用库,那么两个微服务都需要重新发布

  • 如果各自维护,又会带来,代码不一致的维护负担

架构师 类比 城市规划师

ThinkPHP 2021年3月31日

文章无缩略内容。

netwox 2021年3月31日

https://sourceforge.net/projects/ntwox/

$ sudo apt-get install netwox

https 2021年3月31日

安全背后: 浏览器是如何校验证书的

https://cjting.me/2021/03/02/how-to-validate-tls-certificate/

css面试 2021年3月31日

如何理解 CSS 的盒子模型?

每个 HTML 元素都是长方形盒子。
(1)盒子模型有两种:IE 盒子模型、标准 W3C 盒子模型;IE 的 content 部分包含了 border 和 pading。
(2)标准 W3C 盒模型包含:内容(content)、填充(padding)、边界(margin)、边框(border)。

link 和@import 的区别?

(1)link 属于 XHTML 标签,而@import 是 CSS 提供的。
(2)页面被加载时,link 会同时被加载,而@import 引用的 CSS 会等到页面被加载完再加载。
(3)import 只在 IE 5 以上才能识别,而 link 是 XHTML 标签,无兼容问题。
(4)link 方式的样式权重高于@import 的权重。
(5)使用 dom 控制样式时的差别。当使用 javascript 控制 dom 去改变样式的时候,只能使用 link 标签,因为@import 不是 dom 可以控制的。

CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算?CSS 3 新增伪类有哪些?

id 选择器(# myid)
类选择器(.myclassname)
标签选择器(div、h1、p)
相邻选择器(h1 + p)
子选择器(ul < li)
后代选择器(li a)
通配符选择器( * )
属性选择器(a[rel = "external"])
伪类选择器(a: hover, li: nth - child)
可继承: font-size font-family color, UL LI DL DD DT;
不可继承 :border padding margin width height ;
优先级就近原则,样式定义最近者为准,载入样式以最后载入的定位为准。
优先级为:
!important > id > class > tag
important 比 内联优先级高
CSS3 新增伪类举例:
p:first-of-type 选择属于其父元素的首个<p>元素的每个<p>元素。
p:last-of-type 选择属于其父元素的最后<p>元素的每个<p>元素。
p:only-of-type 选择属于其父元素唯一的<p>元素的每个<p>元素。
p:only-child 选择属于其父元素的唯一子元素的每个<p>元素。
p:nth-child(2) 选择属于其父元素的第二个子元素的每个<p>元素。
:enabled、:disabled 控制表单控件的禁用状态。
:checked 单选框或复选框被选中。

用纯 CSS 创建一个三角形的原理是什么?

api接口设计 2021年3月31日

最好的方法是限定几个可以访问 api 的域名,其他域名全部拒绝。
但是Access-Control-Allow-Origin只能设置一个值,所以要多端共用,只有header("Access-Control-Allow-Origin:*");

web 优化 2021年3月31日

动静分离

所谓的动静分离,就是将 Web 应用程序中静态和动态的内容分别放在不同的 Web 服务器上,有针对性的处理动态和静态内容,从而达到性能的提升。我们知道如果一个 HTML 有多个域名请求数据文件会提高
Tomcat 服务器在处理静态和并发问题上比较弱,所以事先动静分离的方式一般会用 Apache+Tomcat、Nginx+Tomcat 等。

以 Apache+Tomcat 为例,其运行机理是:页面请求首先给 Apache,然后 Apache 分析请求信息是静态还是动态,静态则本机处理,动态则交给 Tomcat 做处理这其实是负载均衡的雏形,这样的实现不用让开发人员做任何特殊开发,一个<img src="demo.jpg">交给服务器即可,至于这个文件是从 Apache 还是从 Tomcat 取得,开发人员完全无需关注。

HTTP 持久连接

持久连接(Keep-Alive)也叫做长连接,它是一种 TCP 的连接方式,连接会被浏览器和服务器所缓存,在下次连接同一服务器时,缓存的连接被重新使用。HTTP 无状态性表示了它不属于长连接,但 HTTP/1.1 提供了对长连接的支持(不过这必须依赖浏览器和服务器双方均支持长连接功能才行),最常见的 HTTP 长连接例子是“断点下载”。
浏览器在请求的头部添加 Connection:Keep-Alive,以此告诉服务器“我支持长连接,你支持的话就和我建立长连接吧”,而倘若服务器的确支持长连接,那么就在响应头部添加“Connection:Keep-Alive”,从而告诉浏览器“我的确也支持,那我们建立长连接吧”。服务器还可以通过 Keep-Alive:timeout=..., max=...的头部告诉浏览器长连接失效时间。
配置长连接通常是要服务器支持设置,有测试数据显示,使用长连接和不使用长连接的性能对比,对于 Tomcat 配置的 maxKeepAliveRequests 为 50 来说,效率竟然提升了将近 5 倍。

GZIP 压缩技术

Unixlinux编程实践 2021年3月31日

文章无缩略内容。

linux系统编程 2021年3月31日

文章无缩略内容。

CDN 2021年3月31日

image-20210318135436554

负载均衡系统是一个CDN系统的神经中枢,主要功能是负责对所有发起服务请求的用户进行访问调度,确定提供给用户的最终实际访问地址。

image-20210318135830572

  • GAC(Global Access Controller)模块对应于图2-1中的负载均衡系统,主要采用了智能DNS解析方案,负责通过域名解析应答实现将用户请求调度到最优服务节点的目的。

  • CCN(ChinaCache Nod)模块对应于图2-1中的分发服务系统,是CDN的基本服务模块,由分布于各个城市、各个运营商网络中的Cache设备和辅助设备组成。

  • NOC(Network Operating Center)模块对应图2-1中的网络管理系统,负责对全网进行7×24小时的监控和管理。NOC可以监控ChinaCache CDN中的链路状况、节点响应速度、设备运行状态,也可以监控到客户的源站点运行状况等信息,一旦发现异常马上采取相应措施予以解决,是保障CDN服务安全可靠性的重要系统。值得一提的是,蓝汛的NOC中设置了源站点监控功能,对客户源站进行可达性监控,从而减轻或者避免由于源站故障造成的服务中断。

  • OSS(Operating Support System)模块对应图2-1中的运营管理子系统,负责采集和汇总各个CCN的日志记录信息,然后由中央处理软件加以整理和分析,最后通过客户服务门户进行发布。蓝汛的客户可以通过OSS提供的查询界面来查询加速页面或频道的实时流量、流量分布、点击数量、访问日志等信息。

image-20210318144834690

首先由用户代理(IP地址10.9.55.68,端口4719)向服务器主机(IP地址202.102.86.141,端口80,这里的服务器不是源服务器)发起TCP连接建立请求[SYN],服务器同意用户请求并向用户代理响应[SYN, ACK],用户代理再返回[ACK],这样双方就通过三次握手过程建立起了一个TCP连接。

image-20210318151200423

高可用 2021年3月31日

需求驱动驱动;而高可用与高性能,是架构设计中两个非常重要的决策因素。因此,面对不同业务系统的不同需求,对高可用与高性能也会有不同的决策结论,其实现的复杂度也各不相同。支付宝业务,对于可用性和性能就会有很高的要求,在可用性方面希望能提供7*24不间断服务,在高性能方面则希望能实时收付款;而对于一个学生管理系统,在可用性与性能方面就不一定要有多高的要求,比如晚上可关机,几秒内能查询到信息也可接受。为此,高可用性与高性能的复杂度讨论需要结合业务需求。

1 WHAT - 什么是可用性?
定义可用性,可以先定义什么是不可用。需要经历若干环节,网站的页面才能呈现在最终的用户面前;而其中的任何一个环节出现了故障,都可能会导致网站的页面不可访问,也就是出现了网站不可用的情况。昨夜iOS版本QQ出现大面积闪退就是一个系统不可用的典型案例。

我们可以利用百分比来对网站可用性进行度量:
网站不可用时间=完成故障修复的时间点 - 故障发现的时间点
网站年度可用时间=年度总时间 - 网站不可用时间
网站年度可用性=(网站年度可用时间/年度总时间) x 100%

举例:一些知名大型网站的可用性可达到99.99%(俗称4个9),我们可以算一下一年下来留给处理故障的时间有多少?
年度总时间=3652460=525600分钟
网站不可用时间=525600*(1-99.99%)=52.56分钟
也就是,如果网站要达到4个9的可用性,一年下来网站不可用时间最多53分钟(也就是不足1个小时)。

可见,高可用性就是技术实力的象征,高可用性就是竞争力。

2 WHY - 为什么会出现不可用?
硬件故障。网站多运行在普通的商用服务器,而这些服务器本身就不具备高可用性,再加之网站系统背后有数量众多服务器,那么一定时间内服务器宕机是大概率事件,直接导致部署在该服务器上的服务受影响。

软件BUG或网站更新升级发布。BUG不能消灭,只能减少;上线后的系统在运行过程中,难免会出现故障,而这些故障同样直接导致某些网站服务不可用;此外,网站更新升级发布也会引起相对较频繁的服务器宕机。

不可抗拒力。如地震、水灾、战争等。

3 HOW - 如何做到高可用
核心思想:网站高可用的主要技术手段是服务与数据的冗余备份与失效转移。同一服务组件部署在多台服务器上;数据存储在多台服务器上互相备份。通过上述技术手段,当任何一台服务器宕机或出现各种不可预期的问题时,就将相应的服务切换到其他可用的服务器上,不影响系统的整体可用性,也不会导致数据丢失。

从架构角度看可用性:当前网站系统多采用经典的分层模型,从上到下为:应用层、服务层与数据层。应用层主要实现业务逻辑处理;服务层提供可复用的服务;数据层负责数据读写;在部署架构上常采用应用和数据分离部署,应用会部署到不同服务器上,这些服务器被称为应用层的服务器;这些可复用的服务也会各自部署在不同服务器上,称为服务层的服务器;而各类数据库系统、文件柜等数据则部署在数据层的服务器。

硬件故障方面引起不可用的技术解决措施:(1)应用服务器。可通过负载均衡设备将多个应用服务器构建为集群对外提供服务(前提是这些服务需要设计为无状态,即应用服务器不保存业务的上下文信息,而仅根据每次请求提交的数据进行业务逻辑的操作响应),当均衡设备通过心跳检测手段检测到应用服务器不可用时,则将其从集群中移除,并将请求切换到其他可用的应用服务上。(2)服务层服务器。这些服务器被应用层通过分布式服务框架(如Dubbo)访问,分布式服务框架可在应用层客户端程序中实现软件负载均衡,并通过服务注册中心提供服务的服务器进行心跳检测,当发现有服务器不可用时,立即通知客户端程序修改服务列表,同时移除响应的服务器。(3)数据服务器。需要在数据写入时进行数据同步复制,将数据写入多台服务器上,实现数据冗余备份;当数据服务器宕机时,应用程序将访问切换到有备份数据的服务器上。

软件方面引起不可用的技术解决措施:通过软件开发过程进行质量保证。通过预发布验证、严格测试、灰度发布等手段,尽量减少上线服务的故障。

计算机硬件 2021年3月31日

进程 2021年3月31日

链路层 2021年3月31日

wireshark 2021年3月31日

select和poll及epoll 2021年3月31日

高性能服务器编程 2021年3月31日

CSAPP 2021年3月31日

Linux系统原理 2021年3月31日

现代操作系统 2021年3月31日

16位CPU汇编语言 2021年3月31日

32位CPU汇编语言 2021年3月31日

64位CPU汇编语言 2021年3月31日

传输层 2021年3月31日

应用层 2021年3月31日

物理层 2021年3月31日

自顶向下 2021年3月31日

CentOS 2021年3月31日

Ubuntu 2021年3月31日

link 2021年3月31日

gpg 2021年3月31日

Docker技术栈 2021年3月31日

PHP7.2操作MongoDB 2021年3月31日

PHP函数 2021年3月31日

VirtualBox 2021年3月31日

Linux的C 2021年3月31日

线程 2021年3月31日

KMS 2021年2月28日

Linux的使用 2021年2月28日

Ansible 2021年2月28日

Rsync 2021年2月28日

MySQL或MariaDB管理 2021年2月28日

Docker 2021年2月28日

Lua脚本 2021年2月28日

事务 2021年2月28日

RabbitMQ 2021年2月28日

cmake 2021年2月28日

K8s实战 2021年2月28日

PHP语言 2021年2月28日

正则表达式 2021年2月28日

K8s和jenkins 2021年2月28日

k8s书籍 2021年2月28日

nginx 2021年2月28日

SRE 2021年1月31日

ab并发测试工具 2021年1月31日

Prometheus 2021年1月31日

PHP节点 2021年1月31日

事件处理 2021年1月31日

内置对象 2021年1月31日

js对象类型检测 2021年1月31日

PHP会话 2021年1月31日

curl 2021年1月31日

生产环境部署redis 2021年1月31日

Apache 2021年1月31日

git 2021年1月31日

OS 2021年1月31日

单词 2021年1月31日

Docker原理 2020年12月31日

生产环境 2020年12月31日

Effective 2020年12月31日

任务队列和发布订阅 2020年12月31日

编程学习路径 2020年12月31日

codekissyoung 2020年12月31日

镜像队列 2020年12月31日

从汇编看C语言 2020年12月31日

PHP异常 2020年12月31日

闭包 2020年12月31日

AutoTools 2020年12月31日

PostgreSQL 2020年12月31日

SQL 2020年12月31日

TiDB 2020年12月31日

Code-review 2020年12月31日

程序员的思维修炼 2020年12月31日

给产品经理讲技术 2020年12月31日

架构文章 2020年12月31日

大话数据结构 2020年12月31日

红黑树 2020年12月31日

erlang 2020年12月31日

C 2020年12月31日

mongo客户端命令 2020年11月30日

BeyondCompare 2020年11月30日

PHP部署 2020年11月30日

语言比较 2020年11月30日

语言设计 2020年11月30日

深入理解构建系统 2020年11月30日

测试与文档 2020年10月31日

html面试 2020年10月31日

http 2020年10月31日

OOP 2020年10月31日

类型系统 2020年9月30日

概述 2020年8月31日

Nginx节点 2020年8月31日

JS 2020年8月31日

xss 2020年8月31日

概念基础 2020年7月31日

优化 2020年7月31日

如何实现一个数据库 2020年7月31日

数据库设计 2020年7月31日

排序 2020年7月31日

Accelerated 2020年7月31日

Primer 2020年7月31日

概述 2020年7月31日

单链表 2020年6月30日

PHP数组 2020年6月30日

Schemer语言 2020年5月31日

常见样式 2020年5月31日

网页布局 2020年5月31日

CPP_PrimerPlus 2020年3月31日

STL 2020年3月31日

语言的设计与演化 2020年3月31日

GDB调试器 2020年3月31日

Make构建工具 2020年3月31日

MongoDB安全 2020年3月31日

Redis-Sentinel 2020年3月31日

数据类型 2020年3月31日

配置 2020年3月31日

GoMicro 2020年3月31日

scss 2020年3月31日

网页加载顺序 2020年3月31日

网页文字 2020年3月31日

规范书写 2020年3月31日

配色表 2020年3月31日

JSON 2020年3月31日

cookie-js 2020年3月31日

jquery 2020年3月31日

js模块化 2020年3月31日

上传文件 2020年3月31日

函数 2020年3月31日

基础 2020年3月31日

对象 2020年3月31日

正则 2020年3月31日

RUSTful 2020年3月31日

数字签名算法RSA 2020年3月31日

MySQL使用军规 2020年3月31日

MySQL技术内幕 2020年3月31日

SQLite 2020年3月31日

SQL注入攻击与防御 2020年3月31日

mysqlserver 2020年3月31日

phpmyadmin 2020年3月31日

事务 2020年3月31日

深入理解SQL 2020年3月31日

索引 2020年3月31日

书籍推荐 2020年3月31日

Game Server 2020年3月31日

服务端架构整理 2020年3月31日

概述 2020年3月31日

游戏服务端开发面试 2020年3月31日

网络游戏服务器开发框架 2020年3月31日

AVL树 2020年3月31日

B+树 2020年3月31日

B树 2020年3月31日

字符串 2020年3月31日

散列 2020年3月31日

数列 2020年3月31日

算法 2020年3月31日

算法竞赛入门经典 2020年3月31日

跳表 2020年3月31日