㈠ 看完廖雪峰的python,但是感覺自己掌握不扎實,不知道該怎麼做
python感覺自己掌握不扎實,不知道該怎麼做
不管學習什麼新的東西,效率最低但是又不可或缺的環節就是看教科書了。雖然看書的過程可能會很無聊,但是過一遍書至少能對整個知識框架有個大體的把握。我最早知道 Python 還是在《黑客與畫家》這本書中看到的,書裡面有一章節是講編程語言的,作者很推薦把 python 作為學習編程的入門語言。我當時是把《簡明 Python 教程》給過了一邊,後來又看了一遍《深入python》,這里特別推薦《深入 Python》,除了介紹 python 的基本特性之外,還介紹了諸如函數編程、正則表達式、處理 HTML 和 XML等高級用法。除了看書,上公開課也是挺不錯的,視頻教學本來就比自己啃教科書有意思,而且完成課程作業也能鍛煉動手編程能力。我上過兩門不錯的公開課,一門是萊斯大學在 Coursera 上開的《Python互動式編程導論》,一邊學 python,一邊寫些小游戲,肯定不會覺得無聊;另一門就是 MIT 在 edX 上開的《計算機科學及python編程導論》,它是 MIT edX系列課程(XSeries)中的第一課,系列課程共兩門,除了這門課以外還有《計算思維及數據科學導論》,不過第二門就沒有上過了。
《簡明 Python 教程》
《深入 Python》
《Python互動式編程導論》
《計算機科學及python編程導論》
另外,我和題主的情況有點像,也不是學計算機專業的,並且同樣對自己的專業不感興趣,以後也是想從事與數據科學相關的工作。我目前的狀況都是在自學,上公開課,看教科書,跟大牛們的技術博客。
㈡ 如何使用 Git 和 GitHub
以前因為覺得git、github比較難,所以一直拖著不學,現在去嘗試學習,一晚上就OK了
重點之一是找到全面的、詳細的、生動的、高質量的教程。廖雪峰的git教程是我目前找到的最好的一個。之前找到的講解git用法的書《pro git》現在看來是沒有必要再看了!
重點之二就是自己立即去學,其實沒什麼難的,不要被貌似難的表象、概念唬住。
重點之三是最好能自己做簡單的、系統的整理,方便自己隨時再回來查看、復習、參考,不至於出現這樣的情況:學完以後過一段時間之後再用,但是這時候發現忘了差不多了!
重點之四就是立即動手去用,否則學完很快就忘了。
有錢的買mac,沒錢的用ubuntu--或者其他的linux發行版、被逼無奈的用Windows--但是被逼之餘的自主時間一定要遠離Windows。
現在我的測試環境是ubuntu。
以對一個文件的管理為例,簡單說明git的使用。另外需要說明的是下面的實驗過程主要是只針對一個文件、並且修改的次數往往只有一次,而在真正的項目中,往往有大量的文件,也可能多次修改後才合並,合並時候的沖突可能也不只一兩個,等等。不過原理都是一樣的,我想說的是,不要局限在這個教程的示例上,請自己通過教程掌握基本的遠原理之後,自己推廣、去大量的實踐,最重要的是要制定一個好的版本控制的策略(合理分工、安排,還是盡可能的避免沖突為好),這個可以參考:使用git和github進行協同開發流程以及我的學習筆記使用git和github管理自己的項目---真實開發環境的策略。
1.創建版本庫
sudo apt-get install git 先安裝git
先創建目錄,作為倉庫
git init 初始化倉庫,可以發現當前目錄下多了一個.git的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄裡面的文件,不然改亂了,就把Git倉庫給破壞了
vim readme.txt 新建一個文本文件,比如往裡面添加簡單的一行字元串
git add readme.txt 添加一個文件,比如readme.txt,如果目錄裡面的所有文件都要添加,可以git add *
git commit-m "添加一個readme.txt文件" 將文件提交到倉庫,並加上說明(這時候是版本1)
如果是第一次使用git,那麼git commit可能報錯,所以需要你配置一些個人信息
git config --global user.email "[email protected]" 配置郵件
git config --global user.name "Your Name" 配置用戶名
必須配置,否則後面的commit、push到遠程庫都會失敗
然後再次git commit -m "添加一個readme.txt文件" 才會成功
2.提交修改
假如此時第一次修改了readme.txt文件
git status 讓我們時刻掌握倉庫當前的狀態。這時告訴我們,readme.txt被修改過了,但還沒有準備提交的修改。
git diff readme.txt 查看對readme.txt做了什麼修改
git add readme.txt 提交修改和提交新文件是一樣,先git add
git status 可以再用git status查看倉庫的當前狀態,告訴我們,將要被提交的修改包括readme.txt
git commit-m "第一次修改" 然後再git commit,並添加修改的描述(這時候是版本2)
git status 可以再執行git status看倉庫狀態,因為所有的都提交了,Git告訴我們當前沒有需要提交的修改,而且,工作目錄是干凈(working directory clean)的。
3.版本回退
你可以像上面所說的那樣不停的提交新的文件、提交對文件的修改
這時候第二次修改readme.txt文件
git add readme.txt 先git add
git commit -m "第二次修改" 提交第二次修改(這時候是版本3)
git log 顯示從最近到最遠的提交日誌,具體顯示的內容自己試一試看看
git log --pretty=oneline 如果嫌輸出信息太多,看得眼花繚亂,試試加上--pretty=oneline參數
看這篇教程去理解為什麼Git的版本號要這么長,Git的版本號類似: 這樣的特別長的十六進制數。
git reset --hard HEAD^ 會回退到上一個版本,也就是從版本3回退到版本2
在Git中,用HEAD表示當前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100
vim readme.txt 可以看到此時的readme.txt文件就是版本2時候的內容,回退成功!
git log 此時看到版本3的信息沒有了
git reset --hard 3628164 通過命令行上的歷史信息(假如你沒清屏的話),找到版本3 的版本號,不一定要全部的版本號,就像這個命令的例子,只要前面的約7、8位這樣就可以指定回到版本3
vim readme.txt 看到的是第三版本的readme.txt文件的內容,所以又回來了
Git的版本回退速度非常快,因為Git在內部有個指向當前版本的HEAD指針,當你回退版本的時候,Git僅僅是把HEAD從指向你要回退的那個版本
git reflog 記錄你的每一次命令,最先顯示的是這個命令執行之後的版本的版本號的前七位,這樣就算你清屏了或者重啟了,也能找到某個版本的版本號,就可以輕松回退到那個版本
4.工作區、版本庫和暫存區
工作區:就是你在電腦里能看到的目錄,比如我的learngit文件夾就是一個工作區。
版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。
暫存區:Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。
前面講了我們把文件往Git版本庫里添加的時候,是分兩步執行的:
第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。
因為我們創建Git版本庫時,Git自動為我們創建了唯一一個master分支,所以,現在,git commit就是往master分支上提交更改。
你可以簡單理解為,需要提交的文件修改通通放到暫存區,然後,一次性提交暫存區的所有修改。
詳細知識見這篇教程。必須理解暫存區、工作區、版本庫。這些都是是Git非常重要的概念,弄明白了這些概念,就弄明白了Git的很多操作到底幹了什麼。沒弄明白的話,請反復看!!
5.管理修改
為什麼Git比其他版本控制系統設計得優秀,因為Git跟蹤並管理的是修改,而非文件。
什麼是修改?比如你新增了一行,這就是一個修改,刪除了一行,也是一個修改,更改了某些字元,也是一個修改,刪了一些又加了一些,也是一個修改,甚至創建一個新文件,也算一個修改。
通過實例講解什麼叫跟蹤修改,要想理解,請參考原文結合暫存區的知識理解:
vim readme.txt 編輯文件,比如添加新的一行
git add readme.txt 添加,但是不提交
vim readme.txt 再編輯文件,比如再添加一行
git commit -m "修改兩次,添一次,提交一次" 提交
git status 看到的效果是:只提交了第一次的修改,第二次的修改沒有提交
那怎麼提交第二次修改呢?你可以繼續git add再git commit,也可以別著急提交第一次修改,先git add第二次修改,再git commit,也就是第一次修改 -> git add -> 第二次修改 -> git add -> git commit,就相當於把兩次修改合並後一塊提交了。
6.撤銷修改
第一種情況
修改了readme.txt文件,還沒有git add 和git commit
但是在你提交之前發現這次修改有問題。既然錯誤發現得很及時,就可以很容易地糾正它。你可以手動把文件恢復到上一個版本的狀態。
git checkout -- readme.txt 也可以通過命令撤銷修改,這條命令的意思就是,把readme.txt文件在工作區的修改全部撤銷
無論是文件修改後值存在於工作區還沒有放到暫存區,還是已經添加到暫存區,總之這個命令就是讓這個文件回到最近一次git commit或git add時的狀態。
查看文件,內容果然復原了。git checkout -- file命令中的--很重要,沒有--,就變成了「切換到另一個分支」的命令,我們在後面的分支管理中會再次遇到git checkout命令。
第二種情況
修改了readme.txt文件,而且執行了git add readme.txt
慶幸的是你在 git commit 之前發現了這個問題
git status 查看一下,修改只是添加到了暫存區,還沒有提交
git reset HEAD readme.txt 可以把暫存區的修改撤銷掉,重新放回工作區。git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。
git status 查看一下,現在暫存區是干凈的,工作區有修改
git checkout -- readme.txt 還記得第一種情況中如何丟棄工作區的修改吧
第三種情況
現在,假設你不但改錯了東西,還從暫存區提交到了版本庫,怎麼辦呢?還記得版本回退一節嗎?可以回退到上一個版本。不過,這是有條件的,就是你還沒有把自己的本地版本庫推送到遠程。
還記得Git是分布式版本控制系統嗎?我們後面會講到遠程版本庫,一旦你把錯誤的修改(如果是影響很大的錯誤)提交推送到遠程版本庫,你就真的慘了……
區別對待本地版本庫和遠程版本庫!
7.刪除文件
在Git中,刪除也是一個修改操作
添加一個新的文件 test.txt
git add test.txt
git commit test.txt -m "再次新增一個文件"
一般情況下,你通常會在文件管理器中把沒用的文件刪除,或者直接rm test.txt
git status 這個時候,Git知道你刪除了文件,因此,工作區和版本庫就不一致了,git status命令會立刻告訴你哪些文件被刪除了
現在你有兩個選擇,一是確實從版本庫中刪除該文件,那就git rm test.txt,然後git commit 文件就從版本庫中刪除了
另一種情況是刪除錯了,因為版本庫里還有,所以可以輕松地將誤刪除的文件恢復到最新版本git checkout -- test.txt git checkout其實使用版本庫中的版本替換工作區的版本,無論工作區是修改還是刪除,都可以「一鍵還原」
8.添加遠程庫
要想學習這部分的知識,請先參考下面的:a.配置連接遠程倉庫Github。
假如現在你已經配置好github,並且在github上添加了learngit倉庫。
git remote add origin git軟體開發公司www.xiupin365.net軟體開發公司github.com:michaelliao/learngit.git 這個命令是在本地的learngit倉庫下執行的,前面通過learngit倉庫為例我們已經講過在本地創建和操作git倉庫。這兩個地方的倉庫名不需要相同,因為會通過在本地的倉庫目錄下執行這條命令(命令中包含遠程庫的名字)已經將兩者建立了聯系
請千萬注意,把上面的michaelliao替換成你自己的GitHub賬戶名,否則,你在本地關聯的就是我的遠程庫,關聯沒有問題,但是你以後推送是推不上去的,因為你的SSH Key公鑰不在我的賬戶列表中。
git push -u origin master 把本地庫的所有內容推送到遠程庫上。把本地庫的內容推送到遠程,用git push命令,實際上是把當前分支master推送到遠程。由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
然後去Github對應的遠程庫看看,都已經推送上去了。
此後,每次本地提交後,只要有必要,就可以使用命令git push origin master推送最新修改。
這樣你就可以在Github上託管你的項目代碼、vim的配置文件和插件、重要的文檔……
現在我的vim的配置文件和插件已經同步到Github上了:https://github.com/xumenger/m...
另外推薦我的關於vim配置的文章::http://segmentfault.com/a/119...
9.從遠程庫克隆
假設我的github上面有一個遠程庫,但是本地沒有,需要克隆到本地,遠程庫的名字叫'gitskills'
git clone [email protected]:michaelliao/gitskills.git 克隆一個本地庫
cd gitskills 進入克隆下來的本地庫,默認的名字是和github上的一樣的
ls -al 可以看到本地的克隆庫裡面是和遠程庫裡面的一樣的
如果有多個人協作開發,那麼每個人各自從遠程克隆一份就可以了。
你也許還注意到,GitHub給出的地址不止一個,還可以用https://github.com/michaellia...這樣的地址。實際上,Git支持多種協議,默認的git://使用ssh,但也可以使用https等其他協議。
使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http埠的公司內部就無法使用ssh協議而只能用https。
10.分支管理
分支在實際中有什麼用呢?假設你准備開發一個新功能,但是需要兩周才能完成,第一周你寫了50%的代碼,如果立刻提交,由於代碼還沒寫完,不完整的代碼庫會導致別人不能幹活了。如果等代碼全部寫完再一次提交,又存在丟失每天進度的巨大風險。
現在有了分支,就不用怕了。你創建了一個屬於你自己的分支,別人看不到,還繼續在原來的分支上正常工作,而你在自己的分支上幹活,想提交就提交,直到開發完畢後,再一次性合並到原來的分支上,這樣,既安全,又不影響別人工作。
其他版本控制系統如SVN等都有分支管理,但是用過之後你會發現,這些版本控制系統創建和切換分支比蝸牛還慢,簡直讓人無法忍受,結果分支功能成了擺設,大家都不去用。
但Git的分支是與眾不同的,無論創建、切換和刪除分支,Git在1秒鍾之內就能完成!無論你的版本庫是1個文件還是1萬個文件。
11.創建和合並分支
首先教程中會詳細講解分支的原理(分支、指針、工作區……),一定要好好看!!看完之後你才能對你的創建分支和合並分支的操作不只是會用,更能在用的時候沒有任何疑惑!反正能學到更多的知識,何樂而不為!
另外推薦這樣的博客:使用git和github進行協同開發流程以及我的學習筆記使用git和github管理自己的項目---真實開發環境的策略。
在版本回退里,你已經知道,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,我們練習的learngit,只有一條時間線,在Git里,這個分支叫主分支,即master分支。HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。
Git是分布式版本控制系統,同一個Git倉庫,可以分布到不同的機器上。怎麼分布呢?最早,肯定只有一台機器有一個原始版本庫,此後,別的機器可以「克隆」這個原始版本庫,而且每台機器的版本庫其實都是一樣的,並沒有主次之分。
實際情況往往是這樣,找一台電腦充當伺服器的角色,每天24小時開機,其他每個人都從這個「伺服器」倉庫克隆一份到自己的電腦上,並且各自把各自的提交推送到伺服器倉庫里,也從伺服器倉庫中拉取別人的提交。
完全可以自己搭建一台運行Git的伺服器,不過現階段,為了學Git先搭個伺服器絕對是小題大作。好在這個世界上有個叫GitHub的神奇的網站,從名字就可以看出,這個網站就是提供Git倉庫託管服務的,所以,只要注冊一個GitHub賬號,就可以免費獲得Git遠程倉庫。
在繼續閱讀後續內容前,請自行注冊GitHub賬號。由於你的本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以,需要一點設置:
創建SSH Key。在用戶目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創建SSH Key,輸入命令ssh-keygen -t rsa -C "[email protected]",你需要把郵件地址換成你自己的郵件地址,然後一路回車,使用默認值即可,由於這個Key也不是用於軍事目的,所以也無需設置密碼。如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,裡面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
登陸GitHub,打開「Account settings」,「SSH Keys」頁面.然後,點「Add SSH Key」,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內容:
點「Add Key」,你就應該看到已經添加的Key:
注意現在的Github的頁面的布局可能和圖片中顯示有細小的差別,不過相信你能找到對應的操作!
為什麼GitHub需要SSH Key呢?因為GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支持SSH協議,所以,GitHub只要知道了你的公鑰,就可以確認只有你自己才能推送。
當然,GitHub允許你添加多個Key。假定你有若干電腦,你一會兒在公司提交,一會兒在家裡提交,只要把每台電腦的Key都添加到GitHub,就可以在每台電腦上往GitHub推送了。
最後友情提示,在GitHub上免費託管的Git倉庫,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放進去。
如果你不想讓別人看到Git庫,有兩個辦法,一個是交點保護費,讓GitHub把公開的倉庫變成私有的,這樣別人就看不見了(不可讀更不可寫)。另一個辦法是自己動手,搭一個Git伺服器,因為是你自己的Git伺服器,所以別人也是看不見的。這個方法我們後面會講到的,相當簡單,公司內部開發必備。
現在的情景是,你已經在本地創建了一個Git倉庫後,又想在GitHub創建一個Git倉庫,並且讓這兩個倉庫進行遠程同步,這樣,GitHub上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協作,真是一舉多得。具體可以見教程。
首先,登陸GitHub,然後,在右上角找到「Create a new repo」按鈕,創建一個新的倉庫:
在Repository name填入learngit,其他保持默認設置,點擊「Create repository」按鈕,就成功地創建了一個新的Git倉庫:
目前,在GitHub上的這個learngit倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然後,把本地倉庫的內容推送到GitHub倉庫。
㈢ 誰能推薦幾本學java的框架的書,簡單介紹下若要從事javaee編程工作要掌握什麼知識才能找到好工作
[Spring.2.0核心技術與最佳實踐].廖雪峰.掃描版.pdf
深入淺出Hibernate》PDF清晰版.PDF
精通struts.基於的.java.web設計與開發.pdf
[Struts.2權威指南--基於WebWork核心的MVC開發].李剛.掃描版.pdf
電驢裡面有下
java方面要學習的知識
一:J2SE 面向對象-封裝、繼承、多態
內存的分析
遞歸
集合類、泛型、自動打包與解包、Annotation
IO
多線程、線程同步
TCP/UDP
AWT、事件模型、匿名類
正則表達式
反射機制
2:資料庫(Oracle或者MySQL)
SQL語句
多表連接,內外連接, 子查詢等
管理表、視圖、索引、序列、約束等
樹狀結構存儲
存儲過程、觸發器
資料庫設計三範式、
3:JDBC
JDBC基礎
連接池
樹狀結構存儲與展現
DataSource & RowSet
JDBC連接Oracle及MySQL
4:HTML_CSS_JAVASCRIPT
html、css、javascript基礎語法
JavaScript. Form判斷
Dom編程基礎(事件處理等)
JS常用效果如TreeView、下拉聯動等
JS學習方法
JS調試方法
DreamWeaver初步(建立HTML、Table、Form、CSS)等
5:Servlet & JSP
tomcat基礎
servlet基礎
web.xml配置基礎
web application的結構
servlet生命周期
request response等常用方法
ServletContext類
HTTP協議基礎(GET POST)
Cookie
Session
Application
JSP的幾種語法(包括JSTL等)注意在項目中練習,不要拘泥於語法細節而裹步不前。
6:Struts
多層架構理論
Model 1 and Model 2
Struts基本概念
MVC
Action與業務邏輯類的關系
在Struts與JSP之間傳遞數據
Struts處理流程(控制流)
Struts TagLib(了解常用的)
JSTL
ActionForm.
欄位收集
上傳文件
類型轉換
DTO
動態Action Form.
驗證框架
ActionForward 轉發與重定向
動態生成ActionForward
全局與局部的ActionForward
Action Forward Scope
UnknownActionMapping
Action的線程安全
I18N
如何切換語言環境
Struts異常處理機制 程序處理 自動處理 自定義異常處理器
Struts的多模塊配置
7:XML
(XML/XSL、XSLT/DTD、SCHEMA等基礎的概念、關於Java的編程可以暫時扔在一邊)
8:Hibernate
OR Mapping原理
Hibernate基礎開發步驟
Hibernate基本介面(重點Session)
普通屬性映射
關聯關系映射
Native SQL
inverse lazy cascade
繼承關系映射
HQL
性能優化 一級緩存 二級緩存 查詢緩存
事務與並發 悲觀鎖、樂觀鎖
OpenSessionInView
CurrentSession
(至於JTA、聯合主鍵、自然主鍵、動態主鍵、Any類型 Creteria Queries Intercepter and Event 自定義類型等,可以暫時扔在一邊)
9:Spring
IOC/DI
Spring配置
Spring架構
AOP及Spring AOP
聲明式事務(AOP)
Spring + Hibernate Spring支持Web
Scope
(其他的Spring模塊對於自學來說可以暫時扔在一邊)
10:EJB3.0
J2EE架構基礎(JTA JMS等)
EJB基礎(地位及基本理論、分類等)
Annotation
Ant編譯與部署EJB
Session Bean
EJB的依賴注入
Persistence API
(可以用JBoss學習EJB3.0)
11:SOA
30個目標
1.你需要精通面向對象分析與設計(OOA/OOD)、涉及模式(GOF,J2EEDP)以及綜合模式。你應該十分了解UML,尤其是class,object,interaction以及statediagrams。
2.你需要學習JAVA語言的基礎知識以及它的核心類庫(collections,serialization,streams,networking, multithreading,reflection,event,handling,NIO,localization,以及其他)。
3.你應該了解JVM,classloaders,classreflect,以及垃圾回收的基本工作機制等。你應該有能力反編譯一個類文件並且明白一些基本的匯編指令。
4.如果你將要寫客戶端程序,你需要學習WEB的小應用程序(applet),必需掌握GUI設計的思想和方法,以及桌面程序的SWING,AWT, SWT。你還應該對UI部件的JAVABEAN組件模式有所了解。JAVABEANS也被應用在JSP中以把業務邏輯從表現層中分離出來。
5.你需要學習java資料庫技術,如JDBCAPI並且會使用至少一種persistence/ORM構架,例如Hibernate,JDO, CocoBase,TopLink,InsideLiberator(國產JDO紅工廠軟體)或者iBatis。
6.你還應該了解對象關系的阻抗失配的含義,以及它是如何影響業務對象的與關系型資料庫的交互,和它的運行結果,還需要掌握不同的資料庫產品運用,比如racle,mysql,mssqlserver。
7.你需要學習JAVA的沙盒安全模式(classloaders,bytecodeverification,managers,policyandpermissions,
codesigning, digitalsignatures,cryptography,certification,Kerberos,以及其他)還有不同的安全/認證 API,例如JAAS(),JCE (JavaCryptographyExtension),JSSE(JavaSecureSocketExtension),以及JGSS (JavaGeneralSecurityService)。
8.你需要學習Servlets,JSP,以及JSTL(StandardTagLibraries)和可以選擇的第三方TagLibraries。
9.你需要熟悉主流的網頁框架,例如JSF,Struts,Tapestry,Cocoon,WebWork,以及他們下面的涉及模式,如MVC/MODEL2。
10.你需要學習如何使用及管理WEB伺服器,例如tomcat,resin,Jrun,並且知道如何在其基礎上擴展和維護WEB程序。
11.你需要學習分布式對象以及遠程API,例如RMI和RMI/IIOP。
12.你需要掌握各種流行中間件技術標准和與java結合實現,比如Tuxedo、CROBA,當然也包括javaEE本身。
13.你需要學習最少一種的XMLAPI,例如JAXP(JavaAPIforXMLProcessing),JDOM(JavaforXMLDocumentObjectModel),DOM4J,或JAXR(JavaAPIforXMLRegistries)。
14.你應該學習如何利用JAVAAPI和工具來構建WebService。例如JAX-RPC(JavaAPIforXML/RPC),SAAJ (SOAPwithAttachmentsAPIforJava),JAXB(JavaArchitectureforXMLBinding),JAXM(JavaAPIforXMLMessaging), JAXR(JavaAPIforXMLRegistries),或者JWSDP(JavaWebServicesDeveloperPack)。
15.你需要學習一門輕量級應用程序框架,例如Spring,PicoContainer,Avalon,以及它們的IoC/DI風格(setter,constructor,inte***ceinjection)。
16.你需要熟悉不同的J2EE技術,例如JNDI(JavaNamingandDirectoryInte***ce),JMS (JavaMessageService),JTA/JTS(JavaTransactionAPI/JavaTransactionService),JMX (JavaManagementeXtensions),以及JavaMail。
17.你需要學習企業級JavaBeans(EJB)以及它們的不同組件模式:Stateless/StatefulSessionBeans,EntityBeans(包含Bean- ManagedPersistence[BMP]或者Container-ManagedPersistence[CMP]和它的EJB-QL),或者 Message-DrivenBeans(MDB)。
18.你需要學習如何管理與配置一個J2EE應用程序伺服器,如WebLogic,JBoss等,並且利用它的附加服務,例如簇類,連接池以及分布式處理支援。你還需要了解如何在它上面封裝和配置應用程序並且能夠監控、調整它的性能。
19.你需要熟悉面向方面的程序設計以及面向屬性的程序設計(這兩個都被很容易混淆的縮寫為AOP),以及他們的主流JAVA規格和執行。例如AspectJ和AspectWerkz。
20.你需要熟悉對不同有用的API和frame work等來為你服務。例如Log4J(logging/tracing),Quartz (scheling),JGroups(networkgroupcommunication),JCache(distributedcaching), Lucene(full-textsearch),JakartaCommons等等。
21.如果你將要對接或者正和舊的系統或者本地平台,你需要學習JNI (JavaNativeInte***ce) and JCA (JavaConnectorArchitecture)。
22.你需要熟悉JINI技術以及與它相關的分布式系統,比如掌握CROBA。
23.你需要JavaCommunityProcess(JCP)以及他的不同JavaSpecificationRequests(JSRs),例如Portlets(168),JOLAP(69),DataMiningAPI(73),等等。
24.你應該熟練掌握一種JAVAIDE例如sunOne,netBeans,IntelliJIDEA或者Eclipse。(有些人更喜歡VI或EMACS來編寫文件。隨便你用什麼了:)
25.JAVA(精確的說是有些配置)是冗長的,它需要很多的人工代碼(例如EJB),所以你需要熟悉代碼生成工具,例如XDoclet。
26.你需要熟悉一種單元測試體系(JNunit),並且學習不同的生成、部署工具(Ant,Maven)。
27.你需要熟悉一些在JAVA開發中經常用到的軟體工程過程。例如RUP(RationalUnifiedProcess)andAgilemethodologies。
28.你需要能夠深入了解加熟練操作和配置不同的操作系統,比如GNU/linux,sunsolaris,macOS等,做為跨平台軟體的開發者。
29.你還需要緊跟java發展的步伐,比如現在可以深入的學習javaME,以及各種java新規范,技術的運用,如新起的web富客戶端技術。
30.你必需要對opensource有所了解,因為至少java的很多技術直接是靠開源來驅動發展的,如java3D技術。
㈣ 廖雪峰的python教程有一點地方沒看明白,求指導
題主貼了兩遍函數,似乎是一樣的,下面就分析這一個版本:
defadd_end(L=None):
ifLisNone:
L=[]
L.append('END')
returnL
不明白題主說的專「一直往裡面屬加END」是怎麼回事。函數里既沒有循環也沒有遞歸,怎麼會「一直」加。。。
關於默認參數,其作用是:使add_end()的返回值 與add_end(None)的返回值相同。因此下面不再單獨分析輸入0個參數的情形。
「return的L是全局變數,而傳入的參數L是局部變數」這個說法很奇怪。當傳入的L是None時,該函數的會新生成一個list,向其中加入一個字元串『END』,並返回這個新生成的list。而當傳入的L是一個list,哪怕是空list時,該函數的作用是向傳入的這個L新加一個元素'END',並返回傳入的那個L。
L.append('END')這一行,如果縮進的話:當函數傳入的L不是None時,就不會向傳入的這個L新加一個元素'END'。因此縮進與不縮進的效果是不一樣的。