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