class TestBase{
    constructor(){
        this.apiDoc={
            group:"逻辑分组",
            desc:"请对当前类进行描述",
            exam:"概要示例",
            methods:[]
        };
        this.initClassDoc();
    }
    initClassDoc(){
      throw new Error(`
         请定义当前类的API文档,重写initClassDoc方法.
         在initClassDoc方法中调用如下方法：
         1.descClass(groupName,classDesc,exam)增加当前类的描述和使用示例
         2.descMethod(methodName,paramName,paramType,defaultValue,paramDesc)增加方法的说明
      `);
    }
     descClass(groupName,classDesc,exam){
        this.group=groupName;
        this.apiDoc.desc=classDesc;
        this.apiDoc.exam=exam;
    }
     descMethod(methodDesc,methodName,paramDesc,paramName,paramType,defaultValue,rtnTypeDesc,rtnType){
        var mobj=this.apiDoc.methods.filter((m)=>{
            if(m.name==methodName){
                return true; 
            }else{
                return false;
            }
        })[0];
        var param={
            pname:paramName,
            ptype:paramType,
            pdesc:paramDesc,
            pdefaultValue:defaultValue,
        };
        if(mobj!=null){
            mobj.params.push(param);
        }else{
            this.apiDoc.methods.push(
                {
                    methodDesc:methodDesc?methodDesc:"",
                    name:methodName,
                    params:[param],
                    rtnTypeDesc:rtnTypeDesc,
                    rtnType:rtnType
                }
            );
        }
    }
}


class Test extends TestBase{
   constructor(){
       super();
   }
    initClassDoc(){
       this.descClass("class desc",`
            xxxxxx
            xxxxx
            xxxxxxxx
       `);
       this.descMethod("hello",{
           pname:"pname1",
           ptype:"int",
           pdesc:"xccccc"
       });
       this.descMethod("hello",{
        pname:"pname2",
        ptype:"str",
        pdesc:"xccccyyyc"
    });
   }
}
class Test2 extends TestBase{
    constructor(){
        super();
    }
     initClassDoc(){
        this.descClass("class desc222222",`
             xxxxxx
             xxxxx
             xxxxxxxx
        `);
        this.descMethod("test2hello",{
            pname:"pname1",
            ptype:"int",
            pdesc:"xccccc"
        });
        this.descMethod("world",{
         pname:"pname2",
         ptype:"str",
         pdesc:"xccccyyyc"
     });
    }
 }
 class Test3 extends TestBase{
     constructor(){
         super();
     }
 }
module.exports={cls:Test,doc:new Test().apiDoc};
var t1=new Test();
var t2=new Test2();

console.log(t1.apiDoc);
console.log(t2.apiDoc);



技术总监 职位描述

岗位职责：

•  负责公司基础平台的设计开发

•  负责公司开发团队的建设

•  负责制定项目技术方案，负责系统的架构设计、优化，参与核心架构部分代码编写；

•  负责软件开发任务的需求分析、技术方案设计、开发计划制定，指导项目团队成员的日常开发工作、解决开发中的技术问题；

• 职位要求

• 财务软件开发经验者优先

• 8年以上Java或php互联网开发经验，5年以上应用架构经验。 

• 熟悉分布式存储、搜索、异步框架、集群与负载均衡，消息中间件等技术；

• 有大型分布式、高并发、高负载、高可用系统架构、设计、开发和调优经验；

• 熟悉各种常用设计模式，能将设计模式应用到日常工作。 

• 熟悉至少一种较为常见的主流数据库及SQL语言，有一定的sql调优经验；熟悉Linux操作系统以及常用版本管理软件操作(如：svn,git)。 

• 熟悉至少一种nosql数据库

• 计算机相关专业本科以上学历。

• 具有良好的沟通表达能力和团队协作能力。

