當前位置:首頁 » 操作系統 » 開服表源碼

開服表源碼

發布時間: 2023-04-05 13:39:08

『壹』 開私服 是不是要獲取游戲的源代碼

不僅要獲取,而且還要修改代碼。很麻煩的

『貳』 如果修改一下一個網頁游戲的源碼再開服,賺錢了算犯法嗎多嚴重謝謝,,

這個問題 你問的比較簡單 但並不是簡單的問題

這里至少會涉及三個情況

  1. 你所謂的修改一下源碼 這個源碼是誰的 自己心裡要有數

    如果你修改的是官方原版程序,這就涉及盜取商業機密,然後才是影響運營平衡的問題

    不要試圖跟任何人說明,不是你拿來的...東西在你手裡就算是第三者花錢買也是犯罪

  2. 如果你所修改的源碼只是仿官方,但是基本一致,那首先擔心的是盜版侵犯知識產權

  3. 對於你個人而言 有沒有資質去運營商業游戲?有沒有文化許可和相關專項備案手續

    這些是基本的行為准則...無證經營甚至有經濟利益或謀取暴利 都是法律不允許的

    而且包括你是自己原創你的程序也沒資質去商業運營.何況還是盜版的...

這個時代是網路時代...是比較容易獲得金錢利益的工具時代

但是更多年輕人在這個時代迷失本性,毫無章程毫無准則,沒分寸沒原則

總是認為只要賺到錢就是自己的,越來越失去基本的做人做事應有的尺度把握

也造成了以後別人侵犯你的權益卻無人為你辯護,失去良性的發展方向

切記一句.因果報應,你現在不顧別人,將來會有無數人棄你於不顧...

『叄』 網站源碼怎麼用

問題一:網站源碼怎麼使用 一般下載的網站源碼,都有後台管理系統的。沒必要在本地修改。
你直接去不復制上傳到你的空間上去。進入後台添加文章類的管理。你想做動態的話要看你的源碼支持不支持。

問題二:怎麼用源碼建立網站 源碼建站的具體操作步驟:
申請虛擬主機(即空間)成功後,就會從官網得到ftp主機名、FTP用戶名和FTP密碼信息,該信息將是上傳網站至內容的唯一憑證;

在網路中搜索「FTP」上傳工具;

安裝並運行「ftpzilla」程序,在程序主界面頂端輸入虛擬主機相關信息,然後點擊「快速連接」按鈕;

此時進行與FTP伺服器之間的通信工作,待連接成功後,就會顯示「連接成功」的提示,同時在「遠程」窗口亂笑中會顯示遠程FTP伺服器目錄結構及文件列表信息;

接下來根據FTP伺服器存儲網站文件的相關聲明,進入遠程FTP伺服器「Public-html」目錄,並將該目錄下的所有文件刪除;

在「本地站點」嘩陵含窗口中,定位到網站源碼所在的上傳目錄,選中所有待上傳的文件,右擊從彈出的右鍵菜單中選擇「上傳」項;

此時所有的網站源碼文件將排隊上傳至遠程伺服器「Public-html」目錄下,且可以在狀態窗口中查看當前文件傳輸情況;

當文件上傳完成後,整個上傳網站源碼至空間操作完成,當本地網站源碼被更新後,為了第一時間實現遠程伺服器端數據的同步更新。

問題三:下載的網站源碼怎麼用 30分 網站源碼到空間首目錄。這樣就可以使用了。(觸:index.asp/php是首頁文件)採納給分

問題四:網站源碼怎麼用, 可以直接拿來修改使用,
源代碼就是程序和軟體的一切,

問題五:後台源碼是什麼啊?怎麼用它做網站? 以下是我自己的理解,並不是什麼標准答案!
一般企業里用的行業軟體都有一台伺服器有若乾颱客戶機。每台客戶機都可以分不同的許可權去更新伺服器上的內容,這是所謂的C/S的軟體!而我剛才所說的成套的系統是指網站,也就是B/S的軟體!C/S軟體由客戶端和伺服器組成,B/S軟體由瀏覽器和伺服器組成!到這里應該就能明白B/S/C這些分別代表什麼……browser(瀏覽器)/server(伺服器)/client(客戶端)。

網站就是B/S軟體,而所謂的軟體應該還具備一些管理功能,如更新,添加,刪除等。後台源碼,其實不應該叫後台源碼,應該說是後台程序,這個後台程序就是實再整個網站的更新,添加,刪除等常用的管理功能!但有一點不得不提一下,兩個反義詞,前/後。前台同樣也具備了這些功能,與後台所不同的只是許可權。如用戶注冊模塊,新用戶注冊時其實是添加數據,注冊完後修改資料這是修改數據……所以說前台也同樣具備管理功能……

至於前台和後台具體的定義是什麼我也不能很肯定的說,在我的理解當中後台只是面對的對象是管理員,前檯面對的對象是所以網站的瀏覽者,但是有些網站就沒有我所說的那種後台,或者說前後台根本就很難區分!

如果硬是要說前台跟後台的區別,我只能說,前台像硬體,看得見,後台像程序,是的,程序,而不是軟體!因為軟體還有界面,這個界面對於軟體來說就是前台!

那麼或者可以這么理解嘩前對是面對客戶的,後台是面對管理員的!

問題六:我自己有網站 請問下怎麼用網站源碼建網站 就是在後台怎麼操作 誰有源碼的網站給分享下 謝謝啦 可以將此模板加在dedecms上,這個需要修改一下html文件,將相關信息替換為dede的標簽調用。具體操作可以網上搜一下dedecms添加模板和dedecms仿站教程。

問題七:怎麼改網站源碼里的圖片 可以在源碼裡面的圖片文件夾里找到對應圖片直接替換,或找到源碼裡面找到圖片位置直接修改數據調用路徑。
網站源碼裡面有一個專門的文件夾是用來放圖片的,網站裡面用的圖片基本上都是從這個文件夾調用。

替換的時候,請注意圖片的屬性要完全相同才能進行替換。

問題八:我在網上下載了一個html代碼 我的網站怎麼使用? 那把相對應的文件上傳到你的空間裡面,然後那個無標題文檔是調用的部分,可以把訂碼拷貝出來,放到你想放置的頁面底部就行了。

問題九:如何編寫汪氏網站源碼 HTML是最基本的,其次也需要javascript用於校驗,css用於設置統一樣式,PhotoShop也必不要少,你不可能永遠都用網上down的圖片吧,總得自己做個整體櫃架模板,然後生成個html靜態頁面,再對其進行修改,剛開始你可以弄弄FrontPage,因為它跟Office一樣簡單,充分理解怎麼用表格來定位,然後再用Dreamweaver,理解怎麼用表格和層來定位,主要還是用表格定位,還有其它很多知識,像Fireworks和Flash都是起輔助作用的,以上說的都是靜態頁面,像動態就更多了,asp asp jsp php等技術至少會一樣,推薦jsp,基於java語言,還有一些其它技術像servlet javabean ejb 櫃架有struts j2ee hibernate等,不說那麼多了,你先把靜態弄明白吧!
來看一下HTML基本概念

1、標記

HTML用於描述功能的符號稱為「標記」。如「HTML」、「BODY」、「TABLE」等。標記在使用是必須用方括弧「」括起來,而且是成對出現,無斜杠的標記表示該標記的作用開始,有斜杠的標記表示該標記的作用結束。如表示一個表格的開始,表標一個表格的結束。在HTML中,標記的大小寫作用相同,如和都是表示一個表格的開始。

標記可以包含標記,如:表格中包含表格或其它標記,如下面這樣的HTML代碼結構是正確的:

hjk

但是標記不能交叉嵌套,如下面這樣的代碼是錯誤的:

這是不正確的代碼

2、特殊字元

由於方括弧和英文雙引號被用來提示HTML的標記及參數值,那麼在網頁中要顯示方括弧和英文引號只能用其它的符號來代替,下面是常見特殊字元所代表的正常字元:

或>對應字元 >

或――對應字元

à――對應字元 A

3、語法

一個標記,為了明確它的功能,往往用一些屬性參數來描述......>>

問題十:網站源碼怎麼用phpstady 提供 php 某個源碼下載地址,此處我們以thinkphp 框架為例
注意:通過其他途徑下載,可能會因為文件不全,致使源碼部署運行之後出現異常錯誤。所以推薦您使用我為您提供的軟體和源碼。

php 源碼 thinkphp_3.2.3_full.zip下載之後,解壓並改文件名為:thinkphp。

phpstudy.zip 下載之後,解壓得到:phpStudy2014.exe,manual.chm,使用說明.txt 等文件,請雙擊打開解壓到D:\phpstudy 即可,

完成之後,phpstudy會自動開啟mysql,apache系統服務,此時可用360加速求查看正在運行的服務

雙擊打開桌面上的 phpstudy 圖標,即可開啟php運行環境。

如果 你的 apache mysql 顯示紅色按鈕,那麼表示沒有啟動成功,請點擊 啟動或者重啟 按鈕,直到全部綠色為止。如果一直啟動不了。這是屬於apache mysql系統伺服器異常, 請嘗試使用注冊表清理軟體清理之後,再重新解壓phpstudy 軟體。

完成以上步驟之後,phpstudy+php源碼 基礎情況已經OK,接下來 進行 部署代碼 和 運行代碼。

把前面的源碼文件夾thinkphp 復制到D:\phpStudy\WWW 下

根據如下圖。點擊:My HomePage ,我們打開網站根目錄和mysql資料庫(點擊:phpMyAdmin)。

歡迎使用 ThinkPHP!

版本 V3.2.3

那麼表示 部署成功

之後,您可以通過修改 D:\phpStudy\WWW\thinkphp 目錄下的 php文件代碼,實現php程序 的運行。

7

【10】,如果您的程序是需要連接mysql資料庫的,那麼您必須創建相應的資料庫。

(1)首先是登錄

( 2 ) 接著是創建資料庫

(3)一般的程序有安裝程序,根據安裝步驟,再資料庫安裝環節,填寫下圖中提到的用戶名 密碼 資料庫名即可

『肆』 高分求免費的,php+mysql的,在線表格管理源碼

開網店的話,下載個ECSHOP,不是簡單很多嗎。

『伍』 收全民奇跡奇跡源代碼或一條龍架設開服,支持面交的來,價格好說,專業對付騙子,不服來試,誠心的朋友

加我球球:905724378 全民奇跡源碼和其他游戲都有

『陸』 求系統編程的源代碼下載網站,最好是簡單點的,別太復雜

1、JDK (Java Development Kit)Java開發工具集
從初學者角度來看,採用JDK開發Java程序能夠很快理解程序中各部分代碼之間的關系,
有利於理解Java面向對象的設計思想。JDK的另一個顯著特點是隨著Java (J2EE、J2SE
以及J2ME)版本的升級而升級。但它的缺點也是非常明顯的就是從事大規模企業級Java
應用開發非常困難,不能進行復雜的Java軟體開發,也不利於團體協同開發。
2、Java Workshop
3、NetBeans 與Sun Java Studio 5

NetBeans是開放源碼的Java集成開發環境(IDE),適用於各種客戶機和Web應用。
Sun Java Studio是Sun公司最新發布的商用全功能Java IDE,支持Solaris、Linux和Win
dows平台,適於創建和部署2層Java Web應用和n層J2EE應用的企業開發人員使用。

NetBeans是業界第一款支持創新型Java開發的開放源碼IDE。開發人員可以利用業界
強大的開發工具來構建桌面、Web或移動應用。同時,通過NetBeans和開放的API的模塊
化結構,第三方能夠非常輕松地擴展或集成NetBeans平台。

NetBeans3.5.1主要針對一般Java軟體的開發者,而Java One Studio5則主要針對企
業做網路服務等應用的開發者。Sun不久還將推出Project Rave,其目標是幫助企業的開
發者進行軟體開發。NetBeans 3.5.1版本與其他開發工具相比,最大區別在於不僅能夠
開發各種台式機上的應用,而且可以用來開發網路服務方面的應用,可以開發基於J2ME
的移動設備上的應用等。在NetBeans 3.5.1基礎上,Sun開發出了Java
One Studio5,為用戶提供了一個更加先進的企業編程環境。在新的Java
One Studio5里有一個應用框架,開發者可以利用這些模塊快速開發自己在網路服務方面
的各種應用程序。
4、Borland 的JBuilder

Jbuilder進入了Java集成開發環境的王國,它滿足很多方面的應用,尤其是對於服
務器方以及EJB開發者們來說。下面簡單介紹一下Jbuilder的特點:

1)Jbuilder支持最新的Java技術,包括Applets、JSP/Servlets、JavaBean以及EJB
(Enterprise JavaBeans)的應用。

2)用戶可以自動地生成基於後端資料庫表的EJB Java類,Jbuilder同時還簡化了EJ
B的自動部署功能.此外它還支持CORBA,相應的向導程序有助於用戶全面地管理IDL(分布
應用程序所必需的介面定義語言Interface Definition Language)和控制遠程對象。

3)Jbuilder支持各種應用伺服器。Jbuilder與Inprise Application Server緊密集
成,同時支持WebLogic Server,支持EJB 1.1和EJB 2.0,可以快速開發J2EE的電子商務
應用。

4)Jbuilder能用Servlet和JSP開發和調試動態Web 應用。

5)利用Jbuilder可創建(沒有專有代碼和標記)純Java2應用。由於Jbuilder是用純J
ava語言編寫的,其代碼不含任何專屬代碼和標記,它支持最新的Java標准。

6)Jbuilder擁有專業化的圖形調試介面,支持遠程調試和多線程調試,調試器支持
各種JDK版本,包括J2ME/J2SE/J2EE。

JBuilder環境開發程序方便,它是純的Java 開發環境,適合企業的J2EE開發;缺點
是往往一開始人們難於把握整個程序各部分之間的關系,對機器的硬體要求較高,比較
吃內存,這時運行速度顯得較慢。
5、Oracle 的JDeveloper

Oracle9i JDeveloper(定為9.0版,最新為10g)為構建具有J2EE功能,XML和Web
services的復雜的,多層的Java應用程序提供了一個完全集成的開發環境。它為運用Ora
cle9i資料庫和應用伺服器的開發人員提供特殊的功能和增強性能,除此以外,它也有資
格成為用於多種用途Java開發的一個強大的工具。

Oracle9i JDeveloper的主要特點如下:

① 具有UML(Unified Modeling Language,一體化建模語言)建模功能。可以將業
務對象及e-business應用模型化。

② 配備有高速Java調試器(Debuger)、內置Profiling工具、提高代碼質量的工具
「CodeCoach」等。

③ 支持SOAP(Simple Object Access Protocol)「簡單對象訪問協議」、UDDI(U
niversal Description, Discovery and Integration)「統一描述、發現和集成協議」
、WSDL(Web Services Description Language)「WEB服務描述語言」等Web服務標准。

JDeveloper 不僅僅是很好的 Java 編程工具,而且是 Oracle Web 服務的延伸,支
持 Apache SOAP,以及 9iAS ,可擴充的環境和 XML 和 WSDL 語言緊密相關。Oracle9i
Jdeveloper完全利用Java編寫,能夠與以前的Oracle伺服器軟體以及其他廠商支持J2EE
的應用伺服器產品相兼容,而且在設計時著重針對Oracle9i,能夠無縫化跨平台之間的
應用開發,提供了業界第一個完整的、集成了J2EE和XML的開發環境,允許開發者快速開
發可以通過Web、無線設備及語音界面訪問的Web服務和交易應用,以往只能通過將傳統J
ava編程技巧與最新模塊化方式結合到一個單一集成的開發環境中之後才能完成J2EE應用
開發生命周期管理的事實,從根本上得到改變。缺點就是對於初學者來說,較復雜,也
比較難。
6、IBM的Visual Age for Java

Visual Age for Java是一個非常成熟的開發工具,它的特性以於IT開發者和業余的
Java編程人員來說都是非常用有用的。它提供對可視化編程的廣泛支持,支持利用CICS
連接遺傳大型機應用,支持EJB的開發應用,支持與Websphere的集成開發,方便的bean
創建和良好的快速應用開發(RAD)支持和無文件式的文件處理。

IBM為建設Web站點所推出的WebSphere Studio Advanced Edition及其包含的Visual
Age for Java Professional Edition軟體已全面轉向以Java為中心,這樣,Java開發人
員對WebSphere全套工具的感覺或許會好了許多。Studio所提供的工具有:Web站點管理
、快速開發 JDBC頁向導程序、HTML編輯器和HTML語法檢查等。這確實是個不錯的HTML站
點頁面編輯環境。Studio和VisualAge集成度很高,菜單中提供了在兩種軟體包之間快速
移動代碼的選項。這就讓使用Studio的Web頁面設計人員和使用VisualAge的Java程序員
可以相互交換文件、協同工作。

Visual Age for Java支持團隊開發,內置的代碼庫可以自動地根據用戶做出改動而
修改程序代碼,這樣就可以很方便地將目前代碼和早期版本做出比較。與Visual Age緊
密結合的Websphere Studio本身並不提供源代碼和版本管理的支持,它只是包含了一個
內置文件鎖定系統,當編輯項目的時候可以防止其他人對這些文件的錯誤修改,軟體還支
持諸如Microsoft Visual SourceSafe這樣的第三方源代碼控制系統。Visual Age for
Java完全面向對象的程序設計思想使得開發程序非常快速、高效。你可以不編寫任何代
碼就可以設計出一個典型的應用程序框架。Visual Age for Java作為IBM電子商務解決
方案其中產品之一,可以無縫地與其他IBM產品,如WebSphere、DB2融合, 迅速完成從設
計、開發到部署應用的整個過程。

Visual Age for Java獨特的管理文件方式使其集成外部工具非常困難,你無法讓Vis
ual Age for Java與其他工具一起聯合開發應用。
7、BEA 的 WebLogic Workshop

BEA WebLogic Workshop是一個統一、簡化、可擴展的開發環境,使所有的開發人員
都能在 BEA WebLogic Enterprise Platform之上構建基於標準的企業級應用,從而提高
了開發部門的生產力水平,加快了價值的實現。

WebLogic Workshop除了提供便捷的Web服務之外,它能夠用於創建更多種類的應用
。作為整個BEA WebLogic Platform的開發環境。不管是創建門戶應用、編寫工作流、還
是創建Web應用,Workshop 8.1都可以幫助開發人員更快更好地完成。

WebLogic Workshop的主要特點如下:

① 使 J2EE 開發切實可行,提高開發效率

BEA WebLogic Workshop 使開發人員遠離 J2EE 內在的復雜性,集中精力專注業務
邏輯,無須操心單調乏味的基礎結構代碼。這種創新意味著,已被企業驗證的 J2EE 的
強大功能,最終被大多數不熟悉 Java 和 J2EE 的應用開發人員所掌握,從而使 IT 部
門的工作效率提高一個數量級。

可視化設計器以及直觀的概念,如事件、屬性和控制項等,實現了基於事件的開發。W
orkshop 簡化的程序設計模型,使開發人員不必掌握復雜的 J2EE API 和面向對象的程
序設計原理。所有開發人員,包括 J2EE 專家和具有可視化和過程化語言技能的應用開
發人員在內,都可以共同工作在 BEA WebLogic Enterprise Platform 之上。Workshop
的可視化開發環境,創建帶有代碼注釋的標准 Java 文件,用來說明由運行時框架實施
的企業級需求。J2EE 和其他高級開發人員,藉助功能強大的代碼編輯功能,可以訪問
Java 源代碼,從而彌補了可視化設計器的不足。

② 構建企業級應用

通過在可伸縮、安全可靠的企業級架構上實施各種應用,BEA WebLogic
Workshop 大大降低了開發風險。而且,所有應用的創建都使用標準的 J2EE 組件,既保
護了您的技術投資,又保持了最大的靈活性。
BEA WebLogic Workshop 運行框架,是統一整個架構的匯聚層,使單一、簡化的程序設
計模型擴展到所有的 BEA WebLogic Enterprise Platform 應用類型。通過解釋設計時
創建的注釋代碼,運行時框架可以實現必要的 J2EE 組件,並且提取出與 J2EE 應用開
發有關的所有底層細節。

③ 降低 IT 復雜性

BEA WebLogic Workshop 提供各種 Java 控制項,使得與 IT 資源的連接更輕而易舉
。另外,在構建任何 BEA WebLogic Platform 的應用中,Java 控制項不僅可擴展而且完
全相同。這種強大、有效的方法能夠:降低 IT 技術的復雜性,優化信息的可用性,推
動包含"最佳業務方案"的可重用服務的開發,使開發人員能以更低的成本、更短的時間
實現更大的產出。

利用 BEA WebLogic Workshop,任何開發人員都能以最大的生產效率,構建各種
Web 服務、Web 應用、門戶和集成項目。BEA WebLogic Workshop是BEA的產品戰略核心
,它幫助客戶接觸和利用面向服務架構(SOA)的強大功能。BEA Weblogic Workshop
8.1極大簡化了當前實際企業集成環境中企業級應用和服務的構建,並成為全面支持關鍵
企業級應用(如非同步、真正松耦合和粗粒度消息傳送等)的自然選擇。它的缺點就是過於
復雜,對於初學者來說,理解起來較為困難。
8、WebGain 的Visual Cafe for Java

Visual Cafe 是只能在Symantec公司的Java虛擬機、Netscape公司的Java虛擬機和M
icrosoft虛擬機上工作的調試器。這對於開發者來講是一個重要的特性,因為用戶開發的
Java代碼中的許多軟體bug就可能中會在某種特定的虛擬機上起作用。

在修改後進行編譯基繼續進行調試時,Visual Cafe會自動將文件存檔,使用Visual
Cafe創建的原生應用具有許多特點。除了明顯的速度提高之外,Symantec使類庫的二進制
方式比正常的JDK小Visual Cafe為所指定的關系自動生成或更新必要的Java代碼。利用V
isual Cafe,用戶可以從一個標准對象資料庫中集合完整的Java應用程序和Applet,而
不必再編寫源代碼。Visual Cafe還提供了一個擴充的源代碼開發工具集。

Visual Cafe綜合了Java軟體的可視化源程序開發工具,它允許開發人員在可視化視
圖和源視圖之間進行有效地轉換。在可視化視圖中進行的修改立即反映在源代碼中。對
源代碼的改變自動更新可視化視圖。

Visual Cafe具有許多源文件方面的特性,如全局檢索和替換。絕大多數Java開發工
具的文獻的問題在於簡單地挨個介紹開發工具的每部分組件,但用戶在開應用時還需要
一個面向任務的手冊,利用這個手冊你可以不必知道工具每一部分的特定功能就可以開
始創建自己的應用。Visual Cafe提供了非常全面的用戶指南,它對最開始的安裝到創建
第一個Java應用和Applet都提供了全面的幫助,Visual Cafe將自動生成所指明關系的必
要Java代碼。Visual Cafe可以在Windows 95和Windows NT平台下運行,Symantec公司為
Java開發工作提供一個在Macintosh操作系統下可以運行的RAD工具。Visual Cafe編譯器
速度很快,在國際化支持方面比較突出;缺點就是對於初學者來說,較復雜,也比較難

9、Macromedia的JRUN

Macromedia公司的JRun是一個具有最廣闊適用性的Java引擎,用於開發及實施由Jav
a Servlets和JavaServer Pages編寫的伺服器端Java應用。JRun是第一個完全支持JSP
1.0 規格書的商業化產品,全球有超過80,000名開發人員使用JRun在他們已有的Web服務
器上添加伺服器端Java的功能。其中Web伺服器包括了Microsoft IIS,Netscape
Enterprise Server,Apache等。

JRun是開發實施伺服器端Java的先進引擎。如果我們希望在我們的Web應用中添加服
務器端Java功能,那麼JRun將成為我們的正確選擇。

JRun目前有3個版本,它是第一個支持Java Server Pages(JSP)規格書1.0的商業化
產品。JSP是一種強大的伺服器端技術,它是用於創建復雜Web應用的一整套快速應用開
發系統。JRun可以使我們開始開發並測試Java應用。它最多接受5個並發的連接並且包括
全部Java Servlet API,支持JavaServer Pages(JSP),支持所有主要的Web
servers和計算機平台。 JRun Pro能夠在生產環境下承受大訪問量的負載,幫助我們實
施應用、服務或Web站點(包括內聯網)。JRun Pro 支持無限量並發式連接運行多個Jav
a虛擬機,包括多個並發的Java虛擬機(JVM)。提供一個遠程管理applet以及一個遠程
可再分布式的管理applet。JRun Pro Unlimited包括了所有JRun Pro的功能,除次以外
,還可以運行無限量的,並發的JVM。

JRun依靠其內置的JRun Web Server可以單獨運行。使用伺服器端Java,用戶可以開
發出復雜的商業應用系統。最重要的一點是,由於servlets的平台獨立性,以及更加簡
單的開發、更快速的實施、更經濟的維護成本,它是CGI(Common Gateway
Interface)或Perl scripts的極佳的替代產品。缺點就是對於初學者來說,較復雜,也
比較難。
10、JCreator

JCreator 是一個Java程序開發工具,也是一個Java集成開發環境(IDE)。無論你
是要開發Java應用程序或者網頁上的Applet元件都難不倒它。在功能上與Sun公司所公布
的JDK等文字模式開發工具相較之下來得容易,還允許使用者自訂義操作窗口界面及無限
Undo/Redo等功能。

JCreator為用戶提供了相當強大的功能,例如項目管理功能,項目模板功能,可個
性化設置語法高亮屬性、行數、類瀏覽器、標簽文檔、多功能編繹器,向導功能以及完
全可自定義的用戶界面。通過JCreator,我們不用激活主文檔而直接編繹或運行我們的J
AVA程序。

JCreator能自動找到包含主函數的文件或包含Applet的Html文件,然後它會運行適
當的工具。在JCreator中,我們可以通過一個批處理同時編繹多個項目。JCreator的設
計接近Windows界面風格,用戶對它的界面比較熟悉。其最大特點是與我們機器中所裝的
JDK完美結合,是其它任何一款IDE所不能比擬的。它是一種初學者很容易上手的java開
發工具,缺點是只能進行簡單的程序開發,不能進行企業J2EE的開發應用。

11、Microsoft VJ++

Visual J++ 是Microsoft 公司推出的可視化的Java 語言集成開發環境(IDE),為Ja
va 編程人員提供了一個新的開發環境,是一個相當出色的開發工具。無論集成性、編譯
速度、調試功能、還是易學易用性,都體現了Microsoft 的一慣風格。Visual J++ 具有
下面的特點:

1)Visual J++ 把Java 虛擬機(JVM)作為獨立的操作系統組件放入Windows,使之從
瀏覽器中獨立出來。

2)Microsoft 的應用基本類庫(AFC,Application Foundation Class Library)對SU
N 公司的JDK 作了擴展,使應用基本類庫更加適合在Windows 下使用。

3) Visual J++ 的調試器支持動態調試,包括單步執行、設置斷點、觀察變數數值
等。

4) Visual J++ 提供了一些程序向導(Wizards)和生成器(Builders),它們可以方
便地幫助用戶快速地生成Java 程序,幫助你在自己的工程中創建和修改文件。

5) Visual J++ 界面友好,其代碼編輯器具有智能感知、聯機編譯等功能,使程序
編寫十分方便。Visual J++ 中建立了Java 的WFC,這一新的應用程序框架能夠直接訪問
Windows 應用程序介面(API),使你能夠用Java 語言編寫完全意義上的Windows 應用程
序。

6)Visual J++ 中表單設計器的快速應用開發特性使用WFC 創建基於表單的應用程
序變得輕松、簡單。通過WFC 可以方便地使用ActiveX 數據對象(ADO,ActiveX Data
Objects)來檢索數據和執行簡單數據的綁定。通過在表單設計器中使用ActiveX 數據對
象,可以快速地在表單中訪問和顯示數據。

Visual J++能結合微軟的一貫的編程風格,很方便進行Java 的應用開發,但它的移
植性較差,不是純的Java 開發環境。
12、Eclipse

Eclipse是一種可擴展的開放源代碼IDE。2001年11月,IBM公司捐出價值4,000萬美
元的源代碼組建了Eclipse聯盟,並由該聯盟負責這種工具的後續開發。集成開發環境(I
DE)經常將其應用范圍限定在「開發、構建和調試」的周期之中。為了幫助集成開發環境
(IDE)克服目前的局限性,業界廠商合作創建了Eclipse平台。Eclipse允許在同一IDE中
集成來自不同供應商的工具,並實現了工具之間的互操作性,從而顯著改變了項目工作
流程,使開發者可以專注在實際的嵌入式目標上。

Eclipse框架的這種靈活性來源於其擴展點。它們是在XML中定義的已知介面,並充
當插件的耦合點。擴展點的范圍包括從用在常規表述過濾器中的簡單字元串,到一個Jav
a類的描述。任何Eclipse插件定義的擴展點都能夠被其它插件使用,反之,任何Eclipse
插件也可以遵從其它插件定義的擴展點。除了解由擴展點定義的介面外,插件不知道它
們通過擴展點提供的服務將如何被使用。

利用Eclipse,我們可以將高級設計(也許是採用UML)與低級開發工具(如應用調試器
等)結合在一起。如果這些互相補充的獨立工具採用Eclipse擴展點彼此連接,那麼當我
們用調試器逐一檢查應用時,UML對話框可以突出顯示我們正在關注的器件。事實上,由
於Eclipse並不了解開發語言,所以無論Java語言調試器、C/C++調試器還是匯編調試器
都是有效的,並可以在相同的框架內同時瞄準不同的進程或節點。

Eclipse的最大特點是它能接受由Java開發者自己編寫的開放源代碼插件,這類似於
微軟公司的Visual Studio和Sun微系統公司的NetBeans平台。Eclipse為工具開發商提供
了更好的靈活性,使他們能更好地控制自己的軟體技術。Eclipse聯盟已經宣布將在2004
年中期發布其3.0版軟體。這是一款非常受歡迎的java開發工具,這國內的用戶越來越多
,實際上實用它java開發人員是最多的。缺點就是較復雜,對初學者來說,理解起來比
較困難。
13、Ant

Another Neat Tool(Ant)是一種基於Java的build工具。理論上來說,它有些類似於
(Unix)C中的make ,但沒有make的缺陷。因為Ant的原作者在多種(硬體)平台上開發軟
件時,無法忍受這些工具的限制和不便。類似於make的工具本質上是基於shell(語言)
的:他們計算依賴關系,然後執行命令(這些命令與你在命令行敲的命令沒太大區別)
。這就意味著你可以很容易地通過使用OS特有的或編寫新的(命令)程序擴展該工具;
然而,這也意味著你將自己限制在了特定的OS,或特定的OS類型上,如Unix。Ant就不同
了。與基於shell命令的擴展模式不同,Ant用Java的類來擴展。(用戶)不必編寫shell
命令,配置文件是基於XML的,通過調用target樹,就可執行各種task。每個task由實現
了一個實現了特定Task介面的對象來運行。

Ant支持一些可選task,一個可選task一般需要額外的庫才能工作。可選task與Ant
的內置task分開,單獨打包。這個可選包可以從你下載Ant的同一個地方下載。ANT本身
就是這樣一個流程腳本引擎,用於自動化調用程序完成項目的編譯,打包,測試等。除
了基於JAVA是平台無關的外,腳本的格式是基於XML的,比make腳本來說還要好維護一些
。Ant是Apache提供給Java開發人員的構建工具,它可以在Windows OS和Unix OS下運行
,它不僅開放源碼並且還是一個非常好用的工具。Ant是Apache Jakarta中一個很好用的
Java開發工具,Ant配置文件採用XML文檔編寫,所以Java程序員對其語法相當熟悉,Ant
是專用於Java項目平台,能夠用純Java來開發,它能夠運行於Java安裝的平台,即體現
了它的跨平台功能。它的缺點顯示執行結果只能是DOS字元界面,不能進行復雜的java程
序開發。
14、IntelliJ

Intellij IDEA是一款綜合的Java 編程環境,被許多開發人員和行業專家譽為市場
上最好的IDE。它提供了一系列最實用的的工具組合:智能編碼輔助和自動控制,支持J2
EE,Ant,JUnit和CVS集成,非平行的編碼檢查和創新的GUI設計器。IDEA把Java開發人
員從一些耗時的常規工作中解放出來,顯著地提高了開發效率。具有運行更快速,生成
更好的代碼;持續的重新設計和日常編碼變得更加簡易,與其它工具的完美集成;很高
的性價比等特點。在4.0版本中支持Generics,BEA WebLogic集成,改良的CVS集成以及G
UI設計器。

IntelliJ IDEA能盡可能地促進程序員的編程速度。它包括了很多輔助的功能,並且
與Java結合得相當好。不同的工具窗口圍繞在主編程窗口周圍,當滑鼠點到時即可打開
,無用時也可輕松關閉,使用戶得到了最大化的有效屏幕范圍。以技術為導向的IDEA集
成了調試器,支持本地和遠程的調試,即使我們需要修改一些設置上的東西使我們的工
作順利進展。另外,它還提供了通常的監視,分步調試以及手動設置斷點功能,在這種
斷點模式下,我們可以自動地在斷點之外設置現場訪問,甚至可以瀏覽不同的變數的值
。IDE支持多重的JVM設置,幾個編譯程序和Ant建造系統,並且,它使得設置多重的自定
義的類途徑變得簡單。

IntelliJ Idea是一個相對較新的Java IDE。它是Java開發環境中最為有用的一個。
高度優化的IntelleJ Idea使普通任務變得相當容易,Idea支持很多整合功能,更重要的
使它們設計的好容易使用。Idea支持XML中的代碼實現,Idea同時還會校正XML,Idea支
持JSP的結構。作用於普通Java代碼的眾多功能同樣適用於JSP(比如整合功能),同時
支持JSP調試;支持EJB,盡管它不包括對個別應用伺服器的特殊支持。Idea支持Ant建立
工具,不僅是運行目標它還支持編譯與運行程序前後運行目標,另外也支持綁定鍵盤快
捷鍵。在編輯一個Ant建立XML文件時,Idea還對組成Ant工程的XML部分提供支持。Intel
liJ IDEA 被稱為是最好的JAVA IDE開發平台,這套軟體就是以其聰明的即時分析和方便
的 refactoring 功能深獲大家所喜愛。缺點是較復雜,對初學者來說,理解起來比較困
難。

小結

現在常用的Java項目開發環境有:JBuilder、VisualAge for Java、Forte for
Java, Visual Cafe、Eclipse、NetBeans IDE、JCreator +J2SDK、jdk+記事本、EditPl
us+ J2SDK等等。一般開發J2EE項目時都需要安裝各公司的應用伺服器(中間件)和相應
的開發工具,在使用這些開發工具之前,我們最好能熟知這些軟體的優點和缺點,以便
根據實際情況選擇應用。編程工具只是工具,為了方便人們工作而開發的,各有特點,
因此,選工具主要的依據自己將要從事的領域是什麼,而不是盲目的認為那種工具好,
那種工具不好。最後希望大家都能找到自己合適的java 開發工具

『柒』 XXL admin 源碼解析

xxl-job 的 admin 服務是 xxl-job 的調度中心,負責管理和調度注冊的 job,關於 xxl-job 的使用,可以閱讀 「參考閱讀」 中的《XXL-JOB分布式調度框架全面詳解》,這里主要是介紹 admin 中的源碼。

admin 服務除了管理頁面上的一些介面外,還有一些核心功能,比如:

1、根據 job 的配置,自動調度 job;

2、接收 executor 實例的請求,實現注冊和下線;

3、監視失敗的 job,進行重試;

4、結束一些異常的 job;

5、清理和統計日誌;

這些功能都是在 admin 服務啟動後,在後台自動運行的,下面將詳細介紹 admin 服務這些功能敏罩的實現。

XxlJobAdminConfig 是 admin 服務的配置類,在 admin 服務啟動時,它除了配置 admin 服務的一些參數外,還會啟動 admin 服務的所有後台線程。

該類的屬性主要分為5類:

1、配置文件中的參數,比如 accessToken;

2、DAO 層各個數據表的 mapper;

3、Spring 容器中的一些 Bean,比如 JobAlarmer、DataSource 等;

4、私有變數 XxlJobScheler 對象;

5、私有靜態變數 adminConfig,指向實例自身。

該類有兩個重要方法,分別實現自介面 InitializingBean、DisposableBean,作用如下:

這兩個方法分別調用了 XxlJobScheler 對象的 init 、 destroy 方法,源碼如下:

XxlJobAdminConfig 作為 admin 服務的配置類,作用就是在 Spring 容器啟動時,調用 XxlJobScheler 的初始化方法,來初始化和啟動 admin 服務的功能。

XxlJobScheler 的作用就是調用各個輔助類(xxxHelper)來啟動和結束不同的線程和功能,初始化方法 init 的代碼如下:

下面我們主要介紹 init 中各個類及其作用,最後再簡單一下介紹 destroy 的作用纖拿森。

當 admin 服務向 executor 實例發出一個調度請求來執行 job 時,會調用 XxlJobTrigger.trigger() 方法把要傳輸的參數(比如 job_id、jobHandler、job_log_id、阻塞策略等,包裝成 TriggerParam 對象)傳給 ExecutorBiz 對象來執行一次調度。

xxl-job 對調度過程做了兩個優化:

JobTriggerPoolHelper 在 toStart 方法中初始化了它的兩個線程池屬性,代碼如下:

每次有調度請求時,就會在這兩個線程池中創建線程,創建線程的邏輯在 addTrigger 方法中。

不同 job 存在執行時長的差異,為了避免不同耗時 job 之間相互阻塞,xxl-job 根據 job 的響應時間,對 job 進行了區分,主要體現在:

如果快 job 與調用頻繁的慢 job 在同一個線程池中創建線程,慢 job 會佔用大量的線程,導致快 job 線程不能及時運行,降低了線程池和線程的利用率。xxl-job 通過快慢隔離,避免了這個問題。

不能,因為慢 job 還是會佔用大量線程,搶佔了快 job 的線程資源;增加線程池中的線程數不但沒有提升利用率,還會導致大量線程看空閑,利用率反而降低了。最好的方法還是用兩個線程池把兩者隔離,可以合理地使用各自線程池的資源。

為了記錄慢 job 的超時次毀畝數,代碼中使用一個 map(變數 jobTimeoutCountMap )來記錄一分鍾內 job 超時次數,key 值是 job_id,value 是超時次數。在調用 XxlJobTrigger.trigger() 方法之前,會先判斷 map 中,該 job_id 的超時次數是否大於 10,如果大於10,就是使用 slowTriggerPool,代碼如下:

調用 XxlJobTrigger.trigger() 方法後,根據兩個值來更新 jobTimeoutCountMap 的值:

和上面的代碼相結合,一個 job 在一分鍾內有10次調用超過 500 毫秒,就認為該 job 是一個 頻繁調度且耗時的 job。

代碼如下:

在該類中,屬性變數 minTim 和 jobTimeoutCountMap 都使用 volatile 來修飾,保證了並發調用 addTrigger 時數據的一致性和可見性。

admin 服務發起 job 調度請求時,是在靜態方法 public static void trigger() 中調用靜態變數 private static JobTriggerPoolHelper helper 的 addTrigger 方法來發起請求的。minTim 和 jobTimeoutCountMap 雖然不是 static 修飾的,但可以看做是全局唯一的(因為持有它們的對象是全局唯一的),因此這兩個參數維護的是 admin 服務全局的調度時間和超時次數,為了避免記錄的數據量過大,需要每分鍾清空一次數據的操作。

admin 服務提供了介面給 executor 來注冊和下線,另外,當 executor 長時間(90秒)沒有發心跳時,要把 executor 自動下線。前一個功能通過暴露一個介面來接收請求,後一個功能需要開啟一個線程,定時更新過期 executor 的狀態。

xxl-job 為了提升 admin 服務的性能,在前一個功能的介面接收到 executor 的請求時,不是同步執行,而是在線程池中開啟一個線程,非同步執行 executor 的注冊和下線請求。

JobRegistryHelper 類就負責管理這個線程池和定時線程的。

線程池的定義和初始化代碼如下:

executor 實例在發起注冊和下線請求時,會調用 AdminBizImpl 類的對應方法,該類的方法如下:

可以看到,AdminBizImpl 類的兩個方法都是調用了 JobRegistryHelper 方法來實現,其中 JobRegistryHelper.registry 方法代碼如下(registryRemove 代碼與之相似):

這兩個方法是通過在線程池 registryOrRemoveThreadPool 中創建線程來非同步執行請求,然後把數據更新或新建到數據表 xxl_job_registry 中。

當 executor 注冊到 admin 服務後(數據入庫到 xxl_job_registry 表),是不會在頁面上顯示的,需要要用戶手動添加 job_group 數據(添加到 xxl_job_group 表),admin 服務會自動把用戶添加的 job_group 數據與 xxl_job_registry 數據關聯。這就需要 admin 定時從 xxl_job_group 表讀取數據,關聯 xxl_job_registry 表和 xxl_job_group 表的數據。

這個功能是與 「executor 自動下線」 功能在同一個線程中實現,該線程的主要邏輯是:

相關代碼如下:

從這里可以看出,如果是對外介面(接收請求等)的功能,使用線程池和非同步線程來實現;如果是一些自動任務,則是通過一個線程來定時執行。

如果一個 Job 調度後,沒有響應返回,需要定時重試。作為一種「自動執行」的任務,很顯然可以像前面 JobRegistryHelper 一樣,使用一個線程定時重試。

在這個類中,定義了一個監視線程,以每10 秒一次的頻率運行,對失敗的 job 進行重試。如果 job 剩餘的重試次數大於0,就會 job 進行重試,並把發送告警信息。線程的定義如下:

在這個線程中,它利用 「資料庫執行 UPDATE 語句時會加上互斥鎖」 的特性,使用了 「基於資料庫的分布式鎖」,代碼如下所示:

在這個語句中,會把 jobLog 的狀態設置為 -1,這是一個無效狀態值,當其他線程通過有效狀態值來搜索失敗記錄時,會略過該記錄,這樣該記錄就不會被其他線程重試,達到的分布式鎖的功能(這個鎖是一個行鎖)。或者說,-1狀態類似於 java 中的對象頭的鎖標志位,表明該記錄已經被加鎖了,其他線程會「忽略」該記錄。

在 try 代碼塊中加鎖和解鎖,如果加鎖後重試時拋出異常,會導致該記錄永遠無法解鎖。所以,應該在 finnally 塊中執行解鎖操作,或者使用 redis 給鎖加一個過期時間來實現分布式鎖。

從失敗的日誌中取出 jobId,查詢出對應的 jobInfo 數據,如果日誌中的剩餘重試次數大於 0,就執行重試。代碼如下:

調度任務使用的就是前面介紹的 JobTriggerPoolHelper.trigger 方法,最後更新 jobLog 的 alarm_status 值,有兩個作用:

這個類與 JobRegistryHelper 類似,都有一個線程池、一個線程,通過前面 JobRegistryHelper 的學習,可以大膽猜測:

實際上,該類中線程池和線程的作用就是用來 「完成」 一個 job。

當 executor 接收到 admin 的調度請求後,會非同步執行 job,並立刻返回一個回調。

admin 接受到回調後,和前面的 「注冊、下線」 一樣,在線程池中創建線程來處理回調,主要是更新 job 和日誌。

當有回調請求時, public callback 方法(該方法被 AdminBizImpl 調用)會在線程池中創建一個線程,遍歷回調請求的參數列表,依次處理回調參數,代碼如下:

從代碼可以看出,最後調用 XxlJobCompleter.updateHandleInfoAndFinish 方法完成回調邏輯。

如果一個 job 較長時間前被調度,但是一直處於 「運行中」 且它所屬的 executor 已經超過 90 秒沒有心跳了,那麼可以認為該 job 已經丟失了,需要把該 job 結束掉。這個就是線程 monitorThread 的主要功能。

monitorThread 會以 60秒 一次的頻率,從 xxl_job_log 表中找出 10分鍾前調度、仍處於」運行中「狀態、executor 已經下線 的 job,然後調用 XxlJobCompleter.updateHandleInfoAndFinish 來更新 handler 的信息和結束 job,代碼如下:

從代碼可以看出,上面的兩個功能最後都調用了 XxlJobCompleter.updateHandleInfoAndFinish 方法,關於該方法的介紹,可以看後面 XxlJobCompleter 部分的介紹,這里不詳細展開。

如果去看 XxlJobTrigger.triger 方法,會發現每次調度 job 時,都會先新增一個 jobLog 記錄,這也是為什麼 JobFailMonitorHelper 中的線程在重試時,先查詢 jobLog 的原因。

JobLog 作為 job 的調度記錄,還可以用來統計一段時間內 job 的調度次數、成功數等;另外,會清理超出有效期(配置的參數 logretentiondays )的日誌,避免日誌數據過大。很顯然,這又是一個 」自動任務「,可以使用一個線程定時完成。

該類持有一個線程變數,線程以 每分鍾一次的頻率,執行兩個操作:

在線程 run 方法的前半部分,線程會統計 3 天內,每天的調度次數、運行次數、成功運行數、失敗次數;然後更新或新增 xxl_job_log_report 表的數據。

在線程 run 方法的後半部分,線程按天對日誌進行清理,如果當前時間與上次清理的時間相隔超過一天,就會清理日誌記錄,代碼如下:

如果不使用參數 lastCleanLogTime 來記錄上次清理的時間,只是清理一天前創建的數據記錄。那麼該線程每分鍾執行一次時,都會刪除前天當前時刻的數據,導致前一年的數不完整。

使用參數 lastCleanLogTime 來記錄上次清理的時間,並且與當前時間相差超過一天時才清理,能保證前一天的日誌是完整的。

不明白為什麼清理日誌時,不是一次性刪除全部的過期日誌,而是每次刪除 1000條。按理說,這些舊的日誌數據應該已經不在 buffer pool 中了,trigger_time 欄位又是普通索引,那麼 DELETE 操作會先更新到 change buffer 中,之後再合並。現在先查詢再刪除,相當於多了一次 IO 且沒有使用到 change buffer。

admin 服務是用來管理和調度 job 的,用戶也可以在它的管理後台新建一個 job,配置 CRON 和 JobHandler,然後 admin 服務就會按照配置的參數來調度 job。很顯然,這種「自動化工作」也是由線程定時執行的。

1、如果使用線程調度 Job,存在的第一個問題是:如果某個 Job 在調度時比較耗時,就可能阻塞後續的 Job,導致後續 job 的執行有延遲,怎麼解決這個問題?

在前面 JobTriggerPoolHelper 我們已經知道,admin 在調度 job 時是 」使用線程池、線程「 非同步執行調度任務,避免了主線程的阻塞。

2、使用線程定時調度 job,存在的第二個問題是:怎麼保證 job 在指定的時間執行,而不會出現大量延遲?

admin 使用 」預讀「 的方式,提前讀取在未來一段時間內要執行的 job,提前取到內存中,並使用 「時間輪演算法」 按時間分組 job,把未來要執行的 job 下一個時間段執行。

3、還隱藏第三個問題:admin 服務是可以多實例部署的,在這種情況下該怎麼避免一個 job 被多個實例重復調度?

admin 把一張數據表作為 「分布式鎖」 來保證只有一個 admin 實例能執行 job 調度,又通過隨機 sleep 線程一段時間,來降低線程之間的競爭。

下面我們就通過代碼來了解 xxl-job 是怎麼解決上述問題的。

在該類中,定義了一個調度線程,用來調度要執行的 job 和已經過期一段時間的 job,定義代碼如下:

該線程會預讀出 「下次執行時間 <= now + 5000 毫秒內」 的部分 job,根據它們下一次執行時間劃分成三段,執行三種不同的邏輯。

1、下次執行時間在 (- , now - 5000) 范圍內

說明過期時間已經大於 5000 毫秒,這時如果過期策略要求調度,就調度一次。代碼如下:

2、下次執行時間在 [now - 5000, now) 范圍內

說明過期時間小於5000毫秒,只能算是延遲不能算是過期,直接調度一次,代碼如下:

如果 job 的下一次執行時間在 5000 毫秒以內,為了省下下次預讀的 IO 耗時,這里會記錄下 job id,等待後面的調度。

3、下次執行時間在 [now, now + 5000) 范圍內

說明還沒到執行時間,先記錄下 job id, 等待後面的調度 ,代碼如下:

上面的3個步驟結束後,會更新 jobInfo 的 trigger_last_time、trigger_next_time、trigger_status 欄位:

可以看到,通過預讀,一方面會把過期一小段時間的 job 執行一遍,另一方面會把未來一小段時間內要執行的 job 取出,保存進一個 map 對象 ringData 中,等待另一個線程調度。這樣就避免了某些 job 到了時間還沒執行。

因為 admin 是可以多實例部署的,所以在調度 job 時,需要考慮怎麼避免 job 被多次調度。

xxl-job 在前面 JobFailMonitorHelper 中遍歷失敗的 job 時,會對每個 job 設置一個無效的狀態作為 」分布式行鎖「,如果設置失敗就跳過。而在這里,如果還使用該方法,有可能出現,一個 job 被設置為無效狀態後,線程就崩潰了,導致該 job 永遠無法被調度。因此,要盡量避免對 job 狀態的修改。

在這里,admin 服務使用一張表 xxl_job_lock 作為分布式鎖,每個 admin 實例都要先嘗試獲取該表的鎖,獲取成功才能繼續執行;同時,為了降低不同實例之間的競爭,會在線程開始執勤隨機 sleep 一段時間。

如何獲取分布式鎖?

在線程中會開啟一個事務,設置為手動提交,然後對表 xxl_job_lock 執行 FOR UPDATE 查詢。如果該線程執行語句成功,其他實例的線程就會排隊等待該表的鎖,實現了分布式鎖功能。代碼如下:

怎麼降低鎖的競爭?

為了降低鎖競爭,在線程開始前會先 sleep 4000 5000 毫秒的隨機值(不能大於 5000 毫秒,5000 毫秒是預讀的時間范圍);在線程結束當前循環時,會根據耗時和是否有預讀數據,選擇不同的 sleep 策略:

代碼如下:

在前面的線程中,對即將要開始的 job,不是立刻調度,而是按照執行的時刻(秒),把 job id 保存進一個 map 中,然後由 ringThread 線程按時刻進行調度,這只典型的「時間輪演算法」。代碼如下:

每次輪詢調度時,只取出當前時刻(秒)、前一秒內的 job,不會去調度與現在相隔太久的 job。

在執行輪詢調度前,有一個時間在 0 1000 毫秒范圍內的 sleep。如果沒有這個 sleep,該線程會一直執行,而 ringData 中當前時刻(秒)的數據可能已經為空,會導致大量無效的操作;增加了這個 sleep 之後,可以避免這種無效的操作。之所以 sleep 時間在 1000 毫秒以內,是因為調度時刻最小精確到秒,一秒的 sleep 可以避免 job 的延遲。

因為在前面的 scheleThread 線程中,最後一個操作是把 job 的 next_trigger_time 值更新為大於 now + 5000 毫秒,其他 admin 實例 scheleThread 線程的查詢條件是:next_trigger_time < now + 5000,不會查詢出這里調度的 job,所以不需要加分布式鎖。

至此,XxlJobScheler-init 方法的作用我們介紹完畢,下面我們簡單介紹一下 XxlJobScheler-destroy 方法

destroy 方法很簡單,就是銷毀前面初始化的線程池和線程,它銷毀的順序與前面啟動的順序相反。

代碼如下:

因為各個 toStop 方法都很相似,所以我們只介紹 JobScheleHelper 的 toStop 方法。

該方法的步驟如下:

1、設置停止標志位為 true;

2、sleep 一段時間,讓出 CPU 時間片給線程執行任務;

3、如果線程不是終止狀態(線程正在 sleep),中斷它;

4、線程執行 join 方法,直到線程結束,執行最後一次。

代碼如下:

至此,JobScheleHelper 的主要功能就介紹完了,可以看出, admin 服務在啟動時,啟動了多個線程池和線程,非同步執行任務和非同步響應 executor 的請求。

下面,我們介紹前面涉及到的 XxlJobTrigger 和 XxlJobCompleter。

XxlJobTrigger 是調度 job 時的封裝類,它主要工作就是接受傳入的 jobId、調度參數等,查詢對應的 jobGroup、jobInfo,然後調用 ExecutorBiz 對象來執行調度(run 方法)。

該類中三個核心方法及其調用關系如下: trigger -> processTrigger -> runExecutor ,

該方法的功能比較簡單,就是根據傳入的參數查詢 jobGroup 和 jobInfo 對象,設置相關的欄位值,然後調用 processTrigger 方法。

該方法的主要工作分為以下幾步:

1、保存一條調度日誌;

2、從 jobInfo、jobGroup 中取出欄位值,構造 TriggerParam 對象;

3、根據 jobInfo 的路由策略,從 jobGroup 中取出要調度的 executor 地址;

4、調用 runExecutor 方法執行調度;

5、保存調度參數、設置調度信息、更新日誌。

這里不會修改 jobInfo、jobGroup 對象的欄位值,只取出欄位值來使用,對這兩個對象欄位的修改,是在前一步 trigger 方法中進行的。

該方法會執行調度,並返回調度結果,它的核心代碼如下:

這里使用 XxlJobScheler 類取出 ExecutorBiz 對象,以 「懶載入」 的方式給每個 address 創建一個 ExecutorBiz 對象,代碼如下:

可以看出,該類中的三個方法其實可以歸類為:pre -> execute -> post,在執行前、執行時、執行後做一些前置和收尾工作。

該類在前面 JobCompleteHelper 中被使用,最終 job 的完成就是在該類中執行的,該類有兩個主要方法:

下面主要介紹 finishJob 方法。

finishJob 的主要功能是:如果當前任務執行成功了,就調度它的所有子任務,最後把子任務的調度消息添加到當前 job 的日誌中。代碼如下:

需要注意的是:

1、這里依賴於 JobTriggerPoolHelper 來調度 job,所以在 JobCompleteHelper 的監視線程開始時,有一個 50 秒的等待,就是等待 JobTriggerPoolHelper 啟動完成;

2、在 finishJob 方法中,調度子任務的時候,默認子任務的調度結果是成功,注意,這里是指 「調度」 這個行為是成功的,而不是指子任務執行是成功的。

1、XxlJobAdminConfig 作為 admin 服務的啟動入口,要盡可能保持簡潔,作用類似於一個倉庫,來管理和持有所有的類和對象,並不會去啟動具體的線程,它只需要「按下啟動器的按鈕」就可以了;

2、XxlJobScheler 是 admin 服務的啟動器類,它會調用各個輔助類(xxxHelper)來啟動對應的線程;

3、對外的介面,比如調度 job、接收注冊或下線等,都是使用線程池 + 線程 的非同步方式實現,避免 job 對主線程的阻塞;

4、對「自動任務「類的功能,都是使用線程定時執行;

XXL-JOB分布式調度框架全面詳解: https://juejin.cn/post/6948397386926391333

時間輪演算法:https://spongecaptain.cool/post/widget/timingwheel

一個開源的時間輪演算法介紹:https://spongecaptain.cool/post/widget/timingwheel2

『捌』 開源的股票軟體源代碼誰知道從哪找到

最近即將發布該軟體的全部源碼,關於這個代碼的由來我在網路發布的帖子被該公司全部刪除,為了澄清事實,我將建立一個開源軟體網站,我看你們有多大本事能封鎖事實真相,與其把代碼給一個沒良心的公司不如徹底開源讓對金融軟體有興趣的朋友做個參考,也算拋磚引玉,這個代碼是3年前的東西了我目前開發的商業代碼不打算開源.

如果這個帖子訪問量超過1000,我就發布代碼,請大家轉發到各技術群

這個是C#開發的股票軟體

我是09年7月到風軟入職的,我入職前已經做了一個股票分析軟體,09年5月發布到網上的,7月到了風軟上班,當時2個月就把我帶過去的代碼移植到衍生品交易客戶端,由於當時討論自動交易的問題我就提出自己想法,做一個腳本解析系統,能解決這個問題,但是公司所謂高手們群起攻之,這方案沒實施,後來李說我不幹活,馬找我談話,說我工作態度不行,但是實際上是沒有分配工作給我,我就離職了,我於是又改起了自己的股票軟體,大概3月的時間寫了3萬行代碼基本實現了通達信軟體的功能,就算是對自己想法的交待.

時過境遷,2011年我在金融界招聘員工,鍾平生過來面試,說起了風軟的圖表分析的問題,說換了好幾撥人,現在都沒法用了,我到公司看看果然如此,我就好心幫他們,把3萬行代碼包括技術指標都給他們了,後來去了3次幫助他們整合系統,年後給我打電話說給我800塊錢說是給代碼付的費用,實際上我每次去風軟都是打車去的,來回140,我當時也沒說啥

2012年我沒什麼事情,還問他們控制項用的如何,又沒有問題,他說還有點我就去公司坐了幾天班把問題都修復了,後來幫他們做了一個直接連接資料庫的客戶端修改到iis宿主的remoting方案的demo,剛做完當天下午就找我談話,說我發布了對公司不利消息,我難道說的不是事實么,我說我以後就不來了吧,還說我給公司的代碼是當時在公司任職時帶出來修改的,做人怎麼能這么沒有良心呢.我分明是09年7月帶自己代碼到公司的,有當年帖子為證

http://www.chcj.net/thread-1456369-1-1.html,我沒從風軟帶出1行代碼都是我給風軟代碼

從始至終一直在貶低我,不知道做人怎麼能這樣.他說投資1000萬到公司了,一共不到100萬行代碼,一行代碼就算10塊錢,我白送他們的代碼居然說我賣給他的,我那代碼3萬行給我800,真可笑,要是賣給你你買的起么.如果100行3塊錢這么廉價,你為啥那麼著急就發布到公司的產品阿,做人講點良心好不好啊.還說我給的代碼他們自己都能做,那這2年你的人換了那麼多怎麼就沒做出來啊,我給你那代碼後期擴展到伺服器自動交易的方法都告訴你了,為啥這么沒有良心啊,後來坐班給他們修改的報酬也沒有給,白給的代碼老想說成是自己的,還不想給錢

另外的代碼是有著作權的,如果泄露到第三方要承擔法律責任的,如果沒有我的授權發布到產品里就是侵權

『玖』 問道游戲架設步驟 問道游戲私服架設源碼

1、伺服器一台,1-1-1也可以搭建,但人數不可以多,任務開啟不可多下載鏈接裡面的服務端搭建教程:1.先安裝寶塔2、放行安全組的相應埠具體要放行的埠有:3306、888、8888、5000、8101、8110、8120、8160-8168(這個是范圍之8160是一線,依次類推)

2、安裝資料庫配置環境

3、登陸寶塔面板,在首頁彈出的框中選擇要安裝的環境,第三個不用選擇,其中mysql改為5.1,phpmyadmin改為4.0,然後選擇編譯安裝即可。等待大約30-50分鍾自動安裝結束

4、配置資料庫設置資料庫的超級用戶(root)的密碼,並添加允許遠程訪問的root賬戶②、用寶塔面板的軟體管理頁面,重載mysql服務配置,使我們添加的遠程訪問生效

5、開始部署游戲數據①、第一次使用N11連接到我們伺服器的mysql資料庫(連接編碼選擇utf8),執行all.sql文件以創建游戲所需的資料庫和基礎數據②、斷開資料庫連接,設置資料庫連接編碼為936,然後重新連接,將dl_adb_all資料庫轉存為sql文件(結構和數據)③、用n++編輯我們保存好的dl_adb_all.sql文件,具體操作就是替換裡面的所有外網ip為我們自己的伺服器ip,如果需要改區名,就替換裡面的所有問道一區為你想要的區名④、用n11刪除掉dl_adb.all資料庫中的表,然後運行我們保存的dl_adb_all.sql文件進行重建表結構和數據

6、部署伺服器端的文件配置伺服器端文件,修改aaa ccs csa dba目錄下的ini配置文件的信息①修改資料庫相關的IP為127.0.0.1,修改***_daili的地址為伺服器的IP②修改數據密碼為我們設置的資料庫密碼2、復制線路驅動文件rungs(想架設幾條線就復制幾個),復制gs/gs目錄下的gs1.ini文件(同樣是幾條線路就復制幾個)①修改gs1.ini中的ip為伺服器IP②修改gs*.ini中的線路名分別問你自己資料庫中設置的線路名

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:741
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372