精华内容
下载资源
问答
  • 输入一个班的学生的平时和考试成绩,计算...并出关于程序的需求分析,算法结构和流程图,求各位大神能给出代码,并按照题目解释一下。![图片说明](https://img-ask.csdn.net/upload/201904/17/1555506178_950053.jpg)
  • link中如何编写中间件,中间件如何访问数据,又怎么返回数据?代码怎么写
  • 最近公司项目的调用量...而这个项目是多达20,30人一起开发维护的,没有人能够从头到尾说得清这个项目的主要流程。文档,似乎在国内的程序员,最不屑的一件事情了。作为一个程序员,有没有必要技术文档呢?...

    最近公司项目的调用量突然涨了一大波,很多系统都纷纷扛不住了,于是需要对系统进行优化,系统优化的第一步,便是梳理业务!

    在这个过程中,经常出现了这样一些情况,发现数据库的某些字段,没有注释,也没有一定的文档来诠释它做什么作用。而这个项目又是多达20,30人一起开发维护的,没有人能够从头到尾说得清这个项目的主要流程。

    写文档,似乎在国内的程序员,最不屑的一件事情了。作为一个程序员,有没有必要写技术文档呢?

    bdee386490bb5e28a907df0cd7d88a12.png

    要不要写文档

    我们常说,Talk is cheap,show me your code。但是在实际的工作开发中,绝大部分情况,code才是最便宜的。工作的大部分时间,都是在进行业务的梳理,接口的沟通,剩下的,才是代码的编写与测试交付。

    有些人会说,写文档是让老板跟容易找人替代你,也许现实生活中存在这样的情况,但是一个人能否被替代,更多的是自己有没有核心竞争力,每一个互联网产品,都是有生命周期的,如果你的核心竞争力就是掌握了现有系统的坑,还不如提升自我,让自己到哪都有饭吃!

    也有人会说,写文档是写给老板们看的,对提升技术并没有多大的作用。这句话知识说对了一般,最近,我们有一项重要的项目要对客户与上面的老板进行汇报,再一次感受到会说话的重要性,对一些不太懂技术的人说技术,是一门学问。写代码,终究只是人与机器交流,而写文档,是人与人之间的交流,大部分程序员,都不可一辈子在单打独斗地写代码,学会与人交流,决定了你的上限。

    也有人说,只有大公司才写文档,小公司,做的都是一次性的项目,写了文档又有什么用。写文档,其实并不是完全是写给别人看,更多的是,让你去进一步了解业务,了解技术,对业务进行梳理,站在一个更高的角度去思考整个系统。我有一个朋友,一开始只是一个外包公司的开发,但他非常擅于进行业务梳理,很快,他也自己出来开了一个外包公司,也过上奔小康的生活。

    4a281bd71cff32a5c466868775a8196a.png

    那么,如何写文档才能避免写流水账呢?怎么样写文档才能让所有的人都看懂。个人觉得,写文档最少要写两方面,一是总体设计,二是详细的技术方案。

    总体设计文档

    首先是需求与功能,用自然语言来描述这个系统要实现什么功能,有什么作用。经常有程序员想找挣外快的机会,可是连自己做的东西有什么用都说不清的,真的很难去合作或者谈到更高的价钱。

    其次是架构与系统模块。这个系统涉及到哪些功能模块,每个模块之间的调用关系是什么样,最好有一个简单的架构图。

    最后是一些方案的对比,我们常常被教育着去寻找标准答案,但是这个世界更多的是合适的方案。多思考一下有没有其他的方案,为什么最终选择这个方案,下次做到类似的需求,相信你会受益匪浅。

    详细设计

    详细设计,最重要的就是数据结构。这个功能主要有哪些数据,数据在计算机内部是以什么形式进行存储,表如何设计,这些都是至关重要。多年的写代码经验告诉我,一个系统如果常出问题,无论是业务问题还是性能问题,绝大部分原因都是因为数据结构没搞好。所以,在一些大型的公司,架构师的首要职责,便是梳理好基础的数据结构。

    系统调用时序图,也就是交互流程,一个请求从一个系统流转到另外一个系统,顺序是什么样,各个系统又完成怎么样的责任,建议用时序图进行表达。

    性能指标与可拓展性,最后,如何跳出当前的业务去思考整个一个系统,当前的系统如何去应对将来的业务拓展,如果流量增加性能瓶颈又在哪里。好的设计不是一蹴而就的,而是不停地进行思考和迭代。

    1435e9884078942e0e4bbf0978296709.png

    总结

    程序员到底该不该写技术文档,相信你已经有答案。就好比盖房子,即使不用设计图,你也可以一边搬砖一边盖楼,但是,如果你想盖一个地标,一个摩天大楼,只有先有图纸,才能预估好整个大楼的空间、承重、稳定性。另一方面来说,当你拥有了图纸,拥有了画图的能力,盖房子不就是找一群建筑工的事情么?写代码亦是如此。

    好了,今天我们就介绍道这里,欢迎大家关注我,整理后会和大家继续分享。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)

    展开全文
  • 比如 create TABLE dept ( pid INT PRIMARY key , pname VARCHAR(20) ); create table emp ( eid int PRIMARY KEY, dept_name int, ...想要通过dept_name来查dept表的全部信息,sql语句该怎么写
  • 怎么写程序

    2013-12-10 17:28:04
    生活有时就是一种尖锐的讽刺,最不喜欢程序的人,现在要开始学习程序,不知从何入手,谁能帮帮我
    生活有时就是一种尖锐的讽刺,最不喜欢写程序的人,现在又要开始学习写程序,不知从何入手,谁能帮帮我
    
    展开全文
  • 数据结构都是用C语言来举例讲解的,那用易语言写数据结构的代码,怎么写啊,没有学过C语言,看不懂用C语言讲的数据结构呀。哪里可以学到易语言的数据结构啊?
  • 问题如题: 在详细描述下,现在有个C++的WEB服务器,想用cookie做身份验证,前端用js提交的http登录请求,webserver用户名密码校验... 不知道webserver响应头和客户端分析响应头该如何。大神最好给个例子吧。急~~~~~~
  • 展开全部可以,这说明这两张表的主键相关联,只是那张是主表(就是32313133353236313431303231363533e58685e5aeb931333433656133该表的主键作为从表的外键),那张是从表(该表的主键同时也是外键),需要自己定义好。...

    展开全部

    可以,这说明这两张表的主键相关联,只是那张是主表(就是32313133353236313431303231363533e58685e5aeb931333433656133该表的主键作为从表的外键),那张是从表(该表的主键同时也是外键),需要自己定义好。

    CREATE TABLE `baidispatch_cost` (

    `id` varchar(50) NOT NULL COMMENT 'id',

    `belong` varchar(15) DEFAULT NULL COMMENT '设计交付日期',

    primary key (`id`),

    constraint `FK_DISPATCH_ID` foreign key (`id`) references `dispatch_order` (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='成本表';

    9bba5bca43668405d54d6eb1f65699d4.png

    扩展资料:

    主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。

    展开全文
  • java中的数据库事务怎么写 在哪里commit 在哪里rollback
  • keras input shape怎么写

    2018-05-05 12:44:44
    我觉得是input shape错了,改成(1,6)错误变成了: ValueError: Error when checking input: expected lstm_7_input to have 3 dimensions, but got array with shape (30000, 6) 改成(30000,6)错误提示一样 我...
  • router.js ``` import Vue from 'vue' import Router from 'vue-router' import Home from '@/components/home' import Menu from '@/components/menu' ...但是多路由怎么写,还请大神指点!
  • go 语言怎么写test测试

    千次阅读 2017-08-23 16:17:36
    Go怎么写test测试用例开发程序其中很重要的一点是测试,我们如何保证代码的质量,如何保证每个函数是可运行,运行结果是正确的,如何保证写出来的代码性能是好的,我们知道单元测试的重点在于发现程序设计或实现的...

    Go怎么写test测试用例

    开发程序其中很重要的一点是测试,我们如何保证代码的质量,如何保证每个函数是可运行,运行结果是正确的,又如何保证写出来的代码性能是好的,我们知道单元测试的重点在于发现程序设计或实现的逻辑错误,使问题及早暴露,便于问题的定位解决,而性能测试的重点在于发现程序设计上的一些问题,让线上的程序能够在高并发的情况下还能保持稳定。本小节将带着这一连串的问题来讲解Go语言中如何来实现单元测试和性能测试。

    Go语言中自带有一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试,testing框架和其他语言中的测试框架类似,你可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例,那么接下来让我们一一来看一下怎么写。

    另外建议安装gotests插件自动生成测试代码:

    go get -u -v github.com/cweill/gotests/...

    如何编写测试用例

    由于go test命令只能在一个相应的目录下执行所有文件,所以我们接下来新建一个项目目录gotest,这样我们所有的代码和测试代码都在这个目录下。

    接下来我们在该目录下面创建两个文件:gotest.go和gotest_test.go

    1、 gotest.go:这个文件在我们创建的gotest包里面,里面有一个函数实现了除法运算:

        package gotest
    
        import (
            "errors"
        )
    
        func Division(a, b float64) (float64, error) {
            if b == 0 {
                return 0, errors.New("除数不能为0")
            }
    
            return a / b, nil
        }

    2、gotest_test.go:这是我们的单元测试文件,但是记住下面的这些原则:

    • 文件名必须是_test.go结尾的(文件名必须是*_test.go的类型,*代表要测试的文件名),这样在执行go test的时候才会执行到相应的代码
    • 你必须import testing这个包
    • 所有的测试用例函数必须是Test开头(函数名必须以Test开头如:TestXxx或Test_xxx)
    • 测试用例会按照源代码中写的顺序依次执行
    • 测试函数TestXxx()的参数是testing.T,我们可以使用该类型来记录错误或者是测试状态
    • 测试格式:func TestXxx (t *testing.T),Xxx部分可以为任意的字母数字的组合,但是首字母不能是小写字母[a-z],例如Testintdiv是错误的函数名。
    • 函数中通过调用testing.TError, Errorf, FailNow, Fatal, FatalIf方法,说明测试不通过,调用Log方法用来记录测试的信息。

    下面是我们的测试用例的代码:

        package gotest
    
        import (
            "testing"
        )
    
        func Test_Division_1(t *testing.T) {
            if i, e := Division(6, 2); i != 3 || e != nil { //try a unit test on function
                t.Error("除法函数测试没通过") // 如果不是如预期的那么就报错
            } else {
                t.Log("第一个测试通过了") //记录一些你期望记录的信息
            }
        }
    
        func Test_Division_2(t *testing.T) {
            t.Error("就是不通过")
        }

    我们在项目目录下面执行go test,就会显示如下信息:

        --- FAIL: Test_Division_2 (0.00 seconds)
            gotest_test.go:16: 就是不通过
        FAIL
        exit status 1
        FAIL    gotest  0.013s
    

    从这个结果显示测试没有通过,因为在第二个测试函数中我们写死了测试不通过的代码t.Error,那么我们的第一个函数执行的情况怎么样呢?默认情况下执行go test是不会显示测试通过的信息的,我们需要带上参数go test -v,这样就会显示如下信息:

        === RUN Test_Division_1
        --- PASS: Test_Division_1 (0.00 seconds)
            gotest_test.go:11: 第一个测试通过了
        === RUN Test_Division_2
        --- FAIL: Test_Division_2 (0.00 seconds)
            gotest_test.go:16: 就是不通过
        FAIL
        exit status 1
        FAIL    gotest  0.012s
    

    上面的输出详细的展示了这个测试的过程,我们看到测试函数1Test_Division_1测试通过,而测试函数2Test_Division_2测试失败了,最后得出结论测试不通过。接下来我们把测试函数2修改成如下代码:

    
        func Test_Division_2(t *testing.T) {
            if _, e := Division(6, 0); e == nil { //try a unit test on function
                t.Error("Division did not work as expected.") // 如果不是如预期的那么就报错
            } else {
                t.Log("one test passed.", e) //记录一些你期望记录的信息
            }
        }   

    然后我们执行go test -v,就显示如下信息,测试通过了:

            === RUN Test_Division_1
            --- PASS: Test_Division_1 (0.00 seconds)
                gotest_test.go:11: 第一个测试通过了
            === RUN Test_Division_2
            --- PASS: Test_Division_2 (0.00 seconds)
                gotest_test.go:20: one test passed. 除数不能为0
            PASS
            ok      gotest  0.013s

    如何编写压力测试

    压力测试用来检测函数(方法)的性能,和编写单元功能测试的方法类似,此处不再赘述,但需要注意以下几点:

    • 创建benchmark性能测试用例文件*_b_test.go(文件名使用*_b_test.go的类型(也可直接放在test文件中),*代表要测试的文件名,函数名必须以Benchmark开头如:BenchmarkXxx或Benchmark_xxx),压力测试用例必须遵循如下格式,其中xxx可以是任意字母数字的组合,但是Xxx首字母不能是小写字母。
        func BenchmarkXXX(b *testing.B) { ... }
    • go test不会默认执行压力测试的函数,如果要执行压力测试需要带上参数-test.bench,语法:-test.bench="test_name_regex",
      例如go test -test.bench=".*"表示测试全部的压力测试函数
    • 在压力测试用例中,请记得在循环体内使用testing.B.N,以使测试可以正常的运行
    • 文件名也必须以_test.go结尾

    下面我们新建一个压力测试文件webbench_test.go,代码如下所示:

    
    package gotest
    
    import (
        "testing"
    )
    
    func Benchmark_Division(b *testing.B) {
        for i := 0; i < b.N; i++ { //use b.N for looping 
            Division(4, 5)
        }
    }
    
    func Benchmark_TimeConsumingFunction(b *testing.B) {
        b.StopTimer() //调用该函数停止压力测试的时间计数
    
        //做一些初始化的工作,例如读取文件数据,数据库连接之类的,
        //这样这些时间不影响我们测试函数本身的性能
    
        b.StartTimer() //重新开始时间
        for i := 0; i < b.N; i++ {
            Division(4, 5)
        }
    }
    

    我们执行命令go test -file webbench_test.go -test.bench=".*",可以看到如下结果:

        PASS
        Benchmark_Division  500000000       7.76 ns/op
        Benchmark_TimeConsumingFunction 500000000      7.80 ns/op
        ok      gotest  9.364s  
    

    上面的结果显示我们没有执行任何TestXXX的单元测试函数,显示的结果只执行了压力测试函数;
    第一条显示了Benchmark_Division执行了500000000次,每次的执行平均时间是7.76纳秒;
    第二条显示了Benchmark_TimeConsumingFunction执行了500000000,每次的平均执行时间是7.80纳秒;
    最后一条显示总共的执行时间。

    用性能测试生成CPU状态图

    使用命令:

    go test -bench=".*" -cpuprofile=cpu.prof -c

    cpuprofile是表示生成的cpu profile文件

    -c是生成可执行的二进制文件,这个是生成状态图必须的,它会在本目录下生成可执行文件 *.test

    然后使用go tool pprof工具

    go tool pprof *.test cpu.prof

    调用web(需要安装graphviz)来生成svg文件,生成后使用浏览器查看svg文件,具体图例看参考:golang test测试实例

    小结

    通过上面对单元测试和压力测试的学习,我们可以看到testing包很轻量,编写单元测试和压力测试用例非常简单,配合内置的go test命令就可以非常方便的进行测试,这样在我们每次修改完代码,执行一下go test就可以简单的完成回归测试了。

    参考文章

    展开全文
  • Mysql如果有多个库,ID是自增的,ID冲突怎么搞? http://www.oschina.net/question/1182150_2141804?sort=time
  • 文档要怎么写

    千次阅读 2014-08-07 19:00:14
    的过程中思路清晰了,一切都会变得明朗起来,有一种山穷水复疑无路,柳暗花明一村的感觉,并且一下子把需要大脑中记忆的这些事情全部转移到了文字上,一个字,舒服~,就像清理了电脑中的垃圾空间一样。...
  • 写这篇文章的初衷是有个知友私信我说,模仿了很多网上用Python写爬虫的例子,但到了需要自己动手写爬虫的时候不知道怎么写了。我觉得出现这种情况还是很正常的,至少我个人是这么过来的。这篇文章仅供初学者写爬虫...
  • Java应届生简历应该怎么写

    万次阅读 2019-10-18 00:37:19
    前言 最近在boss直聘、前程无忧或拉钩投简历都石沉大海。网上不少人发牢骚说现在Java应届生找工作难,当然,我也成为其中一员。...那么我们写简历时,该怎么写,如何才能吸引HR的眼球?以下便是我...
  • Go语言,单元测试怎么写 吴军老师讲过: 提高程序质量水平,可以从写单元测试这种可操作的事情做起。 Google为了保证工程师所写程序的质量,鼓励大家多写测试代码。 凡事做记录,这样可以避免狗熊掰棒子。 大部分人...
  • 用python怎么写余数_python 余数怎么求

    千次阅读 2020-12-04 01:55:44
    什么是质数:质数(Prime number),称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)。——via维基百科简单来说就是,只能除以1和自身的数(需要大于1)...
  • 我有一张表,目前大约800W数据吧。字段不是很多,6个。 现在要持续的修改这个表,存储过程中如果有先删除,在写入新时间...现在写入一条慢的时候要1S多,的过程太长,使得读的过程时间也加长,我应该怎么处理下呢?
  • 就是记录一个用户在页面上的修改操作 记录到日志中或者文件中 又怎么读取修改之前和修改之后的值,然后显示在页面上,本人小白 有那位大哥大姐 不吝赐教 有什么好的列子借鉴一下的 小弟拜谢了
  • 报告是一回事,讲报告是另一回事。很多新人抱怨,每天只有日报、周报、月报的常规报表,压根没有做真正分析的机会。可往往给了机会,让他做一个报告给大家听,开讲5分钟台下听众就纷纷掏出手机,愉悦的搓了起来...
  • 我们在学习的时候代码基本上都是自己一个人完成,但是在公司里代码是由很多人一起协作完成的,如果每个人一部分,然后粘贴到一个文件中去,会导致错乱,那么怎么实现明确分工不会造成程序混乱呢? 首先会是...
  • 网站头部有一个隐藏的导航 怎么实现滚动条往下移动一定距离 这个隐藏的导航就弹出固定在上端的 当我滚动条网上移动到一定距离 这个导航栏隐藏了
  • u盘写保护怎么才能真正去掉 U盘作为存储工具,个人认为还是很强悍的,一般也不会出什么问题。但是最近频繁的在U盘中系统,系统安装工具,在不同的文件系统(FAT16,FAT32,NTFS)之间进行转换,在格式化的过程中...
  • 需求文案怎么写

    千次阅读 2011-09-11 16:46:31
    在决定是否要开发自己的软件之前,应先做透彻的分析,做出成本预算和分步开发的各个阶段。...这个麻烦费力的工作是后续程序开发团队执行的基础。同时也是对技术选择,用户界面设计和工作流程设计的参考。非
  • #include #include #include using namespace std; struct treenode { char data; treenode *firstchild; treenode *nextsibling; }; treenode * creat_tree...我了一个,但明显错误,希望大神能帮我改进。。
  • 新员工培训 一 新员工培训的重要性 新员工培训,被称为入职培训,是企业将聘用的员工从社会人转变成为企业人的过程,同时也是员工从组织外部融入到组织或团队内部,并成为团队一员的过程。员工通过逐渐熟悉、适应...
  • 网站标题,描述,到底该怎么写:在写标题之前,我们不妨想一想:网站标题是什么?很显然,网站标题便是我们整个网站的核心,所以标题就是用我们的关键词来撰写。接着,我们就会有另一个问题,那么关键词又怎么选取呢...
  • 不过还是有很多学生朋友来问我“没有项目怎么办”,诚然,确实有不少同学没有实习经历,没有什么像样的项目经历,对于这样的同学,简历上的项目经历难道只能空着了吗。 其实不然,就算你是跟着一些课程做项目,...
  • 原文地址:https://wenku.baidu.com/view/7d7cf156284ac850ac0242b6.html

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,144
精华内容 6,857
关键字:

又怎么写