Cocoa代码风格指南之注释规范(三)

  • Cocoa代码风格指南之命名规范(一)
  • Cocoa代码风格指南之排版规范(二)
  • Cocoa代码风格指南之注释规范(三)
  • Cocoa代码风格指南之使用规范(四)

写代码注释是十分重要的一件事。如果你的代码维护或迭代的代价很大,那对接手你代码的人可能会十分痛苦。好的注释能够一定程度上解决这一问题,这也是一个码农的基本素养。但是,注释并不是越多越好。好的代码应该是能够自我解释的。Objective-C 语法中的方法名本身就对其中的参数进行了解释,所以在写注释之前最好先检查下自己命名的问题,想想这些注释是不是有必要的。对一些简单的变量、方法和逻辑,是不需要注释的,这种注释只会分调用者的注意力。注释应该只在如下场景中出现。

  1. 解释实现文件中复杂的逻辑
  2. 对代码进行标注
  3. 对接口进行说明

解释实现文件中复杂的逻辑

在实现文件中,有时候会有一些复杂的逻辑,这种情况通过看代码去理解代价往往很大。如果不写备注,可能以后连自己都很难维护。所以,就算现在你对这些代码的逻辑有很清晰的理解,也最好写上备注,因为以后你肯定会忘记。这种注释由于不需要文档化,也不需要联想,所以使用 C/C++ 的注释风格就可以。当然如果你有文档化的需求,那还是按照统一的注释风格。

// 这是注释
/* 这是也是注释 */

对代码进行标注

在程序中,我们见过最多的注释莫过于//TODO了。这种注释如果在后边加上“:”就能在方法列表中显示,效果类似于#pragma mark。Xcode支持类似功能的注释有如下几种。

//MARK:MARK
//TODO:TODO
//FIXME:FIXME
// !!!:!!!
//???:???

这样的注释能够起到对代码进行标记的作用。比如项目中如果存在还没有完成的功能就可以加上//TODO:Response button event。如果某块代码需要修改,可以加上//FIXME:There is a problem on iOS7。如果你需要警告他人// !!!:DO NOT TOUCH MY CODE!。或者你对哪里的代码有不解(不满)//???:What is this shit。如果你想在方法内部实现像#pragma mark一样的标注,就可以使用//MARK:Initialization,是的,就是这么简单。如果你很另类,你还可以这样来注释代码。

对接口进行说明

当我们封装库或在开发较复杂的项目时,因为接口需要供多人使用,所以对接口的注释说明就十分重要。

从注释生成文档

复杂的接口注释有时候生成文档会更方便查看。对于程序设计的文档,业界的标准做法都是自动生成。一般我们会将文档嵌入地以某种规范的格式以注释的形式写在实际代码的上方,这样文档的自动生成器就可以扫描源代码并读取这些符合格式的注释,最后生成漂亮的文档了。Java语言本身就自带 JavaDoc 命令,可以从源码的注释中抽取文档。对于 Objective-C 来说,这方面的自动生成工具有 Apple 标准的 HeaderDoc,以及第三方的 AppleDoc 或者 Doxygen 等。它们分别的官方网址如下。

  • Docxygen
  • HeaderDoc
  • AppleDoc

Docxygen 支持的语言最多,可以配置的地方也比较多。但是默认生成的风格与苹果的风格不统一。HeaderDoc 是 Xcode 自带的文档生成工具。在安装完 Xcode 后,就可以用命令行headerdoc2html + 源文件名来生成对应的文档。不过 HeaderDoc 的注释生成规则比较特别,只生成以/*! */的格式的注释。还有一个缺点是每个类文件对应一个注释文件,没有汇总的文件。而 AppleDoc 是在 StackOverflow 上最被大家推荐的。它默认生成的文档风格和苹果的官方文档一致。它还可以生成 docset 并集成到 Xcode 中。这样在源码中使用 Alt + 双击 就可以进入文档查看了。相对于 HeaderDoc,它没有特殊的注释要求,可以用/** */的格式,也可以兼容/*! */的格式的注释,并且生成的注释有汇总页面。

注释通用格式

从 Xcode5 开始,IDE 默认集成了提取文档注释并显示为 Quick Help 的功能,从那以后,能被 Xcode 识别的文档注释就成为了事实上的行业标准。当我们按照Xcode支持的规则写注释的时候,就可以通过Alt + 单击的方式唤起 Quick Help。而且在 Xcode 自动联想时也能看到对应的注释。如果使用 AppleDoc 生成并集成了文档,还可以Alt + 双击进入说明文档。由于 Xcode Quick Help,Docxygen,HeaderDoc 和 AppleDoc 都有自己的规则。下边就简单介绍一些常用的且兼容性强的规则。更详细的说明可以分别访问他们的官方网站或者本篇的参考文献。

首先,由于 HeaderDoc 只支持这样/*! */一种格式的的注释,所以如果你想用 HeaderDoc,就可以跳过下边这一段了。

先说行尾注释。生成文档的话,只有Docxygen是支持行尾注释的。但是所幸 Xcode Quick Help 的支持让我们有了使用的理由。

/**< 行尾注释1. AppleDoc 不支持会变为下一项的注释, Quick Help 支持,Doxygen 支持, 根据英文句号自动切分简要描述与详细描述. */
/*!< 行尾注释2. AppleDoc 不支持会变为下一项的注释, Quick Help 支持,Doxygen 支持, 会全部当作详细描述, 而缺少简要描述. */
///< 行尾注释3. AppleDoc 不支持会变为下一项的注释, Quick Help 不支持, Doxygen 支持。
//!< 行尾注释4. AppleDoc 不支持会会忽略, Quick Help 支持, Doxygen 支持。

为了避免 AppleDoc 误将行尾注释当作下一项的注释,故推荐第4种注释//!<。行首的单行注释除了 HeaderDoc 外,其他都是支持///的。但是,你如果使用了这样格式的行首单行注释,那用 HeaderDoc 生成文档时就会报错Skipping. No HeaderDoc comments found.。行首的多行注释除了 HeaderDoc 外,其他也都是支持/** */这样格式的。同样,这样的注释 HeaderDoc 也无法生成文档。综上,如果你想要使用 HeaderDoc ,就老老实实都用/*! */写在行首。如果你放弃了 HeaderDoc ,那你就可以使用如下更通用的注释方式。如果你使用的是AppleDoc, 则要避免使用行尾注释。

  • 行首单行注释///
  • 行尾单行注释//!<
  • 行首多行注释/** */

通用二级标签

多行注释中是支持二级标签的。Xcode 基本支持所有的二级标签颜色加深的功能。二级标签可以在生成文档、联想和使用 Quick Help 时显示。不加任何标签的情况的下生成文档,单行注释默认为简要描述。多行注释默认为详细描述。在使用多行注释的时候也可以在不加标签的情况下同时生成简要描述和详细描述。使用单行注释时,只有 Doxygen 会根据英文句号自动切分简要描述与详细描述。

/** 简要描述
 * 详细描述
 */
///简要描述.详细描述

多行注释中的简要描述也可以用@brief来代替。除此之外还有很多支持的二级标签。这里列举一些 AppleDoc 和 Doxygen 均支持的常用二级标签。

/**
 * @brief : 简要注释. appledoc中仅对属性、方法有效,对类、协议 无效,会造成后续内容解析失败.
 * @param <name> <description>: 参数描述.
 * @return <description>: 返回值描述.
 * @exception <name> <description>: 异常描述.
 * @see <name>: 参见.
 * @sa <name>: 参见. 同@see.
 * @warning <text>: 警告.
 * @bug <text>: 警告.
 * @name <title>: 组名. 用于给成员们分组, 既文档中Tasks区的子类别.
 * 代码块 `int sum = 0;`
 * 多行代码块:
 *     int sum = 0;
 *     for(int i = 1; i <= 10; i++) {
 *         sum += i;
 *     }
 * 无序列表:
 * - first
 * - second
 * - third
 * 有序列表:
 * 1. first
 * 2. second
 * 3. third
 * 多级列表:
 * - abc
 *    - a
 *    - b
 *    - c
 * - rgb
 *    - red
 *        1. first.
 *            1. alpha.
 *            2. beta.
 *        2. second.
 *        3. third.
 *    - green
 *    - blue
 * 链接:
 * <http://www.xuyafei.cn>
 * [xuyafei](<http://www.xuyafei.cn>)
 */
</code></pre> 
 <p>下边是 Quick Help 支持的常用二级标签。</p> 
 <pre><code class="objective-c">/**
 * @brief It converts temperature degrees from Celsius to Fahrenheit scale.
 * @param  fromCelcius The celsius degrees value.
 * @return float The degrees in the Fahrenheit scale.
 * @code
 *     float f = [self toCelsius:80];
 * @endcode
 * @remark This is a super-easy method.
 */
</code></pre> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 520px; max-height: 218px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/15ca82b28e314fc3a14b60d24b3671f1.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/15ca82b28e314fc3a14b60d24b3671f1.jpg" width="520" height="218" alt="Cocoa代码风格指南之注释规范(三)_第1张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption">
    note_quick_help.png 
  </div> 
 </div> 
 <h4>* appledoc的安装与使用</h4> 
 <pre><code>git clone git://github.com/tomaz/appledoc.git
cd appledoc
sudo sh install-appledoc.sh

appledoc -o 导出目录 -p "项目名称" -c "公司名称" .
</code></pre> 
 <blockquote> 
  <p>博客:xuyafei.cn<br> :jianshu.com/users/2555924d8c6e</p> 
 </blockquote> 
 <p>微博:weibo.com/xuyafei86<br> Github:github.com/xiaofei86</p> 
 <h2>参考资料</h2> 
 <ul> 
  <li>[博客园] Objective-C规范注释心得——同时兼容appledoc(docset、html)与doxygen(html、pdf)的文档生成</li> 
  <li>[唐巧] 使用Objective-C的文档生成工具:appledoc</li> 
  <li>[Swifter] 文档注释</li> 
  <li>[CocoaChina] 使用Xcode HeaderDoc和Doxygen文档化你的Objective-C和Swift代码</li> 
 </ul> 
</article>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1181866131552575488"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(Cocoa代码风格指南之注释规范(三))</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1903855725713616896.htm"
                           title="router-view的name属性 <router-view name=“path“></router-view>" target="_blank">router-view的name属性 <router-view name=“path“></router-view></a>
                        <span class="text-muted">FFF-X</span>
<a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>多个router-view的问题一个页面可以配置多个router-view,加上name属性使之区分,在路由配置中需要将component变为components,代码如下//vue2importVuefrom'vue'importVueRouterfrom'vue-router'Vue.use(VueRouter)constroutes=[{path:'/',name:'Home',compon</div>
                    </li>
                    <li><a href="/article/1903851686603059200.htm"
                           title="Java面试高频问题深度解析:JVM、锁机制、SQL优化与并发处理" target="_blank">Java面试高频问题深度解析:JVM、锁机制、SQL优化与并发处理</a>
                        <span class="text-muted">Debug Your Career</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a>
                        <div>问题列表Java中如何实现一个工作流引擎?Bean的作用域有哪些?JVM中的锁机制是如何工作的?三个方法分别被synchronized锁住,方法a调用方法b,b能获取到a的锁吗?会有什么问题?SQL优化时,EXPLAIN中需要关注哪些关键点?什么是覆盖索引?SELECT*一定不会命中索引吗?SELECT*和SELECT全字段在性能上有区别吗?什么是回表?它与索引有什么关系?100万数据分给10个线</div>
                    </li>
                    <li><a href="/article/1903851687404171264.htm"
                           title="JS基础-事件模型(事件&事件流&自定义事件&事件冒泡/代理)" target="_blank">JS基础-事件模型(事件&事件流&自定义事件&事件冒泡/代理)</a>
                        <span class="text-muted">LYFlied</span>
<a class="tag" taget="_blank" href="/search/html%26amp%3B%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">html&浏览器</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E4%BB%B6%E6%A8%A1%E5%9E%8B/1.htm">事件模型</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E4%BB%B6%E6%B5%81/1.htm">事件流</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a>
                        <div>文章目录一、事件与事件流二、事件模型1.DOM0级模型2.IE事件模型3.DOM2级模型4.DOM3级事件处理方式三、事件对象四、事件绑定与解除1.事件绑定1.1对象.on事件名字=事件处理函数1.2.对象.addEventListener("没有on的事件名字",事件处理函数,false)3.对象.attachEvent("有on的事件名字",事件处理函数);2.解除绑定五、EventWrapp</div>
                    </li>
                    <li><a href="/article/1903851055628742656.htm"
                           title="QEMU源码全解析 —— CPU虚拟化(12)" target="_blank">QEMU源码全解析 —— CPU虚拟化(12)</a>
                        <span class="text-muted">蓝天居士</span>
<a class="tag" taget="_blank" href="/search/QEMU%2FKVM/1.htm">QEMU/KVM</a><a class="tag" taget="_blank" href="/search/QEMU/1.htm">QEMU</a><a class="tag" taget="_blank" href="/search/KVM/1.htm">KVM</a><a class="tag" taget="_blank" href="/search/CPU%E8%99%9A%E6%8B%9F%E5%8C%96/1.htm">CPU虚拟化</a>
                        <div>接前一篇文章:本文内容参考:《趣谈Linux操作系统》——刘超,极客时间《QEMU/KVM》源码解析与应用——李强,机械工业出版社《深度探索Linux系统虚拟化原理与实现》——王柏生谢广军,机械工业出版社特此致谢!三、KVM模块初始化介绍1.KVM简介与源码组织结构KVM全称为Kernel-BasedVirtualMachine,中文译为基于内核的虚拟化技术。KVM是由以色列初创公司Qumrane</div>
                    </li>
                    <li><a href="/article/1903850677071835136.htm"
                           title="通过浏览器扩展获取本机 MAC 地址" target="_blank">通过浏览器扩展获取本机 MAC 地址</a>
                        <span class="text-muted">云水木石</span>
<a class="tag" taget="_blank" href="/search/macos/1.htm">macos</a>
                        <div>在Web技术主导的B/S架构项目中,获取终端设备硬件信息(如MAC地址)的需求经常会碰到。尽管Electron/CEF等混合应用框架可通过系统级API轻松实现,但纯浏览器环境下的硬件信息获取则不那么容易。因为现代浏览器基于沙箱机制和隐私保护策略,严格禁止网页直接访问底层硬件资源。但用户的需求不能不考虑,特别是在做商业项目时,这时就不得不给出方案,总结下来有如下三种方案:扩展JSAPI:比如以前在做</div>
                    </li>
                    <li><a href="/article/1903850047431307264.htm"
                           title="C#基础学习(二)C#数组生存手册:从入门到“血压拉满“的奇妙旅程" target="_blank">C#基础学习(二)C#数组生存手册:从入门到“血压拉满“的奇妙旅程</a>
                        <span class="text-muted">FAREWELL00075</span>
<a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a><a class="tag" taget="_blank" href="/search/Array/1.htm">Array</a>
                        <div>作为一只C#萌新,当你试图用数组装下整个世界时,系统可能会温柔地弹出一句**"Indexwasoutsidetheboundsofthearray."**。别慌!这份求生指南将用段子教你玩转数组一、数组是什么数组简单来说就是由相同元素组成的一个集合,数组里面不一定是数,还可能是bool,string等类型组成的集合。那么他有些什么特点呢:本质:装着相同类型元素的集装箱(比如一箱肥宅快乐水)特性:长</div>
                    </li>
                    <li><a href="/article/1903844751103291392.htm"
                           title="leetcode-hot100-python-专题三:滑动窗口" target="_blank">leetcode-hot100-python-专题三:滑动窗口</a>
                        <span class="text-muted">༺ Dorothy ༻</span>
<a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/hot100/1.htm">hot100</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>1、无重复字符的最长子串中等给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例1:输入:s=“abcabcbb”输出:3解释:因为无重复字符的最长子串是“abc”,所以其长度为3示例2:输入:s=“bbbbb”输出:1解释:因为无重复字符的最长子串是“b”,所以其长度为1。示例3:输入:s=“pwwkew”输出:3解释:因为无重复字符的最长子串是“wke”,所以其长度为3。请注意,</div>
                    </li>
                    <li><a href="/article/1903843363883380736.htm"
                           title="Android Jetpack 应用架构指南" target="_blank">Android Jetpack 应用架构指南</a>
                        <span class="text-muted">小李子学编程</span>
<a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E6%96%87%E6%A1%A3%E6%8C%87%E5%8D%97/1.htm">开发文档指南</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/jetpack/1.htm">jetpack</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>AndroidJetpack应用架构指南本指南涵盖Android应用开发的最佳实践和推荐架构,助力开发者构建健壮高效的应用程序。。前置要求本文假设您已具备Android框架基础知识。若需系统学习Android开发,建议先完成《Android基础知识》目录新架构设计背景移动应用交互特性核心架构原则分离关注点数据模型驱动界面单一数据源单向数据流分层架构设计界面层数据层领域层依赖管理方案工程实践指南参考</div>
                    </li>
                    <li><a href="/article/1903840340549365760.htm"
                           title="【自建分布式数据库详细指南】(五)使用:常见API及使用问题" target="_blank">【自建分布式数据库详细指南】(五)使用:常见API及使用问题</a>
                        <span class="text-muted">大板牙花生</span>
<a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                        <div>延续前几篇文章,下面着重从一些基本的API讲讲从入门到习惯的常用方法,后续更新。USAGE1节点管理设置主节点,又成为协调节点SELECTcitus_set_coordinator_host('coord.example.com',5432);step1.创建节点select*frommaster_add_node('new-node',12345);step2.删除节点step3.新增节点后重新</div>
                    </li>
                    <li><a href="/article/1903840214137237504.htm"
                           title="《Oracle DBA入门实战:十大高频问题详解与避坑指南》" target="_blank">《Oracle DBA入门实战:十大高频问题详解与避坑指南》</a>
                        <span class="text-muted">鸿·蒙</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/Oracle%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">Oracle数据库</a><a class="tag" taget="_blank" href="/search/DBA%E5%85%A5%E9%97%A8/1.htm">DBA入门</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86/1.htm">数据库管理</a><a class="tag" taget="_blank" href="/search/IT%E6%8A%80%E6%9C%AF%E5%B9%B2%E8%B4%A7/1.htm">IT技术干货</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">学习笔记</a>
                        <div>OracleDBA入门作业十问十答本文为OracleDBA入门作业整理,涵盖工具使用、配置管理及权限控制等核心知识点,适合新手快速上手。如有疑问或补充,欢迎评论区交流!1.DBA常用工具有哪些?OracleUniversalInstaller(OUI)用途:安装、升级或删除软件组件。OracleDatabaseConfigurationAssistant(DBCA)用途:通过图形界面创建、删除或修</div>
                    </li>
                    <li><a href="/article/1903837441387720704.htm"
                           title="【商城实战(55)】商城数据库备份:策略与实操指南" target="_blank">【商城实战(55)】商城数据库备份:策略与实操指南</a>
                        <span class="text-muted">奔跑吧邓邓子</span>
<a class="tag" taget="_blank" href="/search/%E5%95%86%E5%9F%8E%E5%AE%9E%E6%88%98/1.htm">商城实战</a><a class="tag" taget="_blank" href="/search/%E5%95%86%E5%9F%8E%E5%AE%9E%E6%88%98/1.htm">商城实战</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%A4%87%E4%BB%BD/1.htm">数据库备份</a><a class="tag" taget="_blank" href="/search/MySQL/1.htm">MySQL</a><a class="tag" taget="_blank" href="/search/%E7%AD%96%E7%95%A5%E4%B8%8E%E5%AE%9E%E6%93%8D/1.htm">策略与实操</a>
                        <div>【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用uniapp、ElementPlus、SpringBoot搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配,乃至运营推广策略,102章内容层层递进。无论是想深入钻研技术细节,还是探寻商城运营之道,本专栏都能提供从0到1的系统讲解,助力你打造独具竞争力的电商平台,开启电商实战</div>
                    </li>
                    <li><a href="/article/1903835802039808000.htm"
                           title="Python调用fofa API接口并写入csv文件中" target="_blank">Python调用fofa API接口并写入csv文件中</a>
                        <span class="text-muted">YOHO !GIRL</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E6%B5%8B%E7%BB%98/1.htm">网络测绘</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a>
                        <div>前言一.功能目的二.功能调研三.编写代码1.引入库2.读取数据3.写入csv文件中总结前言上一篇我们讲述了目前较为主流的几款网络探测系统,简单介绍了页面的使用方法。链接如下,点击跳转:网络空间测绘引擎集合:Zoomeye、fofa、360、shodan、censys、鹰图然而当我们需要针对单个引擎进行二次开发时,页面就不能满足我们的需求了,这就需要参考API文档进行简单的数据处理,接下来,给大家介</div>
                    </li>
                    <li><a href="/article/1903829373027414016.htm"
                           title="数据结构之顺序表和栈" target="_blank">数据结构之顺序表和栈</a>
                        <span class="text-muted">Dust-Chasing</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>一、顺序表1.1顺序表的概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。1.2静态顺序表静态顺序表,即使用定长的数组来存储元素,用下面一张图就可以清楚看懂1.3动态顺序表动态顺序表:使用动态开辟的数组存储。与静态顺序表不同,动态顺序表使用的数组大小可以动态变化,从而实现更灵活的储存数据。二、动态顺序表的实现静态顺序表只适</div>
                    </li>
                    <li><a href="/article/1903829371181920256.htm"
                           title="通过动态内存管理实现在VS2022中实现变长数组" target="_blank">通过动态内存管理实现在VS2022中实现变长数组</a>
                        <span class="text-muted">Dust-Chasing</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>目录一、malloc函数和free函数二、calloc函数三、realloc函数不知道大家在使用vs2022编译器时有没有遇见过这样一个问题,当我们用一个变量来作为数组的大小时,编译器会报错,要求我们使用常量,这样一来就会使我们的内存空间被大量浪费,使我们非常的头疼,但是如果当我们学到动态内存管理时,我们就有了解决这个问题的办法。一、malloc函数和free函数C语言提供了一个动态内存开辟的函数</div>
                    </li>
                    <li><a href="/article/1903829372184358912.htm"
                           title="数据结构之链表(单链表)" target="_blank">数据结构之链表(单链表)</a>
                        <span class="text-muted">Dust-Chasing</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>目录一、链表的概念二、链表的分类三、单链表的实现1.创建新的节点2.打印链表3.链表的头插和尾插尾插:要注意第一次插入时链表为空的情况。头插:4.单链表的头删和尾删尾删:注意链表中只有一个元素的情况。且要保存尾节点的前一个节点。头删:5.单链表的查找一、链表的概念链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表实际上就像一列火车一样,每一个</div>
                    </li>
                    <li><a href="/article/1903828488901685248.htm"
                           title="C语言三大程序结构 & 单分支语句" target="_blank">C语言三大程序结构 & 单分支语句</a>
                        <span class="text-muted">要下雨了吗</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/visual/1.htm">visual</a><a class="tag" taget="_blank" href="/search/studio/1.htm">studio</a>
                        <div>核心概念:程序就像流水线,通过顺序、选择、循环三种结构完成复杂任务一、三大程序结构图解结构类型形象比喻代码示例顺序直行马路→不拐弯printf("A");printf("B");选择岔路口→二选一if...else循环环形跑道→重复绕圈for/while二、选择结构:if语句完全指南1.基础语法(单分支)if(条件表达式){语句1;//条件成立时执行}else{语句2;//条件不成立时执行}2.真</div>
                    </li>
                    <li><a href="/article/1903825778827653120.htm"
                           title="不神话大模型,不做技术乌托邦,用"传统IT+AI积木"实现企业智能转型" target="_blank">不神话大模型,不做技术乌托邦,用"传统IT+AI积木"实现企业智能转型</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>一、开篇:AI革命的务实辩证法在技术狂热与落地鸿沟并存的AI时代,灵燕智能体开发平台提出"三轮驱动法则":•不颠覆的智慧:MySQL、知识图谱库、MQ等传统中间件构成数字地基•不空想的创新:大模型仅承担"认知苦力",在人类设计的思考链中定向发力•不取巧的工程:通过D2R映射、低代码工具、元数据治理实现可落地的智能装配二、核心价值:智能开发的工业流水线技术要素原子化拆解将复杂需求分解为可执行的"技术</div>
                    </li>
                    <li><a href="/article/1903825590255939584.htm"
                           title="递归实例:登台阶问题:假如有n个台阶,一次只能上1个台阶或2个台阶,请问走到第n个台阶有几种走法?@C语言" target="_blank">递归实例:登台阶问题:假如有n个台阶,一次只能上1个台阶或2个台阶,请问走到第n个台阶有几种走法?@C语言</a>
                        <span class="text-muted">热心市民小汪</span>
<a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E7%BB%83%E4%B9%A0/1.htm">代码练习</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>假如有n个台阶,一次只能上1个台阶或2个台阶,请问走到第n个台阶有几种走法?为便于读者理解题意,这里举例说明如下:假如有3个台阶,那么总计就有3种走法:第一种为每次上1个台阶,上3次;第二种为先上2个台阶,再上1个台阶;第三种为先上1个台阶,再上2个台阶。输入为n,输出为走到第n个台阶有几种走法Input3Output如果输入是3,走到第3个台阶的走法总计有3种,1,1,1和1,2和2,1,输出为</div>
                    </li>
                    <li><a href="/article/1903822687952760832.htm"
                           title="六十天前端强化训练之第二十九天之深入解析:从零构建企业级Vue项目的完整指南" target="_blank">六十天前端强化训练之第二十九天之深入解析:从零构建企业级Vue项目的完整指南</a>
                        <span class="text-muted">编程星辰海</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/Vue%E9%A1%B9%E7%9B%AE/1.htm">Vue项目</a>
                        <div>=====欢迎来到编程星辰海的博客讲解======看完可以给一个免费的三连吗,谢谢大佬!目录一、Vite核心原理与开发优势二、项目创建深度解析三、配置体系深度剖析四、企业级项目架构设计五、性能优化实战六、开发提效技巧七、质量保障体系八、扩展阅读推荐一、Vite核心原理与开发优势1.1为什么选择Vite?Vite采用现代浏览器原生ES模块系统(NativeESM)作为开发服务器,颠覆了传统打包工具的</div>
                    </li>
                    <li><a href="/article/1903822435241750528.htm"
                           title="ios端使用TCplayer直播播放三秒直接卡顿bug" target="_blank">ios端使用TCplayer直播播放三秒直接卡顿bug</a>
                        <span class="text-muted">small_fox_dtt</span>
<a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/bug/1.htm">bug</a><a class="tag" taget="_blank" href="/search/Tcplayer/1.htm">Tcplayer</a>
                        <div>1.查看配置项没问题setTcPlayer(){letthat=this;player=newTcPlayer("videoPlayer",{live:this.activatPlayType=="livePlay"?true:false,x5_type:"h5",x5_fullscreen:true,systemFullscreen:true,x5_orientation:1,x5_player</div>
                    </li>
                    <li><a href="/article/1903822055128756224.htm"
                           title="Windows10本地部署Dify+Xinference" target="_blank">Windows10本地部署Dify+Xinference</a>
                        <span class="text-muted">橘长长长</span>
<a class="tag" taget="_blank" href="/search/AI%E7%9B%B8%E5%85%B3/1.htm">AI相关</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a><a class="tag" taget="_blank" href="/search/dify/1.htm">dify</a><a class="tag" taget="_blank" href="/search/xinference/1.htm">xinference</a><a class="tag" taget="_blank" href="/search/glm4/1.htm">glm4</a>
                        <div>目录前言一、安装必要项1.安装Docker和AnaConda2.安装Xinference3.通过Xinference部署本地glm4-chat-1m4.验证glm4-chat-1m是否部署完成5.安装Dify三、Dify中配置大模型1.浏览器输入http://localhost:80启动Dify页面2.随便注册账户登录3.配置Xinference四、运行Dify1.设置系统推理模型2.对话窗口验证</div>
                    </li>
                    <li><a href="/article/1903821928792125440.htm"
                           title="unity3D获取游戏物体的四种方式" target="_blank">unity3D获取游戏物体的四种方式</a>
                        <span class="text-muted">qq_35430208</span>
<a class="tag" taget="_blank" href="/search/unity3d/1.htm">unity3d</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a><a class="tag" taget="_blank" href="/search/uinity3d/1.htm">uinity3d</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%BD%A2%E6%B8%B2%E6%9F%93/1.htm">图形渲染</a><a class="tag" taget="_blank" href="/search/3d%E6%B8%B2%E6%9F%93/1.htm">3d渲染</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F%E5%BC%95%E6%93%8E/1.htm">游戏引擎</a><a class="tag" taget="_blank" href="/search/unity3D%E8%8E%B7%E5%8F%96%E6%B8%B8%E6%88%8F%E7%89%A9%E4%BD%93/1.htm">unity3D获取游戏物体</a>
                        <div>一、第一种:二、第二种:voidStart(){print(transform.Find("GameObject(1)/GameObject"));print(transform.Find("GameObject(2)"));}三、第三种:比较耗性能,不推荐使用voidStart(){GameObjectmainCameraGo=GameObject.Find("MainCamera");//查找</div>
                    </li>
                    <li><a href="/article/1903821676244692992.htm"
                           title="Docker之安装与配置" target="_blank">Docker之安装与配置</a>
                        <span class="text-muted">雨五夜</span>
<a class="tag" taget="_blank" href="/search/Docker/1.htm">Docker</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>Docker之安装与配置一、Docker环境配置1.基本配置2.镜像加速3.网络配置4.数据持久化5.优化建议6.常见问题与解决方案7.补充工具二、Docker配置本地仓库指南1.拉取Registry镜像2.启动本地仓库3.配置Docker客户端Linux/macOSWindows4.推送镜像到本地仓库标记镜像推送镜像5.推送镜像到本地仓库6.管理本地仓库7.优化与安全性8.常见问题一、Docke</div>
                    </li>
                    <li><a href="/article/1903820541240864768.htm"
                           title="【软考论文】论软件系统架构评估" target="_blank">【软考论文】论软件系统架构评估</a>
                        <span class="text-muted">罗小爬EX</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E8%80%83%EF%BC%88%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E5%B8%88%EF%BC%89/1.htm">软考(系统架构师)</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E8%80%83/1.htm">软考</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E5%B8%88/1.htm">系统架构师</a><a class="tag" taget="_blank" href="/search/%E8%AE%BA%E6%96%87/1.htm">论文</a>
                        <div>目录一、题目二、论文2.1摘要2.2正文三、扩展3.1基础知识3.2评估方式综合对比3.3SAAM基于场景的架构分析方法3.4ATAM架构权衡分析方法3.5质量属性一、题目对于软件系统,尤其是大规模的复杂软件系统来说,软件的系统架构对于确保最终系统的质量具有十分重要的意义,不恰当的系统架构将给项目带来高昂的代价和难以避免的灾难。对一个系统架构进行评估,是为了:分析现有架构存在的风险,检验设计中提出</div>
                    </li>
                    <li><a href="/article/1903818018106961920.htm"
                           title="震惊! “深度学习”都在学习什么" target="_blank">震惊! “深度学习”都在学习什么</a>
                        <span class="text-muted">扉间798</span>
<a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>常见的机器学习分类算法俗话说三个臭皮匠胜过诸葛亮这里面集成学习就是将单一的算法弱弱结合算法融合用投票给特征值加权重AdaBoost集成学习算法通过迭代训练一系列弱分类器,给予分类错误样本更高权重,使得后续弱分类器更关注这些样本,然后将这些弱分类器线性组合成强分类器,提高整体分类性能。(一)投票机制投票是一种直观且常用的算法融合策略。在多分类问题中,假设有多个分类器对同一数据进行分类判断。每个分类器</div>
                    </li>
                    <li><a href="/article/1903817764708085760.htm"
                           title="程序代码篇---Pyqt的密码界面" target="_blank">程序代码篇---Pyqt的密码界面</a>
                        <span class="text-muted">Ronin-Lotus</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E4%BB%A3%E7%A0%81%E7%AF%87/1.htm">程序代码篇</a><a class="tag" taget="_blank" href="/search/%E4%B8%8A%E4%BD%8D%E6%9C%BA%E7%9F%A5%E8%AF%86%E7%AF%87/1.htm">上位机知识篇</a><a class="tag" taget="_blank" href="/search/pyqt/1.htm">pyqt</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a>
                        <div>文章目录前言一、代码二、代码解释2.1用户数据库定义2.2窗口初始化2.3认证逻辑2.5角色处理2.6错误处理优化2.7功能扩展说明2.7.1用户类型区分管理员普通用户其他用户2.7.2安全增强建议三、运行效果四、运行命令五、界面改进建议5.1密码显示5.2用户头像显示5.3输入框动画效果5.4加载进度显示5.5键盘快捷键前言本文简单介绍了在Ubuntu系统上使用Python的Pyqt创建密码登录</div>
                    </li>
                    <li><a href="/article/1903816501836705792.htm"
                           title="在SPSS中进行单因素方差分析(One-Way ANOVA)是一种常见的统计分析方法,用于比较三个或更多独立组之间的均值差异。" target="_blank">在SPSS中进行单因素方差分析(One-Way ANOVA)是一种常见的统计分析方法,用于比较三个或更多独立组之间的均值差异。</a>
                        <span class="text-muted">zhangfeng1133</span>
<a class="tag" taget="_blank" href="/search/%E5%9D%87%E5%80%BC%E7%AE%97%E6%B3%95/1.htm">均值算法</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>在SPSS中进行单因素方差分析(One-WayANOVA)是一种常见的统计分析方法,用于比较三个或更多独立组之间的均值差异。以下是进行单因素方差分析的详细步骤:---###1.**数据准备**-**因变量**:需要分析的连续变量(如成绩、收入等)。-**自变量**:分类变量(如组别、性别等),通常是一个名义变量。数据结构示例:|组别(自变量)|成绩(因变量)||----------------|-</div>
                    </li>
                    <li><a href="/article/1903815113434001408.htm"
                           title="Python读取.nc文件的方法与技术详解" target="_blank">Python读取.nc文件的方法与技术详解</a>
                        <span class="text-muted">傻啦嘿哟</span>
<a class="tag" taget="_blank" href="/search/%E5%85%B3%E4%BA%8Epython%E9%82%A3%E4%BA%9B%E4%BA%8B%E5%84%BF/1.htm">关于python那些事儿</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>目录一、引言二、使用netCDF4库读取.nc文件安装netCDF4库导入netCDF4库打开.nc文件获取变量读取变量数据案例与代码三、使用xarray库读取.nc文件安装xarray库导入xarray库打开.nc文件访问变量数据案例与代码四、性能与优化分块读取使用Dask进行并行计算减少不必要的变量加载五、其他注意事项文件路径变量命名数据类型文件关闭六、总结一、引言.nc文件,即NetCDF(</div>
                    </li>
                    <li><a href="/article/1903811962584756224.htm"
                           title="py之某website之music搜索接口" target="_blank">py之某website之music搜索接口</a>
                        <span class="text-muted">我不是程序员~~~~</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/1.htm">爬虫项目实战</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>fromlxmlimportetreeimportrequestsheaders={"accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","accept-lan</div>
                    </li>
                    <li><a href="/article/1903811201595404288.htm"
                           title="记20个忘10个之八:前缀a-" target="_blank">记20个忘10个之八:前缀a-</a>
                        <span class="text-muted">nshkfhwr</span>
<a class="tag" taget="_blank" href="/search/sleep%E7%9D%A1/1.htm">sleep睡</a><a class="tag" taget="_blank" href="/search/%E7%9D%A1%E8%A7%89/1.htm">睡觉</a><a class="tag" taget="_blank" href="/search/asleep%E7%9D%A1%E7%9D%80%E7%9A%84/1.htm">asleep睡着的</a><a class="tag" taget="_blank" href="/search/aside%E5%9C%A8%E6%97%81%E8%BE%B9/1.htm">aside在旁边</a><a class="tag" taget="_blank" href="/search/%E5%9C%A8%E8%BE%B9%E4%BE%A7/1.htm">在边侧</a><a class="tag" taget="_blank" href="/search/ahead%E5%9C%A8%E5%89%8D%E9%9D%A2/1.htm">ahead在前面</a><a class="tag" taget="_blank" href="/search/awake/1.htm">awake</a><a class="tag" taget="_blank" href="/search/await/1.htm">await</a>
                        <div>记20个忘10个之八:前缀a-一、表示“…的”,或通at、on,表“在…”【1】sleep→asleepsleepv./n.睡,睡觉;入睡asleepa.睡着的,睡着【2】side→asidesiden.边,侧asidead.在一边,在旁边【3】head→aheadheadn.头aheada./ad.在前面;提前【4】top→atoptopn.顶,顶部,顶端,上端;表面,上面atopad./pre</div>
                    </li>
                                <li><a href="/article/27.htm"
                                       title="rust的指针作为函数返回值是直接传递,还是先销毁后创建?" target="_blank">rust的指针作为函数返回值是直接传递,还是先销毁后创建?</a>
                                    <span class="text-muted">wudixiaotie</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%94%E5%9B%9E%E5%80%BC/1.htm">返回值</a>
                                    <div> 这是我自己想到的问题,结果去知呼提问,还没等别人回答, 我自己就想到方法实验了。。 
fn main() {
    let mut a = 34;
    println!("a's addr:{:p}", &a);
    let p = &mut a;
    println!("p's addr:{:p}", &a</div>
                                </li>
                                <li><a href="/article/154.htm"
                                       title="java编程思想 -- 数据的初始化" target="_blank">java编程思想 -- 数据的初始化</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%9A%84%E5%88%9D%E5%A7%8B%E5%8C%96/1.htm">数据的初始化</a>
                                    <div>  
1.使用构造器确保数据初始化 
     
/*
 *在ReckInitDemo类中创建Reck的对象 
 */
public class ReckInitDemo {
	

	public static void main(String[] args) {
		//创建Reck对象
		new Reck();
	}
	
	
}</div>
                                </li>
                                <li><a href="/article/281.htm"
                                       title="[航天与宇宙]为什么发射和回收航天器有档期" target="_blank">[航天与宇宙]为什么发射和回收航天器有档期</a>
                                    <span class="text-muted">comsci</span>

                                    <div> 
 
 
       地球的大气层中有一个时空屏蔽层,这个层次会不定时的出现,如果该时空屏蔽层出现,那么将导致外层空间进入的任何物体被摧毁,而从地面发射到太空的飞船也将被摧毁... 
 
       所以,航天发射和飞船回收都需要等待这个时空屏蔽层消失之后,再进行 
 
&</div>
                                </li>
                                <li><a href="/article/408.htm"
                                       title="linux下批量替换文件内容" target="_blank">linux下批量替换文件内容</a>
                                    <span class="text-muted">商人shang</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9B%BF%E6%8D%A2/1.htm">替换</a>
                                    <div>1、网络上现成的资料 
  格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 
  linux sed 批量替换多个文件中的字符串 
  sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir` 
  例如:替换/home下所有文件中的www.admi</div>
                                </li>
                                <li><a href="/article/535.htm"
                                       title="网页在线天气预报" target="_blank">网页在线天气预报</a>
                                    <span class="text-muted">oloz</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A9%E6%B0%94%E9%A2%84%E6%8A%A5/1.htm">天气预报</a>
                                    <div>网页在线调用天气预报

<%@ page language="java" contentType="text/html; charset=utf-8"
 pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transit</div>
                                </li>
                                <li><a href="/article/662.htm"
                                       title="SpringMVC和Struts2比较" target="_blank">SpringMVC和Struts2比较</a>
                                    <span class="text-muted">杨白白</span>
<a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a>
                                    <div>1. 入口 
spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。 
参见:http://blog.csdn.net/zs15932616453/article/details/8832343 
2</div>
                                </li>
                                <li><a href="/article/789.htm"
                                       title="refuse copy, lazy girl!" target="_blank">refuse copy, lazy girl!</a>
                                    <span class="text-muted">小桔子</span>
<a class="tag" taget="_blank" href="/search/copy/1.htm">copy</a>
                                    <div>       妹妹坐船头啊啊啊啊!都打算一点点琢磨呢。文字编辑也写了基本功能了。。今天查资料,结果查到了人家写得完完整整的。我清楚的认识到: 
1.那是我自己觉得写不出的高度 
2.如果直接拿来用,很快就能解决问题 
3.然后就是抄咩~~ 
4.肿么可以这样子,都不想写了今儿个,留着作参考吧!拒绝大抄特抄,慢慢一点点写! 
  </div>
                                </li>
                                <li><a href="/article/916.htm"
                                       title="apache与php整合" target="_blank">apache与php整合</a>
                                    <span class="text-muted">aichenglong</span>
<a class="tag" taget="_blank" href="/search/php+apache+web/1.htm">php apache web</a>
                                    <div>一  apache web服务器 
 1 apeche web服务器的安装 
  1)下载Apache web服务器 
  2)配置域名(如果需要使用要在DNS上注册) 
  3)测试安装访问http://localhost/验证是否安装成功 
 2 apache管理 
  1)service.msc进行图形化管理 
  2)命令管理,配</div>
                                </li>
                                <li><a href="/article/1043.htm"
                                       title="Maven常用内置变量" target="_blank">Maven常用内置变量</a>
                                    <span class="text-muted">AILIKES</span>
<a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a>
                                    <div>Built-in properties 
 
  ${basedir} represents the directory containing pom.xml 
  ${version} equivalent to ${project.version} (deprecated: ${pom.version})  
 Pom/Project properties 
Al</div>
                                </li>
                                <li><a href="/article/1170.htm"
                                       title="java的类和对象" target="_blank">java的类和对象</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/JAVA%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1+%E7%B1%BB+%E5%AF%B9%E8%B1%A1/1.htm">JAVA面向对象 类 对象</a>
                                    <div>java中的类: 
  
  java是面向对象的语言,解决问题的核心就是将问题看成是一个类,使用类来解决 
  
java使用 class 类名   来创建类 ,在Java中类名要求和构造方法,Java的文件名是一样的 
  
创建一个A类: 
class A{
} 
  
java中的类:将某两个事物有联系的属性包装在一个类中,再通</div>
                                </li>
                                <li><a href="/article/1297.htm"
                                       title="JS控制页面输入框为只读" target="_blank">JS控制页面输入框为只读</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div>在WEB应用开发当中,增、删除、改、查功能必不可少,为了减少以后维护的工作量,我们一般都只做一份页面,通过传入的参数控制其是新增、修改或者查看。而修改时需将待修改的信息从后台取到并显示出来,实际上就是查看的过程,唯一的区别是修改时,页面上所有的信息能修改,而查看页面上的信息不能修改。因此完全可以将其合并,但通过前端JS将查看页面的所有信息控制为只读,在信息量非常大时,就比较麻烦。 
  </div>
                                </li>
                                <li><a href="/article/1424.htm"
                                       title="AngularJS与服务器交互" target="_blank">AngularJS与服务器交互</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/%24http/1.htm">$http</a>
                                    <div>        对于AJAX应用(使用XMLHttpRequests)来说,向服务器发起请求的传统方式是:获取一个XMLHttpRequest对象的引用、发起请求、读取响应、检查状态码,最后处理服务端的响应。整个过程示例如下: 
var xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange</div>
                                </li>
                                <li><a href="/article/1551.htm"
                                       title="[Maven学习笔记八]Maven常用插件应用" target="_blank">[Maven学习笔记八]Maven常用插件应用</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a>
                                    <div>常用插件及其用法位于:http://maven.apache.org/plugins/ 
  
1. Jetty server plugin 
2. Dependency copy plugin 
3. Surefire Test plugin 
4. Uber jar plugin 
  
  
  
  
  
1. Jetty Pl</div>
                                </li>
                                <li><a href="/article/1678.htm"
                                       title="【Hive六】Hive用户自定义函数(UDF)" target="_blank">【Hive六】Hive用户自定义函数(UDF)</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%AE%9A%E4%B9%89%E5%87%BD%E6%95%B0/1.htm">自定义函数</a>
                                    <div>1. 什么是Hive UDF 
Hive是基于Hadoop中的MapReduce,提供HQL查询的数据仓库。Hive是一个很开放的系统,很多内容都支持用户定制,包括: 
 
 文件格式:Text File,Sequence File 
 内存中的数据格式: Java Integer/String, Hadoop IntWritable/Text 
 用户提供的 map/reduce 脚本:不管什么</div>
                                </li>
                                <li><a href="/article/1805.htm"
                                       title="杀掉nginx进程后丢失nginx.pid,如何重新启动nginx" target="_blank">杀掉nginx进程后丢失nginx.pid,如何重新启动nginx</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/nginx+%E9%87%8D%E5%90%AF+pid%E4%B8%A2%E5%A4%B1/1.htm">nginx 重启 pid丢失</a>
                                    <div>nginx进程被意外关闭,使用nginx -s reload重启时报如下错误:nginx: [error] open() “/var/run/nginx.pid” failed (2: No such file or directory)这是因为nginx进程被杀死后pid丢失了,下一次再开启nginx -s reload时无法启动解决办法:nginx -s reload 只是用来告诉运行中的ng</div>
                                </li>
                                <li><a href="/article/1932.htm"
                                       title="UI设计中我们为什么需要设计动效" target="_blank">UI设计中我们为什么需要设计动效</a>
                                    <span class="text-muted">brotherlamp</span>
<a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/ui%E6%95%99%E7%A8%8B/1.htm">ui教程</a><a class="tag" taget="_blank" href="/search/ui%E8%A7%86%E9%A2%91/1.htm">ui视频</a><a class="tag" taget="_blank" href="/search/ui%E8%B5%84%E6%96%99/1.htm">ui资料</a><a class="tag" taget="_blank" href="/search/ui%E8%87%AA%E5%AD%A6/1.htm">ui自学</a>
                                    <div>随着国际大品牌苹果和谷歌的引领,最近越来越多的国内公司开始关注动效设计了,越来越多的团队已经意识到动效在产品用户体验中的重要性了,更多的UI设计师们也开始投身动效设计领域。 
但是说到底,我们到底为什么需要动效设计?或者说我们到底需要什么样的动效?做动效设计也有段时间了,于是尝试用一些案例,从产品本身出发来说说我所思考的动效设计。 
一、加强体验舒适度 
嗯,就是让用户更加爽更加爽的用你的产品。 </div>
                                </li>
                                <li><a href="/article/2059.htm"
                                       title="Spring中JdbcDaoSupport的DataSource注入问题" target="_blank">Spring中JdbcDaoSupport的DataSource注入问题</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>参考以下两篇文章: 
 
http://www.mkyong.com/spring/spring-jdbctemplate-jdbcdaosupport-examples/ 
 
http://stackoverflow.com/questions/4762229/spring-ldap-invoking-setter-methods-in-beans-configuration 
 
Sprin</div>
                                </li>
                                <li><a href="/article/2186.htm"
                                       title="数据库连接池的工作原理" target="_blank">数据库连接池的工作原理</a>
                                    <span class="text-muted">chicony</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B1%A0/1.htm">数据库连接池</a>
                                    <div>       随着信息技术的高速发展与广泛应用,数据库技术在信息技术领域中的位置越来越重要,尤其是网络应用和电子商务的迅速发展,都需要数据库技术支持动 态Web站点的运行,而传统的开发模式是:首先在主程序(如Servlet、Beans)中建立数据库连接;然后进行SQL操作,对数据库中的对象进行查 询、修改和删除等操作;最后断开数据库连接。使用这种开发模式,对</div>
                                </li>
                                <li><a href="/article/2313.htm"
                                       title="java 关键字" target="_blank">java 关键字</a>
                                    <span class="text-muted">CrazyMizzz</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div> 
关键字是事先定义的,有特别意义的标识符,有时又叫保留字。对于保留字,用户只能按照系统规定的方式使用,不能自行定义。 
 
Java中的关键字按功能主要可以分为以下几类: 
   (1)访问修饰符 
      public,private,protected 
      p</div>
                                </li>
                                <li><a href="/article/2440.htm"
                                       title="Hive中的排序语法" target="_blank">Hive中的排序语法</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/%E6%8E%92%E5%BA%8F/1.htm">排序</a><a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/order+by/1.htm">order by</a><a class="tag" taget="_blank" href="/search/DISTRIBUTE+BY/1.htm">DISTRIBUTE BY</a><a class="tag" taget="_blank" href="/search/sort+by/1.htm">sort by</a>
                                    <div>Hive中的排序语法 2014.06.22  ORDER BY 
hive中的ORDER BY语句和关系数据库中的sql语法相似。他会对查询结果做全局排序,这意味着所有的数据会传送到一个Reduce任务上,这样会导致在大数量的情况下,花费大量时间。 
与数据库中 ORDER BY 的区别在于在hive.mapred.mode = strict模式下,必须指定 limit 否则执行会报错。</div>
                                </li>
                                <li><a href="/article/2567.htm"
                                       title="单态设计模式" target="_blank">单态设计模式</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>  单例模式(Singleton)用于为一个类生成一个唯一的对象。最常用的地方是数据库连接。 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。    
<?phpclass Example{    // 保存类实例在此属性中    private static&</div>
                                </li>
                                <li><a href="/article/2694.htm"
                                       title="svn locked" target="_blank">svn locked</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/Lock/1.htm">Lock</a>
                                    <div>post-commit hook failed (exit code 1) with output: 
svn: E155004: Working copy 'D:\xx\xxx' locked 
svn: E200031: sqlite: attempt to write a readonly database 
svn: E200031: sqlite: attempt to write a </div>
                                </li>
                                <li><a href="/article/2821.htm"
                                       title=" ARM寄存器学习" target="_blank"> ARM寄存器学习</a>
                                    <span class="text-muted">e200702084</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/F%23/1.htm">F#</a>
                                    <div>无论是学习哪一种处理器,首先需要明确的就是这种处理器的寄存器以及工作模式。 
    ARM有37个寄存器,其中31个通用寄存器,6个状态寄存器。 
1、不分组寄存器(R0-R7) 
    不分组也就是说说,在所有的处理器模式下指的都时同一物理寄存器。在异常中断造成处理器模式切换时,由于不同的处理器模式使用一个名字相同的物理寄存器,就是</div>
                                </li>
                                <li><a href="/article/2948.htm"
                                       title="常用编码资料" target="_blank">常用编码资料</a>
                                    <span class="text-muted">gengzg</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A0%81/1.htm">编码</a>
                                    <div>		List<UserInfo> list=GetUserS.GetUserList(11);
		String json=JSON.toJSONString(list);
		HashMap<Object,Object> hs=new HashMap<Object, Object>();
		for(int i=0;i<10;i++)
		{
</div>
                                </li>
                                <li><a href="/article/3075.htm"
                                       title="进程 vs. 线程" target="_blank">进程 vs. 线程</a>
                                    <span class="text-muted">hongtoushizi</span>
<a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%9B%E7%A8%8B/1.htm">进程</a>
                                    <div>我们介绍了多进程和多线程,这是实现多任务最常用的两种方式。现在,我们来讨论一下这两种方式的优缺点。 
首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Worker负责执行任务,因此,多任务环境下,通常是一个Master,多个Worker。 
如果用多进程实现Master-Worker,主进程就是Master,其他进程就是Worker。 
如果用多线程实现</div>
                                </li>
                                <li><a href="/article/3202.htm"
                                       title="Linux定时Job:crontab -e 与 /etc/crontab 的区别" target="_blank">Linux定时Job:crontab -e 与 /etc/crontab 的区别</a>
                                    <span class="text-muted">Josh_Persistence</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/crontab/1.htm">crontab</a>
                                    <div>一、linux中的crotab中的指定的时间只有5个部分:* * * * * 
分别表示:分钟,小时,日,月,星期,具体说来: 
第一段 代表分钟 0—59 
第二段 代表小时 0—23 
第三段 代表日期 1—31 
第四段 代表月份 1—12 
第五段 代表星期几,0代表星期日 0—6 
  
如: 
*/1 * * * *   每分钟执行一次。 
* </div>
                                </li>
                                <li><a href="/article/3329.htm"
                                       title="KMP算法详解" target="_blank">KMP算法详解</a>
                                    <span class="text-muted">hm4123660</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E7%AC%A6%E4%B8%B2/1.htm">字符串</a><a class="tag" taget="_blank" href="/search/KMP/1.htm">KMP</a>
                                    <div>     字符串模式匹配我们相信大家都有遇过,然而我们也习惯用简单匹配法(即Brute-Force算法),其基本思路就是一个个逐一对比下去,这也是我们大家熟知的方法,然而这种算法的效率并不高,但利于理解。 
  
    假设主串s="ababcabcacbab",模式串为t="</div>
                                </li>
                                <li><a href="/article/3456.htm"
                                       title="枚举类型的单例模式" target="_blank">枚举类型的单例模式</a>
                                    <span class="text-muted">zhb8015</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/1.htm">单例模式</a>
                                    <div>E.编写一个包含单个元素的枚举类型[极推荐]。代码如下: 
 
 public enum MaYun {himself; //定义一个枚举的元素,就代表MaYun的一个实例private String anotherField;MaYun() {//MaYun诞生要做的事情//这个方法也可以去掉。将构造时候需要做的事情放在instance赋值的时候:/** himself = MaYun() {*</div>
                                </li>
                                <li><a href="/article/3583.htm"
                                       title="Kafka+Storm+HDFS" target="_blank">Kafka+Storm+HDFS</a>
                                    <span class="text-muted">ssydxa219</span>
<a class="tag" taget="_blank" href="/search/storm/1.htm">storm</a>
                                    <div>cd /myhome/usr/stormbin/storm nimbus &amp;bin/storm supervisor &amp;bin/storm ui &amp;Kafka+Storm+HDFS整合实践kafka_2.9.2-0.8.1.1.tgzapache-storm-0.9.2-incubating.tar.gzKafka安装配置我们使用3台机器搭建Kafk</div>
                                </li>
                                <li><a href="/article/3710.htm"
                                       title="Java获取本地服务器的IP" target="_blank">Java获取本地服务器的IP</a>
                                    <span class="text-muted">中华好儿孙</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E8%8E%B7%E5%8F%96%E6%9C%8D%E5%8A%A1%E5%99%A8ip%E5%9C%B0%E5%9D%80/1.htm">获取服务器ip地址</a>
                                    <div>
        System.out.println("getRequestURL:"+request.getRequestURL());
		System.out.println("getLocalAddr:"+request.getLocalAddr());
		System.out.println("getLocalPort:&quo</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>