没有合适的资源?快使用搜索试试~ 我知道了~
首页信息技术面试精华:搜索引擎、ES搭建与数据处理
信息技术面试精华:搜索引擎、ES搭建与数据处理
需积分: 0 6 下载量 39 浏览量
更新于2024-06-26
1
收藏 4.96MB DOC 举报
"《百家精华面试题》文档涵盖了IT行业的多个关键知识点,主要集中在面试中常见的技术问题和概念理解上。首先,关于搜索引擎的实现,提到了使用Solr和Elasticsearch(ES)两种技术。Solr以其实时性强和对复杂数据类型的灵活性著称,适用于数据更新频繁且数据类型多样化的场景;而ES则是基于RESTful API和JSON的高效解决方案,适合处理海量数据的场景。 接着,文档讨论了前后端交互的方式,强调了通过编写接口文档,前端通过HTTP或HTTPS协议调用后端提供的API,获取所需数据。选择何种协议取决于项目的实际需求和安全要求。 关于数据传输格式,文档明确指出通常采用JSON格式,这是一种轻量级的数据交换格式,易于解析和处理。 面试者被问及如何处理两个长数字字符串相加的问题,给出了使用Java的BigInteger类示例,该类提供了处理大整数加法的功能,避免了溢出问题。 接下来,文档聚焦在数据库查询中的结果集合并,讲解了SQL的UNION和UNION ALL操作。UNION用于去除重复行,返回唯一的查询结果,而UNION ALL则保留所有结果,包括重复项。这两个操作要求参与的查询具有相同的列结构和数据类型,且只允许一个ORDER BY子句。 《百家精华面试题》是一份实用的面试指南,涵盖了搜索引擎技术、前后端协作、数据格式处理以及数据库查询技巧等内容,有助于应聘者准备面试,展示其技术实力和理论实践结合的能力。"
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/87533005/bg10.jpg)
18.1.16. redis 的数据结构
string 以 key value 形式存储
hash 以 key field value 形式存储
set 是无序集合 (key-set 集合,存取无序,不允许重复)
list 有序列表,可以在表头和表尾插入数据(key-list 集合,存取有序,允许重复)
zset(sortedSet) 有序集合 key score member 元素可以根据 score 进行排序
18.1.17. 网关的作用,
网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个
高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系
统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与
网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同层--应用层。
就是将两个使用不同协议的网络段连接在一起的设备。它的作用就是对两 个网络段中的使用不同传输协议的数据进行互
相的翻译转换。
好比是个门,对家庭来说门是门,对国家来说海关是门。在局域网里来说集线器就是网关,在二层网络里,交换机就是
网关,在三层网络里路由就是网关,说网关要看你的网是多大的,要拿中国来说,连着美国那台世界服务器的设备就是
网关。
18.1.18. 怎么获取 token,用的什么数据库存储的?
前端传过来的 code 调用接口获得的
1.登录的时候(或者第一次打开 APP 的时候),登录成功之后,我们需要给他分配一个 token。(1)token 可以是文件的
形式存着;(2)也可以存在数据库,但是存放在数据库,我个人不推荐,因为每次调用 api 接口都会对比,这样做法会
加重服务器压力;(3)用 redis 存放 token。
2.登录之后,我们要返回 token,让安卓或者 ios 去保存这个 token,以后每次操作都携带 token 去请求接口。
3.接下来就是我们要用它传给我们的 token 去对比,如果符合,那就正常返回数据,否则就返回一个标识,告诉 app 说这
个 token 不符合,需要重新登录。
原文链接:https://blog.csdn.net/qq_42618969/article/details/81237305
1、Token 的引入:Token 是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,
判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token 便应运而生。
2、Token 的定义:Token 是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器
生成一个 Token 便将此 Token 返回给客户端,以后客户端只需带上这个 Token 前来请求数据即可,无需再次带上用户名
和密码。
3、使用 Token 的目的:Token 的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
如何使用 Token?
这是本文的重点,在这里我就介绍常用的两种方式。
1、用设备号/设备 mac 地址作为 Token(推荐)
客户端:客户端在登录的时候获取设备的设备号/mac 地址,并将其作为参数传递到服务端。
服务端:服务端接收到该参数后,便用一个变量来接收同时将其作为 Token 保存在数据库,并将该 Token 设置到 session
中,客户端每次请求的时候都要统一拦截,并将客户端传递的 token 和服务器端 session 中的 token 进行对比,如果相同
则放行,不同则拒绝。
分析:此刻客户端和服务器端就统一了一个唯一的标识 Token,而且保证了每一个设备拥有了一个唯一的会话。该方法的
![](https://csdnimg.cn/release/download_crawler_static/87533005/bg11.jpg)
缺点是客户端需要带设备号/mac 地址作为参数传递,而且服务器端还需要保存;优点是客户端不需重新登录,只要登录
一次以后一直可以使用,至于超时的问题是有服务器这边来处理,如何处理?若服务器的 Token 超时后,服务器只需将
客户端传递的 Token 向数据库中查询,同时并赋值给变量 Token,如此,Token 的超时又重新计时。
2、用 session 值作为 Token
客户端:客户端只需携带用户名和密码登陆即可。
客户端:客户端接收到用户名和密码后并判断,如果正确了就将本地获取 sessionID 作为 Token 返回给客户端,客户端
以后只需带上请求数据即可。
分析:这种方式使用的好处是方便,不用存储数据,但是缺点就是当 session 过期后,客户端必须重新登录才能进行访问
数据。
18.1.19. sql:一个 user 表里面有重复的用户,求重复用户的年龄的平均值?
Select name,count(name),avg(age) from user group by name having count(name)>1
18.2. 志远思齐
1. SpringMVC 和 SpringCloud 的区别
1、Spring boot 是 Spring 的一套快速配置脚手架,可以基于 Spring Boot 快速开发单个微服务;Spring
Cloud 是一个基于 Spring Boot 实现的云应用开发工具
2、Spring Boot 专注于快速、方便集成的单个个体,Spring Cloud 是关注全局的服务治理框架;
3、Spring boot 使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,
Spring Cloud 很大的一部分是基于 Spring Boot 来实现。
4、Spring Boot 可以离开 Spring Cloud 独立使用开发项目,但是 Spring Cloud 离不开 Spring Boot,属于
依赖的关系。
2. MQ 和你们学习的 RabbitMQ 有什么区别,学习过其他的消费中间件?
MQ 的作用:
解耦:在项目启动之初是很难预测未来会遇到什么困难的,消息中间件在处理过程中插入了一个隐含的,基于数据的
接口层,两边都实现这个接口,这样就允许独立的修改或者扩展两边的处理过程,只要两边遵守相同的接口约束即可。
冗余(存储):在某些情况下处理数据的过程中会失败,消息中间件允许把数据持久化知道他们完全被处理
扩展性:消息中间件解耦了应用的过程,所以提供消息入队和处理的效率是很容易的,只需要增加处理流程就可以了。
削峰:在访问量剧增的情况下,但是应用仍然需要发挥作用,但是这样的突发流量并不常见。而使用消息中间件采
用队列的形式可以减少突发访问压力,不会因为突发的超时负荷要求而崩溃
可恢复性:当系统一部分组件失效时,不会影响到整个系统。消息中间件降低了进程间的耦合性,当一个处理消息
的进程挂掉后,加入消息中间件的消息仍然可以在系统恢复后重新处理
顺序保证:在大多数场景下,处理数据的顺序也很重要,大部分消息中间件支持一定的顺序性
缓冲:消息中间件通过一个缓冲层来帮助任务最高效率的执行
异步通信:通过把把消息发送给消息中间件,消息中间件并不立即处理它,后续在慢慢处理
RabbitMQ:
它是采用 Erlang 语言实现的 AMQP(Advanced Message Queued Protocol)的消息中间件,最初起源于金融系统,用在分
布式系统存储转发消息。
![](https://csdnimg.cn/release/download_crawler_static/87533005/bg12.jpg)
RabbitMQ 发展到今天,被越来越多的人认可,这和它在易用性、扩展性、可靠性和高可用性等方面的卓著表现是分不开
的。RabbitMQ 的具体特点可以概括为以下几点:
可靠性:RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认及发布确认等。
灵活的路由:在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ 己经提供了一些内置的
交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起,也可以通过插件机制来实现自己的交换器。
扩展性:多个 RabbitMQ 节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点。
高可用性:队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队仍然可用。
多种协议:RabbitMQ 除了原生支持 AMQP 协议,还支持 STOMP,MQTT 等多种消息中间件协议。
多语言客户端:RabbitMQ 几乎支持所有常用语言,比如 Jav a、Python、Ruby、PHP、C#、JavaScript 等。
管理界面:RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息、集群中的节点等。
插件机制:RabbitMQ 提供了许多插件,以实现从多方面进行扩展,当然也可以编写自己的插件
7.1 RocketMQ
阿里系下开源的一款分布式、队列模型的消息中间件,原名 Metaq,3.0 版本名称改为 RocketMQ,
是阿里参照 kafka 设计思想使用 java 实现的一套 mq。同时将阿里系内部多款 mq 产品(Notify、metaq)
进行整合,只维护核心功能,去除了所有其他运行时依赖,保证核心功能最简化,在此基础上配合阿里上
述其他开源产品实现不同场景下 mq 的架构,目前主要多用于订单交易系统。
具有以下特点:
� 能够保证严格的消息顺序
� 提供针对消息的过滤功能
� 提供丰富的消息拉取模式
� 高效的订阅者水平扩展能力
� 实时的消息订阅机制
� 亿级消息堆积能力
官方提供了一些不同于 kafka 的对比差异
7.2 RabbitMQ
使用 Erlang 编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP,STOMP,也正是如
此,使的它变的非常重量级,更适合于企业级的开发。同时实现了 Broker 架构,核心思想是生产者不会
将消息直接发送给队列,消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load
balance)、数据持久化都有很好的支持。多用于进行企业级的 ESB 整合。
7.3 ActiveMQ
Apache 下的一个子项目。使用 Java 完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现,少量代码就
可以高效地实现高级应用场景。可插拔的传输协议支持,比如:in-VM, TCP, SSL, NIO, UDP, multicast,
JGroups and JXTA transports。RabbitMQ、ZeroMQ、ActiveMQ 均支持常用的多种语言客户端 C++、
Java、.Net,、Python、 Php、 Ruby 等。
7.4 Redis
使用 C 语言开发的一个 Key-Value 的 NoSQL 数据库,开发维护很活跃,虽然它是一个 Key-Value 数据库存
储系统,但它本身支持 MQ 功能,所以完全可以当做一个轻量级的队列服务来使用。对于 RabbitMQ 和
![](https://csdnimg.cn/release/download_crawler_static/87533005/bg13.jpg)
Redis 的入队和出队操作,各执行 100 万次,每 10 万次记录一次执行时间。测试数据分为 128Bytes、
512Bytes、1K 和 10K 四个不同大小的数据。实验表明:入队时,当数据比较小时 Redis 的性能要高于
RabbitMQ,而如果数据大小超过了 10K,Redis 则慢的无法忍受;出队时,无论数据大小,Redis 都表现
出非常好的性能,而 RabbitMQ 的出队性能则远低于 Redis。
7.5 Kafka
Apache 下的一个子项目,使用 scala 实现的一个高性能分布式 Publish/Subscribe 消息队列系统,具有以
下特性:
� 快速持久化:通过磁盘顺序读写与零拷贝机制,可以在 O(1)的系统开销下进行消息持久化;
� 高吞吐:在一台普通的服务器上既可以达到 10W/s 的吞吐速率;
� 高堆积:支持 topic 下消费者较长时间离线,消息堆积量大;
� 完全的分布式系统:Broker、Producer、Consumer 都原生自动支持分布式,依赖 zookeeper 自动实现复杂均衡;
� 支持 Hadoop 数据并行加载:对于像 Hadoop 的一样的日志数据和离线分析系统,但又要求实时处理的限制,这
是一个可行的解决方案。
7.6 ZeroMQ
号称最快的消息队列系统,专门为高吞吐量/低延迟的场景开发,在金融界的应用中经常使用,偏重于实
时数据通信场景。ZMQ 能够实现 RabbitMQ 不擅长的高级/复杂的队列,但是开发人员需要自己组合多种
技术框架,开发成本高。因此 ZeroMQ 具有一个独特的非中间件的模式,更像一个 socket library,你不需
要安装和运行一个消息服务器或中间件,因为你的应用程序本身就是使用 ZeroMQ API 完成逻辑服务的角
色。但是 ZeroMQ 仅提供非持久性的队列,如果 down 机,数据将会丢失。如:Twitter 的 Storm 中使用
ZeroMQ 作为数据流的传输。
ZeroMQ 套接字是与传输层无关的:ZeroMQ 套接字对所有传输层协议定义了统一的 API 接口。默认支持
进程内(inproc) ,进程间(IPC) ,多播,TCP 协议,在不同的协议之间切换只要简单的改变连接字符串的
前缀。可以在任何时候以最小的代价从进程间的本地通信切换到分布式下的 TCP 通信。ZeroMQ 在背后处
理连接建立,断开和重连逻辑。
特性:
� 无锁的队列模型:对于跨线程间的交互(用户端和 session)之间的数据交换通道 pipe,采用无锁的队列算法
CAS;在 pipe 的两端注册有异步事件,在读或者写消息到 pipe 的时,会自动触发读写事件。
� 批量处理的算法:对于批量的消息,进行了适应性的优化,可以批量的接收和发送消息。
� 多核下的线程绑定,无须 CPU 切换:区别于传统的多线程并发模式,信号量或者临界区,zeroMQ 充分利用多核
的优势,每个核绑定运行一个工作者线程,避免多线程之间的 CPU 切换开销。
3. 你们的项目都有多少个微服务?
Springcloud
Dubbo
背景区别:Dubbo 是来源于阿里团队,SpringCloud 是来源于 Spring 团队,Spring 广泛遍布全球各种企业开发中,可以
确保 SpringCloud 的后续更新维护,Dubbo 虽然来自国内顶尖的阿里团队,但是曾经被阿里弃用停更,但是后来阿里又低
调重启维护。
![](https://csdnimg.cn/release/download_crawler_static/87533005/bg14.jpg)
定位区别: Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用,流量分发、流量监控和熔断。而 Spring Cloud
诞生于微服务架构时代,考虑的是微服务治理的方方面面,另外由于依托了 Spirng、Spirng Boot 的优势之上,两个框架
在开始目标就不一致,Dubbo 定位服务治理、Spirng Cloud 是一个生态。因此可以大胆地判断,Dubbo 未来会在服务治
理方面更为出色,而 Spring Cloud 在微服务治理上面无人能敌。
模块区别:1、Dubbo 主要分为服务注册中心,服务提供者,服务消费者,还有管控中心;2、相比起 Dubbo 简单的四个
模块,SpringCloud 则是一个完整的分布式一站式框架,他有着一样的服务注册中心,服务提供者,服务消费者,管控台,
断路器,分布式配置服务,消息总线,以及服务追踪等;
性能区别:Dubbo 的每次测试除去网络波动之外,都表现非常稳定
Spring Cloud
在第一次最慢,之后越来越快,连续测试
4
次以上单次测试性能超过
dubbo
Spring Cloud-zuul
在第一次最慢,之后也表现越来越快,连续
4
次以上测试
单次性能与
dubbo
相近,相差在
0.02ms
内
4. 你的这个微服务部署多少台服务器?
可以用 docker 实现多服务管理
5. springmvc 流程
1)WEB 容器将该请求转交给 DispatcherServlet 处理
2)DispatcherServlet 接收到请求后, 将根据 请求信息 交给 处理器映射器 (HandlerMapping)
3)HandlerMapping 根据用户的 url 请求 查找匹配该 url 的 Handler,并返回一个执行链
4)DispatcherServlet 再请求 处理器适配器(HandlerAdapter) 调用相应的 Handler 进行处理并返回 ModelAndView
给 DispatcherServlet
5)DispatcherServlet 将 ModelAndView 请求 ViewReslover(视图解析器)解析,返回具体 View
6)DispatcherServlet 对 View 进行渲染视图(即将模型数据填充至视图中)
7)DispatcherServlet 将页面响应给用户
6. dubbo 做了什么
1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何 API 侵入。
2.软负载均衡及容错机制,可在内网替代 F5 等硬件负载均衡器,降低成本,减少单点。
3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的 IP 地址,并且能够平滑
添加或删除服务提供者。
Dubbo 采用全 spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,
Dubbo 基于 Spring 的 Schema 扩展进行加载。
简单来说,用户发送的请求转交给 Nginx,然后 Nginx 决定将请求发送那个服务器(此处为 Tomcat),然后 Tomcat
将请求发送给 Dubbo,由它来决定继续调用哪个 service 层去数据库读取数据。
Dubbo 的存在简单来说就是要减小 service 层的压力。
7. 说说 springmvc 和 springboot
1.首先这两者专注的领域不同,解决的问题也不一样
2.Spring MVC 是基于 Servlet 的一个 MVC 框架,通过 Dispatcher Servlet, ModelAndView 解决 WEB 开发的问题.但是
它的配置繁琐,大量 .xml、.properties 文件。并且用 maven 管理项目的时候很容易出现 jar 包冲突。
2.而 Spring Boot 是基于 Spring 的一套快速开发整合包,它不仅仅包含了 spring mvc ,还包括 spring JPA、spring security
等
实现自动配置,降低项目搭建的复杂度.而且自带 tomcat.pom.xml 中可以使用 starter 的方式配置,简化配置还能解决 jar
包冲突问题。
spring-boot-starter-web spring-boot-starter-data-jpa spring-boot-starter-redis
3.但他们的基础都是 Spring 的 IOC 和 AOP
4.spring mvc 打包后是 war 包,spring boot 是 jar 包
8. 分布式定时任务说一下
quartz 是一个开源的分布式调度库,它基于 java 实现。
> 它有着强大的调度功能,支持丰富多样的调度方式,比如简单调度,基于 cron 表达式的调度等等。
剩余175页未读,继续阅读
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/f063a9de83e446449b06890511ed684c_u011731544.jpg!1)
专治八阿哥的孟老师
- 粉丝: 2669
- 资源: 116
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 利用迪杰斯特拉算法的全国交通咨询系统设计与实现
- 全国交通咨询系统C++实现源码解析
- DFT与FFT应用:信号频谱分析实验
- MATLAB图论算法实现:最小费用最大流
- MATLAB常用命令完全指南
- 共创智慧灯杆数据运营公司——抢占5G市场
- 中山农情统计分析系统项目实施与管理策略
- XX省中小学智慧校园建设实施方案
- 中山农情统计分析系统项目实施方案
- MATLAB函数详解:从Text到Size的实用指南
- 考虑速度与加速度限制的工业机器人轨迹规划与实时补偿算法
- Matlab进行统计回归分析:从单因素到双因素方差分析
- 智慧灯杆数据运营公司策划书:抢占5G市场,打造智慧城市新载体
- Photoshop基础与色彩知识:信息时代的PS认证考试全攻略
- Photoshop技能测试:核心概念与操作
- Photoshop试题与答案详解
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)