先来说说牛排的熟度,通常只有奇数倍,比如一分、三分、五分、七分熟,点单的时候一般不要说六分熟、八分熟。能够接受生肉的,推荐选择三分熟,感受牛排的软嫩多汁;喜欢老一点的,可以选择七分熟;五分熟则是一个比较平衡的状态,当然主要还是看个人口味。再来说说牛排的种类,最常见的就是菲力、西冷、肋眼、 T骨、上脑、板腱和牛小排了,关于他们的特点、口感以及最佳使用方式,请看漫画哦!
All posts by dotte
圆明园被英法联军毁前是什么样子
说起晚清时期的懦弱和帝国主义列强的野蛮,有一件事是最具有代表性的,这件事就是英法联军火烧圆明园。在1709年,这座院子就开始建立,因为是康熙赏赐给雍正的园子,在雍正登基之后,园子的规模一步步扩大,在乾隆时期,将万春园并入,而后历经各个朝代,都有进行修缮,最后有着万园之园的称呼。
十二生肖兽首
这种园子,无论是经济、文化还是历史价值,都是无与伦比的,从一定程度上来说,圆明园已经是一个世界性的遗产,全世界的人都不应该破坏它。可是圆明园作为皇家陵园,在清朝的衰败之后,它却成了帝国主义列强进行劫掠的地方,在1860年,咸丰皇帝带着慈禧慈安往避暑山庄跑去之后,圆明园就成了摆着强盗面前的金银珠宝自取点了。
可是不知什么根本的原因惹怒了英法联军,他们抢走了无数金银珠宝之后,还在10月18日一把大火烧了圆明园,堪称是人类遗产的重大损失。这座百年陵园被焚毁,直到今天,都有无数的中华儿女为之感到悲痛和惋惜,甚至是一些外国人都对此感到很可惜。
那么,这座有着天下第一园称呼的圆明园,在被毁之前,是一个什么样子呢?其实在圆明园被毁之前,有一个英国摄影家就拍摄下了珍贵的圆明园被毁前的照片,虽然当时的技术只能是黑白的,可是照片一经公布,还是让人感到震撼,里面的建筑风格和特点,无不让人感叹精妙绝伦。
圆明园被毁前的老照片,在苏富比的拍卖会上,起拍价就是20万英镑。实在是让人感叹,在1860年英法联军通过劫掠圆明园获得了大量的财宝,一百多年后,还能够通过拍卖圆明园被毁前的照片再发一笔不小的财,完完全全由中国人费心力建起来的圆明园,却成了毁灭圆明园之人的聚宝盆了。
而那些被复原的图片,让人看了心情更加沉重,非常惋惜。圆明园复原图一览
一分钟理解TCP重传
为什么需要重传
任何信息在介质中传输可能丢失,这是由于传输介质的物理特性决定的,所以网络不可能被设计为“可靠的”(不是由于考虑“性能”原因而是压根做不到)。既然物理层无法提供可靠数据传输那么只能由协议提供可靠传输了,其中最有名的协议就是TCP了。
TCP是基于IP的网络协议,它提供可靠、有序的数据传输。在数据传输之前客户端和服务器端通过三次握手建立连接,建立连接的就是双方交换Seq(数据包序号)、MSS(每个TCP数据包大小) 、Win(滑动窗口,一次可以确认多少个TCP数据包),连接建立完成后每个TCP数据包都要被ACK(确认)。简单来说TCP通过确认/重传机制实现了“数据包可靠传输”。
重传原理
TCP数据包头部包含了两个字段——Seq表示数据包序号,ACK表示确认序号。下面演示了三次握手过程中Seq和ACK的变化过程。
客户端随机取一个值x作为Seq发送到服务器端;服务器端回复一个TCP数据包,头部包含Seq(随机值y),ACK=x+1。注意这里有一个常见的误区,ack确认的是当前数据包的“下一个”数据包,ack其实可以作为“期望得到的下一个seq”。客户端收到服务器端回复之后单独回复一个ack=y+1,就完成TCP的握手了。
后续数据包传递都会延续seq和ack的值,如果发送端某个数据包丢失了那么接收端不会发送ack(其实是duplicate ack),发送端在等待一段时间后发现没有ack,于是主动重发数据包。发送端的等待的时间叫RTO(Retransmission TimeOut)。
RTO的选择很重要,如果太大那么网络带宽利用率会特别低,发送端要过很久才知道要重传而此时要重传的数据是在太多严重浪费带宽资源。如果太小在高延时的网络高带宽(恩,你访问国外网站就属于这种网络)中也会浪费带宽资源。于是就有了Fast Retransmit机制,简单来说当发送端发现来自接收端的多个重复ACK(duplicate ack)的时候就不再等待RTO而是直接选择重发。
总结一下:经典TCP重发是发送端主动重发的,当数据包经历了一段时间后还没有被接收端确认此时发送端主动重发数据包。Fast Retransmit是由接收端主动要求重发的,当接收端收到了“不想要”的数据包时会重复ACK“上一个”数据包从而触发发送端的重发。这两种重发策略一般是同时使用,它们是互补的。
举个例子:发送端有D1(1-10)、D2(11-20)、D3(21-30)、D4(31-40)四个数据包要发送,每个数据包10bytes用括号内的数字表示。
- 乱序的情况:接收端收到D1,发送ack=11(D2的序号)。如果在发送过程中D4在D1之后达由于D4携带的seq=31所以接收端会丢弃这个数据包然后再次发送ack=11。此时发送端会收到两个ack(duplicate ack)如果开启了Fast Retransmit特性那么发送端立即从D2开始重新发送。
- 丢包的情况:接收端收到D1,发送ack=11(D2的序号)。如果在发送过程中D2丢失那么后续到达的包是D3,由于D3携带的seq=21所以接收端会丢弃这个数据包然后再次发送ack=11。此时发送端也会出现duplicate ack从而触发重传。
如果接收端的ACK数据包丢失了或者网络时延太高那么也会触发重传。因为发送端对每个数据包都设置了一个RTO,如果到时间没有收到ACK它会“主动”重发数据包。
Q&A
Q:多线程对一个Socket写入是否会触发TCP重发?程序上是否要考虑“乱序”?
A:首先要搞清楚一点,我们往Socket写入的数据是“应用层数据包”而不是TCP数据包。TCP/IP协议栈会把应用层数据包划分出多个TCP数据包发送出去,每次write都会生成N个连续的TCP数据包。所以即便我们多线程往Socket写入也不会出现TCP数据包的乱序(应用层数据包可能是乱序的)。
Q:重传和拥塞控制有什么关系?
A:TCP拥塞控制是指尽可能的利用带宽,它围绕4个核心概念展开:慢启动、拥塞避免和快速重传、快速恢复。其中快速重传、快速恢复属于TCP重传机制,慢启动是指对滑动窗口的控制,拥塞避免好重传机制有一定关系,如果存在大量重传那么网络上可能出现了拥塞(拥塞避免的关键是识别拥塞)。
Q:怎么看“替代TCP”的说法?
A:TCP最遭人诟病的就是它的重传机制不可控。如果网络延时比较高或者质量比较差有一定丢包(特别是移动网络),TCP的重传机制触发“不及时”这就导致应用体验很差。比如一个1000帧的视频丢了第100帧那么后续的900帧都要重传(即便已经收到了)。当然这只是一个例子,视频还是可以做一定“弥补”的),如果是手机游戏(比如王者荣耀、荒野行动)情况就没有这么乐观了。为了尽可能的让“重传”可控于是诞生了各种“替代TCP”的自制协议(大部分是基于UDP),比如Google的QUIC、kcp。我个人对这方面研究不多,总体而言它们牺牲了TCP的一些“通用特性”来换取一定的“灵活性”,所以并不是惊天地泣鬼神的“替代TCP”。
Q:怎么看TCP单边加速
A:TCP单边加速是指针对通讯的某一端做性能加速,市面上有很多这种产品。但是个人觉得这些都是骗人的,并没有一种算法适合所有网络情况。要根据不同的网络情况配置不同的拥塞控制算法。比如“国际链路”属于高延时高带宽,配置了Google的BBR算法“梯子”的速度至少能提高70-80%(你懂得)。
from:https://mp.weixin.qq.com/s?__biz=MzIxMjAzMDA1MQ==&mid=2648945945&idx=1&sn=f92e903929975e05978ba57be64ba2bc&chksm=8f5b5215b82cdb03c3f6f57ff63ee3f24bc1029dd147b7524d44baa36a10be65c24f6067adec#rd
名言
一场关于正义的“小概率”事件(辩护人)影评
“因为国民不富裕就不能受法律保护,不能享受民主主义,这种说法我是无法接受的。”
“国家,证人所说的国家到底是什么?大韩民国宪法第一条第二项,大韩民国主权属于国家,所有的权力都由国民产生,国家即国民。但是证人毫无法律依据,一味强调国家安保,就把国家镇压践踏在了脚下,证人所说的国家只是强制取得政权的一小部分。难道不是吗?你是让善良无罪的国家生病的蛆虫,军事政权肮脏的帮手而已。”
“在这种市民无法行驶自己法律权利的时候,作为法务人员,我更应该走在最前面,这才是真正的法务人员义务。”
“能独立地表达自己的观点,却不傲慢,对政治表示服从,却不卑躬屈膝。能积极地参与国家政策,看到弱者知道同情,看到邪恶知道愤怒,这才算是一个真正的公民。”
“权利是用来伸张的,否则权利只是一张纸!”
“无声就是默许。”——郝劲松
Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0
连接MySQL提示:
1
|
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0 |
这是由于库文件初始化连接MySQL时连接失败引起的。
导致此错误的原因有:
- mysql设置文件中“bind-address”值的问题;
- 访问权限限制问题;
- 防火墙、杀毒软件阻拦的问题(特别是Windows);
- 负载过大、最大连接限制了访问(特别正式提供服务的mysql)
1、mysql设置文件的问题:
在mysql数据库一些版本,为了保证安全,mysql安装后,默认只监听本机ip的“127.0.0.1”,如下:
这时表现为连接“127.0.0.1”或“localhost”可以连通,连接局域网ip和公网IP无法连通。这时我们将“/etc/my.cnf”文件中的“bind-address”行前添加一个“#”号注释掉,并重启mysqld服务即可:
1
2
3
4
5
|
[mysqld] datadir=/storage/aiezu.com/mysql socket=/storage/aiezu.com/mysql/mysql.sock #bind-address=127.0.0.1 |
注:linux下mysql配置文件默认在“/etc/my.cnf”,Windows平台mysql配置文件在安装目录下的“my.ini”。
2、访问权限的问题:
①、默认mysql的账户只允许本机登录的,要给账户授权通过“ip+端口”进行远程访问,需要先在mysql服务器上授权。在服务器桑登录到mysql,执行下面SQL语句授权:
1
2
3
4
5
6
7
8
9
|
use mysql; -- 将数据库"aiezu"的所有权限授权给"root"通过密码"123456"在"8.8.8.8"上进行访问; grant all privileges on aiezu.* to 'root' @ '8.8.8.8' identified by '123456' ; -- 将数据库"test"的所有权限授权给"aiezu"通过密码"123321"在任何主机上进行访问; grant all privileges on test.* to 'aiezu' @ '%' identified by '123321' ; --刷新权限表 flush privileges ; |
②、 在mysql客户端连接到服务端时,服务端会根据客户端的ip,尝试将客户端的ip解析为“主机名”,再通过“主机名”去检查mysql的权限表,这项功能叫“name-resolv”。由于此功能的某些原因,也会导致我们文章标题中的错误,还有就是会导致连接数据库变慢,所以需要将吃功能禁用。
禁用方法:在mysql设置文件“[mysqld]”选项组下一行“skip-name-resolve”;
1
2
3
4
5
6
|
[mysqld] datadir=/storage/aiezu.com/mysql socket=/storage/aiezu.com/mysql/mysql.sock #bind-address=127.0.0.1 skip-name-resolve |
③、如果是linux,修改“/etc/hosts.allow”文件,在文件的末尾添加下面内容,允许所有主机访问本机的“mysql”服务:
1
2
|
mysqld : ALL : ALLOW mysqld-max : ALL : ALLOW |
3、防火墙和杀毒软件:
关闭杀毒软件和防火墙试试,windows方面:关闭系统防火墙,中国人常用的QQ电脑管家、360安全卫士、QQ医生、金山毒霸、卡巴斯基等;linux方便,检查iptables、ipfire系统自带防火墙的设置。
4、服务过载的问题:
①、mysql服务过载:
- 执行“show processlist;”SQL命令看是否当前打开的连接过多;
- 使用“show variables like ‘%connect_timeout%’;”语句的设置值,改成一个稍大的值,如20:“SET GLOBAL connect_timeout = 20;”
- 使用“SHOW STATUS like ‘aborted_%’;”语句查询异常终止的连接和失败的连接;
②、系统过载:
- 使用shell命令“top”观察mysql占有的内存、cpu情况;
- 使用shell命令“free -h”看内存占有情况;
- 使用shell命令“uptime”看cpu负载情况;
- 使用shell命令“df -h”看磁盘空间使用率,特别占用率100%的情况;
from:https://www.aiezu.com/article/mysql_error_at_reading_initial_communication_packet