字节跳动(头条)【校招,后端实习生一面已过】面试经验

小白第一次面试,非计算机专业,有点紧张,而且很多问题答得不是很好

1. 学习方式

问:听到你的自我介绍,应该关于计算机的知识都是自学的,那你能介绍一下你的学习方式吗?

答:(正常交流,无关紧要)

1. 自我介绍

正常流程,介绍自己的学习经历,在校情况等。

2. 缓存机制+数据结构

问:看到你的简历上面写了用过varnish做缓存构建CDN,能介绍一下他的实现原理吗?

答:varnish提供了两种缓存机制,既可以将缓存放入文件中,也可以在内存中进行缓存。如果接收到了客户端请求,会根据请求去检查本地是否有对应缓存,如果有就返回给客户端,如果没有,就转发请求给后端服务,并对响应的静态资源进行缓存。

问:如果让你去实现varnish,你会考虑哪种数据结构?

答:因为是缓存,所以首先要保证高效的读写(这里我联想到了数据库55555),所以我可能会选择使用平衡二叉树这样的数据结构来保存数据。

追问:这样的数据结构在我看来不是最优解,有没有想过使用哈希表来进行实现?

答:(这里犯了迷糊,反问面试官哈希表是不是指数组+链表)

追问:你认为的哈希表是什么?

答:哈希表的核心是哈希函数,通过哈希函数将键值对中的键进行映射,通过一些数据结构来进行保存。

追问:你聊到了哈希函数,那我们知道有哈希函数就不可避免地会产生哈希冲突,那你有了解过怎么解决哈希冲突吗?

答:我所了解到地解决哈希冲突方式有两种,第一种就是使用数组+链表这样地存储方式,如果产生了哈希冲突,我们还是将键值对放进数组的对应位置,只不过这个位置上存储的是一个链表,我们可以利用头插法或者尾插法将键值对插入到链表中去进行保存;第二种是当检测到哈希冲突的时候,我们从当前位置开始往后检测,直到检测到一个空位进行保存。(忘了两种方法名字叫什么了)

追问:那你认为,使用哈希表和使用二叉树来实现,哪种效率更高?

答:使用哈希表时,采用数组+链表这种数据结构的话,查找和插入效率都是O(1),在极端情况下,查找效率可能会退化为O(n),使用二叉树的话, 其插入和查找效率都是在对数级,因此,在哈希冲突发生概率不大的情况下使用哈希表效率要高一些(全程在想HashMap555)

3. 数据库

问:了解过Mysql索引吗?

答:了解一些

追问:那你知道Mysql索引为什么不采用二叉树而采用B+树吗?

答: B+树因为有多分支,避免了二叉树在数据量过大的情况下高度过高的情况,能够降低查找时间,另外,使用B+树能够很快的确定范围查找时的数据范围。

追:(面试官太好了,还帮我补充一下知识)其实还有一种情况,和操作系统有关,就是在操作系统中有页读取机制,使用二叉树当节点过多时,会造成过多的页切换,从而降低效率。

4. HTTP协议

问:你能介绍一下HTTP协议吗?

答:HTTP协议是一个无状态的协议,本次请求和之前的请求无关。它是一种报文交换格式的约定,规定了响应码、请求头、请求方法等内容,比如说常用的GET、POST、DELETE、PUT请求等,为了解决HTTP请求的无状态,我们通常会使用服务端的会话管理机制或者COOKIE来追踪客户端状态,对于响应码,有多种响应码表示不同的响应状态,比如正常响应是200,302重定向、404资源不存在、500服务端错误等。HTTPS是HTTP的安全版本,具体安全机制的实现方案不太了解(非计算机专业),但是了解其安全加密方案是基于公私钥的加密方案。

5. JSON交换格式

问:看到你在微信小程序中使用了JSON交换格式,有了解过JSON的数据格式吗?

答:具体的数据类型没有太了解,因为使用JAVA后端,直接将其作为字符串进行处理,在我看来,JSON数据格式和JS的对象比较类似,有键值对、数组以及内嵌的对象等等。

追问:你在使用JSON的过程中有遇到什么坑吗?

答:有,是在微信小程序使用ajax与后端交互过程中,当发送post请求传输参数给后端时,后端SpringBoot会出现不支持的媒体类型这样的错误,根据官文,需要在请求头中加入‘Content-Type’字段,后来的解决方案是请求头加入'Content-Type'字段,SpringBoot对每个请求的参数封装成Bean接收请求参数。

6. 编程语言基础

问:你介绍到在大学学习过C/C++,那么C/C++在运行的时候需要先进行编译才能运行,那么你了解过编译过程中发生了一些什么吗?

答:(内心OS:我用的是Java呀,C/C++也没怎么用啊,编译原理我也不是计算机的我也没学过啊)因为我平常项目开发用Java比较多一点,而且学校学到的C/C++仅限于程序设计,所以不太了解(GG)

追问:那你总应该了解栈吧,能聊聊程序运行过程中有哪些地方用到了栈吗?

答:方法调用

追问:那你能详细说一下方法栈存储了哪些信息吗?

答:返回地址,参数列表等

追:(面试官真的太好了,看我为难又来给我补充了)其实就你刚刚说的方法栈,它里面存储有很多数据,我们称为上下文,当然返回地址,参数列表这些也在其中。

7. 进程和线程

问:操作系统里面有两个概念是进程和线程,你能说说他们的区别吗?

答:线程是操作系统调度的最小单元,线程需要依附于进程存在,当一个进程中没有线程在运行,进程也就死亡,线程由进程派生,多个线程共享进程的资源,多个进程共享内存地址空间,线程也可以有自己的局部变量。(感觉很多都没答上来,估计是凉了)

问:那你刚刚说的方法栈是线程共享的还是私有的?

答:私有的。

8. 编程题

  1. SQL
    有一张product表,product(id, title, category, sub_category),索引index(sub_category, category),写一条SQL来查询product表中category = 10并且sub_category = 10010的数据
    答:
    select * from `product` where `sub_category` = 10010 and `cate_gory` = 10;
    问:为什么要把sub_category放在这里
    答:因为要符合索引的最左匹配原则
    问:那把sub_category的查询条件改成大于10010,这条语句还能走索引吗?
    答:(实在没想明白)能
    问:那把category的查询条件改成大于10呢?
    答:(依旧没想明白)不能
  2. 算法
    (面试官说要给我找一道稍微简单一点的,但是我还是错了好多次,而且感觉这道题之前见过,有更简便的做法,但是我忘了,所以这道题大概率凉了)
    给你一个32位无符号整型数字,请你将其按照二进制位反转之后输出:
    #include <iostream>
    using namespace std;
    int main() {
     unsigned int n;
     cin >> n;
     unsigned int ans = 0;
     for (int i = 0; i < 32; i++) {
         int mod = n % 2;
         ans = ans * 2 + mod;
         n = n >> 1;
     }
     cout << ans << endl;
     return 0;
    }
    这道题最重要的注意点是要用unsigned,我就是忘了使用unsigned,结果调试了半天没调试出来为什么错了,浪费了好多时间。仔细审题啊
    还有就是总感觉这道题有使用位运算的更简便的算法,之后再去查一查。
#java实习##春招##实习##面经##Java##C/C++#
全部评论
找到了力扣上的原题:190
点赞 回复 分享
发布于 2022-05-13 18:58

相关推荐

03-12 11:44
已编辑
广东药科大学 Java
面试公司:字节跳动面试时间:3.10面试内容:一、自我介绍(5分钟)二、实习+项目拷打&nbsp;(50分钟+)(一开始紧张没录到音,只能凭记忆了)1.多级缓存方案怎么做的(cdn+本地+redis+mysql)2.怎么保证数据一致性(没用双写一致,将redis作为用户下单的主库存,lua脚本+分布式锁修改redis后用消息队列修改mysql保证最终一致性)3.怎么优化的RAG数据预处理流程(实现DocumentTransformer接口添加元数据)4.项目中的三级缓存是怎么做的(本质Spring三级缓存机制)5.说下日常怎么使用Cursor、cc等ai编程工具进行开发(讲了有无rules约束的效果)6.具体使用了什么检索策略(使用Spring&nbsp;Ai&nbsp;alibaba添加Advisor进行重排序)7.了解重排序的底层吗(说底层使用模型将用户输入和召回的top-k进行分数重排,目的是提高准确率)8.Top-K的K是怎么确定的(对比了默认的10然后逐级递减的方案,确认k=5的时候准确率更高)......(中间可能还有些问题忘了)三、算法(30分钟+)手撕带ttl的lru算法(忘记怎么对比两个时间的差值了,不过面试官说没关系)四、网络相关问题(10分钟+)(听到这个我就知道我要似了,网络最不熟了,不过好在问的不多)1.http和https有什么区别(说了下数字签名和加密算法)2.场景题:将第三方热点放到服务器的本地缓存中,用户连第三方热点后第三方能不能窃读和更改数据(这个真不会回答,随便乱答的)(面试官说让我去了解下数字签名相关的)反问:组内氛围怎么样面试总结:&nbsp;相比于一面来说难了不少,不过总体来讲还算能对付,面试官看起来非常老练,也会引导我去解决问题,面试体验非常nice,本来一开始很紧张然后聊着聊着就不紧张了,不过场景题没答出来太亏了啊,求面试官别挂我面试结果:面试2天后还没出结果(不会真要挂我吧)
yyyyyyyzz:一面当天出结果,二面现在还没出结果
查看13道真题和解析
点赞 评论 收藏
分享
03-12 15:47
吉林大学 Java
1.&nbsp;自我介绍2.&nbsp;介绍一下你的项目具体是干什么的?为什么要制作这样一个项目?这个项目的运作流程大概是怎么样的?3.你的项目中用到了大模型工作流,那你这个工作流具体是怎么样的,他如何工作?4.&nbsp;我看你这个工作流里面还有向量数据库,为什么要用他?5.&nbsp;你有考虑过限流吗?你说了大模型的计算资源很宝贵,那你如何确保这个服务在高并发下正常工作?6.&nbsp;你说你有防范无效请求的攻击,那么假如说现在是高并发的合法请求,有大量用户需要调用大模型服务,你的系统怎么处理?(没有想出什么好的解决方案,没回答好😭)7.&nbsp;我看你这里登录功能有说到密码加密,你所用的加密算法是什么?(鼠鼠回答是加盐算法)那你清楚这个算法的工作原理吗(鼠鼠答不上来,忘记复习了😭)?8.&nbsp;那我们聊聊jwt,你说你用了jwt,那jwt是干什么的?你如何使用的?9.&nbsp;jwt具体有哪几个组成部分,你知道吗?除了你提到的payload(鼠鼠也没记全,答上来一部分😵)。10.&nbsp;我看你提到了消息队列中,你知道rabbitmq和kafka,那他们有什么异同呢?11.&nbsp;微服务架构和单机架构有什么区别?我们如何从中做技术选型?算法题(LeetCode上hard原题),鼠鼠极限手撕出来了,差点超时结束😥反问环节总的来说面试官人很好,作为鼠鼠第一次面试大厂体验不错,面试官还特地让我放轻松些☺️
小牛油等一个offe...:补充: 你项目中的上下文压缩,他具体如何工作?触发条件是怎样的? 对称加密和非对称加密你了解吗? http和HTTPS的差别是什么?
查看11道真题和解析
点赞 评论 收藏
分享
评论
7
24
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务