4.5年常见面试题4(思美-正大天晴1/4)

1.项目中鉴权如何做的?

客户端首次使用用户名跟密码请求登录,服务端收到请求,去验证用户名与密码;客户端在首次登陆以后,服务端再次接收http请求的时候,就只认token了,请求只要每次把token带上就行了,服务器端会拦截所有的请求,然后校验token的合法性,合法就放行。
在这里插入图片描述
网关配置
代码实现认证
资源服务配置

2.MySQL查询比较慢的情况?

慢查询系统定位到具体的出问题的SQL,然后使用explain等工具来逐步调优:type(查询使用了哪种类型:一般来说,好的sql查询至少达到range级别:只检索给定范围的行,使用一个索引来选择行,最好能达到ref:非唯一性索引扫描,返回匹配某个单独值的所有行;system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL遍历全表)、key(实际使用的索引)、rows(大致估算出找到所需的记录所需要读取的行数);SQL优化:查询语句中不要使用select *;减少子查询,使用关联查询(left join,right join,inner join)替代;减少使用IN或者NOT IN ,使用exists,not exists或者关联查询语句替代;避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。

3.MySQL千万级大表优化解决方案?

方案一:优化现有mysql数据库。优点:不影响现有业务,源程序不需要修改代码,成本最低。缺点:有优化瓶颈,数据量过亿就玩完了。(1.数据库设计和表创建时就要考虑性能;2.sql的编写需要注意优化;3.分区;4.分表;5.分库)
方案二:升级数据库类型,换一种100%兼容mysql的数据库。优点:不影响现有业务,源程序不需要修改代码,你几乎不需要做任何操作就能提升数据库性能,缺点:多花钱
方案三:一步到位,大数据解决方案,更换newsql/nosql数据库。优点:没有数据容量瓶颈,缺点:需要修改源程序代码,影响业务,总成本最高。

4.Redis项目应用场景?

1.缓存:a.短信验证码 b.redis的key保证避免重复订购 c.频繁使用的产品、项目等信息 d.失败重试:规定访问运营商接口失败只重试3次,将次数放到redis
2.分布式锁:
redis命令说明:
(1)setnx命令:set if not exists,当且仅当 key 不存在时,将 key 的值设为 value。若给定的 key 已经存在,则 SETNX 不做任何动作。
返回1,说明该进程获得锁,将 key 的值设为 value
返回0,说明其他进程已经获得了锁,进程不能进入临界区。
命令格式:setnx lock.key lock.value
(2)get命令:获取key的值,如果存在,则返回;如果不存在,则返回nil
命令格式:get lock.key
(3)getset命令:该方法是原子的,对key设置newValue这个值,并且返回key原来的旧值。
命令格式:getset lock.key newValue
(4)del命令:删除redis中指定的key
命令格式:del lock.key

5.Redis淘汰过期策略?

淘汰策略8种:volatile-lru,针对设置了过期时间的key,使用lru算法进行淘汰。
volatile-lfu,针对设置了过期时间的key,使用lfu算法进行淘汰。
allkeys-lru,针对所有key使用lru算法进行淘汰。
allkeys-lfu,针对所有key使用lfu算法进行淘汰。
volatile-random,从所有设置了过期时间的key中使用随机淘汰的方式进行淘汰。
allkeys-random,针对所有的key使用随机淘汰机制进行淘汰。
volatile-ttl,删除生存时间最近的一个键。
noeviction(默认),不删除键,值返回错误。

6.Redis如何作为队列使用?

消息队列的三种方案(List、Streams、Pub/Sub)添加链接描述不过,和专业的消息队列相比,还是有很多欠缺的地方比如消息丢失和堆积问题不好解决。因此,我们通常建议是不使用 Redis 来做消息队列的,你完全可以选择市面上比较成熟的一些消息队列比如 RocketMQ、Kafka。

7.Redis如何做编号生成?

一.引用RedissonClient
二.加锁
三,初始化编码
四.从缓存中读取编码
五. 写入缓存
六.得到实际编码
参考

8.Feign的负载均衡策略?

Feign中本身已经集成了Ribbon依赖和自动配置,固负载均衡同样适用。因此我们不需要额外引入依赖,也不需要再注册 RestTemplate 对象。在这里插入图片描述

9.Feign能否通过请求策略优先转向性能好的服务器?

可以,上述倒数第二种,相应时间加权策略
使用Ribbon的时候想要全局更改负载均衡策略,需要加一个配置类。

10.队列的使用及使用场景?

异步处理:用户登录后,发送登录短信;
流量削锋:订购接口中,通过获取RateLimiter流控来进行流量削峰保护系统;
消息通讯:发布订阅消息(客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收)。

11.Solr优缺点

Solr是一个可伸缩性的、能够即时部署的、致力于信息检索的、可以处理海量信息的、以处理自然语言文本为中心的、检索结果按相关性排序的企业级搜索引擎。
1.ElasticSearch相较于Solr更新。 Solr已经存在了更长的时间,所以它的生态系统是发达的,拥有更大的用户群,更稳定。
2.Solr支持更多格式的数据,比如JSON、XML、CSV,而Elasticsearch仅支持json文件格式。
3.Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能。Elasticsearch专为云设计,是分布式首选。
4.Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供
5.Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch:当单纯的对已有数据进行搜索时,Solr更快。当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。
6.Solr专注于文本搜索,而Elasticsearch则常用于查询、过滤和分组分析统计,Elasticsearch背后的团队也努力让这些查询更为高效。因此当比较两者时,对那些不仅需要文本搜索,同时还需要复杂的时间序列搜索和聚合的应用程序而言,Elasticsearch是最佳选择。

12.线程池?如何使用?核心参数?核心线程数和最大线程数?

线程池创建,通过 Executor 框架的工具类 Executors 来实现。

corePoolSize: 核心线程数为 5。
maximumPoolSize :最大线程数 10
keepAliveTime : 等待时间为 1L。
unit: 等待时间的单位为 TimeUnit.SECONDS。
workQueue:任务队列为 ArrayBlockingQueue,并且容量为 100;
handler:饱和策略为 CallerRunsPolicy。

线程在有任务的时候会创建核心的线程数corePoolSize
当线程满了(有任务但是线程被使用完)不会立即扩容,而是放到阻塞队列中,当阻塞队列满了之后才会继续创建线程。
如果队列满了,线程数达到最大线程数则会执行拒绝策略。
当线程数大于核心线程数事,超过KeepAliveTime(闲置时间),线程会被回收,最终会保持corePoolSize个线程。

13.Eureka如何拿到服务信息?

在这里插入图片描述
EureKa采用C-S的设计架构,即包括了Eureka Server(服务端),EureKa client(客户端)。
1.EureKa Server 提供服务注册,各个节点启动后,在EureKa server中进行注册;
2 EureKa Client 是一个Java客户端,用于和服务端进行交互,同时客户端也是一个内置的默认使用轮询负载均衡算法的负载均衡器。在应用启动后,会向Eueka Server发送心跳(默认30秒)。如果EureKa Server在多个心跳周期内没有接受到某个节点的心跳,EureKa Server将会从服务注册表中将这个服务移出(默认90秒)。

14.鉴权JWT,怎么验证,在服务的什么层面验证

一个比较好的办法是直接在网关上去校验请求的令牌是否合法;
也可以定义了一个公共模块,所有的微服务都依赖这个公共模块,这个公共模块中定义了一个拦截器,会拦截下来每一个请求,请求头中解析信息进行下一步校验。

15.Aop层面如何区分内部外部校验,内部根据Token校验,外部根据用户名密码校验?

自定义注解+AOP实现

16.如何把包推送到Docker里头

1.Dockerfile 定制镜像,然后构建、运行容器
2.a.Docker开启远程访问;b.IDEA安装Docker插件;c.IDEA配置docker d.pom文件中配置,用插件生成Dockerfile;f.对项目进行 打包。并构建镜像 到Docker 上:mvn clean package docker:build。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值