- 博客(296)
- 收藏
- 关注
原创 6.19 redis面试场景题
QPS(每秒查询率)集中在特定的Key、带宽使用率集中在特定的Key、CPU使用时间占比集中在特定的Key。在查询商品库存时加排他锁分布式锁利用分布式锁+分段缓存利用redis的incr、decr的原子性 + 异步队列。
2025-06-19 11:18:54
1100
原创 6.17 Redis面试题 数据结构 线程模型 事务
在 Redis 6.0 版本之后,也采用了多个 I/O 线程来处理网络请求,这是因为随着网络硬件的性能提升,Redis 的性能瓶颈有时会出现在网络 I/O 的处理上。到 Redis 6.0 之后,就将网络IO的处理改成多线程的方式了,因为随着网络硬件的性能提升,Redis 的性能瓶颈有时会出现在网络 I/O 的处理上。虽然压缩列表紧凑型的内存布局能节省内存开销,但是如果保存的元素数量增加了,或是元素变大了,会导致内存重新分配,最糟糕的是会有**「连锁更新」**的问题。
2025-06-17 11:34:43
1023
原创 6.16 操作系统面试题 中断 网络io
CPU停下当前的工作任务,去处理其他事情,处理完后回来继续执行刚才的任务。中断事件来自于CPU外部的被称为外部中断,来自于CPU内部的则为内部中断。内部中断来自于处理器内部,其中,常被用于系统调用;而异常则是引起的。异常也和不可屏蔽中断一样不受eflags寄存器的IF位影响,区别在于不可屏蔽中断发生的事件会导致处理器无法运行(如断电、电源故障等),而异常则是影响系统正常运行的中断(如除0、越界访问等)。
2025-06-16 16:05:32
575
原创 6.15 操作系统面试题 锁 内存管理
操作系统设计了虚拟内存,每个进程都有自己的独立的虚拟内存,我们所写的程序不会直接与物理内打交道。分页是把整个虚拟和物理内存空间切成一段段固定尺寸的大小。虚拟地址与物理地址之间通过页表来映射。页表是存储在内存里的,内存管理单元 (MMU)就做将虚拟内存地址转换成物理地址的工作。访问的虚拟地址在页表中查不到时,系统会产生一个缺页异常,进入系统内核空间分配物理内存、更新进程页表,最后再返回用户空间,恢复进程的运行。分页不会有外部碎片,但会有内部碎片页号+偏移量。
2025-06-15 15:56:22
578
原创 6.12 操作系统面试题 进程管理
主要区别在于权限和可执行的操作内核态:CPU可以执行所有的指令和访问所有的硬件资源。内存管理、进程管理、设备驱动程序管理、系统调用等。用户态:CPU只能执行部分指令集,无法直接访问硬件资源。安全性:避免恶意程序对系统资源进行破坏稳定性:用户态程序出问题不会影响系统隔离性:使得操作系统内核与用户程序之间有了明确的边界,有利于系统的模块化和维护。
2025-06-12 10:47:06
934
原创 6.11 MySQL面试题 日志 性能 架构
binlog 是追加写,写满一个文件,就创建一个新的文件继续写,不会覆盖以前的日志,保存的是全量的日志,用于备份恢复、主从复制;binlog 有 3 种格式类型,分别是 STATEMENT(默认格式)、ROW、 MIXED。
2025-06-11 12:10:24
942
原创 6.10 Mysql 事务 锁 面试题
是通过行级锁来实现的,序列化隔离级别下,普通的 select 查询是会对记录加 S 型的 next-key 锁,其他事务就没没办法对这些已经加锁的记录进行增删改操作了,从而避免了脏读、不可重复读和幻读现象。尽量在开启事务之后,马上执行 select …执行 update 的时候,会加行级别锁,保证了一个事务更新一条记录的时候,不会被其他事务干扰。执行 update 的时候,会加行级别锁,保证了一个事务更新一条记录的时候,不会被其他事务干扰。是原子性,主要通过锁+undolog 日志保证原子性的。
2025-06-10 17:28:19
567
原创 java 面向对象编程
访问构造器语法:this(参数列表);注意只能在构造器中使用(即只能在构造器中访问另外一个构造器,必须放在第一条语句)引用数据类型:引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参。构造时需验证数据有效性的话可以在构造器中使用setXX方法。super代表父类的引用,用于访问父类的属性、方法、构造器。extend 子类自动拥有父类定义的属性和方法。方法的多态PloyMethod.java。基本数据类型:值拷贝、形参不影响实参。重写和重载就体现多态。
2025-06-10 16:53:51
313
原创 微服务商城-订单微服务
mr 包提供了一个在 Go 语言中执行 MapReduce 操作的框架。它支持并发执行映射和归约函数,并且可以自定义设置。创建订单时首先检查用户、商品、收货地址是否存在(并行)利用dtm创建订单 保证订单和商品库存的数据一致性。修改订单状态为已关闭。
2025-06-10 09:53:08
335
原创 6.9 Mysql面试题 索引相关
页目录就是由多个槽组成的,槽相当于分组记录的索引。我们通过槽查找记录时,可以使用二分法快速定位要查询的记录在哪个槽(哪个记录分组),定位到槽后,再遍历槽内的所有记录,找到对应的记录。建立联合索引时,要把区分度大的字段排在前面,这样区分度大的字段越有可能被更多的 SQL 使用到。使用前缀索引是为了减小索引字段大小,可以增加一个索引页中存储的索引值,有效提高索引的查询速度。在一些大字符串的字段作为索引时,使用前缀索引可以帮助我们减小索引项的大小。(a, b, c) a是全局有序的,bc是全局无序局部有序的。
2025-06-09 17:43:41
1169
原创 微服务商城-商品微服务
我们使用Sorted Set来存储,member为商品的id,即我们只在Sorted Set中存储缓存索引,查出缓存索引后,因为我们自动生成了以主键id索引为key的缓存,所以查出索引列表后我们再查询行记录缓存即可获取商品的详情,Sorted Set的score为商品的创建时间。果是在单体架构的业务当中,是不需要用到分布式事务的.单体架构中,涉及到需要保证多个事务同时成功的场景,只需要创建一个全局的事务对象 如:tx := db.Begin(),然后统一用这一个tx去管理接下来的业务逻辑即可。
2025-06-09 10:42:11
1196
原创 6.8 MySql面试题 基础、存储引擎
第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码在1NF基础上消除非主属性对主码的部分函数依赖)第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。字符, ascii一个字符占一个字节,utf-8一个字符占四个字节。错误:(订单号,产品号) 订单时间 只依赖于订单号。
2025-06-08 11:30:13
876
原创 6.5 计算机网络面试题
序列号:解决网络包乱序问题确认应答号:解决丢包问题控制位:ACK确认应答 RST强制断开连接 SYN建立连接 FIN断开连接。
2025-06-05 11:15:59
439
原创 微服务商城-用户微服务
将输入的password md5加密后与库中的数据进行比对。根据username查询用户表中的信息。通过uid查询列表 分页 返回总条数。软删除 更新 isdelete。
2025-06-04 21:02:33
209
原创 6.4 计算机网络面试题
及时失效令牌,使用黑名单等C/S 架构是指客户端和服务器端之间的通信模式,客户端通常是一个安装在用户计算机上的应用程序,而服务器则提供数据和服务。B/S 架构是指通过浏览器访问服务器的模式,用户通过浏览器与服务器交互,而不需要安装特定的客户端软件。C/S 架构:适合需要高性能、复杂交互和大量数据处理的场景,但维护和更新成本较高。B/S 架构:适合需要广泛访问、易于维护的应用,用户体验良好,更新简单。
2025-06-04 10:06:33
691
原创 6.3 计算机网络面试题
Socket 使用 TCP: 当使用流式 Socket 时,实际上是通过 TCP 协议进行数据传输。Socket 提供了一个简单的接口,使得开发者可以方便地使用 TCP 协议进行网络通信。Socket 是一种网络通信的抽象,提供了一种用于在网络上进行数据交换的接口。它是应用程序与网络协议之间的中介。在 Go 语言中,利用接口和直接为结构体编写函数之间有几个重要区别。DNS的全称是Domain Name System(域名系统)通过"Content-Length"头字段来进行。
2025-06-03 16:28:52
934
原创 百度golang研发一面面经
观察者模式是一种强大且灵活的设计模式,适用于需要实现对象间动态交互的场景。通过定义清晰的接口和方法,观察者模式能够有效地管理对象之间的关系,提高代码的可维护性和可扩展性。
2025-06-02 11:07:22
863
原创 字节golang后端二面
是一个强大的工具,适用于需要线程隔离的数据存储场景。合理使用可以提高性能和简化代码,但也需要注意内存管理和线程安全问题。
2025-06-01 12:36:40
1225
原创 5.28 后端面经
参考:https://blog.csdn.net/weixin_45565886/article/details/136098371客户端 → 服务器:发起请求,支持哪些加密算法?服务器 → 客户端:返回证书和选定的算法。客户端验证证书 → 生成随机密钥用公钥加密 → 发送给服务器。服务器用私钥解密 → 双方生成对称密钥。后续通信全部使用对称密钥加密。机密性(对称加密数据)身份认证(数字证书验证)完整性(散列算法防篡改)这使得 HTTPS 成为保护隐私(如密码、支付信息)的核心技术。
2025-05-28 13:56:56
841
原创 贝壳后端golang面经
gRPC是Google开源软件,gRPC是基于HTTP2.0协议,而HTTP2.0是基于二进制的HTTP协议升级版本,底层使用Netty框架支持。微服务化,跨平台的服务之间远程调用;protobuf – 跨平台多语言使用协议缓冲区(Protocol Buffers)
2025-05-27 19:42:02
1304
2
原创 5.26 面经整理 360共有云 golang
参考:https://www.cnblogs.com/goloving/p/13590955.htmlselect for update是一种常用的加锁机制,它可以在查询数据的同时对所选的数据行进行锁定,避免其他事务对这些数据行进行修改。比如涉及到金钱、库存等。一般这些操作都是很长一串并且是开启事务的。如果库存刚开始读的时候是1,而立马另一个进程进行了update将库存更新为0了,而事务还没有结束,会将错的数据一直执行下去,就会有问题。所以需要for upate 进行数据加锁防止高并发时候数据出错。
2025-05-26 19:52:26
1132
原创 5.22 面经整理
代码段:代码段是用来存放可执行文件的操作指令,可执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,它是不可写的。数据段:存放程序静态分配的变量和全局变量。BSS段:包含了程序中未初始化的全局变量,在内存中 bss 段全部置零。堆 heap:当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)
2025-05-22 14:46:04
248
原创 新浪、京东golang一面整理
微服务治理是一套保障微服务架构高效、稳定运行的机制和规范。随着单体应用拆分为多个独立服务,服务数量增多、交互复杂,治理成为解决服务间通信、监控、故障处理等问题的关键手段。
2025-05-21 16:00:36
1123
原创 深信服golang面经
在 Go 中,map不是协程安全的。如果多个协程同时读写同一个map,可能会导致数据竞争和不确定的行为。因此,使用map时需要确保并发安全。map在并发环境下不安全。使用互斥锁、sync.Map或通道可以实现协程安全。有缓冲区的通道适用于任务队列等场景,可以提高并发性能。无缓冲区的通道适用于需要同步的场景,确保操作的顺序。内存逃逸指的是在 Go 中某个变量的生命周期超出了其原本的作用域。这意味着该变量不能在栈上分配,而必须在堆上分配,以确保在函数返回后仍然能够访问。
2025-05-20 11:03:43
782
原创 华为ODgolang后端一面面经
避免历史连接同步双方初始序列号避免资源浪费Redis 提供了多种架构模式,以满足不同场景的需求。根据数据规模、可用性和性能要求,选择合适的架构模式。
2025-05-19 18:33:58
1002
原创 微服务商城(1)开篇、服务划分
参考:https://mp.weixin.qq.com/s?
2025-05-14 20:21:29
705
原创 字节后端开发一面面经
滑动窗口算法通过动态监测和灵活的时间窗口设计,解决了固定窗口算法在流量控制中的突发性和不精确性问题,使得系统能够更平稳、合理地处理请求。rpc通常使用在分布式系统、跨语言调用、高性能服务中。http通常使用在网页浏览、RESTful API、文件下载等HTTP 流量: 适合外部用户请求和 RESTful API。RPC 流量: 适合服务间的高效通信。选择使用哪种方式取决于具体的应用场景和需求。
2025-05-12 10:14:37
633
原创 Funplus 服务端开发实习 面经
文章摘要: 本文探讨了多个技术主题,首先是Redis Zset的底层实现,随后讨论了如何实现一个简单的缓存系统,并介绍了常见的缓存淘汰策略,如LRU、FIFO和LFU。接着,文章解释了Golang的混合写屏障机制,该机制通过结合插入写屏障和删除写屏障,优化了垃圾回收过程,减少了停顿时间。此外,文章还分析了变量在栈和堆中的分配规则,指出栈用于局部变量和短生命周期对象,而堆用于动态分配和大块内存。最后,文章对比了Git中的merge和rebase操作,指出merge保留分支历史,而rebase则重写提交历史,使
2025-05-11 10:51:48
617
原创 小厂golang面经
在Go语言中,slice是一种动态数组结构,当向slice添加元素时如果容量不足,底层会触发扩容机制。扩容时,新的容量通常是原容量的两倍,同时会分配一块新的内存区域并将原有数据复制过去。如果原容量足够大,则不会触发扩容。首先明确slice是由一个底层数组支持的动态视图,它包含三个关键属性:指向底层数组的指针、当前长度和容量。当我们对slice进行append操作时,如果当前长度加上新增元素数量超过容量,就会触发扩容。
2025-05-09 10:15:30
451
原创 阿里云 golang 一面
通过微服务架构、消息队列、缓存、负载均衡等方法,可以有效地处理并发打车请求,确保系统的高可用性和良好的用户体验。同时,监控和日志管理也能帮助及时发现和解决问题。
2025-05-08 11:16:47
1048
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人