美文网首页Java架构技术进阶互联网科技老男孩的成长之路
入职字节跳动一年,附上百度、字节跳动等后台面经,谈谈我的收获

入职字节跳动一年,附上百度、字节跳动等后台面经,谈谈我的收获

作者: Java入门到入坟 | 来源:发表于2020-09-10 22:41 被阅读0次

    转眼已经工作入职一年的时间了,还是有非常多收获的,感谢这一年的时光,感谢所有遇到的人,让我变成更好的自己。

    正所谓满园春色关不住,一枝红杏出墙来,带着满满的收获我开始了大规模的面试,拿到了大部分 Offer。

    在发出来面试经历之前,简单谈谈我这一年中作为职场新人的收获和反思。

    职场收获

    适应公司技术

    进入职场后,会先去适应公司的技术栈和工具,这些其实并不难,在了解和学习的过程中也能增长见识。

    适应人际关系

    除此之外,要适应同事之间的人际关系,并且要积极主动接受每一份儿交代过来的工作,因为每个人都会在内心给他人贴标签,如果某个人做事不靠谱,大家都会避而远之,所以最开始的时候要给大家留下好印象,便于日后协作。

    多做日志记录

    我在刚刚入职时,交给了我一个很小的功能迭代,听师兄介绍完背景之后,就开始进行开发,并且完成自测,代码 cr 和完成的发布流程,同时在做的过程中,记录了一篇日志,以免下次做的时候忘记,做事情严谨细心也会给别人留下好印象。

    勇于承担责任

    在承担责任方面其实我有很多做的不够的地方,有过主导需求的机会,但是没能把握住,还有一部分交给我的工作,放任自流,并没有完全积极去推进。这里需要提醒大家的就是无论什么样的工作交给你了就要多多用心,积极主动,勇于承担。

    做好向上管理

    另外一个,初入职场和学生时代有个很不同的地方,我觉得也是最需要牢记的。

    在学校做事情要对自己负责,在职场做事情要对直属 leader 负责,也就是所谓的向上管理。

    在学校的时候,无论是学习上课、参加学生会工作、参加课外兴趣班,本质都是为了自我提升,在读大学期间有所收获,毕业的时候回首没有虚度光阴。

    在职场里面,需要每个人在自己的工作岗位上对集体有产出,为公司创造价值,在这样的情况下,你的直属 leader 决定了你的工作内容和产出价值,而个人的产出价值又会直接汇报给直属 leader,由 leader 合并大家的工作产生更大的价值,所以对直属 leader 负责,向上管理非常重要。

    技术推动业务

    作为技术人员的产出,通常还是要看如何利用技术去提升价值的。不能够完全去考业务来推动技术开发,要有技术推动业务的思考。举个例子:

    • 业务推技术:比如说产品经理说要增加一个页面,然后开发人员就去开发这个页面,这就是业务在推动技术。
    • 技术推业务:因为技术改造,使得开发页面的效率提升了 10 倍,然后开发人员和产品经理说,你的梦想实现了,花 1 个需求的时间就可以开发 10 个需求了,这就是技术在推动业务。

    作为开发工程师,就是要发现技术中的痛点,解决掉之后提升自我价值。

    面经

    百度

    第一次面试

    1. maven 打包的时候需要配置什么才能将包打进去
    2. spring boot 都有哪些注解
    3. 描述下如何反转链表
    4. 如何用 java 的写一个 web 应用,操作数据库,要注意什么
    5. 如果多个应用写同一份儿文件,如何才能够不出错误?
    6. spring 的 aop 是怎么实现的,用最通俗的话讲明白

    第二次面试

    1. cpp 了解多少,讲讲指针和引用的区别
    2. 智能指针的实现原理
    3. 多态的理解
    4. 多态底层是如何实现的
    5. epoll 这些有印象么
    6. IO 模型都有哪些
    7. 写一个代码比较版本号,比如 1.1.0 和 1.0.1
    8. 内核态和用户态区别

    拼多多

    第一次面试

    1. 1 个有序的数组,里面包含了 N 个数字,分割成 M 段(M<=N),然后进行乱序排列,如何快速恢复其顺序
    // 45 123 79
    // 45 67 123 89
    void resort(int[] arr, int N, int M) {
    }
    

    主要思路是这样的,先遍历一遍,然后得到最基本的分割情况,根据分割大小,与 M 进行判断和比较,如果比 M 小,再进行判断是否存在大块需要分割,再进行两两比较,分割完成,标记好分割点,最后进行重组

    第二次面试

    1. rpc 调用流程?
    2. rpc 调用中,A 调用 B,A 如何知道 B 是不是服务不可用了?
    3. rpc 调用如何判断资源占用情况?
    4. 算法题,一棵二叉树,找到所有到叶子节点和为 target 的路径
    5. countDownLatch 的实现原理?
    6. 线程有多少种状态?time_wait 状态是什么意思?

    第三次面试

    1. 如何设计 rpc,序列化怎么设计?
    2. 数据库 mybatis 语句 insert 的时候会返回 id,那么这个 id 是如何返回的,如何能够确认这条数据是你插入的,从数据库事务角度来看?
    3. 一个数组,[1,2,3,5,7,9,8,3,2],有一个值 k=8,如何判断数组中是否存在该值,时间复杂度不超过 O(n)
    4. 垃圾回收为什么需要标记的步骤,垃圾回收其实有四步,stop the world 原因是什么?

    字节跳动

    第一次面试

    1. redis 的基本数据结构
    2. m 个有序数组,每个数组长度为 n,将 m 个数组生成 1 个有序数组,如何做?

    使用堆排序,m 个排一次,然后补充数据,最后得到结果

    第二次面试

    1. 数据库不使用 b+树还可以使用什么数据结构?
    2. 跳表如何判断这个数据插在哪里?
    3. 跳表和 b+树比哪个效率更高?
    4. 什么情况下不会使用索引?
    5. http 2.0 有什么优点
    6. 外部调用为什么不使用 rpc 而使用 http 协议?http 协议有什么不可替代的么?
    7. 如果流量忽然很大,不使用限流的方式应该怎么办,也不扩容?削峰
    8. 消息队列消息顺序不一致应该怎么处理?
    9. 4 个数组,目标值 target,每个数组各找一个数,使得 4 个数和为 target,数组没有顺序,找到所有不重复的组合,要求时间复杂度 O(n^2)

    shopee

    1. 对分布式事务有什么了解?
    2. redis 如何实现分布式锁?
    3. 如何保持分布式一致性?
    4. 消息队列重复消费怎么办?
    5. 算法题
    寻找第K大
    限定语言:Python. C++. C#. Java
    有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
    给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
    测试样例:
    [1,3,5,2,2],5,3
    返回:2
    
    1. https 的执行过程是怎么样的
    2. 如何判断两个链表是否有交点,时间复杂度和空间复杂度
    3. 数据库的事务隔离级别有什么?
    4. 数据库如何实现可重复读这个隔离级别的?
    5. 如何写代码判断死锁的存在?设计一个数据结构出来
    6. redis 是如何做主从同步的?
    7. redis 持久化的方式都有什么,名称都是什么?
    8. 如何解决循环依赖的?
    9. TCP 如何连接和断开的?四次挥手的流程?
    10. 进程间通信方式都有什么?有什么区别?
    11. 什么是数据库事务?事务在哪些地方有应用?
    12. 如何设计一个哈希结构,都要注意什么?

    在字节跳动这一年的收获(资源整理)

    • 面试专题:Java + J2EE + Spring + Hibernate + Linux + SQL + Scrum + Continuous integration

    良好的开始是成功的一半,此言不虚,面试当然也如此。但是面试往往因为受到其备考时机,求职者心态的影响,有一个提前且有效的开始,其实真的相当不容易

    • Redis操作笔记:数据操作 + 专题功能 + 开发设计规范 + 上线部署规划 + 常见运维操作 + 数据迁移 + 问题处理 + 测试方法 + Redis安全问题 + 高可用和集群简述 + 高可用和集群架构与实践
    • SpringBoot总结:使用Spring Boot + Spring Boot特性 + Spring Boot执行器: Production-ready特性 + Spring Boot CLI + 构建工具插件 + How-to指南

    SpringBoot的使用

    1. 构建系统
    2. 组织你的代码
    3. 配置类
    4. 自动配置
    5. Spring Beans和依赖注入
    6. 使用@SpringBootApplication注解
    7. 运行应用程序
    8. 开发者工具

    SpringBoot特性

    1. SpringApplication
    2. 外化配置
    3. Profiles
    4. 开发Web应用
    5. 安全
    6. 使用SQL数据库
    7. 使用NoSQL技术
    8. 缓存
    9. 消息
    10. 发送邮件
    11. 使用JTA处理分布式事务
    12. Hazelcast
    13. Spring集成
    14. Spring Session
    15. 基于JMX的监控和管理
    16. 测试
    17. WebSockets
    18. Web Services
    19. 创建自己的auto-configuration
    20. 接下来阅读什么
    • MySQL:性能调优+架构设计

    MySQL基础

    1. MySQL基本介绍
    2. MySQL架构组成
    3. MySQL存储引擎简介
    4. MySQL安全管理
    5. MySQL备份与恢复

    性能优化

    1. 影响MySQLServer性能的相关因素
    2. MySQL数据库锁定机制
    3. MySQL数据库Query的优化
    4. MySQL数据库Schema设计的性能优化
    5. MySQLServer性能优化
    6. 常用存储引擎优化

    架构设计

    1. MySQL可扩展设计的基本原则
    2. 可扩展性设计之MySQLReplication
    3. 可扩展性设计之数据切分
    4. 可扩展性设计之Cache与Search的利用
    5. MySQLCluster
    6. 高可用设计之思路及方案
    7. 高可用设计之MySQL监控
    • 实战项目系统设计:商城系统 + 博客/论坛系统 + 权限管理系统 + 微服务/分布式 + 消息中间件 + 搜索引擎 + 数据库 + 大数据 + 开放平台(微信)

    项目相关的各种理论,市面上已经有太多了。但有关项目的现实困境,仍需要真正具备实战的经验和能力,而不是拘泥于理论。

    实战经验需要时间的积累,但参考别人的实战案例,则是一个“见效很快”的办法。

    如果你对我上面的这些总结感兴趣的话,可以进入快速入手通道:(点这里)下载!诚意满满!!!

    Java面试精选题、架构实战文档传送门:https://docs.qq.com/doc/DRW1nUkdhZG5zeGVi

    整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

    你的支持,我的动力;祝各位前程似锦,offer不断!!!

    相关文章

      网友评论

        本文标题:入职字节跳动一年,附上百度、字节跳动等后台面经,谈谈我的收获

        本文链接:https://www.haomeiwen.com/subject/ipbqrktx.html