- 浏览: 206616 次
- 性别:
- 来自: 杭州
最新评论
-
WHW1984:
你那个疑惑3,不知道是否现在已经搞懂。 是用3个参数:clie ...
深入研究SSL【第二章 part-1】-SSL握手协议的研究 -
WHW1984:
"是客户端产生一个预主密码(premaster),然 ...
深入研究SSL【第二章 part-1】-SSL握手协议的研究 -
windshome:
回答博主的一个问题:客户端直接生成一个会话密钥,有可能存在随机 ...
深入研究SSL【第二章 part-1】-SSL握手协议的研究 -
Army:
28不是位,是28字节
深入研究SSL【第二章 part-1】-SSL握手协议的研究 -
hantangtieji:
期待楼主把这个系列写完。
深入研究SSL【第二章 part-2】-SSL握手协议的研究
文章列表
粘包产生的原因
1.发送端数据由于nagle算法,将多个业务数据包压成一个TCP包发送
2.接收端数据缓冲区读数据一次读入了多个包的数据
拆包产生原因:
1.发送端由于消息超过了MSS(最大报文段长度)限制大小被拆成多个TCP报文发送
2.接收端数据缓冲区一次读入了非整数个包的数据
处理粘包或者分包的策略基本就两种:
1.每个数据前后加特殊字符,比如ftp方式,这样方式容易出错,如果数据本身含有特殊字符就会发生分隔错误
2.业务数据加业务协议头标识业务数据的长度,在读取的时候能够确定向后读取数据的长度作为一个业务数据的边界
业务消息的可靠性
TCP协议保证 ...
什么是垃圾回收
java程序运行期间生成新对象,加载类文件都需要占用内存,不同对象从被创建,使用,存储到最后使用完毕被销毁都有一个完整的生命周期,java程序开发人员实际上只需要负责对象的创建使用,对象的销毁回收由虚拟机自动完成,对象的回收过程就是垃圾回收
怎么来做垃圾回收
jvm运行期间使用的内存包括堆内存,创建线程使用的vm栈内存,存储方法,类,常量池使用的永久代内存,堆外内存(direct buffer),开发人员使用的是heap(堆内存),也是重点需要管理的区域
由于不同对想的生命周期长短不同,因此需要将整块堆内存分成不同的区域,E,S1,S2,O,Eden区存放生命周 ...
在写数据传输程序的时候我们会关心服务器和客户端之间通信的网络延迟有多大?数据收发的吞吐量最大有多少?
tcp socket 客户端和服务端之间的通信延迟受到很多因素影响,基本没办法准确的估算出来,比如传输距离,网络路由跳数,交换机处理时间,网卡处理延迟,cpu处理延迟,丢包率等。其中的传输距离影响比较大,虽然电信号以光速传播,其延迟也不能随便忽略,比如10公里的距离光传播的延迟就有33微妙。假如两端之间的线路情况基本是固定的,因此延迟也基本是固定的,因此测量两点间的延迟可以用专门的工具来做,比如 qperf或者netperf。
这里假设我们已知两点间的网络延迟为L,TCP滑动 ...
数据库的事务指的是一组业务处理逻辑,这组逻辑处理要求要么都成功要么都失败(原子性),执行前数据和执行后数据状态总是一致的(一致性),事务之间的处理不会互相影响(隔离性),事务执行完毕之后数据必须持久 ...
倒排索引和正排索引的优化点
- 博客分类:
- 随笔记录
搜索系统中对于索引和字典的存储主要面临两大挑战:
1.数据压缩
2.快速地检索和排序
正排表的存储有如下两个点来压缩数据:
1.正排表词在在DOC中出现的为止采用单调递增差分存储,这样存储这个数字序列的时候可以用尽可能少的字节数来存,达到压缩效果
2.在存储文档中所有WORD ID的时候在最后一个词后面插入一个NULL,并且采用非结构化方式存储可以减少很多冗余的DOCID的存储
redo log:
1.用户对DB数据的修改过程是先将数据读取到内存缓存-->修改内存中的值-->写redo日志落盘-->返回结果给用户,由此可以看出redo日志主要作用是提高读写效率,减少对磁盘的随机写,可以合并对db中的某一数据的多次不同操作,由此可以看出如果对磁盘的随机写性能如果同顺序写差不多,redolog 存在的必要性还有多少呢?
2.redo log是循环写入覆盖的,因此在覆盖前内存中脏页必须保证已经被flush到磁盘中
3.脏页的数据指的是那些处于内存中的还没写回DB数据文件的被修改过的数据,内存中专门开辟一块空间来管理这些数据,管理的维度是分为 数据页- ...
系统拆分的几个考虑点
- 博客分类:
- 系统设计
系统庞大之后需要考虑拆分,考虑的点基于如下几个,是否将一个模块拆分出来独立成子系统
可以按照下面的几个要素进行打分评估:
1.业务逻辑相关性:高内聚低耦合的模块可以相互独立,这个是前提;
2.模块独立是否可以提高系统整体的复用性;
3.当前系统是否太臃肿确实需要把高内聚低耦合的模块拆分,提系统高处理能力;
4.拆分前后各个子系统之间的依赖关系是否合理,按照重要程度依赖方向总是低重要性指向高重要性;
5.系统独立之后是否增加了极大的不稳定因素,形成多个中心点或孤立点;
在日常的统计分析中,标准差和标准误是一对十分重要的统计量,两者有区别也有联系。但是很多人却没有弄清其中的差异,经常性地进行一些错误的使用。对于标准差与标准误的区别,很多书上这样表达:标准差表示数据的离 ...
z统计和t统计可以用来检验两个平均数之间差异显著的程度,z适合大样本的情况(样本数大于30),t适合小样本的情况。
z检验的步骤:
第一步:建立虚无假设 H0:μ1 = μ2 ,即先假定两个平均数之间没有显著差异,
第二步:计算统计量Z值,对于不同类型的问题选用不同的统计量计算方法,
1、如果检验一个样本平均数()与一个已知的总体平均数(μ0)的差异是否显著。其Z值计算公式为:
在学习回归算法过程中,一路遇到不少问题,数学和算法方面的基础薄弱,因此采用的策略是深度优先的学习方法,从头到脚看算法,遇到不懂的概念就跳转如相关概念或算法的学习。
1.线性回归基本算法思想
2.正态分布:其中的随机误差符合正态分布
3.极限,导数,方向导数,梯度,梯度下降法求残差最小值;
4.全微分,偏微分,最小二乘法求残差最小值;
5.回归效果的显著性检查F检验:考察各直线对各个变量的拟合程度好坏,是否真正体现了一种线性关系;
6.t统计量和z统计量
6.置信区间,置信度的计算;
7.逻辑回归基本算法思想;
8.logistic 变换函数
9.极大似然估计,对数似然函数 ...
Combiner 出现的问题
- 博客分类:
- 数据挖掘&机器学习
使用了combiner来聚合mapper端一些数据,发现个诡异的问题,输出到reducer端的数据总是时好时坏,
找了两天终于发现原来combiner可能会在mapper端多次执行,如果mapper端数据比较大,combiner可能就会分多次被执行,hadoop文档中也有说明combiner可能被执行也可能不被执行,要求mapper输出数据格式和combiner输出一致。改了下输出格式,问题没了。
hadoop JOB的性能优化实践
- 博客分类:
- 数据挖掘&机器学习
使用了几个月的hadoopMR,对遇到过的性能问题做点笔记,这里只涉及job的性能优化,没有接触到
hadoop集群,操作系统,任务调度策略这些方面的问题。
hadoop MR在做大数据量分析时候有限的计算资源情况下只能不断的优化程序。
优化可以从两个方面进行:
1.hadoop配置
2.程序代码
程序代码包括的方面很多:job设计,算法,数据结构,代码编写。
hadoop配置优化
hadoop配置可分为mapp配置,reducer配置和hdfs配置。关于hadoop mapper和reducer阶段
处理流程和参数意义可以看这个帖子,说的比较详细hadoop mr 参数意义。 ...
数据分析的其中一个步骤是对输入内容分词,内容中可能含有垃圾词或
无意义词或分词分错的,因此用停用词词典和几个正则表达式进行过滤,
之前处理的量级大约是10G这个量级,处理速度挺好。
这次增加很多数据源,处理量级上升到1T级别,这些分析处理的速度明显感觉很慢,
通过性能分析发现用正则表达式来match,判断是否是垃圾词的方式性能比较差,
如果去除这些正则,处理速度能提高一倍,试着把各个正则转换成字符串查找,
比如
\\d+(\\.\\d)?\\d*([\u4e00-\u9fa5]*[a-zA-Z]*)
用来匹配数字+中文的词,比如0.99元 5公斤等,这些逻辑简化成词包 ...
传统的tf-idf计算需要有4个MR完成,其中计算逆向文档频率时候对于文档数在百万级别以下的,中间数据可以直接放内存的hashmap,但是文档数千万或上亿,可能会导致内存溢出,这时候计算方式要不同,把|d|的数量单独输出,增加一个步骤把|d|和之前的数据做join。
为了节省一步join的MR,使用distribute cache把小文件加载到内存,分析的数据实在过大,导致特征词统计的小文件也可能要达到600M左右,解决办法两种:1.调整数据结构,减少内存中的数据条数;2.改用join的方式加载入数据