??xml version="1.0" encoding="utf-8" standalone="yes"?>
大纲Q?/strong>
一、缘由、概q?span class="Apple-converted-space">
二、创新工场的模式
三、职业发展道路的影响因素
四、职业选择的几个小问题
五、李开复的Ud互联|和我眼中的Ud互联|?span class="Apple-converted-space">
六、再见和福
一、缘?/strong>、概q?/strong>
1、缘?/strong>
前两周,有个师弟咨询我个offer选择——360产品l理offer和创新工场某团队产品l理。他说面试的时候,创新工场某面试官说在360做品经理不如在创新工场Q?60那边产品团队XX不专业,创新工场q边产品团队XX牛BQ劝说这人推?60的offer接创新工场的offer?span class="Apple-converted-space">
我当时听了那叫一个汗?#8212;—能说栯的h要么特别无知要么特别无者R别的不_冲360可以监控C|民上网习惯q点也该?60ѝ何况,360产品l理做出的品有多少人用Q你创新工场有多h用?span class="Apple-converted-space">
最q估计是创新工场开始发offer了,不断有h咨询我这家公司,加上有些人咨询我另外的offer比较问题。我本来是懒得写长文的,只是最q看到李开复的一些过于XX的言论,再加上前几天听说了创新工场忽悠师弟师妹们{而说一些极唐的理由Q实在看不下了?span class="Apple-converted-space">
soQ写一吧?nbsp;
2、概q?/strong>
我ƈ不是反对大家d新工场, 如果你生下来是做老板的(不是自认为,而是你在学校的时候已l有不少成功的创业经验)Q而且你很聪明Q很勤奋Qh格没啥短板,你可以考虑去,也只有这Uh在创新工场才有前途,创新工场也只适合q种人?span class="Apple-converted-space">
如果你以后的职业目标是个行业专家或者是企业中高U管理层Q那么你q是老老实实找个发展较速的企业卖命q着。现在互联网发展q么快,你去搜狗?60的核心部门,乃至团、去哪儿、开心等未来成功的概率都比去创新工场大?span class="Apple-converted-space">
如果你的职业目标是赚的差不多p了,比其他hZ些,别太累,收入中上Q那你找个百度、腾讯等成熟部门安安心心做个Z钉就可以了?span class="Apple-converted-space">
对于普通hQ什么时候时候适合d新工场?扑֮习的时候,正式工作q是了?span class="Apple-converted-space">
我写q片文章Q只是想告诉大家Q创新工场模式的q{思\Q学生加入会有哪些风险,你该如何选择一个offerQ移动互联网的沫。如果最后有_֊写写offer的比较吧?span class="Apple-converted-space">
二、创新工场的模式Q学生加入的问题、学生创?/strong>
Q在看之前,请先M解一?#8220;天投资?#8221;?#8220;A?#8221;?#8220;B?#8221;的大概意思,了解一下天使投资的成功率,了解一下红杉树{大型VC A、B轮的成功率)
1、创新工场的模式
a.VC的模?span class="Apple-converted-space">
U杉树、经U投资等知名VCQ他们一般是在企业有一定的规模Q有较ؓ清晰的盈利模式的时候才q入Q用较高的钱换取较低的股份和较高的成功率?span class="Apple-converted-space">
而天使投资,是在产品刚有个雏形,甚至只有个idea的时候进入,用较的钱换取较高的股䆾Q承担非帔R的失败率Q单个项目一旦成功会有很高的收益率?span class="Apple-converted-space">
b.天投资者创新工场的优势
天投资的收?目?#215;成功?#215;投资回报?#8212;目?#215;q_目成本
大家可以看到Q这个模式的关键点在于:
Q?Q、项目多Q?span class="Apple-converted-space">
天投资人,投的目成功概率都很低,李开复也l对不会例外。项目差不多靠谱׃Q创新工场拼的就是量Q?span class="Apple-converted-space">
Q?Q、^均成本低Q?span class="Apple-converted-space">
IT团队初期的成本主要是人员、硬件投入、场C及行ѝ法律开支等?span class="Apple-converted-space">
人员Q都创业了,你要什么高工资Q给你期权忽悠一下就行?span class="Apple-converted-space">
g、带宽、场地、行政:q块创新工场集约化了Qh多Q项目越多,q块成本低?span class="Apple-converted-space">
看到上述模式了?说白了,最关键的就是要量大Q至于成功率差不多就行。米聊、UC做那么大Q都快被qq攑ր了Q目前创新工场投的这些项目有什么好虑的?
而李开复在做量q方面拥有着独特的杠杆,他的主要受众是——学生和入世不q资源匮乏者。这批h是最需要天使投资h的,q批Z是最Ҏ被忽悠加入创业团队的。因此,他能够帮助:投资决项目数量问题,帮助创业者的老板解决掉招聘问题(招聘问题一般是初创团队面的最大问题)?span class="Apple-converted-space">
因此Q目前就天投资的规模来_创新工场是最大的。这也是Z么李开复的微博一说话QVC们都出来捧场Q因Z手里目多,VC都等着A、B轮的时候跟q的。你q会发现Q互联网大{们相互之间的互动不算,但是鲜有转发、评论李开复的微博Q因为大家就都知道他放屁,但跟李开复也没仇Q李开复PR做的又那么好Q惹他干吗?但是如果转了伤自qRP也不好?span class="Apple-converted-space">
soQ创新工事,本来也没啥特别的Q就是一个大型天使投资机构投资了一大批初创团队。这些创业团队再闪亮Q也是一堆初创团队,跟其它创业团队一P有很多问题,也会有一些机会,也存在很大的风险。但是由于某人的影响力,加上最q移动互联网的沫,收益被无限地攑֤了,风险看v来被~小了?span class="Apple-converted-space">
李开复在招聘的时候到处去忽悠Q其实也没啥Q哪个公司招人的时候不到处忽悠呢?否则开什么宣讲会Q只不过开复同志到处对没有辨别能力的学生去忽悠加入创新工场Z大大、回报高高、风险低低,q实在有Ҏ心h?span class="Apple-converted-space">
对于投资人、创业的老板来说Q创新工Z错,投资回报率高Q但是对于员工来_风险高收益低Q远逊于加入其它公司。一功成万骨枯Q??q过后,李开复成功的时候,谁会记得q些无辜的应届生呢?
下面我说一下加入这样团队的风险?span class="Apple-converted-space">
———————————————————————————————————————
未完Q明后天争取 l箋二更?span class="Apple-converted-space">
20111103日二?#8212;———————————————————————————————————————————————
三、职业发展道路的影响因素
1、职业规划基本理?/strong>
先讲两个基本的理论:
我自创了一套评价h的体p,大概的意思就是h可以分ؓ四个l度去观察,人格、能力、知识、其它方面(如h际关pȝ{)?span class="Apple-converted-space">
我也自己在摸索一些职业规划的理论Q还没完全定型,初步地讲Q做职业规划是从Q行业、职业、公司、地点等l度d析?span class="Apple-converted-space">
所谓的职业规划Q就是选择合适的行业、职业、公司等Q帮助自׃最大的概率快速地获得职业的高炏V至于如何才能取得职业规划效益的最大化Q话题太大,׃讲了Q只讲讲“Ch入职?#8221;?#8220;Z么不是创新工?#8221;?span class="Apple-converted-space">
2、职业发展的两条道\
李开复光说加入创新工场比加入癑ֺ、腾讯成功概率高Q但是怎么个高法、怎么个锻炼法Q没说。我也一直蛮好奇的,如何能让一个h在创新工场成功概率比在百度、腾讯高Q我觉得李开复如果能做到Q作为百度、腾讯的股东Q我会申请发赯东会投票Q呼吁李彦宏、化腾下课让贤?span class="Apple-converted-space">
在没看到l果之前Q我们还是先理论分析一下,单从职业发展角度Q如何才能更为成功。做猎头q么多年了,我也大概琢磨出来?#8212;—人的最l发展结果无非两U,业务专家 or 理?
q个跟你是否要创业还是打工无养I你是腾讯的创始h、百度的部门l理、创新工场的目负责人,你承担的也还是这两类角色。因此,你找工作Q要扄是能帮助你在未来几q内成ؓq类角色的公司、职位,只要一个公司能帮助你成Z内的专家、管理层Q咱可以坐下来谈offer。管你这家公司是癑ֺ、腾讯还是国务院?span class="Apple-converted-space">
理层需要的东西我们׃谈了Q谈q个对于应届生太扯E了。如果有教会一个应届生如何快速成为高U管理层Q我觉得只在一U场合里面有——做传销的,热衷l你讲如何在1?q内快速成功,快速当上家?span class="Apple-converted-space">
我认为想做管理层Q没啥捷径,先成Z们小l的组长再说。见q提拔业l好的当l长的,没见q提拔业l差的当l长的公司,soQ如何当理层这事,你可以工??q升了组长后去职场版再讨论?span class="Apple-converted-space">
soQ新人的你,W一步是得研I如何成为小l内的专家?span class="Apple-converted-space">
3、如何能快速当上专?/strong>
l合如何成ؓ一个行业知名专家或者公司内的专家这个目标,我们来分析一下职业规划跟求职者自w情늚匚w。行业就不分析了Q这话题太大了,最多过两天写写Ud互联|的情况?span class="Apple-converted-space">
Q?Q职业和人格Q职业{换的高昂成本
xZӞ首先应该看自q人格适合什么职业,做自׃适合做的事情Q肯定成不了专家。这个职业不应该是入职后dU尝试,工作后{行的成本太高。要知道Q你再蟩槽的时候,招聘方只对专家和理层的人感兴趣Q对于想换职业方向的Z来不会感兴趣Q谁有兴招个目前做q营的过来写代码Qor招个写C++的过来做产品Q?span class="Apple-converted-space">
转职业的成本非常高昂Q因此尝试各U职业、各个方向应该是在你做实习的时候,q也是我Z么说创新工场非常适合d习的原因Q太合适了Q团队小Q不谈做的专业否Q但是每个h都得q好几块事情Q各个职位都有机会接触到?span class="Apple-converted-space">
Q?Q当专家需要啥Q?nbsp;
当专安要啥Q主要是两块Q职业相关的能力Q如沟通、逻辑、学习等Q业务相关知识,如XX开发语a、某工具掌握{,那么如何能快速提升能力、构建知识体p?
国内没啥成熟的理论,国际的我也没看到Q我自己个h认ؓ以下一些因素是必要的:良好的职业习惯、科学的学习工作Ҏ思\、有大牛带你、少走弯路。理论粗p,q请大家补充?span class="Apple-converted-space">
Q?Q职业习?nbsp;
职业习惯Q大公司或者稍微正规的公司Q都会有各项程文档、规章制度,或者有人带你教你。这非常有助于养成良好的职业习惯Q常规事情处理流E、团队协作流E、邮件、文档写作规范、程序开发规范、开会制度,甚至如outlook、office的用。这些职业习惯的LQ可以很好地提高你的做事效率Q提高你跟公司的协同效率Q提高大家做事情的成功率?span class="Apple-converted-space">
我就举个例子,我们公司是小公司Q但是我们会对员工windows、office的几十个快捷键做考试Q考试不过的,要求全键盘不用鼠标干zM天。这些快捷键的掌握可以让一个经常处理文档的员工每天节约20分钟Q一q就?20个小Ӟ相当?5个工作日?span class="Apple-converted-space">
对于普通h而言Q第一件事情就是该学会Q如何让自己做事更合行业、公司的规矩、流E,能在q些范围内尽可能地提高业l。如果你有一天完全掌握且能改q、颠覆公司规则,你就能当你们公司的专家或者管理层Q如果你有一天能改进、颠覆行业的规则、流E,那你p创业、开qz了?span class="Apple-converted-space">
别看大公司的程琐碎Q流E的存在实际是ؓ了提高效率,q事工作三年以上的h都会认同。否则腾讯、百度就不用q两q花大力气从华ؓ、IBM{挖来改q管理了Q不程、制度的公司大多都是一些小作坊式的公司Q没前途更没钱途?span class="Apple-converted-space">
Q?Q科学的学习工作Ҏ思\
q个׃多说了,每个行业、职业都不一P但是相同的是都肯定有Ҏ。做分布式开发应该先学什么,先做什么,有什么常规的模型、工P做品规划有哪些常规产品规划Ҏ、工兗做猎头分哪几个阶段Q每个阶D应该掌握什么能力、知识,如何做才能掌握这些能力、知识等{?nbsp;
Q?Q大牛带、经验的U篏Q?span class="Apple-converted-space">
记得职场版有个新的伙子写q一个帖子,讲他涨薪的经历,写的蛮实在的。其中有一条我记得大概的意思就是,每天晚上加班看前人的文档、操作记录,看公司的前辈们如何处理问题、解决问题的。这些行业知识、经验有些公司是形成文档的,有些公司是靠你老大教给你的Q在q方面,如果是大牛或者公司有成熟的知识、经验分享制度,那会让你走很多弯\?span class="Apple-converted-space">
q个非常重要Q别人可能几个月、一两年处理故障、遭遇的问题、瓶颈浓~在你职业道路不同时期、恰到好处的几次培训中,会让你少摸烦很多q。^时乐于给你分享知识、经验,把他多年的知识分享给你,而不是没人分?#8212;—前提是知识是正确的?span class="Apple-converted-space">
Q?Q少走弯?span class="Apple-converted-space">
q个弯\主要是指׃其它人,公司带来的媄响,例如产品人员水^一般,D需求经常变化,开发h员疲于奔命。公司渠道资源有问题Q大家辛苦做出的产品上线讉K量低Q无从得?消费者的真实反馈Q无法改q品。或者像cq样Q在明知道会有微信这LҎ会出现的情况下,q投入这么大的胦力、物力去做,跟当q金山officeL要打垮MS有啥区别?span class="Apple-converted-space">
一个品从做出来到有用P到有大量用户Q到成ؓ行业W一Q到发展遭遇瓉没法再提高,你从中收获到的经验是截然不同的,L在低水^重复是没有意义的。像我们做猎_从R到AC、C、SC、MC每步都是不一LQ一q协助别人做几十万的业W到自己带团队做几百万是不一L?span class="Apple-converted-space">
———————————————————————————————————————————————
抱歉Q看到微博催更的童鞋Q加班完回来抓紧写了会?span class="Apple-converted-space">
今天写到这了,人手紧张Q天天加班,明天q得早vQ先z洗睡了Q明后天有空再写下一?#8212;—Z么不是创新工场、李开复的人品、移动互联网Q争取一气或两气呉|?nbsp;
20111104三更——————————————————————————————————————————————————————
四、找工作的常见几个误?#8212;—主要是指在互联网行业
׃最q收C各种渠道的善意的、不善意、赤裸的、隐晦的关爱、提醒、暗C、威胁,那家公司和某人的情况׃写了Q下面两章仅׃些求职的问题和Ud互联|做个探讨?span class="Apple-converted-space">
至于那家公司情况到底如何Q北邮也有很多童鞋在那实习过Q找人问问就知道了。问问各个团队的重组是否频繁Q管理如何,程是否有,如果有流E是否顺畅,培训是否满日常工作的需要,老大是否很有l验能让弟走弯\Q开发运营是否经常做无用功,ҎҎ自己的品推q渠道是否给力,问问C招的h都是啥情况(q个可以Ҏ一下同为创业公司的团的开发团队,两者比较,你就可以得出来有工作l验的h如何看待创新工场和美团)……把这些按照我上文写的那些标准Q跟其它offer做比较分析就可以了?span class="Apple-converted-space">
在这里,q讲个简单的ҎQ今qHR的校招招聘压力很大,你如果拿了多家公司的offerQ不知道如何权衡Q可以直接去问HR。让HR和业务部门给你徏议,分析各家offer的优劣,HR和业务部门会很尽心尽责地l你讲的Q多听几家的HR分析Q你q道该如何选择了。在q其中你也能看出各个HR和业务老板的h品到底如何?span class="Apple-converted-space">
说到q,我是真不知道某些新注册,发文?Qor故意跛_来讲“哪家公司招聘的时候不忽悠Q李开复忽悠怎么了?”的h是个啥意思?意思是别的HR都忽悠了Q某人忽悠大点,影响恶劣点就不算事了Q?span class="Apple-converted-space">
在此Q讨论几个小问题q行讨论?span class="Apple-converted-space">
1、去大公司就是一定当Z?/strong>
李开复宣讲的时候说“我去大公司工作过Q他们说Q恭喜你Q加入了全世界最牛的某某目l,今后你的工作是写一个按钮?#8221;Q这句话Q按照心理学Ԍ叫心理暗C?#8212;—看着是说自己的经历,但却l你暗示“你去大公司就是做Z钉,是写按?#8221;?span class="Apple-converted-space">
我想_某h是揣着明白装糊涂,有点睁眼说瞎话的意思。你去IBM、MS、通信业可能是q个样子Q行业很E_Q必然了。但是在互联|行业,明明是完全不同的?span class="Apple-converted-space">
李开复又不是没在google呆过Q他在google的时候不是很提倡给员工旉让员工自己来试一些东西吗Q在google那么大的公司里面Q不是很多研发都自己试过规划产品、运营品吗Q他q么快就忘了Q?span class="Apple-converted-space">
中国的互联网发展才这么几q_大部分企业有没什么成熟的程制度来让员工变成Z钉?也就baidu、腾讯这两年不愁生死了,在尝试做q方面的程制度?span class="Apple-converted-space">
大部分互联网公司都在担心明年、现在的生死问题Q没有精力搞什么螺丝钉制度。研发ؓ什么不能参与品设计?研发Z么不能帮助运营抓取数据来分析Q品ؓ什么不能参与运营来规划zdQ竞争对手都把品上U了Q用h都好几十万了Q那q有那么多规矩?你们q不抓紧以效率优先!q嘛呢!你们几个研发和品抓紧碰一下,赶紧做出来先上线Q看着q营数据直接改!再做不出来把你们都裁了?span class="Apple-converted-space">
所有的互联|公司,包括癑ֺ、腾讯在内(除了一些非常成型的部门Q例如新的新闻|站部门{,以及一些非帔R量Q必d的很l的工作Q如|页搜烦Q,不管你是研发q是其它Q只要你愿意Q你可以很轻村֜接触到别人的工作Q甚臛_以参与部分(当然Q大量地参与q了,该干点啥q点Q别把副业当MQ?span class="Apple-converted-space">
各个互联|企业的实际情况Q请自己去问问论坛的各个师兄师姐Q自己师兄师姐的说法Q比李开复靠q多。我所知道的是Q我们微软、宝z、华为等公司的候X选X人(你妹的,那三个字居然是敏感词Q害我尝试了无数遍,用了二分查找法才找到敏感词Q去了baidu、腾讯,W一反应是——靠,q些互联|公司管理怎么q么混ؕ、职责变来变去,产品动不动就调整Q我怎么q要承担别的部门的工作职责?癑ֺ、腾讯尚且如此,更不用说其它公怺?br />
2、轮岗、兼?span class="Apple-converted-space">
术业有专攻,你相信一个h又做产品又干研发Q比专做产品能做的更好?你作Z个新人,能把一样东西做好就行了。很多东西你了解一下不p了吗Qؓ什么要做兼作?专做一件事情,对你的能力、知识等提升更快?span class="Apple-converted-space">
如果有h对你说经常换部门对于当管理层有帮助的Q除非那人是你爸Q他准备让你轮岗之后当CEOQ否则赶紧踹他一脚给他一巴掌让他闭嘴。在目前的中国,已经有成熟的轮岗、提升计划,且有成功先例的大公司一只手数q来了。这几年Q很多公司的理培训生计划最后都不了了之Q招q去的h打落牙和血吞,更多的是变成了销售培训生的代名词。更不用说在没有轮岗、培养规划的公司里面了这些h会落个什么结果?span class="Apple-converted-space">
一个公司如果说Q我们打让你多q几块工作,专注提高一下,我只能说——他在忽悠你。我再D个例子,在我们猎头业Q有些猎头公司哪怕一些大的猎头公司,员工是进来之后分个大行业Q然后不分细分行业,不分职业角色都做。你可以xQ一个h又做互联|研发类的职位,又做通信c销售的职位Q还做Y件类试的职位,他最后挖人的时候能比得q专做移动互联网研发Q专做通信业销售的猎头吗?
3、可以快速致?span class="Apple-converted-space">
收益=成本×投资回报?#215;Q?-p|率)
你在q轻的时候,成本?0~20万(你的薪水、期权)Q回报率?00%Q给底层员工q个回报率了不v了)Q失败率?9.9%Q眼光不行,不具备判断力Q能力不够,没法控制局面降低风险)?span class="Apple-converted-space">
你在3?0岁的时候,成本??0万,回报率是3000%甚至癑ր(l部门经理的Q给创业骨干的肯定不一PQ失败率?0%Q创业风险L有的Q?span class="Apple-converted-space">
你自q帐吧?span class="Apple-converted-space">
4、暴富机会一M复返
引用李开复老师的一句话来回{?#8212;—“中国q_九年出现一ơ大发胦成功Z”Q所以你不用急着去赶李开复老师宣传的这ơ移动互联网热潮?q后q有呢?span class="Apple-converted-space">
引用我写《通信行业求职宝典》写的一D话Q?#8220;10q前Q没有h会想到SP公司会这么挣钱,新浪、搜狐等公司能靠着SP业务撑过了互联网最为寒L一D|间?q前Q没有没有h会想到RIM会凭借黑莓达Cq?0亿美元的q收入,净利润可以辑ֈ13亿美元;6q前没有Z惛_彩铃也会挣钱Q一?#8220;疯狂青蛙”居然能带?000多万英镑的收入,4q前没有Z意识到彩信报q种几个人就可以做的产品会有数百万数千万的订阅者,2q前没h惛_RIM很快没落过时了Q?q前没h惛_Ud互联|的泡沫会如此之?#8230;…”
5、期?span class="Apple-converted-space">
我只惌Q我认识的中高层候X选X人,谈offer大家一般最x的是薪水Q鲜有最x股票、期权的Q越高层如此,l股、期权再多也不如l钱实在。公司给你股期权是Z让你暴富的还是ؓ了让你承担公司发展风险的Q?span class="Apple-converted-space">
公司如果眼瞅着明年׃定能上市Q或者公司股明q一定比现在?00%Q公ؓ什么要l你q个捞钱的机会?股东方自己钱太多了?
收益高Q风险越高。如果有公司的期权能让你比同龄h?0%的收益,那意味着q事q有点希望,要是能多100%Q那意味着q事不靠谱,
要是能多1000%Q那基本肯定q事没啥希望了?span class="Apple-converted-space">
———————————————————————————————————————————————————
中场休息Q吃夜宵Q晚上再更一ơ最后一D,写写Ud互联|。之前说的最后一部分“offer选择”׃写,没时_明天q要q活?span class="Apple-converted-space">
四更————————————————————————————————
五、李开复对于移动互联网的看法和我对于移动互联网的看?/font>
单分析一下,l的东西大家可以自己分析。我l个分析的方?#8212;—多看看各个互联网大{的动作和演讲Q多去问问师兄师姐各个公司实际的人力、胦力投入。跟着业内的大佬,而不是记者、爱炒作的h赎ͼ你一般成功概率会更高一些?span class="Apple-converted-space">
1、移动互联网的市场前景:
“如果传统互联|的三大巨头Q百度腾讯阿里加在一Pg千五百亿金的话Q那么,Ud互联|三个巨_是一千五百亿金的十倍,一万五千亿金?#8221;
对于q段话,互联|大佬们大多选择了无视,VC们大多选择了支持这D话。有个互联网老大隐讳地调侃了一下,当然Qh家说的很客气Q不像我说的那么直接Q他说的?#8220;国股市市值最高的三家公司,埃克美?Ҏ/微Y加v来市?千多亿美?中国无线互联|三巨头10q后市值加h要达?.5万亿......中国人民,站v来了......”?span class="Apple-converted-space">
他列丄是美国前三,而全世界市值前三的公司加v来都没有一万五千亿……我估计李开?.5万亿的计基是全球货币高速贬|而不是移动互联网高速发展?span class="Apple-converted-space">
2、机会大
“q个ZQ我可以保证Q绝Ҏ1999q的更大Q也许大五倍,也许大十倍,或者五十倍,具体大多我不好_但是我肯定,l对比当q丁马云的Z要大很多?#8221;
|易手里有着一癑֤亿的现金Q既然这个机会比丁磊当年大多了,那丁ؓ什么不投个几亿招几百hq来开发?
现在全国所有的Ud互联|项目加hq不够网易一家收购的。网易直接都CQ然后就可以直接再造一个百倍于|易的公司,岂不是最快捷Q?span class="Apple-converted-space">
做ؓ曄的中国首富,W一代互联网CEOQ目前中国最赚钱的三家互联网公司之一的老板Q丁的互联|从业、烧钱、赚q验可比李开复丰富多了?br />
3、发?/strong>
“你要来创新工场,从基层做P从工E师做v。你在百度微软中国银行,可能十年二十q_你能成ؓ一个中层或高层理者,而在创业公司Q快的两三年Q慢的七八年Q完全有可能创业成功?#8221;
唉,两三q的中高层,让我们羞愧地掩面而泣ѝ?nbsp;
4、品竞争激烈度
大家ȝ看豌豆荚的品,再去看看qq推出的应用助手。豌豆荚是去q?月䆾推出来的Qqq应用助手是今q?月推出来的,两者一个推出来?8个月Q一个推出来?个月Q你ȝ看现在两者功能的差距。qqq用助手不知道现在装机量过豌豆荚没有,q没超q,我估计也是几个月的事情?span class="Apple-converted-space">
大家再随便去qq旗下挑一些手机客L产品Q看看适配的终端种c,再去业内的其它移动互联网新秀们看看?不在一个量U?span class="Apple-converted-space">
Androidl了很多手机公司ZQ但是也lY件开发者带来了巨大的麻烦。就例如l端适配q个事情Q不做,用户体验差,做,公司ҎM赯样一个团队。有些时候我甚至觉得在移动互联网上做东西q不如在腾讯{的开攑^C做东西,L不用去考虑各个l端的种cR版本、屏q等?span class="Apple-converted-space">
5、渠?/strong>
“推销不需要耗费巨大的渠道费用,直接l过搜烦C交引擎推广”
ucweb做了那么大了Q今q在预装渠道里面被腾讯卡的死ȝ——你手机公司要么装我的qq和qq览器,要么你装他的Ucweb但是不能装QQQ钱我给的更多?span class="Apple-converted-space">
没钱Q哪来的量Q真靠社交推q就能推qv来,360哪能那么霸气当Y件渠道商Q?span class="Apple-converted-space">
q两天还看到个很有趣的事情,跟大家分享一下。前几天苏宁易购图书上线搞活动,京东也搞zdQ当当也搞活动。苏宁的pȝ最烂,0点就挂了Q??Ҏ好,zd也最一般?span class="Apple-converted-space">
但在某几家新闻门L到的报道都是“苏宁易购血战XXXQ投入巨资不惜亏?#8221;Q半Ҏ提过pȝ挂掉的事情,而京东当当的新闻?#8220;京东当当图书战被指花׃骂名Q大部分~”Q边上还挂着一个新?#8220;京东重磅促销遇网l瘫?10月被投诉389?#8221;?span class="Apple-converted-space">
呵呵Q有旉大家可以多观察一下新、腾讯、搜狐的新闻Q基本都是对掐,你看到的新闻都是资本家们惌你看到的Q不是新闻|站q是微博?span class="Apple-converted-space">
6、移动互联网薪水和其它行业的薪水
Ud互联|发展很快很大,薪水被抬的很高?span class="Apple-converted-space">
例如我们很多客户开的条仉是:??q的相关l验Q能独立q活的,不用名校毕业Q不用算法好Q做Android的就能到20来万Q做iPhone的能?5万,更高的也有。远过同期其它行业的hQ我们前几年q到这个趋势,前两qv储备h才,q一q收益颇多?span class="Apple-converted-space">
但是Q我们自q判断是,现在的薪水沫在2?q左右会慢慢破掉Q这个行业的门槛很低Q技术难度ƈ不大Q这几年q去的应届生2?q成长v来后׃会这么夸张?span class="Apple-converted-space">
而且Q移动互联网客户端开发未来成长空间较,毕竟比v后台、搜索等Q技术难度在那摆着。在我们知道的所有互联网公司里面Qv薪都很高Q但是超q?0万薪水的职位很少Q?5万的|见Q?0万的工程师职位没见过几个。但是我们做的分布式后台、搜索、数据挖掘等职位Q??0万的很普遍,1?00万的职位也有Q大家可以自己思考一下ؓ什么?span class="Apple-converted-space">
因此我觉得,如果你热爱开发,技术大牛,可以选择后台、数据挖掘、搜索等隑ֺ较大的,如果不是特别热爱开发,不是技术大牛,那你在Android开发和常规的一些开发职位中可以选择Android开发之cȝQ毕竟都是工作,未来泡沫灭了也不会差到哪去,Lq几q收入不错?span class="Apple-converted-space">
7、移动互联网的创业环境和前景?/strong>
Ud互联|的Z不少Q也是未来必然的势Q但是跟团队没啥关p,包括现在在iPhone应用市场上,团队存zȝ概率很低Q开发、UI、推q等都是要钱的,人员成本也很c?span class="Apple-converted-space">
有不移动互联网公司找我们招hQ我们的W一句话是你给我预付费我也不给你们做,太难了。大公司都抢不过来hQ何谈小公司QsoQ这也是李老师Z么这么着急的原因。毕竟创新工2?q能zM来,不管最后成几个目Q他q成功了,要是在这轮沫结束前zM下来Q他可能成ZW二个方东兴?span class="Apple-converted-space">
现在的创业环境比以前要糟p,当年遍地都是ZQ全是空白的Q现在创业你能做的就是依附一颗大树创业,在qq、百度、阿里系{公司框下的圈子里面创业Q当q的淘宝都畏惧百度,现在的京东都畏惧etaoQ何谈其它?span class="Apple-converted-space">
8、创业门?/strong>
“今天的创业和以前不一样了Q你只要做一个最低的不被用户骂的产品Q先推向市场。不要太花力气琢用户喜Ƣ黑色还是红Ԍ一半黑一半红Q哪个黏性大q哪个Q不要考虑让用h册好q是不注册好Q一半注册一半不注册Q看用户反应。如果你做汽车,一半黑一半红Q行吗?成本太大Q做软g互联|最大的好处Q就是无本生意,用户也不用付钱,互联|就是你的实验室?#8221;
“采用云计,不需要买服务器和带宽Q采用开源YӞ大大节省工程师成本;推销不需要耗费巨大的渠道费用,直接l过搜烦C交引擎推广Q大大节U了营销成本……150万就够了。虽然不很低,但这是历史新低?span class="Apple-converted-space">
论据我就不评价了Q如果论Ҏ正确的,的确门槛低,那么我想?#8212;—对创业者而言Q在初期x一把就赎ͼ门槛低是个好事,如果在中后期Q那直是个灾难,门槛低竞争激烈。只能比烧钱速度和兜里的银子了?span class="Apple-converted-space">
9、移动互联网前景
q话题太大了Q我懒得写,只想_前景很开阔,但是走势很难定,鹿死谁手未知Q且未来Ud互联|开发的隑ֺ、门槛、^台到底是什么样Q不知道。当有一天折叠屏q、投影、电池技术都解决的时候,Ud互联|和互联|的界限真会那么清晰吗?Q貌似现在已l很模糊了)?span class="Apple-converted-space">
而且Q轻客户端,web化已l成Z一个必然的势Q无U传输技术、材料学的发展给q个行业带来了很多不定性?span class="Apple-converted-space">
六、再?/strong>和祝?/strong>
以后慢慢不写东西了Q老了Q从真情露job版到北邮坛job版,该写的东襉K重复一万遍了,没有啥写东西的欲望,也没啥新东西好写的,每年看到你们讨论的都是一L话题Q都看了6?q了。这可能是我最后一ơ在job版写长文了,q底可能在职场版再写一长文,我的论坛生活差不多over了,论坛已经不是我们q个时代的h的了?span class="Apple-converted-space">
在最后,惛_各位师弟Q师妹说的是——
各位师弟Q师姐师Ҏ你们的,offer和银子也是你们的Q?span class="Apple-converted-space">
各位师妹Q师兄师弟是你们的,师姐师妹有时候也是你们的Qoffer和户口也是你们的Q?span class="Apple-converted-space">
看到不少公司今年开?0多万的offerQ你们可以一定要努力Q一定给北邮争光Q户口和50万的offer都要l母校拿一堆回来!
大家找工作利Q?1月才刚开始,后箋的\q长。论坛以后靠你们啦!扑֮工作了别忘了l你们的师弟师妹们多分n点经?/strong>Q?span class="Apple-converted-space">
]]>
*vector ,const char* c ,?&vector[0]卛_
*string Qstring.c_str()
17.使用“交换技?#8221;来修正过剩容?br />*vector<Contestant> vec(contestants).swap(contestants)
18.避免使用vector<bool>
两个问题
*它不是一个STL容器Q它q不容纳bool
如果C是一个Tcd的对象的容器Q且C支持operator[],那么以下代码必须能够通过~译
T* p= &c[0] //无论operator[]q回什么,都可以用q个地址初始化一个T*
但是vector<bool>中做了优化,里面存放的是bit?br />deque内部内存不是q箋的,但里面存的是bool?br />q有一个bitse可解册个问?/p>
19.了解相等和等L区别
*相等的概忉|Zoperator== ,{h的概念基于operator<
20.为指针的兌容器指定比较cd
兌容器?相同 的定义是{h
21.永远让比较函数对相等的D回false
22.避免原地修改set和multiset的键
条款10Q注意分配器的协定和U束
如果要自定义分配?br />*把你的分配器做成一个模板,带有模板参数TQ代表你要分配的内存的对象类?br />*提供pointer和reference的typedefQ但L让pointer是T* reference是T&
*通常Q分配器不能有非静态的数据成员
*记得应该传给分配器的allocate成员函数需要分配的对象个数而不是字节数Q也应该记得q些函数q回T*指针Q即时还没有T对象被构?br />*一定要提供标准容器依赖的内嵌rebind模板
条款12Q对STL容器U程安全性的期待现实一?/p>
条款六,警惕C++最令h恼怒的解析
int g( double pf() ) pf其实是一个指?br />int g( double() );同上Q函数名省略
int g( double x) == int g( double (x) )
条款七, 当时用new得指针的容器Ӟ记得在销毁容器前delete那些指针
*q样的代码造成内存泄露
最单的实现Ҏ?/p>
q样的问题是for循环代码多余for_eachQ但没有使用for_each单明?br />另一个问题是q段代码不是异常安全?/p>
z不考虑异常的方?/p>
条款?容器用empty来代替检查size()是否?
*理由很简单,对于所有的标准容器Qempty是一个常数时间的操作Q但对于一些List实现Qsize()pU性时?br />*list的sizepU性时间是因ؓZ让splice变ؓ常数旉Q这是一个让哪个函数实现最高效率的问题
所以对于所有容器来_用empty()而不是size()==0
要这么写
务器l构探讨 -- 最单的l构
所谓服务器l构Q也是如何服务器各部分合理地安排Q以实现最初的功能需求。所以,l构本无所谓正与错误Q当Ӟ优秀的结构更有助于系l的搭徏Q对pȝ的可扩展性及可维护性也有更大的帮助?span class="Apple-converted-space">
好的l构不是一y而就的,而且每个设计者心中的那把都不相同,所以这个优Ul构的定义也没有定论。在q里Q我们不打算对现有游戏结构做评hQ而是试着从头开始搭Z个我们需要的MMOGl构?span class="Apple-converted-space">
服务器公q件实?-- 环Ş~冲?/strong>
消息队列锁调用太频繁的问题算是解决了Q另一个让人有些苦恼的大概是这太多的内存分配和释放操作了。频J的内存分配不但增加了系l开销Q更使得内存片不断增多Q非怸利于我们的服务器长期E_q行。也许我们可以用内存池Q比如SGI STL中附带的内存分配器。但是对于这U按照严格的先进先出序处理的,块大ƈ不算的Q而且块大也q不l一的内存分配情冉|_更多使用的是一U叫做环形缓冲区的方案,mangos的网l代码中也有q么一个东西,其原理也是比较简单的?span class="Apple-converted-space">
好比两个h围着一张圆形的桌子在追逐,跑的|络IOU程所控制Q当写入数据Ӟq个人就往前跑Q追的h是逻辑U程Q会一直往前追直到q上跑的人。如果追上了怎么办?那就是没有数据可MQ先{会儿呗Q等跑的人向前跑几步了再q,M能让游戏没得玩了吧。那要是q的的太慢,跑的{了一圈过来反q上q的Z呢?那您也先歇会儿吧。要是一直这么反着q,估计您就只能换一个跑的更快的q逐者了Q要不这游戏q真没法玩下厅R?span class="Apple-converted-space">
前面我们特别了,按照严格的先q先出顺序进行处理,q是环Ş~冲区的使用必须遵守的一要求。也是Q大安得遵守规定,q的Z能从桌子上跨q去Q跑的h当然也不允许反过来跑。至于ؓ什么,不需要多做解释了吧?span class="Apple-converted-space">
环Ş~冲区是一很好的技术,不用频繁的分配内存,而且在大多数情况下,内存的反复用也使得我们能用更少的内存块做更多的事?span class="Apple-converted-space">
在网lIOU程中,我们会ؓ每一个连接都准备一个环形缓冲区Q用于时存放接收到的数据,以应付半包及_包的情c在解包及解密完成后Q我们会这个数据包复制到逻辑U程消息队列中,如果我们只用一个队列,那这里也会是个环Ş~冲区,IOU程往里写Q逻辑U程在后面读Q互相追逐。可要是我们使用了前面介l的优化Ҏ后,可能q里便不再需要环形缓冲区了,臛_我们q不再需要他们是环Ş的了。因为我们对同一个队列不再会出现同时d写的情况Q每个队列在写满后交l逻辑U程去读Q逻辑U程d后清I队列再交给IOU程dQ一D固定大的~冲区即可。没关系Q这么好的技术,在别的地方一定也会用到的?span class="Apple-converted-space">
服务器公q件实?-- 发包的方?/strong>
前面一直都在说接收数据时的处理ҎQ我们应该用专门的IOU程Q接收到完整的消息包后加入到ȝE的消息队列Q但是主U程如何发送数据还没有探讨q?span class="Apple-converted-space">
一般来说最直接的方法就是逻辑U程什么时候想发数据了q接调用相关的socket API发送,q要求服务器的玩家对象中保存其连接的socket句柄。但是直接send调用有时候有会存在一些问题,比如遇到pȝ的发送缓冲区满而阻塞住的情况,或者只发送了一部分数据的情况也时有发生。我们可以将要发送的数据先缓存一下,q样遇到未发送完的,在逻辑U程的下一ơ处理时可以接着再发送?span class="Apple-converted-space">
考虑数据~存的话Q那q里q可以有两种实现方式了,一是ؓ每个玩家准备一个缓冲区Q另外就是只有一个全局的缓冲区Q要发送的数据加入到全局~冲区的时候同时要指明q个数据是发到哪个socket的。如果用全局~冲区的话,那我们可以再q一步,使用一个独立的U程来处理数据发送,cM于逻辑U程Ҏ据的处理方式Q这个独立发送线E也l护一个消息队列,逻辑U程要发数据时也只是把数据加入到q个队列中,发送线E@环取包来执行send调用Q这时的d也就不会寚w辑U程有Q何媄响了?span class="Apple-converted-space">
采用W二U方式还可以附带一个优化方案。一般对于广播消息而言Q发送给周围玩家的数据都是完全相同的Q我们如果采用给每个玩家一个缓冲队列的方式Q这个数据包需要拷贝多份,而采用一个全局发送队列时Q我们只需要把q个消息入队一ơ,同时指明该消息包是要发送给哪些socket的即可。有兌优化的说明在云风描述其连接服务器实现的blog文章中也有讲刎ͼ有兴的可以去阅M下?span class="Apple-converted-space">
服务器公q件实?-- 状态机
有关State模式的设计意囑֏实现׃从设计模式中摘抄了,我们只来看看游戏服务器编E中如何使用State设计模式?span class="Apple-converted-space">
首先q是从mangos的代码开始看P我们注意到登录服在处理客L发来的消息时用到了这样一个结构体Q?span class="Apple-converted-space">
struct AuthHandler
{
eAuthCmd cmd;
uint32 status;
bool (AuthSocket::*handler)(void);
};
该结构体定义了每个消息码的处理函数及需要的状态标识,只有当前状态满求时才会调用指定的处理函敎ͼ否则q个消息码的出现是不合法的。这个status状态标识的定义是一个宏Q有两种有效的标识,STATUS_CONNECTED和STATUS_AUTHEDQ也是未认证通过和已认证通过。而这个状态标识的改变是在q行时进行的Q确切的说是在收到某个消息ƈ正确处理完后改变的?span class="Apple-converted-space">
我们再来看看设计模式中对State模式的说明,其中关于State模式适用情况里有一条,当操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态,q个状态通常用一个或多个枚D变量表示?span class="Apple-converted-space">
描述的情况与我们q里所要处理的情况是如此的怼Q也许我们可以试一试。那再看看State模式提供的解x案是怎样的,State模式每一个条件分支放入一个独立的cM?span class="Apple-converted-space">
׃q里的两个状态标识只区分Z两种状态,所以,我们仅需要两个独立的c,用以表示两种状态即可。然后,按照State模式的描qͼ我们q需要一个Contextc,也就是状态机理c,用以理当前的状态类。稍作整理,大概的代码会cMq样Q?span class="Apple-converted-space">
状态基cL口:
StateBase
{
void Enter() = 0;
void Leave() = 0;
void Process(Message* msg) = 0;
};
状态机基类接口Q?span class="Apple-converted-space">
MachineBase
{
void ChangeState(StateBase* state) = 0;
StateBase* m_curState;
};
我们的逻辑处理cM从MachineBasezQ当取出数据包后交给当前状态处理,前面描述的两个状态类从StateBasezQ每个状态类只处理该状态标识下需要处理的消息。当要进行状态{换时Q调用MachineBase的ChangeState()ҎQ显C地告诉状态机理c自p转到哪一个状态。所以,状态类内部需要保存状态机理cȝ指针Q这个可以在状态类初始化时传入。具体的实现l节׃做过多描qC?span class="Apple-converted-space">
使用状态机虽然避免了复杂的判断语句Q但也引入了新的ȝ。当我们在进行状态{换时Q可能会需要将一些现场数据从老状态对象{Ud新状态对象,q需要在定义接口时做一下考虑。如果不希望执行拯Q那么这里公有的现场数据也可攑ֈ状态机cMQ只是这样在使用时可能就不那么优雅了?span class="Apple-converted-space">
正如同在设计模式中所描述的,所有的模式都是已有问题的另一U解x案,也就是说qƈ不是唯一的解x案。放到我们今天讨论的State模式中,拿d服所处理的两个状态来_也许用mangos所采用的遍历处理函数的Ҏ可能更简单,但当pȝ中的状态数量增多,状态标识也变多的时候,State模式显得尤光要了?span class="Apple-converted-space">
比如在游戏服务器上玩家的状态管理,q有在实现NPC人工时的各种状态管理,q些q作以后的专题吧?span class="Apple-converted-space">
服务器公q?-- 事g与信?/strong>
关于q一节,q几天已l打了好几遍草稿Q总觉得说不清楚,也不好组l这些内容,但是打铁要趁热,为避免热情消退Q先整理一点东西放q,好l下面的主题Q以后如果有Z再回来完善吧。本节内Ҏ考虑Q希望大家多l点意见?span class="Apple-converted-space">
有些cM于QT中的event与signalQ我一些动作请求消息定义ؓ事gQ而将状态改变消息定义ؓ信号。比如在QT应用E序中,用户的一ơ鼠标点M产生一个鼠标点M件加入到事g队列中,当处理此事g时可能会D某个按钮控g产生一个clicked()信号?span class="Apple-converted-space">
对应到我们的服务器上的一个例子,玩家d时会发给服务器一个请求登录的数据包,服务器可其当作一个用L录事Ӟ该事件处理完后可能会产生一个用户已d信号?span class="Apple-converted-space">
q样Q与QTcMQ对于事件我们可以重定义其处理方法,甚至qo掉某些事件其不被处理,但对于信h们只是收C一个通知Q有些类gObserve模式中的观察者,当收到更新通知Ӟ我们只能更新自己的状态,对刚刚发生的事g我不已不能做M影响?span class="Apple-converted-space">
仔细来看Q事件与信号其实q无多大差别Q从我们对其需求上来说Q都只要能注册事件或信号响应函数Q在事g或信号生时能够被通知到即可。但有一区别在于,事g处理函数的返回值是有意义的Q我们要Ҏq个q回值来定是否q要l箋事g的处理,比如在QT中,事g处理函数如果q回trueQ则q个事g处理已完成,QApplication会接着处理下一个事Ӟ而如果返回falseQ那么事件分zևCl箋向上L下一个可以处理该事g的注册方法。信号处理函数的q回值对信号分派器来说是无意义的?span class="Apple-converted-space">
单点_是我们可以Z件定义过滤器Q得事件可以被qo。这一功能需求在游戏服务器上是到处存在的?span class="Apple-converted-space">
关于事g和信h制的实现Q网l上的开源训也比较多Q比如FastDelegateQsigslotQboost::signal{,其中sigslotq被Google采用Q在libjingle的代码中我们可以看到他是如何被用的?span class="Apple-converted-space">
在实C件和信号机制时或许可以考虑用同一套实玎ͼ在前面我们就分析q,两者唯一的区别仅在于q回值的处理上?span class="Apple-converted-space">
另外q有一个需要我们关注的问题是事件和信号处理时的优先U问题。在QT中,事g因ؓ都是与窗口相关的Q所以事件回调时都是从当前窗口开始,一U一U向上派发,直到有一个窗口返回trueQ截断了事g的处理ؓ止。对于信L处理则比较简单,默认是没有顺序的Q如果需要明的序Q可以在信号注册时显C地指明槽的位置?span class="Apple-converted-space">
在我们的需求中Q因为没有窗口的概念Q事件的处理也与信号cMQ对注册q的处理器要按某个顺序依ơ回调,所以优先的设|功能是需要的?span class="Apple-converted-space">
最后需要我们考虑的是事g和信L处理方式。在QT中,事g使用了一个事仉列来l护Q如果事件的处理中又产生了新的事Ӟ那么新的事g会加入到队列,直到当前事g处理完毕后,QApplication再去队列头取下一个事件来处理。而信L处理方式有些不同Q信号处理是立即回调的,也就是一个信号生后Q他上面所注册的所有槽都会立即被回调。这样就会生一个递归调用的问题,比如某个信号处理器中又生了一个信P会得信L处理像一|一L展开。我们需要注意的一个很重要的问题是会不会引起@环调用?span class="Apple-converted-space">
关于事g机制的考虑其实q很多,但都是一些不成熟的想法。在上面的文字中同时出C消息、事件和信号三个相近的概念,而在实际处理中,l常发现三者不知道如何界定的情况,实际的情冉|我在q里描述的要混ؕ的多?span class="Apple-converted-space">
q里也就当是挖下一个坑Q希望能够有所交流?span class="Apple-converted-space">
再谈d服的实现
L们的d服实现已l太q了Q先拉回来一下?span class="Apple-converted-space">
关于d服、大区服及游戏世界服的结构之前已做过探讨Q这里再把各自的职责和关pd一下?span class="Apple-converted-space">
GateWay/WorldServer GateWay/WodlServer LoginServer LoginServer DNSServer WorldServerMgr
| | | | |
---------------------------------------------------------------------------------------------
| | |
internet
|
clients
其中DNSServer负责带负载均衡的域名解析服务Q返回LoginServer的IP地址l客L。WorldServerMgrl护当前大区内的世界服列表,LoginServer会从q里取世界列表发l客L。LoginServer处理玩家的登录及世界服选择h。GateWay/WorldServer为各个独立的世界服或者通过|关q接到后面的世界服?span class="Apple-converted-space">
在mangos的代码中Q我们注意到d服是从数据库中取的世界列表,而在wow官方服务器中Q我们却会注意到Q这个世界服列表q不是一开始就固定Q而是动态生成的。当每周一ơ的l护完成之后Q我们可以很明显的看到这个列表生成的q程。刚开始时Q世界列表是I的Q慢慢的Q世界服会一个个加入q来Q而这里如果有世界服当机,他会昄为离U,不会从列表中删除。但是当下一ơ服务器再维护后Q所有的世界服都不存在了Q全部重新开始添加?span class="Apple-converted-space">
从上面的q程描述中,我们很容易想到利用一个时的列表来保存世界服信息Q这也是我们增加WorldServerMgr服务器的目的所在。GateWay/WorldServer在启动时会自动向WorldServerMgr注册自己Q这样就把自己所代表的游戏世界添加到世界列表中了。类似的Q如果DNSServer也可以让LoginServer自己L册,q样在时LoginServer时就不需要去改动DNSServer的配|文件了?span class="Apple-converted-space">
WorldServerMgr内部的实现很单,监听一个固定的端口Q接受来自WorldServer的主动连接,q检其状态。这里可以用一个心跛_来实现其状态的,如果WorldServer的连接断开或者在规定旉内未收到心蟩包,则将其状态更Cؓȝ。另外WorldServerMgrq处理来自LoginServer的列表请求。由于世界列表ƈ不常变化Q所以LoginServer没有必要每次发送世界列表时都到WorldServerMgr上去取,LoginServer完全可以自己l护一个列表,当WorldServerMgr上的列表发生变化ӞWorldServerMgr会主动通知所有的LoginServer也更C下自q列表。这个或许就可以用前面描q过的事件方式,或者就是观察者模式了?span class="Apple-converted-space">
WorldServerMgr实现所要考虑的内容就q些Q我们再来看看LoginServerQ这才是我们今天要重点讨论的对象?span class="Apple-converted-space">
前面探讨一些服务器公共lgQ那我们q里也应该试用一下,不能只是停留在理Z。先从状态机开始,前面也说q了Q登录服上的q接会有两种状态,一是帐号密码验证状态,一是服务器列表选择状态,其实q有另外一个状态我们未曾讨Q因为它与我们的dq程q无多大关系Q这是升包发送状态。三个状态的转换程大致为:
LogonState -- 验证成功 -- 版本?-- 版本低于最新?-- 转到UpdateState
|
-- 版本{于最新?-- 转到WorldState
q个版本查的和决定下一个状态的q程是在LogonState中进行的Q下一个状态的选择是由当前状态来军_。密码验证的q程使用了SRP6协议Q具体过E就不多做描qͼ每个游戏使用的方式也都不大一栗而版本检查的q程更无值得探讨的东西,一个if-else卛_?br />
升状态其实就是文件传输过E,文g发送完毕后通知客户端开始执行升U文件ƈ关闭q接。世界选择状态则提供了一个列表给客户端,其中包括了所有游戏世界网x务器的IP、PORT和当前负载情c如果客L一直连接着Q则该状态会以每5U一ơ的频率不停h列表l客LQ当然是否值得q样做还是有待商榗?span class="Apple-converted-space">
整个q程g都没有值得探讨的内容,但是Q还没有完。当客户端选择了一个世界之后该怎么办?wow的做法是Q当客户端选择一个游戏世界时Q客L会主动去q接该世界服的IP和PORTQ然后进入这个游戏世界。与此同Ӟ与登录服的连接还没有断开Q直到客L实q接上了选定的世界服q且走完了排队过Eؓ止。这是一个很必要的设计,保证了我们在因意外情况连接不上世界服或者发C界服正在排队而想换另外一个试试时不会需要重新进行密码验证?span class="Apple-converted-space">
但是我们所要关注的q不是这些,而是客户端去q接游戏世界的网x时服务器该如何识别我们。打个比方,有个不自觉的玩家不遵守游戏规则,没有去验证帐号密码就直接跑去q接世界服了Q就如同一个不自觉的乘客没有换L牌就直接跑到L口一栗这Ӟ乘务员会客气地告诉你要先换登机牌Q那L牌又从哪来?口换的Qh家会先验明你的n份,认后才会发l你L牌。一L处理q程Q我们的d服在验明客户端n份后Q也会发l客L一个登机牌Q这个登机牌q有一个学名,叫做session key?span class="Apple-converted-space">
客户端拿着q个session keyM界服|关处就可正登录了吗?gq是有个疑问Q他怎么知道我这个key是不是造假的?没办法,中国的假货太多,我们不得不到处都考虑假货的问题。方法很单,Ll他L牌的那个员问一下,q张牌是不是他发的不得了。可是,那么多的LoginServerQ要一个个问下来,q效率也太低了,后面排的镉K一定会开始叫唤了。那么,LoginServer这个key存到数据库中Q让|关服自己去数据库验证?g也是个可行的Ҏ?span class="Apple-converted-space">
如果觉得q样l数据库带来了太大的压力的话Q也可以考虑cMWorldServerMgr的做法,用一个时的列表来保存,甚至可以这个列表就保存到WorldServerMgr上,他正好是全区唯一的。这两种Ҏ的本质ƈ无差别,只是看你愿意负载放在哪里。而不在哪里Q这个查询的压力都是有点大的Q想惻I全区所有玩家呢。所以,我们也可以试着考虑一U新的方案,一U不需要去全区唯一一个入口查询的Ҏ?span class="Apple-converted-space">
那我们将q些session key分开存储不就得了。一个可行的Ҏ是,让Q意时d有一个地方保存一个客L的session keyQ这个地方可能是客户端当前正q接着的服务器Q也可以是它正要去连接的服务器。让我们来详l描qC下这个过E,客户端在LoginServer上验证通过ӞLoginServer为其生成了本ơ会话的session keyQ但只是保存在当前的LoginServer上,不会存数据库Q也不会发送给WorldServerMgr。如果客Lq时惌L个游戏世界,那么他必d通知当前q接的LoginServer要去的服务器地址QLoginServersession key安全转移l目标服务器Q{Uȝ意思是要确保目标服务器收到了session keyQ本C存的要删除掉。{UL功后LoginServer通知客户端再去连接目标服务器Q这时目标服务器在验证session key合法性的时候就不需要去别处查询了,只在本地保存的session key列表中查询即可?span class="Apple-converted-space">
当然了,Zsession key的安全,所有的服务器在收到一个新的session key后都会ؓ其设一个有效期Q在有效期过后还没来认证的,则该session key会被自动删除。同Ӟ所有服务器上的session key在连接关闭后一定会被删除,保证一个session key真正只ؓ一ơ连接会话服务?span class="Apple-converted-space">
但是Q很昄的,wowq没有采用这U方案,因ؓ客户端在选择世界服时q没有向服务器发送要求确认的消息。wow中的session key应该是保存在一个类gWorldServerMgr的地方,或者如mangos一P是保存在了数据库中。不是怎样一U方式,了解了其q程Q代码实现都是比较简单的Q我们就不再赘述了?span class="Apple-converted-space">
1、倒{单链?/p>
非递归?/p>
递归?/p>
2、找出倒数Wk个元?或中间元素)Q设|快慢指?br />
3、删除环状单链表的一个节点,只给定指向要删除节点的指?/p>
思\Q无法获取前一个指针,那么可删除下一个节点,交换当前节点和下一个节点的值即?br />
4、两个有序链表的合ƈ
归ƈ卛_
5、判断单链表是否有环Q环首?
是否有环Q快慢指针,如果盔RQ说明存在环
环首Q可先求出环ѝ一个圆内的q及问题Q两ơ相遇时慢指针走q的距离即环长;
此时假设慢指针已Ci步,则快指针已走?i步;两个指针同时倒退i步的位置Q慢指针退到链首,快指针退到i处,则从q两个位|vQ指针各走i步既能在环内盔R?/p>
于是可设|两个指针,一个在N处,一个在i处,步长?Q第一ơ相遇的节点即ؓ环首的位|?/p>
6、如何判断两个链表是否交叉?如果扑ֈ交叉点?
思\?