字节跳动后端实习开发面经分享
字节后端开发实习面经一、算法题1.给定一个字符串abcdabgh,给个字符a,随机返回a下标,比如这个是0 4。要求返回的概率必须一样,空间复杂度要求O1即不能开任何空间存储下标,并且只能遍历一次。
2.给定n个骰子,和为k的概率,不能用回溯。
3.给一个数字比如234,给个数组比如{2,3,7},找出第一个不大于234的数,比如这个是233,有几种情况我记得是,这里用到了有序表我写的时候。
二、八股文(可能不全有的我好像也没有整理,可能比较简单)
数据结构1.堆和树的区别?应用场景?二叉搜索树是什么?
操作系统1.进程之间的通信方式?写个死锁?怎么解决?
2.操作系统内存满了怎么办?如何回收?有什么影响?
3.什么是僵尸进程?应该怎么去操作?
4.为什么会有线程安全的问题,如何解决?
5.说一下乐观锁和悲观锁?说一下CAS?aba问题是什么?如何解决?
mysql1.索引构成?(B+树)索引优化?给个sql让判断走索引的情况?
2.什么是慢sql,如何查找,如何优化?
3.三大日志,我记得好像有个问题是redolog写进去了,但是有个bin log没写进去该怎么办?(具体的我忘了,我 ...
延时消息:如何实现高性能的定时/延时消息?
延时消息的场景和定义先来看一个延时消息典型的使用场景。在网上购买商品下单的过程中,有个功能是:下单完成后 30 分钟如果没有完成支付,则这个订单就自动被取消。如下图所示,从技术上来看,为了实现这个功能,最直观的思路是我们可以将订单数据存在 DB 的表中。然后通过定时程序每秒定时去扫描订单数据,判断如果超过 30 分钟则进行后续的处理。
如下图所示,从技术上来看,为了实现这个功能,最直观的思路是我们可以将订单数据存在 DB 的表中。然后通过定时程序每秒定时去扫描订单数据,判断如果超过 30 分钟则进行后续的处理。
这个方案的问题是,业务方维护成本较高,需要开发维护定时任务并处理扩缩容,以保证数据处理的及时性。当订单数据量很大时,就容易出现性能问题。另外可能无法实现高精度的延时。因此理想状态是延时逻辑下沉到某个底层的引擎去实现,业务不需要感知任何延时逻辑,正常处理数据即可。在技术体系中,这个底层引擎一般由消息队列来担任。因此只要在类似这种需要定时或者延时触发某个行为的场景,都可以用到延时消息。(像把订单数据存在数据库当中 然后用定时任务fetch 维护成本高并且需要缩容 订单数据量比较 ...
API网关调研报告
项目的选型分布式架构下选择SpringMVC不是不可行,只是不是最佳的选择,不适合微服务的架构,无法实现服务的发现和负载均衡,缺少统一的认证和鉴权,无法处理大量的请求
互联网现代分布式架构应用技术主要以 RPC 通信的微服务模型为主,代表技术如;Dubbo、gRPC、Thrift,它们的通信协议为 RPC 协议(Remote Procedure Call,远程过程调用),这样的调用方式可以提高微服务间的通信性能。
介绍你的项目一句话概括:
它可以通过RPC服务的注册和发现机制,把接口注册网关中心,再通过网关算力执行接收 HTTP 请求协议进行解析做 RPC 接口的泛化调用。
一 SpringGateWay和API网关的区别:
1.Spring Cloud 网关和此项目 API 网关的不同之处在于它们服务的范围和实现方式,Spring Cloud网关服务于微服务架构中的服务治理,而API网关则服务于分布式系统中的RPC调用管理。
1.1 功能特点: Spring Cloud网关是一种微服务网关技术,它主要提供路由、限流、鉴权、负载均衡等基本功能,通过Spring Cloud Gat ...
Sanfor实习-数据信道
0 介绍0.1 背景SAWF的数据信道模块目前主要是指的接口层,由许多标准化的restful API组成,其价值如下:
在AIOps算法服务上解耦数据和计算,对于数据的读写操作均通过API进行,屏蔽各种数据库的具体细节,使得算法能专注于模型和计算;具备一定的数据处理功能,能够将不同数据源(VM、Mongodb、mySQL等)的数据加工成统一的、算法易于使用的数据格式;利于AI计算结果的存储和查询,缩短从上线到运营结果的时间;更好的可扩展性,对于后续引入其他算法和数据源,可以加入相应的api来获取和存储数据,不影响其他已有的功能,整体改动小,降低开发成本;标准化数据的获取和存储,优雅管理、减少维护、便于统计;
0.2 需求场景及问题目标是将数据信道模块建设成易使用、高可用、易扩展的基础模块。
SAWF数据源:
VictoriaMetrics:时序数据等(主要)MongoDB:配置数据、结果数据、告警等(主要)MySQL:配置信息等ClickHouse:日志信息等nebula:图数据库(待扩展)主要需求:
Read API:AIOps算法需要从各种数据源拉取各种数据进行计算;算法的结果数据 ...
API网关-注册中心的设计与开发
在实现了apigateway的core通信模块之后,已经开发出了一个核心通信组件,下一步开发api-gateway-center
apigateway-center网关注册中心服务的初始创建
如图所示,api-gateway-core 是最核心的通信层。那么它还需要把注册的网关接口在通信核心服务中启动起来。那么怎么启动呢?这个启动过程首先来自于 api-gateway-sdk 向 api-gateway-center 推送注册接口,之后在通过网关引擎 api-gateway-engin 拉取接口并在本地服务完成注册。最后再调用到网关接口时,则是通过 api-gateway-core 调用到对应的 RPC 应用中那么 api-gateway-sdk 并不是主要工程,没有它的是可以通过 api-gateway-admin 配置。所以在整个流程中 api-gateway-center、api-gateway-core 是两个核心工程,能更好的串联流程。
apigateway-center采用DDD领域驱动设计,具体的领域驱动设计的好处,会再出一章进行讲解
网关注册中心库表结构设计网关注册中 ...
Sanfor实习-大模型数据存储调研方案
大模型数据存储方案调研背景和需求在训练大模型时,通常需要使用大量的数据来训练模型。这些数据通常以CSV或JSON等文件格式存储。
需求描述:
为了解决数据版本管理的难题,需要开发一个数据管理系统,该系统能够支持以下功能:
1.数据上传与下载:用户可以通过系统将数据上传到系统中,并能够从系统中下载数据。
2.数据格式支持:系统应该支持CSV和JSON等常见的数据格式,以确保用户可以方便地上传和下载数据。
3.数据版本管理:系统应该能够跟踪数据的版本,并记录数据的修改历史。每次数据更新后,系统应该自动记录并保存新版本的数据,并能够让用户方便地查看和比较不同版本的数据。
4.数据权限管理:系统应该能够为每个用户分配不同的数据权限。例如,某些用户可能只能查看数据,而其他用户可能能够修改和删除数据。
5.数据备份与恢复:系统应该能够定期备份数据,并能够在需要时快速恢复数据。此外,系统应该能够提供数据恢复历史记录,以便用户可以查看以前备份的数据版本。
6.数据安全性:系统应该采取适当的安全措施来保护数据的安全性和隐私性,例如加密和身份验证等。
7.用户交互性:系统应该提供友好的用户界面或者简单的脚 ...
API网关-网关核心系统设计与开发
网关是什么?网关(Gateway)是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。API网关也是随着对传统庞大的单体应用(All in one)拆分为众多的微服务(Microservice)以后,所引入的统一通信管理系统。用于运行在外部http请求与内部rpc服务之间的一个流量入口,实现对外部请求的协议转换、参数校验、鉴权、切量、熔断、限流、监控、风控等各类共性的通用服务。
之前的做法都是在RPC服务之上在开发一个对应的WEB服务,WEB服务可以想象成Spring MVC的服务,在Spring MVC的工程中调用RPC服务,最终提供HTTP接口给到应用中来使用。
网关架构设计如果希望实现一个能支撑百亿级吞吐量的网关,那么它就应该是按照分布式架构思维做去中心化设计,支持横向扩展。让每一台网关服务都成为一个算力,把不同的微服务RPC接口,按照权重策略计算动态分配到各个算力组中,做到分布式运算的能力。
要把网关的通信模块、管理服务、SDK、注册中心、运营平台等依次分开单独开发实现,这样才能进行独立的组合包装使用。就像官网的通信 ...
volatile、线程池和锁
volatile 关键字如何保证变量的可见性?在 Java 中,volatile 关键字可以保证变量的可见性,如果我们将变量声明为 volatile ,这就指示 JVM,这个变量是共享且不稳定的,每次使用它都到主存中进行读取。
如何禁止指令重排序?防止 JVM 的指令重排序,会通过插入特定的 内存屏障 的方式来禁止指令重排序。
关键词:内存屏障
123public native void loadFence();public native void storeFence();public native void fullFence();
应用:双重校验锁实现对象单例(线程安全)
123456789101112131415161718192021public class Singleton { private volatile static Singleton uniqueInstance; private Singleton() { } public static Singleton getUniqueInstance() ...
Sanfor实习工作记录-6、7月
6月12工作内容:熟悉hydra项目代码。
遇到的问题:代码在本机环境运行不起来,需要在linux的gcc环境进行编译。
疑惑:正常的开发流程的环境是远程连接虚拟机的环境进行开发的吗,那是怎么debug的?之前自己做小项目都是本地开发完再部署环境。
收获:postman简单在学习了一下,了解了全局变量和后置引言。
6月13工作内容:postman接口测试,更新API文档。
遇到的问题:mango的db_name和coll_name信息不清楚。(已解决)
6月14工作内容: 使用helm下载,nebula-operator。
遇到的问题:coredns重复安装,导致服务域名无法解析。(已解决)
收获:恶补了计网的知识,DNS-应用层-解析域名、TCP和HTTP。
托管云全链路-离线及线上环境Nebula Graph集群部署文档
6月15工作内容:使用nebula-operator部署nebula集群。
尝试解决办法1:将3个组件包括metad和graphd设置为3结果还是无法解决。
尝试解决办法2:看到这篇博客nebula-operator安装部署的集群使用java-clie ...
EventLoop、任务调度、Future和Promise
EventLoop事情循环器
单线程执行器
处理 Channel 上源源不断的 io 事件:Channel 上通过selector去监听accept(建立连接)、read(读)、write(可写)等事件,通过EventLoop去处理这些事件
我们上面使用的就是EventLoopGroup,包含很多个EventLoop,我们每创建一个连接,就需要绑定到一个EventLoop上,之后EventLoop就会开始监听这个连接(只要连接不关闭,一直都是这个EventLoop负责此Channel),而一个EventLoop可以同时监听很多个Channel,实际上就是我们之前学习的Selector罢了。
当然,EventLoop并不只是用于网络操作的,我们前面所说的EventLoop其实都是NioEventLoop,它是专用于网络通信的,除了网络通信之外,我们也可以使用普通的EventLoop来处理一些其他的事件。
这样会卡住:
1234567891011121314151617181920212223public static void main(String[] args) { ...