`
stta04
  • 浏览: 113245 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Lucene多线程操作实现

阅读更多

Lucene多线程操作实现<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

对于并发,Lucene 遵循以下规则:

1.
允许任意多的读操作并发,即任意数量用户可同时对同一索引做检索操作。
2.
即便正在进行索引修改操作(索引优化、添加文档、删除文档),依然允许任意多的检索操作并发执行。
3.
不允许并发修改操作,也就是说同一时间只允许一个索引修改操作。

Lucene
内部已经对多线程安全进行了处理,很多操作都使用了 lock 进行多线程同步锁定。只要遵循一定的规则,就可以在多线程环境下安全运行 Lucene
方案一:
建议:

1. Directotry
Analyzer 都是多线程安全类型,只需建立一个 Singleton 对象即可。
2.
所有线程使用同一个 IndexModifier 对象进行索引修改操作。
3. IndexWriter/IndexReader/IndexModifier/IndexSearcher
最好使用同一个 Directory 对象,否则多线程并发读写时可能引发 FileNotFoundException

IndexModifier
对象封装了 IndexWriter IndexReader 的常用操作,其内部实现了多线程同步锁定。使用 IndexModifier 可避免同时使用 IndexWriter IndexReader 时需要在多个对象之间进行同步的麻烦。等所有修改操作完成后,记住调用 Close() 方法关闭相关资源。并不是每次操作都需要调用 Optimize(),可以依据特定情况,定期执行优化操作。

--------

以下演示代码简单封装了一个 IndexModifier Signleton 类型,确保多线程使用同一个对象,且只能由最后一个多线程调用 Close 方法关闭。
代码不完善,仅供参考!需要做些修改才能应用于实际项目。

//索引修改器的获取和关闭

import java.io.File;

import java.io.IOException;

import java.io.StringReader;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.standard.StandardAnalyzer;

import org.apache.lucene.index.CorruptIndexException;

import org.apache.lucene.index.IndexModifier;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.LockObtainFailedException;

import org.apache.lucene.store.RAMDirectory;

public class MyIndexModifier {

private static Analyzer analyzer = new StandardAnalyzer();

private static IndexModifier modifier;

private static ArrayList<Thread> threadList = new ArrayList<Thread>();

private MyIndexModifier() { }

static final File INDEX_DIR = new File("D:/docindex");

public static IndexModifier GetInstance()

{

synchronized (threadList)

{

if (modifier == null)

{

try {

modifier = new IndexModifier(INDEX_DIR, analyzer, false);

//索引性能测试参数配置

modifier.setMergeFactor(1000);

System.out.println("MergeFactor: " + modifier.getMergeFactor());

System.out.println("MaxBufferedDocs: " + modifier.getMaxBufferedDocs());

} catch (CorruptIndexException e) {

e.printStackTrace();

} catch (LockObtainFailedException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

if (!threadList.contains(Thread.currentThread()))

threadList.add(Thread.currentThread());

return modifier;

}

}

public static void Close()

{

synchronized (threadList)

{

if (threadList.contains(Thread.currentThread()))

threadList.remove(Thread.currentThread());

if (threadList.size() == 0)

{

try {

if (modifier != null)

{

modifier.close();

modifier = null;

}

} catch (CorruptIndexException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

//线程处理类

import java.io.IOException;

import java.util.Date;

import org.apache.log4j.LogManager;

import org.apache.log4j.Logger;

import org.apache.lucene.document.Document;

import org.apache.lucene.document.Field;

import org.apache.lucene.index.CorruptIndexException;

import org.apache.lucene.index.IndexModifier;

import org.apache.lucene.index.StaleReaderException;

import org.apache.lucene.store.LockObtainFailedException;

import com.miracle.dm.framework.common.TimestampConverter;

public class TestModifer extends Thread{

private static Logger logger = LogManager.getLogger(TestModifer.class);

@Override

public void run() {

IndexModifier writer = MyIndexModifier.GetInstance();

try {

writer.deleteDocument(0);

} catch (StaleReaderException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} catch (CorruptIndexException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} catch (LockObtainFailedException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

for (int x = 0; x < 10; x++)

{

Document doc = new Document();

TimestampConverter converter = new TimestampConverter();

Date date = new Date();

String docDate = converter.timestampToShortStr(date);

doc.add(new Field("docDate", docDate , Field.Store.YES, Field.Index.TOKENIZED));

try {

writer.addDocument(doc);

} catch (CorruptIndexException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (LockObtainFailedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

logger.debug(""+ Thread.currentThread()+","+ writer.docCount());

MyIndexModifier.Close(); // 注意不是调用 IndexModifier.Close()

}

}
多线程测试代码

import java.io.Console;

import java.io.IOException;

import java.util.Date;

import org.apache.log4j.LogManager;

import org.apache.log4j.Logger;

import org.apache.lucene.document.Document;

import org.apache.lucene.document.Field;

import org.apache.lucene.index.CorruptIndexException;

import org.apache.lucene.index.IndexModifier;

import org.apache.lucene.store.LockObtainFailedException;

import com.miracle.dm.framework.common.TimestampConverter;

public class test {

private static Logger logger = LogManager.getLogger(test.class);

public test(){

}

/**

* @param args

*/

public static void main(String[] args) {

for (int i = 0; i < 100; i++)

{

new TestModifer().start();

}

}

}

注意:使用lucene现在的新版本的朋友一定会发现,现在并不推荐使用。而查看API发现IndexModifier已经被IndexWriter代替。再查看IndexWriter,其中提供了新增,删除,更新索引文档的方法。

这里是自己编码来实现,但是我不知道当几千或更多用户在对索引进行操作,那会不会导致close长时间没有运行,而无法检索到最新的更新索引。希望大家帮我考虑一下是否会存在这方面的问题,如果存在该如何解决?

方案二:利用已有的lucene框架,例如compass

它对lucene实现了实时索引。可基于hibernate,当更新数据库时,系统会自动更新索引。

· CompassluceneSpringHibernate三者结合
转自:http://wemyss.blogbus.com/logs/8014799.html

1.概述

CompassluceneSpringHibernate三者的起来,以很低很低的成本快速实现企业应用中的搜索功能。

HomePage: http://www.opensymphony.com/compass/

springside里用了compass来做图书搜索,快速建立的流程如下:

1.用简单的compass annotationBook对象映射到Lucene

2.配置compass默认提供的基于Spring MVCIndex Controller Search Controller

3.编写查询结果的显示页面,将controller返回的变量显示出来。

2.Object/Search Engine Mapping Annotations配置

使用JDK5 annotation 来进行OSEM(Object/Search Engine Mapping)比用xml文件按简单许多,下面就是简单的搜索类,可见@SearchableID, @SearchableProperty@SearchableComponent三个标记,分别代表主键、可搜索的属性与关联的,另一个可搜索的对象,另外Compass要求POJO要有默认构造函数,要实现equals()hashcode():

详细请点击查看springside中的Product.java , Book.java, Category.java

publicclassProduct{

@SearchableId

privateIntegerid;

privateCategorycategory;

privateStringname;

privateDoubleunitprice;

@SearchableProperty(name="name")

publicStringgetName(){

returnthis.name;

}

@SearchableComponent(refAlias="category")

publicCategorygetCategory(){

returnthis.category;

}

publicDoublegetUnitprice(){

returnthis.unitprice;

}

3. spring,hibernate集成配置

3.1 spring配置文件

hiberante中的sessionFactory,transactionManager相比大家也是轻车熟路了.这里还是带过(因为不牵扯稿费的问题吗^_^ ).compass已经对对spring集成做了很好的封装,让我们的使用更加简单,我们可以不为compass编写一行代码,就可以做完搜索引擎的检索.下面是compassspring中的简明配置. 详情点击查看springside中的applicationContext-lucene.xml

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:%5CDOCUME~1%5CUSER%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif" o:href="mhtml:file://C:\Documents%20and%20Settings\USER\桌面\本周\Compass将lucene、Spring、Hibernate三者结合%20-%20Wemyss's%20Space%20-%20博客大巴.mht!http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif"></imagedata></shape><beans>
<shape id="_x0000_i1026" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:%5CDOCUME~1%5CUSER%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif" o:href="mhtml:file://C:\Documents%20and%20Settings\USER\桌面\本周\Compass将lucene、Spring、Hibernate三者结合%20-%20Wemyss's%20Space%20-%20博客大巴.mht!http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif"></imagedata></shape>
<beanid="annotationConfiguration"class="org.compass.annotations.config.CompassAnnotationsConfiguration"></bean>
<shape id="_x0000_i1027" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:%5CDOCUME~1%5CUSER%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif" o:href="mhtml:file://C:\Documents%20and%20Settings\USER\桌面\本周\Compass将lucene、Spring、Hibernate三者结合%20-%20Wemyss's%20Space%20-%20博客大巴.mht!http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif"></imagedata></shape>
<shape id="_x0000_i1028" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:%5CDOCUME~1%5CUSER%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif" o:href="mhtml:file://C:\Documents%20and%20Settings\USER\桌面\本周\Compass将lucene、Spring、Hibernate三者结合%20-%20Wemyss's%20Space%20-%20博客大巴.mht!http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif"></imagedata></shape>
<beanid="compass"class="org.compass.spring.LocalCompassBean">
<shape id="_x0000_i1029" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:%5CDOCUME~1%5CUSER%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif" o:href="mhtml:file://C:\Documents%20and%20Settings\USER\桌面\本周\Compass将lucene、Spring、Hibernate三者结合%20-%20Wemyss's%20Space%20-%20博客大巴.mht!http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif"></imagedata></shape>
<!--anontaition式设置-->
<shape id="_x0000_i1030" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:%5CDOCUME~1%5CUSER%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif" o:href="mhtml:file://C:\Documents%20and%20Settings\USER\桌面\本周\Compass将lucene、Spring、Hibernate三者结合%20-%20Wemyss's%20Space%20-%20博客大巴.mht!http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif"></imagedata></shape>
<propertyname="classMappings">
<shape id="_x0000_i1031" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:%5CDOCUME~1%5CUSER%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif" o:href="mhtml:file://C:\Documents%20and%20Settings\USER\桌面\本周\Compass将lucene、Spring、Hibernate三者结合%20-%20Wemyss's%20Space%20-%20博客大巴.mht!http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif"></imagedata></shape>
<list>
<shape id="_x0000_i1032" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:%5CDOCUME~1%5CUSER%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif" o:href="mhtml:file://C:\Documents%20and%20Settings\USER\桌面\本周\Compass将lucene、Spring、Hibernate三者结合%20-%20Wemyss's%20Space%20-%20博客大巴.mht!http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif"></imagedata></shape>
<value>org.springside.bookstore.domain.Book</value>
<shape id="_x0000_i1033" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:%5CDOCUME~1%5CUSER%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif" o:href="mhtml:file://C:\Documents%20and%20Settings\USER\桌面\本周\Compass将lucene、Spring、Hibernate三者结合%20-%20Wemyss's%20Space%20-%20博客大巴.mht!http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif"></imagedata></shape>
</list>
<shape id="_x0000_i1034" style="WIDTH: 8.25pt; HEIGHT: 12pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:%5CDOCUME~1%5CUSER%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif" o:href="mhtml:file://C:\Documents%20and%20Settings\USER\桌面\本周\Compass将lucene、Spring、Hibernate三者结合%20-%20Wemyss's%20Space%20-%20博客大巴.mht!http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif"></imagedata></shape>
</property><br

分享到:
评论

相关推荐

    基于PHP YAF的CMS系统.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    insightface模型onnx

    insightface的onnx模型 1k3d68:3d识别68个关键点 2d106det:2d识别106关键点 det 10g:人脸框和kps关键点5点识别 10g参数 det 500m:人脸框和kps关键点5点识别 500m参数 genderage:识别年龄和性别 inswapper 128:人脸替换模型,可以替换照片人脸 w600k mbf:人脸特征识别,轻量级库 w600k_r50:人脸特征识别,重量级 相应的ncnn模型在https://download.csdn.net/download/p731heminyang/89425438

    C++课程设计团队项目:基于QT实现的机房预约管理系统.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    毕业设计-基于微信小程序的共享雨伞租借系统.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    aiohttp-3.8.0b0-cp37-cp37m-musllinux_1_1_s390x.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    grpcio-1.9.0-cp35-cp35m-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    车辆路径问题神经网络算法.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    微信小程序-教务系统.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    基于javaweb的超市订单和收银管理系统源码+数据库脚本+说明文档(毕业设计).zip

    顾客管理: 注册新用户 登录/注销用户 个人信息管理(修改密码、修改个人资料等) 商品管理: 商品分类管理(添加、删除、编辑分类) 商品信息管理(添加、删除、编辑商品信息) 商品库存管理(库存预警、库存查询) 购物车功能: 将商品添加至购物车 修改购物车中商品数量 从购物车中移除商品 订单管理: 创建订单 查看订单历史记录 取消订单 订单状态跟踪 收银管理: 收银台功能 结算订单 打印小票 库存管理: 库存查询 入库管理 出库管理 报表和统计: 销售统计 商品热销排行榜 库存报表 权限管理: 管理员权限和普通用户权限 权限控制,例如管理员可以管理商品和订单,普通用户只能浏览和购买商品等 安全性: 数据加密(如密码加密) 防止SQL注入和XSS攻击 界面设计: 响应式设计,适配不同设备的屏幕大小 友好的用户界面设计,易于操作和理解 这些只是系统的基本功能,你可以根据自己的需求和兴趣进一步扩展和定制。开始构建这样一个系统需要一些技术栈,比如: JavaWeb框架:比如Spring MVC、Struts等,用于处理后端逻辑和数据交互。 数据库:如MySQL、Oracle

    aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    html+js餐厅点餐下单web界面

    包括点餐,加料,口味,加位,订单查询,套餐选择,快餐等功能

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本120.0.6099.5)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom120.0.6099.5 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver120.0.6099.5 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    cryptography-3.1.1-cp36-abi3-win32.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    C++开发民航飞行与地图简易管理系统源码(带注释+exe可执行程序).zip

    C++开发民航飞行与地图简易管理系统源码(带注释+exe可执行程序).zip个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业。 C++开发民航飞行与地图简易管理系统源码(带注释+exe可执行程序).zipC++开发民航飞行与地图简易管理系统源码(带注释+exe可执行程序).zipC++开发民航飞行与地图简易管理系统源码(带注释+exe可执行程序).zipC++开发民航飞行与地图简易管理系统源码(带注释+exe可执行程序).zipC++开发民航飞行与地图简易管理系统源码(带注释+exe可执行程序).zipC++开发民航飞行与地图简易管理系统源码(带注释+exe可执行程序).zipC++开发民航飞行与地图简易管理系统源码(带注释+exe可执行程序).zipC++开发民航飞行与地图简易管理系统源码(带注释+exe可执行程序).zipC++开发民航飞行与地图简易管理系统源码(带注释+exe可执行程序).zipC++开发民航飞行与地图简易管理系统源码(带注释+exe可执行程序).zip

    自动化测试:Appium+夜神模拟器+微信

    本资源包包含:Appium-Inspector-2024.6.1-win-x64.exe、Appium-Server-GUI-windows-1.22.3-4.exe、JavaSetup8u411.exe、installer_r24.4.1-windows.exe、nox_setup_v7.0.6.0_full.exe

    我的大一上学期电子工艺课期末作业51单片机代码.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    protobuf-3.12.4-cp38-cp38-manylinux1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    C语言GUI学习项目:基于C++&Qt编写的一个简易计算器和打车计费系统.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    基于QT和GDAL的栅格图像处理系统.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    2024-2030年无缝服装行业市场调研及前景趋势预测报告.pdf

    2024-2030年无缝服装行业市场调研及前景趋势预测报告.pdf

Global site tag (gtag.js) - Google Analytics