99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁大數(shù)據(jù)時代6個步驟獲得高質(zhì)量的項目經(jīng)驗,告別沒有項目經(jīng)驗的炯
6個步驟獲得高質(zhì)量的項目經(jīng)驗,告別沒有項目經(jīng)驗的炯
2021-03-09
收藏

來源: 麥叔編程

作者:麥叔

很多在校生或者自學編程的人表示:我沒有項目經(jīng)驗,應(yīng)該怎么辦?

在開源盛行的今天,我們根本不缺乏項目,隨便在Github上搜索一下就可以找到成千上萬的高質(zhì)量的項目供你學習和實踐。

我們?nèi)狈Φ氖?/span>:把開源項目內(nèi)化的方法,讓開源項目變成自己的項目的例子。

本文分享6個內(nèi)化開源項目的步驟,以及4個加深項目經(jīng)驗的步驟。如果你認真執(zhí)行這些步驟,項目經(jīng)驗將不再是問題。

一、步子大了容易扯著蛋

這里說的項目是指比較綜合的項目,具有一定商業(yè)價值的項目,寫在簡歷上可以給你加分的項目,比如:

  • 一個在線教育網(wǎng)站
  • 一個內(nèi)容完善的博客系統(tǒng)
  • 一款有價值的手機App
  • 一個設(shè)計和功能都不錯的游戲

項目雖好,但我不推薦初學者上來就做這種項目,步子大了容易扯著蛋。

在做項目之前,必須先有一定的編程基礎(chǔ):

  • Java是否掌握了Core Java的核心知識?
  • Python是否掌握了基礎(chǔ)語法,面向?qū)ο?,模塊和包等?

否則就算你比著葫蘆畫瓢把項目運行出來了,項目隨便出點問題,你就傻眼了,因為一些基礎(chǔ)的知識你都不懂?;蛘咦屇阕鳇c復(fù)雜點的功能,完全沒有思路。

所以在實踐本文的步驟之前,先掂量一下,自己是否已經(jīng)有了一定的基礎(chǔ)。

并不是說從零開始學習編程就不能實戰(zhàn)入門,相反,我非常推崇實戰(zhàn)項目入門的方法,所以我在B站分享很多Python,Java的小游戲,小項目的教程:

6個步驟獲得高質(zhì)量的項目經(jīng)驗,告別沒有項目經(jīng)驗的炯
6個步驟獲得高質(zhì)量的項目經(jīng)驗,告別沒有項目經(jīng)驗的炯

這些都很適合零基礎(chǔ)學習編程,但如果放在簡歷上就太單薄了。

在B站搜索:麥叔編程,可以查看這些視頻。公眾號在近期也會開通相關(guān)的小程序。

在接下來兩周,我會發(fā)布學習文章,也是防止扯了蛋:

  • 不扯淡Java學習路線圖
  • 不扯淡Python學習路線圖

請保持關(guān)注。

二、找開源項目

如果你已經(jīng)有了一定的基礎(chǔ),就可以開始找個開源項目,練練手。

找項目的方法很簡單,可以去github,或者國內(nèi)的gitee上,搜索你感興趣的項目,挑選點贊數(shù)比較多的就可以了。

但這里我想提醒一下,一定要循序漸進,找適合自己的項目,并不是點贊多的就是最開始學習。

以Java開源項目為例,我認為要分成幾個層次:

  • 先做一個Web,Servlet,JDBC為主的項目,不要上來就上框架項目。所有的框架都是基于Java語言的特性,如果你不理解語言本身,上來就做框架,必然會造成根基不穩(wěn),你不會成為大牛,工資也不會很高。
  • 再做一個以主流框架為基礎(chǔ)的項目,比如以Spring/SpringBoot + MyBatis為主要技術(shù)棧的項目。在上一個項目的基礎(chǔ)上,你更能理解這些框架的好處,也知道他們的實現(xiàn)原理。有了問題,你有你能力去看源代碼。
  • 再做一個分布式的項目,比如基于Spring Cloud的項目,在這個項目中用上緩存,Message Queue等技術(shù)。這是在上一個項目上的自然延伸,如果這樣的項目你也比較熟悉了,你的表達能力又不錯,你運氣好,應(yīng)該可以拿到比較高級的崗位了。應(yīng)該在阿里P6的水平。

再說一遍,我的主要意思是:要循序漸進,找適合自己的項目。

如果你不知道如何循序漸進,在接下來的一兩周之內(nèi)我會發(fā)布:

  • 不扯淡Java項目推薦和案例分析
  • 不扯淡Python項目推薦和案例分析

請保持關(guān)注。

三、6個步驟

假設(shè)你已經(jīng)確定了一個開源項目,怎么下手呢?

按照下面的6個步驟來:

  1. 運行項目讓項目運行起來,了解它用什么服務(wù)器,用什么數(shù)據(jù)庫,如何啟動,如何關(guān)閉。如果是分布式項目,這個步驟就有一定的難度。在運行的過程中可能會碰到各種類庫不能下載的情況,這個過程本身就是一種鍛煉。
  2. 測試它的功能,寫一份功能列表運行起來后,不要急于去學習代碼,先了解項目的功能,并且自己寫一份功能說明書,越詳細越好。如果功能都不了解,談什么構(gòu)架,談什么技術(shù)?面試的時候也會掛掉。
6個步驟獲得高質(zhì)量的項目經(jīng)驗,告別沒有項目經(jīng)驗的炯
  1. 瀏覽代碼,做一個技術(shù)棧列表現(xiàn)在可以開始學習代碼了,不要盲目的學習,學習完了要有一定的產(chǎn)出,那就是出一份技術(shù)列表。這個項目中都用到了哪些技術(shù)?不用太漂亮,把用到的技術(shù)都列出來。用了什么Web框架,什么業(yè)務(wù)層框架,什么數(shù)據(jù)庫層框架,什么數(shù)據(jù)庫?要詳細一點,用到那些模塊,那些類庫,分別用的什么版本,統(tǒng)統(tǒng)都列出來。這個產(chǎn)物就是一個簡單的列表。這個過程你必然要全面的瀏覽代碼,了解代碼的結(jié)構(gòu),對代碼有個比較好的總體的理解。
  2. 畫一張技術(shù)架構(gòu)圖,畫一張流程圖這時候需要把這些東西內(nèi)化了,給你的作業(yè)是兩張圖。一張是技術(shù)架構(gòu)圖,前面你已經(jīng)有了一個技術(shù)列表,現(xiàn)在把列表中的東西放到一張相互依賴的圖中去,進一步消化項目的架構(gòu)。相信我,在面試的時候,如果你能輕松畫出你的項目的架構(gòu)圖,面試官一定對你刮目相看!還有一張是流程圖。挑選一個主要的業(yè)務(wù)流程,比如電子商務(wù)系統(tǒng)中的下單流程,畫出這個流程的詳細的流程圖。這個流程圖中最好有兩部分,一部分是業(yè)務(wù)流程,一部分是代碼流程:這個流程中一步步是如何調(diào)用的,最后數(shù)據(jù)被存在了那張表中等等。

架構(gòu)圖示例:

6個步驟獲得高質(zhì)量的項目經(jīng)驗,告別沒有項目經(jīng)驗的炯

流程圖示例:

6個步驟獲得高質(zhì)量的項目經(jīng)驗,告別沒有項目經(jīng)驗的炯
  1. 添加一個功能/修改一個功能經(jīng)過了上面的4個步驟,你對這個項目的理解已經(jīng)很透徹了,可以說擊敗了90%的小伙伴,但是還不夠。你只是在學習,你還沒有實戰(zhàn)?,F(xiàn)在修改產(chǎn)品功能列表,添加一個新的功能,你把這個功能開發(fā)出來。這個功能不能太簡單,需要有一定代碼量,你至少要兩周才能開發(fā)完成才行。對,這個步驟非常關(guān)鍵!你需要有實際的項目經(jīng)驗,不只是道聽途說,不是把別人的東西說成自己的?,F(xiàn)在就是你建立實際項目經(jīng)驗的時候。
  2. 給自己出10個問題,找出優(yōu)秀的答案你對這個開源項目很了解了,也自己開發(fā)了新的功能?,F(xiàn)在來檢驗一下自己,嘗試站在面試官的角度,給自己提10個問題。提問題的時候不要想答案,不要想這個問題我會不會。就只是想問題,列出你認為的最難的10個問題。找出這10個問題的答案。這個過程,你需要再去深入研究相關(guān)的技術(shù),要的就是這個效果。

經(jīng)過這樣的6個步驟,你一定有信心把項目寫到自己的簡歷上。實際上,你可能會比真正有工作經(jīng)驗的人還要表現(xiàn)的好。

我見過很多工作了幾年的人,都不能畫出自己的項目的架構(gòu)圖,對項目需求一知半解,問到點深入的問題就答不出來。如果你有實際的工作經(jīng)驗,也可以應(yīng)用上面的幾個步驟。

如果你覺得這個幾個步驟很好,但還是感覺不知道怎么下手,在接下里一兩周,我會選取一個開源項目,帶你一步步實踐上面的6個步驟。請保持關(guān)注。

四、獲取團隊合作經(jīng)驗

經(jīng)過上面的6個步驟,你的項目經(jīng)驗應(yīng)該沒問題了,但是你沒有真正的在一個團隊中工作過,你沒有團隊合作經(jīng)驗,這可能會是一個問題。

下面分享的4個步驟幫你獲得團隊合作經(jīng)驗:

  1. 找兩個同學或朋友一起研究同一個項目你們就是一個團隊,制定計劃,分配角色。也可以各自研究一個模塊,再互相交流。這個過程不僅僅是做項目,你在培養(yǎng)你的團隊協(xié)作能力,溝通能力,甚至領(lǐng)導(dǎo)能力。以后的公司會有越來越多變成虛擬團隊,大家就是通過網(wǎng)上交流,互相協(xié)作。所以你和你同學成立的團隊,和公司的團隊是一樣的。你獲得的也是貨真價實的團隊合作經(jīng)驗。
  2. 各自修改一個功能,通過git管理代碼你們共同討論,確定要增加什么功能。每個功能分配一個人開發(fā)。你們共用同一個代碼庫,通過git管理和協(xié)作代碼。原本你只能開發(fā)一個功能,現(xiàn)在因為有了3個人,你可以給這個開源項目增加3個功能了。你的項目經(jīng)驗也更多了。
  3. 互相審查對方的代碼,互相測試對方的代碼團隊中,代碼審查是重要的一個環(huán)節(jié)。你們3個人,互相審查對方的代碼,給對方提出意見?;ハ鄿y試對方的代碼,給對方報bug。
  4. 互相審查技術(shù)構(gòu)架圖,互相提問對方的問題在6個步驟中的各項產(chǎn)物,你們都可以互相審閱。重要的是,你們可以模擬面試對方,用你覺得最難的問題,去狠狠的考驗對方。比面試官還要狠。

如果你很難找到合作伙伴,我創(chuàng)建了一個“項目實戰(zhàn)互助群”,也許這里你能找到你的合作伙伴。請在公眾號回復(fù)項目加入群聊。

五、后記

我知道,說起來容易,做起來難!但是不做會更難。

如果下決心,嚴格執(zhí)行這些建議,項目經(jīng)驗絕對不會成為你的障礙。

為了更好的幫助大家,在下面的一兩周我會推出相關(guān)的文章:

  • 不扯淡Java學習路線圖
  • 不扯淡Python學習路線圖
  • 不扯淡Java項目推薦和案例分析
  • 不扯淡Python項目推薦和案例分析

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }