游戲服務(wù)器開(kāi)發(fā)都要學(xué)什么

一、游戲服務(wù)器開(kāi)發(fā)工作介紹

有很多朋友會(huì)問(wèn)我,想從其它開(kāi)發(fā)領(lǐng)域轉(zhuǎn)到游戲服務(wù)器開(kāi)發(fā)上來(lái),需要學(xué)什么?

或許是因?yàn)橛螒蚍?wù)器開(kāi)發(fā)工資高,或許是因?yàn)楦杏X(jué)做游戲服務(wù)器需要掌握的技術(shù)更高級(jí),更具有挑戰(zhàn)性,或許覺(jué)得想換個(gè)行當(dāng)試試等等。

不管出于什么原因吧,做為一名從事游戲服務(wù)器開(kāi)發(fā)和教學(xué)很多年的人,我當(dāng)然是持歡迎態(tài)度的,那么我就先介紹一下游戲服務(wù)器開(kāi)發(fā)的工作吧,游戲服務(wù)器開(kāi)發(fā)具體要做哪些工作呢?

1.團(tuán)隊(duì)溝通

基本上不管做什么開(kāi)發(fā),都是一個(gè)團(tuán)隊(duì)來(lái)完成的,游戲也是如此,游戲團(tuán)隊(duì)一般由老板、總經(jīng)理、CTO(技術(shù)主管)、主策劃(領(lǐng)導(dǎo)一些人,包括數(shù)值策劃、系統(tǒng)策劃、特效策劃)、主美(領(lǐng)導(dǎo)一些人,包括原畫(huà)、UI設(shè)計(jì)、特效動(dòng)作設(shè)計(jì))、客戶端主程(領(lǐng)導(dǎo)一些人,客戶端程序員、客戶端程序員...)、服務(wù)器主程(領(lǐng)導(dǎo)一些人,包括服務(wù)器程序員),外加運(yùn)維。

而游戲的大部分邏輯實(shí)現(xiàn)與邏輯數(shù)據(jù)驗(yàn)證都會(huì)放在服務(wù)器端,所以服務(wù)端程序需要明確了解策劃的需求,要了解就需要溝通,溝通方式的正確與否,直接關(guān)系到功能的實(shí)現(xiàn)是否正確,由于游戲邏輯的復(fù)雜性,單純的文檔描述可能不會(huì)非常完整,不像其它行業(yè)需求文檔就幾百頁(yè),詳細(xì)的圖文并茂,制定好之后也很少變化。所以做為一名游戲程序員,一定要有良好的溝通方式和技巧。
所以大家在與人溝通的時(shí)候應(yīng)該有意培養(yǎng)自己的溝通表達(dá)能力。盡量將表達(dá)準(zhǔn)確,高效溝通。

2.架構(gòu)設(shè)計(jì)

這個(gè)架構(gòu)設(shè)計(jì)就像蓋房子打基礎(chǔ),基礎(chǔ)好,房子就穩(wěn)固,基礎(chǔ)不好,房子高了就容易倒。架構(gòu)設(shè)計(jì)需要結(jié)合軟件工程學(xué)來(lái)搞,它需要對(duì)服務(wù)器的整個(gè)流程有足夠的了解,對(duì)需求的變化有足夠的認(rèn)識(shí)。架構(gòu)的設(shè)計(jì)一般有幾個(gè)特性。

首先是易用性,架構(gòu)一旦完成,在開(kāi)發(fā)的時(shí)候就要方便使用,比如網(wǎng)絡(luò)通信架構(gòu),設(shè)計(jì)好之后,其他開(kāi)發(fā)者就不需要關(guān)心客戶端的數(shù)據(jù)是怎么被傳輸?shù)椒?wù)器端的,這個(gè)時(shí)候?qū)τ诜?wù)器開(kāi)發(fā)者來(lái)說(shuō),只需要實(shí)現(xiàn)一些簡(jiǎn)單的接口,就可以直接對(duì)客戶端發(fā)送來(lái)的請(qǐng)求進(jìn)行處理操作。再比如說(shuō)服務(wù)器端數(shù)據(jù)的存儲(chǔ)與更新,開(kāi)發(fā)者只需要寫(xiě)少量SQL語(yǔ)句或基本不用寫(xiě),都由架構(gòu)的底層代碼完成,開(kāi)發(fā)者只需要調(diào)用封裝好的API,就可以把數(shù)據(jù)存入數(shù)據(jù)庫(kù)而不用關(guān)心數(shù)據(jù)的最終流向,只需要關(guān)心實(shí)現(xiàn)邏輯就可以了。

第二,可擴(kuò)展性,可擴(kuò)展性包括兩個(gè)方面,一是代碼的可擴(kuò)展性,比如說(shuō)游戲中的任務(wù)處理吧,一個(gè)游戲中任務(wù)可能有幾十種,而且還可能不定時(shí)的增加,為了判斷不同的任務(wù)類型該執(zhí)行什么操作,最簡(jiǎn)單也是最差的寫(xiě)法是if else。想象一下,一個(gè)方法里面,有幾十個(gè)if else,這簡(jiǎn)單是bug的理想誕生地呀。一種可行的做法是使用責(zé)任鏈模式(具體的請(qǐng)參考設(shè)計(jì)模式的實(shí)現(xiàn)),這樣每種任務(wù)都有一個(gè)單獨(dú)的類去處理它,而不會(huì)影響其它的類,符合開(kāi)閉原則,相互關(guān)聯(lián)少,越少越不容易出bug。二是部署的可擴(kuò)展性,比如,如果在線人數(shù)突然增加或預(yù)期可能要增加,一臺(tái)物理機(jī)器可能處理不過(guò)來(lái)這么多的請(qǐng)求,那怎么辦?那就需要支持在不影響其它服務(wù)器運(yùn)行的情況下,可以動(dòng)態(tài)的添加機(jī)器。而當(dāng)壓力降低之后,又可以移除某些機(jī)器,合理利用資源。

第三,高吞吐量,這個(gè)是指能盡量最大化的利用計(jì)算機(jī)固定的資源,去處理更多的請(qǐng)求,更快速的響應(yīng)客戶端。這就需要在服務(wù)器架構(gòu)設(shè)計(jì)的時(shí)候考慮異步處理,減少I(mǎi)O等待時(shí)間(比如請(qǐng)求redis,存儲(chǔ)數(shù)據(jù)庫(kù),和其它服務(wù)器通信)以及數(shù)據(jù)緩存。說(shuō)到異步,一定會(huì)涉及到多線程,并發(fā)等相關(guān)的技術(shù),所以架構(gòu)設(shè)計(jì)的時(shí)候需要對(duì)這部分知識(shí)有足夠的了解。

第四,要考慮是否所有的功能模塊都放在同一個(gè)進(jìn)程中。也就是需不需要分布式開(kāi)發(fā),哪些功能需要單獨(dú)拿出來(lái)。對(duì)于手機(jī)游戲來(lái)說(shuō),一般要求同時(shí)在線量比較小,功能比較單一,所有功能都在一個(gè)進(jìn)程中,人數(shù)大量同時(shí)在線時(shí),可以多部署幾組進(jìn)程。而對(duì)于大型網(wǎng)頁(yè)游戲或客戶端游戲來(lái)說(shuō),特別是有些大區(qū)或不分區(qū)的情況,單個(gè)功能訪問(wèn)量大,服務(wù)器就要考慮分布式部署開(kāi)發(fā)了。

架構(gòu)設(shè)計(jì)一般需要有經(jīng)驗(yàn)的開(kāi)發(fā)者(項(xiàng)目主程)去搭建,新手可以作為了解,在接觸到項(xiàng)目之后,可以按這個(gè)思路去理解項(xiàng)目的架構(gòu)是怎么樣構(gòu)成的,如果讓自己來(lái)做,能否模仿出來(lái),有時(shí)間可以自己嘗試去獨(dú)立設(shè)計(jì)架構(gòu),鍛煉自己的能力,有一天你是會(huì)實(shí)際去做的。

3.邏輯開(kāi)發(fā)

架構(gòu)搭建完成之后,緊接著就是游戲服務(wù)器的邏輯開(kāi)發(fā),這時(shí)才開(kāi)始真正去實(shí)現(xiàn)游戲需要的內(nèi)容,比如注冊(cè)、登陸、任務(wù)、活動(dòng)、背包、組隊(duì)?wèi)?zhàn)斗等。由于游戲邏輯可能需要的判斷條件多,組合變化多,所以在游戲邏輯開(kāi)發(fā)過(guò)程中,你會(huì)慢慢發(fā)現(xiàn)面向?qū)ο蟮闹匾?。邏輯開(kāi)發(fā)是一個(gè)任重而道遠(yuǎn)的過(guò)程,同一個(gè)問(wèn)題,可能有很多種實(shí)現(xiàn)方式,不同的實(shí)現(xiàn)方式對(duì)效率和吞吐量有很大的影響,所以就需要對(duì)需求功能的理解要深入,不同功能之間的關(guān)聯(lián)要明確。對(duì)常用的設(shè)計(jì)模式要知道如何使用。比如像上面說(shuō)的替換數(shù)量比較多的if else的方式。邏輯開(kāi)發(fā)需要謹(jǐn)慎細(xì)心,而且一定要自己測(cè)試才可以,不然bug在不知不覺(jué)中就產(chǎn)生了。

4.系統(tǒng)周邊開(kāi)發(fā)

一個(gè)游戲成功的運(yùn)營(yíng),需要很多服務(wù)去支持它,比如SDK接入、充值接入、日志統(tǒng)計(jì)、游戲運(yùn)行管理系統(tǒng)(一般叫后臺(tái)管理系統(tǒng),是內(nèi)部人員為了管理游戲的而開(kāi)發(fā)的系統(tǒng))。比如修改某個(gè)用戶的等級(jí)、封號(hào)等。管理系統(tǒng)一般會(huì)用web開(kāi)發(fā),與游戲服務(wù)器通信。

二、游戲類型與技術(shù)選擇

游戲服務(wù)器開(kāi)發(fā)使用的技術(shù)取決于游戲的類型,不同的游戲類型,需要的游戲環(huán)境不一樣,所使用的技術(shù)也不一樣。但是在本質(zhì)上都是一樣的,都是面對(duì)數(shù)據(jù),處理數(shù)據(jù),不同的是面對(duì)的數(shù)量大小而已。

1.PC類端游

這類游戲(俗稱“端游”)在線人數(shù)龐大,游戲中要處理的數(shù)據(jù)也非常龐大。所以對(duì)服務(wù)器性能要求非常高,一般都是采用C++做為開(kāi)發(fā)語(yǔ)言,C++可以直接操作內(nèi)存數(shù)據(jù),與操作系統(tǒng)直接交互,減少數(shù)據(jù)之間的復(fù)制,它運(yùn)行效率高,處理速度快,是這類游戲開(kāi)發(fā)的首選開(kāi)發(fā)語(yǔ)言。服務(wù)器端采用分布式架構(gòu),把不同的模塊分散在多臺(tái)物理機(jī)上處理。需要學(xué)習(xí)的大致有C++編程、Linux網(wǎng)絡(luò)編程、TCP/IP通訊協(xié)議、多線程編程,再加數(shù)據(jù)庫(kù)。它一般開(kāi)發(fā)周期比較長(zhǎng),一個(gè)游戲的上線基本上需要三到五年。

2.網(wǎng)頁(yè)游戲

這類游戲(俗稱“頁(yè)游”)相對(duì)于端游來(lái)說(shuō),開(kāi)發(fā)周期短,因?yàn)槭蔷W(wǎng)頁(yè)游戲,游戲的界面展示依賴于網(wǎng)絡(luò)傳輸,所在在畫(huà)面和特效上會(huì)次于客戶端游戲很多。游戲的特點(diǎn)主要集中在游戲的玩法上。但是對(duì)于服務(wù)器端來(lái)說(shuō),和端游類是差不多是一樣的,有些公司之前是做端游的,他們就直接把端游的服務(wù)器架構(gòu)拿來(lái)就可以使用,以完成快速開(kāi)發(fā)。

3.手機(jī)游戲

手機(jī)類游戲(俗稱“手游”)目前是最火最熱門(mén)的游戲,因?yàn)樗挠脩袅看螅脩粽加袝r(shí)間長(zhǎng)。但是手機(jī)游戲大多數(shù)是一般小游戲,功能簡(jiǎn)單,玩法單一,一般都是休閑娛樂(lè)的。現(xiàn)在也有一些稍微大型的MORPG游戲。所以手機(jī)游戲開(kāi)發(fā)周期更短,上線更快。

目前,游戲市場(chǎng)競(jìng)爭(zhēng)激烈,當(dāng)前服務(wù)器主流的開(kāi)發(fā)語(yǔ)言是C++和Java,但是C++學(xué)習(xí)難度大,開(kāi)發(fā)速度慢。為了滿足游戲服務(wù)器快速開(kāi)發(fā),快速上線,所以一般來(lái)說(shuō)我們都是使用Java語(yǔ)言來(lái)開(kāi)發(fā)服務(wù)器。近年來(lái),隨著游戲市場(chǎng)的發(fā)展,游戲服務(wù)器開(kāi)發(fā)技術(shù)因Java而生成了一套體系??梢怨╅_(kāi)發(fā)者選擇。

三、使用Java開(kāi)發(fā)服務(wù)器需要學(xué)習(xí)什么

Java語(yǔ)言,由于學(xué)習(xí)成本低,開(kāi)發(fā)速度快,穩(wěn)定性高,開(kāi)源框架多,目前已成為網(wǎng)頁(yè)游戲和手機(jī)游戲服務(wù)器開(kāi)發(fā)的主要語(yǔ)言。咱們從系統(tǒng)的開(kāi)發(fā)流程簡(jiǎn)單梳理一下服務(wù)器開(kāi)發(fā)需要用到的技術(shù)。

1.網(wǎng)絡(luò)通信

這個(gè)是首要實(shí)現(xiàn)的,如果沒(méi)有網(wǎng)絡(luò)通信,就沒(méi)有服務(wù)器存在的必要了。網(wǎng)絡(luò)通信就需要建立網(wǎng)絡(luò)連接。目前網(wǎng)絡(luò)通信有兩種方式,一種是短連接,比如http。一種是長(zhǎng)連接,比如socket。當(dāng)然http也是基于socket的,socket是通信的基礎(chǔ)。所以要對(duì)TCP/IP通信的知識(shí)有所了解,明白通信的原理。基于這兩種網(wǎng)絡(luò)通信,游戲服務(wù)器也分為兩種,弱聯(lián)網(wǎng)和強(qiáng)聯(lián)網(wǎng)。弱聯(lián)網(wǎng)的游戲一般是指一些小型的游戲,比如開(kāi)心消消樂(lè)、連連看,以及一些卡牌養(yǎng)成類游戲,這類游戲一般幾秒鐘或幾分鐘再會(huì)與服務(wù)器同步一次數(shù)據(jù),一般會(huì)使用短連接。而像一些ARPG游戲、實(shí)時(shí)戰(zhàn)斗類游戲,以及帶同屏顯示玩家的游戲,這類游戲與服務(wù)器交互信息頻繁,一秒鐘可能幾十次,會(huì)采用長(zhǎng)連接,避免每次連接重新建立消耗系統(tǒng)資源,提高通信效率。

為了網(wǎng)絡(luò)通信的效率,服務(wù)器要使用NIO(非阻塞網(wǎng)絡(luò)通信)通信。它能支持大并發(fā)連接。Java NIO是多路復(fù)用IO,在多路復(fù)用IO模型中,會(huì)有一個(gè)線程不斷去輪詢多個(gè)socket的狀態(tài),只有當(dāng)socket真正有讀寫(xiě)事件時(shí),才真正調(diào)用實(shí)際的IO讀寫(xiě)操作。因?yàn)樵诙嗦窂?fù)用IO模型中,只需要使用一個(gè)線程就可以管理多個(gè)socket,系統(tǒng)不需要建立新的進(jìn)程或者線程,也不必維護(hù)這些線程和進(jìn)程,并且只有在真正有socket讀寫(xiě)事件進(jìn)行時(shí),才會(huì)使用IO資源,所以它大大減少了資源占用。目前基于此技術(shù)有很多開(kāi)源框架,最常用的有兩種,Netty和Mina。

所以在網(wǎng)絡(luò)通信這一塊,如果是弱聯(lián)網(wǎng)游戲,可以使用web那一套來(lái)開(kāi)發(fā)游戲服務(wù)器,需要學(xué)習(xí)的技術(shù)一般有HTTP原理、JSON格式協(xié)議、Servlet、Tomcat(也可以是其它web容器)、spring等。如果是強(qiáng)聯(lián)網(wǎng)游戲,要學(xué)習(xí)的技術(shù)有Netty或Mina可以選擇一種,多線程以及線程池的應(yīng)用。這是網(wǎng)絡(luò)通信所必須掌握的。只要能把客戶端發(fā)送的信息接收到,并解析成代碼使用的明文,就是成功了一半了,剩下的事就是把代碼封裝好,方便邏輯開(kāi)發(fā)調(diào)用!

通信這塊還要考慮消息的并發(fā),長(zhǎng)連接情況下,怎么處理斷包,粘包問(wèn)題,每個(gè)用戶的消息處理的是不是有序的,如果有序會(huì)不會(huì)阻塞消息,如果無(wú)序會(huì)不會(huì)造成處理混亂,比如后到的消息先處理了,這些問(wèn)題都要處理好,目前一般是保證同一個(gè)用戶的消息要有序處理!

2.數(shù)據(jù)存儲(chǔ)

網(wǎng)絡(luò)通信調(diào)試好之后,不要急著做邏輯開(kāi)發(fā),還需要把數(shù)據(jù)如何存儲(chǔ)理清楚!因?yàn)榉?wù)器端操作的全是數(shù)據(jù),如果處理的不好,容易出bug,丟數(shù)據(jù),這對(duì)游戲玩家來(lái)說(shuō)是致命的,不可接受的!

數(shù)據(jù)存儲(chǔ)要考慮,一,數(shù)據(jù)如何存到數(shù)據(jù)庫(kù),是同步存儲(chǔ),還是異步存儲(chǔ)!同步存儲(chǔ)即將數(shù)操作完之后立刻寫(xiě)入數(shù)據(jù)庫(kù),異步操作即數(shù)據(jù)操作完之后先存儲(chǔ)到內(nèi)存緩存,然后由另外的線程或進(jìn)程再同步到數(shù)據(jù)庫(kù)!游戲中一般都是采用的異步存儲(chǔ)方式,因?yàn)橛螒虿l(fā)量大,必須低延時(shí),快速響應(yīng)客戶端!如果直接操作數(shù)據(jù)庫(kù)太慢,會(huì)造成消息阻塞!內(nèi)存緩存可先擇的框架有redis,memcache,具體怎么同步到數(shù)據(jù)庫(kù),需要自己去設(shè)計(jì)了!二,數(shù)據(jù)接口如何設(shè)計(jì),能不能用工作生成這些數(shù)據(jù)操作的代碼,能不能不用寫(xiě)SQL語(yǔ)句,需是封裝在底層,或由工具生成。編程是門(mén)藝術(shù),在這就體現(xiàn)出來(lái)了,當(dāng)然是仁者見(jiàn)仁,智者見(jiàn)智了!三,大并發(fā)情況下數(shù)據(jù)的一致性,像這類可能多線程操作的數(shù)據(jù),一般是放在內(nèi)存中,由鎖來(lái)控制并發(fā)!所以對(duì)鎖的使用要熟悉,不要出現(xiàn)死鎖,或鎖粒度過(guò)大,造成線程的長(zhǎng)時(shí)間等待的情況!四,當(dāng)數(shù)據(jù)量太大,一個(gè)數(shù)據(jù)庫(kù)存儲(chǔ)不了,數(shù)據(jù)該怎么分庫(kù)分表!一種是水平劃分,一種是垂直劃分!具體的劃分方式其它資料已有詳細(xì)介紹,請(qǐng)自行查找閱讀!目前有一個(gè)開(kāi)源的分庫(kù)框架mycat,是用JAVA寫(xiě)的,大家可以研究一下!

3.邏輯開(kāi)發(fā)

邏輯開(kāi)發(fā)就是實(shí)現(xiàn)游戲策劃想象的各種游戲功能,比如:登錄、物品使用、戰(zhàn)斗結(jié)算等!邏輯開(kāi)發(fā)代碼量巨大,相互之間有很緊密的耦合性,所以每個(gè)功能模塊一定要?jiǎng)澐趾茫∽詈檬墙佑|下單元測(cè)試,寫(xiě)之前考慮一下是否方便單元測(cè)試,這樣設(shè)計(jì)的代碼會(huì)更加清晰,每個(gè)方法責(zé)任明確,不容易出bug!正是因?yàn)檫壿嫶a復(fù)雜,為了更好的管理代碼,前輩們給我們總結(jié)了一些經(jīng)驗(yàn),就是著名的設(shè)計(jì)模式,所以學(xué)習(xí)一下設(shè)計(jì)模式對(duì)代碼的管理有很大的好處!

邏輯開(kāi)發(fā)一般遇到的問(wèn)題有:

3.1,數(shù)據(jù)同步

一說(shuō)到數(shù)據(jù)同步或資源共享的時(shí)候,一般都會(huì)考慮到鎖的使用。因?yàn)橐环葙Y源同時(shí)只能被一個(gè)線程訪問(wèn)才是安全的。Java的JDK中提供了一些鎖,比如:synchronized,以及java.util.concurrent.lock包中的Lock對(duì)象,java.util.concurrent包中還提供了其它的一些原子操作的類,我們知道i++操作不是線程安全的,但是可以使用AtomicInteger中的getAndIncrement();方法代替,還有線程安全的ConcurrentHashMap,以及阻塞隊(duì)列LinkedBlockingQueue等。都是邏輯開(kāi)發(fā)中常用的處理數(shù)據(jù)同步的類。

3.2,設(shè)計(jì)模式的使用

使用設(shè)計(jì)模式,可以讓代碼更加清晰,可擴(kuò)展性更強(qiáng),維護(hù)性更佳,比如,任務(wù)系統(tǒng),任務(wù)會(huì)有很多種類型,要獲得任務(wù)數(shù)據(jù)時(shí),在一開(kāi)始寫(xiě)這個(gè)系統(tǒng)的時(shí)候,我是這樣寫(xiě)的if(type == 1)做什么,else if(type == 2)做什么,else if(type == 3)......else if(type == 35) else等。如果需要添加新的類型,又要添加else,這些if else都在同一個(gè)方法中。最后都不敢動(dòng)一塊,就怕出bug。其實(shí)當(dāng)一個(gè)方法中出現(xiàn)三個(gè)以上的if else將來(lái)還可能增加時(shí),就應(yīng)當(dāng)考慮設(shè)計(jì)是不是有問(wèn)題了,后來(lái)改成責(zé)任鏈模式或狀態(tài)模式,就解決了這個(gè)問(wèn)題。還有一個(gè)例子是,當(dāng)一個(gè)值變化,要影響多個(gè)任務(wù)完成狀態(tài)時(shí),可以使用觀察者模式或監(jiān)聽(tīng)模式或訂閱模式去實(shí)現(xiàn),這樣功能之間完全解耦,出問(wèn)題的機(jī)率會(huì)很小很小。

3.3,數(shù)據(jù)緩存框架的API使用

目前主流使用的數(shù)據(jù)緩存框架有redis和memcache,雖然在邏輯開(kāi)發(fā)前,主程會(huì)對(duì)這些進(jìn)行一些封裝,但是作為使用者還是需要對(duì)這些框架的客戶端的使用要有所了解的。這些可以去閱讀相關(guān)的文檔。不是太難。

4,程序部署與運(yùn)行

目前,大多數(shù)Java項(xiàng)目都采用maven管理 ,可以使用maven打包開(kāi)發(fā)好的程序,程序一般運(yùn)行在遠(yuǎn)程服務(wù)器上,比如云服務(wù)器。一般運(yùn)行Java程序的遠(yuǎn)程服務(wù)器都是Linux系統(tǒng),需要使用Linux命令操作,或?qū)懸恍﹕hell腳本去自動(dòng)化部署管理一些程序。

5,艱苦奮斗的精神

首先,一定要讓自己對(duì)這一行有興趣,明確自己在這一行的技術(shù)選擇,人生選擇。很多人都知道,程序員加班是常有的事,堅(jiān)持的住就做,堅(jiān)持不了就再換一家公司做。

綜上所述,想做Java游戲服務(wù)器方面的開(kāi)發(fā)要掌握的技術(shù)有以下一些:
1,網(wǎng)絡(luò)通信框架,Mina或Netty必須熟悉一種。而且自己必須要親自搭建過(guò),并明白其它原理。
2,通信協(xié)議制定和處理斷包粘包,這一般屬于網(wǎng)絡(luò)通信框架要解決的問(wèn)題。
3,數(shù)據(jù)緩存框架,redis或memcache選擇一個(gè),能熟練使用其客戶端的命令。
4,Java基礎(chǔ),Java NIO通信原理,Java集合的使用,Java多線程開(kāi)發(fā),Java鎖的使用。
5,了解一些設(shè)計(jì)模式。最好能把23種設(shè)計(jì)模式都看一遍,并結(jié)合自己的開(kāi)發(fā)經(jīng)驗(yàn),看哪些可以用到設(shè)計(jì)模式,但也不能死套設(shè)計(jì)模式,要靈活運(yùn)用。
6,熟悉使用Mysql數(shù)據(jù)庫(kù)。
7,了解數(shù)據(jù)庫(kù)連接池的一些框架,比如Mybatis、hibernate。
8,對(duì)HTTP協(xié)議熟悉,熟悉一種web容器,比如tomcat,了解其配置。
9,對(duì)常用的一些Linux命令要熟悉使用。
10,熱愛(ài)學(xué)習(xí),不斷的充實(shí)自己,上面所說(shuō)的只是入門(mén)技能而已,真正做起來(lái)要復(fù)雜的多,一定要讓自己喜歡游戲這個(gè)行業(yè),這樣才能有動(dòng)力做下去,做自己喜歡的工作還是比為了工作要好的!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容