树状缓存
Ⅰ 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树状的数据
无论是跨域 还是什么,肯定是有个地方要共享数据的比如服务器,数据库,缓存,都可以解决 解决这个 ,其他的不就 正常往下写就可以了吗