當前位置:首頁 » 文件管理 » 樹狀緩存

樹狀緩存

發布時間: 2022-04-01 00:48:00

Ⅰ JS數據處理,後台一組數據,重組成需要的樹形,但是當我點擊二級標題時怎麼得到它對應的一級標題

先說兩種辦法,一種是緩存數據,遍歷數據得到想要的數據
二是把需要的數據放到對應的html結構里如data-title,點擊二級欄目時讀取讀父元素的data-title這樣

Ⅱ dtree樹形菜單怎麼設置菜單的字體顏色和字體

直接在dtree.css里改就好了.. 可能有的時候還沒更新到伺服器,需要重新部署到伺服器,順便清除瀏覽器的緩存..再試試

Ⅲ 為什麼我看視頻的時候總是到一個地方就緩沖。

網速慢的幾種原因:

一、網路自身問題

您想要連接的目標網站所在的伺服器帶寬不足或負載過大。處理辦法很簡單,請換個時間段再上或者換個目標網站。

二、網線問題導致網速變慢

我們知道,雙絞線是由四對線按嚴格的規定緊密地絞和在一起的,用來減少串擾和背景噪音的影響。同時,在T568A標准和T568B標准中僅使用了雙絞線的 1、2和3、6四條線,其中,1、2用於發送,3、6用於接收,而且1、2必須來自一個繞對,3、6必須來自一個繞對。只有這樣,才能最大限度地避免串擾,保證數據傳輸。本人在實踐中發現不按正確標准(T586A、T586B)製作的網線,存在很大的隱患。表現為:一種情況是剛開始使用時網速就很慢;另一種情況則是開始網速正常,但過了一段時間後,網速變慢。後一種情況在台式電腦上表現非常明顯,但用筆記本電腦檢查時網速卻表現為正常。對於這一問題本人經多年實踐發現,因不按正確標准製作的網線引起的網速變慢還同時與網卡的質量有關。一般台式計算機的網卡的性能不如筆記本電腦的,因此,在用交換法排除故障時,使用筆記本電腦檢測網速正常並不能排除網線不按標准製作這一問題的存在。我們現在要求一律按T586A、T586B標准來壓制網線,在檢測故障時不能一律用筆記本電腦來代替台式電腦。

三、網路中存在迴路導致網速變慢

當網路涉及的節點數不是很多、結構不是很復雜時,這種現象一般很少發生。但在一些比較復雜的網路中,經常有多餘的備用線路,如無意間連上時會構成迴路。比如網線從網路中心接到計算機一室,再從計算機一室接到計算機二室。同時從網路中心又有一條備用線路直接連到計算機二室,若這幾條線同時接通,則構成迴路,數據包會不斷發送和校驗數據,從而影響整體網速。這種情況查找比較困難。為避免這種情況發生,要求我們在鋪設網線時一定養成良好的習慣:網線打上明顯的標簽,有備用線路的地方要做好記載。當懷疑有此類故障發生時,一般採用分區分段逐步排除的方法。

四、網路設備硬體故障引起的廣播風暴而導致網速變慢

作為發現未知設備的主要手段,廣播在網路中起著非常重要的作用。然而,隨著網路中計算機數量的增多,廣播包的數量會急劇增加。當廣播包的數量達到 30%時,網路的傳輸效率將會明顯下降。當網卡或網路設備損壞後,會不停地發送廣播包,從而導致廣播風暴,使網路通信陷於癱瘓。因此,當網路設備硬體有故障時也會引起網速變慢。當懷疑有此類故障時,首先可採用置換法替換集線器或交換機來排除集線設備故障。如果這些設備沒有故障,關掉集線器或交換機的電源後,DOS下用 「Ping」命令對所涉及計算機逐一測試,找到有故障網卡的計算機,更換新的網卡即可恢復網速正常。網卡、集線器以及交換機是最容易出現故障引起網速變慢的設備。

五、網路中某個埠形成了瓶頸導致網速變慢

實際上,路由器廣域網埠和區域網埠、交換機埠、集線器埠和伺服器網卡等都可能成為網路瓶頸。當網速變慢時,我們可在網路使用高峰時段,利用網管軟體查看路由器、交換機、伺服器埠的數據流量;也可用 Netstat命令統計各個埠的數據流量。據此確認網路數據流通瓶頸的位置,設法增加其帶寬。具體方法很多,如更換伺服器網卡為100M或1000M、安裝多個網卡、劃分多個VLAN、改變路由器配置來增加帶寬等,都可以有效地緩解網路瓶頸,可以最大限度地提高數據傳輸速度。

六、蠕蟲病毒的影響導致網速變慢

通過E-mail散發的蠕蟲病毒對網路速度的影響越來越嚴重,危害性極大。這種病毒導致被感染的用戶只要一上網就不停地往外發郵件,病毒選擇用戶個人電腦中的隨機文檔附加在用戶機子的通訊簿的隨機地址上進行郵件發送。成百上千的這種垃圾郵件有的排著隊往外發送,有的又成批成批地被退回來堆在伺服器上。造成個別骨幹互聯網出現明顯擁塞,網速明顯變慢,使區域網近於癱瘓。因此,我們必須及時升級所用殺毒軟體;計算機也要及時升級、安裝系統補丁程序,同時卸載不必要的服務、關閉不必要的埠,以提高系統的安全性和可靠性。

七、防火牆的過多使用
防火牆的過多使用也可導致網速變慢,處理辦法不必多說,卸載下不必要的防火牆只保留一個功能強大的足以。

八、系統資源不足

您可能載入了太多的運用程序在後台運行,請合理的載入軟體或刪除無用的程序及文件,將資源空出,以達到提高網速的目的。

提高網速:
可重新設置QoS數據包
Windows XP 為用戶提供了一套新的網路連接程序"Quality of Service(QoS數據包)",而且安裝Windows XP時,系統默認將其設置為調用程序,保留了20%左右的帶寬。也就是說,如果你用不上QoS,你就白白損失了20%的帶寬。

實際上該程序僅對那些大型的企業網有較明顯的效果,對於那些個人用戶或是小型企業用戶而言,尤其是對 ADSL 用戶而言並無多大效果。最好禁用此程序,這樣做可以提高網路連接速度約20個百分點。
應按如下方法操作:

1、點擊「開始」->「運行」,在文本框中輸入"gpedit.msc",啟動"組策略"編輯器。

2、在左邊的樹狀目錄中雙擊「計算機配置| 管理模板 | 網路」目錄項,選擇「QoS數據包調用程序」條目。

3、在窗口右側點擊「限制可保留帶寬」標簽項。選「屬性」打開屬性對話框,選擇「已啟用」,在「帶寬限制」框內輸入數字「0」,(注意僅僅禁用它而不將保留帶寬設置為「0」的話,並不能騰出佔用的帶寬),最後點擊「確認」,退出組策略編輯器即可

Ⅳ 求操作系統介面:Windows命令介面 設計(C++編的) 謝謝

基於XML的配置文件訪問介面設計和實現(1)

目錄

摘要

配置文件結構

XmlConfigReader類的實現

XmlConfigReader類的使用

摘要

在進行程序開發過程中,經常要將一些程序設置/使用的信息儲存起來.由於這些信息和程序的設置/使用相關,與程序有相當的獨立性,所以不可能硬編碼到程序中.在這個時候我們選擇使用基於Xml的配置文件進行存儲.Microsoft的.NET Framework提供了一系列的基於.Config文件的讀取的類,如System.Configuration 命名空間提供的AppSettings等類.但是此命名空間提供的類只能對配置文件進行讀取,不能進行設置.所以在這里,我們實現自己的一個基於Xml的配置文件的類XmlConfigReader/XmlConfigWriter.

配置文件的結構

為了達到與原有的,系統自帶的(.Config)配置文件的兼容性,我們選擇使用類似.Config 文件的結構.示例如下:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<appSettings>

<add key="TimeOut" value="5000"/>

<add key="UserName" value="client7" />

<add key="FileServerPort" value="8050" />

<add key="SpliteCharsForCMD" value=":"/>

<add key="SpliteCharsForItem" value=";"/>

<add key="SpliteCharsForSubItem" value=","/>

</appSettings>

<SockBaseSettings>

<addd key="ServerIP" value="localhost"/>

</SockBaseSettings>

</configuration>

所有的要設置的信息都放在Configuration節點的子節點(如appSettings/SockBaseSettings)的子節點中,這種結構有助於將不同的設置的信息進行歸類/統一.結構和系統的.Config結構基本類似.這樣就可以很方便的將此自定義的結構轉為.Config文件.

XmlConfigReader類的實現

現在文件的基本結構已完成了,現在就開始編碼,完成XmlConfigReader.

由於配置文件是以文件的形式放在硬碟上面的,所以這個XmlConfigReader類在解析Xml文件前得得到文件的路徑.

public class XmlConfigReader

{

private string _filepath;

public XmlConfigReader(string filepath){

_filepath = Path.GetFullPath(filepath).ToUpper();

}

}

好,現在可以得到文件路徑了.然後就是對配置文件進行解析了.在這里,我們選用.NET Framework提供的System.Xml命名空間中的輕量級的XmlTextReader來對配置文件進行解析.對應的XmlConfigReader中的函數定義如下:

public string Process(string sectionName,string key){

bool inConfiguration = false;

bool inSection = false;

string values;

XmlTextReader reader = new XmlTextReader(_filepath);

while( reader.Read()){

if( reader.IsStartElement()){

if( reader.Prefix == String.Empty)

{

if( reader.LocalName == "configuration")

{

inConfiguration = true;

}

else if( inConfiguration == true){

if( reader.LocalName == sectionName){

inSection = true;

}

else if( inSection && reader.LocalName == "add"){

if( reader.GetAttribute("key") == null || reader.GetAttribute("value") == null)

{

throw new Exception(sectionName + " key or value is null");

}

if( reader.GetAttribute("key") == key){

values = reader.GetAttribute("value");

break;

}

}

}

}

}

}

reader.Close();

return values;

}

通過XmlTextReader的Read()函數對Xml文件中的節點進行遍歷.同時先判斷是否屬於configuration節點中,再判斷是否屬於相應的sectionName中.只有在這兩部分同時成立的時候才判斷是否是相應的Key.如果是,得到其Value,並返回.

XmlConfigReader類的使用

好了,現在通過XmlConfigReader可以對配置文件進行讀取了,這里我們看看實際使用的代碼:

public class TestXmlConfigReader{

public void GetValues(){

XmlConfigReader reader = new XmlConfigReader(@"AppConfig.xml");

String Temp;

// Get appSettings username value

Temp = reader.Process("appSettings",」UserName");

// Get SockBaseSettings ServerIP value

Temp = Reader.Process(「SockBaseSettings」,」ServerIP」);

}

}

總結

通過XmlConfigReader類,我們可以很方便的自定義我們自己的配置文件.

基於XML的配置文件訪問介面設計和實現(2)

目錄

摘要

XmlConfigWriter類的實現

XmlConfigWriter類的使用

摘要

在進行程序開發過程中,經常要將一些程序設置/使用的信息儲存起來.由於這些信息和程序的設置/使用相關,與程序有相當的獨立性,所以不可能硬編碼到程序中.在這個時候我們選擇使用基於Xml的配置文件進行存儲.Microsoft的.NET Framework提供了一系列的基於.Config文件的讀取的類,如System.Configuration 命名空間提供的AppSettings等類.但是此命名空間提供的類只能對配置文件進行讀取,不能進行設置.所以在這里,我們實現自己的一個基於Xml的配置文件的類XmlConfigReader/XmlConfigWriter.

XmlConfigWriter類的實現

由於要對配置文件進行寫入,而且可能寫入的次數比較多.所以這里我們不使用輕便的XmlTextWriter,使用XmlDocument.XmlDocument可以在內存中修改所有的Xml的節點,只有等到顯式的調用Save函數的時候才會保存Xml文件.在有大量修改的時候,性能要好一些.

同樣的,先實現XmlConfigWriter的構造函數

public class XmlConfigWriter

{

private string _filepath;

private XmlDocument doc ;

public XmlConfigWriter(string filepath)

{

_filepath = Path.GetFullPath(filepath);

doc =new XmlDocument();

doc.Load(_filepath);

}

}

通過構造函數,將配置文件的路徑傳進去,同時調用XmlDocument的Load方法,將此文件載入到內存中.

這里我們使用的是XmlDocument類.它實現 W3C 文檔對象模型 (DOM) 級別 1 核心 (Level 1 Core) 和核心 DOM 級別 2 (Core DOM Level 2)。DOM 是 XML 文檔的內存中(緩存)樹狀表示形式,允許對該文檔的導航和編輯.通過XmlDocument,我們就可以很方便的在內存中直接操作節點.

.對配置文件的寫入,不外忽三種,一種就是新插入一個節點,一種就是對現有節點的修改,最後一個就是刪除現有的節點.我們首先從插入開始入手.代碼如下:

private XmlNode CreateXmlNode(string localname){

return doc.CreateNode(XmlNodeType.Element,localname,"");

}

private XmlAttribute CreateXmlAttribute(string localname){

return doc.CreateAttribute("",localname,"");

}

public void AddSection(string section){

XmlNode secNode = doc.SelectSingleNode("/configuration/"+section);

if(secNode != null){

return;

}

doc.DocumentElement.AppendChild(CreateNode(section));

}

public void AddKey(string section,string key,string value){

XmlNode secNode = doc.SelectSingleNode("/configuration/"+section);

if( doc.SelectSingleNode("/configuration/" + section + "/add[@key=\"" + key + "\"]") != null)

{

return;

}

XmlNode chi = CreateXmlNode("add");

XmlAttribute att = CreateXmlAttribute("key");

att.Value = key;

chi.Attributes.Append(att);

att = CreateXmlAttribute("value");

att.Value = value;

chi.Attributes.Append(att);

secNode.AppendChild(chi);

}

對於配置文件的插入,有兩種情況,一個就是插入一個新的Section節點(即appSettings/SockBaseSettings這樣的節點),一個就是在當前的Section節點下面插入一個新的add節點.在上面的代碼中,對於插入節點的操作,都是首先通過doc的SelectSingleNode函數來判斷是否已存在此同名節點,如果存在,則直接return,避免創建同名的節點.但是,由於在最終使用的add節點是分屬於不同的Section節點的,所以只是判斷在同一個Section節點下面的此節點不能同名.

如果不存在同名的節點,就通過secNode.AppentChild函數將此新建的(通過CreateXmlNode函數)節點加入到doc對象中.同時,對於add節點,通過CreateXmlAttribute函數及XmNode.Attributes.Appent函數將其key / value屬性加入到此節點中.這樣,插入操作就完成了.

接著我們來完成刪除操作.刪除操作直接通過XmlDocument的SelectSingleNode得到目標節點的父節點,再通過XmlNode.RemoveChild操作將其刪除.代碼如下:

public void DeleteSection(string section){

XmlNode secNode = doc.SelectSingleNode("/configuration/"+section);

doc.DocumentElement.RemoveChild(secNode);

}

public void DeleteKey(string section,string key){

XmlNode secNode = doc.SelectSingleNode("/configuration/" + section + "/add[@key=\"" + key + "\"]");

if(secNode != null)

{

secNode.ParentNode.RemoveChild(secNode);

}

}

現在開始修改操作.對於修改操作,思路是這樣的,首先通過XmlDocument的SelectSingleNode搜索,看是否有滿足條件的節點.如果沒有,直接return,如果存在,則分兩情況.對於add節點,只是直接修改其value屬性.對於Section節點,則是通過遍歷把其下所有的子節點(add節點)得到,再把此Section節點刪除,再生成一個新的節點(這個新的節點的Name就為要設置的值),再把得到的所有子節點再賦給這個新的節點.代碼如下:

public void ModifySection(string oldSection,string newSection){

XmlNode secNode = doc.SelectSingleNode("/configuration/"+oldSection);

XmlNodeList list = secNode.ChildNodes;

doc.DocumentElement.RemoveChild(secNode);

secNode = doc.CreateNode(XmlNodeType.Element,newSection,"");

foreach( XmlNode i in list){

secNode.AppendChild(i);

}

doc.DocumentElement.AppendChild(secNode);

}

public void ModifyKey(string section,string key,string value){

XmlNode secNode = doc.SelectSingleNode("/configuration/" + section + "/add[@key=\"" + key + "\"]");

if(secNode != null)

{

secNode.Attributes["value"].Value = value;

}

}

好了,插入,修改,刪除操作到現在基本完成了,但是現在還只是在內存中進行操作,還不是對實際的文件進行操作.這個時候,我們就還得通過XmlDocument.Save函數把內存中修改好的Xml文件寫入到文件中去.代碼如下:

public void Save(){

doc.Save(_filepath);

}

public void Save(string filepath)

{

doc.Save(filepath);

}

XmlConfigWriter類的使用

使用方法很簡單.先產生一個XmlConfigWriter對象,通過構造函數把配置文件傳進去,再通過Add/Modify/Delete等函數進行操作.代碼如下:

XmlConfigWriter Writer = new XmlConfigWriter(@」appconfig.xml」);

Writer.AddSection(「appSettings」);

Writer.AddKey(「appSettings」,」ServerIP」,」localhost」);

Writer.ModifyKey(「appSettings」,」ServerIP」,」127.0.0.1」);

Writer.ModifySection(「appSettings」,」SockBaseSettings」);

Writer.DeleteKey(「SockBaseSettings」,」ServerIP」);

Writer.DeleteSection(「SockBaseSettings」);

Writer.Save();

總結

通過編寫XmlConfigWriter,我們學會使用XmlDocument的使用.

基於XML的配置文件訪問介面設計和實現(3)

目錄

摘要

增加緩存支持

增加配置文件監視

增加ConfigurationSettings類

摘要

前面的兩篇中,我們實現了XmlConfigReader和XmlConfigWriter的基本功能.由於XmlConfigReader的實現方式是每請求一次,就去解析配置文件一次,性能很低下.同時,為了更方便使用,我們增加一個ConfigurationSettings類,用來調用XmlConfigReader和XmlConfigWriter,使之用起來和System.Configuration中的類使用方式一樣.

增加緩存支持

由於XmlConfigReader的實現方式是請求一次,解析配置文件一次,而且配置文件的信息在程序運行的時會大量使用,這樣子顯然效率太低.因此,這里就要使用到緩存.

緩存,其實就相當於一個靜態的變數,在整個程序運行時是唯一的,通過這樣的一個變數,把信息存儲到這個變數裡面,在程序的其它地方就可以直接得到這個信息了.從而避免了頻繁的解析配置文件.這里,我們選擇使用Hashtable做為緩存變數.

在MSDN中,我們可以查到System.Configuration命名空間中的AppSettings類返回的是一個NameValueCollection(Key/Value鍵值對).為了方便使用,我們將配置文件解析後的信息也存成NameValueCollection這樣的集合.

這樣定義好了後,對於Hashtable中的Key設置為Section節點的名字(appSettings/SockBaseSettings),其Value值即為此節點的所有子節點的NameValueCollection類的對象.

修改代碼.給XmlConfigReader增加一個靜態Hashtable變數,並修改相關函數.把得到的信息直接以NameValueCollection的形式存入到此Hashtable中.

private static Hashtable confTypes = new Hashtable();

private string rootname;

public void Process(){

XmlTextReader reader = new XmlTextReader(_filepath);

while( reader.Read()){

if( reader.IsStartElement()){

#region Analyze the files

if( reader.Prefix == String.Empty)

{

if( reader.LocalName == "configuration")

{

inConfiguration = true;

}

else if( inConfiguration == true){

if(reader.LocalName == "add")

{

if( reader.GetAttribute("key") == null || reader.GetAttribute("value") == null)

{

throw new Exception(rootname + " key or value is null");

}

AddKey(tables,reader.GetAttribute("key"),reader.GetAttribute("value"));

}

else

{

rootname = reader.LocalName;

}

}

}

#endregion

}

else if ( reader.LocalName == "configuration"){

inConfiguration = false;

}

}

reader.Close();

}

private void AddKey(string key,string value){

NameValueCollection collection ;

if(confTypes.ContainsKey( rootname )){

collection = (NameValueCollection) confTypes [rootname];

}

else{

lock(confTypes.SyncRoot){

collection = new NameValueCollection();

confTypes.Add( rootname,collection);

}

}

collection.Add(key,value);

}

上面代碼中,我們修改了Process函數.把原來的直接return結果的地方改成調用AddKey函數.通過一個類成員 rootname臨時儲存當前的SectionName,通過AddKey把得到的Key/Value加入到Hashtable中.

現在這樣修改後,就不能直接通過Process得到我們想到得到的Key的Value了.所以我們再寫一個函數,

public NameValueCollection GetCollection(string SectionName){

if( confTypes.ContainsKey(SectionName)){

return (NameValueCollection)confTypes[SectionName];

}

else{

throw new Exception(confName + " is not found in XmlConfiguration files");

}

}

這里,我們直接通過SectionName得到此節點所有的子節點的NameValueCollection集合.這樣,我們就可以得到我們想要的值了.

增加配置文件監視

上面的代碼實現了配置文件的緩存.大大提高了靈活性.但是存在一個問題,就是,如果配置文件修改了,這個緩存不會自動更新.

要解決這個問題,我們得使用FileSystemWatcher這個類,用來訂閱文件修改消息,進而更新緩存.由於在第一次解析前就要把此配置文件加入到監視文件表中,所以我們修改XmlConfigReader,增加一個靜態的FileSystemWatcher,用來保存監視文件的對象,增加一個靜態的Bool值表明是否修改過.再修改構造函數,使配置文件在一開始就加入到監視列表中.代碼如下:

Private static FileSystemWatcher watch = new FileSystemWatcher();

Private static bool isModify = true;

public XmlConfigReader(string filepath){

_filepath = Path.GetFullPath(filepath).ToUpper();

watch.IncludeSubdirectories = false;

watch.Path = Path.GetDirectoryName(filepath);

watch.NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite;

watch.Filter = Path.GetFileName(filepath);

watch.Changed += new FileSystemEventHandler(Change_Even);

watch.EnableRaisingEvents = true;

}

由於是通過事件機制實現文件修改通知的,所以我們還要實現Chane_Even這個函數,通過這個函數修改isModify的值.

private void Change_Even(object sender, FileSystemEventArgs e){

isModify = true;

}

這樣子,對於配置文件的監視的代碼就完成了,現在就是修改我們的GetCollection代碼的時候了.

修改後的代碼如下:

public NameValueCollection GetCollection(string SectionName){

if( isModify ){

lock(confTypes.SyncRoot){

confTypes.Clear();

Process();

}

isModify = false;

}

if( confTypes.ContainsKey(SectionName)){

return (NameValueCollection)confTypes[SectionName];

}

else{

throw new Exception(confName + " is not found in XmlConfiguration files");

}

}

到現在,整個XmlConfigReader的代碼已完成了,可以實現對文件的監視,從而動態修改緩存中的值.

增加ConfigurationSettings類

為了便於使用,我們增加了一個ConfigurationSettings的類,使用他的用法和System.Configuration命名空間中的類的用法一樣.代碼定義如下:

public class ConfigurationSettings : XmlConfigWriter

{

private static string _filepath = @"AppConfig.xml";

public static string DefaultFilePath

private static XmlConfigReader reader;

{

get{return _filepath;}

set{_filepath = Path.GetFullPath(value);}

}

public static NameValueCollection AppSettings

{

get{

if( reader == null){

reader = new XmlConfigReader(DefaultFilePath);

}

return reader.GetCollection("appSettings");

}

}

public static NameValueCollection GetConfig(string sectionName){

get{

if( reader == null){

reader = new XmlConfigReader(DefaultFilePath);

}

return reader.GetCollection(sectionName);

}

}

Ⅳ Hibernate載入樹形結構的數據怎麼用上二級緩存

public Menu getParent() {
return parent;
}

@OneToMany(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY, mappedBy = "pid")
public Set<Menu> getChildren() {
return children;
}

這些數據由於很修改少,訪問頻繁,因此很適合放在緩存中。
下面是EhCache配置:

?

1
2
3
4
5
6
7
8
9
10

<cache name="Menu"
maxElementsInMemory="100"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
diskPersistent="false"
="120"
memoryStoreEvictionPolicy="LRU"
/>

我在程序中用遞歸方式獲得整個樹形結構的數據,觀察後台Hibernate輸出的語句,一直都沒使用上緩存。根據Hibernate使用緩存的機制:

1) Hibernate首先根據這些查詢信息組成一個Query Key,Query Key包括條件查詢的請求一般信息:SQL, SQL需要的參數,記錄范圍(起始位置rowStart,最大記錄個數maxRows),等。 2) Hibernate根據這個Query Key到Query緩存中查找對應的結果列表。如果存在,那麼返回這個結果列表;如果不存在,查詢資料庫,獲取結果列表,把整個結果列表根據Query Key放入到Query緩存中。 3) Query Key中的SQL涉及到一些表名,如果這些表的任何數據發生修改、刪除、增加等操作,這些相關的Query Key都要從緩存中清空。

Ⅵ hibernate核心包有哪些

hibernate核心包:hibernate-distribution-3.5.1-Final(8個)

cglib-2.2.jar
hibernate\lib\bytecode\cglib\cglib-2.2.jar
cglib庫,hibernate用它來實現PO位元組碼的動態生成,非常核心的庫,必須使用的jar包

antlr-2.7.6.jar
Antlr(ANother Tool for Language Recognition)是一個工具,它為我們構造自己的識別器(recognizers)、編譯器(compiler)和轉換器(translators)提供了一個基礎。通過定義自己的語言規則,Antlr可以為我們生成相應的語言解析器,這樣便可以省卻了自己全手工打造的勞苦。

commons-collections-3.1.jar
dom4j-1.6.1.jar
javassist-3.9.0.GA.jar
jta-1.1.jar
slf4j-api-1.5.8.jar
hibernate\lib\required\*

---------------------------------------------------------------

hibernate註解包:hibernate-annotations-3.4.0.GA(3個)

hibernate-annotations.jar
ejb3-persistence.jar
hibernate-commons-annotations.jar

---------------------------------------------------------------

hibernate針對JPA的實現包:hibernate-entitymanager-3.4.0.GA(3個)

hibernate-entitymanager.jar
log4j.jar
slf4j-log4j12.jar
hibernate 所需jar包及簡介
Hibernate3.jar 這個是hibernate最主要的jar包

ant-1.63.jar Ant 的核心包,在構建Hibernate 時會用到

antlr-2.7.5H3.jar 語言轉換工,Hibernate利用它實現 HQL 到 SQL的轉換

asm.jar/asm-attrs.jar ASM 位元組轉換庫

c3p0-0.8.5.2.jar C3PO JDBC 連接池工具

cglib-2.1.jar 高效的代碼生成工具, Hibernate用它在運行時擴展 Java類和實現 Java 介面

commons-collections-2.1.1.jar Apache 的工具集,用來增強Java對集合的處理能力

commons-logging-1.0.4.jar Apache 軟體基我組所提供的日誌工具

concurrent-1.3.2.jar 線程同步工具,在使用JBoss 的樹狀緩存時需要用到

connector.jar 用連接多個應用伺服器的標准連接器

dom4j-1.6.jar dom4j XML 解析器

ehcache-1.1.jar 緩存工具.在沒有提供其他緩存工具時,這個緩存工具是必不可少的

jaas.jar 標準的 Java 許可權和認證服務包

jaxen-1.1-beta-4.jar 通用的 XPath 處理引擎

jboss-cache.jar JBoss 的一種樹狀緩存實現工具

jboss-common.jar Jboss 的基礎包,在使用 JBoss 的樹狀緩存時必須有此包

jboss-jmx.jar JBoss 的 JMX 實現包

jboss-system.jar JBoss 的核心,包括伺服器和部署引擎

jdbc2_0-stdext.jar 標準的 JDBC 2.0 擴展API

jgroups2.2.7.jar 網路通信工具包

jta.jar 標準的 JAVA 事務處理介面

junit-3.8.1.jar JUnit 測試框架

log4.j-1.2.9.jar log4j 庫,Apache 的日誌工具

oscache-2.1.jar Java 對象的緩存工具

proxool-0.8.3.jar Proxool JDBC 連接池 工具

swarmcache-1.0rc2.jar Hibernate 可以使用的一種緩存工具

versioncheck.jar 版本檢查工具包,用於在構建 Hibernate 的時候檢查輔助 jar 包文件的版本

xerces-2.6.2.jar SAX XML 解析器

xml-apis.jar Java語言中標準的XML 解析器

Ⅶ 要用jQuery的nestable()做一個三級樹形菜單,值全部從資料庫動態獲取

$.ajax({ url:"url",
type:"GET",
async:false,
dataType:'json',
success:function(dataJSON){
fn(dataJSON.data, $("#htmll"));
},
error:function(msg){error(msg);}
})

function fn(array, html) {
for (var i = 0; i < array.length; i++) {
var object = array[i];
var data = "";
var temp = '';
if (object.subs) {
var e = $("<ol class='dd-list'></ol>");
var f = $("<li class='dd-item' data-id='"+object.id+"'> <div class='dd-handle' id='"+object.id+"' ondblClick='aa(this)'>"+ object.name + "</div></li>");
f.append(e);
html.append(f);
fn(object.subs,e);
} else {
html.append("<li id='"+object.id+"' data-id='"+object.id+"' class='dd-item' ondblClick='aa(this)'><div class='dd-handle'>" +object.name + "</div></li>");
}
}
}

Ⅷ 用鄰接模型在資料庫中存儲樹形結構,根節點的pid為什麼用null表示,不用0

方法一般有下面兩種。
1:鄰接列表模型 2:改進前序遍歷樹演算法
1:鄰接列表模型
意思是在資料庫的表結構中,加一個parent的欄位來表示,這個節點的父節點是哪條數據。
前兩天看論壇中有個人的實現方式把這個改進了,感覺效率會更好,方案如下:
表欄位:id(int自增)、name(String)、parentId(int)、depth(int)
id:int型自增索引,無任何實際意義。
name:業務欄位。
parentId:父節點的自增索引。
depth:節點深度,子節點depth > 父節點depth,除此之外該欄位無任何限制。
載入方式:從資料庫中按depth升序查詢到所有數據,返回為LinkedHashMap<id, 對象>,然後遍歷該Map的value集逐一載入到界面,遍歷的時候根據parentId去Map中找父節點。
由於採用LinkedHashMap,所以存入的數據不會亂序,又有了depth的升序排列,可以保證載入子節點時其父節點一定已被載入,緩存的Map還可留作它用,這比List方便多了。
2:改進前序遍歷樹演算法
資料庫的表結構中增加兩個欄位: 左值,右值,來表示一個具體的節點。

Ⅸ windows 98和xp系統中的文件夾結構說的樹形結構和樹狀結構有區別嗎

最重要的一點就是:先安裝98.再安裝XP.最好裝在不同分區,比如98裝在C盤,XP裝在D判,如果你不熟悉系統的安裝的話,請看下面:

找一張別人用過的安裝盤

新手如何裝一個完美系統

相信對於那些大蝦級的人物來說裝系統根本不是什麼難事,不過是不停的點「下一步」罷了!但對於菜鳥級人物也許就是一件難事了。

今天我們就以裝Windows2000/XP為例,把本人裝系統的一些經驗告訴大家,希望會對你們有所幫助。

裝系統前:

先想好要將系統裝在哪個盤,然後將該盤整理。這里所說的整理,就是將有用的文件放到另一個盤中保存起來,以防格式化的時候誤刪掉。還有就是如果你的機器硬體驅動盤找不到了,建議使用工具軟體將驅動保存下來。Windows優化大師可以做到這點。

需要注意的就是,「我的文檔」里的東西都算C盤里的東西,別忘了保存它裡面的文件。

至於收藏夾等的路徑因系統不同而不同。一般在C:\Documents and Settings下面有一個以你機器登陸名命名的文件夾,打開後就會看到收藏夾,復制到別的盤即可。

做好以上這些,基本上就可以開始裝系統了。重新啟動計算機,然後按DEL鍵進入BIOS設置。有的人在這里不知道什麼時候按DEL鍵,那就告訴你個笨辦法,只要重啟了,就一直按好了。還有就是,因為主板生產廠家的不同,進入BIOS的快捷鍵也有所區別。有的是F2,有的是F10,一般開機時在屏幕低端都有提示。

進入BIOS後切勿隨便改動,因為這裡面的東西都是相當重要的,如果改錯可能會連系統都進不去。我們只需要改動計算機啟動時的盤符順序就可以了。

這個怎麼找還真不好說,因為BIOS設置也會因主板不同而不同。一般在BOOT標簽下,設置用光碟機啟動計算機就可以。BIOS設置時右邊都會有相關提示,菜鳥們可根據提示來做。弄好後先別急著重啟,要把安裝盤放進光碟機中,再按F10保存並重新啟動。

這時要注意觀察,啟動時計算機會先檢測光碟機,屏幕下面出現一行字元(具體英語忘掉了,汗),意思就是讓你按任意鍵進入光碟啟動。按一下,聽到光碟機開始瘋轉,裝系統的過程就正式開始了!

裝系統中:

看屏幕中的提示,因為都是中文的所以幾乎不需要介紹什麼。首先需要用戶選擇是安裝新的操作系統還是修復,選擇安裝新的操作系統,然後按F8同意那些協議,出現盤符選擇界面。

用鍵盤上下鍵移動游標至你要安裝的盤符上,按「D」鍵,系統會提示說刪除該盤將會刪除所有資料,不管它,接著按「L」鍵再確定刪除。完成後屏幕返回到剛才的界面。然後選擇「在當前盤安裝WindowsXP」(大概意思,原文不記的了)後按回車,系統提示要格式化該盤。選擇「快速NTFS方式」格式化,此時出現格式化界面,稍候等進度條到100%時計算機開始自動裝入光碟機中的安裝文件,大概時間8分鍾左右(視光碟機速度而定),完成後系統自動重啟。

注意,此時要將光碟機里的安裝盤取出,為的是避免重啟後又自動讀取。

重啟後再次進入安裝界面,此時將安裝盤再放入後安裝繼續,幾乎不需要你做任何設置,點「下一步」就可以。不過中間有一個輸入序列號的過程得動動手。

這個過程大概40分鍾左右,其間屏幕會顯示一些關於windowsXP的相關功能信息,可以留意一下。完成後系統提示將安裝盤取出。你拿出來後,重啟,順便進BIOS將開機啟動順序改回至硬碟啟動,基本上就完成安裝過程了!
裝系統後:

一般在進入系統後常用硬體的驅動都已經安裝好,但不是全部。這時就需要用戶自己來安裝。首先查看機器哪些驅動未安裝!右鍵點擊「我的電腦」,選「屬性」,在「硬體」標簽里點擊「設備管理器」,凡是在設備前面有一個問號圖標的均表示該設備有問題。雙擊,按上面的提示將驅動安裝好。直到前面的「問號」全部消失為止。

需要裝的驅動一般有顯卡、音效卡、網卡、貓,一些比較高級的機器還有紅外、藍牙等適配器的驅動。

下面就是對系統的一些優化設置,如果你的機器配置不高,建議按我說的做。

1> 右鍵單擊屏幕,選擇「屬性」。點擊「外觀」標簽,在「外觀與按鈕」的下拉菜單中選擇「Windows經典樣式」,然後在「設置」標簽里,按個人喜好調整屏幕解析度大寫,一般為1024*768。如果你用的是普通CRT顯示器,需要再點「監視器」標簽,將「屏幕刷新頻率」調整至「85赫茲」,點確定!屏幕看起來是不是舒服多了?

2> 右鍵單擊任務欄,選擇「屬性」,在「任務欄」標簽項中將「顯示快速啟動」前的復選框選中。然後再點擊「「開始」菜單」標簽,將菜單類改成「經典「開始」菜單」,點「確定」,看看現在的樣子是不是要舒服點呢?(嘿,我的個人感覺!)

3> 右鍵單擊我的電腦,選擇「高級」標簽。單擊性能項里的「設置」按鈕。在視覺效果項里先點擊「調整為最佳性能」,然後在下面的復選項里選中「在文件夾中使用常見任務」。如下圖所示:

做好這步,然後再點「視覺效果」旁邊的「高級」標簽,在「虛擬內存」處點「設置」按鈕。在打開的屬性框里,先將游標定位在C盤,點擊下面的「無分頁文件」,然後再點擊D盤(你機器上哪個盤空間大就點哪個),在自定義大小里輸入相應數值,點旁邊的「設置」按鈕,再點擊確定。如下圖所示:

虛擬內存的設置要根據本身內存容量來定!一般情況為內存本身容量的1.5倍即可!
4> 右鍵單擊「我的電腦」,選擇「系統還原」標簽,如果不需要的話選擇「在所有驅動器上關閉系統還原」,這個一般人都不需要!

5> 此時你會發現屏幕右下角系統托盤處有一個「盾」樣的圖標,那個是WindowsXP的安全中心。雙擊打開它,在你沒有安裝自己的殺毒軟體的時候,將「防火牆」和「病毒防護」都開啟。這樣安全性會相對較高一些!

6> 做好這些後單擊「開始」,選擇「Windows Update」,此時自動打開IE連接到windows升級網站,按照它上面的提示進行升級,步驟必不可少!升級完成後可能會需要重新啟動計算機。

7> 打開任意一個文件夾,從菜單欄里點擊「工具」,選擇「文件夾選項」。單擊「查看」標簽,將「不緩存縮略圖」、「記住每個文件夾的視圖位置」、「滑鼠指向文件夾或桌面項時顯示提示信息」這三個類前的勾去掉。再點擊上方的「應用到所有文件夾」,點確定!

8> 右鍵單擊IE,選擇「屬性」,在「常規」標簽中,點擊「使用空白頁」,再點確定!

最後的話

到這里,我們的新手裝系統就基本介紹完了,但筆者還想提醒大家幾點:

1> 殺毒軟體一定要裝,並且經常更新,定期殺毒,不要以為不亂上網站就不會中毒。

2> 系統一定要打補丁,微軟每個月第二個星期發布補丁,屆時一定按我上面提到的方法去更新。

3> 切勿胡亂下載安裝軟體。很多不正規的網站提供的下載鏈接可能是帶有病毒的,或者是綁定了一堆垃圾軟體。請下載的時候一定要注意查看選項,把不需要的軟體前的勾去掉。

4> 不要隨便改動計算機設置,不要隨意刪除計算機的文件.

BIOS設置圖解教程

視頻:windowsXP安裝視頻

操作系統安裝詳細圖解

如果對您有幫助,請記得採納為滿意答案,謝謝!祝您生活愉快!

vaela

Ⅹ 怎麼把thinkphp列表轉為json樹狀的數據

無論是跨域 還是什麼,肯定是有個地方要共享數據的比如伺服器,資料庫,緩存,都可以解決 解決這個 ,其他的不就 正常往下寫就可以了嗎

熱點內容
日記源碼 發布:2024-10-31 17:19:52 瀏覽:271
吃雞伺服器關服了是什麼意思 發布:2024-10-31 17:14:11 瀏覽:757
更改ip地址Linux 發布:2024-10-31 17:02:27 瀏覽:240
Java編譯器iOS 發布:2024-10-31 16:55:37 瀏覽:34
半條命怎麼玩需要什麼配置 發布:2024-10-31 16:54:29 瀏覽:502
私家車哪些配置可以上路 發布:2024-10-31 16:53:46 瀏覽:79
自動換ip腳本 發布:2024-10-31 16:41:11 瀏覽:654
建築設計筆記本需要哪個配置 發布:2024-10-31 16:32:33 瀏覽:77
eclipse怎麼快捷鍵編譯 發布:2024-10-31 16:31:47 瀏覽:677
c語言然後 發布:2024-10-31 16:28:03 瀏覽:263