面试刷题12-6
写在前面 楼主是北邮真.渣硕,之前天真地认为实习期间活儿干完了就能转正,就没有准备提前批,也几乎完美错过了9月秋招正式批。倒在亚马逊的转正答辩后(感到痛心,舍不得组里和善的大佬们,技术好又有耐心又有趣),10月正式踏上秋招,目标是JAVA后台研发。至此告一段落,虽然没拿到什么牛逼的offer,但好歹互联网大厂基本都面了,写下来让自己以后复习,也算回馈牛客。
话不多说,面试问题几乎集中在JAVA基础、JVM、算法、数据库(MySQL、Redis)、计算机网络、操作系统等方面,会分类进行列举,限于篇幅项目相关的问题就不写出了。
持续更新中…… 高频问题 后面面经挺长的,嫌太长的可以只看这部分。基本上你在简历的技能书上写了以下关键词,那这些高频问题你会特别眼熟,有写错的地方欢迎指正~
设计模式
- 单例模式(懒汉、饿汉、双重校验锁、静态内部类)
- 工厂模式
- 集合类(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 区别
- 内存结构和各自存放的内容
- 方法区、堆、虚拟机栈、本地方法栈、程序计数器
- 新生代和老年代垃圾回收算法
- 新生代 -> 复制,老年代 -> 复制-整理(CMS用的复制-清除)
- CMS/G1的流程
- 初始标记 -> 并发标记 -> 重新标记 -> 并发清除
- CMS/G1的特点和区别
- CMS:尽可能减少停顿时间,采用复制 - 清除,会造成内存碎片化
- G1:可以预测停顿时间,采用复制 - 整理,减少内存碎片化, 将内存划分为region粒度
- 判断垃圾是否回收的方法
- 引用计数法、可达性分析法
- 哪些对象可以作为GC ROOT
- 什么是事务
- 事务的特性(ACID,原子性、一致性、隔离性、持久性),详细说明各个特性的含义
- 事务隔离级别(未提交读 -> 已提交读 -> 可重复读 -> 串行化)
- 脏读、不可重复读、幻读的区别
- 事务隔离级别怎么实现预防上述问题(eg: 可重复读怎么实现预防不可重复读)
- 常用索引(B树、Hash)
- 聚簇索引和非聚簇索引的区别
- B树和B+树的区别
- Redis 的五种数据结构(String、Hash、List、Set、Zset(SortSet))
- Redis 为什么快
- 纯内存、单线程、IO多路复用(一般会继续问IO多路复用相关问题)
-
- 客户端传给服务端时经过 TCP/IP 四层模型,中途依次加入HTTP报文、TCP报文、IP报文、MAC报文,然后逆序依次拆包
- OSI 七层模型 & TCP/IP 四层模型
- TCP 三次握手,四次挥手的流程(最好能画图,说明各阶段状态)
- 为什么需要三次握手
- 为什么需要四次挥手 / 断开连接时为什么比建立连接多一次
- TCP 和 UDP 的区别
- TIME_WAIT的作用 HTTPS
- HTTPS的优势(CA证书认证、加密传输)
- HTTPS建立连接流程
- 为什么传输过程中采用对称加密,协商时采用非对称加密(对称加密快)
- 进程和线程的区别
- 进程间通信方式(管道、消息队列、信号量、共享内存)
- 线程间通信方式(消息队列、全局变量)
- 查找某个进程(ps aux |grep threadId)
- 杀掉某个进程(kill,参数添加-9表示强制执行)
- 查看某个端口是否被占用(netstat -anp |grep threadId)
- 实时查看进程状态(top)
- 最大子序列和
- 反转链表
- 数组中查找两数之和为K的序列对
腾讯医疗 一面
MySQL
- 事务的特性
- 如何删除表中的所有数据,delete和truncate的区别
- char, varchar, text的区别
- 一张表里数据量大,慢查询怎么办
- 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查找某个进程
- 二分查找
- 最大子序列和
阿里健康 一面
JAVA
- HashMap原理,用红黑树解决什么问题
- B+树的原理和优势
- 硬盘中有10G数据,内存1G,如何排序(多路归并排序)
- 最大子序列和,除了动态规划还能怎么做
数据库
- delete和truncate区别
- 如果索引值为null,走不走索引
- 常见的单例写法
- 新生代和老年代的区别
- 大量大对象进入老年代会有什么问题(频繁触发full GC)
- 有很多个大对象,应该如何改进
- 如何设计一个查询附近商家的功能
开放式
- 爬虫爬千万个手机号码,如何统计每个手机号码的出现次数
未完待续……
前言
- 简历是给了在效率工程的学长帮忙投的
- 时间轴:
- 11月28日下午两点投简历
- 11月29日晚上八点打电话通知30日晚上八点参加笔试
- 11月2日下午三点的时候通知3日下午两点一面
- 然后11月3日下午直接一面+二面,中间间隔了10分钟左右
- 11月4日下午四点通知5日下午四点HR面
- 整个流程非常紧凑,非常快,没有一丝拖泥带水
- 有没有三面好像是看情况,看身边的同学有的还有技术三面,可能自己太菜,没有给我三面的兴趣
- 简单计算器,输入一个字符串的表达式,输出结果,符号包括加减乘除,左右括号,幂运算
- 全排列,输入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分钟)
- 讲一下https、重定向的状态码
- 说一下Linux的进程调度
- 讲一下零拷贝
- 寻找两个链表的相交节点
- ...
- 聊项目...
- 说一下Redis的持久化怎么实现,现在让你实现Redis的RDB,你要怎么做?
- Nginx的线程模型/你用Nginx做过什么配置?
- 多线程有序打印1和2,分别打印10次
- ...
- 讲一下实习经历
- 数据库表的优化
- 线上服务器的配置
- 说一下CMS和G1的区别
- 手写Map的实现
- ...
- 专业和自己方向(非科班)
- 实习和学校有什么不同
- ...
百度一面
- 讲一下熟悉的Linux命令
- 说一下线上排查
- 如何实现一个堆
- 寻找第K个数以及如何再次优化(快排+二分)
- 寻找链表的中间节点
- TCP的三次握手/四次挥手
- ...
- 说一下你知道的分布式
- 01背包问题
- ...
腾讯一面
- 如何排查数据库查询缓慢?
- get请求缓慢你要怎么排查
- 讲一下多线程
- ...
- 类的初始化过程
- 如何快速遍历一遍知乎页面(最小生成树)
- ...
- 说一下Zookeeper如何实现数据一致性
- 讲一下Zookeeper的选举机制
- 数据库的索引以及红黑树
- 索引的节点大小是多少,为什么是这个数值
- 说一下Linux的IO模型,还有零拷贝
- ...
由于京东一面基本只问了项目,同时自己拒了二面,这里就不写了。
最后想说的 此刻的心情很难受,一直以为头条就在我的手中了,却又这样离去。这次对我的打击很大,自己也没有什么心情继续面试了。各位加油吧,哥累了。
美团点评二面
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。
现阶段能想起来的就这么多,以后再补充,大家加油。
推荐阅读
- 2018国考外交部面试演讲不再难——只需把握好三点
- iOS面试题--基础
- java|java 常用知识点链接
- 年薪30万的Java架构师必会的springboot面试题
- linux笔记|linux 常用命令汇总(面向面试)
- 阿里Web前端面试题
- 金三银四,对自己的面试总结下(继续完善当中)
- 律所面试心得
- 面试|我经历的IT公司面试及离职感受(转)
- android-面试|我经历的IT公司面试及离职感受