发表于: 2020-01-09 19:47:48

3 1269


啥也不说就是干!!!

今天完成的事情:

任务 6 深度思考部分:

1.后台只允许有列表页和详情页,列表页分为搜索区和列表区和操作区,原因是什么?有没有其他设计方式,相比之下各自的好处是什么?

不太明白问题要问啥

2.什么叫集群?缓存应该在什么情况下使用集群?有哪些实现集群的方案? 

集群是同一个web应用部署到多台 tomcat 上面,这些 tomcat 同时提供服务,每一台服务器都是缺一不可的

缓存集群策略可以保证服务的高可用,高并发,高可扩展

Redis 使用 Redis-cluster 实现集群方案

所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.节点的fail是通过集群中超过半数的节点检测失效时才生效

3.什么是压测,为什么要进行压力测试?JMETER工具的使用 

压力测试,是确立系统稳定性的一种测试方法,通常在系统正常运作范围之外进行,以考察其功能极限和隐患
通过不断向被测系统施加“压力”,观察测试系统在压力情况下的性能表现,考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在
可以模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作

为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数

4.Memcache和Redis可否做集群?什么样的情况下应该做集群?  

问题3已经回答过了

5.什么是脏数据,缓存中是否可能产生脏数据,如果出现脏数据该怎么处理?

脏数据:源系统中的数据不在给定的范围内或对于实际业务毫无意义,或是数据格式非法,以及在源系统中存在不规范的编码和含糊的业务逻辑。

脏读:读取出来脏数据就叫脏读。

缓存产生脏数据:数据库数据更新了,但是缓存中的数据没有及时更新

6.插入,更新和查询数据的时候,读写缓存和DB的顺序应该是怎么样的?

查询数据时候先查缓存,缓存没有再去查数据库

更新数据时候,应该先删除缓存再去更新数据库里面的数据

7.JVM缓存和Memcache这种缓存的区别在哪里?是否可以不使用Memcache,只用虚拟机内存做缓存?

JVM缓存:jdk虚拟机缓存,需要 Heap区域内的空间足够,如果不够则使用触发GC在内的方法获得空间;获得空间之后会找一组堆内的连续地址分配数组
Memcache缓存:用的是系统内存

jvm缓存比memcache快,但是jvm内存有限,所以还是需要memcache来缓存

8.缓存应该在Service里,还是应该存放在Controller里,为什么?  

应该统一放到 service 里面,先从缓存查,如果没有的话再从数据库查,查完以后再放入缓存中。这些逻辑属于业务逻辑。放在 Service 层比较合适。Controller 只关心调用并将数据返回给前端

9.什么叫穿透DB?什么情况下会发生,穿透DB后会发生什么事情?  

穿透 DB 是指 Redis 缓存数据大批时效,然后大量的请求直接向数据库,会瞬间对 数据库造成很大的压力

10.什么叫命中率?正常来讲,命中率应该控制在多少?  

终端用户访问加速节点时,如果该节点有缓存住了要被访问的数据时就叫做命中,如果没有的话需要回原服务器取,就是没有命中

命中率=命中数/(命中数+没有命中数)

命中率应该在 95% 以上

11.什么样的数据适合存在缓存中?缓存的淘汰算法有哪些?  

这里的数据分为两块,第一是数据库的数据,第二是页面的一些静态数据。

这里说的是数据库的数据。

页面的一些静态数据不适合存放在缓存中。

然后对于上面提出的数据不一致的问题,所以缓存的数据也有要求。

不要缓存那些对于数据一致性要求很高的数据。

如果这个数据存在被修改的可能性,那么最好不要存缓存,要么,就不要放数据库,只放缓存。

那些对于数据一致性不高的数据,都是可以放的。

强调一点是,如果这个数据放了,但是对于这个数据的操作不是修改,而是只有删除的话,也是可以存放缓存的,因为在实际操作中,如果一个删除操作被执行的时候,缓存可以先进行删除,这样就能确保没有用户能够读取到删除之后的数据,然后再对数据库进行删除。

12.什么叫一致性哈希,通常用来解决什么问题? 

一种算法,有待研究

13.缓存的失效策略有哪几种,分别适合什么场景?  

redis 提供 6种数据淘汰策略:

1.   voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

2.  volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

3.  volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

4.  allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

5.  allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰

6.  no-enviction(驱逐):禁止驱逐数据

14.Memcache和Redis的区别是什么?  

1.网络IO模型不同
Memcache是多线程;Redis是复用模型。
2.数据支持类型不同:memcached使用key-value形式存储和访问数据;redis还提供list,set,zset,hash等数据结构的存储
3.内存管理机制不同
4.数据储存和持久化不同:memcached以in-memory的形式存储;redis支持持久化操作。
5.数据一致性问题:Memcached提供了cas命令;redis没有,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断。
6.集群管理不同:Memcached是全内存的数据缓冲系统,Memcached本身并不支持分布式,通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储,Memcached只能采用客户端实现分布式存储

Redis Cluster引入了Master节点和Slave节点

15.怎么预估自己系统可承载的日活数?  

用 jmeter 去进行压测,看看最大承载量在多少

16.什么是JMeter?Jmeter是否可以在多台机器上分布式部署?为什么要分布式部署?  

1.定义
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域
2.Jmeter提供的分布式功能来启动多台电脑来分压测试

在使用Jmeter进行接口的性能测试时,由于Jmeter 是JAVA应用,对于CPU和内存的消耗比较大,所以,当需要模拟数以万计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力,这时可以使用Jmeter提供的分布式功能来启动多台电脑来分压测试

17.什么是TPS,什么是每秒并发数,什么是90%Line?分别应该到达多少算符合系统上线的要求? 

Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数
TPS包括一条消息入和一条消息出,加上一次用户数据库访问
业务TPS = CAPS × 每个呼叫平均TPS
安装Jmeter插件,后右键,监视器中会出现TPS选项

90%Line:90%用户的响应时间

按照每秒并发数为20,循环50次数的标准,TPS应不小于100

接口的平均访问时间应低于200ms

明天计划的事情:

1、开始任务七,学习 SpringBoot

2、用 SpringBoot 实现简单的登录注册功能

遇到的问题:


返回列表 返回列表
评论

    分享到