面试字节跳动国际电商部,凉了。。。

news2024/11/23 11:03:35

大家好,我是程序员小灰。

最近,小灰的一位读者在秋招提前批的时候,面试了字节的国际电商部门。这场面试考察得非常全面,涉及到了项目经验、数据结构、设计模式、数据库、Spring等等。

为了能帮助到更多程序员朋友,这位小伙伴把面试的过程详详细细做了记录和总结,希望大家能够从中获得启发。

dcf8e264625474e09f43ed0e0dde342b.jpeg

背景介绍

先大概说一下我的背景吧,本科双非,研究生211,暑期在快手后端实习。

在秋招提前批的时候我投递了字节的国际电商部门,当时投递不久后就约了面试,一面的时候面试官是个和蔼的大叔,问的问题属于项目+基础知识都进行了拷打,面完第二天就喜提感谢信。

面试过程

1.项目拷打

刚进入飞书会议后我就紧张的等待面试官的上线,叮一声面试官进入了会议,紧张的面试开始~

面试官:我今天就先不让你自我介绍了,就直接按照你简历上的东西开始问吧

我:嗯嗯好的面试官

面试官:我看你简历上边写着你之前在快手实习过,你可以讲一下你的实习内容吗?

我:我在快手实习的时候是主要做的结算的相关业务,结算主要做一些是订单结算的流程,分别是订单相关流水参数校验、计费、结算等工作(吧啦吧啦讲了我的实习内容)。

面试官:你刚才说得有点快,你重点说一下在实习中主要参与了哪个部分的内容呢,你可以说你在这里边遇到的难点。

我:我主要负责的部分是做了一个订单结算优化的需求,还有一个数据同步的需求,其中我感觉比较难的地方在于整体的业务流程比较复杂,里边涉及到各种各样的分支流,还有就是数据的准确性一定需要保障好。

面试官:那你们的业务里边如果某次营销的数据发生了延时错误,导致了此时已经对这个订单进行了计费,现在应该怎么办呢

我:额。。。这个我还真的没接触过(原谅我对于这里的业务真的不太懂,还没了解这么多的,所以这个是真的不知道怎么解决)

面试官:我看你实习项目还写了mysql数据迁移到ES,那你说说你们迁移到ES的大概流程。

我:我们项目里边迁移Mysql数据到ES很重要的原因是Mysql中的数据在大批量导出的时候会容易阻塞,导致数据库慢查询,然后我们的优化思路是在写数据到数据库的时候同时监听数据库binlogES中,在写入时按照原来数据库中的主键索引去构建ES中每个文档的索引。

面试官:那你这里为什么要采用监听数据表binlog的方式去感知数据变动存储到ES呢,是否可以采用在写入数据库的时候再同时写入ES双写的方式呢?

我:这个应该是可以的,使用监听binlog的方式可以使得代码解耦,双写应该也没啥问题吧(说到这里面试官感觉似乎并不是他想要的答案了)。

项目总结:在回答项目的时候确实是对于项目的一些细节问题把握不够,只是停留在把这个东西做出来了,没有去深入的去分析为什么要这样子做,不同的方式实现起来有什么区别,同时也需要清楚自己做这个项目会带来怎样的收益。

2.基础挖掘

面试官:那我问问你基础知识吧,看你简历上边技术栈写的也不少。你了解HashMap吗,你讲一下HashMap的原理吧,

我:HashMap就是哈希表,java里边HashMap的初始哈希槽的大小为16,如果在某一个位置发生了哈希冲突可以用链表的方式将冲突的元素串起来,在链表的长度超过8的时候会将链表转为红黑树,使用红黑树可以增加查询的效率。

面试官:那为什么在刚开始的时候就不能采用红黑树存储呢,还要先用链表存然后再转成红黑树呢?

我:因为直接采用红黑树的话每次加入元素需要进行平衡,而在超过8时再旋转变为红黑树可以达成平衡,因为大部分哈希槽的元素个数正态分布在8个左右,所以此时变为红黑树也满足了查找的效率。(这里我觉得我自己掌握的还行,嘿嘿)

面试官:数据库你了解多吗,Mysql里边的存储引擎都有哪些呢,这些存储引擎又有什么区别呢?

我:存储引擎我比较了解的是InnoDB和MyIsam,其中InnoDB支持聚簇索引,并且支持外键、支持事务,而MyISam是非聚簇索引,不支持外键,也不支持事务,所以我们一般都选用的是InnoDB引擎。

面试官:如果是读多写少的场景,你觉得用什么引擎比较好呢

我:如果是读多写少的场景可以使用MyAsim引擎,因为InnoDB是属于聚簇索引,聚簇索引会由于索引与数据存放在一起,在同等的规模下非聚簇索引可以加载的更多,更加适合读取。

面试官:你平常会用spring对吧,在spring里你用到哪些注解呢?

我:我常用的注解一般是autowired、controller、requestmapping、service、bean这些注解。

面试官:你刚说了autowired注解,那你有用过resource注解吗,你知道它们二者的原理吗?

我:它们二者的主要区别是一个是按照name加载,一个是按照type加载,然后具体原理有些久远我有点忘了,我还记得现在推荐用resource注解(之前找实习的时候看过,时间久远这些就有点忘了哭了呜呜呜)

基础总结:回答基础问题的问题要准确把握面试官想要问的点,尽量想好再说,不要给面试官一种你的知识不太稳固的感觉,平常可以多在网上看看在相关基础细节,分类去准备:java的基础知识看看集合类、异常处理、多线程并发、JVM等知识;数据库的话就是索引、隔离级别、MVCC、锁、redo logundo logbinlog等相关知识,这次面试官没有问我redis,建议redis也要做好知识储备,redis的数据结构、线程模型、分布式锁等也值得深入学习。

3.撕代码

面试官:那我们写点代码吧,你了解设计模式吧,我看你简历上边有写了解单例模式,那你就写一下单例模式吧

我:单例模式有好几种实现,那我就都写一下吧(心理diy:这可碰到我的枪口上了,毕竟前一天刚把单例模式复习了一遍,先从最基础的单例开始写吧,嘿嘿嘿)

我:一顿噼里啪啦输出,写好了面试官

public class Singleton {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}

面试官:嗯~看着单例模式没啥问题,如果现在是个多线程竞争环境呢,这种方式有什么风险呢?

我:如果是多线程环境的话需要加锁,可以加synchronizd关键字便可以加锁,这样就可以确保创建的对象还是单例的了。

public class Singleton {
private static Singleton instance;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}

面试官:那你这里的synchronized加锁的对象是什么呢?

我:synchronized这里加锁的是类方法,也就是加锁在了类对象上。

面试官:好,那你有了解过synchronized的锁升级的过程吗,可以讲一下吧。

我:synchronized锁升级应该是刚开始在没有线程竞争的时候会使用偏向锁,然后在多个线程交替进入临界区的时候会升级为轻量级锁,在有多个线程同时进入临界区的时候会将锁升级为重量级锁,具体的锁升级的原理我有点忘了(此时心理有点后悔自己为啥面试前不好好再复习复习了)。

面试官:好吧,如果我现在不想让你改动刚刚写的原有的代码,但是还需要你去把这个类对象新建出来,应该怎么办呢

我:这个嘛这个嘛,让我思考思考哈(脑子里一团懵,代理、反射之类的知识从脑海闪现)

我:我有一个想法,但是可能比较偷懒,我先给您说一下吧。

面试官:行,那你说吧。

我:其实既然这个构造器现在是私有的,那么就可以想办法把这个构造器变成可见的,可以通过反射,使用setAccessed(true)去把构造器变成可见的,然后创建对象。

面试官:你的这个方法也不是不行,就是有点偷懒,不是我想要的答案,你可以再想想。

我:此时脑子很懵逼😳,不知道还有啥办法,无数可能得方式在脑海中闪过,直到想到自定义类加载器。。。)

我:是不是可以用自定义类加载器呢(试图确定的样子)

面试官:那你讲一下具体怎么样操作吧

我:应该是去重写loadClass方法吧,具体操作我也没操作过。

面试官:这里你还是没有说清楚,给你换个题目吧。

面试官:最后再问你一个开放的情景题吧,现在空间中有n个坐标点,怎么样判断是否可以组成一个凸出的多边形。

我:我想一下吧,我可以用纸吧(我用纸和笔画了半天硬是没画出来)

我:我觉得应该判断一下它有没有凸出部分吧,具体咋样操作我也没有想法了

面试官有点不耐烦地说好了,我看时间也差不多了,今天的面试就先到这里吧。

手撕代码总结:开始时以为是算法题,结果面试官没按常理出牌,让我写单例模式,我以为就把几种单例模式写了后就结束了,没想到写了第一个后面试官就直接打断问别的了,总之很灵活,还是需要多多准备,各个方面都要了解,也不能光刷算法题,最好对于一些常见的设计模式的样例代码自己也会写,而且还有就是可以了解一下常见的情景题,例如赛马问题等,要不然这些题当场想的时候真的在紧张的氛围下不太能想的出来。

4.反问阶段

面试官:你还有什么什么想问的吗?

我:我想问一下您就是因为我之前一直在实习,所以也没有时间再去复习基础知识,很多东西学的不太深入,所以可能回答的不太好,您是觉得业务更重要呢还是技术细节更重要呢?

面试官:我觉得这两个东西是技术是基础,业务是建立在基础上的,感觉你下去后可以在两个方面都再提升提升,我们搞技术的应该始终都是技术放在第一位。

我:嗯嗯好的,感谢面试官您的时间(感觉应该凉凉了,所以就没有再问面试结果多久可以通知)

复盘总结

这是秋招的第一场大厂面试,总结就是由于之前一直在实习,所以很多知识由于时间的原因总结的并不充分,吃一堑,长一智,在项目深度、基础知识、还有手撕代码环节都应该再多多提升啊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1071786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何恢复微信过期文件?用这4招,轻松解决!

如今,无论是学习还是工作我们都离不开微信,微信的出现改变了人们的社交方式。也正是因为微信,人们之间的交流变得更加便捷与多样化。 微信有很多方便的功能,我们可以通过微信来传输许多重要的文件。但是有时候可能由于自己的疏忽…

【表情包分享】国庆假期结束了,该上班了,来分享一下你的表情包吧!

文章目录 每日一句正能量前言正文后记 每日一句正能量 国庆结束了,但快乐留下了;长假远走了,但开心到来了;八天过去了,但好运来临了;工作开始了,故祝福来到了。祝:收假快乐&#xff…

Python 接口测试之接口请求方法封装

引言 既然我们接口测试用例写好了,测试数据也拿到了,那么就是模拟调用接口的方法了,方法有get,post,put,delete,具体是选择哪种,我们需要根据不同接口规定好请求方法来调用。为了方便,将四种方法封装到一个…

访问Apache Tomcat的管理页面

配置访问Tomcat管理页面的用户名、密码、角色 Tomcat安装完成后&#xff0c;包含了一个管理应用&#xff0c;默认安装在 <Tomcat安装目录>/webapps/manager 例如&#xff1a; 要使用管理页面的功能&#xff0c;需要在conf/tomcat-users.xml文件中配置用户、密码及角色…

AutoDL百川大模型体验

文章目录 镜像克隆模型下载测试效果AutoDL自定义服务 感谢AutoDL和CodeWithGPU这两个平台&#xff0c;让我们能低成本&#xff0c;低门槛地部署体验这些大模型 镜像克隆 我是在CodeWithGPU上克隆的这个镜像 模型下载 codewithgpu有介绍 注意这三个文件都需要下载 把那个&quo…

Mac navicat连接mysql出现1045 - Access denied for user ‘root‘

Mac navicat连接mysql出现1045 - Access denied for user ‘root’ 前提&#xff1a;如果你的mac每次开navicat都连接不上&#xff0c;推荐试试我这个方法 1.打开设置–>找到左下角最下面的MySQL–>点击Stop MySQL Server 2.开启一个终端&#xff0c;依次输入以下命令&a…

九大高效的前端测试工具与框架

前言&#xff1a; 在每个Web应用程序中&#xff0c;作为用户直接可见的应用程序外观&#xff0c;“前端”包括&#xff1a;图形化的用户界面、相应的功能、及其整体站点的可用性。我们可以毫不夸张地说&#xff1a;如果前端无法正常工作&#xff0c;您将无法“拉新”网站的潜在…

uniapp中使用编辑器editor

1.需求&#xff1a; 开发小程序时&#xff0c;想要在手机上添加编辑内容&#xff0c;使用u–textarea时&#xff0c;换行操作不显示&#xff0c;为此使用了uniapp自带的组件editor来实现&#xff1a; 2.使用&#xff1a; <template><view class"">&l…

UniAD 论文学习

一、解决了什么问题&#xff1f; 当前的自动驾驶方案大致由感知&#xff08;检测、跟踪、建图&#xff09;、预测&#xff08;motion、occupancy&#xff09;和规划三个模块构成。 为了实现各种功能&#xff0c;智驾方案大致包括两种路线。一种是针对每个任务都部署一个模型&a…

Go 复合类型之切片类型介绍

Go 复合类型之切片类型 文章目录 Go 复合类型之切片类型一、引入二、切片(Slice)概述2.1 基本介绍2.2 特点2.3 切片与数组的区别 三、 切片声明与初始化3.1 方式一&#xff1a;使用切片字面量初始化3.2 方式二&#xff1a;使用make函数初始化3.3 方式三&#xff1a;基于数组的切…

Spring Boot:自定义注解--annotation

目录 自定义注解的定义和作用范围如何创建自定义注解创建注解接口 如何使用自定义注解进行数据验证创建注解处理器控制器中使用注解 如何为字段添加注解 自定义注解的定义和作用范围 自定义注解可以作用在类、方法、属性、参数、异常、字段或其他注解上。 如何创建自定义注解…

Flask与PyQt结合使用时候,阻塞,界面卡死

一.问题起因 做了个服务端, 使用到了python的PYQT6和Flask, PYQT做的是个简单的设置界面: 但是在点击开始运行, 写入flask run的代码的时候, PYQT界面卡死了 代码如下: # 生产环境模式server make_server(0.0.0.0, ser_port, app)server.serve_forever()app.run() 二.问题产…

力扣第404题 左叶子之和 c++ 递归 与 迭代解法

题目 404. 左叶子之和 简单 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&#xff0c;所以返回 24示例 2: 输…

【最新技术:grokking】机器学习模型是记忆还是泛化?

Do Machine Learning Models Memorize or Generalize? (pair.withgoogle.com) 机器学习模型是记忆还是泛化&#xff1f; 作者&#xff1a;Adam Pearce、 Asma Ghandeharioun、 Nada Hussein、 Nithum Thain、 Martin Wattenberg 和 Lucas Dixon 2023 年 <> 月 202…

NLP - 数据预处理 - 文本按句子进行切分

NLP - 数据预处理 - 文本按句子进行切分 文章目录 NLP - 数据预处理 - 文本按句子进行切分一、前言二、环境配置1、安装nltk库2、下载punkt分句器 三、运行程序四、额外补充 一、前言 在学习对数据训练的预处理的时候遇到了一个问题&#xff0c;就是如何将文本按句子切分&#…

最新AI智能创作系统源码AI绘画系统/支持GPT联网提问/支持Prompt应用

AI绘图专业设计 不得将程序用作任何违法违纪内容&#xff0c;不要让亲人两行泪 界面部分图解构&#xff1a; 前台show&#xff1a; 前端部署&#xff1a; 安装pm2管理器 点击设置 选择v16.19.1版本-切换版本 再新建一个网站 点击设置 添加反向代理-代理名称随便…

SpringMvc:为什么不能把controller类放到spring容器而必须放到SpringMvc容器?

因为在扫描Handler方法时&#xff0c;只会在SpringMvc容器中去查找bean 定义&#xff0c;不会查找父容器 因此&#xff0c;如果把controller放到Spring容器中直接报404。 而doGetBean方法是会查找子容器的&#xff0c;所以controller中可以注入父容器中的service和dao

设计模式 - 创建型模式考点篇:工厂模式、建造者模式

目录 一、创建型模式 一句话概括 1.1、工厂模式 1.1.1、简单工厂模式&#xff08;非 23 种经典设计模式&#xff09; 概述 案例 1.1.2、静态工厂&#xff08;扩展&#xff09; 1.1.3、工厂方法模式 概念 案例 1.2、建造者模式 1.2.1、概念 1.2.2、案例 1.2.3、建…

Deep learning of free boundary and Stefan problems论文阅读复现

Deep learning of free boundary and Stefan problems论文阅读复现 摘要1. 一维一相Stefan问题1.1 Direct Stefan problem1.2 Inverse Type I1.3 Inverse Type II 2. 一维二相Stefan问题2.1 Direct Stefan problem2.2 Inverse Type I2.3 Inverse Type II 3. 二维一相Stefan问题…

《视觉 SLAM 十四讲》第 7 讲 视觉里程计1 【如何根据图像 估计 相机运动】【特征点法】

github源码链接V2 文章目录 第 7 讲 视觉里程计17.1 特征点法7.1.1 特征点7.1.2 ORB 特征FAST 关键点 ⟹ \Longrightarrow ⟹ Oriented FASTBRIEF 描述子 7.1.3 特征匹配 7.2 实践 【Code】本讲 CMakeLists.txt 7.2.1 使用 OpenCV 进行 ORB 的特征匹配 【Code】7.2.2 手写 O…