字节抖音电商 后端开发岗位 一面
笔者整理答案,以供参考
自我介绍
项目(20分钟)
RocketMQ延时消息的底层实现
回答: 延时消息的实现主要依赖于RocketMQ中的定时任务机制。消息被发送到Broker时,会先存储在一个特定的延时消息队列中。Broker会定时扫描这个队列,当消息的延时时间到了,就会把消息投递到目标消费队列中。
消息量太大导致读消息延迟时间很长怎么办
回答: 可以通过以下几种方式优化:
- 消息分区: 将消息分区存储,分散到不同的队列中,减小单个队列的压力。
- 水平扩展: 增加消费者的数量,提高消费能力。
- 批量消费: 合理设置批量消费的大小,减少每次I/O操作的次数。
- 异步处理: 将耗时的操作放到异步任务中执行,减小消费时间。
项目还有啥优化
回答: 项目的优化可以从多个方面入手,比如:
- 数据库优化: 添加索引,进行SQL查询优化,使用分库分表等。
- 缓存优化: 使用合适的缓存策略,避免缓存穿透、缓存雪崩等问题。
- 代码优化: 进行代码重构,减少重复代码,优化算法和数据结构。
- 架构优化: 采用微服务架构,拆分单体应用,提升系统的可扩展性。
讲一讲Redis
回答: Redis是一种基于内存的高性能键值对存储数据库,常用于缓存、会话存储、排行榜等场景。它支持丰富的数据结构,如字符串、哈希、列表、集合、有序集合等,提供了持久化、事务、Lua脚本、复制、高可用和分区等功能。
Redis为什么快
回答:
- 内存存储: 数据全部存储在内存中,读写速度非常快。
- 数据结构优化: 使用了高效的数据结构,如字典、跳表等。
- 单线程模型: 避免了多线程竞争,不需要加锁,减少了上下文切换的开销。
- I/O多路复用: 采用了epoll模型,可以同时处理大量客户端请求。
单线程模型有什么缺点,有什么不太适用的场景
回答: 缺点:
- CPU利用率: 无法充分利用多核CPU,CPU密集型任务性能不佳。
- 阻塞操作: 如果有阻塞操作,会阻塞整个线程,影响性能。
不适用的场景:
- 复杂的计算任务: 无法利用多核CPU的优势。
- 大量阻塞操作: 需要频繁的I/O操作时,性能下降明显。
Redis的大key问题,为什么会产生大key
回答: 大key是指单个键对应的数据量非常大,可能是一个包含大量元素的集合或列表。产生大key的原因可能是:
- 数据设计不合理: 没有合理分片,导致数据集中在单个key下。
- 误用数据结构: 使用了不适合的数据结构,比如将大量数据存储在一个列表或哈希表中。
Redis怎么设置过期时间,底层是怎么实现的,有哪些过期删除策略
回答: 设置过期时间可以通过EXPIRE
命令,或者在设置键值时直接指定过期时间,如SET key value EX 10
。
底层实现:
- 定期删除: Redis会定期扫描设置了过期时间的键,删除已过期的键。
- 惰性删除: 当访问一个键时,如果发现它已经过期,则删除这个键。
过期删除策略:
- 定期删除: 定期扫描一部分键,删除过期的。
- 惰性删除: 访问时检查是否过期,过期则删除。
- 主动删除: 内存不足时,主动删除过期键,腾出空间。
普通索引、(a b c)联合索引,如果只通过b等值查询能走索引吗,如果用a和c呢
回答:
- 只通过b等值查询: 不能走索引,因为联合索引需要从第一个字段开始匹配。
- 通过a和c: 如果是组合查询,可以走索引a,但是单独通过c无法走索引。
线程池主要解决什么问题,有什么优点
回答: 线程池主要解决了线程的创建和销毁开销大、线程数量不受控的问题。优点包括:
- 提高性能: 通过复用线程,减少线程创建和销毁的开销。
- 资源管理: 可以控制并发线程的数量,避免资源耗尽。
- 任务管理: 可以统一管理和调度任务,提高系统的响应速度。
线程池的原理、来了一个任务后的处理流程
回答: 线程池的原理是通过复用固定数量的线程来执行任务,而不是每次都创建新线程。处理流程如下:
线程池参数
- corePoolSize:核心线程数,即线程池中始终保持存活的线程数量。
- maximumPoolSize:最大线程数,即线程池中允许的最大线程数量。
- keepAliveTime:线程的存活时间。当线程池中的线程数量超过核心线程数时,多余的空闲线程在终止前等待新任务的最长时间。
- unit:时间单位,
keepAliveTime
的时间单位。 - workQueue:任务队列,用于保存等待执行的任务。
- threadFactory:线程工厂,用于创建新线程。
- handler:拒绝策略,当任务无法执行时如何处理。
任务处理流程
- 提交任务:
- 当一个新任务通过
execute
方法提交到线程池时,线程池会根据当前线程数量和任务队列的状态决定如何处理这个任务。
- 当一个新任务通过
- 核心线程处理:
- 如果当前线程数量少于核心线程数
corePoolSize
,则创建一个新线程来处理这个任务。
- 如果当前线程数量少于核心线程数
- 任务队列处理:
- 如果当前线程数量已经达到或超过核心线程数,则将任务加入到任务队列
workQueue
中进行排队。
- 如果当前线程数量已经达到或超过核心线程数,则将任务加入到任务队列
- 非核心线程处理:
- 如果任务队列已满且当前线程数小于最大线程数
maximumPoolSize
,则创建一个新线程来处理这个任务。 - 如果任务队列已满且当前线程数已达到最大线程数,则执行拒绝策略
handler
。
- 如果任务队列已满且当前线程数小于最大线程数
- 任务执行:
- 核心线程和非核心线程会不断从任务队列中获取任务并执行。
- 线程回收:
- 如果一个非核心线程在等待时间超过
keepAliveTime
后仍未获得新任务,该线程将被终止,以节省资源。
- 如果一个非核心线程在等待时间超过
keepAliveTime对核心线程是否生效,是否能杀死核心线程
回答: keepAliveTime默认对核心线程不生效,只对非核心线程生效。如果要对核心线程生效,需要调用allowCoreThreadTimeOut(true)
。
那如果我想杀死核心线程应该怎么做
回答: 可以通过设置核心线程的过期时间来实现。调用allowCoreThreadTimeOut(true)
,然后设置keepAliveTime
,核心线程在空闲时间超过keepAliveTime
后也会被回收。
线程安全问题怎么解决
回答:
- 加锁: 使用
sychronized
或ReentrantLock
等锁机制。 - 使用线程安全的集合: 如
ConcurrentHashMap
、CopyOnWriteArrayList
等。 - 原子类: 使用
AtomicInteger
、AtomicReference
等原子类进行操作。
除了加锁还有什么方法,有没有无锁化方法
回答:
- 线程局部变量: 使用
ThreadLocal
来存储线程私有的数据,避免线程间的数据竞争。 - 无锁算法: 使用CAS(Compare And Swap)等无锁算法,利用硬件支持的原子操作来保证线程安全。
读写锁听过吗,大概说说
回答: 读写锁是一种特殊的锁机制,允许多个线程同时读,但在写操作时,只有一个线程可以写,并且在写操作时,不允许读操作。常用的读写锁实现有ReentrantReadWriteLock
。
ThreadLocal说说
回答: ThreadLocal
提供了线程局部变量,每个线程都有自己独立的变量副本,互不干扰。主要用于解决多线程环境下的变量隔离问题。
线程池和ThreadLocal一起用会有什么问题吗
回答: 主要问题是内存泄漏。因为线程池中的线程是复用的,ThreadLocal
变量不会被回收,可能导致内存泄漏。此外,还可能有脏数据的问题,因为线程复用时,ThreadLocal
变量中的数据可能没有及时清理。
lc53 最大子数组和
回答: 这道题可以用动态规划解决。定义一个变量max_so_far
记录到当前位置的最大子数组和,一个变量max_ending_here
记录以当前元素结尾的最大子数组和。遍历数组,更新这两个变量,最终max_so_far
即为结果。
public int maxSubArray(int[] nums) {int max_so_far = nums[0];int max_ending_here = nums[0];for (int i = 1; i < nums.length; i++) {max_ending_here = Math.max(nums[i], max_ending_here + nums[i]);max_so_far = Math.max(max_so_far, max_ending_here);}return max_so_far;
}
反问
更多惊喜
我还将定期分享:
-
最新互联网资讯:让你时刻掌握行业动态。
-
AI前沿新闻:紧跟技术潮流,不断提升自我。
-
技术分享与职业发展:助你在职业生涯中走得更远、更稳。
-
程序员生活趣事:让你在忙碌的工作之余找到共鸣与乐趣。
关注回复【1024】惊喜等你来拿!
敬请关注【程序员世杰】
相关文章:
字节抖音电商 后端开发岗位 一面
笔者整理答案,以供参考 自我介绍 项目(20分钟) RocketMQ延时消息的底层实现 回答: 延时消息的实现主要依赖于RocketMQ中的定时任务机制。消息被发送到Broker时,会先存储在一个特定的延时消息队列中。Broker会定时扫…...
前端开发日记——在MacBook上配置Vue环境
前言 大家好,我是来自CSDN的寄术区博主PleaSure乐事。今天是开始学习vue的第一天,我使用的编译器是vscode,浏览器使用的是谷歌浏览器,后续会下载webstorm进行使用,当前学习阶段使用vscode也是可以的,不用担…...
测试开发面经总结(三)
TCP三次握手 TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的。 一开始,客户端和服务端都处于 CLOSE 状态。先是服务端主动监听某个端口,处于 LISTEN 状态 客户端会随机初始化序号&…...
开始构建我们自己的大语言模型:数据处理部分
关注本专栏(NLP简论:手搓大语言模型实践) 继续学习从头编写、训练自己的大语言模型。 接上集,本章我们将深入说一下大语言模型数据处理部分的细节,并直接提供本部分的完整代码。 【配套资源】 暂时的词汇表࿱…...
springboot系列十: 自定义转换器,处理JSON,内容协商
文章目录 自定义转换器基本介绍应用实例查看源码注意事项和细节 处理JSON需求说明应用实例 内容协商基本介绍应用实例debug源码优先返回xml注意事项和细节 ⬅️ 上一篇: springboot系列九: 接收参数相关注解 🎉 欢迎来到 springboot系列十: 自定义转换器,…...
C++(new与delete操作符)
C中的new与delete new 与 delete定位new表达式 new 与 delete 在C中需要动态申请内存空间时需要使用 new 与 delete 这两个操作符 #include <iostream> using namespace std; int main() {int* p1 new int;//开辟一块int类型大小的空间给p1int* p2 new int(1);//开辟…...
STM32智能工业自动化监控系统教程
目录 引言环境准备智能工业自动化监控系统基础代码实现:实现智能工业自动化监控系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:工业自动化与管理问题解决方案与优化收尾与总结 1. 引言 智能…...
WPF设置欢迎屏幕,程序启动过度动画
当主窗体加载时间过长,这时候基本都会想添加一个等待操作来响应用户点击,提高用户体验。下面我记录两个方法,一点拙见,仅供参考。 方法1:在App类中使用SplashScreen类。 protected override void OnStartup(StartupEventArgs e)…...
Flink实时开发添加水印的案例分析
在Flink中,处理时间序列数据时,通常需要考虑事件时间和水印(watermarks)的处理。以下是修改前后的代码对比分析: 修改前的代码: val systemDS unitDS.map(dp > {dp.setDeviceCode(DeviceCodeEnum.fro…...
收银系统源码-线上商城diy装修
线下线上一体化收银系统越来越受门店重视,尤其是连锁多门店,想通过线下线上相互带动,相互引流,提升门店营业额。商城商城如何装修呢? 1.收银系统开发语言 核心开发语言: PHP、HTML5、Dart后台接口: PHP7.3后合管理网…...
Linux中nohup(no hang up)不挂起,用于在系统后台不挂断地运行命令,即使退出终端也不会影响程序的运行。
nohup的英文全称是 no hang up,即“不挂起”。这个命令在Linux或Unix系统中非常有用,主要用于在系统后台不挂断地运行命令,即使退出终端也不会影响程序的运行。默认情况下(非重定向时),nohup会将输出写入一…...
【.NET全栈】ASP.NET开发Web应用——站点导航技术
文章目录 前言一、站点地图1、定义站点地图文件2、使用SiteMapPath控件3、SiteMap类4、URL地址映射 二、TreeView控件1、使用TreeView控件2、以编程的方式添加节点3、使用TreeView控件导航4、绑定到XML文件5、按需加载节点6、带复选框的TreeView控件 三、Menu控件1、使用Menu控…...
docker 容器内部UI映射host
方法有很多, 目前我总计一个我自己尝试成功的方法,通过xpra。 Xpra可以看作是screen或tmux的图形版本,支持远程X11应用程序的显示和交互。 在远程服务器上,安装Xpra: sudo apt-get install xpra启动Xpra服务器会话&…...
数仓面试题——DWS层新增维度字段需求
前言 在数据仓库开发中,数据仓库的设计和维护一直是一个备受关注的话题。随着业务需求的不断变化,数据仓库的结构也需要随之调整。 面试过程中,多次被提问:当DWS构建好后,突然来了一个新的需求,需要添加某个…...
Qt实现MDI应用程序
本文记录Qt实现MDI应用程序的相关操作实现 目录 1.MDM模式下窗口的显示两种模式 1.1TabbedView 页签化显示 1.2 SubWindowView 子窗体显示 堆叠cascadeSubWindows 平铺tileSubWindows 2.MDM模式实现记录 2.1. 窗体继承自QMainWindow 2.2.增加组件MdiArea 2.3.定义统一…...
逆向案例二十六——webpack自执行函数是完整的,但我们只需要加载器,某职业技术学校登陆密码逆向
网址:统一身份认证平台 找到登陆包,搜索找到加密位置。 找到加密位置,打上断点 分析,E就是加密结果 进入n.i函数,就是t.i,看一下这个函数,传一个值,然后不变的返回,所以没什么意义 …...
容器安全最佳实践和工具
容器安全最佳实践和工具 什么是容器安全 容器安全是指保护容器化应用程序和基础设施免受潜在威胁和攻击的措施和策略。容器化技术(如Docker、Kubernetes)使得应用程序能够在隔离的环境中运行,这既提供了灵活性,也引入了新的安全…...
牛客周赛 Round 51
目录 A.小红的同余 B.小红的三倍数 C.小红充电 D.小红的gcd E.小红走矩阵 F.小红的数组 这次周赛题目比较简单,算法题也基本上是板子题,出得很好(~ ̄▽ ̄)~ A.小红的同余 思路:签到题&am…...
【Linux】详解加锁实现线程互斥
一、多线程不加线程互斥可能会引发的问题 下面是一个抢标逻辑。抢票为什么会抢到负数:假设当票数为1时,此时四个进程的判断条件tickets都大于0,都会进入抢票操作,第一个进程抢完票以后tickets0并写回内存,第二个进程再…...
Java学习高级四
JDK8开始,接口新增了三种形式的方法 接口的多继承 内部类 成员内部类 静态内部类 局部内部类 匿名内部类 import javax.swing.*; import java.awt.event.ActionEvent;public class Test {public static void main(String[] args) {// 扩展 内部类在开发中的真实使用…...
mmc-utils 的 MMC 测试工具
MMC 工具介绍 有一个名为 mmc-utils 的 MMC 测试工具,由 Ulf Hansson 维护,您可以在以下公共 git 存储库中找到它: mmc/mmc-utils.git - Unnamed repository; edit this file description to name the repository. 功能 mmc-utils 工具可以…...
使用Python Turtle绘制圣诞树和装饰
简介(❤ ω ❤) 在这篇文章中,我们将探索如何使用Python的Turtle模块来绘制一个充满节日气氛的圣诞树,以及一些可爱的装饰品。Turtle是一个受Logo语言启发的图形库,非常适合初学者学习编程和创建图形。 码农不是吗喽(大学生版&…...
非常好的新版网盘系统,是一款PHP网盘与外链分享程序,支持文件预览
这是一款PHP网盘与外链分享程序,支持所有格式文件的上传, 可以生成文件外链、图片外链、音乐视频外链,生成外链同时自动生成相应的UBB代码和HTML代码, 还可支持文本、图片、音乐、视频在线预览,这不仅仅是一个网盘&a…...
针对【module_or_function】的单元测试,全面覆盖可能的【edge_cases】
针对【module_or_function】的单元测试,全面覆盖可能的【edge_cases】 编写单元测试是为了验证代码模块或函数的正确性和鲁棒性。对于module_or_function,首先需要确定这个模块或函数的具体功能和预期输入范围。一个好的单元测试应该包括以下几个步骤&a…...
OTA测试!
OTA测试,全称“Over-The-Air Testing”,是一种无线通信设备的性能测试方法,主要用于评估设备在无线传输环境中的性能表现。以下是关于OTA测试的详细介绍: 一、定义与目的 OTA测试着重进行整机辐射性能方面的测试,以评…...
[H最短路] lc2959. 关闭分部的可行集合数目(Floyd最短路+二进制枚举+模板题)
文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接:2959. 关闭分部的可行集合数目 2. 题目解析 看了看题好像还没啥思路,结果一看数据范围,好家伙…n 最大就 10 啊,那不直接闭眼直接 Floyd枚举所有情况即可吗?&…...
pyinstaller用法详解3
本文使用创作助手。 大家好,时隔多日,我又更新了pyinstaller的用法详解! 当然,这一次要比之前更详细,十分详细。 谢谢大家的支持,我们现在开始! 一、快速开始使用pyinstaller 我之前的文章…...
养猫新手不会挑智能猫砂盆?2024最新挑选干货分享!
不得不说智能猫砂盆真的帮了我很大的忙,四年以来我陆陆续续养了很多的猫咪,但是因为需要上班,所以有时候也对铲屎的工作有些力不从心,后面听了朋友的建议,去入手了智能猫砂盆,不得不说买智能猫砂盆也非常的…...
上海理工大学24计算机考研考情分析!初复试分值比55:45,复试逆袭人数不算多!
上海理工大学(University of Shanghai for Science and Technology),位于上海市,是一所以工学为主,工学、理学、经济学、管理学、文学、法学、艺术学等多学科协调发展的应用研究型大学;是上海市属重点建设大…...
Pandas库学习之DataFrame.drop()函数
Pandas库学习之DataFrame.drop()函数 一、简介 DataFrame.drop 是 Pandas 库中一个非常实用的函数,用于删除 DataFrame 中的行或列。通过指定列名或行索引,可以灵活地从数据集中移除不需要的数据。这对于数据清洗和预处理非常有用。 二、语法和参数 D…...
八年级信技做网站/湖南平台网站建设设计
题目来源:南京邮电大学网络攻防训练平台 Web题 md5 collision 解题过程: 点开题目标题,呈现在眼前的是一段php代码,代码如下: $md51 md5(QNKCDZO); $a $_GET[a]; $md52 md5($a); if(isset($a)){if ($a ! QNKCDZO…...
沅江网站设计公司/搜狗网址导航
转载文章 Centos7升级gcc学习笔记...
做网站找个人还是公司/网推获客平台
本站原创文章,转载请说明来自《老饼讲解-机器学习》ml.bbbdata.com 《老饼讲解-机器学习》--一个免费、专业、全面的机器学习网站http://ml.bbbdata.com/ 目录 一、线性回归模型简单回顾 01.模型思想 02.模型表达式 03.模型损失函数 二、线性回归的误差 三…...
wordpress搭建后域名打不开/百度教育
//分支语句可以嵌套 //循环语句,同样可以嵌套 例一: //打印三角形:左下角是直角 Console.Write("请输入一个正整数:"); int a int.Parse(Console.ReadLine()); for (int i …...
女生做网站编辑怎么样/新乡seo优化
1、打开设置 2、勾选编码格式,在这里可以设置分别设置IDE、Project、File等级别的编码格式。 3、查看、修改各个文件的编码 4、当右击编辑界面时,可以直接设置当前文件的编码 转载于:https://www.cnblogs.com/begin1949/p/4967140.html...
南昌网站建设公司机构/北京做网站的公司排行
1、Timestamp(long)转成日期 Timestamp timestamp new Timestamp(System.currentTimeMillis()); LocalDateTime localDateTime timestamp.toLocalDateTime(); //之后就可以通过java8 新API操作时间了 localDateTime.toLocalDate(); Date da…...