精华内容
下载资源
问答
  • 六类模块PCB调试技术

    2021-01-20 00:14:02
     六类模块的部件是线路板,它的设计结构、制作工艺,基本上决定了产品的性能指标。国内的同行在设计其PCB时,往往对于其失效机理理解不透彻,导致产品性能指标不够高或不能满足要求。 本文章根据某外国公司综合...
  •  六类模块的核心部件是线路板,它的设计结构、制作工艺,基本上决定了产品的性能指标。国内的同行在设计其PCB时,往往对于其失效机理理解不透彻,导致产品性能指标不够高或不能满足要求。 本文章根据某外国公司...
  • 网络游戏-超六类网络模块.zip
  • ORTRONICS Clarity 六类 Series Ⅱ模块pdf,ORTRONICS Clarity 六类 Series Ⅱ模块
  • 六类非屏蔽网线模块安装.doc
  • 自2002年6月,六类布线标准的出台不仅结束了长达多年的商家在产品性能方面的纷争局面,也为用户选择六类布线产品提供了一个可靠的技术依据。六类布线带来的最大好处是用户可以大大减少在网络设备端的投资,包括网卡...
  • Molex非屏蔽六类结构式模块化布线系统给宁波诺丁汉大学各校区提供各种教学资源共享和交流的通道,帮助学校利用校园智能化网络系统改变以教室和教师为中心的教学模式,把教室、教师、学生等不同的学校、社会信息资源...
  • CSS模块化() 模块化设计

    千次阅读 2014-03-25 10:49:54
    6. 模块化设计 6.1 样式的作用域──页面重构中的模块化设计(一) 模块化设计我已经提过很多了,都是跟模块化相关的,不过之前一直没有讲到具体实现方面的内容,只是一些思维。这次重点讲一下实现方面的内容,权...

    6. 模块化设计

    6.1 样式的作用域──页面重构中的模块化设计(一)

    模块化设计我已经提过很多了,都是跟模块化相关的,不过之前一直没有讲到具体实现方面的内容,只是一些思维。这次重点讲一下实现方面的内容,权当到目前为止我对模块化的一些总结整理。

    要做好模块化,我觉得理解好样式的作用域是很重要的。写过程序的同学应该都知道,变量是有作用域的(不知道的同学自己去问谷歌,这里就不作解释了),样式的定义也同样存在着作用域的问题,即定义的作 用范围,很容易就能理解,如下面的p的作用域:

     CODE:

    /*作用域:全局*/ p{text-indent:2em;}

     

     CODE:

    /*作用域:.demo这个类中*/ .demo p{color:#000000;}

        样式选择器的优先级是学习样式的基础知识,一起简单回顾下:

    ● 标签的权值为0,0,0,1

    ● 类的权值为0,0,1,0

    ● 属性选择的权值为0,0,1,1

    ● ID的权值为0,1,0,0

    ● important的权值为最高1,0,0,0

    使用的规则也很简单,就是 选择器的权值加到一起,大的优先;如果权值相同,后定义的优先 。虽然很简单,但如果书写的时候没有注意,很容易就会导致CSS的重复定义,代码冗余。从上面我们可以得出两个关键的因素:

    1权值的大小跟选择器的类型和数量有关

    2样式的优先级跟样式的定义顺序有关

    了解样式的权值后有什么作用呢?比如可以这样用:举一个最简单的例子

    CODE:

    body{color:#555555;}.demo{color:#000000;}

     

    CODE:

    <p>这里的文字颜色受全局定义的影响</p>

    <div class="demo"><p>这里的文字颜色受类demo定义的影响</p></div>

    <p class="demo">这里的文字颜色受类demo定义的影响</p>

    知道了样式的权值,你就知道上面例子的表现是怎样的了。进一步的应用,就是模块化了。

    再来说说作用域,相信大家很容易就会想到全局公共这些词,关注过模块化的同学应该都知道,网上说得最多的一种模块化,就是像 headerfooter这样的以大区域划分。在去年web标准交流会(页面重构合理化讨论)上,克军提出了样式的三层架构”——公共规则层、公共模 块层、项目层。这些都有它们适用的范围,而且最大的优点是容易理解和应用。这里也不再作重诉了,上面已经讲过。

    我在这一块的划分上,有点类似克军的样式的三层架构,有一点小的差别,我是以作用域来分的: 公共级(全局)、栏目级 (局部公共)、页面级 。如何划分这个作用域呢?很简单,全局的global就是公共级的;只在栏目中用到的局部global是属于栏目级的;只影响单个页面的就是属于页面 级的了。

    最后几点要特别注意的:

    除了标签选择器之外,哪些类是使用于公共级、栏目级中的,如

     CODE:

    .tx_hit{color:#FF0000 !important;}

    的适用范围是公共级的,应该放于全局的定义中。但,如果它只影响于某个栏目,那么就应该把它放于栏目级的作用域中。

    ● 标签选择器一般属于栏目定义,有时会用于公共级作用域中,除了最基础的reset之外,应尽可能少使用在公共级定义中

    ● 可继承的属性定义使用时须注意影响的范围,特别是在标签选择器中使用时

    ● 同类选择器无加权

    接下来的内容就是以这个为基础的,希望大家能理解样式的作用域,对于后继内容的理解会很有帮助。

    6.2 栏目级作用域──页面重构中的模块化设计(二)

    在《 样式的作用域── 页面重构中的模块化设计(一)》中,我将样式的作用域分为了三个部分:公共级(全局)、栏目级(局部公共)、页面级。公共级(全局)容易理解,即影响站点中所有页面。简单解释下栏目级(局部公共)和页面级:

    页面级

    可分为两种情况:在多个页面间,页面级作用域指针对某一单独的页面定义;在同一个页面中,页面级作用指针对某 一标签的定义。它将决定最终的页面效果。

    栏目级(局部公共)

    介于全局与单个页面之间的一个作用 域,影响一个栏目(或某区域)。通常以某一类选择符做为开始,以包含选择符的方式将样式定义限定在某一区域中。

     CODE:

    /* 只影响demo这个区域 */

    .demo a{...}

    .demo p{...}

    .demo .title{...}

    需要消化下的内容,决定一个样式定义是属于哪个作用域的因素有以下两点:

    样式定义所在样式文件中的位置。(同样的一个定义,放在不同的位置,所影响的范围会有所不同。)

    HTML中绑定demo这个类的标签位置。(同样一个类,绑定在body标签和绑定在页面中某个标签上,所影响的范围也会不同。)

    在一个站点中,可能会分为几个不同的栏目,同一个栏目中,一般风格会保持一致。而不同的栏目间,相似的风格则不一定会相同。即使是全站通用的模 块,如翻页,也可能会因为栏目的不同而会有一些差异,比如链接的颜色等等。使用栏目级的样式定义,能很好的减少代码的冗余,提高模块的复用性。

    另外需要在思维上注意的一点,以作用域划分,并不意味着有着对应的文件,可能有些同学会习惯的以为一个作用域就应该对应着一个文件。比如一个小的 栏目,可能只有两三个页面,这时我们就不一定需要再把栏目级的定义单独出来一个文件,而是与页面级的定义一起放在一个文件里,像这样:

    CODE:

    /* S 栏目级定义 */

    .class{...}

    /* E 栏目级定义 */

    /* S 页面级定义 */

    .page{...}

    /* E 页面级定义 */

     

    6.3 继承──页面重构中的模块化设计(三)

    前面我们了解了 样式的作用域的分类  栏目级作用域。在权值中,还有一个很重要的因素,需要做下补充,起因是这样的,有个同学在CSS森林群里问了个问题:根据样式权值两个关键的因素

    权值的大小跟选择器的类型和数量有关

    样式的优先级跟样式的定义顺序有关

    可以知道,如果10个标签选择器的权值应该比一个类选择的权值高,像这样:

     CODE:

    div div div div div div div div div div div{color:blue;}

    .c10{color:red;}

     

    CODE:

    <div class="c1">

      <div class="c2">

        <div class="c3">

          <div class="c4">

            <div class="c5">

              <div class="c6">

                <div class="c7">

                  <div class="c8">

                    <div class="c9">

                      <div class="c10">

                         <div>这段文字是什么颜色?</div>

                      </div>

                    </div>

                  </div>

                </div>

              </div>

            </div>

          </div>

        </div>

      </div>

    </div>

    先别急着看 答案 ,分析下。意料之中?如果 这样 呢?

    CODE

    div{color:blue;}

    .c10{color:red;}

    是不是跟想的不太一样?难道前面所说的权值是有问题的?前面讲的权值并没有问题,不过漏了一个重要的规则: 继承的权值小于 0,0,0,1

    样式的继承

    指被包在内部的标签将拥有外部标签的样式性质。

    继承最大的意义在于可以减少重复的定义,比如要定义整个页面的文本颜色,只需要定义bodycolor样式,body里的所有标签都会继承 bodycolor定义。是不是很方便?方便是相对的,当你想要为body内部分标签定义另一种文本颜色时,继承也许会成为增加重复定义、降低性能的祸 首。

    并不是所有的样式定义都具有继承的性质,整理了一下常用有继承性的定义, 这些定义在使用的时候要比较注意。

    简单分析下上面的例子,最后一部分的代码:

     CODE

    <div class="c10">

        <div>这段文字是什么颜色?</div>

    </div>

     

    当定义了c10后,根据权值,类定义的权值是0,0,1,0,应该是比div这个定义0,0,0,1要高的,但由于div是直接定义到标签上的, 比起从c10的定义中继承来的定义权值更高。稍微改下就清楚了:

    CODE:

    <div class="c1">

      <div class="c2">

        <div class="c3">

          <div class="c4">

            <div class="c5">

              <div class="c6">

                <div class="c7">

                  <div class="c8">

                    <div class="c9">

                      <div class="c10">

                         <p>这段文字是什么颜色?</p>

                         <div>这段文字是什么颜色?</div>

                      </div>

                    </div>

                  </div>

                </div>

              </div>

            </div>

          </div>

        </div>

      </div>

    </div>

     

     修改后的例子 可以看到,p标签继承了c10的定义,显示为红色。因此,在使用标签选择器的时候,应特别注意它的作用域,个人的建议是,除了最基本的reset之外,在 公共作用域中最好不要使用标签选择器,在栏目级作用域中也应尽可能的少用。

    常用有继承性的样式定义:

    ● text-indent

    ● text-align

    ● layout-flow

    ● writing-mode

    ● line-break

    ● white-space

    ● word-wrap

    ● list-style

    ● list-style-image

    ● list-style-position

    ● list-style-type

    ● font

    ● font-style

    ● font-variant

    ● font-weight

    ● font-size

    ● line-height

    ● font-family

    ● color

    ● text-transform

    ● letter-spacing

    ● word-spacing

    6.4 模块化的核心思想──页面重构中的模块化设计(四)

    有不少同学觉得前面的内容过于简单了,对于 样式的作用域的分类  栏目级作用域  继承等内容的确十分基础,不过基础还是很重要的。下面就一起进入这个系列真正的主题——“模块化吧。

    早在Qzone4.0的页面架构中已经在项目中开始摸索提高代码复用的方法,只不过当时并没有很清晰的认识到模块化这个思想。从去年的《 从宜家的家具设计 讲模块化》开始,模块化成了我主要的一个学习方向。借着无数的提问、思考、讨论,渐渐形成了一个比较清晰的、较为完整的方案。后面的内容,更多的是出于我在实际项 目中总结出来的方法,虽然已经尽可能为出现的问题提供了解决方法,不过还是少不了会有些我没遇到过或没考虑到的,欢迎各位指出。

    首先来了解下页面重构中模块化的核心思想: HTMLCSS通过一定的规则进行分类、组合,以达到特定HTMLCSS在特 定范围内最大程度的复用。 有三个关键词: 规则  特定范围  最大程度的复用 。怎么理解呢?

    规则

    编写模块时需要遵循的规范

    特定范围

    模块可使用的范围。与样式的作用域有关,大部分模块的使用范围仅仅是某一个栏目或站点。

    最大程度的复用

    做最少的修改即可重复使用。很多同学都把复用理解成不用修改的直接使用,但在页面 制作中,由于实际的项目环境,基本是不可能做到一个模块走天下的。不同的栏目会有不同的需求,大家应该都多少有所体会,我就不多讲了。

    从实际出发,才能最终服务于实际。我们知道一个HTML标签可以绑定多个样式,所以我们可以这样去定义一个模块:

    CODE:

    <div class="class-a class-b class-c">

        ...

    </div>

    不少同学已经知道这个方法了,而且还很形像的称之为拼样式。这样的定义很容易引出其它的问题,比如样式类的个数多少个适合?样式类如何命名? 等等。下面讲下我的方法,从前面我们学到的样式作用域及模块化的核心思想,我们可以把样式进行一个分类,像这样:

     CODE:

    .mode-a{/* 定义一个模块 */}

    .type-a{/* 模块中的差异化定义 */}

    .mode-name{/* 针对单个模块的个性化定义 */}

     

    CODE:

    <div class="mode-a type-a mode-name">

        ...

    </div>

    上面的“mode-a”,我称它叫为基类“type-a”扩展类“mode-name”模块名,作用分别是:

    基类

    (基础样式)模块的基础表现。包含了模块中大部分的状态。

    扩展类

    (扩展样式)用于对使用基类的模块进行小范围的修改

    模块名

    模块在某一作用域中的唯一名称。

    这里有一个 简单的例子 可以帮助理解。

    也有同学主张用ID去表示模块名,我认为这种方式扩展性比较差,而且很容易与开发的ID冲突,不过也不失为一个方法。

    6.5 基类、扩展类──页面重构中的模块化设计(五)

    基类  扩展类 是这个系列的主要内容,上一篇《 模块化的核心思想──页面重构中的模块 化设计(四)》中只是简单提了一下,我们再深入的来了解下它们。

    一般所使用的模块化的方法,就是以某一个类做为定义的开始,比如:

     CODE:

    /* S 图片列表 */

    .pic_lists li,

    .pic_lists li img{float:left;width:122px;height:122px;margin-bottom:8px;}

    .pic_lists li{list-style:none;margin:0 0 0 6px;text-align:center;}

    .pic_lists li .pic{display:block;border:1px solid #476081;}

    /* E 图片列表 */

    /* S mtv列表 */

    .mtv_lists{width:930px;height:130px;}

    .mtv_lists li,

    .mtv_lists li img{float:left;width:120px;margin-bottom:8px;}

    .mtv_lists li{list-style:none;margin:0 10px 0 0;text-align:center;}

    .mtv_lists li img{height:90px;border:1px solid #476081;}

    .mtv_lists li .pic{display:block;width:120px;height:90px;margin-bottom:8px;}

    /* E mtv列表 */

     

    这个例子: 两个列表模块 。这种方式是比较常见的,可以很好的将一个模块独立出来。如果使用新学习到的方法来写这两个列表模块,应该是怎样?

    基类(基础样式)模块的基础表现。包含了模块中大部分的状态。也就是说,当出现多个类似的模块时,基类包含了这些模块的大部分的效果(或者理解为公共的部分),在基类的基础上,我们可以通过添加很少的代码 ——扩展类,来达到所需要要效果。像这样:

    CODE:

    /* S 列表 基类 */

    .mode_lists li,

    .mode_lists li img{float:left;width:122px;margin-bottom:8px;}

    .mode_lists li{list-style:none;margin:0 10px 18px 0;text-align:center;}

    .mode_lists li img{border:1px solid #476081;}

    /* E 列表 基类 */

    /* S 图片列表 */

    .pic_lists li,

    .pic_lists li img{height:122px;}

    .pic_lists li{margin:0 0 8px 6px;}

    .pic_lists li .pic{display:block;border:1px solid #476081;}

    /* E 图片列表 */

    /* S mtv列表 */

    .mtv_lists{width:930px;height:130px;}

    .mtv_lists li,

    .mtv_lists li img{width:120px;height:90px;}

    .mtv_lists li .pic{display:block;margin-bottom:8px;}

    /* E mtv列表 */

     

    可能你会觉得这样的样式不就多写了,还得把原先的模块类变成两个。的确不是所有的模块都值得这样去做,于是我们可以得到一种偷懒的作法,把其 中一个模块直接变成基类。对于经常会被使用的模块,像图片列表、播放列表等,这种写法在代码的复用和效率会有一定的提高。一般情况下只需要做下简单的修改 即可应用,来看一个复杂些的例子:

    一个带头像的消息列表(A

     

    看看这两个图,在脑中先想想如果是你,你要怎么实现。……5分钟过去了……差不多有方案了,按上面的思路,基类是包含了大部分的效果的,也就是说 基类应该能满足大部分效果的需要,两个模块间差异的地方,可以通过扩展类来完成。当然前提是这两个模块有能找到类似的点,能够形成基类。

    在这两个模块中,我们不难看出,A模块和B模块在信息的部分是很类似的,虽然B模块的列表不需要A模块的评论部分,但这并不影响B模块的表现。所 以我们可以把这两个模块看成的类似模块。另个,以哪个为基类呢?从满足大部分效果这个要求来看,很明显A模块做为基类是要比B模块做为基类更合适的,如果 用B模块做基类,那么需要写更多的扩展类来满足A的需要。另外还有一个重要的点,之所以选择A模块为基类,是因为A在栏目中被更多的页面使用。

    OK,来看看A模块怎么实现(样式部分):

     CODE:

    /* S 消息 基类 */

    .mode_message{position:relative;padding:8px 3px 8px 48px;

    border-bottom:1px solid #DAECF6;_zoom:1;line-height:1.3;}

    .mode_message .user_info{position:absolute;left:3px;top:10px;}

    .mode_message .user_info .pic img{width:35px;height:35px;}

    .mode_message .mode_message_cont{color:#797979;

    word-break:normal;word-wrap:break-word;}

    .mode_message .mode_message_cont .info{display:block;zoom:1;}

    .mode_message .mode_message_cont .info .music_name{color:#22639B;}

    .mode_message .mode_message_cont .info .op_music{display:none;}

    .mode_message .mode_message_cont .info:hover .op_music,

    .mode_message .mode_message_cont .info.hover .op_music{display:block;position:absolute;right:5px;top:7px;

    background-color:#FFFFFF;}

    .mode_message .msg{padding:2px 0;word-break:normal;word-wrap:break-word;}

    .mode_message .mode_message_cont .op{margin-bottom:3px;}

    .mode_message .time{display:inline-block;*display:inline;*zoom:1;font-size:10px;}

    .mode_message .msg .p_zt_l,.mode_message .msg .p_zt_r{display:inline-block;*display:inline;*zoom:1;

    width:13px;height:8px;background:url(img/_g_other.png) no-repeat -17px -17px;

    vertical-align:text-middle;*vertical-align:middle;}

    .mode_message .msg .p_zt_r{background-position:0 -28px;}

    .mode_message .write_back .cont{margin-bottom:2px;padding:5px;background-color:#EAF6FA;_zoom:1;}

    .mode_message .write_back .cont .cont{border-left:1px solid #ABCFE1;}

    .mode_message .write_back .cont .zt{*overflow:hidden;}

    .mode_message .write_back .cont .zt2{*padding-right:6px;}

    .mode_message .write_back .cont .zt textarea{width:100%;height:40px;padding:0 2px;

    border:1px solid #D1E1EC;line-height:20px;color:#4F4F4F;}

    .mode_message .write_back .cont .zt .normal textarea{height:23px;color:#B1B4B8;}

    .mode_message .write_back .cont .zt .normal .op{display:none;}

    .mode_message .write_back .cont .op{margin:5px 0 0;}

    .mode_message .write_back .cont .op .bt_v2{padding:0 2px;vertical-align:middle;}

    .mode_message .write_back .cont .zt{width:98.5%;*width:99.9%}

    .mode_message:nth-last-child(1){border-bottom:none;}

    /* E 消息 基类 */

     

    别忘了提示条,虽然是用于模块中,但它应该是可以被更广泛使用的模块,因此我把它单独提了出来:

    CODE:

    /* S 提示条 基类 */

    .mode_hint{position:relative;margin:3px 0;padding:5px;

    background-color:#FFFEAB;color:#000000;_zoom:1;}

    .mode_hint .op{position:absolute;right:8px;top:5px;}

    .mode_hint .op a{color:#000000;}

    /* E 提示条 基类 */

    还有像按钮、全局定义这些内容,就不列出了。完整的可以看: 基类、扩展类实例 。例子中可以看到,扩展类的定义很少,只是一些简单的定义,像B模块:

     CODE:

    /* S 消息 扩展 */

    .message_nopic{padding-left:0;}

    /* E 消息 扩展 */

    只需要一句,将头像去掉即可。

    6.6 CSS模块的注释——页面重构中的模块化设计(六)

    从前面的内容我们已经知道,样式是可以分成各个模块去写的,如何表示各个模块的作用及它们之间的关系呢?CSS的注释是不二的选择。

    与普通的注释不同,模块的注释需要一些更详细的内容,比如:功能说明、模块版本、关联信息等等。 像 《基类、扩展类──页面重构中的模块化设计(五)》中例子的注释,显然是比较简单的。为了减少不必要的沟通,我们可以使用较为固定的格式去完成这个注释。

    举个例子:

     CODE:

    /**

      * @name:mode_name

      * @author:ghostzhang

      * @version:1.0

      * @type:基类

      * @explain:Demo

      */

    .mode_name{...}

    .mode_name h2{

        ...

    }

    .mode_name .cont{

        ...

    }

    /* @end **/

    /**

      * @name:mode_name_b

      * @author:ghostzhang

      * @version:1.0

      * @type:扩展类

      * @explain:Demo

      * @dependent:mode_name

      */

    .mode_name_b{...}

    .mode_name_b h2{

        ...

    }

    .mode_name_b .cont{

        ...

    }

    /* @end **/

     

    从注释中就可以知道mode_name_bmode_name_a之间的关系。

    主要的关键字有:

    @name

    标明模块的名称

    @author

    标明模块的作者

    @version

    标明该模块的版本

    @explain

    功能说明

    @relating

    标明该关联的模块

    @dependent

    标明该所依赖的模块

    @type标明该模块的类型:公共、基类、扩展类

    需要注意的规则:

    “/**”标记模块的开始

    “/**”到第一个“*/”作为模块相关信息的说明,包含关键字

    关键字以==@==开头,“:”后开始到“*”的内容为相关的值,即:

    @关键字:*

    “/* @end **/”标记模块的结束

    模块注释内不可嵌套

    提供了一个小工具( cssModeCODE: )帮助大家填写样式模块的注释。

     

    展开全文
  • 六类水晶头的简介六类水晶头不同于传统的超五类水晶头,它由两部分组成:内部的分线件和外壳,这里就为大家介绍一下六类水晶头网线的做法
  • [精选]模块六财务分析.pptx
  • 6知识模块六检索方法与策略.pptx
  • Spring实战(2):Spring的模块

    千次阅读 2018-04-12 23:29:00
    俯瞰Spring风景线——模块 现在逐一介绍Spring的模块~ Spring核心容器(Core Spring container) 容器是Spring框架最核心的部分,它管理着Spring应用中bean的创建、配置和管理。在该模块中,包括了...

    俯瞰Spring风景线——六大模块

    这里写图片描述
    现在逐一介绍Spring的模块~

    Spring核心容器(Core Spring container)

    容器是Spring框架最核心的部分,它管理着Spring应用中bean的创建、配置和管理。在该模块中,包括了Spring bean工厂,它为Spring提供了DI的功能。基于bean工厂,我们还会发现有多种Spring应用上下文的实现。还提供了许多企业服务。
    所有的Spring模块都构建于核心容器之上。

    面向切面编程(AOP)

    Spring对面向切面编程提供了丰富的支持。这个模块是Spring应用系统中开发切面的基础,与DI一样,AOP可以帮助应用对象解耦。

    数据访问与集成(Data access & integration)

    Spring的JDBC和DAO模块封装了大量样板代码,这样可以使得数据库代码变得简洁,也可以更专注于我们的业务,还可以避免数据库资源释放失败而引起的问题。
    另外,Spring AOP为数据访问提供了事务管理服务,同时Spring还对ORM进行了集成,如Hibernate、MyBatis等。

    Web与远程调用(Web and remoting)

    该模块提供了SpringMVC框架给Web应用,还提供了多种构建和其它应用交互的远程调用方案。
    SpringMVC框架在Web层提升了应用的松耦合水平。

    Instrumentation

    该模块提供了为JVM添加代理(agent)的功能。具体来讲,就是为Tomcat提供了一个织入代理,能够为Tomcat传递类文件,就像这些类文件是被类加载器加载的一样。

    测试(Test)

    为了使得开发者能够很方便的进行测试,Spring提供了测试模块以致力于Spring应用的测试。
    通过该模块,Spring为使用Servlet、JNDI等编写单元测试提供了一系列的mock对象实现。


    我们主要来看看Spring的骨骼架构和核心组件~

    (一)Spring的骨骼架构

    ---Spring框架
       |---Spring的特性功能
           |---Web
           |---Transaction
           |---AOP
           |---JDBC
           |---JMX
           |---Orm
           |---......
       |---Spring骨骼架构
           |---核心组件Context
           |---核心组件Bean
           |---核心组件Core

    Core、Context、Bean构建起了整个Spring的骨骼架构,没有它们就不可能有AOP、Web等上层的特性功能。

    Spring的设计理念

    如果要在三个核心组件中选出核心,那就是Bean组件,其实Spring就是面向Bean的编程(BOP,Bean Oriented Programming)。
    我们用Spring的原因是什么?
    Spring解决了一个非常关键的问题,它可以让我们把对象之间的依赖关系转而用配置文件来管理,也就是它的依赖注入机制。而这个注入关系在一个叫IOC的容器中进行管理。
    IOC又是什么?
    IOC是控制反转(Inversion of Control),是被Bean包裹的对象。Spring正是通过把对象包装在Bean中从而达到管理这些对象及做一系列额外操作的目的。

    这种设计策略完全类似于Java实现OOP的设计理念,构建一个数据结构,然后根据这个数据结构设计它的生存环境,并让它在这个环境中按照一定的规律不停地运动, 在它们的不停运动中设计一个系列与环境或者与其他个体完成信息交换。

    核心组件是如何进行协同工作的呢?

    前面说Bean是Spring中的最核心,那么把Bean比作一场演出中的演员,Context就是舞台背景,Core就是演出的道具。只有三者一起才能具备演一场好戏的条件。当然,想要演出足够精彩,还要有Spring提供的特色功能。

    Bean包装的是Object,Object必然有数据,如何给这些数据提供生存环境就是Context要解决的问题。Context要发现每个Bean之间的关系,为它们建立这种关系并且维护好这种关系。所以Context就是一个Bean关系的集合,这个集合又叫做IOC容器,建立起IOC容器,Spring就可以开始为我们工作了。

    Core是发现、建立和维护每个Bean之间的关系所需要的一系列工具,也可以叫它Util(多用途的、工具性质的包)。

    (二)核心组件详解

    Bean组件

    Bean组件在Spring的org.springframework.beans包下。这个包下的所有类主要解决3件事情:Bean的定义、Bean的创建及对Bean的解析。我们只需要关心它的创建就好了,其他两个由Spring在内部帮我们完成,我们是看不见的。
    Spring Bean的创建是典型的工厂模式,它的顶级接口是BeanFactory。
    Bean的定义主要由BeanDefinition描述。它的定义完整地描述了在Spring的配置文件中我们定义的< bean/>节点中所有的信息,包括各种子节点。当Spring成功解析我们定义的一个< bean/>节点后,在Spring的内部它就被转化成BeanDefinition对象,以后所有的操作都是对这个对象进行的。
    Bean的解析主要就是对Spring配置文件的解析。

    Context组件

    Context组件在Spring的org.springframework.context包下。
    ApplicationContext是Context的顶级父类。
    ApplicationContext继承了BeanFactory,这也说明Spring容器中国运行的主体对象是Bean。
    ApplicationContext继承了ResourseLoader接口,使其可以访问到任何外部资源。
    ApplicationContext必须要完成的几件事情:

    • 标识一个应用环境
    • 利用BeanFactory创建Bean对象
    • 保存对象关系表
    • 能够捕获各种事件

    Context作为Spring的IOC容器,基本上整合了Spring的大部分功能。

    Core组件

    Core组件包含了很多关键类,一个重要的组成部分就是定义了资源的访问方式。
    Resource接口封装了各种可能的资源类型,也就是对使用者来说屏蔽了文件类型的不同。
    Resource接口继承了InputStreamSource接口,这样所有的资源都可以通过InputStream类来获取,所以也屏蔽了资源的提供者。
    加载资源的任务是由ResourceLoader接口完成的,它屏蔽了所有的资源加载者的差异。

    Context把资源的加载、解析和描述工作委托给了ResourcePatternResolver类来完成,它相当于一个接头人,把资源的加载、解析和资源的定义整合在一起便于其他组件使用。

    IOC容器是如何工作的?

    IOC容器实际上是Context组件结合其他两个组件共同构建了一个Bean关系网。

    把IOC容器比作一个箱子,在这个箱子里有若干个球的模子,可以用这些模子来制造很多种不同的球,还有一个制造这些球模的机器,这个机器可以产生球模。那么它们的对应关系就是BeanFactory,即那个制造球模的机器,球模就是Bean,制造出来的球就是Bean的实例。
    BeanFactoryPostProcessor对应到当造球模被造出来时,有机会对其做出适当的修正,即它可以帮我们修改球模。InitializingBean和DisposableBean是在球模造球的开始和结束阶段,我们可以完成一些预备和扫尾工作。BeanPostProcessor可以让我们对球模造出来的球做出适当的修正。
    最后还有一个FactoryBean,它可是一个神奇的球模。这个球模不是预先就定型的,而是由你来确定它的形状。这样在这个箱子里可以发现所有我们想要的球。

    展开全文
  • tensorflow学习笔记——keras模块

    千次阅读 2018-07-16 11:03:13
    本文基于tensorflow官网教程(https://tensorflow.google.cn/guide/keras),机器环境为ubuntu14.04LTS+tensorflow1.8.01.Keras模块配置 Keras模块是tensorflow提供的一个高级api,主要有以下优点:用户友好,一致...
    本文基于tensorflow官网教程(https://tensorflow.google.cn/guide/keras),
    
    机器环境为ubuntu14.04LTS+tensorflow1.8.0

    1.Keras模块配置

            Keras模块是tensorflow提供的一个高级api,主要有以下优点:用户友好,一致性强,通过keras模块可以更方便、
    快捷地构建神经网络模型。keras默认储存训练好的神经网络的权重的方式是断点,如果要使用h5格式,需要指定。
    #引入tensorflow、keras模块
    import tensorflow as tf
    from tensorflow import keras
    #设置网络权重保存文件格式
    #用来保存训练好的神经网络
    save_format='h5'

    2.建立模型

            keras模块通过指定神经网络中的层来建立模型。一个神经网路的模型通常是层的计算图。最常见的神经网络模型
    是顺序型,即神经网络层的堆叠。
    #建立神经网络模型
    #指定顺序模型
    model=keras.Sequential()
    #添加层1 64节点 relu激活函数
    model.add(keras.layers.Dense(64,activation='relu',input_shape=(1000,)))
    #添加层2 64节点 relu激活函数
    model.add(keras.layers.Dense(64,activation='relu'))
    #添加层3 输出层 10节点 softmax激活函数
    model.add(keras.layers.Dense(10,activation='softmax'))
    #打印神经网络模型
    #注意,要使用summary()打印网络模型,需要指定层1的输入维度
    model.summary()
    #指定顺序模型的另一种语法
    #将每一层的参数作为顺序模型构造函数的参数
    #反斜杠'\'代表换行符
    '''
    model=keras.Sequential([\
    keras.layers.Dense(64,activation='relu',input_shape=(1000,)),\
    keras.layers.Dense(64,activation='relu')],\
    keras.layers.Dense(10,activation='softmax'))
    '''

            计算图:神经网络的模型与层还有节点的关系,add()添加的层是非输入层,因为输入层
    只需要指定输入节点,Dense层是全连接层,全连接层的意思是前一层的某个节点与下一层
    的所有节点都有连接,这样输入变量的维度是1000,隐藏层1有64个节点,有(1000+1)×64
    =64064个权重需要根据训练集(及对应标签)优化,隐藏层1(64节点)与隐藏层2(64节点)
    之间有(64+1)*64=4160个权重需要根据训练集(及对应标签)优化,隐藏层2(64节点)与
    输出层(10节点)之间有(64+1)×10=650个权重需要根据训练集(及对应标签)优化。
            激活函数:激活函数的作用是使模型具有处理非线性数据的能力,如果模型的所有关系都
    是线性加权,那么模型无法处理非线性数据。在计算图中,节点是计算,节点间的连接表明了
    此计算与上一级计算的依赖关系。以上所有层间的权重都可以分别设置为可优化(利用训练集
    改变其值)和不可优化(常数)。
            前向传播算法:输入-隐藏层1-隐藏层2-...-输出层,利用当前权重,将输入数据按神经网络
    前进方向计算。即由输入值计算输出值。
            反向传播算法:由前向传播算法得到的输出值与标签做比较,按神经网络的反向,修改每
    一层的权重。
            正则化选项:表征数据复杂程度的参数,防止复杂(隐藏层多,隐藏层的节点多)的神经
    网络模型过度拟合训练集数据,而导致在测试集上的表现不好。

    3.神经网络层的参数

            对于神经网络的每一层,有以下参数需要指定:层间的连接方式、层的节点数、激活函数、
    正则化选项。
    #指定某一层的参数
    #创建非线性层(relu) 全连接 64节点
    keras.layers.Dense(64,activation='relu')
    #创建线性层 全连接 64节点 L1正则化
    keras.layers.Dense(64,kernel_regularizer=keras.regularizers.l1(0.01))
    #创建线性层 全连接 64节点 L2正则化
    keras.layers.Dense(64,bias_regularizer=keras.regularizers.l2(0.01))

    4.训练和评估神经网络

    训练神经网络

    #指定优化器,损失函数和参数
    #损失函数为前向传播的计算值与标签值差异的计算方法
    #参数metrics可以选为准确度或是交叉熵
    model.compile(optimizer=tf.train.AdamOptimizer(0.001),loss=\
    'categorical_crossentropy',metrics=['accuracy'])
    #指定了模型的训练参数后需要将数据导入模型中
    #数据可以使用公开数据集 也可以使用自己的实验数据
    #对于曲线拟合,可以使用numpy生成一个函数的输入输出真值作为测试集,使用噪声生成
    #一组数据作为训练集
    #这里只为了说明神经网络的训练过程 使用随机数数据集
    #使用numpy随机生成训练集
    import numpy as np
    #训练集有1000个数据,每个数据有32位,共有10个标签,每个
    #数据对应一个标签
    train_data=np.random((1000,32))
    train_labels=np.random((1000,10))
    model.fit(train_data,trian_labels,epochs=10,batch_size=32)
            建立一个分类问题的训练集,共有1000个数据,每个数据有32个因素,共有10个标签
    每个数据对应一个标签。
            使用训练集数据和训练集标签训练模型,训练轮数为10,每一轮训练使用32个数据。
    batch_size指定了每一轮训练使用的数据量,对于输入数据太多的情况,每一轮都使用所有
    输入数据会导致计算代价太大,而且模型也容易过度拟合训练数据。因此一个比较好的方法是
    在每一轮训练中使用一组训练集数据而不是所有数据。

    评估神经网络

    #增加验证集并指定使用验证集训练模型
    '''
    val_data=np.random((1000,32))
    val_labels=np.random((1000,10))
    model.fit(train_data,train_labels,epochs=10,batch_size=32,\
    validation_data=(val_data,val_labels))
    '''
    #在测试集上评估模型
    test_data=np.random((500,32))
    test_labels=np.random((500,10))
    model.evaluate(test_data,test_labels)
    #使用模型做预测
    model.predict(test_data)
            多输入所输出模型上文已经提到,在隐藏层1中指定输入节点个数就指定了输入值的维度,
    在输出层中指定节点个数就指定了输出值的维度。如果要自己指定前向传播过程,那么需要对model类
    进行继承,自行指定前向传播算法,同样的,如果要自行指定层,也需要对layers进行继承并自定义。
    神经网络的训练中,如果想在每一轮训练完成打印当前进度或是一些损失值,准确度等有用信息,那么
    需要指定回调函数。这里直接贴出官网的代码。

    自定义模型:

    函数定义:


    调用方法:

    自定义层:

    函数定义:


    调用方法:

    自定义回调函数:

    函数定义:

    调用方法:

    关于回调函数的使用在前面教程有实例。

    5.保存和载入神经网络

    只保存权重(即训练好的神经网络):

    #保存权重到断点文件,断点文件为tensorflow默认的权重保存方法
    #上文提到可以指定为h5文件 ./代表储存到当前路径
    model.save_weights('./my_model')
    #读取权重文件到新的神经网络,要求读取的网络结构和新的网络相同
    model.load_weights('my_model')
    #使用h5文件储存权重
    model.save('my_model.h5',save_format='h5')
    #读取h5文件到新的网络,同样要求结构相同
    model.load_weights('my_model.h5')

    只保存模型配置(即模型结构)

    #保存神经网络模型结构
    #使用json格式保存已有网络结构
    json_string=model.to_json()
    #读取json文件创建新的神经网络
    fresh_model=keras.models.from_json(json_string)
    #使用YAML格式保存已有网络结构
    yaml_string=model.to_yaml()
    #读取yaml格式文件创建新的神经网络
    fresh_model=keras.models.from_yaml(yaml_string)

    6.完整过程

    1.创建模型(输入维度,模型层数,层的节点数,激活函数,正则化选项,层间连接方法等)
    2.定义训练过程(优化器,损失函数,评估量等)
    3.训练模型(指定训练集及标签,验证集及标签或验证集的分割率(可选),轮数,回调函数等)

    4.保存训练好的模型或是网络结构
    5.建立新的网络载入保存的数据

    展开全文
  • 总的来说可以分文两大:USB IP、OTG IP。这两种 IP又可以进行更进一步的细分,如下图: USB IP: 仅可作为全速或低速的USB设备; USB+ IP: 是针对USB IP的扩展版本,同样仅可作为全速或低速的USB设备,但是ST...

    模块分类

      在 STM32 众多系列的 MCU 中,USB模块并不是相同的,官方称呼为USB IP 不同。总的来说可以分文两大类:USB IP、OTG IP。这两种 IP又可以进行更进一步的细分,如下图:
    USB IP
    上图中罗列的芯片并不是很全面,某些新系列的芯片可能与上图有出入。各IP的主要区别如下:

    • USB IP:
    • 仅可作为全速或低速的USB设备;
    • 符合USB2.0中的全速规范
    • 可用资源:8个双向可配置端点
    • 512字节 的专用数据包缓冲存储器SRAM
    • CRC(循环冗余校验)生成/校验,反向不归零(NRZI)编码/解码和位填充
    • 支持四种传输类型:对于bulk和同步传输,还支持double buffer模式;使得一个buffer用于USB硬件和PC
      交换数据的同时,另外一个buffer可被MCU使用
    • 支持USB设备的挂起和唤醒操作(写控制寄存器),从而停止设备时钟,以进入低功耗模式
      USB
      F102/103中的USB和CAN共享512字节的专用SRAM来进行数据收发操作,因此两个IP不能同时使用
    • USB+ IP: 是针对USB IP的扩展版本,同样仅可作为全速或低速的USB设备,但是ST针对这部分的USB模块进行了扩展,例如添加了USB低功耗管理等。除了以上USB IP特性外,还有如下:
    • 1024字节 的专用数据包缓冲存储器SRAM
    • 同步传输支持
    • USB 2.0 Link电源管理支持
    • 电池充电规范修订版1.2支持
    • USB连接/断开功能(USB_DP线上可控嵌入式上拉电阻)
      USB+
    • FS OTG IP: 可作为全速和低速USB主机;可作为全速USB设备
      USBFS
    • HS OTG IP: 可作为高速、全速和低速USB主机;可作为高速和全速USB设备
      USB HS
      无论以上哪种 IP,其全部符合USB 2.0规范。

    Packet buffer的使用

      Packet buffer存在于USB IPUSB+ IP中(在 OTG IP中称为FIFO),其用法是一致的。每个双向端点对应两个packet buffer,分别用于发送和接收。软件通过packet buffer interface来访问它们。
      这些packet buffer的位置和大小都可配置,由***buffer描述表***指定 ,Buffer描述表本身也在这块memory里,它自己的地址是由USB_BTABLE寄存器指定的。Table里每个entry由4个半字组成(分别表示双向EP的接收packet和发送packet的位置和大小) 因此***该table的位置本身必须以8字节对齐***,即USB_BTABLE的低三位全部为0。
      USB外设硬件不会把本EP的数据溢出到与其相邻的其他packet 如果收到的数据多于buffer的长度,则只把前length个数据放到该EP对应的Packet buffer中。
    Packet buffer
    在ST给出的驱动中,各端点的初始化情况如下:

    • 硬件发送缓冲区
    • 在初始化时设定各个EP硬件发送缓冲区的起始地址 @ADDRn_TX@硬件缓冲描述表
    • 在准备好要发送的数据后,设置发送长度@COUNTn_TX@硬件缓冲描述表
    • 硬件接收缓冲区
    • 在初始化时设定各个EP硬件接收缓冲区的起始地址 @ADDRn_RX@硬件缓冲描述表
    • 在初始化时设定各个EP硬件接收缓冲区的长度 @COUNTn_RX的高位@硬件缓冲描述表,以允许接收缓冲区的溢出检测;一般都是接收EP的最大包长
    • 在收到数据并产生ISR中,从硬件接收缓存读取数据之前先要看收到了多少数据(实际收到的数据不一定填满接收缓存的)

    FIFO的使用

      存在于 OTG IP中。使用相对来说要复杂不少。

    驱动程序

      在实际使用中,发现USB驱动有许多bug,需要特殊注意!关于这部分请参考针对USB部分的独立博文。无论是标准外设库版还是HAL库版,ST官方有针对各BUG的独立说明文档,这个在做具体移植时需要特殊注意。

    标准外设库版(官方培训文档称为 Legacy library

      针对不同的芯片有不同的独立版本驱动(主要是USB IP是有区别的)。目前有如下几个:

    STSW-STM32046: 主要是针对STM32F105/7, STM32F2 and STM32F4 USB on-the-go Host and device library,对应的说明文档为UM1021。下载地址为 https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32046.html ,该版本的驱动 最新版本为 2.2.1
      实现的设备例程:AUDIO、DFU、HID、MSC、VCP、Dual Core(FS IP和HS IP同时工作,分别实现MSC和HID设备)
      实现的主机例程:MSC、HID、Dual Core(FS IP和HS IP同时工作,分别实现MSC和HID主机功能)
      实现的双角色例程:DRD(根据插入电缆的不同,分别作MSC主机和MSC设备功能)
    STSW-STM32121: 主要是针对STM32F10x, STM32L1xx and STM32F3xx USB full speed device library,对应的说明文档为UM0424。
    下载地址为 https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32121.html ,该版本的驱动 最新版本为 4.1.0
      实现的例程(只能是Device):Audio_Speaker、DFU、MSC、Joystick、Custom_HID、VCP、MSC+HID 复合设备
    STSW-STM32092: 主要是针对STM32F0x2xx USB FS device library,对应的说明为UM1717。下载地址为 https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32092.html, 该版本驱动的 最新版本为 1.0.0这里需要注意,该驱动是针对STM32F0x2xx的,但是可以非常方便的移植到STM32F0xx系列得MCU中。 需要根据具体芯片的时钟,修改驱动的usb_conf.h和usb_bsp.c。关于具体的移植可参考网友的该文章USB库STM32F0x2移植到STM32F070笔记
      实现的例程(只能是Device):Audio_Speaker、CCID、MSC、Custom_HID、HID、HID_LPM_test、DFU、Virtual_COM_Port、CDC+HID复合设备、MSC+HID复合设备

      该版本的驱动不但可以非常方便的与之前的标准外设库一同使用,而且可以非常方便的与 HAL 库一起使用。 博文STM32之标准外设版USB驱动+MSC(Host)+Fatfs移植 就是使用的HAL外设库+标准外设库版的USB驱动的移植。使用标准外设库版版USB库的主要原因是,该版本的USB库经过多年验证,相对稳定!而在使用HAL版USB库时,发现了许多BUG。
      以上这些驱动在ST官网一次次改版之后,已经非常难找到!我记得在之前都不需要登陆就可以下载,现在还必须登陆才可以下载!

    HAL库版(官方培训文档称为 Cube library

      从目前的情况来看,ST已经彻底放弃了之前用了很久的标准外设库,全面转投 STM32CubeTM。在驱动程序方面,标准外设库也基本不再维护更新!
      STM32CubeTM系列的驱动相比较标准外设库来说更将全面,同样USB驱动也比标准外设库更加全面。这部分驱动一般很少手动来移植处理,直接使用STM32CubeMX工具来处理。
      不同芯片的USB驱动均包含在针对各芯片的独立Cube驱动包中。其中的USB驱动或多好少回有点区别,也可能没有区别。具体可直接查看Cube驱动包的驱动说明。总结一下:
    CubeUSB
    上图由于比较早,其中部分芯片没有列出。

    配套工具

      ST为开发者提供了一些常用的工具,具体如下:

    参考

      ST 的各种培训资料

    展开全文
  • 既然是到详细设计阶段...对于这种情况,我之前看过一些开发的做法,都是用一个来描述,在列表页面显示商品的时候,就把商品的所有信息都查了出来,只是前端在展示的时候,只选择一部分信息展示。但是一个商品的详...
  • dubbo源码解析()rpc模块服务调用

    万次阅读 多人点赞 2021-06-05 10:59:52
    这篇博文我们来分析一下dubbo rpc模块中服务调用的一次逻辑分析,包含创建远程调用对象DubboInvoker,获取ExchangeClient网络通信客户端等,多个Invoker的join包装成FailoverClusterInvoker失败重试调用,最终基于...
  • [精选]模块六财务分析(ppt 54)(1).pptx
  • Pygame详解():image 模块

    万次阅读 多人点赞 2019-01-11 16:01:13
    用于图像传输的 Pygame 模块。 函数 pygame.image.load() — 从文件加载新图片 pygame.image.save() — 将图像保存到磁盘上 pygame.image.get_extended() — 检测是否支持载入扩展的图像格式 pygame....
  • 公众号“素质云笔记”定期更新博客内容: THULAC 四款python中中文分词的尝试。尝试的有:jieba、SnowNLP...四款都有分词功能,本博客只介绍作者比较感兴趣、每个模块的内容。jieba在这不做介绍,可见博客:...
  • UEFI工程模块文件-驱动模块前言 在UEFI中,驱动分为两:一是符合UEFI的驱动模型的驱动,模型的类型为UEFI_DRIVER,称为UEFI驱动;另一是不遵循UEFI驱动模型的驱动,称为DXE驱动。下面介绍的是UEFI驱动工程...
  • 自2020年直播电商走向高潮,吸引了很...首先直播带货源码功能模块大致分为模块:登录注册、直播、商城、购物、店铺、我的。 一、登录注册模块 启动APP,打开APP显示;隐私协议;注册,手机号+验证码+密码。 登录:.
  • 不知不觉中,我们的Glide系列教程已经到了第篇了,距离第一篇Glide的基本用法发布已经过去了半年的时间。在这半年中,我们通过用法讲解和源码分析配合学习的方式,将Glide的方方面面都研究了个遍,相信一直能看到...
  • 【重构】重构概要--大重构模块

    千次阅读 2013-06-07 10:17:34
    如果一个的功能模块太少,这个很小,可以将内联化,将这个合并到其它功能类似的中。 隐藏委托关系和移除中间人 :当用户通过一个调用另一个时,要使用另一个的功能的时候,为了实现更好的封装,可以...
  • 模块化编程的大原则

    千次阅读 2019-02-17 19:22:13
    的职能要单一: 遵循单一职责原则。分别建立两个T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险 里氏替换原则...
  • 液晶显示模块的分类和基本知识

    千次阅读 2013-04-20 10:55:11
    液晶显示模块 液晶显示模块是即“Liquid Crystal Display Module”,简称“LCM”,是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源、结构件装配在一起的组件。主要完成液晶显示器的连接功能。 ...
  • 本系列前面博客的链接:Java-单机版的书店管理系统(练习设计模块和思想_系列 五 ) http://blog.csdn.net/qq_26525215/article/details/51136848Java-单机版的书店管理系统(练习设计模块和思想_系列 四(2) ): ...
  • 深入 NumPy 模块# 来源:NumPy Biginner's Guide 2e ch6矩阵的逆import numpy as npA = np.mat("0 1 2;1 0 3;4 -3 8") print "A\n", A ''' A [[ 0 1 2] [ 1 0 3] [ 4 -3 8]] '''# 求解矩阵的...
  • 易语言的模块可以封装成程序集的模块,或者类模块,从大漠的角度,我们可以封装成单线程的模块和多线程的模块。 类模块 集模块 免注册 免查杀模块 多线程模块 创建调用 模块方法名称 视频源码链接 类模块集...
  • 易语言模块大全(共775个模块

    热门讨论 2010-03-22 11:59:48
    类模块(1.1).zip MDB到超级列表框(1.0).zip 秘密潜入OICQ(1.0).zip 模拟xp(1.0).zip 模拟_xp(1.0).zip 模块_提升进程权限(1.0).zip 枚举系统字体(1.1).zip 模块_菜单项加图片(1.0).zip 模块集(1.0).zip 模拟按键(1.0...
  • 随着网站逐渐变成”互联网应用程序”,嵌入网页的Javascript代码越来越庞大,越来越复杂。...(正在制定中的ECMAScript标准第版,将正式支持””和”模块”,但还需要很长时间才能投入实用。) Javascript

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 196,612
精华内容 78,644
关键字:

六类模块