正文
javanosql面试,nosql面试题
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
java面试中redis,mongodb类的,会问哪些问题,怎么回答
1、可能会问nosql和关系型数据库的区别:
优点:
1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用Oracle那样花费大量成本购买使用,相比关系型数据库价格便宜
2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库
3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型
4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难
缺点:
1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本
3)不提供关系型数据库对事物的处理
2、介绍下redis和mongodb:
自行google。
3、应用场景:
redis:
a.主要是做热点数据缓存。
b.数据过期处理。
c.消息队列等功能。
d.计数,例如投票等。
mongodb:
mongodb的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。mongo适用于以下场景:
a.网站数据:mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
b.缓存:由于性能很高,mongo也适合作为信息基础设施的缓存层。在系统重启之后,由mongo搭建的持久化缓存可以避免下层的数据源过载。
c.大尺寸、低价值的数据:使用传统的关系数据库存储一些数据时可能会比较贵,在此之前,很多程序员往往会选择传统的文件进行存储。
d.高伸缩性的场景:mongo非常适合由数十或者数百台服务器组成的数据库。
e.用于对象及JSON数据的存储:mongo的BSON数据格式非常适合文档格式化的存储及查询。
4、支持的数据类型:
内容比较多,自行将网上的信息整理一下。
java去公司工作用到的是哪方面的知识?
小公司做小项目一般都用SSH+jsp大公司做项目都是根据不同的项目 采取不同的框架技术,比如银行大部分都用 EJB等
第一:先学习Java的核心库(JavaSE)
JavaSE的内容包括:环境搭建、基础语法、面向对象、数组、集合、常用类、IO流、反射机制、网络编程……..
第二:MySQL数据库
搞定一门数据库相关的课程,例如:MySQL、Oracle,搞定一个就可以了,目前互联网公司,例如:京东、阿里等,他们都在使用MySQL,所以建议大家学习MySQL数据库,小巧轻盈,免费,由于互联网公司的项目访问量比较大,所以一般会搭建数据库的集群,可以一个数据库不够,所以需要搭建数据库集群,为了应付高并发。(搭建的比较多的时候,免费就很重要了。)
第三:WEB前端
以后从事Java开发,从事JavaEE开发,主要开发的系统结构是B/S结构的,B指的是Browser,S指的是Server。要开发这种系统,B端要会,S端也要精通。WEB前端的学习就是学习B端技术。包括:HTML 、CSS、JavaScript(JS)、jQuery框架(底层对JS进行了封装)…
第四:WEB后端(JavaWEB)
WEB后端其实可以是很多种不同的编程语言,例如:PHP、C、C++、Java,他们都可以进行WEB后端的开发,我们既然选择了比较火爆的Java,那么我们学习的后端一定是基于Java语言实现的,包括:Servlet、Filter、Jsp、EL、JSTL、MVC架构模式、数据库连接池(阿里巴巴的Druid连接池)、代理模式(动态代理)。另外后端学习了之后,还要学习一个异步编程技术AJAX。(完成网页的局部刷新,AJAX其实不属于后端,是前端浏览器上的程序。)
学习到这里为止,表示Java基本/基础的技术已经学完了。但是这些最基层的技术在实际的开发中不会使用的,一般为了开发效率,都会使用大量的提前封装好的框架。
第五:最好能够停留下来,做一个项目。
这个项目最好能将之前所学全部串起来。(对以前的知识点进行巩固。)
这个项目最好是基于:Servlet + Jsp+AJAX+jQuery+MySQL….
在这个项目的开发过程中:大家一定要记住,目前比较好的项目自动构建工具:Maven是一定要精通的。还有一个就是团队协作开发:Git/SVN是一定要会用的。(目前使用Git比较多一些。)
第六:学习高级框架
Spring、SpringMVC、MyBatis(持久层框架,这个框架互联网公司使用比较多,因为互联网项目需要进行SQL优化,MyBatis的SQL优化很方便,所以大部分都是使用MyBatis)
Struts2(很少使用了,使用这个的肯定是很老的项目)、Hibernate(传统企业,还有政府等可能会使用Hibernate。)
SpringBoot(新项目大部分使用的都是boot了。所以在项目中遇到还在使用SSM的一般都是遗留项目。)
当你走到这里之后,基本上你可以出山了。(去找工作,8K的薪资应该问题不大,但前提是你学的好。学习的深度够了,广度够了。)
第七:最好能有一个大型项目是使用框架来完成的。
SpringBoot做一个项目。
Spring SpringMVC MyBatis做一个项目。
这个项目最好是找几个人搭伙做一下。体验一下团队协作。(尤其是使用一些协作的工具。怎么沟通,怎么写日报,怎么开会,怎么使用Git,等等….)
第八:如果你的薪资想达到15K的话,你可能需要还要学习一些分布式相关的一些技术。
能够应付高并发的一些技术,例如:分布式框架Dubbo、SpringCloud、MQ、Nginx、Redis…..
java的知识体系构架
....祝 工作顺心 哈哈
java工程师面试时最看重的是什么?
一、专业技能
熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的JavaAPI,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。
熟悉基于JSP和Servlet的JavaWeb开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行JavaWeb项目开发经验。
对Spring的IoC容器和AOP原理有深入了解,熟练的运用Spring框架管理各种Web组件及其依赖关系,熟练的使用Spring进行事务、日志、安全性等的管理,有使用SpringMVC作为表示层技术以及使用Spring提供的持久化支持进行Web项目开发的经验,熟悉Spring对其他框架的整合。
熟练的使用Hibernate、MyBatis等ORM框架,熟悉Hibernate和MyBatis的核心API,对Hibernate的关联映射、继承映射、组件映射、缓存机制、事务管理以及性能调优等有深入的理解。
熟练的使用HTML、CSS和JavaScript进行Web前端开发,熟悉jQuery和Bootstrap,对Ajax技术在Web项目中的应用有深入理解,有使用前端MVC框架(AngularJS)和JavaScript模板引擎(HandleBars)进行项目开发的经验。
熟悉常用的关系型数据库产品(MySQL、Oracle),熟练的使用SQL和PL/SQL进行数据库编程。
熟悉面向对象的设计原则,对GoF设计模式和企业应用架构模式有深入的了解和实际开发的相关经验,熟练的使用UML进行面向对象的分析和设计,有TDD(测试驱动开发)和DDD(领域驱动设计)的经验。
熟悉Apache、NginX、Tomcat、WildFly、Weblogic等Web服务器和应用服务器的使用,熟悉多种服务器整合、集群和负载均衡的配置。
熟练的使用产品原型工具Axure,熟练的使用设计建模工具PowerDesigner和Enterprise Architect,熟练的使用Java开发环境Eclipse和IntelliJ,熟练的使用前端开发环境WebStorm,熟练的使用软件版本控制工具SVN和Git,熟练的使用项目构建和管理工具Maven和Gradle。
说明: 上面罗列的这些东西并不是每一项你都要烂熟于心,根据企业招聘的具体要求可以做相应的有针对性的准备。但是前6项应该是最低要求,是作为一个Java软件工程师必须要具备的专业技能。
二、项目经验
项目介绍
本系统是X委托Y开发的用于Z的系统,系统包括A、B、C、D等模块。系统使用了Java企业级开发的开源框架E以及前端技术F。表示层运用了G架构,使用H作为视图I作为控制器并实现了REST风格的请求;业务逻辑层运用了J模式,并通过K实现事务、日志和安全性等功能,通过L实现缓存服务;持久层使用了M封装CRUD操作,底层使用N实现数据存取。整个项目采用了P开发模型。 说明: E通常指spring(Java企业级开发的一站式选择); F最有可能是jQuery库及其插件或者是Bootstrap框架,当然如果要构建单页应用(SPA)最佳的方案是前端MVC框架(如AngularJS)和JavaScript模板引擎(如HandleBars);G显然是MVC(模型-视图-控制),最有可能的实现框架是spring MVC,除此之外还有Struts 2、JSF以及Apache为JSF提供的MyFaces实现; H是JSP,JSP作为MVC中的V,也可使用模板引擎(如Freemarker和Velocity)来生成视图还可以是各种文档或报表(如Excel和PDF等); I是Servlet或者自定义的控制器,他们是MVC中的C,当然Spring MVC中提供了作为前端控制器的DispatcherServlet; J通常是事务脚本; K应该是AOP(面向切面编程)技术; L目前广泛使用的有memcached和Redis; M的选择方案很多,最有可能的是hibernate和MyBatis,也可以两种技术同时运用,但通常是将增删改交给hibernate来处理,而复杂的查询则由MyBatis完成,此外TopLink、jOOQ也是优秀的持久层解决方案; N底层的数据存取传统上是使用关系型数据库,可以是MySQL、Oracle、SQLServer、DB2等,随着大数据时代的来临,也可以采用NoSQL(如MongoDB、MemBase、BigTable等)和其他大数据存取方案(如GFS、HDFS等); P是项目的开发模型,可以是瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、RAD模型等。
项目开发流程
1、可行性分析:可行性分析报告、项目开发计划书;
2、需求分析:需求规格说明书OOAD(用例图、时序图、活动图);
界面原型:帮助理解需求、业务层设计时推导事务脚本;
3、设计:概要设计说明书、详细设计说明书;
*抽取业务实体(领域对象):类图、E-R图(概念设计阶段);
分层架构:确定各层的技术实现方案(具体到使用的框架、数据库服务器、应用服务器等);
*业务层设计:事务脚本模式(事务:用户发送一次请求就是一个事务;
脚本:一个方法或一个函数;
*事务脚本:把一次请求封装为一个方法或一个函数;事务脚本模式:一个事务开始于脚本的打开,终止于脚本的关闭);
*业务层涉及的对象有三种类型:事务脚本类(封装了业务的流程)、数据访问对象(DAO,封装了持久化操作)、数据传输对象(DTO,封装了失血/贫血领域对象),三者之间的关系是事务脚本类组合(聚合)数据访问对象,这二者都依赖了数据传输对象正向工程(UML类图生成Java代码)和逆向工程(Java代码生成UML类图)数据库物理设计(ER图转换成表间关系图、建库和建表、使用工具插入测试数据);
3、编码;
4、测试:测试报告、缺陷报告;
*单元测试:对软件中的最小可测试单元进行检查和验证,在Java中是对类中的方法进行测试,可以使用JUnit工具来实施;
*集成测试:集成测试也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求组装成为子系统进行测试;
*系统测试:将已经确认的软件、硬件、外设、网络等元素结合在一起,进行信息系统的各种组装测试和确认测试,系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,从而提出更加完善的方案;
*验收测试:在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务;
5、交付和维护:用户手册、操作手册;
三、项目管理
版本控制:CVS/SVN/Git
自动构建:Ant/Maven/Ivy/Gradle
持续集成:Hudson/Jenkins
四、系统架构
负载均衡服务器:F5、A10;
应用服务器: HTTP服务器:Apache、NginX(HTTP、反向代理、邮件代理服务器);
Servlet容器:Tomcat、Resin
EJB容器:WildFly(JBoss Application Server)、GlassFish、Weblogic、Websphere;
数据库服务器:MySQL、Eclipse、Oracle;
五、第三方工具(插件)应用
图表工具:基于jQuery的图表插件(如jQchart、Flot、Charted等)、Chart.js、Highcharts等。
报表工具:Pentaho Reporting、iReport、DynamicReports等。
文档处理:POI、iText等。
工作流引擎:jBPM、OpenWFE、Snaker、SWAMP等。
作业调度:Quartz、JobServer、Oddjob等。
缓存服务:EhCache、memcached、SwarmCache等。
消息队列:Open-MQ、ZeroMQ、ActiveMQ等。
安全框架:Shiro、PicketBox等。
搜索引擎:IndexTank、Lucene、ElasticSearch等。
Ajax框架:jQuery、ExtJS、DWR等。
UI插件:EasyUI、MiniUI等。
富文本框:UEditor、CKEditor等。
六、面试提问
项目是为哪个公司开发的?项目的投入是多少?
有多少人参与了项目开发?整个团队中,测试人员、开发人员、项目经理比例是多少?
项目开发了多长时间?项目总的代码量有多少?你的代码量有多少?
项目采用了怎样的开发模型或开发流程?项目的架构是怎样的?项目的技术选型是怎样的?
你在项目中担了怎样的职责?是否经常开会或加班?项目完成后有哪些收获或是经验教训?
项目中最困难的部分是什么?如何解决团队开发时遇到的各种冲突?
七、面试时可以反问面试官的问题
我注意到你们使用了X技术,请问你们是如何解决Y问题的?
为什么你们的产品使用了X技术而不是Y技术?据我所知,X技术虽然有A、B、C等好处,但也存在D和E问题,而Y技术可以解决D和E问题。
我对您说的X技术不是太熟悉,但我感觉它是一个不错的解决方案,您能多讲讲它的工作原理吗?
你们团队是如何进行项目规划的?一周会有几次例会?每周的代码量大概是多少?
就X问题我能想到的解决方案目前就只有Y了,请问您会怎么解决这个问题?
八、S.A.R.法则
S.A.R法则是指先描述问题的场景,然后解释你采取的行动,最后陈述结果。
九、面谈原则
声音适中、口齿清楚、面带微笑、个人形象精神,讲礼貌。
主动跟面试官聊他感兴趣的话题,让面试官满意。
主动的大胆的跟面试官聊自己熟悉有经验的内容:项目、技术点等,做到扬长避短。
一定要表达自己非常想得到这个岗位,自己很愿意学习不懂的技术。
根据自己的实际水平提出合理的待遇要求。
十、自我评价
学习能力(搞IT行业的人需要不断的了解新的技术、工具和方法)
团队意识(相比个人英雄主义,IT行业更倡导团队合作)
抗压能力(很多IT企业的工作强度相对来说还是比较大的)
java游戏服务器开发有前途吗
最近刚跳槽,到新公司已经干了有两周时间了,这两周时间是过得比较充实的,因为这家新公司是个小公司,以前以单机开发为主,服务器方面我一个人,做两个游戏的服务器开发工作,当然,一个很简单,另一个就相对复杂点,简单的那个是个弱联网游戏,服务器只需要做好数据存档和登录支付验证就好了,而另一个,则是相对复杂的slg游戏,我感觉这是又一款cok,而公司目前并不打算再招服务器了,所以估计这个项目我会一个人干到明年吧,等第一款上线赚钱了,可能会再招服务器。老实说,面试的时候,我就觉得这份工作对我而言是一个挑战,而当我清楚的了解了公司状况之后,我依然决定接受这个挑战。
说说我之前的经历吧,大四的时候,学校安排来北京培训java(培训没什么丢脸的,出来找工作我也用的真学历真背景,不像某峰互联),之后我去了培训机构推荐的公司实习,那个时候,工资2k,然而工作也干得很开心,跟着前辈学到了不少东西,当时是做微信公众号开发的,我跟着前辈做微信后台开发,当时使用SpringMVC+MyBatis框架,刚接触的时候,我自己学了挺久才弄明白,后来弄明白之后想想,其实挺简单,对于逻辑开发的程序员来说,你只需要弄懂工作流程就好了,页面怎么跳转,跳转怎么传值,数据怎么处理,这些足够了,当然我是个不满足的人,我会去弄明白,为什么用这个框架、为什么不用别的、用这个有什么好处、如果让我自己来做这个后台、我会怎么搭建?带着这些问题,我会试着自己搭建一下后台框架(虽然前期大部分是复制粘贴)。除了框架部分,微信高级接口也是我研究的重点,我会去官方文档看看微信是怎么接入的,然后研究研究前辈的代码是怎么写的,所谓的干一行爱一行大概就是这样吧,当时我觉得,微信开发,是很有前途的,而我们公司用的框架,也是最先进的(后来看来,确实这个框架组合是当前最流行的框架,而当时,微信公众号也确实是当时互联网行业的一个风口,微信后来把h5带起来了,导致现在一个好的h5前端都是供不应求的,薪资很高)。
说了这么多,为什么后来又转行做游戏了呢?其实是这样的,当时在第一家公司,我的上级打算跳槽走了,带走整个下面的技术,而不带实习生,有那么一两个月,实习生就一直闲着没事做,对于我来说,这样过着就太无聊了,我喜欢挑战,于是我投简历,重新找了份实习工作,在一个游戏公司做java服务器开发,公司挺大的,几年前凭借一款slg页游称霸游戏行业(什么游戏我就不说了,说了就知道什么公司了),后来游戏行业往手游发展,这款slg也出了手游版,这一款游戏,几乎支撑了整个公司,再加上后来出的几款手游,公司发展挺好的,我所实习的部门做的是一款mmorpg手游,从实习做到了转正,做了近一年了,然而这款rpg手游的数据却不是太好,第一次封测次日留存23,第二次26(现在这家公司的游戏能达到80多次日留存),七日就更不用说了,而我也能感觉到,作为一款mmo游戏,玩家之间的交互实在太少,从头玩下来,我觉得这是一款单机,失去了mmo的本质,在项目组准备进行第三次封测的时候,我选择了离开,原因很多,不仅仅因为游戏数据不好,也有一些个人原因吧,不过说实话,是这家公司带我走进了游戏行业,我很感谢,我觉得游戏行业是一个非常有前景的行业,甚至比之前我认为最好的微信开发还要好,游戏行业非常暴利,在这家公司工作就能感受到,策划文档中,充满了挖坑预留的计费点,这一块可以正常玩儿,但你如果充钱,你就比别人牛逼。网络游戏,最重要的,就是控制好平民玩家跟普通玩家的占比以及游戏平衡(当意识到公司的游戏如此处心积虑想要坑钱的时候,我突然明白为什么公司的游戏大多被腾讯代理了,为什么腾讯控股,原来如此,没钱玩儿你**,哈哈)。由此也可以看出,游戏的商业化,已经把游戏公司带入了一个固定的模式——无条件坑钱,我觉得已经失去了游戏的本质,我看过一本书,叫《游戏人生》(当时在cocos2014年开发者大会上买的。觉得挺值的),书已经送人了,但内容我看了一大半,从游戏的产生,到玩家的心理,到为什么需要游戏,这本书都诠释的热别好(我觉得游戏策划都应该看看这本书,做良心游戏,拒绝一味坑钱)。啊,突然发现这一段说的有点偏了,说到底,我也只是做游戏服务器开发的,我也改变不了游戏行业,我只要做好我做的。其实大的游戏公司,就应该走这种商业化路线,凭借几款长生命周期的游戏,支撑公司流水。
从转行做游戏之后,我倒是觉得,游戏开发比web开发有趣多了,当然技术上也比web难多了,之前发过一篇讨论,web开发何和游戏开发的区别,,我把我的答案再粘贴一遍(实际上是别人要求我上他的号去回答的,于是我就自己回答了我自己的问题):
1.从第三方支持来说,web后台有很多成熟的第三方框架,开发者不需要关心底层控制器跳转的实现,只需要一个或几个配置文件,就能完成核心控制器的部分,而开发者只需要关注web自身的业务逻辑,将逻辑与框架融合即可,使用框架一方面简化控制层代码,一方面很好的实现了业务逻辑的分层。而游戏后台开发中,因为各种游戏的需求差异性很大,从网络层,到业务逻辑层,各方面都必须根据自己游戏需求搭建适合自己的框架,因此很难有一些通用的东西能提炼出来一款成熟的框架,游戏后台开发基本上需要自己搭建适合自己的框架。
2.从业务逻辑层面来说,web后台基本上逻辑都是大同小异的,或许这一套系统,稍微改改,另一套系统就能用,而游戏就不同了,每个游戏都有自己的特色,根据策划的不同需求而实现不同的逻辑,不过也会有一些通用的模块,但整体上差异性还是很大的。
3.从数据持久化来说,web的数据基本上是很规整的,表与表之间关系很明确,并且以后也不会有太大的变化,而游戏中的数据多种多样,随着开服之后,数据的变化也是多种多样,甚至传统的关系型数据库根本无法满足游戏数据持久化的需求,游戏中有很多状态和数据是需要服务器来保存的,我个人认为,在游戏开发中,nosql比关系型数据库更实用。
4.从通信层来说,web中的用户都是一个个独立的个体,而游戏中是多人在线的一个游戏世界,在这个游戏世界中,玩家与玩家之间需要进行交互,这就需要服务器实时的向所有在线玩家进行消息广播,这一点很损耗服务器性能的,在这方面,游戏后台要比web做更多的处理,游戏服务器是一个IO密集的服务器类型。
以上便是我当时的答案,或许我的见解尚浅,毕竟我做游戏不到一年,不过对于后台开发这块,我还是有一点话语权的,从实习游戏开发开始,我便经历了一个转换的过程,几乎又是一个从零开始的学习过程,从mina框架到protobuffer,这些东西,我相信web开发很少接触(mina作为网络通信框架,web中几乎只有http通信,protobuffer作为通信协议,web最多用json,其实二者形式上差别不大,但数据大小千差万别)。而游戏的逻辑,也是比web复杂得多,不得不说,web后台成熟的第三方框架是做的真的很好。
经历了上家公司的洗礼,我想我对游戏后台开发有了足够的了解,于是我找到了我现在这家公司,这家公司目前只有我一个服务器后台,做两款游戏,一款是塔防类,准备由单机改成弱联网,服务器存档,并做登录支付验证,另一款,是比较庞大的slg手游,是准备带领公司走上巅峰的项目,说一款slg带领一个公司走上巅峰一点儿不为过,我上家公司就是这样的,凭借一款《xxxx》(哈哈,名字不透露),走上人生巅峰。我之所以接受这份工作,是因为我接受挑战,从底层写起,从架构写起,这是作为一年工作经验的我想都不敢想的,不过这是一个挑战自我,证明自我的机会,我愿意接受这个挑战,人生总会有很多爬坑的时候,但爬过了坑,就真的是人生巅峰了。我接受这个工作的另一个原因,就是公司发展确实不错,以前做的单机,都是很火的(虽然我认为我自己一个人也能做,我也是学过cocos的),而现在公司也准确的把握了游戏行业的风口——slg,coc和cok的成功案例就能证明一切,mmorpg也不一定能做起来了,moba倒是有可能,但你要跟lol做不到80%的相似,我估计没人愿意在手机玩儿moba,slg或许是性价比最高的了。这么有挑战的工作,还要从架构写起,这样的挑战,我喜欢!
说说互联网业的书吧,我认为这个行业的书,分为两种,理论型的和技术型的,所谓理论型,就是长篇大论互联网发展,行业模式等,而技术型,就是类似技术的工具书,是从技能入手的书,这两种书,我家里都有,但我发现买了之后,我很少有时间看,下班没多少时间,北京上班,大多数时间都浪费在地铁上了,上班时间,看看理论型的吧,觉得啰嗦,浪费时间(后来我发现,做这行,除了会技术,你还是需要去看看牛人眼中的互联网的,你需要透过前辈的眼光看世界,不要做IT民工,要做互联网从业者),看看技术型的吧,让别人看见了感觉你太low,所以我大多数时间还是能在网上down到pdf就在电脑看,down不到百度谷歌我要研究的技术,毕竟从事这行,还是用电脑学技术好点,主要是电脑看久了眼睛会疲惫,偶尔看看纸质的书也不错的。而以前面试的时候,面试官经常问,除了大学课本,你还看什么书啊?(如果是你们,恰巧又没看什么书,你们怎么说?),我一般会说,我会自学其他技术,如cocos2dx,然后买一些技术指南之类的书看。我觉得这已经算最大夸张化了,因为大学我真的很少看书,我记忆中就看过一本C++技术类的,一本C#的,一本Android,还有其他几本是什么都不大记得了,大学毕竟十几层的图书馆,除了英语四六级的时候进去复习,其他时间感觉都浪费了这十几层的图书馆。
说说成长过程中遇到的问题吧,如果遇到我解决不了的,以前是先自己百度谷歌,看看有没有办法解决,不行就问老大,而现在,先百度谷歌,看有没有办法解决,没办法在百度谷歌,实在不行还要看框架源码如何实现,上国外论坛看外国友人如何解决,问题总能解决的,总会有办法的。当我开始学习写架构的时候,我会开始关心游戏的网络层使用什么框架,mina还是netty,数据怎么存储mysql还是mongo,是否需要缓存redis存什么,memcached存什么,缓存什么数据,数据传输用什么协议,json还是protobuffer,怎么写效率高,最高支持多少并发等等,我想这些都是我现在需要考虑的问题,当然这些都需要根据游戏具体的需求来决定的,最终服务器能否高效稳定的运行,都是取决于我的架构是否高效稳定,所以这个过程我要不断学习,不断吸取别人的经验。刚到新公司的时候,我才体会到,自己写代码其实也是一种挑战,整个后端我自己一个人实现,代码是否规范,数据如何存储,都是我说了算,我想我的代码不仅要高效,还要让别人看得懂,后来的人能接着我的代码继续写下去。
最后说说Java的题外话,语言之争,从未停过,为什么有人拥护Java,有人拥护PHP,有人喜欢C#,有人喜欢C++,各个语言各有各的优势,业余时间,我也了解了不少其他语言,go,node.js我都有了解,我觉得go的语言层面支持协程并发以及node.js的异步,都是很适合游戏服务器的,我特别看好node.js,异步io真的是对游戏服务器很好的特性,并且加入对原声js支持的mongo模块也是很方便的(上面我有说到,我相信nosql是很适合存储游戏数据的)。说到游戏行业,我认为h5游戏的发展也是越来越快了,上次白鹭的h5开发者生态大会我去了,白鹭的一整套工作流程,以及web vr,真的很令人兴奋(第一轮抽奖我还抽了一个暴风魔镜,哈哈!),另外,大会的模特挺漂亮,哈哈!2015年,互联网行业也略呈下降趋势了,不少创业公司面临倒闭,泡沫经济破灭,因为很多老板抓不住当前经济形势,以为不管是啥,有个app就是创业了,其实全然不知一款app后面有多少运营模式、盈利模式,就像一句讽刺的话,“我有个绝壁好的idea,可以颠覆bat,什么都不缺,就缺个程序员了,等等,千万别告诉马云!”,哈哈,听到这句话,当时我就笑了,估计好多倒闭的创业公司老板都这么想的吧,他们并不能抓住用户真正的需求,只有抓住用户真正的需求,才会抓住用户的心,真正活下来的,才是用户真正需要的,然而,相对来说,游戏行业更是复杂多变,或许今天玩家喜欢这种游戏,明天玩家就喜欢另一种游戏了,就像我们永远也想不到,flappy bird、围住神经病猫这类的游戏竟然能活起来,愚公移山竟然也能让h5游戏变为付费的可能。就像一句话,“只要站在风口上,猪也能飞起来!”,只要抓住了玩家此时此刻真正想要的,产品就一定能做起来。