写点什么

凭借这份“Java 面试通关手册”,我四面成功拿下字节跳动 offer!

发布于: 2021 年 02 月 18 日

前言


今年的面试比往年要难得多,各个互联网企业对于 Java 岗位的要求越来越多,也越来越高,主要是初级岗位已经趋近饱和,但高级岗位又相对来说缺乏,这类的人才偏少,因此作为 Java 开发人员,我们应该思考的是怎么去往高级人才发展,而不是转学其他语言,要懂得去成为金字塔顶端的人,而不是逃避一直做基层的人。


本文主要记录了我面试字节跳动的一个经历以及我在面试前个人的一个准备,当然能够拿到字节的 offer,也得益于我拿到一本“Alibaba 通关面试手册”,这本手册 349 页我整整读了 28 天,收获颇多。


这篇文章主体分为两个部分吧,前半部分主要来描述这份 Alibaba 面试通关手册里的内容,后半部分则记录了我这次整个面试的一个完整经历,包括面试题和面试心得。


这份 Alibaba 面试通关手册,共分为上下两个篇章,上篇主要是“面试经验技巧篇”,下篇则是“面试技术攻克篇”,下文我会一一对这两个部分进行阐述。


一、(上篇)面试经验技巧篇


1.面试官箴言


本章节主要是收录了现在一线互联网大厂的面试官对于面试者的一些建议和箴言,包括阿里、字节跳动、腾讯、美团等公司均有话要说,这部分内容稍偏概念性一点,但确实对于面试者来说,看完之后受益是颇多的。


建议要点如下:


  • 有道无术,术可求;有术无道,止于术

  • 求精不求全

  • 脚踏实地,培养多种技能

  • 保持空怀心态

  • 职场是能者的舞台

  • 学会“纸上谈兵”



2.面试心得交流


该篇则主要是收录了一线互联网公司在职工程师的一个面试心得分享,“前车之鉴,后事之师”在这一篇章里体现得淋漓尽致。本篇章对当前程序员面试、笔试相关准备工作、时间计划、书籍阅读、面试技巧、offer 选择等多个方面的内容进行了独到的分析,对于即将面试或正准备面试的朋友来说有者非常好的指引作用。



3.企业面试攻略


这部分内容,则是对现在互联网企业、网络设备供应商(电信运营商、银行等)、创业公司等 IT 企业的面试进行了一对一的强力分析,包括了它们之间的流程不同、面试内容不同、侧重点以及应需注意事项等等,均有详细的解析,能够非常直观了解到企业要求。



二、(下篇)面试技术攻克篇


1.Java 基础知识


  • Java 语言有哪些优点?

  • Java 与 C/C+++有什么异同?

  • 为什么需要 public static void main(String[]args)这个方法?

  • 如何实现在 main()方法执行前输出“Hello World”?

  • Java 程序初始化的顺序是怎样的?

  • Java 中的作用域有哪些?

  • 一个 Java 文件中是否可以定义多个类?

  • 什么是构造函数?

  • 为什么 Java 中有些接口没有任何方法?

  • Java 中的 clone 方法有什么作用?

  • 什么是反射机制?

  • package 有什么作用?

  • 如何实现类似于 C 语言中函数指针的功能?

  • 面向对象技术?

  • 面向对象与面向过程有什么区别?

  • 面向对象有哪些特征?

  • 面向对象的开发方式有什么优点?

  • 什么是继承?

  • 组合和继承有什么区别?

  • 多态的实现机制是什么?

  • 重载和覆盖有什么区别?

  • 抽象类(abstract class)与接( interface)有什么异同?

  • 内部类有哪些?

  • 如何获取父类的类名?

  • this 与 super 有什么区别?

  • 变量命名有哪些规则?

  • break. continue 以及 return 有什么区别?

  • final、 finally 和 finalize 有什么区别?

  • assert 有什么作用?

  • static 关键字有哪些作用?

  • 使用 switch 时有哪些注意事项?

  • volatile 有什么作用?

  • instanceof 有什么作用?

  • strictfp 有什么作用?

  • 基本类型与运算?

  • Java 提供了哪些基本数据类型?

  • 什么是不可变类?

  • 值传递与引用传递有哪些区别?

  • ......

  • Collection 和 Collections 有什么区别?

  • 什么是线程?它与进程有什么区别?为什么要使用多线程?

  • 同步和异步有什么区别?

  • 如何实现 Java 多线程?

  • run()方法与 start()方法有什么区别?

  • 多线程同步的实现方法有哪些?

  • sleep()方法与 wait()方法有什么区别?

  • 终止线程的方法有哪些?

  • synchronized 与 Lock 有什么异同?

  • 什么是守护线程?

  • join ()方法的作用是什么?

  • 如何通过 JDBC 访问数据库?

  • JDBC 处理事务采用什么方法?

  • Class.forName 的作用是什么?

  • Statement、PreparedStatement 和 CallableStatement 有什么区别?

  • getString ()方法与 getObject ()方法有什么区别?

  • 使用 JDBC 时需要注意哪些问题?

  • 什么是 JDO?

  • JDBC 与 Hibernate 有什么区别?

  • ......



2.Java Web


  • Servlet 与 JSP?

  • 页面请求的工作流程是怎样的?

  • HTTP 中 GET 与 POST 方法有什么区别?

  • 什么是 Servlet?

  • doPost()方法与 doGet()方法怎么选择?

  • 什么是 Servlet 的生命周期?

  • JSP 有哪些优点?

  • JSP 与 Servlet 有何异同?

  • 如何使用 JSP 与 Servlet 实现 MVC 模型?

  • Servlet 中 forward 和 redirect 有什么区别?

  • JSP 的内置对象有哪些?

  • request 对象主要有哪些方法?JSP 有哪些动作?

  • JSP 中 include 指令和 include 动作有什么区别?

  • 会话跟踪技术有哪些?

  • Web 开发中如何指定字符串的编码?

  • 什么是 Ajax?

  • cookie 和 session 有什么区别?

  • 什么是 J2EE?

  • J2EE 中常用的术语有哪些?

  • EJB 有哪些不同的类别?

  • EJB 与 JavaBean 有什么异同?

  • EJB 有哪些生命周期??

  • EJB 的角色有哪几种?

  • EJB 的开发流程是怎样的?

  • .......

  • 数据库连接池的工作机制是怎样的?

  • J2EE 开发有哪些调优的方法?

  • 什么是 Struts 框架?

  • Struts 框架响应客户请求的工作流程是什么?

  • Struts 框架的数据验证可分为几种类型?

  • Form Bean 的表单验证流程是什么?

  • 在 Struts 配置文件中, <action>元素包含哪些属性和子元素?

  • ActionForm Bean 的作用有哪些?

  • ActionForm 的执行步骤有哪些?

  • forward 与 global-forward 有什么区别?

  • Struts 如何实现国际化?

  • Struts 1 与 Struts 2 有哪些区别?

  • 什么是 loC?

  • 什么是 AOP?

  • 什么是 Spring 框架?

  • 什么是 Hibernate?

  • 什么是 Hibernate 的二级缓存?

  • Hibernate 中 session 的 update ()和 saveOrUpdate ( ). load()和 get ()有什么区别?

  • Hibernate 有哪些主键生成策略?

  • 如何实现分页机制?

  • 什么是 SSH?



3.数据库原理


  • SQL 语言的功能有哪些?

  • 内连接与外连接有什么区别?

  • 什么是事务?

  • 什么是存储过程?

  • 它与函数有什么区别与联系?

  • 各种范式有什么区别?

  • 什么是触发器?

  • 什么是游标?

  • 如果数据库日志满了,会出现什么情况?

  • union 和 union all 有什么区别?

  • 什么是视图?

  • ......



4.设计模式


  • 什么是单例模式?

  • 什么是工厂模式?

  • 什么是适配器模式?

  • 什么是观察者模式?

  • ......



5.数据结构与算法


  • 如何实现单链表的增删操作?

  • 如何从链表中删除重复数据?

  • 如何找出单链表中的倒数第 k 个元素?

  • 如何实现链表的反转?

  • 如何从尾到头输出单链表?

  • 如何寻找单链表的中间结点?

  • 如何检测一个链表是否有环?

  • 如何在不知道头指针的情况下删除指定结点?

  • 如何判断两个链表是否相交?

  • 栈与队列有哪些区别?

  • 如何实现栈?

  • 如何用 O(1)的时间复杂度求栈中最小元素?

  • 如何实现队列?

  • 如何用两个栈模拟队列操作?

  • 如何进行选择排序?

  • 如何进行插入排序?如何进行冒泡排序?

  • 如何进行归并排序?

  • 如何进行快速排序?

  • 如何进行希尔排序?

  • 如何进行堆排序?

  • 各种排序算法有什么优劣?

  • ......

  • 如何求指定数字在数组中第一次出现的位置?

  • 如何对数组的两个子有序段进行合并?

  • 如何计算两个有序整型数组的交集?

  • 如何判断—个数组中数值是否连续相邻?

  • 如何求解数组中反序对的个数?

  • 如何求解最小三元组距离 8.6 字符串?

  • 如何实现字符串的反转?

  • 如何判断两个字符串是否由相同的字符组成?

  • 如何删除字符串中重复的字符?

  • 如何统计一行字符中有多少个单词?

  • 如何按要求打印数组的排列情况?

  • 如何输出字符串的所有组合?

  • 二叉树的基本概念

  • 如何实现二叉排序树?

  • 如何层序遍历二叉树?

  • 已知先序遍历和中序遍历,如何求后序遍历?

  • 如何求二叉树中结点的最大距离?

  • 如何消除嵌套的括号?

  • 如何不使用比较运算就可以求出两个数的最大值与最小值?

  • ......



6.海量数据处理


  • 问题分析

  • 基本方法

  • 经典实例分析

  • top K 问题

  • 重复问题

  • 排序问题



三、字节跳动面试题还原(技术题)


这次字节跳动的整个过程我就不去还原了,只将面试题分享出来吧,面试题以技术面为主,Hr 面基本上大同小异我就省略掉了,可以参考一下今年字节跳动会问一些什么样的问题,热乎乎的新鲜面试题,希望能够给你带来一些帮助吧。


  • Session 存在哪里?怎么把 session_id 返回个客户端?

  • Redis 的数据结构,它有哪些复杂数据结构?

  • Http 与 Https 的区别,详细描述加密非对称加密的过程?

  • 线程与进程的区别?

  • IO 多路复用

  • redis 服务端是多进程还是单进程,多线程还是单线程?

  • top loadaverage 怎么计算的?

  • hashmap 解决冲突的方式?

  • 数据库的事务,什么是幻读?事务是怎么实现的?

  • linux 的命令,如何查看服务器负载?

  • 如何查看端口占用情况?

  • 如何查看远程服务器某一个端口被占用?

  • 可以 ping 通,当时客户端连接不上服务端,什么原因?

  • 操作系统包括哪些部分?

  • 如何进行内存分配?

  • 进程切换发生哪些事情?

  • fork 函数

  • 项目:分布式如何扩容缩容?

  • 讲讲 B 树和 B+树区别

  • 三次握手,四次挥手

  • 为什么要 time-wait?

  • java 多线程同步

  • 项目:如何避免超卖?

  • redis 主从同步

  • 操作系统内存为何要分页?

  • B+树叶子满了,要添加新枝怎么办?

  • 5G 数据,1G 内存如何实现排序?

  • 操作系统加锁的原理

  • volatile 关键字

  • 单例

  • Spring AOP

  • 注解的原理

  • OOM 的情况

  • Jvm 内存模型

  • 算法部分:(1)一个长度为 n 的数组,元素在 1 到 n 之间,找到一个重复的元素,空间复杂度越低越好;(2) 最长不重复子串;(3)找比当前数大的下一个数,如 1243,结果是 1324;(4)给定一个升序数组,一个 target 值,找比 target 小的最大数字(类似于升序插入排序的一个步骤);(5)链表循环;(6)O 时间取出栈最小元素;(7)升序数组找绝对值最小的那个值



字节跳动面试题答案


四、面试心得


字节跳动的面试相对其他大厂而言,整体的氛围还是比较轻松的,可能面试官都比较年轻的缘故吧,实际上它给外界的印象也一贯如此,年轻活力。所以,在前期做好了相关的准备,面试官基本上是不会太为难你。


面试字节跳动,有几个需要提前准备的点:


①复习基础和原理,看一些技术笔记。面试的时候,这部分是一定会问的,但是大部分的就是忽略了基础部分,影响了面试结果,所以在面试字节跳动之前,我在这部分也算是下足了功夫,把基础与原理巩固了,也拜读了一些技术大牛的博客及手写的笔记内容。



②算法。现在很多互联网公司都喜欢在面试时问算法相关的,字节跳动喜欢问算法相信大家也都有耳闻,从我上述的面试题也能够看出,基本上算法问的比重还是较多的。至于很多小伙伴问算法怎么准备,其实很容易的,最快捷有效的办法就是刷题,我这边也准备了三套“算法宝典”奉上:



三套“算法宝典”



算法刷题 LeetCode 中文版(为例)


总结


人与人存在很大的不同,我们都拥有各自的目标,在一线城市漂泊的我偶尔也会羡慕在老家踏踏实实开开心心养老的人,但是我深刻知道自己想要的是一年比一年有进步。


最后,我想说的是,无论你现在什么年龄,位于什么城市,拥有什么背景或学历,跟你比较的人永远都是你自己,所以明年的你看看与今年的你是否有差距,不想做咸鱼的人,只能用尽全力去跳跃。祝愿,明年的你会更好!


“Alibaba 面试通关手册+学习笔记+技术笔记+算法宝典+面试题答案”:“一键三连+评论,然后添加我的 VX(tkzl6666)即可免费领取。




用户头像

微信:tkzl6666 添加获取你想要的Java资料 2019.01.29 加入

添加VX(tkzl6666 ) 获取大厂面试真题,面试复习资料,Java进阶资料,Java实战项目。

评论 (4 条评论)

发布
用户头像
好东西,每天,每周,每月进步一点。一年就是脱胎换骨的变化。
2021 年 03 月 25 日 12:11
回复
用户头像
整体看东西不错,可以参考参考学习学习
2021 年 02 月 19 日 16:27
回复
用户头像
希望能和大神一起学习
2021 年 02 月 18 日 20:30
回复
用户头像
凭借这份“Java 面试通关手册”,我四面成功拿下字节跳动 offer!
2021 年 02 月 18 日 16:26
回复
没有更多了
凭借这份“Java面试通关手册”,我四面成功拿下字节跳动offer!