python 面试准备知识点

linux 怎样监控自己的应用消耗资源情况

top 查找出耗CPU,内存资源较多的进程pid

top -Hp pid

ps  -ef

pstree -Aup

free [-b|-k|-m|-g] [-t]

写脚本定时检测,发通知

CPU占用高可能是什么问题,CPU占用低单响应慢有可能是什么问题?

检查死循环,优化循环

检查内存不足,磁盘IO

硬盘IO速度会变慢,有什么解决办法?

有可能是高并发,攻击,大量读写操作。使用CDN隐藏服务器IP,分布式架构。

设计一个秒杀系统,考虑哪些问题,如何解决

秒杀系统场景特点:

  • 秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增。
  • 秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成功。
  • 秒杀业务流程比较简单,一般就是下订单减库存。

应对高并发:

  • 分流:负载均衡。
  • 限流:每台服务器限流。
  • 削峰:消息队列可以削峰,将拦截大量并发请求。
  • 异步处理:消息队列也是一个异步处理过程,后台业务根据自己的处理能力,从消息队列中主动的拉取请求消息进行业务处理。
  • 使用缓存:用缓存可极大提高系统读写速度。
  • 高可用:主备
  • 升级服务器配置:升级带宽,CPU,内存等

具体:

1. 前端:使用CDN,禁止重复提交。

2. 后端: 负载均衡,限制访问频率,使用redis而不用mysql,使用MQ。

3. 防止超发:采用redis的watch分布式乐观锁,解决高并发下的超买超卖问题。

mysql 事务隔离级别, MVCC机制

       

隔离级别                        脏读  不可重复读   幻读
读未提交 READ-UNCOMMITTED        √        √        √
不可重复读 READ-COMMITTED        ×        √        √
可重复读 REPEATABLE-READ         ×        ×        √
串行化 SERIALIZABLE              ×        ×        ×

MVCC的全称是“多版本并发控制”。这项技术使得InnoDB的事务隔离级别下执行一致性读操作有了保证,换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值。这是一个可以用来增强并发性的强大的技术,因为这样的一来的话查询就不用等待另一个事务释放锁。这项技术在数据库领域并不是普遍使用的。一些其它的数据库产品,以及mysql其它的存储引擎并不支持它。

 MVCC的实现,通过保存数据在某个时间点的快照来实现的。在每一行数据中额外保存两个隐藏的列:当前行创建时的版本号和删除时的版本号(可能为空,其实还有一列称为回滚指针,用于事务回滚,不在本文范畴)。

mysql 主从同步方案有哪些,优劣势比较?实现原理?

MySQL的主备也是通过binlog来实现的数据一致性。

mysql 索引,为什么用B+树

mysql 分库分表如何实现

redis 缓存雪崩,缓存穿透,缓存击穿怎么发生的,如何解决

* 缓存雪崩
场景:
    首页数据,热点数据一般都会做缓存,有定时任务去刷新缓存 或 缓存里查不到去更新。
    
    大面积的 key 在同一个时间失效,此时有大量访问,直接访问数据库,超过数据库压力,导致数据库直接被打死。
    重启数据库也无用,立马又被新流量打死。分库分表的数据库可能还能顶一下。要是打死的是用户服务的库,依赖
    他的库全部挂。

解决办法:
    1. 批量的key,过期时间给随机值,避免同时到期。
    2. 热点数据分布到不同的redis。
    3. 按热度分类,比较热的缓存周期长一些,相对冷门的缓存周期短一些


* 缓存穿透

场景:
    缓存和数据库都没有的数据,恶意高强度请求,就会直接访问数据库,导致数据库直接被打死。

解决办法:
    1. reids 的布隆过滤器 bloomfilter。
    2. 严格的 参数校验。不合法的直接return。
    3. nginx 限制IP访问频率。


* 缓存击穿

场景:
    有一个热点的 key 失效了,此时持续高并发直接访问数据库,就像打了个洞,导致数据库直接被打死。

解决办法:
    1. 热点key设置用不过期。有更新操作才更新缓存。

redis 数据结构,持久化,内存,算法,list, zset如何实现的?

redis 和 mongodb的使用场景

redis 和 memcached的比较

1.redis 支持更丰富的数据类型(支持更复杂的应用场景),
Redis 不仅仅支持简单的k/v类型的数据,同时还提供 list,set,zset,hash等数据结构的存储。
memcache 支持简单的数据类型,String。
 
2.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,
而 Memecache把数据全部存在内存之中。 

3.集群模式:
memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;
但是 redis 目前 是原生支持 cluster 模式的.

4.Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的多路 IO 复用模型。 

如何解决 redis 和 mysql 的数据一致性?

不管是先写MySQL数据库,再删除Redis缓存;还是先删除缓存,再写库,都有可能出现数据不一致的情况。

举一个例子:

1.如果删除了缓存Redis,还没有来得及写库MySQL,另一个线程就来读取,发现缓存为空,则去数据库中读取数据写入缓存,此时缓存中为脏数据。

2.如果先写了库,在删除缓存前,写库的线程宕机了,没有删除掉缓存,则也会出现数据不一致情况。

第一种方案:采用延时双删策略

在写库前后都进行redis.del(key)操作,并且设定合理的超时时间。

第二种方案:异步更新缓存(基于订阅binlog的同步机制)

一旦MySQL中产生了新的写入、更新、删除等操作,就可以把binlog相关的消息推送至Redis,Redis再根据binlog中的记录,对Redis进行更新。

 

分布式事务如何实现的?

分布式锁如何实现

分布式全局唯一id如何实现

分布式session的共享方案?

分布式系统如何保证数据一致性分布式架构设计:单点登录,分布式缓存,数据库优化

让你实现一个MQ,如何保证消息不丢失

https 的请求到响应的流程

HTTPS握手过程

TCP三次握手,四次挥手

为什么要三次握手和四次挥手 ? time_wait 出现在什么地方,有什么用?

线程安全 需要注意什么

hashmap 实现原理

面向对象的设计原则

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值