當前位置:首頁 » 操作系統 » javascript數據結構與演算法

javascript數據結構與演算法

發布時間: 2023-02-02 07:23:39

1. 《學習javaScript數據結構與演算法(第2版)》pdf下載在線閱讀,求百度網盤雲資源

《學習JavaScript數據結構與演算法(第2版)》([巴西] Loiane Groner)電子書網盤下載免費在線閱讀

資源鏈接:

鏈接: https://pan..com/s/1qVjMRp_K-qR33b2OSpBqaA

提取碼: 9gpf

書名:學習JavaScript數據結構與演算法(第2版)

作者:[巴西] Loiane Groner

譯者:鄧鋼

豆瓣評分:7.3

出版社:人民郵電出版社

出版年份:2017-9

頁數:232

內容簡介:本書首先介紹了JavaScript 語言的基礎知識以及ES6 和ES7 中引入的新功能,接下來討論了數組、棧、隊列、鏈表、集合、字典、散列表、樹、圖等數據結構,之後探討了各種排序和搜索演算法,包括冒泡排序、選擇排序、插入排序、歸並排序、快速排序、堆排序、計數排序、桶排序、基數排序、順序搜索、二分搜索,然後介紹了動態規劃和貪心演算法等常用的高級演算法以及函數式編程,最後還介紹了如何計算演算法的復雜度。

作者簡介:Loiane Groner

花旗銀行軟體開發經理,負責海外項目的開發和團隊管理;原IBM公司系統分析師及團隊負責人;巴西坎皮納斯Java用戶組(CampinasJUG)領導者、聖埃斯皮里圖Java用戶組(ESJUG)協調人;巴西各大型技術會議特邀發言人;Sencha和Java技術佈道者,通過博客(http://loianegroner.com)為軟體開發社區撰稿,發表關於IT職業發展和常用開發技術的文章和視頻。另著有《精通Ext JS》等書。

2. 學習javascript需要掌握演算法和數據結構么

開始學習JavaScript不需要演算法和數據結構,等到深入學習時可以學習演算法和數據結構。開始要學習JavaScript的語法和應用場景(各種瀏覽器對JavaScript的解析)。

3. 小白,想入門程序員,應該從什麼開始學,順序是什麼

首選是選擇一門合適的語言,比如說:Python、Java、C、C++、GO語言等;其次,選擇合適的學習方式,比如培訓,周末班、脫產班還是網路班。

【程序員的初學者入門的方法】如下:
1、明確編程的本質。
2、 必要的輔助工具與技能。
(1)學會使用git指令和github;
(2)挑選一款合適的IDE會使編程體驗和效率大大提升,IDE即集成開發環境,是用於提供程序開發環境的應用程序;
(3)明確學習的方向,不同的劃分標准下有不同的開發方向,如按編程語言劃分有JAVA,Python,C/C++, Javascript,Ruby,PHP,etc;
3、選擇合適的學習方式與方法。
(1)學好所有相關的專業課程,無論它多麼枯燥乏味;
(2)不要質疑老師讓你閱讀代碼、抄寫代碼的意義。

想了解更多有關入門程序員的詳情,推薦咨詢達內教育。達內教育具有強大的師資力量,優秀的教學體系,教學質量突出,實戰講師,經驗豐富,理論知識+學習思維+實戰操作,打造完整學習閉環。達內教育獨創TTS8.0教學系統,並設有企業雙選會;同時,達內的OMO教學模式,已經全新升級,線上線下交互學習,直播學,隨時學,隨時問,反復學,讓學院上課安排更便捷。【感興趣的話點擊此處,免費學習一下】

4. 《學習JavaScript數據結構與演算法(第2版)》pdf下載在線閱讀全文,求百度網盤雲資源

《學習JavaScript數據結構與演算法(第2版)》([巴西] Loiane Groner)電子書網盤下載免費在線閱讀

鏈接:

提取碼: 3478

書名:學習JavaScript數據結構與演算法(第2版)

作者:[巴西] Loiane Groner

譯者:鄧鋼

豆瓣評分:7.3

出版社:人民郵電出版社

出版年份:2017-9

頁數:232

內容簡介:

本書首先介紹了JavaScript 語言的基礎知識以及ES6 和ES7 中引入的新功能,接下來討論了數組、棧、隊列、鏈表、集合、字典、散列表、樹、圖等數據結構,之後探討了各種排序和搜索演算法,包括冒泡排序、選擇排序、插入排序、歸並排序、快速排序、堆排序、計數排序、桶排序、基數排序、順序搜索、二分搜索,然後介紹了動態規劃和貪心演算法等常用的高級演算法以及函數式編程,最後還介紹了如何計算演算法的復雜度。

作者簡介:

Loiane Groner

花旗銀行軟體開發經理,負責海外項目的開發和團隊管理;原IBM公司系統分析師及團隊負責人;巴西坎皮納斯Java用戶組(CampinasJUG)領導者、聖埃斯皮里圖Java用戶組(ESJUG)協調人;巴西各大型技術會議特邀發言人;Sencha和Java技術佈道者,通過博客(http://loianegroner.com)為軟體開發社區撰稿,發表關於IT職業發展和常用開發技術的文章和視頻。另著有《精通Ext JS》等書。

5. 《數據結構與演算法JavaScript描述》pdf下載在線閱讀,求百度網盤雲資源

《數據結構與演算法JavaScript描述》([美] Michael McMillan)電子書網盤下載免費在線閱讀

資源鏈接:

鏈接: https://pan..com/s/1SKHIQQUQI4TeMcxKY9AiaQ

提取碼: 35v4

書名:數據結構與演算法JavaScript描述

作者:[美] Michael McMillan

譯者:王群鋒

豆瓣評分:6.6

出版社:人民郵電出版社

出版年份:2014-8

頁數:216

內容簡介:

通過本書的學習,讀者將能自如地選擇最合適的數據結構與演算法,並在JavaScript開發中懂得權衡使用。此外,本書也概述了與數據結構與演算法相關的JavaScript特性。

本書主要內容如下。

數組和列表:最常用的數據結構。

棧和隊列:與列表類似但更復雜的數據結構。

鏈表:如何通過它們克服數組的不足。

字典:將數據以鍵-值對的形式存儲

散列:適用於快速查找和檢索。

集合:適用於存儲只出現一次的元素。

二叉樹:以層級的形式存儲數據。

圖和圖演算法:網路建模的理想選擇。

演算法:包括排序或搜索數據的演算法。

高級演算法:動態規劃和貪心演算法。

作者簡介:

作者簡介:

Michael McMillan

作為大學老師和程序員,曾編寫過多部受到好評的數據結構與演算法圖書,包括Data Structures and Algorithms Using C#、Data Structures and Algorithms Using Visual Basic.NET,以及其他計算機教程,如Object-Oriented Programming with Visual Basic.NET、C++ Programming: An Introction、Java Programming Tutorial、Perl from the Ground Up等。Michael現在阿肯色州北小石城普瓦斯基技術學院當講師,教授計算機信息系統。他還是北小石城阿肯色大學的兼職講師,教授信息科學。在做講師之前,他曾是阿肯色兒童醫院的一名程序設計師/分析師,負責統計計算和數據分析。

譯者簡介:

王群鋒

1981年生於陝西省富平縣橋西大隊三里村,2004年畢業於西安電子科技大學。畢業後當了一名程序員,現居西安,在IBM西安研發中心從事下一代統計預測軟體的開發工作。

杜歡

淘寶網高級技術專家,2012年加入淘寶,曾就職於雅虎台灣及CISCO。對前端架構、前後端協作有自己的見解,專注於Web產品設計、可用性實施,熱愛標准化。

6. java script學習方法

先學習語法基礎 跟vb語言有點類似 學習步驟可以按下面來:
一、在頁面中怎麼添加javascript
<script language=」javascript」> //這行是javascript腳本標記,斜杠後面的就是注釋了
document.write(」在頁面顯示的javascript」) //在頁面顯示一句話
</script>
/*這也是注釋*/

二、javascript的數據類型
1、字元串(string):字元串就是由一連串的字元組成的序列。包括字母、數字以及標點符號。當然還可以是漢字等。簡單一點就是表示文本信息。

2、數字(number):數字又分為兩類:整型數字和浮點型數字。
整數包括正整數,零和負整數。
javascript中的數字可以使用十進制、八進制和十六進制來書寫。方法如下:
十進制:15(直接寫數字即可)
八進制:017(要以零做為引導數字)
十六進制:0xf(要以0x做為引導數字)
浮點型數字也叫實數,為了方便,也可以使用科學記數法來表示:
1.13e1、1.5e3(等價於1.5乘10的3次方)
javascript的數字范圍大約為10的負308次方到10的308次方之間。
javascript中還有一個特殊的數字值NaN(not a number),javascript 用nan表示這個無意義的結果。

3、布爾值(boolean):true和false,在計算機中一般用1表示true,用0表示false。

三、alert()方法的使用:
<script language=」javascript」>
alert(」在頁面上顯示警告對話框」);
</script>
alert()是javascript產生一個帶確認按鈕的對話框,上面顯示括弧內的信息。

四、confirm()方法的使用:
<script language=」javascript」>
confirm(」在頁面上顯示確認對話框」);
</script>
confirm()和alert()差不多,不同的就是多了個取消按鈕。按確定返回true,按取消返回false。
<script language=」javascript」>
var con;
con=confirm(」你們喜歡這樣的教程嗎?」);
if (con==true) alert(」喜歡」);
else alert(」不喜歡」);
</script>

五、prompt()方法的使用:
<script language=」javascript」>
var name,age;
name=prompt(」請問您的名字?」);
alert(name);
age=prompt(」多大?」);
alert(age);
</script>
它不但可以顯示信息,而且可以輸入信息。

六、javascript變數
用var加上為變數指定的名稱來聲明變數,變數類型可以通過給變數賦值來確定。由於javascript採用的是弱類型的樣式,對數據類型要求不太嚴格,在程序執行的過程中,會根據需要自動轉換。
字元串變數,可以通過「變數名.length」來獲得該變數中字元串的長度,如
var name;
name=」javascript」;
那麼name.length的值就是10。
若在一行中創建多個變數時,記住用逗號來隔開變數名。各語句用分號隔開。(使用分號是個好習慣, 大家在學習的時候盡量養成加分號的習慣)
類型轉換:javascript允許在程序中改變變數的類型,最常見的兩個類型轉換符Number和String。
Number(x)是字元型值——〉數字值型。String與之相反。相對於javascript的自動類型轉換,可以將這種轉換成為強制類型轉換。(強制類型轉換需要在javascript1.2及以上版本才可以使用)

變數的命名:
1.必須以字母或下劃線開頭,中間可以有字母數字和或下劃線。不能使用空格、+、-等其他符號。
作為連字元外,變數名稱不能有空格、(+)、(-)、(,)或其它符號。
2.不能使用JavaScript中的關鍵字作為變數。
(javascript變數名是區分大小寫的,name和Name是不一樣的。)

對於變數還有一個重要性──那就是變數的作用域。在JavaScript中同樣有全局變數和局部變數。全局變數是定義在所有函數體之外,其作用范圍是整個函數;而局部變數是定義在函數體之內,只對其該函數是可見的,而對其它函數則是不可見的。
如果局部變數和全局變數重名,則局部變數優先。js沒有塊級作用域。函數中聲明的所有的變數,作用域是相同的。

變數的類型規則
javascript是無類型的,他的變數可以放任何數據類型的值。
變數的聲明
在javascript程序中,在使用變數之前,必須先聲明它。變數是使用關鍵字var聲明的。而實際上,不一定要先聲明變數,在某些情況下,變數聲明是可選的。
var i;
var sum;
也可以使用一個var關鍵字聲明多個變數;
var i,sum;
而且還可以將變數聲明和變數初始化綁定在一起:
var message = 『hello』;
var i = 0,j=0,k=0;
由var聲明的變數是永久的,因為各瀏覽器對是否可以刪除全局性的變數的態度是不同的,(都可以刪除局部變數)為了安全,最好假設全局變數不可刪除。
可以使用var多次聲明同一個變數,當你給一個沒有聲明的變數賦值時,js會自動用哪個變數為你創建一個全局變數。如果你想在函數內部創建一個局部變數。那就必須用var在函數內部聲明。

七、javascript表達式和運算符
表達式:在定義完變數後,就可以對它們進行賦值、改變、計算等一系列操作,這一過程通常由表達式來完成,可以說它是變數、常量、布爾及運算符的集合,因此表達式可以分為算術表述式、字串表達式、賦值表達式以及布爾表達式等。
1.算術運算符:+(加) 、-(減)、 *(乘)、 /(除)、 %(取模) -(取反)、++(遞加1)、–(遞減1)。
例:11%2=1 ; 如果x=2 ++x+4=7 x+++4=6(++x是先執行加1,x++是執行完語句之後x在自加1)
例子:
<script>
var i=0, j=0;
alert(i++ + 」 」 + ++j + 」 」 + i);
// 輸出 「0 1 1」,可見i++是先輸出了i,然後進行運算,而++j是先對j進行了自加運算,然後輸出j的值
</script>
2.比較運算符:<(小於)、>(大於)、<=(小於等於)、>=(大於等於)、==(等於)、!=(不等於)
(基本操作過程是,首先對它的操作數進行比較,然後再返回一個true或False值。)
3.邏輯運算符:!(取反)、&=(與之後賦值)、 &(邏輯與)、 |=(或之後賦值)、 |(邏輯或)、^=(異或之後賦值)、 ^(邏輯異或)、 ?:(三目操作符)、||(或)、&& (與)==(等於)、|=(不等於)。
4.字元串運算符:只有+ (」my「+」javascript「結果等於」my javascript「)
5.賦值運算符:即=,將右邊的值賦給左邊的變數。
6.條件運算符:(?:)例:status=(age>=18)?」alt」:」child」;如果大於18,則表達式的值為alt。
7.typeof()運算符:用來返回變數或數據的類型。

八、IF語句。
if (條件)
語句段1
else
語句段2
功能:若表達式為true,則執行語句段1;否則執行語句段2。
說明:
if -else 語句是JavaScript中最基本的控制語句,通過它可以改變語句的執行順序。
表達式中必須使用關系語句,來實現判斷,它是作為一個布爾值來估算的。
它將零和非零的數分別轉化成false和true。
若if後的語句有多行,則必須使用花括弧將其括起來。

九、window.com()的用法
1、基本語法
window.open(pageURL,name,parameters)
其中:
pageURL 為子窗口路徑
name 為子窗口句柄
parameters 為窗口參數(各參數用逗號分隔)
2. 窗口參數
其中yes/no也可使用1/0; value為具體的數值,單位象素。
toolbar=yes,no 是否顯示工具條
location=yes,no 是否顯示網址欄
directories=yes,no 是否顯示導航條
status=yes,no 是否顯示狀態條
menubar=yes,no 是否顯示菜單
scrollbars=yes,no 是否顯示滾動條
resizable=yes,no 是否可以改變公告窗口大小
history=yes,no 是否顯示歷史按鈕
width=value 公告窗口的寬
height=value 公告窗口的高
left=value 公告窗口的左上頂點距屏幕左邊100像素
top=value 公告窗口的左上頂點距屏幕頂端100像素
例:
<script language=」javascript」>
<!–
window.open(」00000.html」,」newwindow」,」toolbar=no,location=no,directories=no,status=no,menubar=no,
scrollbars=no,resizable=no,history=no,width=500,height=500,left=100,top=100″) //–>
</script>

十、for循環。另外就是數據類型。既for in
將字元串轉換為數值:
javascript語言提供兩個內置函數將表示數值的字元串轉換為真實的數值:parseInt()和parseFloat()。
為了使用這些函數,需要將進行轉換的字元串作為參數傳入函數,例:
parseInt(」42″) //result=42
parseInt(」42.33″) //result=42
不過是浮點數還是整數,函數返回的值都是整數。不存在四捨五入,小數點和它後面的數字將被舍棄。
而parseFloat()則返回浮點數(如果是整數就返回整數),例:
parseFloat(」42″) //result=42
parseFloat(」42.33″) //result=42.33
如果在某處需要進行字元串的轉換,只需將函數插入該初即可。如:
3+3+parseInt(」3″) //result=9

將數值轉換為字元串:
雖然當遇到表達式中含有混合數據類型時,js會傾向於字元串。但為了防止潛在的問題發生,最好先轉換以下。在數值中加入空字元串就可以把數值轉換為字元串了:
(」"+2500) //result=」2500″
(」"+2500).length //result=4

For循環:
javascript中最常用的循環結構稱之為for循環,關鍵詞放在循環結構的開始位置。正式語法結構如下:
for ([initial expression];[condition];[update expression]){
statement[s] inside loop
}
例:
for(var i=0;i<9;i++)
{
n+=i
myfunc(n)
}
for…in循環:
這個語句完全依照變數var所設定的值決定運行次數。你可以用for…in語句在一個對象或一個數組上建立循環
for(var in [obj | array])
{
statements
}
例:
<script language=」javascript」>
document.write(」The properties of the document object」)
for(var element in document){
document.write(element+」=」+document[element])
}
</script>

十一、滑鼠事件
主要內容就是基於滑鼠的事件,有如下幾種:
1.mouseover(滑鼠移至)
2.mouseout(滑鼠移出)
3.mousemove(滑鼠移動)
4.mousedown(滑鼠按下)
5.mouseup(滑鼠彈起)
6.click(單擊)
7.dblclick(雙擊)
例子:
<html>
<head>
<title>test</title>
<script language=」javascript」>
function text_onmouseover(){
mytext.style.fontSize=」30pt」;
mytext.style.color=」red」;
mytext.style.fontStyle=」italic」;
}
function text_onmouseout(){
mytext.style.fontSize=」20pt」;
mytext.style.color=」blue」;
mytext.style.fontStyle=」normal」;
}
</script>
</head>
<body>
<p id=mytext onmouseover=」text_onmouseover()」 onmouseout=」text_onmouseout()」>http://www.javascript.com.cn</p>
<p>看看字體樣式有什麼變化</p>
</body>
</html>
8.mouseDown事件和mouseUp事件
大家知道,mouseDown事件和mouseUp事件的組合就是click事件,但是如果在鏈接上按下滑鼠,並移到鏈接之外在放開滑鼠,那麼就只有mouseDown事件了。這兩個事件可以增加圖標按鈕的圖像效果,
至於mouseDown和mouseUp的屬性,它們是伴隨著Click事件發生的,這和keyPress事件是keyDown事件和keyUp事件組合而成的機制是一樣的,這3個滑鼠事件也有modifier屬性。
(注意:如果在onClick事件處理中使用return語句,它可以接收任何數值。只要這個值不是False,瀏覽器就可以完成提交。但如果瀏覽器得到的是False值,表單提交操作就會被取消。)
9.Click事件和dbClick事件
onClick是單擊事件,onDblClick是雙擊事件,而實際上很難分清連續的單擊和雙擊。它們會互相干擾。而且在ie和其他瀏覽器的情況還有不同。有的瀏覽器是雙擊事件的每一次單擊都會觸發單擊事件,而在ie中,只有雙擊事件的第一次單擊會觸發單擊事件。不管怎麼樣,單擊事件都不會自動的取消或被忽略。因此,如果想使用單擊和雙擊一個鏈接時觸發兩個完全不同的過程,則必須通過編程來延遲單擊的動作知道雙擊。
<script>
var timer=null;
document.onclick=new Function(」timer=setTimeout(click,500)」)
document.ondblclick=new Function(」clearTimeout(timer);dblclick()」)
function click(){
alert(」click」)
}
function dblclick(){
alert(」dblclick」)
}
</script>

十二、javascript函數.
函數是有function加函數名和一對帶有參數括弧,以及大括弧組成的,其中大括弧里是主體javascript語句.
例:
function hanshuname(js) //hanshuname是函數名.
{
document.write(js,」<br>」); //是函數的主體語句.
}
函數可以嵌套,如下:
function qiantao(a,b){
function lqiantao(x){return x*x;}
return Math.sqrt(lqiantao(a)+lqiantao(b));
}
函數還可以作為數據來應用,因此可以象處理其他數據那樣來處理函數,如:賦值,存儲,傳遞等.
例:
function (x){return x*x;}
實際上,函數名沒有什麼意義,不過是保存函數的變數名而已.
a=(6);//a存放的是數字36;
b=;//現在b和引用同一個函數.
c=b(5);//c存放的是數字25.
在一個函數體內,標識符arguments總是具有特殊含義,它是調用對象的一個特殊屬性,用來引用實際參數對象.這個實際參數對象具有大量有用的屬性.除此之外,它還兼有數組的角色.
盡管定義javascript函數時都有固定的參數,但調用這個函數時,傳遞給它的參數數目卻可以是任意的,數組arguments[]允許完全存取那些實際參數值.另外,arguments有一個length屬性,看如下例子:
function (x,y,z)
{
if(arguments.length !=3){
alert(」function called with」+arguments.length+」arguments,but it expects 3 arguments.」);
return null;
}
}
數組arguments[ ]還為javascript函數開發了一項重要的可能性,既可以將函數編寫為能夠接受任意數目的實際參數.
function ()
{
var m=Number.NEGATIVE_INFINITY;
//遍歷所有參數
//檢索並記憶最大的一個.
for(var i=0;i<arguments.length;i++)
if(arguments>m)m=arguments;
//返回最大的參數值.
return m;
}
var lazgest=(1,10,100,2,3,1000,4,5,10000,6);
也可以使用arguments[]數組來編寫一個函數.

調用js函數
<a href=」#」 onClick=」functionName()」>Link text</a>
<a href=」javascript:functionName()」>Link text</a>

7. 自學計算機專業要學習哪些課程

自學計算機的話首先需要你了解怎麼開機關機存儲文件這些最基本的計算機操作。打好基礎,學計算機為了就業需求的話有兩個發展方向:計算機服務崗、計算機研發崗。

研發崗,如果你的目標是學成後高薪就業,那麼就一定要打好基礎,把專業知識學扎實,想去應聘互聯網公司或者傳統軟體公司的高薪軟體工程師的崗位,那麼這條模擬科班的路線要走好。

1,通讀《大學計算機》教材,簡單了解即可;

2,先接觸一門計算機編程語言;

3,系統學習編程開發課程;

4,學好一門面對對象的語言;

5,確定學習的方向了,比如

Java+OS+計算機網路→Android方向

C→obj-c+OS+計算機網路→iOS開發

Java→JavaEE方向

OS+計算機網路+C/Python→運維方向

JavaScript+HTML/CSS+計算機網路→前端開發

數據結構與演算法+C/C++→初級演算法工程師

編程方向的課程學起來還是有難度的,建議還是找專業的計算機培訓機構系統學。其實即使是其它專業方向,自學的方式都是有一定難度的,對於所需學習課程的類別順序及深度都難以把握。

想要系統學習,你可以考察對比一下開設有IT專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,建議實地考察對比一下。

祝你學有所成,望採納。

8. 應用javascript做輸入年月日,計算出星期幾。

J2EE Java2平台企業版
string是引用數據類型
如何取得年月日,小時分秒
public static void main(String[] args)
{
ActionListener time = new ActionListener() { // 監聽事件,不然實現不了動態改變時間
public void actionPerformed(ActionEvent e) {
//date對象代表當前的系統時間(毫秒)
Date date = new Date();
//format對象是用來以指定的時間格式格式化時間的
SimpleDateFormat from = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss"); //這里的格式可以自己設置
//format()方法是用來格式化時間的方法
String times = from.format(date);
System.out.println(times); }
};
Timer tim = new Timer(1000, time); //這里表示1000毫秒更新一下時間
tim.start(); //啟動
}

我這個答案肯定正確啊
下面幫你解釋你的答案吧
Date //是在java.util.Date;裡面
SimpleDateForma //這個是java.text.SimpleDateFormat;用來輸出問本格式的
DateFormat //應該是在java.util.*;裡面吧..應該是的

你那個錯誤是編譯就沒通過啊
public class Test
那你那個編譯寫的因該是
javac Test.java 編譯的應該是類啊而不是javac time.java 請問你的time什麼意思呢,所以你報的異常是找不到time類啊
呵呵...你是初學java吧該答的我都答完了拉!還特地幫你每句都寫

如何讀寫文件
StringBuffer sb = new StringBuffer();
//File file = new FileWindow().load();
File file;
file = new File("F:/jtest/from.txt");
TextReader tr = new TextReader(file);
sb.append(tr.readAll());
Out.println(sb.toString());
String [] tags = ;
String str;
str = sb.toString();
for(String reg: tags) {
Out.println(reg);

str = str.replaceAll(reg, "");
}
Out.println(str);
抽象類和介面的區別
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。
主鍵是確定資料庫中的表的記錄的唯一標識欄位,可以是表中的一個欄位,也可以是表中的多個欄位組成的。一旦確定為主鍵,則該欄位不可為空也不可以重復。比如學生表中的學號就可以定義成該表的欄位
外鍵的定義是相對於主鍵而言的,比如另有一張成績表,表中也出現了學生表中的對應學號欄位,則相對於學生表,學號就是成績表的外鍵
String和StringBuffer的區別
STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字元串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法
tryfinally內出現異常,try內的代碼呢?finally{}後面的代碼呢
執行 finally{}內的代碼最後執行
排序演算法

所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。

分類

在計算機科學所使用的排序演算法通常被分類為:

計算的復雜度(最差、平均、和最好表現),依據串列(list)的大小(n)。一般而言,好的表現是O。(n log n),且壞的行為是Ω(n2)。對於一個排序理想的表現是O(n)。僅使用一個抽象關鍵比較運算的排序演算法總平均上總是至少需要Ω(n log n)。

記憶體使用量(以及其他電腦資源的使用)

穩定度:穩定排序演算法會依照相等的關鍵(換言之就是值)維持紀錄的相對次序。也就是一個排序演算法是穩定的,就是當有兩個有相等關鍵的紀錄R和S,且在原本的串列中R出現在S之前,在排序過的串列中R也將會是在S之前。

一般的方法:插入、交換、選擇、合並等等。交換排序包含冒泡排序(bubble sort)和快速排序(quicksort)。選擇排序包含shaker排序和堆排序(heapsort)。

當相等的元素是無法分辨的,比如像是整數,穩定度並不是一個問題。然而,假設以下的數對將要以他們的第一個數字來排序。

(4, 1) (3, 1) (3, 7) (5, 6)

在這個狀況下,有可能產生兩種不同的結果,一個是依照相等的鍵值維持相對的次序,而另外一個則沒有:

(3, 1) (3, 7) (4, 1) (5, 6) (維持次序)

(3, 7) (3, 1) (4, 1) (5, 6) (次序被改變)

不穩定排序演算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩定排序演算法從來不會如此。不穩定排序演算法可以被特別地時作為穩定。作這件事情的一個方式是人工擴充鍵值的比較,如此在其他方面相同鍵值的兩個物件間之比較,就會被決定使用在原先資料次序中的條目,當作一個同分決賽。然而,要記住這種次序通常牽涉到額外的空間負擔。

排列演算法列表

在這個表格中,n是要被排序的紀錄數量以及k是不同鍵值的數量。

穩定的

冒泡排序(bubble sort) — O(n2)

雞尾酒排序 (Cocktail sort, 雙向的冒泡排序) — O(n2)

插入排序 (insertion sort)— O(n2)

桶排序 (bucket sort)— O(n); 需要 O(k) 額外 記憶體

計數排序 (counting sort) — O(n+k); 需要 O(n+k) 額外 記憶體

歸並排序 (merge sort)— O(n log n); 需要 O(n) 額外記憶體

原地歸並排序 — O(n2)

二叉樹排序 (Binary tree sort) — O(n log n); 需要 O(n) 額外記憶體

鴿巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 額外記憶體

基數排序 (radix sort)— O(n·k); 需要 O(n) 額外記憶體

Gnome sort — O(n2)

Library sort — O(n log n) with high probability, 需要 (1+ε)n 額外記憶體

不穩定

選擇排序 (selection sort)— O(n2)

希爾排序 (shell sort)— O(n log n) 如果使用最佳的現在版本

Comb sort — O(n log n)

堆排序 (heapsort)— O(n log n)

Smoothsort — O(n log n)

快速排序 (quicksort)— O(n log n) 期望時間, O(n2) 最壞情況; 對於大的、亂數串列一般相信是最快的已知排序

Introsort — O(n log n)

Patience sorting — O(n log n + k) 最外情況時間, 需要 額外的 O(n + k) 空間, 也需要找到最長的遞增子序列(longest increasing subsequence)

不實用的排序演算法

Bogo排序 — O(n × n!) 期望時間, 無窮的最壞情況。

Stupid sort — O(n3); 遞回版本需要 O(n2) 額外記憶體

Bead sort — O(n) or O(√n), 但需要特別的硬體

Pancake sorting — O(n), 但需要特別的硬體

排序的演算法

排序的演算法有很多,對空間的要求及其時間效率也不盡相同。下面列出了一些常見的排序演算法。這裡面插入排序和冒泡排序又被稱作簡單排序,他們對空間的要求不高,但是時間效率卻不穩定;而後面三種排序相對於簡單排序對空間的要求稍高一點,但時間效率卻能穩定在很高的水平。基數排序是針對關鍵字在一個較小范圍內的排序演算法。

插入排序

冒泡排序

選擇排序

快速排序

堆排序

歸並排序

基數排序

希爾排序

插入排序

插入排序是這樣實現的:

首先新建一個空列表,用於保存已排序的有序數列(我們稱之為"有序列表")。

從原數列中取出一個數,將其插入"有序列表"中,使其仍舊保持有序狀態。

重復2號步驟,直至原數列為空。

插入排序的平均時間復雜度為平方級的,效率不高,但是容易實現。它藉助了"逐步擴大成果"的思想,使有序列表的長度逐漸增加,直至其長度等於原列表的長度。

冒泡排序

冒泡排序是這樣實現的:

首先將所有待排序的數字放入工作列表中。

從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大於他的下一位,則將它與它的下一位交換。

重復2號步驟,直至再也不能交換。

冒泡排序的平均時間復雜度與插入排序相同,也是平方級的,但也是非常容易實現的演算法。

選擇排序

選擇排序是這樣實現的:

設數組內存放了n個待排數字,數組下標從1開始,到n結束。

i=1

從數組的第i個元素開始到第n個元素,尋找最小的元素。

將上一步找到的最小元素和第i位元素交換。

如果i=n-1演算法結束,否則回到第3步

選擇排序的平均時間復雜度也是O(n²)的。

快速排序

現在開始,我們要接觸高效排序演算法了。實踐證明,快速排序是所有排序演算法中最高效的一種。它採用了分治的思想:先保證列表的前半部分都小於後半部分,然後分別對前半部分和後半部分排序,這樣整個列表就有序了。這是一種先進的思想,也是它高效的原因。因為在排序演算法中,演算法的高效與否與列表中數字間的比較次數有直接的關系,而"保證列表的前半部分都小於後半部分"就使得前半部分的任何一個數從此以後都不再跟後半部分的數進行比較了,大大減少了數字間不必要的比較。但查找數據得另當別論了。

堆排序

堆排序與前面的演算法都不同,它是這樣的:

首先新建一個空列表,作用與插入排序中的"有序列表"相同。

找到數列中最大的數字,將其加在"有序列表"的末尾,並將其從原數列中刪除。

重復2號步驟,直至原數列為空。

堆排序的平均時間復雜度為nlogn,效率高(因為有堆這種數據結構以及它奇妙的特徵,使得"找到數列中最大的數字"這樣的操作只需要O(1)的時間復雜度,維護需要logn的時間復雜度),但是實現相對復雜(可以說是這里7種演算法中比較難實現的)。

看起來似乎堆排序與插入排序有些相像,但他們其實是本質不同的演算法。至少,他們的時間復雜度差了一個數量級,一個是平方級的,一個是對數級的。

平均時間復雜度

插入排序 O(n2)

冒泡排序 O(n2)

選擇排序 O(n2)

快速排序 O(n log n)

堆排序 O(n log n)

歸並排序 O(n log n)

基數排序 O(n)

希爾排序 O(n1.25)
一、術語session
在我的經驗里,session這個詞被濫用的程度大概僅次於transaction,更加有趣的是transaction與session在某些語境下的含義是相同的。

session,中文經常翻譯為會話,其本來的含義是指有始有終的一系列動作/消息,比如打電話時從拿起電話撥號到掛斷電話這中間的一系列過程可以稱之為一個session。有時候我們可以看到這樣的話「在一個瀏覽器會話期間,...」,這里的會話一詞用的就是其本義,是指從一個瀏覽器窗口打開到關閉這個期間①。最混亂的是「用戶(客戶端)在一次會話期間」這樣一句話,它可能指用戶的一系列動作(一般情況下是同某個具體目的相關的一系列動作,比如從登錄到選購商品到結賬登出這樣一個網上購物的過程,有時候也被稱為一個transaction),然而有時候也可能僅僅是指一次連接,也有可能是指含義①,其中的差別只能靠上下文來推斷②。

然而當session一詞與網路協議相關聯時,它又往往隱含了「面向連接」和/或「保持狀態」這樣兩個含義,「面向連接」指的是在通信雙方在通信之前要先建立一個通信的渠道,比如打電話,直到對方接了電話通信才能開始,與此相對的是寫信,在你把信發出去的時候你並不能確認對方的地址是否正確,通信渠道不一定能建立,但對發信人來說,通信已經開始了。「保持狀態」則是指通信的一方能夠把一系列的消息關聯起來,使得消息之間可以互相依賴,比如一個服務員能夠認出再次光臨的老顧客並且記得上次這個顧客還欠店裡一塊錢。這一類的例子有「一個TCP session」或者「一個POP3 session」③。

而到了web伺服器蓬勃發展的時代,session在web開發語境下的語義又有了新的擴展,它的含義是指一類用來在客戶端與伺服器之間保持狀態的解決方案④。有時候session也用來指這種解決方案的存儲結構,如「把xxx保存在session里」⑤。由於各種用於web開發的語言在一定程度上都提供了對這種解決方案的支持,所以在某種特定語言的語境下,session也被用來指代該語言的解決方案,比如經常把Java里提供的javax.servlet.http.HttpSession簡稱為session⑥。

鑒於這種混亂已不可改變,本文中session一詞的運用也會根據上下文有不同的含義,請大家注意分辨。
在本文中,使用中文「瀏覽器會話期間」來表達含義①,使用「session機制」來表達含義④,使用「session」表達含義⑤,使用具體的「HttpSession」來表達含義⑥

二、HTTP協議與狀態保持
HTTP協議本身是無狀態的,這與HTTP協議本來的目的是相符的,客戶端只需要簡單的向伺服器請求下載某些文件,無論是客戶端還是伺服器都沒有必要紀錄彼此過去的行為,每一次請求之間都是獨立的,好比一個顧客和一個自動售貨機或者一個普通的(非會員制)大賣場之間的關系一樣。

然而聰明(或者貪心?)的人們很快發現如果能夠提供一些按需生成的動態信息會使web變得更加有用,就像給有線電視加上點播功能一樣。這種需求一方面迫使HTML逐步添加了表單、腳本、DOM等客戶端行為,另一方面在伺服器端則出現了CGI規范以響應客戶端的動態請求,作為傳輸載體的HTTP協議也添加了文件上載、cookie這些特性。其中cookie的作用就是為了解決HTTP協議無狀態的缺陷所作出的努力。至於後來出現的session機制則是又一種在客戶端與伺服器之間保持狀態的解決方案。

讓我們用幾個例子來描述一下cookie和session機制之間的區別與聯系。筆者曾經常去的一家咖啡店有喝5杯咖啡免費贈一杯咖啡的優惠,然而一次性消費5杯咖啡的機會微乎其微,這時就需要某種方式來紀錄某位顧客的消費數量。想像一下其實也無外乎下面的幾種方案:
1、該店的店員很厲害,能記住每位顧客的消費數量,只要顧客一走進咖啡店,店員就知道該怎麼對待了。這種做法就是協議本身支持狀態。
2、發給顧客一張卡片,上面記錄著消費的數量,一般還有個有效期限。每次消費時,如果顧客出示這張卡片,則此次消費就會與以前或以後的消費相聯系起來。這種做法就是在客戶端保持狀態。
3、發給顧客一張會員卡,除了卡號之外什麼信息也不紀錄,每次消費時,如果顧客出示該卡片,則店員在店裡的紀錄本上找到這個卡號對應的紀錄添加一些消費信息。這種做法就是在伺服器端保持狀態。

由於HTTP協議是無狀態的,而出於種種考慮也不希望使之成為有狀態的,因此,後面兩種方案就成為現實的選擇。具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時我們也看到,由於採用伺服器端保持狀態的方案在客戶端也需要保存一個標識,所以session機制可能需要藉助於cookie機制來達到保存標識的目的,但實際上它還有其他選擇。

三、理解cookie機制
cookie機制的基本原理就如上面的例子一樣簡單,但是還有幾個問題需要解決:「會員卡」如何分發;「會員卡」的內容;以及客戶如何使用「會員卡」。

正統的cookie分發是通過擴展HTTP協議來實現的,伺服器通過在HTTP的響應頭中加上一行特殊的指示以提示瀏覽器按照指示生成相應的cookie。然而純粹的客戶端腳本如JavaScript或者VBScript也可以生成cookie。

而cookie的使用是由瀏覽器按照一定的原則在後台自動發送給伺服器的。瀏覽器檢查所有存儲的cookie,如果某個cookie所聲明的作用范圍大於等於將要請求的資源所在的位置,則把該cookie附在請求資源的HTTP請求頭上發送給伺服器。意思是麥當勞的會員卡只能在麥當勞的店裡出示,如果某家分店還發行了自己的會員卡,那麼進這家店的時候除了要出示麥當勞的會員卡,還要出示這家店的會員卡。

cookie的內容主要包括:名字,值,過期時間,路徑和域。
其中域可以指定某一個域比如.google.com,相當於總店招牌,比如寶潔公司,也可以指定一個域下的具體某台機器比如或者froogle.google.com,可以用飄柔來做比。
路徑就是跟在域名後面的URL路徑,比如/或者/foo等等,可以用某飄柔專櫃做比。
路徑與域合在一起就構成了cookie的作用范圍。
如果不設置過期時間,則表示這個cookie的生命期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。會話cookie一般不存儲在硬碟上而是保存在內存里,當然這種行為並不是規范規定的。如果設置了過期時間,瀏覽器就會把cookie保存到硬碟上,關閉後再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間。

存儲在硬碟上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存里的cookie,不同的瀏覽器有不同的處理方式。對於IE,在一個打開的窗口上按Ctrl-N(或者從文件菜單)打開的窗口可以與原窗口共享,而使用其他方式新開的IE進程則不能共享已經打開的窗口的內存cookie;對於Mozilla Firefox0.8,所有的進程和標簽頁都可以共享同樣的cookie。一般來說是用javascript的window.open打開的窗口會與原窗口共享內存cookie。瀏覽器對於會話cookie的這種只認cookie不認人的處理方式經常給採用session機制的web應用程序開發者造成很大的困擾。

下面就是一個goolge設置cookie的響應頭的例子
HTTP/1.1 302 Found
Location:
Set-Cookie: PREF=ID=0565f77e132de138:NW=1:TM=1098082649:LM=1098082649:S=KaeaCFPo49RiA_d8; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Content-Type: text/html

這是使用HTTPLook這個HTTP Sniffer軟體來俘獲的HTTP通訊紀錄的一部分

瀏覽器在再次訪問goolge的資源時自動向外發送cookie

使用Firefox可以很容易的觀察現有的cookie的值
使用HTTPLook配合Firefox可以很容易的理解cookie的工作原理。

IE也可以設置在接受cookie前詢問

這是一個詢問接受cookie的對話框。

四、理解session機制
session機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。

當程序需要為某個客戶端的請求創建一個session的時候,伺服器首先檢查這個客戶端的請求里是否已包含了一個session標識 - 稱為session id,如果已包含一個session id則說明以前已經為此客戶端創建過session,伺服器就按照session id把這個session檢索出來使用(如果檢索不到,可能會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字元串,這個session id將被在本次響應中返回給客戶端保存。

保存這個session id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發揮給伺服器。一般這個cookie的名字都是類似於SEEESIONID,而。比如weblogic對於web應用程序生成的cookie,JSESSIONID=!-145788764,它的名字就是JSESSIONID。

由於cookie可以被人為的禁止,必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞回伺服器。經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的後面,附加方式也有兩種,一種是作為URL路徑的附加信息,表現形式為;jsessionid=!-145788764
另一種是作為查詢字元串附加在URL後面,表現形式為!-145788764
這兩種方式對於用戶來說是沒有區別的,只是伺服器在解析的時候處理的方式不同,採用第一種方式也有利於把session id的信息和正常程序參數區分開來。
為了在整個交互過程中始終保持狀態,就必須在每個客戶端可能請求的路徑後面都包含這個session id。

另一種技術叫做表單隱藏欄位。就是伺服器會自動修改表單,添加一個隱藏欄位,以便在表單提交時能夠把session id傳遞回伺服器。比如下面的表單
<form name="testform" action="/xxx">
<input type="text">
</form>
在被傳遞給客戶端之前將被改寫成
<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="!-145788764">
<input type="text">
</form>
這種技術現在已較少應用,筆者接觸過的很古老的iPlanet6(SunONE應用伺服器的前身)就使用了這種技術。
實際上這種技術可以簡單的用對action應用URL重寫來代替。

在談論session機制的時候,常常聽到這樣一種誤解「只要關閉瀏覽器,session就消失了」。其實可以想像一下會員卡的例子,除非顧客主動對店家提出銷卡,否則店家絕對不會輕易刪除顧客的資料。對session來說也是一樣的,除非程序通知伺服器刪除一個session,否則伺服器會一直保留,程序一般都是在用戶做log off的時候發個指令去刪除session。然而瀏覽器從來不會主動在關閉之前通知伺服器它將要關閉,因此伺服器根本不會有機會知道瀏覽器已經關閉,之所以會有這種錯覺,是大部分session機制都使用會話cookie來保存session id,而關閉瀏覽器後這個session id就消失了,再次連接伺服器時也就無法找到原來的session。如果伺服器設置的cookie被保存到硬碟上,或者使用某種手段改寫瀏覽器發出的HTTP請求頭,把原來的session id發送給伺服器,則再次打開瀏覽器仍然能夠找到原來的session。

恰恰是由於關閉瀏覽器不會導致session被刪除,迫使伺服器為seesion設置了一個失效時間,當距離客戶端上一次使用session的時間超過這個失效時間時,伺服器就可以認為客戶端已經停止了活動,才會把session刪除以節省存儲空間。

五、理解javax.servlet.http.HttpSession
HttpSession是Java平台對session機制的實現規范,因為它僅僅是個介面,具體到每個web應用伺服器的提供商,除了對規范支持之外,仍然會有一些規范里沒有規定的細微差異。這里我們以BEA的Weblogic Server8.1作為例子來演示。

首先,Weblogic Server提供了一系列的參數來控制它的HttpSession的實現,包括使用cookie的開關選項,使用URL重寫的開關選項,session持久化的設置,session失效時間的設置,以及針對cookie的各種設置,比如設置cookie的名字、路徑、域,cookie的生存時間等。

一般情況下,session都是存儲在內存里,當伺服器進程被停止或者重啟的時候,內存里的session也會被清空,如果設置了session的持久化特性,伺服器就會把session保存到硬碟上,當伺服器進程重新啟動或這些信息將能夠被再次使用,Weblogic Server支持的持久性方式包括文件、資料庫、客戶端cookie保存和復制。

復制嚴格說來不算持久化保存,因為session實際上還是保存在內存里,不過同樣的信息被復制到各個cluster內的伺服器進程中,這樣即使某個伺服器進程停止工作也仍然可以從其他進程中取得session。

cookie生存時間的設置則會影響瀏覽器生成的cookie是否是一個會話cookie。默認是使用會話cookie。有興趣的可以用它來試驗我們在第四節里提到的那個誤解。

cookie的路徑對於web應用程序來說是一個非常重要的選項,Weblogic Server對這個選項的默認處理方式使得它與其他伺服器有明顯的區別。後面我們會專題討論。

關於session的設置參考[5]

~~我要200分~~

9. 《學習JavaScript數據結構與演算法(第3版)》pdf下載在線閱讀全文,求百度網盤雲資源

《學習JavaScript數據結構與演算法(第3版)》([巴西]洛伊安妮·格羅納)電子書網盤下載免費在線閱讀

鏈接: https://pan..com/s/1PliVgu8oanCmDsqAr2_nJA

提取碼: nu3i

書名:學習JavaScript數據結構與演算法(第3版)

作者:[巴西]洛伊安妮·格羅納

譯者:吳雙

豆瓣評分:8.4

出版社:人民郵電出版社

出版年份:2019-5

頁數:308

內容簡介:

本書首先介紹了JavaScript語言的基礎知識(包括ECMAScript和TypeScript),其次討論了數組、棧、隊列、雙端隊列和鏈表等重要的數據結構,隨後分析了集合、字典和散列表的工作原理,接下來闡述了遞歸的原理、什麼是樹以及二叉堆和堆排序,然後介紹了圖、DFS和BFS演算法、各種排序(冒泡排序、選擇排序、插入排序、歸並排序、快速排序、計數排序、桶排序和基數排序)和搜索(順序搜索、二分搜索和內插搜索)演算法以及隨機演算法,接著介紹了分而治之、動態規劃、貪心演算法和回溯演算法等高級演算法以及函數式編程,最後還介紹了如何計算演算法的復雜度。

作者簡介:

洛伊安妮·格羅納(Loiane Groner)

花旗銀行軟體開發經理,負責海外項目的開發和團隊管理;原IBM公司系統分析師及團隊負責人;巴西坎皮納斯Java用戶組(CampinasJUG)協調人;Sencha和Java技術推廣者,通過博客為軟體開發社區撰稿,發表關於IT職業發展和常用開發技術的文章和視頻,並經常受邀在各大技術會議上做報告。另著有《精通Ext JS》等書。

10. 誰有《數據結構與演算法javascript描述》這本書課後練習題的答案啊

[圖靈程序設計叢書].數據結構與演算法:JavaScript描述

鏈接: https://pan..com/s/1yx4OMqQdlo-ebkMq9keN-w

?pwd=6t57 提取碼: 6t57

通過本書的學習,讀者將能自如地選擇最合適的數據結構與演算法,並在JavaScript開發中懂得權衡使用。此外,本書也概述了與數據結構與演算法相關的JavaScript特性。


熱點內容
如何查詢域名用的伺服器地址 發布:2025-09-17 00:04:01 瀏覽:805
php過濾非中文 發布:2025-09-17 00:02:13 瀏覽:517
來源碼 發布:2025-09-16 23:57:00 瀏覽:856
yeah郵箱的伺服器地址 發布:2025-09-16 23:36:52 瀏覽:701
c的引用java 發布:2025-09-16 23:36:48 瀏覽:307
的n次方編程 發布:2025-09-16 23:25:34 瀏覽:285
python安卓版 發布:2025-09-16 23:01:04 瀏覽:823
碼小易編程 發布:2025-09-16 23:00:56 瀏覽:335
在線音樂源碼 發布:2025-09-16 22:57:39 瀏覽:685
api開發php 發布:2025-09-16 22:06:15 瀏覽:602