精华内容
下载资源
问答
  • python中常见数据类型1. 整数:任何时候运算都是精确的2. 浮点数:运算的时候,可能会四舍入3. 字符串:字符串是以单引号'或双引号"括起来的任意文本1) 同类型的可以用+号 或者 , 号来进行拼接2) 不同类型的...

    一. python中常见的数据类型

    1. 整数:任何时候运算都是精确的

    2. 浮点数:运算的时候,可能会有四舍五入

    3. 字符串:字符串是以单引号'或双引号"括起来的任意文本

    1) 同类型的可以用+号 或者 , 号来进行拼接

    2) 不同类型的只能用, 号拼接,不能用+号

    3) 强制转换后,可以进行拼接,比如str(a) int(a)这种就是强制转换

    4. 布尔值:布尔值只有True、False两种值,逻辑运算得到的结果就是布尔值

    5. None值:空值是python中一个特殊的值,用None来表示,None不能理解为0,因为0是有意义的,而None是一个特殊的空对象

    注意:python中没有NULL

    空字符串和None值不同,空字符串为""

    二. python中常用的运算符

    算术运算符

    比较(关系)运算符

    赋值运算符

    逻辑运算符

    位运算符

    成员运算符

    身份运算符

    1. 算数运算符

    如下表,假设a = 10, b = 20

    运算符

    描述

    实例

    +

    加:两个对象相加

    a + b 输出结果 30

    -

    减:一个数减去另一个数

    a - b 输出结果 -10

    *

    乘:两个数相乘或是返回一个数被重复若干次的字符串

    a * b 输出结果 200

    /

    除:x除以y

    b / a 输出结果 2.0

    %

    取模:返回除法的余数

    b % a 输出结果 0

    **

    幂:返回x的y次幂

    a ** b为10的20次方 输出结果 100000000000000000000

    //

    取整除:返回结果的整数部分

    9 // 2 输出结果 4, 9.0 // 2.0 输出结果 4.0

    在这里,我们要格外注意,在python3中, /是真除法,得到的是至少保留一位的小数,而在python2中/表示取整

    10 / 5结果:2.0

    //虽然表示取整,但是如果除数和被除数任意一个是浮点数,那么得到的结果也是浮点数

    5 // 3

    5.0 // 3

    5 // 3.0

    5.0 // 3.0结果:1

    1.0

    1.0

    1.0

    2. 比较运算符

    如下表,假设a = 10, b = 20,返回值均是布尔值

    运算符

    描述

    实例

    ==

    等于:比较对象是否相等

    (a == b) 返回 False

    !=

    不等于:比较两个对象是否不相等

    (a != b) 返回 True

    >

    大于:返回x是否大于y

    (a > b) 返回 False

    <

    小于:返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量

    True和False等价。注意,这些变量名的大写

    (a < b) 返回True

    >=

    大于等于:返回x是否大于等于y

    (a >= b) 返回 False

    <=

    小于等于:返回x是否小于等于y

    (a <= b) 返回 True

    比较运算符返回的都是布尔值,赋值与==是不同的,请注意!

    3. 赋值运算符

    如下表,假设a = 10, b = 20

    运算符

    描述

    实例

    =

    简单的赋值运算符

    c = a + b 将 a + b 的运算结果赋值为c

    +=

    加法赋值运算符

    c += a 等效于 c = c + a

    -=

    减法赋值运算符

    c -= a 等效于 c = c - a

    *=

    乘法赋值运算符

    c *= a 等效于 c = c * a

    /=

    除法赋值运算符

    c /= a 等效于 c = c / a

    %=

    取模赋值运算符

    c %= a 等效于 c = c % a

    **=

    幂赋值运算符

    c ** = a 等效于 c = c ** a

    //=

    取整除赋值运算符

    c //= a 等效于 c = c // a

    += 以及 -=是比较常用的运算符

    4. 逻辑运算符

    如下表,假设a = 10, b = 20

    运算符

    逻辑表达式

    描述

    实例

    and

    x and y

    与:如果x为False,x and y 返回False,否则它返回y的值

    (a and b) 返回20

    or

    x or y

    或:如果x非0, 它返回x的值,否则它返回y的值

    (a or b) 返回 10

    not

    x

    非:如果x为True,返回False,如果x为False,返回True

    not(a and b) 返回False

    举例如下:

    >>> a = 10

    >>> b = 20

    >>> a andb20

    >>> a orb10

    >>> not(a andb)

    False>>> a =0>>> a andb

    0>>> a orb20

    >>> nota

    True>>>

    5. 成员运算符

    假设a = 10, b = 20

    运算符

    描述

    实例

    in

    如果在指定的序列中找到值返回True,否则返回False

    x在y序列中,如果x在y序列中返回True

    not in

    如果在指定的序列中没有找到值返回True,否则返回False

    x不在y序列中,如果x不在y序列中返回True

    成员运算符在字符串、列表或元组中用的会比较多

    展开全文
  • 目录Redis数据类型常见面试题Redis有哪几种数据类型常见面试题总结 Redis有哪几种数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 ...

    Redis数据类型及常见面试题

    Redis有哪几种数据类型

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

    String(字符串)

    string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。

    string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。

    string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

    常用命令:set、get、decr、incr、mget等。

    注意:一个键最大能存储512MB。

    Hash(哈希)

    Redis hash 是一个键值(key=>value)对集合;是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

    每个 hash 可以存储 232 -1 键值对(40多亿)。

    常用命令:hget、hset、hgetall等。

    应用场景:存储一些结构化的数据,比如用户的昵称、年龄、性别、积分等,存储一个用户信息对象数据。

    List(列表)

    Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

    list类型经常会被用于消息队列的服务,以完成多程序之间的消息交换。

    常用命令:lpush、rpush、lpop、rpop、lrange等。

    列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

    Set(集合)

    Redis的Set是string类型的无序集合。和列表一样,在执行插入和删除和判断是否存在某元素时,效率是很高的。集合最大的优势在于可以进行交集并集差集操作。Set可包含的最大元素数量是4294967295。
    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

    应用场景:

    1、利用交集求共同好友。

    2、利用唯一性,可以统计访问网站的所有独立IP。

    3、好友推荐的时候根据tag求交集,大于某个threshold(临界值的)就可以推荐。

    常用命令:sadd、spop、smembers、sunion等。

    集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

    zset(sorted set:有序集合)

    Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

    zset的成员是唯一的,但分数(score)却可以重复。

    sorted set是插入有序的,即自动排序。

    常用命令:zadd、zrange、zrem、zcard等。

    当你需要一个有序的并且不重复的集合列表时,那么可以选择sorted set数据结构。

    应用举例:

    (1)例如存储全班同学的成绩,其集合value可以是同学的学号,而score就可以是成绩。
    (2)排行榜应用,根据得分列出topN的用户等。

    常见面试题

    问题1:Redis支持的数据类型?

    String字符串:

    格式: set key value

    string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

    string类型是Redis最基本的数据类型,一个键最大能存储512MB。

    Hash(哈希)

    格式: hmset name key1 value1 key2 value2

    Redis hash 是一个键值(key=>value)对集合。

    Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

    List(列表)

    Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

    格式: lpush name value

    在 key 对应 list 的头部添加字符串元素

    格式: rpush name value

    在 key 对应 list 的尾部添加字符串元素

    格式: lrem name index

    key 对应 list 中删除 count 个和 value 相同的元素

    格式: llen name

    返回 key 对应 list 的长度

    Set(集合)

    格式: sadd name value

    Redis的Set是string类型的无序集合。

    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

    zset(sorted set:有序集合)

    格式: zadd name score value

    Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

    zset的成员是唯一的,但分数(score)却可以重复。

    问题2:什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?

    持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

    Redis 提供了两种持久化方式:RDB(默认) 和AOF

    问题3:RDB:

    rdb是Redis DataBase缩写

    功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数

    问题4:AOF:

    Aof是Append-only file缩写

    每当执行服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作

    aof写入保存:

    WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件

    SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。

    问题5:存储结构:

    内容是redis通讯协议(RESP )格式的命令文本存储。

    比较:

    1、aof文件比rdb更新频率高,优先使用aof还原数据。

    2、aof比rdb更安全也更大

    3、rdb性能比aof好

    4、如果两个都配了优先加载AOF

    问题6:刚刚上面你有提到redis通讯协议(RESP ),能解释下什么是RESP?有什么特点?(可以看到很多面试其实都是连环炮,面试官其实在等着你回答到这个点,如果你答上了对你的评价就又加了一分)

    RESP 是redis客户端和服务端之前使用的一种通讯协议;

    RESP 的特点:实现简单、快速解析、可读性好

    For Simple Strings the first byte of the reply is “+” 回复

    For Errors the first byte of the reply is “-” 错误

    For Integers the first byte of the reply is “:” 整数

    For Bulk Strings the first byte of the reply is “$” 字符串

    For Arrays the first byte of the reply is “*” 数组

    问题7:Redis 有哪些架构模式?讲讲各自的特点

    单机版
    特点:简单

    问题:

    1、内存容量有限 2、处理能力有限 3、无法高可用。

    主从复制

    Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。 只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。

    特点:

    1、master/slave 角色

    2、master/slave 数据相同

    3、降低 master 读压力在转交从库

    问题:

    无法保证高可用

    没有解决 master 写的压力

    哨兵

    Redis sentinel 是一个分布式系统中监控 redis 主从服务器,并在主服务器下线时自动进行故障转移。其中三个特性:

    监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

    提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

    自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。

    特点:

    1、保证高可用

    2、监控各个节点

    3、自动故障迁移

    缺点:主从模式,切换需要时间丢数据

    没有解决 master 写的压力

    集群(proxy 型):
    Twemproxy 是一个 Twitter 开源的一个 redis 和 memcache 快速/轻量级代理服务器; Twemproxy 是一个快速的单线程代理程序,支持 Memcached ASCII 协议和 redis 协议。

    特点:1、多种 hash 算法:MD5、CRC16、CRC32、CRC32a、hsieh、murmur、Jenkins

    2、支持失败节点自动删除

    3、后端 Sharding 分片逻辑对业务透明,业务方的读写方式和操作单个 Redis 一致

    缺点:增加了新的 proxy,需要维护其高可用。

    failover 逻辑需要自己实现,其本身不能支持故障的自动转移可扩展性差,进行扩缩容都需要手动干预

    集群(直连型):

    从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。

    特点:

    1、无中心架构(不存在哪个节点影响性能瓶颈),少了 proxy 层。

    2、数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布。

    3、可扩展性,可线性扩展到 1000 个节点,节点可动态添加或删除。

    4、高可用性,部分节点不可用时,集群仍可用。通过增加 Slave 做备份数据副本

    5、实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave到 Master 的角色提升。

    缺点:

    1、资源隔离性较差,容易出现相互影响的情况。

    2、数据通过异步复制,不保证数据的强一致性

    问题8:什么是一致性哈希算法?什么是哈希槽?

    这两个问题篇幅过长 网上找了两个解锁的不错的文章

    https://www.cnblogs.com/lpfuture/p/5796398.html

    http://www.jasontec.cn/articles/2020/04/11/1586586130767.html

    问题9:Redis常用命令?

    Keys pattern

    *表示区配所有

    以bit开头的

    查看Exists key是否存在

    Set

    设置 key 对应的值为 string 类型的 value。

    setnx

    设置 key 对应的值为 string 类型的 value。如果 key 已经存在,返回 0,nx 是 not exist 的意思。

    删除某个key

    第一次返回1 删除了 第二次返回0

    Expire 设置过期时间(单位秒)

    TTL查看剩下多少时间

    返回负数则key失效,key不存在了

    Setex

    设置 key 对应的值为 string 类型的 value,并指定此键值对应的有效期。

    Mset

    一次设置多个 key 的值,成功返回 ok 表示所有的值都设置了,失败返回 0 表示没有任何值被设置。

    Getset

    设置 key 的值,并返回 key 的旧值。

    Mget

    一次获取多个 key 的值,如果对应 key 不存在,则对应返回 nil。

    Incr

    对 key 的值做加加操作,并返回新的值。注意 incr 一个不是 int 的 value 会返回错误,incr 一个不存在的 key,则设置 key 为 1

    incrby

    同 incr 类似,加指定值 ,key 不存在时候会设置 key,并认为原来的 value 是 0

    Decr

    对 key 的值做的是减减操作,decr 一个不存在 key,则设置 key 为-1

    Decrby

    同 decr,减指定值。

    Append

    给指定 key 的字符串值追加 value,返回新字符串值的长度。

    Strlen

    取指定 key 的 value 值的长度。

    persist xxx(取消过期时间)

    选择数据库(0-15库)

    Select 0 //选择数据库

    move age 1//把age 移动到1库

    Randomkey随机返回一个key

    Rename重命名

    Type 返回数据类型

    08

    问题10:使用过Redis分布式锁么,它是怎么实现的?

    先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。

    问题11:如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?

    set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!

    09

    问题12:使用过Redis做异步队列么,你是怎么用的?有什么缺点?

    一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。

    缺点:

    在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如rabbitmq等。

    问题13:能不能生产一次消费多次呢?

    使用pub/sub主题订阅者模式,可以实现1:N的消息队列。

    10

    问题14:什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?

    缓存穿透

    一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。

    如何避免?

    1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。

    2:对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。

    缓存雪崩

    当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力。导致系统崩溃。

    如何避免?

    1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

    2:做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期

    3:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

    总结

    今天的内容字有点多!但是对于那些要找这方面工作即将面试的宝宝们还是有点用的 !!!

    展开全文
  • 文章目录一、什么是Redis二、Redis支持哪几种数据类型?三、为什么redis需要把所有数据放到内存中?四、Redis有哪数据淘汰策略?、Redis最适合的场景有哪些?六、Redis常见的性能问题都有哪些?如何解决?七、...

    在这里插入图片描述
    总结不易,留赞再走!
    总结不易,留赞再走!
    总结不易,留赞再走!

    文章目录


    一、什么是Redis

       redis即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、高性能“Key-Value”数据库、遵守BSD协议,并提供多种语言的API;整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘 上进行保存。
       因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的 Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 emcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。 比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高 性能的tag系统等等。

       特点:

    1. 数据间没有必然的关联关系;
    2. 内部采用单线程机制进行工作;
    3. 官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次;
    4. 多数据类型支持

    二、Redis支持哪几种数据类型?

    Redis数据类型(5种常用):
       string、hash、list、set、sorted_set/zset(应用性较低)

    string数据类型:

    ​存储数据的格式:一个存储空间保存一个数据;
    存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用。
    数据最大存储量:512MB
    redis 数值上限:9223372036854775807(java中Long型数据最大值,Long.MAX_VALUE)
    
    redis所有的操作都是原子性的,采用单线程,命令是一个一个执行的,无需考虑并发带来的数据影响。 
    

    hash 类型:

    需要的存储结构:
       一个存储空间保存多个键值对数据 (一个key对应一个hash存储空间)

    hash类型:底层使用哈希表结构实现数据存储;
    存储是:key + hash存储空间(field + value):
    	如果fifield数量较少,存储结构优化为类数组结构 
    	如果fifield数量较多,存储结构使用HashMap结构
    hash类型中value:只能存储字符串,不允许存储其他数据类型,不存在嵌套现象;
    hash存储空间大小:每个 hash 可以存储 2^32 - 1 个键值对 hash类型十分贴近对象的数据存储形式;
    

    list类型:

    数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分; 
    需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序; 
    list类型:保存多个数据,底层使用双向链表存储结构实现 ;
    list中保存的数据:都是string类型的,数据总容量是有限的,最多2^32 - 1 个元素(4294967295);
    list使用:通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作;
    

    set类型:

    新的存储需求:存储大量的数据,在查询方面提供更高的效率; 
    需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询; 
    set类型:与hash存储结构完全相同,仅存储键(hash中的field),不存储值(全部值为nil),并且值是不允许重复的(set存储空间)。
    

    Sorted Set类型:

      和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列:

    1. 带有权重的元素,比如一个游戏的用户得分排行榜
    2. 比较复杂的数据结构,一般用到的场景不算太多

    三、为什么redis需要把所有数据放到内存中?

       Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘 I/O 速度为严重影响 redis 的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。

    四、Redis有哪几种数据淘汰策略?

    1. noeviction:返回错误当内存限制达到,并且客户端尝试执行会让更多内存被使用的命令。
    2. allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。
    3. volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存 放。
    4. allkeys-random: 回收随机的键使得新添加的数据有空间存放。
    5. volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。
    6. volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。

    五、Redis最适合的场景有哪些?

    1. 会话缓存(Session Cache)
    2. 全页缓存(FPC)
    3. 队列
    4. 排行榜/计数器
    5. 发布/订阅

    六、Redis常见的性能问题都有哪些?如何解决?

    1. Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。
    2. Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。
    3. Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。
    4. Redis 主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave 和 Master 最好在同一个局域网内。

    七、Redis集群会有写操作丢失吗?为什么?

       Redis并不能保证数据的强一致性,这意味这在实际中集群在特定的条件下可能会丢失写操作。

    八、Redis集群最大节点个数是多少?

       16384个

    九、Memcache与Redis的区别都有哪些?

    1. 存储方式不同,Memcache是把数据全部存在内存中,数据不能超过内存的大小,断电后数据库会挂掉。Redis有部分存在硬盘上,这样能保证数据的持久性。
    2. 数据支持的类型不同 memcahe对数据类型支持相对简单,redis有复杂的数据类型。
    3. 使用底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。Redis直接自己构建了VM机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
    4. 支持的value大小不一样 redis最大可以达到1GB,而memcache只有1MB。

    十、Redis的优缺点

    优点:

    1. 性能极高 – Redis 能支持超过 100K+ 每秒的读写频率。
    2. 丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets数据类型操作。
    3. 原子 – Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作全并后的原子性执行。attention 原子性定义:例如,A想要从自己的帐户中转1000块钱到B的帐户里。那个从A开始转帐,到转帐结束的这一个过程,称之为一个事务。如果在 A 的帐户已经减去了 1000 块钱的时候,忽然发生了意外,比如停电什么的,导致转帐事务意外终止了,而此时 B 的帐户里还没有增加 1000 块钱。那么,我们称这个操作失败了,要进行回滚。回滚就是回到事务开始之前的状态,也就是回到 A 的帐户还没减 1000 块的状态,B 的帐户的原来的状态。此时A的帐户仍然有3000 块,B的帐户仍然有2000块。我们把这种要么一起成功(A帐户成功减少1000,同时B帐户成功增加1000),要么一起失败(A帐户回到原来状态,B帐户也回到原来状态)的操作叫原子性操作。如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行,这种特性就叫原子性。
    4. 丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。

    缺点:

    1. 由于是内存数据库,所以,单台机器,存储的数据量,跟机器本身的内存大小。虽然redis 本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。
    2. 如果进行完整重同步,由于需要生成 rdb 文件,并进行传输,会占用主机的 CPU,并会消耗现网的带宽。不过redis2.8版本,已经有部分重同步的功能,但是还是有可能有完整重同步的。比如,新上线的备机。
    3. 修改配置文件,进行重启,将硬盘中的数据加载进内存,时间比较久。在这个过程中,redis不能提供服务。

    十一、Redis的持久化

    RDB 持久化:该机制可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。 
    AOF 持久化:记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。AOF文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小 。 
    无持久化:让数据只在服务器运行时存在。
    同时应用 AOF 和 RDB:当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。
    

    RDB的优缺点:

    优点:
       RDB 是一个非常紧凑(compact)的文件,它保存了 Redis 在某个时间点上的数据集。 这种文件非常适合用于进行备份: 比如说,你可以在最近的 24 小时内,每小时备份一次 RDB 文件,并且在每个月的每一天,也备份一个 RDB 文件。 这样的话,即使遇上问题,也可以随时将数据集还原到不同的版本。RDB 非常适用于灾难恢复(disaster recovery):它只有一个文件,并且内容都非常紧凑,可以(在加密后)将它传送到别的数据中心,或者亚马逊 S3 中。RDB 可以最大化 Redis 的性能:父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘 I/O 操作。RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

    缺点:
       如果你需要尽量避免在服务器故障时丢失数据,那么 RDB 不适合你。 虽然 Redis 允许你设置不同的保存点(save point)来控制保存 RDB 文件的频率, 但是, 因为RDB 文件需要保存整个数据集的状态, 所以它并不是一个轻松的操作。 因此你可能会至少 5 分钟才保存一次 RDB 文件。 在这种情况下, 一旦发生故障停机, 你就可能会丢失好几分钟的数据。每次保存 RDB 的时候,Redis 都要 fork() 出一个子进程,并由子进程来进行实际的持久化工作。 在数据集比较庞大时, fork() 可能会非常耗时,造成服务器在某某毫秒内停止处理客户端; 如果数据集非常巨大,并且 CPU 时间非常紧张的话,那么这种停止时间甚至可能会长达整整一秒。

    AOF的优缺点:

    优点:

    1. 使用 AOF 持久化会让 Redis 变得非常耐久(much more durable):你可以设置不同的 fsync 策略,比如无 fsync ,每秒钟一次 fsync ,或者每次执行写入命令时 fsync 。 AOF 的默认策略为每秒钟 fsync 一次,在这种配置下,Redis 仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据( fsync 会在后台线程执行,所以主线程可以继续努力地处理命令请求)。AOF 文件是一个只进行追加操作的日志文件(append only log), 因此对 AOF 文件的写入不需要进行 seek , 即使日志因为某些原因而包含了未写入完整的命令(比如写入时磁盘已满,写入中途停机,等等), redis-check-aof 工具也可以轻易地修复这种问题。

    2. Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写: 重写后的新 AOF 文件包含了恢复当前数据集所需的最小命令集合。 整个重写操作是绝对安全的,因为 Redis 在创建新 AOF 文件的过程中,会继续将命令追加到现有的 AOF 文件里面,即使重写过程中发生停机,现有的 AOF 文件也不会丢失。 而一旦新 AOF文件创建完毕,Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作。

    缺点:
       对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。 在一般情况下, 每秒 fsync 的性能依然非常高, 而关闭 fsync 可以让 AOF 的速度和 RDB一样快, 即使在高负荷之下也是如此。 不过在处理巨大的写入载入时,RDB 可以提供更有保证的最大延迟时间(latency)。

    AOF 在曾经出现过这样的 bug :
       因为个别命令的原因,导致 AOF 文件在重新载入时,无法将数据集恢复成保存时的原样。 (举个例子,阻塞命令 BRPOPLPUSH 就曾经引起过这样的 bug 。) 测试套件里为这种情况添加了测试: 它们会自动生成随机的、复杂的数据集, 并通过重新载入这些数据来确保一切正常。 虽然这种 bug 在 AOF 文件中并不常见, 但是对比来说, RDB 几乎是不可能出现这种 bug 的。

    十二、Redis官方为什么不提供Windows版本?

       因为目前Linux版本已经相当稳定,而且用户量很大,无需开发windows版本,反而会带来兼容性等问题。

    十三、Redis支持的Java客户端都有哪些?官方推荐用哪个?

    Redisson、Jedis、lettuce等等,官方推荐使用Redisson。

    十四、缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题?

    一、缓存雪崩

      我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期 时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据 库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。

    解决办法:
      大多数系统设计者考虑用加锁( 最多的解决方案)或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上。还有一个简单方案就时讲缓 存失效时间分散开。

    二、缓存穿透

      缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在 缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请 求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。

    解决办法:
      最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存 在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。另外也有一个更为简单粗 暴的方法,如果一个查询返回的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个空结 果进行缓存,但它的过期时间会很短,最长不超过五分钟。通过这个直接设置的默认值存放到缓存,这 样第二次到缓冲中获取就有值了,而不会继续访问数据库,这种办法最简单粗暴。

    三、缓存预热

      缓存预热这个应该是一个比较常见的概念,相信很多小伙伴都应该可以很容易的理解,缓存预热就是系 统上线后,将相关的缓存数据直接加载到缓存系统。这样就可以避免在用户请求的时候,先查询数据 库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!

    解决思路:
    1、直接写个缓存刷新页面,上线时手工操作下;
    2、数据量不大,可以在项目启动的时候自动进行加载;
    3、定时刷新缓存

    四、缓存更新

      除了缓存服务器自带的缓存失效策略之外(Redis默认的有6中策略可供选择),我们还可以根据具体的 业务需求进行自定义的缓存淘汰,常见的策略有两种:

    (1)定时去清理过期的缓存;
    (2)当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数 据并更新缓存。

      两者各有优劣,第一种的缺点是维护大量缓存的key是比较麻烦的,第二种的缺点就是每次用户请求过 来都要判断缓存失效,逻辑相对比较复杂!具体用哪种方案,大家可以根据自己的应用场景来权衡

    五、缓存降级

      当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然 需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开 关实现人工降级。
    降级的最终目的是保证核心服务可用,即使是有损的。而且有些服务是无法降级的(如加入购物车、结 算)。

    以参考日志级别设置预案:
    (1)一般:比如有些服务偶尔因为网络抖动或者服务正在上线而超时,可以自动降级;
    (2)警告:有些服务在一段时间内成功率有波动(如在95~100%之间),可以自动降级或人工降级, 并发送告警;
    (3)错误:比如可用率低于90%,或者数据库连接池被打爆了,或者访问量突然猛增到系统能承受的 最大阀值,此时可以根据情况自动降级或者人工降级;
    (4)严重错误:比如因为特殊原因数据错误了,此时需要紧急人工降级。服务降级的目的,是为了防 止Redis服务故障,导致数据库跟着一起发生雪崩问题。因此,对于不重要的缓存数据,可以采取服务 降级策略,例如一个比较常见的做法就是,Redis出现问题,不去数据库查询,而是直接返回默认值给用户。

    十五、说说Redis哈希槽的概念?

      Redis集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384个哈希槽,每个key通 过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。

    十六、Redis 集群的主从复制模型是怎样的?

      为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有 N-1 个复制品。

    十七、Redis中的管道有什么用?

      一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应,这样就可以将多个命令发送到服务 器,而不用等待回复,最后在一个步骤中读取该答复。 这就是管道(pipelining),是一种几十年来广泛使用的技术。例如许多POP3协议已经实现支持这个功 能,大大加快了从服务器下载新邮件的过程。

    十八、Redis集群如何选择数据库?

      Redis集群目前无法做数据库选择,默认在0数据库。

    十九、Redis 的内存用完了会发生什么?

      如果达到设置的上限,Redis 的写命令会返回错误信息(但是读命令还可以正常返回。)或者你可以将Redis 当缓存来使用配置淘汰机制,当 Redis 达到内存上限时会冲刷掉旧的内容。

    二十、使用过 Redis 分布式锁么,它是什么回事?

      先拿 setnx 来争抢锁,抢到之后,再用 expire 给锁加一个过期时间防止锁忘记了释放。
      这时候对方会告诉你说你回答得不错,然后接着问如果在 setnx 之后执行 expire之前进程意外 crash 或者要重启维护了,那会怎么样?
      这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要抓一抓自己得脑袋,故作思考片刻,好像接下来的结果是你主动思考出来的,然后回答:我记得 set 指令有非常复杂的参数,这个应该是可以同时把 setnx 和expire 合成一条指令来用的!对方这时会显露笑容,心里开始默念:摁,这小子还不错。

    二十一、数据的有效时间的三种状态

    • 正数:代表该数据在内存中还能存活的时间
    • -1:永久有效的数据
    • -2 :已经过期的数据 或被删除的数据 或 未定义的数据

    二十二、数据删除策略

    1. 定时删除 :创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作。
        - 优点:节约内存,到时就删除,快速释放掉不必要的内存占用
        - 缺点:CPU压力很大,无论CPU此时负载量多高,均占用CPU,会影响            redis服务器响应时间和指令吞吐量
         - 总结:用处理器性能换取存储空间(拿时间换空间)
    2. 惰性删除 :数据到达过期时间,不做处理。等下次访问该数据时,我们需要判断:1. 如果未过期,返回数据;2. 发现已过期,删除,返回不存在 。
        - 优点:节约CPU性能,发现必须删除的时候才删除
        - 缺点:内存压力很大,出现长期占用内存的数据
        - 总结:用存储空间换取处理器性能(拿时间换空间)
    3. 定期删除:定期删除就是周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度 。
        - 特点1:CPU性能占用设置有峰值,检测频度可自定义设置
        - 特点2:内存压力不是很大,长期占用内存的冷数据会被持续清理
        - 总结:周期性抽查存储空间(随机抽查,重点抽查)

    删除策略对比:
    在这里插入图片描述

    二十三、Redis 回收进程如何工作的?

      一个客户端运行了新的命令,添加了新的数据。Redi 检查内存使用情况,如果大于 maxmemory 的限制, 则根据设定好的策略进行回收。一个新的命令被执行,等等。所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。

    二十四、Redis 如何做内存优化?

      尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的 web 系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的 key,而是应该把这个用户的所有信息存储到一张散列表里面。

    二十五、redis集群主从复制

    采用主从复制。主服务器mater,从服务器slave。

    主从复制即将master中的数据即时、有效的复制到slave中。

    特征: 一个master可以拥有多个slave,一个slave只对应一个master。

    职责: master写数据,slave读数据。

    故障恢复:当master出现问题时,由slave提供服务,实现快速的故障恢复。

    高可用基石:基于主从复制,构建哨兵模式与集群,实现Redis的高可用方案。

    集群搭建: master保存每个slave的地址与端口,每个slave保存master的地址与端口。之间创建了连接的socket。

    二十六、主从复制的作用

    • 读写分离:master写、slave读,提高服务器的读写负载能力;
    • 负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数 量,通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量;
    • 故障恢复:当master出现问题时,由slave提供服务,实现快速的故障恢复;
    • 数据冗余:实现数据热备份,是持久化之外的一种数据冗余方式;
    • 高可用基石:基于主从复制,构建哨兵模式与集群,实现Redis的高可用方案;

    二十七、主从复制的工作流程(三个阶段)

    阶段一:建立连接

    建立slave到master的连接,使master能够识别slave,并保存slave端口号。

    流程如下:

    1. 步骤1:设置master的地址和端口,保存master信息

    2. 步骤2:建立socket连接

    3. 步骤3:发送ping命令(定时器任务)

    4. 步骤4:身份验证

    5. 步骤5:发送slave端口信息

      至此,主从连接成功!

    当前状态:

    slave: 保存master的地址与端口
    master: 保存slave的端口
    总体: 之间创建了连接的socket

    阶段二:数据同步

    在slave初次连接master后,复制master中的所有数据到slave将slave的数据库状态更新成master当前的数据库状态。

    同步过程如下:

    1. 步骤1:请求同步数据
    2. 步骤2:创建RDB同步数据
    3. 步骤3:恢复RDB同步数据
    4. 步骤4:请求部分同步数据
    5. 步骤5:恢复部分同步数据
      至此,数据同步工作完成!

    当前状态:

    slave: 具有master端全部数据,包含RDB过程接收的数据
    master: 保存slave当前数据同步的位置
    总体: 之间完成了数据克隆

    阶段三:命令传播

      当master数据库状态被修改后,导致主从服务器数据库状态不一致,此时需要让主从数据同步到一致的状态,同步的动作称为命令传播。
      master将接收到的数据变更命令发送给slave,slave接收命令后执行命令
    命令传播阶段的部分复制。

    命令传播阶段出现了断网现象:

      网络闪断闪连:忽略
      短时间网络中断:部分复制
      长时间网络中断:全量复制

    这里我们主要来看部分复制,部分复制的三个核心要素

    1. 服务器的运行 id(run id)
    2. 主服务器的复制积压缓冲区
    3. 主从服务器的复制偏移量

    服务器运行ID(runid)

    概念:服务器运行ID是每一台服务器每次运行的身份识别码,一台服务器多次运行可以生成多个运行id 
    组成:运行id由40位字符组成,是一个随机的十六进制字符 
    例如:fdc9ff13b9bbaab28db42b3d50f852bb5e3fcdce 
    作用:运行id被用于在服务器间进行传输,识别身份 
    如果想两次操作均对同一台服务器进行,必须每次操作携带对应的运行id,用于对方识别 
    实现方式:运行id在每台服务器启动时自动生成的,master在首次连接slave时,会将自己的运行ID发送给slave, 
    slave保存此ID,通过info Server命令,可以查看节点的runid
    

    复制缓冲区

    概念:复制缓冲区,又名复制积压缓冲区,是一个先进先出(FIFO)的队列,用于存储服务器执行过的命令,每次传播命令, master都会将传播的命令记录下来,并存储在复制缓冲区 
    
    复制缓冲区默认数据存储空间大小是1M 
    当入队元素的数量大于队列长度时,最先入队的元素会被弹出,而新元素会被放入队列 
    
    作用:用于保存master收到的所有指令(仅影响数据变更的指令,例如set,select) 
    数据来源:当master接收到主客户端的指令时,除了将指令执行,会将该指令存储到缓冲区中
    

    偏移量

    概念: 一个数字,描述复制缓冲区中的指令字节位置
    分类:
    master复制偏移量:记录发送给所有slave的指令字节对应的位置(多个)
    slave复制偏移量:记录slave接收master发送过来的指令字节对应的位置(一个)

    作用: 同步信息,比对master与slave的差异,当slave断线后,恢复数据使用
    数据来源:

    master端: 发送一次记录一次
    slave端: 接收一次记录一次

    二十八、总结主从复制的三个阶段的工作流程

    在这里插入图片描述
      ①需要两个参数,是运行id、偏移量,但是是第一次连接master不知道运行id和偏移量,则赋值为?和-1。③发送的是全量复制、运行id和当前的偏移量。全量赋值补充:在发送偏移量的同时master会接收到客户端的命令,这时master的偏移量值就变化了,但是slave的偏移量不变,他们个人保存个人的。⑦把命令表示的是部分复制。在master和slave连接期间,salve不停的向master发送⑤命令。

    二十九、是否使用过 Redis 集群,集群的原理是什么?

    1. Redis Sentinal 着眼于高可用,在 master 宕机时会自动将 slave 提升为master,继续提供服务。
    2. Redis Cluster 着眼于扩展性,在单个 redis 内存不足时,使用 Cluster 进行分片存储.

    三十、Redis 集群如何选择数据库?

       Redis 集群目前无法做数据库选择,默认在 0 数据库。

    三十一、怎么测试 Redis 的连通性?

       使用 ping 命令

    三十二、怎么理解 Redis 事务?

    1. 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
    2. 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

    在这里插入图片描述

    展开全文
  • 实现一个函数clone 可以对Javascript中的五种主要数据类型(Number、string、Object、Array、Boolean)进行复制4.如何消除一个数组里面重复的元素5.写一个返回闭包的函数6.使用递归完成1到100的累加7.Javascript有哪几...

    (答案待更新...)

    1.简述同步和异步的区别

    2.怎么添加、移除、复制、创建、和查找节点

    3.实现一个函数clone 可以对Javascript中的五种主要数据类型(Number、string、Object、Array、Boolean)进行复制

    4.如何消除一个数组里面重复的元素

    5.写一个返回闭包的函数

    6.使用递归完成1到100的累加

    7.Javascript有哪几种数据类型

    8.如何判断数据类型

    9.console.log(1+'2')和console.log(1-'2')的打印结果

    10.Js的事件委托是什么,原理是什么

    11.如何改变函数内部的this指针的指向

    12.列举几种解决跨域问题的方式,且说明原理

    13.谈谈垃圾回收机制的方式及内存管理

    14.写一个function ,清除字符串前后的空格

    15.js实现继承的方法有哪些

    16.判断一个变量是否是数组,有哪些办法

    17.let ,const ,var 有什么区别

    18.箭头函数与普通函数有什么区别

    19.随机取1-10之间的整数

    20.new操作符具体干了什么

    21.Ajax原理

    22.模块化开发怎么做

    23.异步加载Js的方式有哪些

    24.xml和 json的区别

    25.webpack如何实现打包的

    26.常见web安全及防护原理

    27.用过哪些设计模式

    28.为什么要同源限制

    29.offsetWidth/offsetHeight,clientWidth/clientHeight与scrollWidth/scrollHeight的区别

    30.javascript有哪些方法定义对象

    31.说说你对promise的了解

    32.谈谈你对AMD、CMD的理解

    33.web开发中会话跟踪的方法有哪些

    34.介绍js有哪些内置对象?

    35.说几条写JavaScript的基本规范?

    36.javascript创建对象的几种方式?

    37.eval是做什么的?

    38.null,undefined 的区别?

    39.[“1”, “2”, “3”].map(parseInt) 答案是多少?

    40.javascript 代码中的”use strict”;是什么意思 ? 使用它区别是什么?

    41.js延迟加载的方式有哪些?

    42.defer和async

    43.说说严格模式的限制

    44.attribute和property的区别是什么?

    45.ECMAScript6 怎么写class么,为什么会出现class这种东西?

    46.常见兼容性问题

    47.函数防抖节流的原理

    48.原始类型有哪几种?null是对象吗?

    49.为什么console.log(0.2+0.1==0.3) //false

    50.说一下JS中类型转换的规则?

    51.深拷贝和浅拷贝的区别?如何实现

    52.如何判断this?箭头函数的this是什么

    53.== 和 ===的区别

    54.什么是闭包

    55.JavaScript原型,原型链 ? 有什么特点?

    56.typeof()和instanceof()的用法区别

    57.什么是变量提升

    58.all、apply以及bind函数内部实现是怎么样的

    59.为什么会出现setTimeout倒计时误差?如何减少

    60.谈谈你对JS执行上下文栈和作用域链的理解

    61.new的原理是什么?通过new的方式创建对象和通过字面量创建有什么区别?

    62.prototype 和 proto 区别是什么?

    63.使用ES5实现一个继承?

    64.取数组的最大值(ES5、ES6)

    65.ES6新的特性有哪些?

    66.promise 有几种状态, Promise 有什么优缺点 ?

    67.Promise构造函数是同步还是异步执行,then呢 ?promise如何实现then处理 ?

    68.Promise和setTimeout的区别 ?

    69.如何实现 Promise.all ?

    70.如何实现 Promise.finally ?

    71.如何判断img加载完成

    72.如何阻止冒泡?

    73.如何阻止默认事件?

    74.ajax请求时,如何解释json数据

    75.json和jsonp的区别?

    76.如何用原生js给一个按钮绑定两个onclick事件?

    77.拖拽会用到哪些事件

    78.document.write和innerHTML的区别

    79.jQuery的事件委托方法bind 、live、delegate、on之间有什么区别?

    80.浏览器是如何渲染页面的?

    81.$(document).ready()方法和window.onload有什么区别?

    82.jquery中.get()提交和post()提交有区别吗?

    83.对前端路由的理解?前后端路由的区别?

    84.手写一个类的继承

    85.XMLHttpRequest:XMLHttpRequest.readyState;状态码的意思

    展开全文
  • 面试题包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、...184.redis 支持的数据类型有哪些? 185.redis 支持的 java 客户端都有哪些? 186.jedis 和 redisson 有哪些区别? 。。。。。。。。。。。。。
  • 数据链路层可以把一条可能出差错的实际链路,转变成为让网络层向下看起来好像是一条不出差错的链路。 但最近新版的《计算机网络》(第4版和第5版)中对数据链路层的提法就改变了。数据链路层的传输不能让网络层向...
  • 大话数据结构

    2018-12-14 16:02:18
    《璇玑图》共八百四十字,纵横各二十九字,纵、横、斜、交互、正、反读或退一字、迭一字读均可成诗,诗三、四、、六、七言不等,目前人统计可组成七千九百十八首诗。听清楚哦,是7958首。 第6章树 149 6.1...
  • 17.3.4. 比较不匹配的数据类型 46 17.4. 关于索引的排序 46 18. 数据库没有orderby默认如何排序。 46 19. 分布式事务如何实现。 46 19.1. 1 事务/分布式事务 47 19.1.1. 1.1 事务 47 19.1.2. 1.2 分布式事务与 XA ...
  • // 大小写 字母 数字 下划线 美元符 驼峰命名法,不能以数字开头4.c语言有哪五数据类型? // 基本类型 空类型 结构类型 自定义类型5.常见的运算有哪些? // 数术 逻辑 关系 赋值6.逻辑运算有哪几?判断原则是什么? ...
  • 2020最新java面试题库(杭州)

    千次阅读 2020-06-19 09:38:21
    目 录 1.常见的集合哪些?都什么区别: 1 2.HashMap的底层原理: 1 3.sleep和wait的区别 1 4.run方法和start方法的区别: 1 5.Threadlocad的作用: 2 6.solr查询出的数据放在: ...10redis五种数据类型和应用场
  • 30、String是最基本的数据类型吗? 22 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 22 32、是否可以继承String类? 23 33、String s = new String(...
  • 3、列举javaScript的3主要数据类型,2复合数据类型和2特殊数据类型。 24 4、谈谈你的JS的理解? 24 5、ajax的优点? 25 6、简述一下ajax调试代码查找错误的方法? 26 7、简述ajax中Js脚本缓存问题该如何解决?...
  • 4.1.0 JAVA中的几基本数据类型是什么,各自占用多少字节。 4.1.1 String类能被继承吗,为什么。 4.1.2 String,Stringbuffer,StringBuilder的区别。 4.1.3 ArrayList和LinkedList什么区别。 4.1.4 讲讲类的...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    76.EJB有哪?区别是什么? 77.JavaBean与EJB有什么区别? 78.软件开发生命周期有哪几个阶段? 79.软件开发有哪些因素? 80.软件开发中如何进行版本控制? 81.UML中,类视图如何表示类中的继承与聚合? 82.客户端...
  • 6. String 属于基础的数据类型吗? 4 7. java 中操作字符串都哪些类?它们之间什么区别? 4 8. String str="i"与 String str=new String("i")一样吗? 5 9. 如何将字符串反转? 5 10. String 类的常用方法都...
  • 问题3-11:在连续ARQ协议中,如果A向B发送数据帧而B只向A发送确认帧(即假定B没有数据帧向A发送),那么这两帧的序号序列各什么特点? 问题3-12:在连续ARQ协议中,如果B收到A发送的数据帧的序号没有落在B的接收...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 第六章 类 型 转 换 .48 6.1 隐式类型转换 .48 6.2 显式类型转换 .53 6.3 小 结 .56 第七章 表 达 式 .58 7.1 操 作 符 .58 ...
  • 数据库系统中数据的一致性是指数据类型的一致 D. 数据库系统比文件系统能管理更多的数据 (19) 关系表中的每一横行称为一个(A) A. 元组 B. 字段 C. 属性 D. 码 (20) 数据库设计包括两个方面的设计内容,它们是(A) A....
  • C#微软培训资料

    2014-01-22 14:10:17
    章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 第六章 类 型 转 换 .48 6.1 隐式类型转换 .48 6.2 显式类型转换 .53 6.3 小 结 .56 第七章 表 达 式 .58 7.1 操 作 符 .58 ...
  • 获取足够多的问题领域的知识,需求抽取的方法一般问卷法、面谈法、数据采集法、用例法、情景实例法以及基于目标的方法等;还有知识工程方法,例如,场记分析法、卡片分类法、分类表格技术和基于模型的知识获取等 ...
  • 哪种占比重最大? 哪种最小? 49 3、可维护性的决定因素 49 4、软件维护过程模型、软件再工程、逆向工程的概念 49 第七章 项目管理 49 1、项目管理四要素:人员、产品、项目、过程(概念) 49 2、软件度量哪些方法...
  • java面试题

    2018-01-01 15:35:15
    解析XML文档有哪方式? 14 28. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 15 29. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)...
  • (23) 数据流的类型有______和事务型。 答:变换型 (24) 数据库系统中实现各种数据管理功能的核心软件称为______。 答:数据库管理系统#DBMS (25) 关系模型的数据*纵即是建立在关系上的数据*纵,一般有______、增加...
  • java面试题典 java 面试题 经典

    热门讨论 2010-06-18 13:42:36
    解析XML文档有哪方式? 13 39. JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗? 14 40. 一个".java"源文件中是否可以包括多个类(不是内部类)...
  • 最新Java面试宝典pdf版

    热门讨论 2011-08-31 11:29:22
    30、String是最基本的数据类型吗? 22 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 22 32、是否可以继承String类? 23 33、String s = new String("xyz");...

空空如也

空空如也

1 2 3 4 5
收藏数 83
精华内容 33
关键字:

常见数据类型有哪五种