June's Studio.

June's Studio.

it's better to burn out than to fade away

如何设计一个高并发系统
如何理解高并发系统 所谓设计高并发系统,就是设计一个系统,保证它整体可用的同时,能够处理很高的并发用户请求,能够承受很大的流量冲击。 我们要设计高并发的系统,那就需要处理好一些常见的系统瓶颈问题,如内存不足、磁盘空间不足,连接数不够,网络宽带不够等等,以应对突发的流量洪峰。 1. 分而治之,横向扩展 如果你只部署一个应用,只部署一台服务器,那抗住的流量请求是非常有限的。并且,单体的应用,有单点的风险,如果它挂了,那服务就不可用了。 因此,设计一个高并发系统,我们可以分而治之,横向扩展。也就是说,采用分布式部署的方式,部署多台服务器,把流量分流开,让每个服务器都承担一部分的并发和流量,提升
(面经) 阿里本地生活 2023-03-20
工作中碰到哪些异常。 框架、多线程、集合类 异常 在使用nacos中碰到哪些异常? 多线程环境下,线程通信 springcloud网关 spring 事务传播级别 数据库连接池。 druid 和其他连接池对比有哪些优缺点 spring事务怎么手动开启 spirng事务失效场景 spring事务失效场景,但是我要以事务的方式执行,怎么做 mysql锁。 自增锁 表锁 kafaka优缺点 怎么自己设计一个消息队列 rocketmq怎么保证顺序
(面经) 上海通呗 2023-02-20
synchronized 和reentrentLock 异同 reentrantLock的原理 reentrantLock业务中的可使用场景。 synchronized的使用场景 聚簇索引和非聚簇索引 b树和b+树 springboot源码 springboot bean的生命周期 @Resource @Autowired spring事务什么时候会失效 codereview流程 单例模式
(面经) 小牛互娱 2023-02-17
java JUC volatile 原理 AQS源码实现 jvm运行时内存区域 mysql 分库分表 聚簇索引 和非聚簇索引 联合索引是否会用到索引 (a_b_c, select * from t where a = xxx and c = xxx) mysql隔离级别,分别会有什么问题,默认隔离级别 b+树 mvcc redis 基本数据类型 set的底层实现,zset redis挂掉之后,本地缓存 + 限流。 reids持久化 场景题 限流怎么做的 抽奖权重 怎么做的 工作中有么有什么灵光一现的想法
(面经) 哈啰单车 2023-2-15
自我介绍 、项目经历 数据库: 1. 业务量多少 2. 表结构 用户表,分表 用户活动进度表,乐观锁 version 字段,(并发场景使用kafka消息队列异步处理) 如果要保证消息消费的顺序,可以根据业务key将同一种类型的消息放在一个broker partition中 操作历史记录表 ,全局唯一流水号,操作类型,操作数据 ,创建时间,更新时间 奖励发送表 3. 分库分表怎么设计 瓶颈分析: IO瓶颈 、CPU瓶颈 IO瓶颈: * 磁盘读io瓶颈,热点数据太多,缓存存不下,每次查询都会产生大量io,查询速率降低—->分库 or 垂直分表 * 网络io瓶颈,请求的数据太多,网
Golang-GMP
Goroutine的定义: 说到 gmp之前要先了解goroutine,golang在语言级别支持协程,称作goroutine。golang标准库提供的所有系统调用操作(包括所有同步的I/O操作),都会出让CPU给其他Goroutine。这让goroutine的管理不依赖于系统的进程和线程,也不依赖于cpu的核心数量,而是交给golang的运行时同意调度。 GMP是什么: G: goroutine,用户级的轻量协程,每个goroutine对象中的sched保存着齐上下文信息。 M: machine 内核级线程的封装,数量对应真实的cpu核心数(真正干货的对象) P: processor.
Golang-内存分配&GC
go性能观测 pprof * 你的程序时性能敏感型吗 * GC带来的延迟影响到了你的程序性能吗 * 你的程序有过多的内存分配吗 golang程序在启动时,会向系统申请一定区域的内存,分为栈(stack) 和堆(heap) 栈内存会随着函数的调用分配和回收; 堆内存由程序申请分配,由垃圾回收器(Garbage Collector)负责回收。 性能上,栈内存的使用和回收更迅速一些; 尽管Golang 的 GC 很高效,但也不可避免的会带来一些性能损耗。因此,Go 优先使用栈内存进行内存分配。在不得不将对象分配到堆上时,才将特定的对象放到堆中。 内存分配原则: * Shari
怎么不用定时任务实现关闭订单
定时任务 需要频繁 扫描主订单号 ,造成磁盘IO 和网络 IO的消耗 ,对实时交易产生影响 rocketmq延迟队列 消息延迟级别分别为1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h ,共18个级别 recordMsg.setDelayLevel(14); // 第14个级别 ,即10分钟 缺点不够灵活, 商业版支持自定义时间 rabbitMq死信队列 时间轮算法 创建环形队列,例如可以创建一个包含3600个slot的环形队列(本质是个数组) 任务集合,环上每一个slot是一个Set 同时,启动一个timer,这个
Golang常见面试题
Golang开发面试题汇总 请分析以下代码两个方法的执行效率,哪个更快,为什么? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package main const matrixLength = 200000 func foo() { // 二维数组 matrixA := CreateMatrix(matrixLength) matrixB := CreateMatrix(matrixLength) for i := 0; i < matrixLength; i
Golang面试题精选
前言 一、基础部分 1、golang 中 make 和 new 的区别?(基本必问) **共同点:**给变量分配内存 不同点: 1)作用变量类型不同,new给string,int和数组分配内存,make给切片,map,channel分配内存; 2)返回类型不一样,new返回指向变量的指针,make返回变量本身; 3)new 分配的空间被清零。make 分配空间后,会进行初始化; 1. 字节的面试官还说了另外一个区别,就是分配的位置,在堆上还是在栈上?这块我比较模糊,大家可以自己探究下,我搜索出来的答案是golang会弱化分配的位置的概念,因为编译的时候会自动内存逃逸处理,懂的大佬帮
avatar
June
witness me
FRIENDS
ddatsh