精华内容
下载资源
问答
  • 前几天,看了一段代码,很有感触,于是自己进行了些思考,现将之撰文写出与诸君共勉。 这段代码是实现什么需求的呢? 需求是 设备网元中有多个单板,单板上对应多个命令字。我要随意的给对应单板上对应命令字的指令...

    前几天,看了一段代码,很有感触,于是自己进行了些思考,现将之撰文写出与诸君共勉。

    这段代码是实现什么需求的呢?

    需求是 设备网元中有多个单板,单板上对应多个命令字。我要随意的给对应单板上对应命令字的指令下发到设备上。

    大家不用知道所谓的网元和单板是什么,反正该需求的目的就是要实现一个二维数组中的数据发出去。

    按照正常的设计思路,我会设计一个二维数组,如下:

    Param[MAX_BOARDID][MAX_CMDID]。

    1)假如我要下发该数组中对应的一个元素到其他模块中,我会像如下这样来书写:

    Send(Param[0][0]);

    2)假如我要对一块单板下发所有的命令,我会像如下编写:

    for (int i = 0; i < MAX_CMDID; i++)

    {

        Send(Param[0][i]);  

    }

    3)假如我要对一个单板按照顺序下发所有的命令,我会多定义一个优先级表,在组成数组前将Param[0]排好序,伪码如下:

    static const OrderTable[];  //优先级表

    SetParamByOrder(data, OrderTable);  //优先级作为入参,也可以直接在函数中调用,这里只是示例一下。

    然后再执行上例的for循环。

    4)假如我要对一个单板只下发另一单板以前下发过的命令。

    那就要这么来写:

    for (int i = 0; i < SizeofAnotherBoardParam; i++)

    {

           SetParamToMyBoard(i);

    }


    我们来看看这个原作者代码如何写的?

    首先他定义了一个最小的元素Param,这里只有Get/Set,其类结构如下:

    ParamGroup                  组   --包含50个ParamRepository,通过BoardID查询

    ParamRepository         库    --包含5个Param,通过CmdID查询

    Param                             元素



    另外设计了ParamConfig类,实现对以上元素的管理。

    ParamSynchronizer类,实现元素的创建,类似于工厂类

    ParamPipe类,实现与设备通讯

    ParamSwitcher类,实现倒换时处理,可以保存参数。

    还有CfgParam实现传参作用,包含元素BoardId, CmdID


    我们来看下上面的假如这里如何实现的。

    1)假如我要下发该数组中对应的一个元素到其他模块中,我会像如下这样来书写:

    ParamSynchronizer()->ParamPipe->Send(CfgParam);

    2)假如我要对一块单板下发所有的命令,我会像如下编写:

    int len = GetSizeOfParamRepository;

    for (int i = 0; i < len; i++)

    {

         CfgParam = ParamRepository.At(i);

         ParamSynchronizer()->ParamPipe->Send(CfgParam);

    }

    3)假如我要对一个单板按照顺序下发所有的命令,我会多定义一个优先级表,在组成数组前将Param[0]排好序,伪码如下:

    static const OrderTable[];  //优先级表

    在ParamRepository中添加时调整顺序即可。

    然后再执行上例的for循环。

    4)假如我要对一个单板只下发以前下发过的命令,那我只能先想办法将以前下发过的命令保存下来,然后才能下发。

    在ParamRepository中已经包含了所有的历史命令

    int len = GetSizeOfParamRepositoryAnotherBoard;

    for (int i = 0; i < len; i++)

    {

         CfgParam = ParamRepositoryAnotherBoard.At(i);

         ParamSynchronizer()->ParamPipe->Send(CfgParam);

    }


    上面用面向对象的方式把二维数组分解了一下,大家可以看一下,

    其好处是一目了然,代码结构清晰了,在应用层只关心自己的内容,

    循环遍历数组边界的东西没有,这些东西都隐藏在单独的类里,代码可读性,可维护性,

    及犯错误的几率都小了很多。


    仔细回味,有感:This is 面向对象的好处啊。











    展开全文
  • 设计测试思路思想

    千次阅读 2018-01-06 17:59:35
    2.其次,区分哪些模块是存在复杂逻辑的关键性模块,需要分派测试设计和思考的时间应该比较长; 3.最后,对于简单模块分派测试时间相对较少; 设计测试用例的思想 1.分析需求点,列出正向测试用例:例如A对象通过B...

    区分测试模块比重

    1.首先,分析哪些功能对用户来说是核心且重要的功能,必须保证其准确性,需要考虑全面;

    2.其次,区分哪些模块是存在复杂逻辑的关键性模块,需要分派测试设计和思考的时间应该比较长;

    3.最后,对于简单模块分派测试时间相对较少;

    设计测试用例的思想

    1.分析需求点,列出正向测试用例:例如A对象通过B对象进行操作,最后的操作结果正确

    2.根据正向测试用例,将测试对象分离出来

    3.分别对每个测试对象列出测试点,例如容量大小(长度)、不同格式等

    4.列出容错性测试点:例如人为操作产生中断、遇到特殊情况导致中断、被操作对象坏掉、被操作对象被限制了一部分权限等

    5.列出性能测试点:例如连续性操作、响应速度等

    6.兼容性测试点:例如不同长度(大小)、不同规格、不同的方式等

    7.发散性测试点:对已有用例分解,执行完一部分操作步骤之后,重复某一个步骤、跳过步骤、重复某一步骤、等待一段时间之后在操作、立即操作等

    8.其他测试点:对空列表、0、之前旧数据等特殊情况的处理

    疑惑:

    1.怎样区分模块的重要性?

    2.怎样设计测试用例,既能最大程度的覆盖所有测试点,又不会产生冗余的测试用例?


    展开全文
  • 它真正的实现思路是先用递归思想逆着思考,然后用顺序实现方法顺向实现,这一点在最短路算法中已经有了非常生动直观的体现。 为什么基于数据本身结构(例如图结构)的动态规划算法往往是最有效的方法? 因为如果我们...

    动态规划的理论基石是最优性原理,它的思考方式采用的是递归思想,但是绝不可以直接用递归思想去实现,嵌套调用会非常非常慢。它真正的实现思路是先用递归思想逆着思考,然后用顺序实现方法顺向实现,这一点在最短路算法中已经有了非常生动直观的体现。

    为什么基于数据本身结构(例如图结构)的动态规划算法往往是最有效的方法?

    因为如果我们完全抛弃数据本身带着的结构,而把问题上升为一个抽象的数学问题,那么各个元素组合成的解集合会变得非常大,造成问题变成了一个NP难问题,然而解集合中存在大量的不可能出现的解,如果我们借助问题本身带有的数据结构的话。

    很多图论算法都是借用了动态规划的思想来实现的,通过将问题自身携带的数据结构读入计算机,然后基于这些数据结构设计和实现算法,在隐枚举的过程中,由于是顺着问题本身的数据结构搜素问题的解,不知不觉跳过了大量的不可能出现的组合解,使得问题可以在多项式时间内被求解出来

    展开全文
  • 2)其实仔细思考下,最终依然是面向对象的基本思路,AStarWrapper创建出来一个对象,然后,读取第一数据,init一下存储起来,之后的路径导航就可以拿到AStar的数据开始 行走了! 总结: 我们往往学习了很多知识...

    1)最近学习mmorpg项目,那么AStar等组件应该如何引入到我们的项目中来呢?如何组织代码?

    2)其实仔细思考下,最终依然是面向对象的基本思路,AStarWrapper创建出来一个对象,然后,读取第一数据,init一下存储起来,之后的路径导航就可以拿到AStar的数据开始

          行走了!

    3)Prefab再某个脚本中被实例化,添加到场景后挂载上脚本。  这样多个类就被串联起来。

     

    总结:

    我们往往学习了很多知识,却忘了本,最后连最基本的代码都可能忘记了如何写!

     

    读了很多书后,应该反思,再读薄才行,书上知识很多,但是常用的精华,却没多少,

     

    如:并发编程。 学到最后,业务层面就BlockingQueue实现生产者消费者模式、ConcurrentHashMap用于多线程共享资源时,使用好保证线程安全。 AtomicInteger、AtomicBoolean的使用。 这几个知识足以应对开发。

     

    先把书(知识)读厚,拥有足够的视野,再读薄,总结出精华,变为自己的知识真正理解,才算真正的学会。 然而还要学以致用,转化为产品,为产品服务,这样才能真正体现最终价值!

    展开全文
  • 本文是个人对OKR的思考,重点关注实施方法。 本文参考了明道云、飞书OKR、嗨马OKR、辉哥奇谭等。 其实没有标准的OKR,重点是思想的升华和合适的方法。 个人理解一定存在差异,欢迎同我沟通探讨。 本文的当前...
  • 很经典,可以阅读,必有收获,包括c++的一些思路与应用,让你豁然开朗
  • 说明:唯一后悔的就是没有参加今年的数学建模,提供一些思路供大家思考。 首先说一下我为什么今年会有数字货币出现在建模中,直接原因来自于2017年的ico爆发,根本原因是新的思想出现,技术永远不是问题,一旦形成一...
  • 原来ALS“交叉最小二乘法”只是优化方法,和梯度下降是一类东西,并不是建模的方法,模型一般是指损失函数?矩阵分解的损失函数一般都很直接:a-uv,而uv一开始是随机初始化,...推荐方法有两种思路:一种是基于领域
  • 面向对象思想理解思路。(本章需要时间和代码积累才能理解通透 不要着急 先来了解 敲上三年代码再回来看) 面向对象是现在大部分编程语言中都会提及和使用到的一种思想方式。有人说很难理解,但个人觉得其实不难。...
  • 以高职院校思想政治理论课教学学生...0等统计工具,对各项因素指标进行差异性比较与相关性分析,从而明晰高职院校思想政治理论课教学学生满意度的总体现状,提出进一步提高高职院校思想政治理论课学生满意度的思路与对策。
  • 但是由于思路还未成形,写起来比较棘手,就先把今天自己结合在C++课上老师关于编程思想的讲解简单的加入自己的一些理解、体会后大概的说说自己对他们一些新的认识,故而命名之为《涅槃之关于面向对象和面向过程的...
  • 我们尽可能多地去思考这个系统如何结合到一个游戏中去,希望他发挥这样那样的作用来影响玩家的收益,由此还能挖出不少坑来,可是却忽略了游戏产品本身,玩家最大的收益就是——Have fun。我们就简单地看一下一些系统...
  • 思路: 我们把4映射成0,7映射成1,然后就如下枚举:0,1,00,01,10,11。因为是映射的,所以可以前导0,然后我们就会知道给出的那个数字在里面的规律了,找出来就好了。 关键:映射思想 二:CF 319 DIV1 A 一种...
  • 思路:(前提:尝试的过程都是无后效性的) 1)M * N 的表格,搞清楚M、N各自的含义,此时需要一个可变参数能具体代表递归的状态,即该参数一旦确定,递归的状态就定了, 2)可变参数组成的表格。 3)先确定表格中...
  • # 通过思考发现我们需要定义一个我们要计算的文件的路径 # pathvar = "/mnt/hgfs/gongxiang_16/day17/ceshi100" # 大致知道要计算这个目录下边的ceshi100 # 第二步:大体思路理清楚 # 第三部:验证逻辑,运行...
  • 工程结构架构,减少耦合...主要思想是将基础层的最下一层当做零部件,将业务层最下层当做组装大部件,通过流程串起来形成一个完整的产品,做零件时按照做出一个就扔进对应基础层的篮子里思路来,目录结构也可以...
  • 思想

    2019-09-12 21:28:09
    编程思想,类似于算法,通俗地讲:即解决问题的思路,通过思考如何实现; 举个栗子:当你看到一个新题目,脑海中逐渐有一步步实现的方法,这就有了初步的编程思想; 今天看到篇文章《没有编程,你还有思想吗》,有...
  • 枚举思想

    2020-01-12 15:15:19
    这种思想就是枚举!这和我们处理事情的思考方式差不多! 都设想一样,如果这样做,会咋样,如果那样做,会咋样! 然后取出最优解思路!就像欧洲赔率中的最优解一样, 两害相权取其轻!(这是更优解思路) ——...
  • 编程思想

    2018-06-12 23:13:00
    template思想:  更好的封装UI和业务逻辑,增加复用性 解决问题思路:  为什么出错?怎么意识到错误?怎么解决这个错误? 把设计图变为程序思路:  把设计图当成一个整体去思考,写富有层次感的代码逻辑...
  • 分割区域_递归思路

    2020-02-20 12:54:31
    在学习算法的递推思想过程中遇到了几个平面分割问题,这些问题使我自身在思考过程中遇到了阻力,所以下面首先给出这些问题的解法及思路。并且因为这几个问题虽然难度适中,但比较具有的代表性,所以通过分析解决这些...
  • 游戏对象继承自CCSprite是很多游戏示例的写法,很多,但不是全部...我想来想去,初步的答案是思路清晰,解耦(接口分离原则)和多态的方便。准备跟老师讨论这个问题,答案待定,不允许评论,以下只是个人想法,纯属个人观点.
  • 动态规划解题思路

    2020-08-14 11:57:01
    动态规划最重要的是掌握他的思想,动态规划的核心思想是把原问题分解成子问题进行求解,也就是分治的思想。 1.理论知识 特点1:存在重复的子问题,所以需要保存之前的计算结果 特点2:最优子结构,最优解肯定是有...
  • 一些思考

    2013-04-23 17:11:19
    越来越觉得写博客其实就是梳理自己思路的过程。以后会逐渐将自己的所思所想在这里进行整理。 1:去体会,去参与,感受真实的存在,摧毁自己思想中的枷锁,对于个人来说,我们要有进行自我革命的勇气。 2:To get...
  • 用模式思考

    2007-04-25 13:44:00
    用模式思考 着手处理一个设计问题时,传统的思想并不会尝试“用模式思考”。但是经验表明用模式思考常常有助于获得突破性的思路。模式为我们的思考指引了方向。它引导我们形成了自己的行之有效而且能够推而广之的...
  • Java设计 Java思想

    2012-04-21 00:04:46
    有关Java程序设计的思考思路决定出路
  • 回溯算法思想

    2021-04-03 13:24:22
    例如,棋手思考下一步应该走哪里的时候,就会采取试探的方法,当然是在脑中试探。首先想一下下一步的位置,计算对手的应对,再计算自己的应对,若对手的应对对我不利,则取消资格设想。然后再计算另一种想法。 算法...
  • 面对对象基本思想

    2020-09-23 17:20:50
    物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。 面向对象适合处理复杂的问题,适合处理需要多人协作的问题! 注意...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,009
精华内容 403
关键字:

思考思路思想