奥卡姆剃刀和他的剃刀兄弟们
[toc]
在开发和生活中常听人说起奥卡姆剃刀以及若无必要,勿增实体,其实除了奥卡姆剃刀这个工具外还有很多其他有用的剃刀。
剃刀是什么剃刀又称哲学剃刀,英文名Philosophical razor,是帮人做决定一些经验法则,是一种粗略的不稳定的简化思决策工具,只能做出粗略的判断(经验上的),做出的决定更可能让你满意也有可能让你不满意(慎用)。
奥卡姆剃刀奥卡姆剃刀是什么奥卡姆剃刀英文名Ockham’s Razor,又称简约法则,14世纪提出,原教旨为‘entities should not be multiplied beyond necessity’,奥卡姆剃刀更像是从500/1000简化到1/2,而不是从汤汤(封面就是汤汤)是一只猫简化到汤汤是一种生物,更不是简化成汤汤是一种植物,当然奥卡姆剃刀也可以做一些微小的删除,但是请不要滥用!
通俗解释
更简单的解释更可能是正确的
假设越少越好
有哪些影响地心说对天体运行的描述是及其复杂的,日心说对天体的描述的简单的,虽然两者都可以同等相对正确的描述天体运行轨迹(都很粗糙,太阳系统中每个星体运行轨迹是很复杂的,老三体人了),除此之外还有 ...
三分钟入门分布式系统
[toc]
什么是分布式系统为了完成共同的任务,通过某种通信方式(一般是网络)使用多个计算机节点。这个由多个计算节点组成的系统就是分布式系统。通俗来说就是使用更多机器来处理问题,其实我们的互联网就是一个分布式系统。
为什么要使用分布式系统单节点计算、存储能力弱,硬件提升性价比低,应用消耗资源过于高时;要实现高可用、高并发时;可以无限的横向扩展
如何实现分布式简单来说就是对任务分而治之(贯穿整个计算机上下的底层思想,而且来源于生活),即是分片(partition),把不同分片交给不同节点处理即可,在未来保证可用性与并发性时,我们将分片冗余处理(一个分片交给多个节点处理)
CAP定理定理指的是一个经过逻辑证明的猜想;2000年布鲁尔提出此猜想2002年MIT的大佬给出证明
描述CAP定理指出一个分布式系统不能同时满足一下三点
一致性(Consistency)所有节点访问同一份最新的数据副本
可用性(Availability)每次请求都能获取到非错的响应
分区容错性(Partition tolerance)一个分布式系统中出现故障导致分裂成多个计算节点(区);这些区应能使系统正常运行,一般 ...
go程序优化大小
go build -ldflags '-w -s' -gcflags ' -l' -o outPE,同strip命令
ldflags为链接参数,和gcc的比较像 go tool link -hlep 查看详情
gcflags为编译参数和gcc的比较像go tool compile -help查看详情
-w 禁止生成debug信息,当然也无法再使用gdb进行调试
-s 禁用符号表
-l 禁止内联;常用go run -gcflags "-m -l" (-m打印逃逸分析信息,-l禁止内联编译)做逃逸分析
使用upx -9 outPE给PE程序压缩
压缩登记1-9,9为最大压缩率,-d解压缩
upx 工具介绍
压缩(加壳)原理:将原有PE代码压缩,并在合适的地方插入实时解压代码
PE逆向工具 pev介绍(linux 可执行文件为elf,windows可执行文件为pe)123456789101112131415readpe :读取PE信息,比如导入导出表.pehash :查看程序的整体,全部或某个节区的md5,sha1,ssd ...
go逃逸分析
[toc]
go逃逸分析什么是逃逸内存从栈逃逸到堆中,会增大GC的压力
为什么要做逃逸分析申请到栈内存性能好,不会引起GC,函数返回直接释放
申请到堆内存会导致gc,引起性能问题
如何分配:
如果函数外部没有引用,则优先放到栈中;
如果函数外部存在引用,则必定放到堆中;
常见的三种逃逸
指针逃逸函数返回局部变量的指针导致指针逃逸
12345678910package mainfunc pointerEscapeFunc() *int{ var v int return &v}func main(){ pointerEscapeFunc()//v会被分配到堆上 return}
123host$ go build -gcflags '-m -l' tem.go #-m打印信息,-l忽略inline信息# command-line-arguments./tem.go:3:6: moved to heap: v #可见v被分配到了堆上
栈空间不足go的goroutine初始栈大小为2KB,go可 ...
Linux瓶颈分析
性能优化性能优化一项最重要的步骤就是寻找到系统的瓶颈
粗略分析系统响应慢,一般的瓶颈在IO、CPU、内存还有应用。
使用top查看
123456789101112131415[root@172-20-59-60 apt_ui]# toptop - 15:59:31 up 6 days, 1:10, 3 users, load average: 0.00, 0.01, 0.05Tasks: 144 total, 1 running, 142 sleeping, 0 stopped, 1 zombie%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 8009636 total, 5126364 free, 2307032 used, 576240 buff/cacheKiB Swap: 0 total, 0 free, 0 used. 5396772 avail Mem PID USER ...
硬盘IO性能估算(IOPS,吞吐量,延时)
硬盘IO性能估算(IOPS,吞吐量,延时)说明磁盘种类
硬盘有固态硬盘(SSD 盘,新式硬盘)、机械硬盘(HDD 传统硬盘)、混合硬盘(HHD 一块基于传统机械硬盘诞生出来的新硬盘)。SSD采用闪存颗粒来储存,HDD采用磁性碟片来储存,混合硬盘(HHD: Hybrid Hard Disk)是把磁性硬盘和闪存集成到一起的一种硬盘。
容量
硬盘的容量以兆字节(MB/MiB)、千兆字节(GB/GiB)或百万兆字节(TB/TiB)为单位,而常见的换算式为:1TB=1024GB,1GB=1024MB而1MB=1024KB。但硬盘厂商通常运用的是GB,也就是1G=1000MB,而Win系统,就依旧以“GB”字样来表示“GiB”单位(1024换算的),因此我们在BIOS中或在格式化硬盘时看到的容量会比厂家的标称值要小。
转速(Rotational Speed 或Spindle speed)
RPM是Revolutions Per minute的缩写,是转/每分钟。RPM值越大,内部传输率就越快,访问时间就越短,硬盘的整体性能也就越好。
寻道时间 Tseek是指将读写磁头移动至正确的磁道上所需要的时间 ...
shc与upx加密混淆压缩
[toc]
shc混淆shc安装从官网下载http://www.datsi.fi.upm.es/~frosal/sources/ (最新2015年的shc-3.8.9b.tgz),或者源码下载https://github.com/neurobin/shc (有最新的)
123456wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgztar zxvf shc-3.8.9b.tgzcd shc-3.8.9bmake cleanmake test # 等待paused 然后回车make strings&install # 等待继续输入yes
shc命令说明
123456789101112-e %s Expiration date in dd/mm/yyyy format [none]-m %s Message to display upon expiration ["Please contact your provider"]-f %s File name of the script ...
zeroconf与mDNS
[toc]
基础概念路由路由中有以下几种形式
单播:在网络地址和网络节点之间存在一一对应的关系。
任播:根据路由拓扑自动决定送到“最近”或“最好”的目的地
多播:是一种群组通信,它把信息同时传递给一组目的计算机。常指IP多播,组播地址224.0.0.0~224.0.0.255
广播:向指定网络范围内所以设备发送信息,主机标识段host ID 为全1 的IP 地址为广播地址,ARP、DHCP都使用了广播
地域性广播:一种“特殊”的多播
DNSDomain Name System,域名服务,将域名和ip地址互相影射的分布式数据库,使用TCP和UDP的53端口
TCP:面向连接的协议,提供可靠的数据传输,一般服务质量要求比较高的情况,使用这个协议。
UDP:用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
zeroConfZero configuration networking,零配置网络服务规范是一种让用户武穴使用DHCP、DNS等设置就能自动连接设备的一种规范,主要包含以下协议
Link-Local Address: 无需利用DHCP Server 取 ...
中间人攻击与HTTPS
[toc]
HTTP协议HTTP(hypertext transfer protocol )协议是一种七层协议,是万维网通信的基石,通常使用tcp协议(HTTP3使用quic(udp)),默认端口80
请求方法GET、HEAD:获取资源
POST:上传资源
PUT:修改资源
DELETE:删除资源
TRACE:回显请求
OPTIONS:回复资源所有可用方法
CONNECT:留给SSL加密使用
幂等性在函数式编程中,幂等函数是对任何值x具有f(f(x))= f(x)属性的函数,在编程领域,则意为同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的
GET、HEAD、PUT、DELETE、OPTIONS、TRACE都是幂等的,而GET、HEAD、OPTIONS、TRACE一般来说没有副作用。
状态码
1xx消息:请求已被服务器接收,继续处理
2xx成功:请求成功
3xx重定向:重定向
4xx请求错误:客户端错误
5xx服务器错误:服务器错误
HTTP keeep-aliveHTTP1.1加入
优点:同时打开的TCP链接少了、降低延时
缺点:请求后保持链接,可能会影 ...
udp offload
tx-udp_tnl-segmentationOverlay网络,例如VxLAN,现在应用的越来越多。Overlay网络可以使得用户不受物理网络的限制,进而创建,配置并管理所需要的虚拟网络连接。同时Overlay可以让多个租户共用一个物理网络,提高网络的利用率。Overlay网络有很多种,但是最具有代表性的是VxLAN。VxLAN是一个MAC in UDP的设计,具体格式如下所示。
从VxLAN的格式可以看出,以VxLAN为代表的Overlay网络在性能上存在两个问题。一个是Overhead的增加,VxLAN在原始的Ethernet Frame上再包了一层Ethernet+IP+UDP+VXLAN,这样每个Ethernet Frame比原来要多传输50个字节。所以可以预见的是,Overlay网络的效率必然要低于Underlay网络。另一个问题比传50个字节更为严重,那就是需要处理这额外的50个字节。这50个字节包括了4个Header,每个Header都涉及到拷贝,计算,都需要消耗CPU。而我们现在迫切的问题在于CPU可以用来处理每个网络数据包的时间更少了。
首先,VxLAN的这50个 ...