搜集了一些题

kafka为什么会重复消费消息?

在kafka提交offset的时候,可能由网络延迟或者某些原因导致,offset没有同步,导致其他consumer消费了已经消费的消息

kafka如何实现顺序消费?

kafak的话需要将顺序消费的消息通过指定分区策略发送到指定的partition中
如果了解rocketMq的话,可以顺带一句,rkmq自带顺序消息功能,分为全局顺序和局部顺序消息,一般情况下都采用局部顺序消息这种机制

kafak如何保证消息不丢失?

生产端: ack = all,reties次数加大;消费端:关闭自动提交offset,消费消息成功后手动提交offset

消息进入死信队列的条件?
  1. 消息到达超时时间
  2. 队列长度到达限制
  3. 消息拒绝签收,不把消息放入原队列中
浅拷贝和深拷贝?
  • 浅拷贝:在拷贝一个对象时,对对象的基本数据类型的成员变量进行拷贝,但对引用类型的成员变量只进行引用的传递,并没有创建一个新的对象,当对引用类型的内容修改会影响被拷贝的对象。
  • 深拷贝:在拷贝一个对象时,除了对基本数据类型的成员变量进行拷贝,对引用类型的成员变量进行拷贝时,创建一个新的对象来保存引用类型的成员变量。
sleep、wait、yeild、join区别?
  • sleep 是thread方法,sleep 过程中线程不会释放锁,只会阻塞线程
  • wait 是object方法,wait 过程中线程会释放对象锁,只有当其他线程调用 notify 才能唤醒此线程
  • yeild 是thread方法,不是释放资源锁,调用yeild的线程进入就绪状态
  • join 是等待调用join方法的线程结束之后,程序再继续执行
synchronized 和 lock的区别?
  1. syn是关键字 lock是接口
  2. lock需要手动加锁和释放锁,syn不需要
  3. lock只能锁代码块,syn可以锁类、方法、代码块
  4. syn是非公平锁,lock既可以是公平锁也可以是非公平锁,默认是非公平锁
  5. syn修饰的代码在执行异常时,jdk会自动释放线程占有的锁,当Lock发生异常时,如果程序没有通过unLock()去释放锁,则很可能造成死锁现象
  6. lock可以让等待锁的线程响应中断处理,如tryLock(long time, TimeUnit unit),而syn不行,使用syn时,等待的线程会一直等待下去,不能够中断
  7. lock可以绑定条件,实现分组唤醒需要的线程;syn要么随机唤醒一个,要么唤醒全部线程
g1和cms的应用场景?

cms应用于老年代,g1应用于内存大于8G的机器,g1不在物理上区分年轻代和老年代

说一下ThreadLocal?

作用:每个线程都会有一份自己的资源变量

ThreadLocalMap中使用的key为ThreadLocal的弱引用,value为强引用。当ThreadLocal没被外部引用时key会被GC回收,导致key为null,而value永远无法被回收从而内存泄漏。最好每次用完ThreadLocal后手动调用remove()。

为什么要使用线程池?
  1. 降低资源消耗
  2. 提高响应速度
  3. 提高线程的可管理性
tcp 为什么要三次握手,两次不行吗?为什么?

如果采用两次握手,那么只要服务器发出确认数据包就会建立连接,但由于客户端此时并未响应服务器端的请求,那此时服务器端就会一直在等待客户端,这样服务器端就白白浪费了一定的资源。若采用三次握手,服务器端没有收到来自客户端的再此确认,则就会知道客户端并没有要求建立请求,就不会浪费服务器的资源。

为什么要设置Survivor区?
  1. 如果不设置Survivor区 只有eden区 存活的的对象就会直接被放到送到老年代,老年代被填满就会触发触发Major GC(因为Major GC一般伴随着Minor GC,也可以看做触发了Full GC)
  2. 设置两个Survivor区最大的好处就是解决了碎片化
Spring如何解决循环依赖问题?

解决的核心原理就是:在对象实例化之后,依赖注入之前,Spring提前暴露的Bean实例的引用在第三级缓存中进行存储。

  • 一级缓存 singletonObjects (concurrentHashmap)
  • 二级缓存 earlySingletonObjects (hashmap)
  • 三级缓存 singletonFactory (hashmap)
聚簇索引和非聚簇索引在b+树上的展示形式?
  • 聚簇索引:数据跟索引绑定在一起
  • 非聚簇索引:数据跟索引分开存储
mysql三大范式?
  1. 每一列都是不可分割的,原子性
  2. 如果表是单主键,那么主键以外的列必须完全依赖于主键;如果表是复合主键,那么主键以外的列必须完全依赖于主键,不能仅依赖主键的一部分.
  3. 表中的非主键列必须和主键直接相关而不能间接相关
MySQL 怎么知道 binlog 是完整的?
  • statement格式的 binlog,完整的标识是最后有 COMMIT 关键字
  • row 格式的binlog,完整的标识是最后会有一个 XID event 关键字
查询长时间不返回可能是什么原因?应该如何处理?
  • 查询速度慢的原因很多:
  1. 查询字段没有索引或者没有触发索引查询
  2. I/O 压力大,读取磁盘速度变慢
  3. 内存不足
  4. 网络速度慢
  5. 查询出的数据量过大,可以采用多次查询或其他的方法降低数据量
  6. 死锁
  • 解决方式:
  1. 正确创建和使用索引。
  2. 把数据、日志、索引放到不同的 IO 设备上,减少主数据库的 IO 操作。更换 MySQL 的磁盘为固态硬盘,以提高磁盘的 IO 性能。
  3. 升级内存,更换更大的内存。
  4. 提升网速,升级带宽。
  5. 用 Profiler 来跟踪查询,得到查询所需的时间,找出有问题的 SQL 语句,优化 SQL。
  6. 查询时值返回需要的字段。
  7. 设置死锁的超时时间,限制和避免死锁消耗过多服务器的资源。
什么是存储引擎?
  • 存储引擎:不同的数据文件在磁盘的组织形式
  1. frm:表结构
  2. ibd:数据和索引文件
mysql索引失效的情况
  • 不符合最左匹配原则
  • 索引列有计算
  • 有or
  • 模糊查询 like %
  • 索引列有函数
  • 需要类型转换
聚集索引和非聚集索引?
  • 聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个
  • 聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续
  • 聚集索引:物理存储按照索引排序;聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序
  • 非聚集索引:物理存储不按照索引排序;非聚集索引则就是普通索引了,仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序.
  • 索引是通过二叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。
  • 聚集索引是主健索引或第一个不为空的唯一索引
  • 非聚集索引实际上就是普通索引
MySQL 中可不可以只要 binlog,不要 redo log?
  • 不可以,binlog 没有崩溃恢复的能力
MySQL 中可不可以只要 redo log,不要 binlog?
  • redo log 是循环写不能保证所有的历史数据,这些历史数据只能在 binlog 中找到
  • binlog 是高可用的基础,高可用的实现原理就是 binlog 复制.
MySQL 最多可以创建多少个索引列?

最多可以创建 16 个索引列.

什么叫回表查询?

普通索引查询到主键索引后,回到主键索引树搜索的过程,我们称为回表查询.

mysql的innodb和myisam区别?
  • innodb 支持外键,myisam不支持
  • innodb 支持事物,myisam不支持
  • innodb 支持崩溃后数据恢复
  • innodb 支持行级锁,myisam支持表锁
  • innodb 不支持全文索引,myisam支持fulltext
mysql如何解决死锁?

死锁概念:是指两个或两个以上的进程在执行过程中。因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去

  • 查出死锁线程 select trx_MySQL_thread_id from information.schema.innodb.trx; 并且kill掉
  • 设置锁的超时时间, innodblock_wait_timeout= 1000
mysql如何处理满查询?
  1. 开启满查询日志,定位哪条语句有问题
  2. 通过执行计划分析sql语句,获得其使用索引的情况,之后修改语句或者修改索引,使得语句尽可能命中索引
  3. 如果语句无法继续优化,考虑数据量太大,进行垂直或者水平分表
explain执行计划主要看那几个指标?
  1. table
  2. type
  3. key
  4. extra
InnoDB 为什么要使用 B+ 树,而不是 B 树、Hash、红黑树或二叉树?
  • B 树:不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出),指针少的情况下要保存大量数据,只能增加树的高度,导致IO操作变多,查询性能变低;
  • Hash:虽然可以快速定位,但是没有顺序,IO 复杂度高;
  • 二叉树:树的高度不均匀,不能自平衡,查找效率跟数据有关(树的高度),并且 IO 代价高;
  • 红黑树:树的高度随着数据量增加而增加,IO 代价高。
MySQL事务隔离级别?
  1. 读未提交
  2. 读已提交
  3. 可重复读
  4. 串行
事务的基本要素?
  1. 独立性
  2. 一致性
  3. 持久性
  4. 原子性
事务的并发问题
  1. 脏读:读取了其他事务未提交的数据.
  2. 不可重复读:在事务A多次读取数据过程中,事务B修改了这个数据,导致事务A读取的数据不一致.
  3. 幻读:A修改所有的数据为1的时候,B新增了一条数据,A修改结束后发现还有一条记录没有改过来.
    不可重复读侧重于修改,幻读侧重于新增或删除
Redis做消息队列与其他消息队列相比有什么不同?

Redis作为消息队列:

· 如果你的需求是快产快消的即时消费场景,并且生产的消息立即被消费者消费掉。

· 如果速度是你十分看重的,比如慢了一秒好几千万这种。

· 如果允许出现消息丢失的场景。

· 如果你不需要系统保存你发送过的消息。

· 如果需要处理的数据量并不是那么巨大。

其他消息队列:

· 如果你想要稳定的消息队列。

· 如果你想要你发送过的消息可以保留一定的时间,并不是无迹可寻的时候。

· 如果你无法忍受数据的丢失。

· 如果速度不需要那么的快。

· 如果需要处理数据量巨大的时候。

应用场景分析

Redis:轻量级,高并发,延迟敏感即时数据分析、秒杀计数器、缓存等。

其他MQ:重量级,高并发,异步批量数据异步处理、并行任务串行化,高负载任务的负载均衡等。

redis是单线程的,为什么那么快?
  1. 完全基于内存
  2. i/o多路复用
  3. 数据结构简单
  4. 拥有自己的协议-Redis 序列化协议
什么是分布式事务?

一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败.

CAP定理?

在分布式系统中,可用性、一致性、分区容错性不能同时被满足,P必须满足,剩下的根据业务从AC中选一个

redis和zookeeper分布式锁,哪个性能更高?
  • redis的性能优于zookeeper
  • redis是基于内存的
  • zookeeper需要进行节点数据通过 至少需要两次io

你可能感兴趣的:(linq,c#)