有关程序员面试的有个别想方设法美高梅娱乐4858.com

作  者:david++
揭橥时间:2011/10/12 18:58

动机

网游服务器端开发进度中,很多操纵游戏的参数都不应当间接硬编码的。必要各式各个的布局和本子文件,好处:

  1. 能够由策划或数值去随便改动,而不用动程序代码
  2. 布署能够动态加载,能够动态改变服务器运维中的参数,对已经公布的遵守实行调整

一般,可采用:

  1. ini配置,一般用来window下的软件,游戏客户端有时会用到。相比简单,功效有限。
  2. Excel表格,数值策划尤其喜欢用那些,能够做过多运算,生成数值,可以用VBA做越多的政工。
  3. xml配置,对于层次比较深、结构比较复杂的数额,应该算最佳选择了。

XML(eXtensible 马克up
Language)是一种标志语言,用于注解数据是怎么,以及指点数量音讯。首要用以:

  1. 充裕文件(Rich Documents):自定文件讲述并使其更丰硕
  2. 元数据(Metadata):描述其余文件
  3. 美高梅娱乐4858.com,计划文件(Configuration Files):设定应用程序的参数

上面主要介绍一下对此xml文件作为服务器配置时候的分析方案。

 

从二零一八年到后天,算算也面试过很四人了。对于哪些通过面试找到适当的姿首那么些题材,也想了很多。面试往往都以,聊一聊技术和做事经历,作弄一下玩耍程序员“横祸的天数”,感觉技术不错,有心理,扛得住“无底线”的加班,基本上都OK。前一周要去罗利展开校招面试,抽空整理了一下思路。关于如何有效地实行面试,有了点想法,希望我们多多提提出。

问题

剖析上边包车型大巴XML文件:

<config>
     <node1 prop1="100" prop2="i am string", prop3="2012-01-02 23:00:00"/>

     <node2 id="1" prop1="100" prop2="string1"/>
     <node2 id="2" prop1="100" prop2="string1"/>
     <node2 id="3" prop1="100" prop2="string1"/>
     <node2 id="4" prop1="100" prop2="string1"/>

     <node3 prop1="100"  prop2="string1"/>
     <node3 prop1="100"  prop2="string1"/>
     <node3 prop1="100"  prop2="string1"/>
     <node3 prop1="100"  prop2="string1"/>
</config>
  • node1 – 整个xml文件之中只有四个该节点
  • node2 – 有两个同时id属性能够看成它的键值,称之为节点map
  • node3 – 有五个名为node3的节点,但尚未键值,称之为节点vector

怎么设计面试方案?

美高梅娱乐4858.com 1

选聘的指标正是:找到能按期、高效、准确地形成工作任务的人。要想完毕这几个目的:

  • 率先,要强烈一般性的工作职分都有那几个;
  • 援助,思考那一个成功那些职务都急需持有哪些的原则和力量;
  • 末尾,设计四个合理、高效的面试方案

本着地方三点,要想清楚上边几在那之中央难题

  1. 急需新人完毕什么样的职务?(明显义务)
  2. 什么的人能成就那几个义务?(明显新人需具有的能力)
  3. 因而什么样路线和措施去找到这个人?(设计招聘方案、面试标题)

设计面试标题标时候,可以参照一下上边包车型客车原则

  1. 每二个面试标题都有鲜明的指标。你不仅仅本人打听,还是能向别的面试官解释清楚。
  2. 多提一些开放性的难点,而不是那种用Yes/No就能够答应的题材。那样做使您有空子与面试者展开斟酌,并且提议继续的难点,尽可能多地打听对方。
  3. 不用问太复杂的题材。因为面试者没有太多思念时间,所以不或然全面地答应,你也就未能判断他的力量了。

 

案例:网游程序员面试方案设计

第一步: 鲜明一般性工作中遇到的职务,然后由工作义务进展,然后揣摩完成那些职责需求具有哪些能力、知识系列的人。针对这几个力量,进一步统一筹划面试标题。那样做的利益是系统地整理了眨眼间间内需新人达成的职责,和其必须拥有的能力,然后又有针对性地发问。问题指标分外鲜明,大家须求的正是足以回复那些题材,具备那样能力的人。

至于网游开发程序员须求达成的职务和题材整治如下:(不完整,各类游戏公司肯定也有相当的大不一致)

美高梅娱乐4858.com 2

 

第二步:上面根本集中在职业技能,要求有所的技艺(有大旨)。上面针对非技术能力来布署面试标题,那么些最要紧的是看公司集团文化,集团的环境氛围和项指标实际上情状,来探寻适合的人。

美高梅娱乐4858.com 3

第三步:募集技术能力测试的难点和非技术力量的题材,举办合理配置,最后方案如下(针对校招生):

美高梅娱乐4858.com 4

相似的消除方案

选拔XMLPaser(用libxml2卷入的二个解析器)来分析(TinyXML也就像,DOM情势的都赤峰小异):

XMLPaser xml;
if (xml.initFile("xxx.xml"))
{
     xmlNodePtr root = xml.getRootNode("config");
     if (root)
     {
          // 解析node1的prop1和prop2属性
           struct NodeConfig{
                    int prop1;
                    string prop2;
               } config;

          xmlNodePtr node1 = root->getChildNode(root, "node1");
          if (node1)
          {

               node1->getNodePropNum(node1, "prop1", &config.prop1, sizeof(config.prop1));
               node2->getNodePropStr(node1, "prop2", config.prop2);
          }

          // 解析node2节点map
           struct NodeConfig{
                    int prop1;
                    string prop2;
           };
          std::map<int, NodeConfig> nodemap;

          xmlNodePtr node2 = root->getChildNode(root, "node2");
          while (node2)
          {
               int id;
               NodeConfig config;

               node2->getNodePropNum(node2, "id", &id, sizeof(id));
               node2->getNodePropNum(node2, "prop1", &config.prop1, sizeof(config.prop1));
               node2->getNodePropStr(node2, "prop2", config.prop2);

               nodemap[id] = config;               

               node2 = node2->getNextNode(node2, "node2");
          }

          // 解析node3节点vector
          .....
     }
}

小结

细想了一下,别的行业的面试,思路也都大约。面试前,一定要先想知道上边提到的“七个难题”,这样才能不负众望有针对,才有也许招到合适的人才。个人认为,面试其实个人感觉照旧有很重的重量,有时第贰印象,言行举止都恐怕滋生感觉窘迫,很有或许淘汰掉能够的红颜。

对此怎么开始展览有效的面试,你有啥看法了,欢迎斟酌。邮箱:heaven.hell.or@gmail.com

 

坏味道分析

地点的代码,有几点不足之处,列举如下:

  1. 代码重复
    • 全数解析进程大理小异,一步一步遍历加载在内部存款和储蓄器中的节点树
    • 节点或节点属性的名号、节点的层次结构差别的时候,就得写分裂的代码,一般会采纳复制代码的点子
  2. 动用不便
    • 一再要写二个单件管理器,在服务器运维的时候加载该配置,然后在管理器里面把须求的数据结构都定义好
    • 行使的时候,引用管理器里面包车型大巴积极分子变量,代码既丑陋又便于失误
  3. 不安全
    • 节点名称、属性名称都以字符串,拼错了,运营时会发生逻辑错误

 

更好的缓解方案

 

C++的布局与XML的附和树状结构对应起来,也正是多少绑定方案(Xml Data
Binding)。自个儿一度落成过三个Xml Data
Binding库,名为xml_parser。具体用法如下:

step1: 编写一份描述XML结构的布局文件(也是一份XML文件,xml_parser.xml)

<config>
     <node1 prop1="int" prop2="string", prop3="t_Date"/>
     <node2 id="int" prop1="int" prop2="string" container_="map" key_="id"/>
     <node3 prop1="int"  prop2="string" container_="vector" />
</config>

step2: 生成binding类

xmlpg -f xml_paser.xml -o xml_parser.h

step3: 应用程序中利用

         xml_config<xml_paser> xml;
          if (xml.load("xxx.xml"))
          {
               // node1的prop1和prop2属性
               int prop1 = xml.node1.prop1();
               string prop2 = xml.node1.prop2();
               t_Date date  = xml.node1.prop3();

               // node2节点map
               for (xml_paser::Node2MapIter it = xml.node2.begin(); it != xml.node2.end(); ++ it)
               {
                    int id = it->first;
                    int prop1 = it->second.prop1();
                    string prop2 = it->second.prop2();
               }

               // node3节点vector
               for (size_t i = 0; i < xml.node3.size(); i ++)
               {
                    int prop1 = xml.node3[i].prop1();
                    string prop2 = xml.node3[i].prop2();
               }
          }

 

更加多化解方案

方式 特征 开源库
DOM(Document Object Model)
  • 文档对象模型,整个文档就是一个根节点及其子节点构成
  • 树状,有子节点、父节点、兄弟节点
  • 访问效率较低
  • libxml2
  • Xerces-C++
  • TinyXML
  • SlimXML
  • RapidXML
SAX(Simple API for XML)
  • 基于事件解析XML
  • libxml2
  • Xerces-C++
Data Binding
  • C++的结构与XML的对应树状结构对应起来,使用起来比较容易
  • 安全,C++的结构为静态的,不会因为写错节点或节点属性名称拼写错误而导致逻辑错误
  • 代码简洁、清晰
  • 访问效率高,对所为节点或节点属性的访问只是函数调用,而不像DOM方式去循环遍历整个子树的节点,做一系列字符串比较操作
  • 不足之处,结构必须已知,DOM方式则不论程序里面对应的结构,先把整个节点树加载到内存中,程序根据自己的需要去读取自己想要的节点或节点属性
  • CodeSynthesis XSD

 

XML与Excel表格做布置的相比

比较 XML Excel表格
结构 树状的层次结构 MxN的二维数组
适用性
  • 信息具有层次性
  • 结构复杂
  • 有一个键值可以索引的关联数组结构
  • 结构简单
  • 配置操作比较简单
不足之处
  • 配置起来不是那么方便,每个节点名、属性名都必须指定
  • 添加新列的时候,不一定所有行都用到该列属性,容易导致空间的浪费

 

2012/04/25 21:15 于上海

发表评论

电子邮件地址不会被公开。 必填项已用*标注