面试刷题12-6


写在前面 楼主是北邮真.渣硕,之前天真地认为实习期间活儿干完了就能转正,就没有准备提前批,也几乎完美错过了9月秋招正式批。倒在亚马逊的转正答辩后(感到痛心,舍不得组里和善的大佬们,技术好又有耐心又有趣),10月正式踏上秋招,目标是JAVA后台研发。至此告一段落,虽然没拿到什么牛逼的offer,但好歹互联网大厂基本都面了,写下来让自己以后复习,也算回馈牛客。
话不多说,面试问题几乎集中在JAVA基础、JVM、算法、数据库(MySQL、Redis)、计算机网络、操作系统等方面,会分类进行列举,限于篇幅项目相关的问题就不写出了。
持续更新中…… 高频问题 后面面经挺长的,嫌太长的可以只看这部分。基本上你在简历的技能书上写了以下关键词,那这些高频问题你会特别眼熟,有写错的地方欢迎指正~
设计模式

  • 单例模式(懒汉、饿汉、双重校验锁、静态内部类)
  • 工厂模式
JAVA基础
  • 集合类(Iterator、Collection(List、Set、Queue)、Map)
  • ArrayList和LinkedList的区别 HashMap
  • 底层结构(数组 + 链表)
  • Put 的过程
  • 为什么长度是2的倍数
    • 找索引时 key 的 hash 值与数组的长度值减 1 进行与运算,长度为 2 的倍数时能减少碰撞
  • JDK 1.7 和 1.8 中 HashMap 的区别
    • 1.8 增加红黑树、头插变为尾插、扩容后元素位置要么在原位置,要么在原位置 + 扩容前旧容量
  • 为什么线程不安全(扩容时形成闭环)
  • ConcurrentHashMap 怎么保证线程安全
  • ConcurrentHashMap 和 HashMap 区别
JVM
  • 内存结构和各自存放的内容
    • 方法区、堆、虚拟机栈、本地方法栈、程序计数器
  • 新生代和老年代垃圾回收算法
    • 新生代 -> 复制,老年代 -> 复制-整理(CMS用的复制-清除)
  • CMS/G1的流程
    • 初始标记 -> 并发标记 -> 重新标记 -> 并发清除
  • CMS/G1的特点和区别
    • CMS:尽可能减少停顿时间,采用复制 - 清除,会造成内存碎片化
    • G1:可以预测停顿时间,采用复制 - 整理,减少内存碎片化, 将内存划分为region粒度
  • 判断垃圾是否回收的方法
    • 引用计数法、可达性分析法
  • 哪些对象可以作为GC ROOT
MySQL 事务
  • 什么是事务
  • 事务的特性(ACID,原子性、一致性、隔离性、持久性),详细说明各个特性的含义
  • 事务隔离级别(未提交读 -> 已提交读 -> 可重复读 -> 串行化)
  • 脏读、不可重复读、幻读的区别
  • 事务隔离级别怎么实现预防上述问题(eg: 可重复读怎么实现预防不可重复读)
索引
  • 常用索引(B树、Hash)
  • 聚簇索引和非聚簇索引的区别
  • B树和B+树的区别
Redis
  • Redis 的五种数据结构(String、Hash、List、Set、Zset(SortSet))
  • Redis 为什么快
    • 纯内存、单线程、IO多路复用(一般会继续问IO多路复用相关问题)
计算机网络
    • 客户端传给服务端时经过 TCP/IP 四层模型,中途依次加入HTTP报文、TCP报文、IP报文、MAC报文,然后逆序依次拆包
  • OSI 七层模型 & TCP/IP 四层模型
TCP & UDP
  • TCP 三次握手,四次挥手的流程(最好能画图,说明各阶段状态)
  • 为什么需要三次握手
  • 为什么需要四次挥手 / 断开连接时为什么比建立连接多一次
  • TCP 和 UDP 的区别
  • TIME_WAIT的作用 HTTPS
  • HTTPS的优势(CA证书认证、加密传输)
  • HTTPS建立连接流程
  • 为什么传输过程中采用对称加密,协商时采用非对称加密(对称加密快)
操作系统 进程 & 线程
  • 进程和线程的区别
  • 进程间通信方式(管道、消息队列、信号量、共享内存)
  • 线程间通信方式(消息队列、全局变量)
Linux(几乎为Linux命令)
  • 查找某个进程(ps aux |grep threadId)
  • 杀掉某个进程(kill,参数添加-9表示强制执行)
  • 查看某个端口是否被占用(netstat -anp |grep threadId)
  • 实时查看进程状态(top)
算法
  • 最大子序列和
  • 反转链表
  • 数组中查找两数之和为K的序列对
坎坷面经 大家可以找找上面的高频问题在下面的面试中也出现过多少次(笑),针对每个公司会有一个小结(碎碎念)。
腾讯医疗 一面
MySQL
  • 事务的特性
  • 如何删除表中的所有数据,delete和truncate的区别
  • char, varchar, text的区别
  • 一张表里数据量大,慢查询怎么办
Redis
  • redis的数据结构
  • zset的底层结构
  • redis的常用命令
操作系统
  • 多线程和多进程的区别
  • 进程间通信方式
  • 线程间通信方式
计算机网络
  • TCP三次握手,四次挥手
  • TCP和UDP的区别
  • UDP如何重组数据
  • 应用层和网络层是干嘛的
  • ARP是网络层的吗
腾讯地图 一面
MySQL
  • MySQL引擎默认的隔离等级
  • MySQL有哪些锁
  • 执行select和update会如何加锁
计算机网络
  • TCP和UDP的区别
  • TCP和UDP的报文头内容
  • HTTP
    • HTTP属于TCP还是UDP
    • HTTP1.1比1.0多了什么
    • HTTP request Header中有哪些内容
    • 如何判断是否是长连接
  • DNS属于TCP还是UDP,原理
  • Ping使用的什么协议,原理
操作系统
  • 进程和线程区别
  • Linux进程有哪几种状态
  • Linux查找某个进程
算法
  • 二分查找
  • 最大子序列和
腾讯-小结 可以看出腾讯对于计算机网络方面的知识要求蛮多的,光熟悉TCP、UDP、HTTP相关这样基础的面试题是hold不住面试官的。
阿里健康 一面
JAVA
  • HashMap原理,用红黑树解决什么问题
MySQL
  • B+树的原理和优势
算法
  • 硬盘中有10G数据,内存1G,如何排序(多路归并排序)
  • 最大子序列和,除了动态规划还能怎么做
阿里高德 一面
数据库
  • delete和truncate区别
  • 如果索引值为null,走不走索引
【面试刷题12-6】JAVA
  • 常见的单例写法
JVM
  • 新生代和老年代的区别
  • 大量大对象进入老年代会有什么问题(频繁触发full GC)
  • 有很多个大对象,应该如何改进
开放式
  • 如何设计一个查询附近商家的功能
二面
开放式
  • 爬虫爬千万个手机号码,如何统计每个手机号码的出现次数
阿里-小结 阿里对于算法方面的考核会更加严格,普通的算法题期待你有多种解法,并且倾向于给你一个具体问题让你解决,然而我开放式问题都答得不咋样
未完待续……










前言
  • 简历是给了在效率工程的学长帮忙投的
  • 时间轴:
    • 11月28日下午两点投简历
    • 11月29日晚上八点打电话通知30日晚上八点参加笔试
    • 11月2日下午三点的时候通知3日下午两点一面
    • 然后11月3日下午直接一面+二面,中间间隔了10分钟左右
    • 11月4日下午四点通知5日下午四点HR面
  • 整个流程非常紧凑,非常快,没有一丝拖泥带水
  • 有没有三面好像是看情况,看身边的同学有的还有技术三面,可能自己太菜,没有给我三面的兴趣
笔试【90分钟】 编程题
  1. 简单计算器,输入一个字符串的表达式,输出结果,符号包括加减乘除,左右括号,幂运算
  2. 全排列,输入123,输出得是123 132 213 231 312 321

  • 编程题第一题直接把我人看傻了,感觉这一道做90分钟都算快的了,直接没做
  • 第二题用常见的dfs交换来做,结果会是
    [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,2,1],[3,1,2]],不符合要求,后面临时改成set来做,终于从百分之40通过率变成百分之80
  • 结果编程题就0 + 80
  • 后面本来以为是选择题,就留了20分钟来做,一点下去发现是8道简答题,赶紧在那狂敲,幸好题都很常见,只是因为没学swift,最后一道不懂

写在前面的话 作为21届的我,本来是打算通过找日常实习的方式早点结束春招,但是过程以及结果其实是失败的。我主要投递了京东、百度、腾讯以及字节。其中百度两轮技术面过,hr面由于无法及时到岗所以是被拒了,腾讯三轮技术面和hr面都过了,但是至今仍然无消息(一个星期过去了,还是待审批,应该也是凉了)。其中最期待的字节,三轮技术面和hr面都过了,最后offer审批失败,给的理由是业务方向不匹配(我真的想说,不匹配你当初捞我面试干嘛?)
现在的心情除了失落没有别的,由于考试月到了,自己也没有精力再去面试了,只能寄希望于春招。但是作为一个双非一本,没有大厂实习的我,春招的希望有多大我也不知道...
面经 由于没有及时记录,只能回忆起一部分了
字节(头条)
字节一面(38分钟)
  1. 讲一下https、重定向的状态码
  2. 说一下Linux的进程调度
  3. 讲一下零拷贝
  4. 寻找两个链表的相交节点
  5. ...
字节二面(50分钟)
  1. 聊项目...
  2. 说一下Redis的持久化怎么实现,现在让你实现Redis的RDB,你要怎么做?
  3. Nginx的线程模型/你用Nginx做过什么配置?
  4. 多线程有序打印1和2,分别打印10次
  5. ...
字节三面(38分钟)
  1. 讲一下实习经历
  2. 数据库表的优化
  3. 线上服务器的配置
  4. 说一下CMS和G1的区别
  5. 手写Map的实现
  6. ...
hr面(20分钟)
  1. 专业和自己方向(非科班)
  2. 实习和学校有什么不同
  3. ...
百度
百度一面
  1. 讲一下熟悉的Linux命令
  2. 说一下线上排查
  3. 如何实现一个堆
  4. 寻找第K个数以及如何再次优化(快排+二分)
  5. 寻找链表的中间节点
  6. TCP的三次握手/四次挥手
  7. ...
百度二面
  1. 说一下你知道的分布式
  2. 01背包问题
  3. ...
腾讯
腾讯一面
  1. 如何排查数据库查询缓慢?
  2. get请求缓慢你要怎么排查
  3. 讲一下多线程
  4. ...
腾讯二面
  1. 类的初始化过程
  2. 如何快速遍历一遍知乎页面(最小生成树)
  3. ...
腾讯三面
  1. 说一下Zookeeper如何实现数据一致性
  2. 讲一下Zookeeper的选举机制
  3. 数据库的索引以及红黑树
  4. 索引的节点大小是多少,为什么是这个数值
  5. 说一下Linux的IO模型,还有零拷贝
hr面
  1. ...
京东
由于京东一面基本只问了项目,同时自己拒了二面,这里就不写了。
最后想说的 此刻的心情很难受,一直以为头条就在我的手中了,却又这样离去。这次对我的打击很大,自己也没有什么心情继续面试了。各位加油吧,哥累了。


美团点评二面
1.首先还是问项目。问的比较细,比较全。
String,StringBuffer,StringBuilder的区别,为什么String是不可变的,StringBuffer和StringBuilder哪个是线程安全的,他们分别适用于什么场景。
java类加载过程是怎么样的,说一下volatile。
并发包了解吗?假如几个线程之间相互等待,可以用哪个并发类来实现,他的原理是什么?
数据库慢查询优化了解哪些?说了很多,面试官说假如这些都已经做好了还是很慢怎么办?最后不清楚问了下面试官,面试官主要想了解数据库分区的知识。
说一下spring容器的启动过程?
讲一下分布式锁,基于zookeeper实现和redis实现在性能上有什么差异?
kafka如何保证不丢消息又不会重复消费。了解大数据相关的一些技术吗?
最后写了道题,leetcode55. 跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个位置。

示例 1:

输入: [2,3,1,1,4]
输出: true
解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。

示例 2:

输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。

最快什么时候能过来?有什么问题想问的?然后说后面有hr再和你联系。

美团点评三面
面试官首先问了很多简历中的一些基本信息.画一下你这个项目与哪些工程交互,它在你们的产品中处于什么样一个位置
画一下你们这个项目的架构图,挑一个你觉得比较难的业务场景来讲一下,
你们这个项目中都遇到了哪些问题呢?说说你们最后都怎么解决的
写了一段代码,问这个代码最后输出什么?申请多大的内存空间,都在什么位置申请的
public class Test {

public static void main(String[] args) {

String str = "hello";
test(str);
System.out.println(str);
}

public static void test(String str){
str = str + "world";
System.out.println(str);
int[] a = new int[1024];
}
}
hashmap了解吗?他的set和get的时间复杂度是多少?为什么是O(1),说下详细过程,hashmap是线程安全的吗?
Jvm了解吗?jvm中哪些可以作为垃圾回收的gcroot?为什么呢?
什么时候能过来上班?然后就说等会hr面。

美团点评hr面
问了下基本情况,什么时候能过来,为什么想换工作?在上家的绩效和薪水情况,期望工资是多少。

自我介绍
项目经历 详细问项目
object 里面的方法
对象相等 hashcode equal s源码 详细问哈希是什么,怎么计算出来的。

dubbo原理 dubbo源码看过没 详细介绍怎么用。
hashmap源码看过没 详细介绍原理,具体方法怎么实现的,concurrent hashmaphashmap源码 看过吗?怎么实现分段锁。撤到红黑树,介绍红黑树怎么实现的,红黑树结构。后。红黑树与平衡二叉树.平衡原理。
array list linked list
msql用过吗 msql引擎是怎么实现的。为什么用b 。
spring源码看过没 aop ioc怎么实现的 aop怎么实现的。开始问反射。动态***怎么实现的,动态是指什么?
消息中间件mq. 异步 应用场景 秒杀系统。
多线程并发 nio
问 网络相关TCP 三次握手 之类
问操作系统熟悉吗?
异步请求 怎么实现的。**模式用过吗,底层怎么实现的。
线程池详细介绍线程池使用过程。线程池有哪些参数。


废话不多说,前几天参加去哪网面试,面经如下。
去哪网java实习生面总共分为四轮(我也不知道为什么这么多)。
一面(技术面)
1.自我介绍,并分析简历上的项目,并发情况,数据量大的情况你怎么办
2.分析悲观锁和乐观锁
3.数据库索引(b tree,b+tree)
4.出题建表,写sql,mybatis标签拆分判断。
5.hashmap详细说明,底层数据结构。
6.concurrenthashmap详细说明。
7.treeset(画红黑树)
8.线程常见状况。
9.maven生命周期。
10.linux常用命令。
二面(技术面)
1.各种排序以及应用场景(快排,归并,堆排,选择排)。
2.给你10亿个数,选择10个最小的,最优算法。
3.时间复杂度,空间复杂度。
4.线程池,callable,ExecutorService源码,参数含义。
5.Spring mvc的DispatcherServlet源码,工作机制。
6. Spring boot工作机制
7.简单说下redis。
8.服务器集群。
9.数据库事务,事务隔离级别
10.git常用命令,是否用过github。
三面(技术面)
1.最近在学什么。
2.如果学习一个新框架
3.设计一块缓存的数据结构,实现快速增加,删除,查找等操作,并判断时间空间复杂度。
4.项目并发如何解决。
四面(hr面)
简单的聊一下薪资待遇。
说了一件大学难忘的事。
发offer。

现阶段能想起来的就这么多,以后再补充,大家加油。

    推荐阅读