1. 記一個(gè)自己項(xiàng)目上線的全過(guò)程

        共 3718字,需瀏覽 8分鐘

         ·

        2021-08-19 23:56

        以下文章來(lái)源方志朋的博客,回復(fù)”666“獲面試寶典

        個(gè)人終于第一次完成了一個(gè) Java web 項(xiàng)目從策劃到最終上線的全過(guò)程,雖然項(xiàng)目十分簡(jiǎn)單,但全流程跑通的感覺(jué)還是倍爽的,之后再做項(xiàng)目則只是各個(gè)環(huán)節(jié)上的細(xì)化了。

        現(xiàn)在我將我的“第一次”分享給大家

        項(xiàng)目名稱(chēng):最美80周年,共同記錄

        開(kāi)發(fā)文檔:https://www.showdoc.cc/rucday?page_id=15376272

        源碼地址:https://github.com/sunym1993/dataU-RUCDay.git

        項(xiàng)目簡(jiǎn)介:自己做著玩的一個(gè)項(xiàng)目,為某校80周年校慶準(zhǔn)備的,頁(yè)面模仿微信聊天界面,用戶可在上面說(shuō)話。

        一、準(zhǔn)備階段

        服務(wù)器:阿里云服務(wù)器ECS(2核4G ¥825/年)

        買(mǎi)了一年的阿里云服務(wù)器,個(gè)人感覺(jué)還是很值的,內(nèi)部裝好了空的CentOS 6.9 64位 linux系統(tǒng)。首先第一步就是安裝java環(huán)境,以便之后我在上面跑的程序能夠運(yùn)行起來(lái)??偨Y(jié)起來(lái)我需要jdk,mysql,redis。安裝linux系統(tǒng)環(huán)境每次都要查找各種教程,索性總結(jié)成了一篇清單文章給自己看:linux的java環(huán)境搭建清單

        當(dāng)然后續(xù),還在阿里云買(mǎi)了域名,域名需要備案才能用的事,留在后面吐槽。

        文檔管理:showdoc文檔,poccessOn流程圖

        showdoc在線文檔清晰明了,很適合個(gè)人或者小型團(tuán)隊(duì)用來(lái)共享開(kāi)發(fā)文檔。配合poccessOn流程圖軟件(我買(mǎi)了專(zhuān)業(yè)版 ¥115/年),已經(jīng)可以很好完成開(kāi)發(fā)文檔方面的工作了。當(dāng)然工具的選擇只是個(gè)人喜好問(wèn)題。

        代碼管理:github

        開(kāi)發(fā)工具:idea

        應(yīng)該是最智能的編輯器了,但我還是更佩服用notepad或者txt寫(xiě)代碼的人。

        開(kāi)發(fā)環(huán)境:jdk1.8,mysql,redis,springboot

        現(xiàn)在是springboot的時(shí)代咯,打成一個(gè)jar包直接就能跑web項(xiàng)目,也可以跑微服務(wù),十分便于管理。


        二、瘋狂打碼階段

        開(kāi)發(fā)過(guò)程總結(jié)起來(lái)可以說(shuō)很簡(jiǎn)單,1、寫(xiě)好開(kāi)發(fā)文檔;2、建好數(shù)據(jù)庫(kù);3、寫(xiě)好代碼并打成jar包。描述起來(lái)真的特別簡(jiǎn)單,而且基本都是這樣的流程。

        困難之處就在于,開(kāi)發(fā)文檔寫(xiě)得糟糕,數(shù)據(jù)庫(kù)設(shè)計(jì)得糟糕,代碼總是出一堆bug。于是可能回過(guò)頭再改開(kāi)發(fā)文檔,改數(shù)據(jù)庫(kù)。于是再次遇到開(kāi)發(fā)文檔改得糟糕,數(shù)據(jù)庫(kù)改得糟糕,如此往復(fù)。最終的結(jié)論就是代碼越來(lái)越難以維護(hù)。所以如果不是在最初設(shè)計(jì)的時(shí)候就能預(yù)料到之后的各種坑,回過(guò)頭改則會(huì)越改越糟,除非推倒重來(lái)。

        1.寫(xiě)開(kāi)發(fā)文檔

        由于自身比較追求代碼的質(zhì)量,實(shí)現(xiàn)所謂的高內(nèi)聚、低耦合,所以在意識(shí)上還是很明白設(shè)計(jì)階段的重要性的,雖然后面看來(lái)一開(kāi)始的設(shè)計(jì)簡(jiǎn)直是糟糕透頂。

        我給自己的原則就是文檔寫(xiě)完之前一行代碼都不要寫(xiě),文檔寫(xiě)好之后代碼自然就出來(lái)。雖然花了近一周時(shí)間在寫(xiě)文檔階段(拋去上班時(shí)間其實(shí)就兩天),但仍然不夠,代碼寫(xiě)到后面已經(jīng)完全拋棄文檔了。我后來(lái)總結(jié)自己代碼時(shí)可以明顯感覺(jué)到,文檔中設(shè)計(jì)好的部分代碼還是很清晰整潔的,但其余部分就有點(diǎn)混亂不堪的意思了。
        尤其是對(duì)cookie和session的忽略導(dǎo)致一些問(wèn)題直到上線也沒(méi)能很好地解決,只能采用臨時(shí)的,不可拓展的垃圾代碼頂替,看得我自己都想吐。

        2.建數(shù)據(jù)庫(kù)

        其實(shí)如果開(kāi)發(fā)文檔設(shè)計(jì)好,數(shù)據(jù)庫(kù)自然也不用再考慮。可是我寫(xiě)開(kāi)發(fā)文檔懶了,只考慮了表的字段,沒(méi)有涉及到具體類(lèi)型、索引等信息。這導(dǎo)致了我之后寫(xiě)代碼的時(shí)候修改了幾個(gè)表字段的數(shù)據(jù)類(lèi)型。雖然造成的改動(dòng)量不大,但修改底層往往是很心累的。我們都希望封好了一層之后就不在打開(kāi)這個(gè)封條,站在新一層的高度考慮問(wèn)題,顯然這次的實(shí)踐沒(méi)有處理好。

        3.寫(xiě)代碼

        寫(xiě)代碼的過(guò)程真心可以總結(jié)為,從條理清晰到不管三七二十一。

        初步搭建框架的時(shí)候思路還是很清晰的,代碼寫(xiě)的也比較干凈,因?yàn)楫吘怪熬毩?xí)時(shí)搭建過(guò)很多次。web層、業(yè)務(wù)層、持久層,再封裝一層redis,整個(gè)過(guò)程一氣呵成。

        但到后面遇到實(shí)際業(yè)務(wù)時(shí)就慌亂了。首先,我遇到了以前沒(méi)用過(guò)的redis數(shù)據(jù)結(jié)構(gòu)list,我把用戶的消息,群內(nèi)的消息都存到了redis的list里,如何索引這個(gè)list里的數(shù)據(jù)成了困擾我的地方,雖然最后都通過(guò)記錄其索引值解決,但感覺(jué)并不是長(zhǎng)久之計(jì)。之后,session中存哪些信息又成為了一大亂點(diǎn),最后發(fā)現(xiàn)很多地方都要用到,不得不不斷往里面存數(shù)據(jù)。有時(shí)執(zhí)行某個(gè)方法時(shí)會(huì)忘記同步更新session中的數(shù)據(jù)。導(dǎo)致了很多bug。

        還有數(shù)據(jù)的同步問(wèn)題,數(shù)據(jù)庫(kù),redis,session中的數(shù)據(jù)如何保持同步,我目前只在邏輯上去保證,只能祈禱系統(tǒng)不出問(wèn)題。消息的實(shí)時(shí)更新,我用了ajax長(zhǎng)回調(diào)機(jī)制,據(jù)說(shuō)是效果最好也最節(jié)約開(kāi)銷(xiāo)的方式。頁(yè)面??!頁(yè)面真是救命了,對(duì)于一個(gè)后端開(kāi)發(fā)人員,我對(duì)頁(yè)面的美觀簡(jiǎn)直毫無(wú)辦法,只能找網(wǎng)上的模板,還好找到了一個(gè)仿微信頁(yè)面的前端模板,拯救了我

        這部分確實(shí)比較亂,沒(méi)經(jīng)驗(yàn),趕著項(xiàng)目上線很多問(wèn)題都沒(méi)能很好解決,日后將一一總結(jié)。

        三、上線前

        上線前遇到的一些問(wèn)題讓我一度想要放棄,有些跟代碼無(wú)關(guān),給大家講講

        1、阿里云有安全組策略的

        之前不知到,數(shù)據(jù)庫(kù)、redis什么都配置好了,也允許外網(wǎng)訪問(wèn),可是就是一直訪問(wèn)不了。一直找配置中的錯(cuò)誤,不斷重新安裝,一度想要放棄。結(jié)果后來(lái)發(fā)現(xiàn)問(wèn)題很簡(jiǎn)單,阿里云有自己的安全組策略,你必須配置以允許外放訪問(wèn)這個(gè)云的哪些端口才行,不配置默認(rèn)就是拒絕訪問(wèn)。找到問(wèn)題根源時(shí)我笑哭了。。。

        2、大天朝的域名是需要備案的

        直到最后我才把項(xiàng)目端口改成80,也用了自己的域名,結(jié)果發(fā)現(xiàn)無(wú)法訪問(wèn),跳出來(lái)一個(gè)“友好頁(yè)面”。后來(lái)知道,在中國(guó)域名是需要備案的,于是走阿里云備案流程,發(fā)現(xiàn)需要25天(北京),還要郵寄幕布讓你來(lái)拍照什么的,上線時(shí)間緊迫,一度要放棄的時(shí)候,想到了“某寶”,于是。。。

        3、微信需要域名加標(biāo)準(zhǔn)端口才能直接跳轉(zhuǎn)

        如果你用微信訪問(wèn)一個(gè) http://185.10.10.195 這樣的地址,它會(huì)先跳出

        如果你用微信訪問(wèn)一個(gè) http://www.datauuu.com:7001 這樣的地址,它會(huì)先跳出

        也就是說(shuō),只有域名配web標(biāo)準(zhǔn)80端口,微信才能直接打開(kāi)自己的瀏覽器做跳轉(zhuǎn)。這個(gè)也是我購(gòu)買(mǎi)域名以及想到要備案的原因。哎真是經(jīng)驗(yàn)不足啊,不然上線前不必為這些事操心


        四、上線后


        沒(méi)有日志系統(tǒng),沒(méi)有監(jiān)控系統(tǒng),沒(méi)有管理系統(tǒng)。只有一個(gè)自己做的超簡(jiǎn)單的管理頁(yè)面,只能初始化數(shù)據(jù)庫(kù)數(shù)據(jù),同步數(shù)據(jù)庫(kù)和redis,所有查詢(xún)都是直接用sqlyog看數(shù)據(jù)庫(kù)。

        現(xiàn)在明白為什么一個(gè)項(xiàng)目要如此重視日志系統(tǒng)和監(jiān)控系統(tǒng)了,真是太有用了。我這個(gè)項(xiàng)目好在比較簡(jiǎn)單,最重要的是我只是玩一玩,出問(wèn)題那就出了也不用負(fù)責(zé)人。要是一個(gè)正規(guī)的系統(tǒng),我現(xiàn)在的狀態(tài)只能用聽(tīng)天由命來(lái)形容了。

        總之在做一個(gè)項(xiàng)目之前,以下事情還是比較重要的。

        一是各種“常識(shí)”,比如阿里云的一些事,還有域名備案這種事,不過(guò)自己經(jīng)歷過(guò)一遍就都明白了,這些坑也是必須自己踩過(guò)一遍才行的,不難,但很討厭。
        二是架構(gòu)設(shè)計(jì),真的非常非常重要!就不說(shuō)三遍了。你代碼中遇到的幾乎大部分的坑,都源于設(shè)計(jì)階段的不合理,也都是能通過(guò)重視設(shè)計(jì)來(lái)解決的。而且設(shè)計(jì)階段可以弱化其實(shí)現(xiàn)過(guò)程,把精力用在模塊與模塊,接口與接口的交互之間,站在一個(gè)高度上看問(wèn)題,就不會(huì)被細(xì)節(jié)影響了大方向。
        三是多學(xué)知識(shí),這個(gè)我便沒(méi)有做好,很多功能都是想用我現(xiàn)有的知識(shí)去解決。其實(shí)優(yōu)秀的解決方案有很多種,不妨多多參考別人優(yōu)秀的設(shè)計(jì),切記不能為了暫時(shí)解決問(wèn)題用不合適的方式。
        四是要做日志系統(tǒng)和管理系統(tǒng),這在項(xiàng)目上線后是很重要的,即使是練習(xí)項(xiàng)目,也能通過(guò)它們發(fā)現(xiàn)項(xiàng)目的更多問(wèn)題。雖然不會(huì)影響項(xiàng)目的使用效果,有些人會(huì)覺(jué)得多余,但這其實(shí)是必要的。
        總的來(lái)說(shuō),我發(fā)現(xiàn)我用在實(shí)際寫(xiě)代碼上的時(shí)間并不多,大多都在設(shè)計(jì)、修改代碼、還有搞阿里云啊這些瑣事上,大家一定要重視這些環(huán)節(jié),碼代碼只是其中一小部分而已。一個(gè)優(yōu)秀的設(shè)計(jì)會(huì)讓你的代碼寫(xiě)起來(lái)輕松高效,出錯(cuò)的概率也小很多。

        下個(gè)項(xiàng)目醞釀中。。。嘿嘿

        鏈接:cnblogs.com/flashsun/p/7651742.html

        如果看到這里,說(shuō)明你喜歡這篇文章,請(qǐng) 轉(zhuǎn)發(fā)、點(diǎn)贊。同時(shí) 標(biāo)星(置頂)本公眾號(hào)可以第一時(shí)間接受到博文推送。

        —————END—————

        推薦閱讀:

        推薦7個(gè)牛哄哄 Spring Cloud 實(shí)戰(zhàn)項(xiàng)目
        基于 SpringBoot + Vue 框架開(kāi)發(fā)的網(wǎng)頁(yè)版聊天室項(xiàng)目
        基于 SpringBoot + Vue 實(shí)現(xiàn)的可視化拖拽編輯的大屏項(xiàng)目
        Github上10個(gè)超好看 可視化面板,后臺(tái)管理頁(yè)面有著落了
        這可能是史上功能最全的Java權(quán)限認(rèn)證框架!

        最近面試BAT,整理一份面試資料Java面試BAT通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。
        獲取方式:關(guān)注公眾號(hào)并回復(fù) java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
        明天見(jiàn)(??ω??)??
        瀏覽 25
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 久久精品麻豆日日躁夜夜躁 | chinesesex麻豆 | 老婆中文字幕乱码中文乱码 | 国产精品熟女 | 国产九色porny |