网站设计排版怎么做/手机百度问一问

网站设计排版怎么做,手机百度问一问,增城哪家网站建设好,免备案的网站阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 文章导读 阿华将发布项目复盘系列的文章,旨在: 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.mzph.cn/pingmian/70314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解惑Python:一文解决osgeo库安装失败问题

Osgeo&#xff08;Open Source Geospatial Foundation&#xff09;是一个支持开源地理空间数据处理的基金会&#xff0c;我们可以在python中使用“osgeo”库来访问其提供的高效地理空间数据。例如&#xff0c;我们使用该模块提供的GDAL处理栅格数据&#xff0c;使用OGR处理矢量…

React入门 - 0.React简介

React入门 - React简介 A Brief Introduction to React By JacksonML 1. 关于React React是一个知名的Web框架。众所周知&#xff0c;jQuery, Angular, Vue等框架都曾闪亮登场&#xff0c;并且&#xff0c;都仍然在全球市场占有一席之地。React这个颇有担当的新锐&#xff0…

如何在Windows下使用Ollama本地部署DeepSeek R1

参考链接&#xff1a; 通过Ollama本地部署DeepSeek R1以及简单使用的教程&#xff08;超详细&#xff09; 【DeepSeek应用】DeepSeek R1 本地部署&#xff08;OllamaDockerOpenWebUI&#xff09; 如何将 Chatbox 连接到远程 Ollama 服务&#xff1a;逐步指南 首先需要安装oll…

网络原理-

文章目录 协议应用层传输层网络层 数据链路层 协议 在网络通信中,协议是非常重要的概念.协议就是一种约定. 在网络通信过程中,对协议进行了分层 接下来就按照顺序向大家介绍每一种核心的协议. 应用层 应用层是咱们程序员打交道最多的一层协议.应用层里有很多现成的协议,但…

从零搭建微服务项目Base(第7章——微服务网关模块基础实现)

前言&#xff1a; 在前面6章的学习中已经完成了服务间的调用实现&#xff0c;即各微服务通过nacos或eureka服务器完成服务的注册&#xff0c;并从nacos中拉取配置实现热更新。当某个服务接口需要调用其他服务时&#xff0c;通过feign定义接口&#xff0c;并通过注解配置服务名…

在Vue项目中使用three.js在前端页面展示PLY文件或STL文件

前言&#xff1a;这是一个3d打印局域网管理系统的需求 一、安装three.js three.js官网&#xff1a;https://threejs.org/docs/#manual/en/introduction/Installation 我用的是yarn,官网用的是npm 二、使用three.js 1.在script部分导入three.js import * as THREE from thr…

DeepSeek 助力 Vue 开发:打造丝滑的右键菜单(RightClickMenu)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

10分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统

作者&#xff1a;后端小肥肠 目录 1. 前言 为什么选择DeepSeek&#xff1f; 本文技术栈 2. 环境准备 2.1. 后端项目初始化 2.2. 前端项目初始化 3. 后端服务开发 3.1. 配置文件 3.2. 核心服务实现 4. 前端服务开发 4.1. 聊天组件ChatWindow.vue开发 5. 效果展示及源…

通过监督微调提升多语言大语言模型性能

引言 澳鹏助力一家全球科技公司提升其大语言模型&#xff08;LLM&#xff09;的性能。通过提供结构化的人工反馈形式的大语言模型训练数据&#xff0c;让该模型在30多种语言、70多种方言中的表现得到优化。众包人员们进行多轮对话&#xff0c;并依据回复的相关性、连贯性、准确…

大数据开发治理平台~DataWorks(核心功能汇总)

目录 数据集成 功能概述 使用限制 功能相关补充说明 数据开发 功能概述 数据建模 功能概述 核心技术与架构 数据分析 功能概述 数据治理 数据地图 功能概述 数据质量 功能概述 数据治理资产 功能概述 使用限制 数据服务 功能概述 数据集成 DataWorks的数据…

STM32 看门狗

目录 背景 独立看门狗&#xff08;IWDG&#xff09; 寄存器访问保护 窗口看门狗&#xff08;WWDG&#xff09; 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…

vue3-03初学vue3中的配置项setup(Composition API (组合API组件中所用到的:数据、方法等,均要配置在setup中)

1.关于setup Vue3.0中一个新的配置项&#xff0c;值为一个函数.setup是所有Composition API (组合API)“表演的舞台”m组件中所用到的:数据、方法等等&#xff0c;均要配置在setup中。 2..setup函数使用 setup函数的两种返回值 1.若返回一个对象&#xff0c;则对象中的属性、…

leetcode 2585. 获得分数的方法数

题目如下 数据范围 莫要被困难的外衣骗了&#xff0c;本题就是有数量限制的完全背包问题。显然我们可以令 f(x,y)为当有x种题目时分数为y时的方法数 令某种题目的数量为k 那么方法数应该是 f(x,y) f(x - 1,y - k * (分值))其中(0 < k < 题目数量)通过代码 class So…

VS Code 如何搭建C/C++开发环境

目录 1.VS Code是什么 2. VS Code的下载和安装 2.1 下载和安装 2.2.1 下载 2.2.2 安装 2.2 环境的介绍 2.3 安装中文插件 3. VS Code配置C/C开发环境 3.1 下载和配置MinGW-w64编译器套件 3.1.1 下载 3.1.2 配置 3.2 安装C/C插件 3.3 重启VSCode 4. 在VSCode上编写…

数仓搭建:DWS层(服务数据层)

DWS层示例: 搭建日主题宽表 需求 维度 步骤 在hive中建数据库dws >>建表 CREATE DATABASE if NOT EXISTS DWS; 建表sql CREATE TABLE yp_dws.dws_sale_daycount( --维度 city_id string COMMENT 城市id, city_name string COMMENT 城市name, trade_area_id string COMME…

伪类选择器

作用&#xff1a;选中特殊状态的元素 一、动态伪类 1. :link 超链接 未被访问 的状态。 2. :visited 超链接 访问过 的状态。 3. :hover 鼠标 悬停 在元素上的状态。 4. :active 元素 激活 的状态。 什么是激活&#xff1f; —— 按下鼠标不松开。 注意点&#xf…

Kubernetes:EKS 中 Istio Ingress Gateway 负载均衡器配置及常见问题解析

引言 在云原生时代&#xff0c;Kubernetes 已经成为容器编排的事实标准。AWS EKS (Elastic Kubernetes Service) 作为一项完全托管的 Kubernetes 服务&#xff0c;简化了在 AWS 上运行 Kubernetes 的复杂性。Istio 作为服务网格领域的佼佼者&#xff0c;为微服务提供了流量管理…

挪车小程序挪车二维码php+uniapp

一款基于FastAdminThinkPHP开发的匿名通知车主挪车微信小程序&#xff0c;采用匿名通话的方式&#xff0c;用户只能在有效期内拨打车主电话&#xff0c;过期失效&#xff0c;从而保护车主和用户隐私。提供微信小程序端和服务端源码&#xff0c;支持私有化部署。 更新日志 V1.0…

unity 设置可配置文件asset

使用可序列化类保存配置&#xff0c;并且将可序列化类保存成Unity的自定义文件&#xff08;.asset&#xff09;,然后配置自定义文件&#xff08;.asset&#xff09;。 [Serializable][CreateAssetMenu(menuName "ScriptableOject/BuildConfig")]public class BuildC…

一周学会Flask3 Python Web开发-http响应状态码

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 在Flask程序中&#xff0c;客户端发出的请求触发相应的视图函数&#xff0c;获取返回值会作为响应的主体&#xff0c;最后生成…