golang模拟面试题01
channel实现原理
Mutex 是悲观还是乐观锁(什么是乐观锁)
Mutex 有几种模式(饥饿和互斥)
Mutex 自旋锁?
goroutine 模型 和抢占时机
https://www.bilibili.com/video/BV19r4y1w7Nx/?spm_id_from=333.788.recommend_more_video.6
GC 原理
go内存分配,哪些对象分配在堆上,哪些分配在栈上(大对象小对象)
OOM out of MEMERY 内存泄漏
signal信号(64种)
Go Micro
CPU三级缓存,加载固定长度到cache,连续的地址空间
多核CPU如何保持cache不冲突(MESI)
rune 和 uint 超出位数后计算
小厂01
- mutex有几种锁?
- 互斥锁mutex
- 读写互斥锁rwmutex
- 协程和线程?见golang101-1 .4
- channel的作用?用法?
- 控制并发数,一般结合 waitgroup
- 控制协程退出等
- tidb基础
- gc流程 原理 golang101-2.4
- 线程与进程
- slice 和 map 线程安全否
- 使用go遇到的挑战?
- postgre?分布式缓存?
- 框架grpc相关
- 统计协程数量
- runtime.NumGoroutine()
- 为什么转go
- 微服务,上云
- k8s
- 大量,分布式
ihandy
- 项目
- gc
- redis 持久化
- channel,context
- mutex使用
- gmp
- 进程线程协程
数獨科技:多业务或者多方数据不出库,怎样模型化使用这些数据 tob
- 项目
- 最拿手的哪个?
- 技术点不是特别突出
- 任务系统要讲明白对用户和运营的两套接口模式,以及相关的缓存实现方案和刷新机制
- 广告系统要讲明白具体提升了哪些效率
- 什么维度的缓存key,等
- 管理
- 时间分配
- 需求评审大概流程和内容
- 字符串相加
- kafka :topic, partition和consumer的关系, replica
- consumer的负载分配等
- 组内每个消费者对应一个partition,partition多的话由consumer承接,其中一个或几个接受的量会多;消费者多的话,多出partition的会处于空闲状态
中物联讯
- 项目
字节国际支付
- 项目
- redis 持久化
- 求根号2
- 卡算法题了你敢信,菜逼
- 去把课程中的题每个至少来两遍才够的!!!!!!
循环调度:银行 or 销售的提效工具,通话质量模型 tob
- http + 协程,怎么调度的?是否涉及用户态和核心态的切换?
- 索引的构建流程?
- b树,b+树区别,MongoDB为什么选用b树
- gmp调度流程
- redis 哪些命令? 时间复杂度是 o(n)
- kafka 持久化?
- kafka partition数量根据哪些信息确定的?
- 回答:consumer的数量
- 答案:?
umu
- mysql 聚合索引和XX索引
- redis 各种数据类型的底层结构
自己总结:
并发,缓存,高可用,grpc,gc,gmp,mutex,channel,context等
http,redis,mysql,zookeeper,raft
乐观锁悲观锁?
cas?
集度基础服务开发
- grpc通信问题
- grpc限流,熔断相关
- golang 底层,写了就会问,channel实现方式,slice实现方式
- 如何做限流,redis请求锁的过期时间为什么,如果有人一直持有锁怎么办?
- 延时队列的实现方案
- golang的gc
- redis 锁的实现方案?
- 算法:判断二叉树是否对称
- 逃逸分析
刷题:
剑指offer
算法训练营
简单题*3
中等题*4
Tik Tok二面
1.介绍数据库索引?
数据库索引是一种数据结构,用于提高数据库查询效率。它通过创建特定的数据结构(如B树、B+树)来存储数据的有序副本,以便更快地定位和检索数据。
2.为什么把二叉查找树变成多路平衡查找树就能减少磁盘IO?为什么树的高度决定了磁盘的IO次数?如果查找某一个数据,用二叉查找树和用B+树的时间复杂度分别是多少?
3.B+树的叶子结点的默认大小是多少?如果把B树的非叶子结点只存放指针,那B树是不是就和B+树一样了呢?
4.除了二叉树,B+树,B树这些索引,还有什么常见的存储数据结构适合做索引呢?
哈希索引和全文索引也常用于数据库索引。
5.为什么InnoDB不用哈希做索引,用哈希和用B+树有什么区别?
哈希索引适用于等值查询,而B+树索引支持范围查询和排序。InnoDB使用B+树索引,因为它支持更多的查询类型。
6.Redis里面有序集合用的索引?介绍一下跳跃表,与哈希的区别?
跳跃表是一种有序数据结构,用于实现有序集合。与哈希表相比,跳跃表支持有序性和范围查询。
7.MySQL事务隔离级别有哪些,会产生哪些问题,MySQL默认的隔离级别是什么
MySQL的事务隔离级别包括读未提交、读已提交、可重复读和串行化。不同的隔离级别可能导致脏读、不可重复读和幻读等问题。MySQL默认的隔离级别是可重复读。
8.MySQL如何实现可重复读?MVCC的底层原理?
9.看你用过palsuar,也用过Kafka,那你说一下这两者不一样的地方?或者设计上有哪些不一样?
Pulsar和Kafka都是消息中间件,但它们的架构和设计有所不同。例如,Pulsar支持多租户、多数据中心复制和动态消息路由等特性,而Kafka则更加专注于高吞吐量和低延迟。
14.说说两者底层存储消息方式的区别?
15.为什么这两者要这么设计?
17.Redis如何实现高可用和高可靠的?
Redis实现高可用通常通过主从复制和哨兵或集群模式。哨兵负责监控节点健康,并在主节点失败时自动切换到从节点。集群模式支持数据分片和节点自动发现,提高了可用性和可扩展性。
18.Redis的主从复制是同步的还是异步的?异步和同步的优缺点?
Redis的主从复制是异步的。异步复制提高了性能,但可能导致数据不一致性和数据丢失。
19.了解go吗,说说协程,为什么要用协程?
协程是一种轻量级的线程,由Go语言原生支持。协程的优点包括低开销、高并发和简单易用,使得编写并发程序变得更加简单和高效。
20.为什么多线程访问共享资源需要加锁处理?
多线程并发访问共享资源可能导致数据竞态和不一致性。加锁能够保证数据的原子性和一致性,从而确保线程安全。
21.说说可见性,为什么一个线程看不到另外一个线程的修改?
线程的可见性指的是一个线程对共享变量的修改能够被其他线程立即看到。在多线程编程中,由于CPU的优化、缓存以及编译器的优化,可能导致线程之间的数据不一致。为了确保线程安全和正确性,我们需要解决这个问题。多线程对同一共享变量做修改时,某个线程修改后的新值可能不会立即更新到主内存,其他线程可能仍旧读到该变量旧值。
使用锁保证同一时刻只有一个线程访问共享变量;
对变量访问使用原子操作
23.让你设计一个任务调度器的类,add一个task,指定这个task的执行时间,可以add很多任务,但每个task执行的时间又各不相同,你如何实现,用什么数据结构?
可以使用优先队列(如最小堆)来存储任务,并按照执行时间进行排序。每次调度器检查时,都会选择最早的任务执行。
24.优先队列的实现原理?
定义与概念
优先队列是一种数据结构,用于存储具有不同优先级的任务或元素
包括FIFO(先进先出)和LIFO(后进先出)两种基本类型
实现技术
数据结构
堆式队列:高效的数据组织结构
K叉树:基于K叉树的优先队列算法,运算效率高
双输入通道优先网络:用于通信网络设计
算法设计
PQDSA算法:基于DAG任务集的入口节点数量确定优先队列数
MP-SAQM算法:基于优先级区分的调度及主动队列管理
硬件支持
SP-PIFO: 使用严格优先级队列逼近PIFO行为
光学优先队列:通过反馈系统实现,提高了缓冲容量的利用率
应用场景
操作系统
调度算法优化:提高处理器调度效率
网络传输
数据包调度:实现可编程的数据包调度
人工智能
异构计算环境下的任务调度问题解决
中间件技术
处理多个任务时按轻重顺序执行,缩短用户平均等待时间
性能分析与优化
并行操作性能
并行插入和删除方法:保证并行度和串行存取算法的优先顺序一致
高效合并优先队列的技术:减少存储开销,提高操作效率
实验验证与比较
实验结果验证了不同算法的有效性,如SP-PIFO、PQDSA等
对比经典堆算法和新颖堆变体在不同输入下的表现
挑战与未来方向
技术挑战
实现大规模并行操作的存储空间自适应性
提高硬件支持下的实时性和准确性
发展趋势
探索新的数据结构和算法以适应更复杂的应用场景
加强对异构计算环境下的优化和支持能力
25.算法题:二叉树的完全性检验?
字节跳动
1.介绍一下业务表的字段
2.定时任务刷新字段, 是怎么实现的?
3.分布式锁? 分布式死锁如何解决? 看门狗机制? 如何避免当前线程加的锁, 被其它线程解锁?
4.乐观锁和悲观锁的区别? 写多读少的情况, 应该使用乐观锁还是悲观锁?
5.分布式场景下, 如何实现乐观锁?
6.kafka的幂等性? 如何避免消息被重复消费?
7.两个线程, 同时向mysql中插入一条数据?
8.kafka如何保证消息不丢失
9.sql优化场景:
select id,name,balance from account where update_time > ‘2020-09-19’ limit 100000, 10
该语句为什么查询慢? 有什么优化思路?
- 算法题: 子集