先看原题,自己心里默想一遍答案再滑到后面对比答案。答案来源于网络,欢迎指正,共同进步
一、原题
- 自我介绍
- 怎么保持缓存一致性
- redis 线程模型
- redis 触发器
- mysql存储引擎的区别
- 唯一索引和非唯一索引的区别
- 怎么理解ACID
- 分布式锁了解吗
- kafka组件及使用场景
- linux常用命令
- 怎么在linux中打开一个1G的文件
- 怎么理解零拷贝
- SpringBoot相比Spring的优势
------------------------------------------------------------------------优美的分割线------------------------------------------------------------------------
二、答案
-
自我介绍
-
怎么保持缓存一致性
1、先删除缓存,再修改数据库。如果数据库修改失败了,那么数据库中是旧数据,缓存中是空的,那么数据不会不一致。因为读的时候缓存没有,则读数据库中旧数据,然后更新到缓存中。 2、更新数据的时候,根据数据的唯一标识,将操作路由之后,发送到一个 jvm 内部队列中。读取数据的时候,如果发现数据不在缓存中,那么将重新读取数据+更新缓存的操作,根据唯一标识路由之后,也发送同一个 jvm 内部队列中。 一个队列对应一个工作线程,每个工作线程串行拿到对应的操作,然后一条一条的执行。这样的话,一个数据变更的操作,先删除缓存,然后再去更新数据库,但是还没完成更新。此时如果一个读请求过来,读到了空的缓存,那么可以先将缓存更新的请求发送到队列中,此时会在队列中积压,然后同步等待缓存更新完成。
-
redis 线程模型
多个 socket IO 多路复用程序 文件事件分派器 事件处理器(包括:连接应答处理器、命令请求处理器、命令回复处理器)
-
redis 触发器
监听 Redis 中Key超时失效的事件 Redis中的key可以设置生存时间,当该key超时失效时会触发一个事件 “过期事件通过Redis的订阅与发布功能(pub/sub)来进行分发。” 首先需要修改Redis 的配置文件,将 notify-keyspace-events 的值改为 Ex
-
mysql存储引擎的区别
功能 MYISAM Memory InnoDB Archive 存储限制 256TB RAM 64TB None 支持事务 No No Yes No 支持全文索引 Yes No No No 支持数索引 Yes Yes Yes No 支持哈希索引 No Yes No No 支持数据缓存 No N/A Yes No 支持外键 No No Yes No -
唯一索引和非唯一索引的区别
1、普通索引(非唯一索引) 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。 2、唯一索引 普通索引允许被索引的数据列包含重复的值。比如说,因为人有可能同名,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。 如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。
-
怎么理解ACID
原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性(Consistency) 事务前后数据的完整性必须保持一致。 隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。 持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
-
分布式锁了解吗
在互联网中很多场景下,我们为了保证数据的一致性,需要保证同一个方法,在同一时间,只能有一个线程在执行。这在单机环境中,我们有很多办法实现,在java.util.concurrent包下,java提供了很多并发相关API,但这些API在分布式场景下就无能为力了。 常见的几种方案? 基于数据库的锁 基于缓存的锁(Redis、Memcached) 基于分布式算法的锁(Zookeeper)
-
kafka组件及使用场景
topic:消息存放的目录即主题 Producer:生产消息到topic的一方 Consumer:订阅topic消费消息的一方 Broker:Kafka的服务实例就是一个broker kafka 应用场景 1、日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。 2、消息系统:解耦和生产者和消费者、缓存消息等。 3、用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。 4.运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。 5、流式处理:比如spark streaming和storm 6、事件源
-
linux常用命令
cd ls mkdir lsof tail telnet
-
怎么在linux中打开一个1G的文件
vim 上安装LargeFile
-
怎么理解零拷贝
从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能; 关于零拷贝提供了两种方式分别是:mmap+write方式,sendfile方式;
-
SpringBoot相比Spring的优势
1、快速整合第三方框架,比如redis,mybatis等等 2、全部采用注解方式,没有繁琐的xml配置。 3、内置http服务器,比如jetty,tomcat。不需要额外的去集成下载tomcat。