面试准备:缓存、dubbo、GC、springBoot

meituan2

 

缓存

将缓存推到离用户最近的地方。

脏缓存清理

多级缓存

redis缓存

热点内存本地缓存

nginx proxy cache缓存

nginx lua缓存

redis缓存

可以配置刷新磁盘策略 ?

redis是集中式缓存节点:redis缓存管理方便

怎么均匀分散?

redis部署方式

  • 单机版:故障单点瓶颈、挂了业务都会block。
  • 哨兵模式:  sentinal 心跳检测 选master
    • 缺点: 多套主从的时候,新增一个机器,hash值计算要在客户端重新计算,机器还涉及到数据迁移。
  • 集群cluster模式: 雪花状集群, 两读两写, 每台机器都和其他机器网状连接,我在集群中处于什么地位。有竞争算法。
    • 超过半数投票,就可以认为这个状态。
    • 使用时连接任意机器,就可以查询所有数据。
    • 当某一个故障,rehash分片会进行调整。对应key不在自己机器管理范畴,reask返回给客户端。
    • jedis jar包,已经集成了这种管理。
    • jedis客户端已经集成了这个配置。

 

redis部署 集群 方式 通信

redis的数据格式 能存哪几种 编码方式   bitmap怎么存全栈的签到三天次数 

 

交易的逻辑 相关面试问题 

 

dubbo

  • Dubbo本身是有监控的【Monitor】,provider和consumer都会将一些统计信息进行监控。
  • Dubbo的注册中心最常见的是Zookeeper和Redis这些常见的分布式中间件,同时Dubbo也支持自定义扩展中心和多注册中心的配置。
  • Dubbo协议特点: 传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串,基于以上描述,我们一般建议Dubbo用于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
  • Dubbo是把微服务之间的调用发挥到了极致,除了速度还提供了很多诸如本地存根,隐式参数之类的特性。  但是SpringCloud更偏大而全,提供了微服务的整套服务治理的方案。

dubbo特性

  • 启动检查
    • 检验服务提供者的可用性。验证过程中出现问题,阻止整个Spring容器初始化。
    • 不建议取消这个检查。@Reference(interfaceClass = UserAPI.class, check = false)
    • 一般谁引用,就在谁里面配。
  • 负载均衡
    • Random 随机
    • RoundRobin 轮询 (常用)
    • LeastActive 最少活跃调用数 。使慢的提供者收到更少的请求。(常用)
    • ConsistentHash 一致性hash 相同参数的请求总是发到同一提供者。(不常用)
  •  多协议支持 protocol

    • name:dubbo (常见的)

    • 还支持RMI、Hessian、HTTP、Redis等
    • 这些主要差异在连接方式上
      • dubbo 长连接、单连接,TCP协议,NIO异步传输。100K左右极限。
  • 异步调用
    • NIO 非阻塞
    • Future特性 
      •  

        调用过去 返回一个Future 5.等待结果

      • 不用阻塞 

  • 热点数据缓存 结果缓存

    • dubbo 类似osCache 本地缓存

  • 连接和并发数控制
    • 超出部分以错误形式返回
    • 可以防止服务雪崩
  • dubbo服务分组
    • 一个接口有多种实现

RPC框架

远程过程调用 remote pric~zer call

RCP都会有服务消费、服务提供、注册中心,还要接入监控平台,dubbo admin。

Dubbo线程模型

  • IO线程池 处理IO receive
  • 业务线程池 service的回调 业务
  • boss线程 连接信息 

Dubbo 服务暴露, 调用过程(考察的是源码)

 

 serverbin组成urlqueryString形式:包括 servername +servermethon+协议+超时时间。

传到zk中,生成临时节点。

dubbo 服务发现 和调用过程

afterPropertiesSet()-》获取consumer的配置 包括application应用配置信息。

拉取注册信息》加载dubbo。registry》抓取configCenter内容》落到moniter从发IGMap中

》getObject操作是跳过的在启动时。》checkAndUpdate 》返回一个asyncResult》里面包含了rpc的一个结果。》里面有rpc的内容,最终会解锁response,查出返回结果。

调用时,是通过代理方式,future等待的方式,等待远端返回。

 

 

 

数据库 binlog 能存几种格式 什么时间存的

 

性能

性能评估指标

  • 并发
  • TPS 每秒处理的transaction (数据库中是写入的)
  • QPS 一秒钟处理多少查询  (数据库中是查询 快照读)
  • 耗时 端到端耗时 服务端耗时
  • 95线 95%的请求落在什么范围 eg:250ms 去掉网络抖动的影响
  • 99线

 

GC

分代收集算法

  • 年轻代
  • 老年代
  • 1.8及之前 用CMS 好一点 1.8之后用G1

CMS 和 parnew

https://www.cnblogs.com/jiangym/p/15885161.html#_label4_0

  • 并发的时候不STW,单个的时候一般都STW
  • 初始标记标记根的可达性
  • 并发标记遍历标记根下面的可达性
  • 重新标记 标记并发期间的可达性

GC调优一般要把STW时间缩短。

G1

  • 最大收集时间 例如50ms
  • 比cms 寻址 递归 效率高,G1有单元和内存对象分配和标记,空间换时间

调参

内存大小取舍

  • 扩大内存可更少触发gc
  • 内存太大,触发gc停顿的时间长

参数

  • 吞吐量 非GC停顿/总时间  至少优化到95%
  • Xms 启动时堆内存大小
  • Xmx 堆内存最大限制  一般设置成一样 防止扩缩容 
  • -XX:NewSize 年轻代大小 -XX:MaxNewSize 年轻代大小  一般也都设置成一样

优化参数

yongGc 40ms内

major gc stw总和100ms内

fullgc 1s内

CMS

cms要设置线程数 因为程序默认读的是机器的 不是docker的 ,设置了才能读需要的数量。

3,4:触发两次fullGC才去碎片整理

70是fullGC阈值

5:设置only ,就是每次都用这个阈值。

 G1

日志

  • 同步日志
    • log.info 直接同步刷盘 高并发打info 对磁盘有压力内容大。刷盘阻塞。
    • 所以一定要有效,只打关键信息。
  • 异步日志
    • log4j的synclogger 异步刷盘。有一个内存管道buffer,有可能失败,打印不出来。
  • 日志归档
    • error.log -> error_2000_1_1.log
    • 这个过程是error.log加锁了, 之后打zip包,清空error.log,再新建error.log。
    • 在这个期间,写入都阻塞。
    • 可以改成大小切分,打包快,而且分散。
    • 切分阈值要有控制。
    • 要0点左右随机秒级时间偏移归,防止量大。
    • 切分之后,trace影响。

源码:j2ee web服务器tomcat的结构以及其类加载器的流程

todo

springboot启动流程

 SpringApplication.run(ActivityApplication.class, args);
 

 run-》springalllication -》(deduceFromClassPath -》 加载类型servlet-》加载DispatcherServlet)

 run方法: 启动监听器

StopWatch 监听时间

 prepareEnvironment 准备环境变量
printBanner 打印banner 
 createApplicationContext
 callRunners 对所有runner启动。
 看懵了 先不看了

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

安全

SQL注入 #变量替换 $是直接拼接。

XSS跨站点

  1. 利用脚本语言,把script关键字,存到被攻击站的数据库。用户查询之后,运行script命令,执行攻击代码。

  解决 : 设置httponly

CSRF跨站点

  1. 利用浏览器同源中,攻击站和被攻击同时加载,cookie一致,攻击直接从浏览器请求了被攻击战。

  解决:cookie hash后,存到源站A的攻击。

    web token 服务端生成UUID

 好文章:

https://mp.weixin.qq.com/s?spm=ata.21736010.0.0.637429a9s07CQd&__biz=MjM5NjQ5MTI5OA==&mid=2651751537&idx=1&sn=c50a434302cc06797828782970da190e&chksm=bd125d3c8a65d42aaf58999c89b6a4749f092441335f3c96067d2d361b9af69ad4ff1b73504c&scene=21#wechat_redirect

 

https://mp.weixin.qq.com/s?spm=ata.21736010.0.0.637429a9s07CQd&__biz=MjM5NjQ5MTI5OA==&mid=2651752247&idx=1&sn=2cd5711eeffd5cf8ce55219f2d1fddce&chksm=bd125e7a8a65d76c863f370df0160a225b85ea85d01039a5f575a9180d7644e4e86316fc2525&scene=21#wechat_redirect

 

https://mp.weixin.qq.com/s?spm=ata.21736010.0.0.637429a9s07CQd&__biz=MjM5NjQ5MTI5OA==&mid=2651754955&idx=1&sn=8411133d2e5f22b9e2c5a34cdc67985d&chksm=bd1248868a65c1900dd1b7203ce17159740253df2324a208ea9c71ee764e1bde1ed2616d77ce&scene=21#wechat_redirect

 

https://mp.weixin.qq.com/s?spm=ata.21736010.0.0.637429a9s07CQd&__biz=MjM5NjQ5MTI5OA==&mid=2651752559&idx=1&sn=c720b67e93db1885d72dab8799bba78c&chksm=bd1251228a65d834db610deb2ce55003e0fc1f90793e84873096db19027936f6add301242545&scene=21#wechat_redirect

 

https://mp.weixin.qq.com/s?spm=ata.21736010.0.0.637429a9s07CQd&__biz=MjM5NjQ5MTI5OA==&mid=2651751455&idx=1&sn=b67a0fe617f1f1d3a6ee2217f7b4e853&chksm=bd125d528a65d44424b60a3c9890fe36773da7b2b4c1df9cea33c61936133718571d78e44207&scene=21#wechat_redirect

 

https://mp.weixin.qq.com/s?spm=ata.21736010.0.0.637429a9s07CQd&__biz=MjM5NjQ5MTI5OA==&mid=2651753051&idx=1&sn=db8b5909da19ba5a412e874bb94b7853&chksm=bd1253168a65da00ec5eb4cb5bf6aadab593dedaf3484bd0480acaa1008f031dabeea8b126c0&scene=21#wechat_redirect

 

posted @ 2023-07-21 10:42  CodingOneTheWay  阅读(16)  评论(0编辑  收藏  举报
回到顶部