python面试题汇总05

1.乐观锁与悲观锁
    1.1悲观锁
        1.1.1排他锁
            具有排他性,是用来修改的

            以上,在对id = 1的记录修改前,先通过 for update 的方式进行加锁,然后再进行修改。这就是比较典型的悲观锁策略。
            如果以上修改库存的代码发生并发,同一时间只有一个线程可以开启事务并获得id=1的锁,其它的事务必须等本次事务提交之后才能执行。这样可以保证当前的数据不会被其它事务修改。
            上面提到,使用 select…for update 会把数据给锁住,不过需要注意一些锁的级别,MySQL InnoDB 默认行级锁。行级锁都是基于索引的,如果一条 SQL 语句用不到索引是不会使用行级锁的,会使用表级锁把整张表锁住,         这点需要注意。
    1.1.2共享锁
        用来修改,在读之前加锁,可共享
    1.2乐观锁
        在修改之前先校验数据有没有被改动
        实现方式:记录当前版本号,在修改前检查版本号是否一致
2.tcp如何保证传输可靠性
    2.1校验和、确认应答+序列号、超时重传、流量控制、拥塞控制、三次握手和四次挥手
3.同步与异步、阻塞与非阻塞
    阻塞和非阻塞 强调的是程序在等待调用结果(消息,返回值)时的状态.  阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。 对于同步调用来说,很多时候当前线程还是激活的状态,只是从逻辑上当前函数没有返回而已,即同步等待时什么都不干,白白占用着资源。
    同步和异步强调的是消息通信机制 (synchronous communication/ asynchronous communication)。所谓同步,就是在发出一个"调用"时,在没有得到结果之前,该“调用”就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由“调用者”主动等待这个“调用”的结果。而异步则是相反,"调用"在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在"调用"发出后,"被调用者"通过状态、通知来通知调用者,或通过回调函数处理这个调用
    I/O多路复用是异步阻塞
4.mysql的引擎innodb的索引结构
    b+树
5.redis的list的实现
    string
    list
    总所周知,redis中的list有两种编码结构,ziplist和linkedlist。两种编码结构的切换由下面的配置信息决定:

        针对以上的配置,当列表对象保存的所有字符串元素的长度都小于64字节,并且列表对象保存的元素数量小于512时,list使用ziplist编码;不能满足这两种情况就是用linkedlist编码。
        1.ziplist的特点是节省内存

        2.linkedlist是一个双向列表,特点就是插入速度快,但是占内存。

            lpush + lpop = Stack(栈)
            lpush + rpop = Queue(队列)
            lpush + bropop = Message Queue(消息队列)
    set
    zset
        它的内部实现用的是一种叫做“跳跃列表”的数据结构。有序集合是Redis里面唯一一个既可以根据成员访问元素,又可以根据分值以及分值的排列顺序来访问元素的结构。
    hash
        值只能是string
6.redis用来做消息队列有什么风险
7.redis服务挂了怎么办
    持久化,两个方案
    RDB(小、快、不全)、AOF(大、慢、齐全)
8.redis使用版本
9.redis最新版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值