精华内容
下载资源
问答
  • 数据链路层的三个问题

    千次阅读 2017-03-01 19:05:37
    最后需要说一下,数据链路层如果仅仅使用CRC循环冗余检验,则只能对帧做到无差错接受,但是,当数据链路层向网络层提供传输的时候,这时候就不一定是可靠的传输了,数据链路层不确保。所以数据链路层协议不...

    今天学习了关于数据链路层的知识,数据链路层使用的信道主要有以下的两种类型:
    1. 点对点信道。这种信道使用一对一的点对点信道方式。
    2. 广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。

    通常我们使用的更多的是点对点的信道,所以在这里我们需要了解一些相关的概念。

    点对点信道的数据链路层在进行通信的时步骤如下:
    1. 节点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧。
    2. 节点A把封装好的帧发送给节点B的数据链路层。
    3. 若节点B的数据链路层收到的帧无差错,则从收到的帧当中提取出IP数据报上交给上面的网络层,否则丢弃这个帧。

    数据链路层的三个基本问题:
    封装成帧、透明传输、差错检测。

    封装成帧


    在进行数据链路层传输的时候存在一个问题,我们需要对饮数据链路层的协议对应将有效的数据封装成一个帧,封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成一个帧。这个时候我们就需要考虑,我们如何来识别一个帧,所以这里提出了一个帧定界的概念,使用两个控制字符,一个控制字符SOH放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT标识帧的结束。
    ![enter description here][1]

    所以简单的说第一步就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。首部和尾部就是起到帧定界的作用。

    透明传输


    关于透明传输,我们主要目的是因为,在帧的有效数据当中,可能出现和帧定界的控制字符一样的字符,为了防止将这些字符当中帧定界的字符,错误的处理帧,所以我们采方法使得数据当中可能出现的控制字符“SOH”和“EOT”在接收端不被解释为控制字符。

    方法是:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符”ESC”。而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。我们把这种方法叫做字节填充法。当然如果转义字符”ESC“也出现在数据当中,那么解决的方法仍然是在转义字符的前面插入一个转义字符,所以,当接受到连续的两个转义字符的时候,就去删除其中前面的一个。
    ![enter description here][2]

    差错检测


    数据链路层点对点传输的第三个问题就是差错检测。就是我们所说的比特在传出过程当中可能会产生差错,1可能会变成0,0可能会变成1.这就是比特差错。而这种差错对于我们来说是不希望发生这种状况的,所以为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用差错检测措施。目前广泛运用的是循环冗余检验CRC

    CRC的基本思想就是将传输的数据当作一个位数很长的数,将这个书除以另外的一个数。得到的余数作为校验数据附加到原数据后面。

    原理:
    首先把数据M划分为组,每个组k个比特。CRC运算就是在数据M后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,所以一共就是(k+n)位。这样虽然是增加了数据传输的开销,但是却可以进行差错检测。为了避免传输差错,这种效率上的损失是值得的。

    重点就是这n位冗余的计算方法。
    用二进制的模2运算再进行2^n乘M运算,模2运算相当于是二进制的不进位加法,其实也就是异或运算,而2^n乘M运算相当于是进行在M后面加上n个0。
    ![enter description here][3]

    这种添加冗余码的方法叫做帧检验序列FCS,而CRC循环冗余差错检测和这个并不是一个概念,然后我们可以对上面最后的数据进行CRC检验,方法就是把收到的每一帧都除以相同的除数,然后检查得到的余数。如果没有差错,那么得到的余数一定是0。

    ![enter description here][4]

    所以总的来说,就是每一个接受到的帧经过了CRC检验后,只会有两种情况:
    1. 余数为0,表示结果是正确的,这个时候自然就接收这个帧。
    2. 余数不为0,这样标识这个帧是有问题的,这样就丢弃这个帧。

    另外一种就是使用多项式的方法进行循环冗余检验过程。用多项式P(x)=x^3+x^2+1表示除数P=1101。这个多项式称作生成多项式。生成多项式的选取是有难度的,如果选的不好,那么检测出错误的概率就会很低。现在常用的几种多项式有:

    CRC8=X8+X5+X4+X0
    CRC-CCITT=X16+X12+X5+X0
    CRC16=X16+X15+X2+X0
    CRC12=X12+X11+X3+X2+X0
    CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X0

    最后需要说一下,数据链路层如果仅仅使用CRC循环冗余检验,则只能对帧做到无差错接受,但是,当数据链路层向网络层提供传输的时候,这个时候就不一定是可靠的传输了,数据链路层不确保这个。所以数据链路层协议不适用确认和重传机制,不向上层提供可靠传输的服务。所以保证可靠传输就需要让上层协议(TCP)来做了。这样的目的,也是为了更好的提升通信的效率。

    展开全文
  • 我们一直都知道,高质量交付从来都不是一件轻松容易的事情,所以当每开启一个项目的时候,有三个问题要问自己:1、项目的验收标准是否确立并得到共识?不成熟的委托方会希望验收标准是模糊的,大致上会有两种原因,...
    我们一直都知道,高质量交付从来都不是一件轻松容易的事情,所以当每开启一个项目的时候,有三个问题要问自己:
    


    1、项目的验收标准是否确立并得到共识?
    不成熟的委托方会希望验收标准是模糊的,大致上会有两种原因,一个是自己的确没想清楚要什么不要什么,也不知道该如何设立标准;另一个是希望能够先以模糊的方式开展,到后期留有“活口”,再进行修改和增添。


    不成熟的产品顾问也会希望验收标准是模糊的,因为他希望能够更快速的签约下这个客户,而不是真正帮助客户解决问题。


    这两种不成熟都极大的危害了真实的委托方利益和项目进展,经历了这么多项目,在最早期仅有的几个验收标准模糊的case里,在后续都集中进行了问题的爆发,并直接导致了项目延期甚至重构,这不仅是实施团队的损失,在很大程度上更是委托方利益的极大损失。


    举一个真实的早期案例,一个拍照工具类的项目,委托方的预期是一种通过手机模拟单反效果的专业商用工具,在最初这种预期并没有完全坦露传达和解读,在各类的模拟效果参数实现的路径上就出现了不小的偏差,当没有确立相关的参数验收标准时,项目的进展自然也没有围绕着委托中本应核心的诉求去打,而且在成本预估也会产生不小的差距,委托方和实施方都处在尴尬的境地。


    现在外包大师在解决这类问题上,首先是对产品设计和技术实施进行拆分,对于项目复杂度较高或自身需求过于模糊的项目,我们会优先推荐其进行产品的设计工作,首先在需求层面得到一个清晰完整且符合逻辑的产品规划,也在实现程度上有了更加明确的实现标准。


    其次,对于小型项目和需求复杂度不高的项目,会委派项目经理在签约前和委托方一起探讨实施交付标准,对于无法确认的条目,也会给出一个业界较为常用的标准参考,以能够在合约层面达成项目共识。这是项目后续顺利进展的基础。
     
    2、实施团队是否能够真正适合并胜任这个项目?
    选定实施团队其实一直是所有委托方最头疼的问题之一,因为无论委托方自身的专业能力如何都极少能有大量的外部资源能够辅助他们完成项目,何况还是胜任度高的实施人员。


    如何在规模庞大的人才体系中筛选到和具体项目匹配的考验着外包大师连接人类工作技能的核心能力,在过去一年200个高质量交付项目的打磨中,外包大师形成了一套自有的智能匹配系统,在前期对实施团队层层审核收集处理信息的基础上,从能力、时间和配合度等方面综合筛选出真正适合并胜任这个项目的实施团队。


    筛选依据是外包大师在产品、电话沟通、面试、项目评价等多个环节收集的对实施团队的描述信息,外包大师对团队型的实施方抽象出104个字段,对个人型实施方抽象出92个字段精准描述实施团队的能力、时间、配合度和信用程度。


    筛选方式根据项目的不同要经过3-4层筛选,包括系统对实施团队各类信息的筛选,专家对作品、案例的质量筛选,项目组对人员的面试筛选,甚至会有服务客户调查和背景调查,确保实施团队的可用性。


    比如在产品咨询和产品设计项目的人员匹配上,外包大师依托于全国最大的产品经理社区,储备了超过300个产品经理,覆盖各个行业,各类产品,在对产品经理的匹配上,除了考虑产品经理和产品项目组在行业领域、产品类型、目标用户群体上的契合度,从产品经理作品、案例中检验项目交付能力,更会通过面试综合审核产品经理的沟通表达、逻辑分析、需求理解等多种软性能力,确保前期对客户需求的精准把控和后期的产品设计和开发。


    外包大师的业务模式和理念吸引着优质的实施团队和合作伙伴来一起完成对客户的高质量交付,秉承着对高标准和高质量的追求,外包大师吸纳行业前20%的优质公司、团队和个人,以更高的专业度不仅帮客户解决问题,更是帮客户发现问题,规避问题。
     
    3、负责的项目经理如何把控才能保证项目风险最低?
    因为看过了太多项目的生生死死,所以在不少互联网公司都已经空缺项目经理这个职位的时候,外包大师却花大力气放在项目经理的招募、培养和使用上,并不断的为业界制定新的项目交付规范,只是为了更好的帮助委托方完成理想项目的高质量交付。


    项目经理负责制是外包大师的核心能力体现,TA是委托方项目的大管家,时间、质量和成本,每位项目经理在项目共识的基础上帮助委托方在权衡这三者之间的关系,充分利用手头的资源帮助委托方达成目标。我们在每个项目中都设置了合理的里程碑和核查节点,现在在外包大师的大型复杂项目中,让每个项目经理进行的项目核查节点已高达100多项,每一个核查节点都伴随着相关的标准和产出物验证,真正做到有大师,够放心。当某核查节点出现问题,或出现对项目进展有严重影响的事件时,负责的项目经理需要及时的发出预警,让整个项目组都能够集中重视来一起解决问题。


    在项目完结时,项目经理还必须保证输出最完整的交付物文档,因为不少委托方在选择我们之后还要自己的团队跟进进行开发和维护,有完整的交付物才能够更好的指导后续的人员更好的理解和管理项目,有很多找过来的委托方在14、15年的时候选择外包团队吃过不少亏,有的花了100多万,最后连源码都没见过,这是非常令人惊讶的。


    当然有的时候,项目经理是会拒绝委托方的一些新要求的,可能也会在项目层面提出异议和相关的解决方法,都是为了更好的完成更大的项目核心目标,相信成熟的委托方是能够知道项目最重要的是什么。如果没有一个一直盯着目标完成的“大管家”,项目失控的风险就会非常高,代价也非常高昂。
     
    结语:
    外包从来不是一件迫不得已的选择,而是聪明公司更好的一种社会人力资源使用方式,不必再去考虑大力气的在市场上选简历、招人、留人,也不必对自己不熟悉的互联网产品开发领域再操心进行呕心沥血的管理,这些都终将成为你项目账目中的成本,然而你花了这么大的力气,在这个基础上,你的项目甚至都可能因人员和管理不善而烂尾。当你黯然坐在台阶上细细品味如何才能高质量交付时,可能你缺少的恰恰是对于外包大师的关注。
    展开全文
  • 最近在用WPF写一桌面应用

    最近在用WPF写一个桌面应用程序,感觉这个东西很好用,果然很强大,但在应用的过程,碰到一个问题,找了很的网络资料都没有人仔细说说,我通过摸索找一个自己的解决方案,最终把问题解决了,现将个人的处理方式分享给大家,让碰到类似问题的朋友多一种参考.

            用C#开发桌面应用程序的时候,如果用mdi的模式,能够比较方便地控制每个窗体只能打开一次,如果已经打开则将其置为最前端窗口。但是wpf处理的时候好像不是这回事,我一时没找到一个比较好方法,(如果有朋友找到了更好的方法,望赐教和分享)我的处理过程如下:

    在主窗体上点击菜单时,如果做到每个窗体不会被重复打开,如果打开了,可以将其重新获得焦点。

    首先在主窗体中 将菜单关联的窗体 实例化,

     第二步:将每个菜单对应窗体的closing事件重写

            /// <summary>        
            /// 重写OnClosing事件 解决窗口关闭不能再开的bug。        
            /// </summary>        
            /// <param name="e"></param>        
            protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
            {
                this.Hide();
                e.Cancel = true;
            }

    之所以要重写closeing事件,是因为在菜单对应的窗口关闭之后,再次打开就会报错:

    所以需要将关闭事件重写。

    第三步:在主窗体中菜单事件里面进行如下的判断处理

            private void MenuItem_Click(object sender, RoutedEventArgs e)

     


            {

                if (tMainWindow == null || tMainWindow.IsVisible == false)
                {
                    tMainWindow.Show();
                }
                else
                {
                    tMainWindow.Activate();
                    tMainWindow.WindowState = System.Windows.WindowState.Normal;
                }
            }

    其中的窗体就是前面实例化过的,当然也可以在主窗体中写一个方法,然后调用这个方法也行

     

    如有朋友提供更好的方法,请分享谢谢!

    展开全文
  • 有效检查Java代码的三个工具

    千次阅读 2015-02-08 11:03:21
     在我试用过的工具中,我发现其中三个工具十分强大并合乎与IDE集成的标准,它们是:  PMD  、  Checkstyle  和 Jalopy  。    PMD和Checkstyle    根据PMD的文档,它会对代码中的如下部分进行检查...
    Java项目最枯燥的一部分,也是程序员总是避而不谈的一部分,就是检查代码。为了区块括号、代码缩进、Javadoc注释以及命名约定而检查其他人的上千行代码的确是一件痛苦的事。更糟糕的是,通常代码的检查还受限于紧迫的项目进度。没有足够的时间对代码的细节进行评估,因此代码检查经常变成了对代码的美化练习。不管检查者有多么好的意图,优化和逻辑检查都退居次席。 
      
      Java代码分析器减轻了这样的痛苦
       
      
      在面对这种情况的时候,Java代码分析器正是对症良药。这些工具尽可能地将代码检查过程自动化。留给人工来做的就只有检查类的缺陷以及核心逻辑并确定可能的优化方法。优化(去除不必要的实例化对象、检查数据库连接是否合理、确保数据在可能的情况下被缓存)对于任何代码通常会带来性能上的极大改进。
      
      最近我接触了各种代码分析器。我觉得一个基本的最重要的功能是与常用IDE(如NetBeans、Eclipse、jEdit以及JDeveloper)的集成。有一些代码检查工具在查找错误方面很有效,但是它们需要你根据给出的错误行的行号手工来追踪错误。这样的工具使用起来太累人了。与IDE环境集成了的工具可以大大简化这个过程,因为代码检查的结果是由所使用的IDE显示的。你只需在错误上双击就可以在Java编辑器中到达错误代码所在的行
      
      我的试用心得
      在我试用过的工具中,我发现其中三个工具十分强大并合乎与IDE集成的标准,它们是:  PMD 、  Checkstyle 和 Jalopy 。
      
      PMD和Checkstyle
      
      根据PMD的文档,它会对代码中的如下部分进行检查:
      
       未使用的本地变量
       空的catch块
       未使用参数
       空if语句
       重复的import语句
       未使用的私有方法
       可能是Singletons的类
       短/长变量及方法名字
      Checkstyle检查如下部分:
      
       Javadoc注释
       命名约定
       标题
       Import语句
       体积大小
       空白
       修饰符
       块
       混合检查(包活一些有用的比如非必须的System.out和printstackTrace)
      它们的作用
       
      
      不像PMD,Checkstyle能够检查Javadoc注释;但是PMD提供了一项叫作CPD的很有用的功能,它检查代码的拷贝粘贴部分。我使用PMD找到的最频繁的错误是未使用的import语句,未使用的私有变量以及意外重复拼写。Checkstyle可以发现更多的错误。包括漏掉的Javadoc注释,超过80个字符的行、不合约定的变量名、用tab来代替空格等等。两个工具都允许创建自定义的规则。
      
      如果想在你的组织中使用它们中的一个,Checkstyle似乎更好一些:它检查公司编码约定的大多数项目。如果增强代码质量是主要目标,那PMD是一个好的选择。但是如果你想要更多的功能并真正使用工具来修改代码,应该试试Jalopy。
      
      Jalopy
      Jalopy是一个易于配置的源代码格式程序,它能检测并修补Java代码中大量的习惯性缺陷。Jalopy更像一个代码整理器而不是检查器。Jalopy的插件现在已经支持大多数IDE,而且多数是无缝集成。我发现Jalopy特别强大,能够干许多很酷的事情。例如,它可以修改代码缩进、对齐括号、使行宽符合某个字符长度、插入相关的Javadoc注释以及对import语句排序。Jalopy最好的地方是超级自定义功能。一个简单的用户界面就可以让你选择Jalopy的所有功能的开关,不需要XML配置文件。
      
      不要浪费资源
      我建议大家使用这些工具来代替那些费时费力却收效甚微的人工代码检查工作。一旦使用这些工具将代码检查变成了一个相对轻松的任务,你就可以把代码检查作为一项普通工作而不是在项目结尾被进度逼得一团糟时做的事情。这些工具也提供了与Apache Ant的集成,因此你可以每天运行这些代码检查器,在编译或执行单元测试它们也能工作得很好。控制好你的代码,并交付那些你真的认为是高质量的东西。

    展开全文
  • 确保 Web 安全的 HTTPS

    千次阅读 2019-04-06 13:38:03
    ... ... 通信使用明文(不加密),内容可能会被窃听 ... 不验证通信方的身份,因此有可能遭遇伪装 ...由于 HTTP 本身不具备加密的功能,所以也无法做到对通信整体(使用 HTTP 协议通信的请求和响应的内容)进行加密。TCP...
  • 而立之年——三线城市程序员的年终告白

    万次阅读 多人点赞 2016-12-23 20:49:54
    30岁(2017-1987),曾经对我来说曾是多么遥远的数字,但它正悄然的离我越来越近。古人云,十而立,而立的意思是自立于世,多指学有所成。 在《于丹的〈论语心得〉》里,“立”是内心的的立,是内在心灵的独立,...
  • 你的NAS真的安全了么?本文将从部署、配置和使用三个方面来介绍我们在使用的NAS的过程中怎样才能够保证NAS的使用安全、如何才能确保自己的数据安全。文末有NAS官方关于NAS被攻击后的数据安全策略建议。
  • 如何做到java线程安全

    千次阅读 2014-09-23 08:41:36
    [b]保证线程安全的种方法:[/b] 不要跨线程访问共享变量 使共享变量是final类型的 将共享变量的操作加上同步 一开始就将类设计成线程安全的, 比在后期重新修复它,更容易. 编写多线程程序, 首先保证它是正确的,...
  • 如何确保程序的稳定性 - Android

    千次阅读 2018-12-12 23:09:59
    个人觉得要确保程序的稳定应该从这几方面来分析。 代码 程序框架和设计模式 内存管理 线程管理 静态代码分析工具 容错处理-主动捕捉敏感数据异常 日志收集 测试 单元测试 压力测试 流程...
  • ios个人小游戏开发者如何做到年收益过百万? 现在一提到ios游戏个人开发者,大多数人联想到的就是如何突破困境,如何求得...一百万除以12月,每月就是八点万,一天就是零点二八万,也就是两千八人民币,折合...
  • 详解HTTPS是如何确保安全性的?

    万次阅读 多人点赞 2016-04-02 11:03:04
    来自: Android梦想特工队 ...原文连接: http://www.wxtlife.com/2016/03/27/详解https是如何确保安全的?Https 介绍什么是HttpsHTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全
  • 如何做到项目准时交付之需求管理

    千次阅读 2018-12-02 12:10:16
    文章目录一、需求整理二、需求初判、需求定义四、需求分析五、需求评审六、需求排期七、需求跟踪八、需求变更 很多人可能都还不明白需求分析和需求管理之间的区别,通常我们说起来最多的都是需求沟通和需求分析,...
  • 1、 Esp8266之 搭建开发环境,开始一“hellow world”串口打印。 2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。 3、 Esp8266之 利用 "软件定时器 " 定时0.5秒闪烁点亮一盏LED。 4 、Es...
  • 为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定最大连接数,超过这连接数的请求会拒绝,让其负载到其它机器。达到保护自己的同时起到连接数负载均衡的作用。 动手去做 一开始根据故障...
  • 潜心一技、做到极致!——Elastic认证工程师之路

    万次阅读 多人点赞 2020-02-07 00:34:01
    为了获得此认证,候选人在三个小时内在多个Elasticsearch集群实战完成了一系列具有挑战性的实任务。 2、中国有多少人考过了这个考试? 截止2019年12月7日,中国的Elastic认证工程师只有21位。全球:550位。 下图为:...
  • 节:创建一Vue实例,超简单

    千次阅读 2018-03-21 09:26:55
    那么,它是怎么做到的,我们的代码要怎么写才能做到这一点。答案是:Vue实例。先确保你的项目安装好Vue.js,安装教程:(去看第二节、简易安装 和 快速入门Vue.js)安装好之后,我们来看看怎么创建和使用Vue实例,我们...
  • Elasticsearch如何做到亿级数据查询毫秒级返回?

    千次阅读 多人点赞 2019-05-28 10:50:00
    问题说白了,就是看你有没有实际用过 ES,因为啥?其实 ES 性能并没有你想象中那么好的。 很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑搜索怎么一下 5~10s,坑爹了。 第一次...
  • 我们可以直接在对象存储里面进行数据的搜索,即我们能够保持对象存储里面的快照数据一直在线可查,通过构建一小规模的,只带基础存储的计算集群,就可以查阅保存在快照中的海量数据!做到真正的计算和存储分离,...
  • 百日闭关修炼,每日道高频面试题。一起冲进大厂!看什么看?快上车!今天是Reds,香
  • MVC模式与层架构的区别

    千次阅读 2019-03-19 14:20:07
    三层架构和MVC是有明显区别的,MVC应该是表现模式(三个加起来以后才是三层架构中的UI层)。三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问...
  • rocketmq 保证消息不丢失,如何做到,需要研究下如何维护消费进度的. 会会导致重复消费. 本文不考虑broker宕机无法启动,热备等情况 首先最终根数据保持在每broker中的ConsumerOffsetManager类 * ...
  • 百日闭关修炼,每日道高频面试题。一起冲进大厂!看什么看?快上车!
  • :企业高层管理者在推动企业数字化转型中的作用显著,同时成立集多职能于一体的数字化推进部门能确保有效的执行。调研发现,58%的受访“转型领军者”表示其转型是由企业最高决策者来部署和推动的,相较之下,其他...
  • 百日闭关修炼,每日道高频面试题。一起冲进大厂!看什么看?快上车!
  •  前言 经典算法研究系列已经写了十三个算法,共计22篇文章(详情,见这:十三个经典算法研究与总结、目录+索引),我很怕我自己不再把这个算法系列给继续写下去了。沉思良久,到底是不想因为要创作狂想曲系列而...
  • 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资源的并发访问; 第二,控制...
  • 如果你用 Glide,通过网络连接加载图像。但网速有点慢,APP显示图片界面已经打开了,但是图片半天显示不...占位符Glide 的流式接口让这变得非常容易的去做到!只需要调用 .placeHolder() 用一 drawable(resource)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 161,541
精华内容 64,616
关键字:

做到三个确保