毕业求职季-听说你想去大厂看学妹,带你看看字节跳动抖音电商后端面试长啥样?

Posted 文宇肃然

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了毕业求职季-听说你想去大厂看学妹,带你看看字节跳动抖音电商后端面试长啥样?相关的知识,希望对你有一定的参考价值。

前言

毕业求职季,你准备好了吗?希望各位小伙伴能够苦练技术,早日达成自己心仪的offer。

下面是博主收集的一些关于面试的比较帮的面试题目,有需要的小伙伴可自行订阅下载。

Spring系列面试题129道(附答案解析)

Redis,快看看这40道面试题

MyBatis的27道面试题

73道Java面试题合集-多线程与进程

28道ZooKeeper面试题

【一面】

注:面试官特别友善,面试体验特别好

  • 自我介绍

  • 实习时间挺长?

  • 数组和链表的区别?

二者都属于一种数据结构
从逻辑结构来看
1. 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。
2. 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项,非常繁琐)链表必须根据next指针找到下一个元素
从内存存储来看
1. (静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小
2. 链表从堆中分配空间, 自由度大但是申请管理比较麻烦

从上面的比较可以看出,如果需要快速访问数据,很少或不插入和删除元素,就应该用数组;相反, 如果需要经常插入和删除元素就需要用链表数据结构了。

  • ArrayList的扩容是怎么实现?

 

首先有三种构造方法,空参,指定大小,和指定集合

public ArrayList();

public ArrayList(Collection<? extends E> c)

public ArrayList(int initialCapacity)

后两种通过创造对象,或指定大小来初始化内部数据即可。

空参的时候,默认数组长度是0,也就是初始化数组长度为0

添加数据后,


public boolean add(E e) { //确保内部容量(通过判断,如果够则不进行操作;容量不够就扩容来确保内部容量)



     ensureCapacityInternal(size + 1); // ①Increments modCount!!



     elementData[size++] = e;//②



     return true;



 }

 

① ensureCapacityInternal方法名的英文大致是“确保内部容量”,size表示的是执行添加之前的元素个数,并非ArrayList的容量,容量应该是数组elementData的长度。ensureCapacityInternal该方法通过将现有的元素个数数组的容量比较。看如果需要扩容,则扩容。

②是将要添加的元素放置到相应的数组中。

根据传入的最小需要容量minCapacity来和数组的容量长度对比,若minCapactity大于或等于数组容量,则需要进行扩容。

综上所述,ArrayList的空参构造方法相当于在没指定initialCapacity时就是会使用延迟分配对象数组空间,当第一次插入元素时才分配10(默认)个对象空间。假如有20个数据需要添加,那么会分别在第一次的时候,将ArrayList的容量变为10 ;之后扩容会按照1.5倍增长。也就是当添加第11个数据的时候,Arraylist继续扩容变为10*1.5=15;当添加第16个数据时,继续扩容变为15 * 1.5 =22个。

 

如果通过无参构造的话,初始数组容量为0,当真正对数组进行添加时,才真正分配容量。每次按照1.5倍(位运算)的比率通过copeOf的方式扩容。


/*

 *增加容量,以确保它至少能容纳

 *由最小容量参数指定的元素数。

 * @param mincapacity所需的最小容量 */

private void grow(int minCapacity) { // overflow-conscious code

int oldCapacity = elementData.length; //>>位运算,右移动一位。 整体相当于newCapacity =oldCapacity + 0.5 * oldCapacity

 // jdk1.7采用位运算比以前的计算方式更快

int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0)

 newCapacity = minCapacity; //jdk1.7这里增加了对元素个数的最大个数判断,jdk1.7以前是没有最大值判断的,MAX_ARRAY_SIZE 为int最大值减去8(不清楚为什么用这个值做比较)

if (newCapacity - MAX_ARRAY_SIZE > 0)

 newCapacity = hugeCapacity(minCapacity); // 最重要的复制元素方法

elementData = Arrays.copyOf(elementData, newCapacity);

 }
  • 介绍一下hashmap,介绍一下put操作做了哪些步骤?(问了细节)

  • hashmap判定重复是==还是equals

  • hashmap1.7和1.8?

  • hashMap是线程安全吗?介绍一下concurrentHashMap?如何保证线程安全的同时保证吞吐量?

  • synchronized在jdk1.8做了哪些优化?

  • synchronized为什么要设计成可重入?

​​​​​​​重入锁实现可重入性原理或机制是:每一个锁关联一个线程持有者和计数器,当计数器为 0 时表示该锁没有被任何线程持有,那么任何线程都可能获得该锁而调用相应的方法;当某一线程请求成功后,JVM会记下锁的持有线程,并且将计数器置为 1;此时其它线程请求该锁,则必须等待;而该持有锁的线程如果再次请求这个锁,就可以再次拿到这个锁,同时计数器会递增;当线程退出同步代码块时,计数器会递减,如果计数器为 0,则释放该锁。

  • volatile的原理?解决什么问题?

  • 介绍一下JMM

​​​​​​​

原子性 是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,要不执行完成,要不就不执行。

可见性 是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

有序性 即程序执行的顺序按照代码的先后顺序执行。

  • Lock接口?了解过AQS嘛?

  • ReentrantLock可以做公平锁吗?怎么实现公平锁?

  • 算法题:用栈实现队列(Leetcode)其中栈的数据结构也自己实现

  • String s1 = “abc” String s2 = new String(“abc”)两个语句分别创建了几个对象?对象存储的位置?s1和s2相等吗?执行顺序先是第一条再是第二条创建几个对象?

  • interface和abstract的区别

​​​​​​​  1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
  2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
 3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。
 4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
 5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
 6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
 7.接口中的方法默认都是 public,abstract 类型的。

  • abstract抽象类里面一定要有抽象方法吗?

  • interface可以写方法的实现吗?

  • jvm的类加载机制?

  • 双亲委派机制?

  • TCP属于网络的哪一层?

  • TCP是面向连接的?为什么三次握手?​​​​​​​

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

  • TCP怎么保证可靠传输?

  • 滑动窗口的大小由哪一端来控制?server为什么要控制?client为什么要控制?

  • 拥塞控制知道吗?

  • mysql联合索引一道题目:建立了联合a,b,c。

     

    a,b,c会走索引吗?a,c会走索引吗?

     

     

  • 算法题:无重复字符的最长子串(leetcode)

  • 你有什么问题要问我吗?问了一下业务?问了一下什么语言?

 

【二面】

  • 自我介绍

  • 介绍一下springMVC和Springboot和Mybatis

  • springMVC的一些细节

  • springboot的作用

  • 介绍几种排序算法,时间复杂度,空间复杂度

  • 桶排序

  • 快速排序

  • 算法题:实现快速排序

  • 堆排序怎么实现

  • 数据结构中图的表示有哪些

  • 哪种情况下用矩阵、哪种情况下用邻接表

  • 求两个点之间的最短距离?介绍一下迪杰斯特拉算法?

  • 介绍一下事务?

  • 介绍一下三大范式?

  • 进程和线程的区别

  • 进程调度有哪几种方式?有哪几种评价方式?

  • 介绍一下虚拟内存?为什么使用虚拟内存?(两种优点)

  • 算法题:对无序的链表进行排序(不可以使用Java中的容器)

 

【三面】

  • 自我介绍

  • 学校里学的哪些课程比较受用?

  • 一个指令从软件到操作系统到硬件执行?整个过程做了哪些?

  • 启动一个应用,监听一个端口对外服务?启动服务以后,本身没有

    问题,但是客户端连不到服务?如何诊断?

  • 一个url从输入到页面解析的过程?

  • DNS用什么传输协议?

  • 用户如何找到DNS服务器?

  • DNS服务器是怎么知道IP地址的?如何知道去哪里找DNS服务器?

  • JDK和JRE的区别?

  • 类加载的机制?

  • 一道问题,有关于Java的值传递

  • 手撕sql

    employee(id, name, salary)

    office(id, city)

    写一个sql,输出每个城市收入最高的员工的名字?后面改成每个城市

    收入最高的收入?

  • 算法题:下一个排列(Leetcode)

  • 数学题:参加一个游戏节目,你是参赛者,主持人会在你的前面放三

    个盒子,其中一个盒子藏奖品,你选中一个盒子之后,主持人会开启

    另外两个中没奖品的一个盒子,剩下一个盒子。请问现在有机会让你

    换成另外一个盒子,你换盒子和不换盒子的中奖概率是怎么样的?

  • 你有什么问题要问我吗? 

以上是关于毕业求职季-听说你想去大厂看学妹,带你看看字节跳动抖音电商后端面试长啥样?的主要内容,如果未能解决你的问题,请参考以下文章

毕业求职季-听说你想去大厂看学妹,带你看看字节广告运营岗面试长啥样?

毕业求职季-听说你想去大厂看学妹,带你看看阿里后端实习面经长啥样?

毕业求职季-听说你想去大厂看学妹,带你看看腾讯微信产品岗面经(已offer)

毕业求职季-听说你想去大厂看学姐,带你看看网易java面经

毕业求职季-听说你想去大厂看学姐,带你看看腾讯CSIG产品策划实习面经

毕业求职季-听说你想去大厂看学妹,教你京东软件产品经理面试如何一把过