当前位置: 首页 > wzjs >正文

建设一个普通网站需要多少钱上海网络公司招聘信息

建设一个普通网站需要多少钱,上海网络公司招聘信息,郑州网站建设十大公司,wordpress评论模板阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 文章导读 阿华将发布项目复盘系列的文章,旨在: 1:手把手细致带大家从0到…

 

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

 文章导读

阿华将发布项目复盘系列的文章,旨在:

1:手把手细致带大家从0到1做一个完整的项目,保证每2~3行代码都有详细的注解

2:通过文字+画图的方式,对项目进行整个复盘,更好的理解以及优化项目

3:总结自己的优缺点,扎实java相关技术栈,增强文档编写能力

零:项目结果展示

简述:在我的搜索引擎网站,用户进行关键字搜索,就可以查询到与这个关键字相关的java在线文档,(包含标题,关键字附近的简述,url),用户点击标题,即可跳转到相关在线文档,适用于JDK17版本。

一:功能实现准备

导入:搜索引擎(2)文章中我们在Index类中实现了,添加文档的操作,包括往正排索引中添加文档,和往倒排索引中添加文档。

思考:我们的索引是存储在内存当中的,构建索引的过程是相当耗时的,我们不应该在服务器启动的时候才构建索引(启动服务器会被拖慢很多)

解决:我们把内存中构造好的索引结构,变成一个“字符串”保存到文件中,持久化存储,这里使用序列化和反序列化操作,当然实现方式有很多种,这里我们使用json格式来实现,不多bb,开干

二:实现索引结构持久化文件存储

1:引入Jackson库

通过Jackson库中的ObjectMapper类实现序列化和反序列化

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.17.2</version>
</dependency>

2: 准备工作

设置一下索引结构保存的路径

通过Jackson库中的ObjectMapper类实现序列化和反序列化

 private static final String INDEX_PATH = "D:\\doc_searcher_index/";//鲁棒性~序列化后索引文件放的地方private ObjectMapper objectMapper = new ObjectMapper();

3:保存索引

解释一下:我们现在将两个索引结构,也就是java中的对象转化为字符串结构

(1)防止没有目录,做个判断

(2)writeValue方法

将java对象转化为字符串,进行文件的写入

writeValueAsString,也可以需要将整个 JSON 数据存储在内存中的字符串里,对于大型对象,可能会占用较多内存。

writeValue:可以直接将数据写入到目标中,无需在内存中保留整个 JSON 字符串,在处理大型对象时,内存使用上相对更高效。

(3)文件File类

这里new File(path)对象其实是指定路径,抽象出来的一种文件表示,我们在idea中可以通过它对操作系统中的文件进行操作,比如创建目录,检查路径是否存在,删除文件

 //4:把内存中的索引结构保存到磁盘中public void save(){long beg = System.currentTimeMillis();//使用两个文件分别保存正排和倒排//1:判定索引对应目录是否存在,不存在就创建File indexPathFile = new File(INDEX_PATH);if(!indexPathFile.exists()){boolean isCreated = indexPathFile.mkdirs();//以防有多层目录if (!isCreated) {System.err.println("目录创建失败: " + INDEX_PATH);return;}}File forwardIndexFile = new File(INDEX_PATH + "forward.txt");File invertedIndexFile = new File(INDEX_PATH + "inverted.txt");//将对象转化为json对象,就是一堆字符串try {objectMapper.writeValue(forwardIndexFile,forwardIndex);//将对象转化为字符串,在写入文件。两步合一objectMapper.writeValue(invertedIndexFile,invertedIndex);} catch (IOException e) {throw new RuntimeException(e);}long end = System.currentTimeMillis();System.out.println("保存索引完毕! 消耗时间:" + (end - beg) + "ms");}

 三:加载索引

反序列化,还是利用Jackson库中的ObjectMapper类中的readValue方法将我们的文件反序列化为java对象

难点:在反序列化为java对象的过程中,会涉及泛型类型擦除机制,通俗的讲:编译器会在编译的时候将我们的ArrayList<Weight> 和ArrayList<DocInfo>还原为原始对象ArrayList,那么其中的DocInfo信息就丢失了,编译器不知道ArrayList<DocInfo>的具体类型信息

解决方式,这里我们使用TypeReference泛型类 通过匿名类指定我们泛型的类型信息,内部其实是通过Type对象(它是java类型系统的一部分)来保留泛型类型信息的,本质上也是一种反射。

    //5:把磁盘中的索引数据加载到内存中去public void load() throws IOException {long beg = System.currentTimeMillis();System.out.println("加载索引开始");//1:设置加载索引路径File forwardIndexFile = new File(INDEX_PATH+"forward.txt");File invertedIndexFile = new File(INDEX_PATH + "inverted.txt");forwardIndex = objectMapper.readValue(forwardIndexFile, new TypeReference<ArrayList<DocInfo>>() {});invertedIndex = objectMapper.readValue(invertedIndexFile, new TypeReference< HashMap<String,ArrayList<Weight>> >() {});long end = System.currentTimeMillis();System.out.println("加载索引结束!消耗时间为:" + (end - beg) + "ms");}

四:main方法加载索引

这里是简单测试

    public static void main(String[] args) throws IOException {Index index = new Index();index.load();System.out.println("加载索引完成");}

五:Parser类制作索引入口

总结:我们现在实现了,枚举文件,解析文件(标题,正文,url),构建索引(正排,倒排)并保存(持久化保存到硬盘中),这里的run方法,作为整个索引制作的入口(这里是单线程制作索引),我将在项目优化文章中,进行多线程制作索引的实现。

    public void run() throws IOException, InterruptedException {long beg = System.currentTimeMillis();//整个Parser类的入口//1:根据上面的路径,把该路径下的所有html文档枚举出来,推荐使用递归的方式ArrayList<File> fileList = new ArrayList<File>();enumFile(INPUT_PATH, fileList);long endEnumFile = System.currentTimeMillis();System.out.println("枚举文件完毕,消耗时间为:" + (endEnumFile - beg) + "ms");//2:打开枚举出来的文件,读取文件的内容,解析出来,构建索引for (File f : fileList) {System.out.println("开始解析" + f.getAbsolutePath());parseHTML(f);}long endFor = System.currentTimeMillis();System.out.println("遍历文件完毕!消耗时间为:" + (endFor - endEnumFile) + "ms");//3:把在内存中构造好的索引数据结构,保存到指定的文件中index.save();long end = System.currentTimeMillis();System.out.println("单线程索引制作完毕!消耗总时间为:" + (end - beg) + "ms");}

索引制作测试 

    public static void main(String[] args) throws IOException, InterruptedException {Parser parser = new Parser();
//        parser.run();parser.runByThread();//制作索引}

http://www.dtcms.com/wzjs/803360.html

相关文章:

  • 网站维护升级网站除了做流量还需要什么软件吗
  • asp.net 3.5网站开发全程解析 网络建设与运维赛项
  • 做淘宝客网站好搭建吗?手机版电脑qq登录入口
  • 模板网站试用甘肃省住房和城乡建设厅网站首页
  • 如何构建自己的网站wordpress 移动导航呼出
  • 湖北省建设教育协会网站首页陕西企业网站建设价格
  • 网站改版需要注意哪些seo问题网站优化要怎么做
  • 做网站下载好素材之后怎么建造主页高端网站建设上海
  • 免费推广网站翻译英文手把手教你学网站建设
  • 佛山网站seo三门峡网站seo
  • 瑞安自适应网站建设怎么开一个做网站的工作室
  • asp手机网站开发教程网站建设时间推进表模板
  • 课程网站建设的基本原理wordpress 获取友链
  • 电商网站建设教案邢台网站设计哪家好
  • 网站开发颜色网站开发的毕业周记
  • 蒙牛网站建设方案网站分为哪几种
  • 网站建设维护百家号什么网站专做店铺
  • 网站建设与维护案列软件行业 网站建设 模块
  • 自己做网站的软件wordpress手机视频
  • seo关键词排名怎么提升seo优化能提高网站的流量吗
  • 怎样经营好一个网站建设维护网站未签订合同
  • 新网站如何做百度收录贵阳门户网站
  • 自己可以做微网站吗wordpress轻拟物主题
  • 三门峡做网站推广建设部工程业绩网站
  • 国产做爰全免费的视频网站网站备案流程图
  • 做交易平台网站推广产品的方法和步骤
  • 在哪里建网站比较好网站基础代码html
  • 揭阳专业的网站建设价格华秋电子商城
  • 专业做网站公司哪家技术好淘宝客做网站自动更新
  • 网站移动转换办公管理软件定制