A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大蓝鲸小蟀锅 于 2017-12-21 14:40 编辑

【南京校区】学员面试题及整理

1:solr技术整理
olr如何实现搜索的?
倒排索引,先抽取文档中词,并建立词与文档id的映射关系,然后查询的时候会根据词去查询文档id,并查询出文档
Solr过滤器
Solr的过滤器对接收到的标记流(TokenStream )做额外的处理
过滤查询,在查询时设置
Solr原理
Solr是基于Lucene开发的全文检索服务器,而Lucene就是一套实现了全文检索的api,其本质就是一个全文检索的过程。全文检索就是把原始文档根据一定的规则拆分成若干个关键词,然后根据关键词创建索引,当查询时先查询索引找到对应的关键词,并根据关键词找到对应的文档,也就是查询结果,最终把查询结果展示给用户的过程
Solr基于什么
基于lucene搜索库的一个搜索引擎框架,lucene是一个开放源码的全文检索引擎工具包
solr怎么设置搜索结果排名靠前
设置文档中域的boost值,值越高相关性越高,排名就靠前
IK分词器原理
本质上是词典分词,在内存中初始化一个词典,然后在分词过程中逐个读取字符,和字典中的字符相匹配,把文档中的所有词语拆分出来的过程
solr的索引查询为什么比数据库要快
Solr使用的是Lucene API实现的全文检索。全文检索本质上是查询的索引。而数据库中并不是所有的字段都建立的索引,更何况如果使用like查询时很大的可能是不使用索引,所以使用solr查询时要比查数据库快
solr索引库个别数据索引丢失怎么办
首先Solr是不会丢失个别数据的。如果索引库中缺少数据,那就向索引库中添加
Lucene索引优化
直接使用Lucene实现全文检索已经是过时的方案,推荐使用solr。Solr已经提供了完整的全文检索解决方案
多张表的数据导入solr(解决id冲突)
在schema.xml中添加uuid,然后solrconfig那边修改update的部分,改为使用uuid生成
solr如何分词,新增词和禁用词如何解决
schema.xml文件中配置一个IK分词器,然后域指定分词器为IK
新增词添加到词典配置文件中ext.dic,禁用词添加到禁用词典配置文件中stopword.dic,然后在schema.xml文件中配置禁用词典:<filter class="solr.StopFilterFactory" ignore="true" words="/禁止词文件目录"/>
solr多条件组合查询
创建多个查询对象,指定他们的组合关系,Occur.MUST(必须满足and),Occur.SHOULD(应该满足or),Occur.MUST_NOT(必须不满足not)
2:redis部分
redis备份与恢复
redis所有数据都是保存到内存中的
redis有两种持久化机制:RDB,快照形式,它会定期把内存中当前时刻的数据保存到磁盘,是Redis默认支持的持久化方案;AOF(append only file):它是把所有对redis数据库操作的命令,比如说增删改操作的命令,保存到文件中,数据库恢复时把所有的命令执行一遍即可;我们一般会同时开启这两个配置
如何配置:
RDB默认不要配置,AOF修改redis.conf配置:将appendonly 改为yes
Rdb持久化通过快照完成,快照执行时机时可以配置的,默认预置了3个条件,比如说900秒内至少1个键被更改时就会进行快照,将内存中的所有数据都存储在硬盘上,其在快照的过程中不会修改RDB文件,快照结束后才会将旧的文件替换成新的,所以任何时候RDB文件都是完整的,这就使得我们可以通过定时备份RDB文件来实现redis数据库的备份
Redis启动时会读取RDB快照文件将数据从硬盘载入到内存,通过RDB方式实现持久化,一旦redis异常退出,就会丢失最后一次快照以后更改的所有数据,所以我们一般会组合RDB和AOF的方式,来减少数据的丢失,默认情况下redis没有开启AOF方式的持久化,配置开启后,每执行一条会更改redis中的数据的命令,redis就会将该命令写入硬盘的AOF文件中,启动redis时redis会逐个执行        AOF文件中的命令来将硬盘中的数据载入到内存中去(可配置AOF重写条件以及硬盘刷新缓存机制)
优点:读写分离,通过复制可以实现读写分离以提高服务器的负载能力,可以通过复制功能建立多个从数据库,主数据库只进行写操作,而从数据库负责读操作。
从数据库持久化:持久化通常相对比较耗时,为了提高性能,可以通过复制功能建立一个(或若干个)从数据库,并在从数据库中启用持久化,同时在主数据库禁用持久化。当从数据库崩溃时重启后主数据库会自动将数据同步过来,所以无需担心数据丢失
两种方案同时开启使用AOF恢复数据库,因为其shuju 完整性更高,持久化频率为每秒
Redis持久化配置方便,集群
redis集群怎么连接
通过client连接时,在命令最后添加-c指令:# redis01/redis-cli -p 7002 -c
-c:代表连接的是redis集群
有没有对jedis进行封装
封装了,将常用的操作redis的方法提取出一个接口,分别对应单机版和集群版创建两个实现类
Redis5种数据类型,常用命令
数据类型:String,hash,list,set,sortedset
常用命令:get,set,incr,decr,exists,lpush,lpop,rpush,rpop
3:Dubbo部分
dubbo的作用
提供RPC远程服务调用方案,实现不同系统之间的通信的,解决分布式部署,soa服务治理问题,
Dubbo心跳机制,通信过程
心跳:心跳机制是定时发送一个自定义的结构体([心跳包],让对方知道自己还活着,以确保连接的有效性的机制
心跳机制:
ConfigServer配置中心和每个server/client之间会作一个实时的心跳检测(因为它们建立的是长连接),比如几秒钟检测一次,收集每个server提供的服务信息,每个client信息,整理出一个服务列表
当某个server不可用时,就会更新受影响的服务的服务提供者列表,把这个服务提供者给删除掉,同时将新的服务提供者列表推送给消费者
当某个消费者挂了,就会更新受影响的服务对应的消费者列表
通信过程:
服务容器启动时,加载运行服务提供者
服务提供者启动时,向注册中心注册自己提供的服务
服务消费者启动时,向注册中心订阅自己所需的服务
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用(当有多个服务提供者的时候,Client根据一定的规则来进行负载均衡,如轮询,随机,按权重等)
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
dubbo服务开发流程,运行流程?zookeeper注册中心的作用?
使用流程:
第一步:要在系统中使用dubbo应该先搭建一个注册中心,一般推荐使用zookeeper。
第二步:有了注册中心然后是发布服务,发布服务需要使用spring容器和dubbo标签来发布服务。并且发布服务时需要指定注册中心的位置。
第三步:服务发布之后就是调用服务。一般调用服务也是使用spring容器和dubbo标签来引用服务,这样就可以在客户端的容器中生成一个服务的代理对象,在action或者Controller中直接调用service的方法即可。
Zookeeper注册中心的作用主要就是注册和发现服务的作用。类似于房产中介的作用,在系统中并不参与服务的调用及数据的传输。
Dubbo原理[](复杂)
使用rpc协议进行远程调用,直接使用socket通信,传输效率高,并且可以统计出系统之间的调用关系、调用次数
什么是rpc协议
远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网
络技术的协议
4:webService
Webservice就是web应用程序,它能使得运行在不同服务器上的不同应用无须借助其他的软件或硬件,就可相互交换数据或集成,无论这些应用所使用的语言、 平台或内部协议是什么, 都可以相互交换数据;简单说就是进行分布部署的多个系统之间的数据通信
SOAP:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。
WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。
UDDI (Universal Description, Discovery, and Integration): 是一个主要针对Web服务供应商和使用者的新项目,服务注册中心
Restful
一种软件架构风格,来描述网络中client和server的交互,其本身并不实用,实用的是如何设计restful API;简单说来就是使用这种风格来达到一种这样的效果:使用URL来定位资源,用HTTP(GET,POST,DELETE,DETC)动词来描述操作;
1、        为什么出现restful结构呢?
因为移动互联网的发展,各种类型的客户端client层出不穷,restful可以提供一套统一的服务接口来供web,ios和android客户端来访问服务器资源;
2、        restful风格的好处:
基于这种风格,软件编写可以更简洁
它是基于http协议的,支持多种消息格式传输,如xml,json
更易于实现缓存机制(第一次访问资源 缓存,第二次访问资源,返回 304 客户端调用本地)
POST:新建或更新资源
GET:获取资源
PUT:更新资源
DELETE:删除资源
访问资源路径:服务器根目录地址 + web.xml 配置 + applicationContext.xml address 配置 + 类 @Path +方法 @Path
5:ActiveMQ
activemq集合如何解决高并发?
配置数据分配机制,默认是消费者一下子抓取1000条消息
Mq的topic模式,如何防止数据丢失
Mq只向当前启动的消费者发送消息,关掉的消费者会错过很多消息,并无法再次接收这些消息
解决方案:持久化订阅,每个订阅端定义一个id,在订阅时向activemq注册。发布消息和接收消息时需要配置发送模式为持久化。此时如果客户端接收不到消息,消息会持久化到服务端,直到客户端正常接收后为止
Mq点对点模式,如何保证客户端一定获取消息操作成功(手动和自动)
第一步:配置RedeliveryPolicy,即消息重发机制,如果发送失败,需要这个来确保可以成功发送消息。在activemq的xml配置即可
http://blog.csdn.net/dly1580854879/article/details/68489798
第二步:ACK 确认机制,消费者接收消息后需要发送确认字符来确保成功接收
http://blog.csdn.net/dly1580854879/article/details/68490197
http://blog.csdn.net/coderepository/article/details/7023304
Activemq的瓶颈值:
根据网上一般评测文档上来看,每秒的消息吞吐在2000以上, acticemq也可以集群化部署, 也是使用zookeeper来搭建
acitveMQ的作用、原理?(生产者。消费者。 p2p、订阅实现流程)
Activemq的作用就是系统之间进行通信。当然可以使用其他方式进行系统间通信,如果使用Activemq的话可以对系统之间的调用进行解耦,实现系统间的异步通信。原理就是生产者生产消息,把消息发送给activemq。Activemq接收到消息,然后查看有多少个消费者,然后把消息转发给消费者,此过程中生产者无需参与。消费者接收到消息后做相应的处理和生产者没有任何关系
activemq在项目中如何应用的
Activemq在项目中主要是完成系统之间通信,并且将系统之间的调用进行解耦。例如在添加、修改商品信息后,需要将商品信息同步到索引库、同步缓存中的数据以及生成静态页面一系列操作。在此场景下就可以使用activemq。一旦后台对商品信息进行修改后,就向activemq发送一条消息,然后通过activemq将消息发送给消息的消费端,消费端接收到消息可以进行相应的业务处理

2 个回复

倒序浏览
回复 使用道具 举报
@狂奔 来自手机 中级黑马 2017-12-21 14:44:42
藤椅
好的。学习了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马