自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 HTTP协议骨干知识

粗略读了一遍《HTTP权威指南》,觉得学习HTTP协议主要掌握5大功能点:1.代理:学完这个,尝试着搭建一个代理服务器,连到墙外的网络。2.认证:理解对称密钥、公开秘钥、证书、HTTPS以及SSL。3.重定向与负载均衡:结合代理来看效果更佳。4.HTTP报文信息:主要知道2XX/3XX/4XX/5XX代表什么意思。5.缓存:内容分发网络可以利用缓存提高访问到达速度。...

2018-12-29 11:47:25 183

原创 HTTP认证

基本认证:用户信息BASE64后传给服务器,存在被第三方截获,篡改报文内容或实施重放攻击的危险。摘要认证:使用有过期时间的随机数做对称密钥,使用MD5加密报文,能有效防止报文内容被篡改或者重放攻击。但是,存在N个服务器节点与N个客户端交互时,会产生N的二次方个密钥,服务器难以维护数量如此庞大的密钥。证书认证:使用CA证书,在证书中公开唯一的公钥,服务器自己保管唯一的私钥,可以完美解...

2018-12-29 11:01:13 432 1

原创 合理利用累积量

我觉得学习《Tcp/IP详解 卷一:协议》后,如果能对滑动窗口的底层思想-利用累积量有个深刻认识,这本书就算没白读。累积意味着不会做重复的劳动,意味着高效。Kafka的消费者定时提交offset就是利用累积量,放大整个系统的吞吐量。今天优化前人留下的业务代码,就利用了累积量,填掉了前人遗留的扫库的坑。...

2018-12-28 16:43:49 443

原创 MySQL索引未命中优化

业务SQL使用索引不见得就是优化的SQL,依然存在索引未命中的风险,例如存在多个匹配索引,可能命中的索引不是你想要的那个索引,可以通过explain来分析: explain SELECT count(id)  FROM active_task_log a WHERE a.add_time >= '2018-12-01' AND a.add_time <= '2018-12-20' ...

2018-12-28 11:39:18 2001

原创 http证书摘要防重放

如果http的认证证书摘要是不变的,就存在被第三方截获http请求中的证书摘要后重放给服务的危险。解决办法是服务器发给客户端的401响应中带上一个随机数salt,这个salt必须保持一定的新鲜度,例如每个salt可以重用5次或者10秒,当然你也可以追求绝对的安全,从而每次都要使用一个新的salt,但这样性能未必达标,总之,要在性能和安全之间做好权衡。...

2018-12-27 19:43:56 552

原创 为什么要使用Base64编码

Base64原理:将8位的二进制字节序列划分为6位的块,不足的尾部补0(以=结尾),然后将这些6位的块映射到一张含有64个字符的表中。为什么要使用Base64呢?1、防止透传用户名和密码2、用户输入的信息中如果包含国际字符或者Http头无法识别的字符,则必须将要传输的信息转为Base64,因为Base64是ASCII的子集,http协议可以识别。...

2018-12-27 16:37:18 1626

原创 防脱库策略

直接存储客户的密码,存在被脱库后用户在其他App的密码与此密码相同,则同样会被窃取账户资料的风险。解决办法:不直接存储用户的密码,不管是明文的还是加密的密码,代之以用户账户+密码+秘钥生成的token,当用户登录时,输入密码,由后台服务器计算实时的token与数据库里的token是否一致,一致则认证通过,不一致则认证不通过。...

2018-12-27 15:50:02 530

原创 钉钉机器人推送数据

钉钉开放平台地址:https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.karFPe&treeId=257&articleId=105735&docType=1需求:统计14个抽奖指标的时-日-周-月以及环比的抽奖数据,格式如下****************************   ...

2018-12-27 11:14:55 1557

原创 隧道技术

挂羊头卖狗肉的技术实现。如果B/S或C/S中间的防火墙只支持使用http协议来访问资源,而你想使用https协议进行资源访问,直接使用https会被防火墙视为攻击流量而被挡掉,为此,有了隧道技术,将https请求封装在http请求中,从而绕过防火墙,访问到资源。...

2018-12-24 15:56:36 771

原创 5层协议

http:应用层TCP:传输层IP:网络层ARP:链路层路由器/交换机:物理层使用http访问资源,必须先建立TCP/IP连接,然后发送HTTP报文。

2018-12-24 11:38:54 196

原创 对URL的理解

首先URL是全网唯一的,可以唯一确定一个资源的地址。URL是URI的一个子集,URI除了URL还有URN,URN是资源的名称固定,但对应资源的位置可能是变化的,最常见的就是小黄片,名称不变,但映射的资源地址变了。看一个常规的url:    https://baike.baidu.com:80/item/鬼谷子全集/7589785;sale=false?fr=aladdinhttps:协...

2018-12-24 10:39:47 776

原创 对地址的理解

程序的执行最重要的一步是寻址,使用HTTP访问网络资源最重要一步的是根据域名解析出服务器的IP和PORT,也是寻址的过程,这难道是巧合吗?我认为不是巧合,因为信息不会无缘无故的流动,只有建立信息流动的链路才能整合资源。跟“要想富,先修路”一样,要想让资源的价值最大化,必须构建起资源流动的通道,做渠道的,做电商的,等等模式都是在打通资源的流动的通道,大道至简啊!...

2018-12-20 16:06:24 195 2

原创 为什么TIME_WAIT状态到CLOSED状态要等2MSL的时长

1.TIME_WAIT需要确保关闭端发送的FIN的ACK被对端的套接字接收到,如果1个MSL内对端没有收到响应,那么关闭端就要重发FIN的ACK。2.当关闭当前的TCP连接时,最后发送出去的数据报可能被路由器的转发队列缓存,如果立马切换到CLOSED状态,可能使用相同窗口的新的TCP连接收到的数据报还是前一个TCP连接缓存在路由器中的数据。...

2018-12-18 16:55:50 863 1

原创 TCP拥塞控制之拥塞避免

TCP发送方通过慢启动确定发送数据的窗口阈值,一旦达到这个阈值,就意味着虽然网络中可能有更多可用的资源,但是如果占用全部的资源,将会使共享路由器队列的其他TCP连接出现严重的丢包和重传情况,从而导致整个网路性能不稳定。为了传输更多的资源而不至于影响其他TCP连接的传输,TCP实现了拥塞避免算法。一旦cwnd达到阈值,就会进入拥塞避免阶段,cwnd每次成功接收到一个ACK,cwnd只会增加一个特...

2018-12-17 11:07:35 419

原创 TCP拥塞控制之慢启动

TCP以一定数目的数据段开始慢启动,称为初始窗口(Initial Window,IW)。在没有ACK延时的情况下,每接收到一个好的ACK就意味着发送方可以发送两个新的数据包,这会使得发送方窗口随时间呈指数增长。当发送ACK时延时,如每隔1个数据包生成一个ACK,cwnd仍然以指数增长,当增幅较小。如果cwnd增长至非常大,发送大量的数据包会导致网络瘫痪,此时,cwnd将减小至原值的一半,这是慢...

2018-12-17 10:51:05 348

原创 TCP超时重传

RTT:发送TCP报文段到收到ACK的时间。RTO:TCP决定重传的超时时间,这是一个基于RTT的统计时间。TCP超时重传分为基于计时器的重传和快速重传。失序数据:序列号高于空缺的数据成为失序数据,因为这些数据和之前接收到的序列号不连续。1.基于计时器的重传:TCP根据基于时间动态变化的RTT测量值得到RTO,发送报文段时应确保重传计时器设置合理。在设置定时器前,需要记录被计时...

2018-12-07 14:44:52 462

原创 TCP重传二义性

当一个TCP报文段的传输出现超时时,该数据包就会被重传,接着收到一个确认信息,那么该信息是对第一次还是第二次传输的确认就存在二义性。二义性的问题都是因为缺少足够的信息,可以增加一个信息维度,例如在TCP头加入重传序列号retry_sqe_no,可以比较这个序列号来判断收到的ACK是哪次重传的应答。...

2018-12-06 14:23:39 1015

原创 程序中间态

大型系统或者很复杂的业务,往往要将一件事分割为简单的几步,下一步依赖上一步的结果,可以将最终处理结果之前的所有结果状态视为中间态。其实,数据库、队列(语言内置的队列、kafka、mq等)等保存的非最终结果的数据都可以视为中间态的数据,理解了这层意思,不难理解为什么商业程序很喜欢使用中间件——可以将程序的复杂性有效降低。...

2018-12-06 11:15:13 1042

原创 2MSL导致的服务器端口占用问题

MSL(Maximum Segment Lifetime)是最大报文段生存时间,它代表任何报文段在被丢弃前在网络中被允许存在的最长时间。这个时间是有限制的,因为TCP依赖IP传输数据报,而IP数据报有TTL字段和最大跳数字段,这两个字段限制了IP数据报在网络中的生存时间,最长为2分钟。2MSL是关闭TCP连接时,进入TIME_WAIT状态后,主动发起关闭的一方需要等待的时间,关闭发起方一直要等...

2018-12-05 14:20:45 375

原创 TCP确认ACK与Kafka的ACK相通之处

TCP协议经常利用一个ACK来确认多个报文段,因为ACK是可以累积的。Kafka消费者一般会隔一段时间提交一次offset,避免占用带宽,异曲同工之妙。

2018-12-05 13:16:06 474

原创 telnet命令

Windows下的telnet命令用于建立一条到服务器的TCP连接。telnet ip port,如telnet 10.10.2.123 8086,当这个socket没有被应用程序监听时,输入这条命令,会报错:正在连接10.10.2.123...无法打开到主机的连接。 在端口 8086: 连接失败当这个socket被应用程序监听时,输入这个命令,会与服务器之间建立一条TCP连接。客户端...

2018-12-04 17:55:27 2526

原创 TCP术语套接字

一个IP地址和一个端口的组合被称为一个套接字(socket)或者一个端点(endpoint)。每个TCP连接由一对套接字唯一地标识。

2018-12-04 16:43:04 292

原创 TCP的ACK

当TCP接收到连接的另一端点发来的数据时,它会发送一个确认。这个确认可能不会立即发送,而会延迟片刻。TCP使用的ACK是累积的,因此,一个指示字节号N的ACK暗示所有直到N的字节(但不包括N)都已经被接收了。这对于ACK丢失来说,提供了一定的鲁棒性,因为如果序列号1212的ACK丢失,但是收到序列号1213的ACK,则说明发送1212的报文已经被接收方收到并处理了。TCP头里有个32位的序列号...

2018-12-04 16:36:53 3293 1

原创 提现流程

发起提现的一方需要实现四个接口:1.创建订单接口:创建一个不含银行卡和代扣结果的订单2.提现确认接口:发起代扣请求,更新代扣到账银行卡信息和代扣接口同步返回的信息3.代扣回调接口:外部代扣接口回调通知代扣结果4.代扣结果定时查询接口:防止因为网络原因导致代扣结果丢失。...

2018-12-03 15:11:51 771

原创 Redis幂等处理

可以利用redis的setnx函数对请求入参的某个唯一的字段(如orderId)做幂等拦截,防止重复处理请求。//幂等校验if(!jedisTemplate.setnx(RedisConstants.RED_PACKET_RECV + getRedPacketDto.getOrderId() + getRedPacketDto.getRedPacketId(), "0.00")){ ...

2018-12-03 13:45:23 1831

原创 MySQL更新字符串字段使用单引号

update active_task_conf set active_rule_value="[{"rpCode":"FJM685703226","weight":1}]" where id = 7; 报语法错误,需要把"[{"rpCode":"FJM685703226","weight":1}]"改为单引号的'[{"rpCode&qu

2018-12-03 13:41:38 2300

原创 Redis分布式锁

Redis分布式锁适用于多实例的微服务架构,比如同一个服务部署到4不同IP地址的台机器上,为了防止同一个请求多次处理,需要使用分布式锁,同一时刻只处理一个请求。Redis分布式锁一般是封装set方法。/** * 默认redis锁存活时间,10秒 */private static final int DEFAULT_LOCK_EXPIRE_TIME = 10;/** * 获取锁,...

2018-12-03 13:29:32 156

原创 SpringMVC:Controller请求报错The request sent by the client was syntactically incorrect

因为Spring默认的parser是StringParser,而我传入的是组合类,SpringMVC解析出错。@Datapublic class QQGameGetCouponDto { private BaseParams baseParams; private QQGameGetCouponBizParam bizParams;}对于入参为组合类的情况,需要提供特...

2018-12-03 11:54:05 152

常用算法资源:算法pdf

常用算法资源:算法pdf

2023-12-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除