01.Java面试都问啥?
大家好,我是王有志。好久不见,不过这次没有休假,而是搞了个“大”工程,花了点时间自学Python,然后写了“玩具爬虫”,爬某准网的面经数据,为来年的“春暖花开”做准备。
今天作为开篇,还是和大家随便聊聊:
- 我为什么想换工作?
- 做了哪些准备工作?
- Java面试到底问啥?
最后,会和大家分享这个“玩具爬虫”,当然因为是半路出家,我写的Python很不Pythonic,大家简单的参考就好了。
我为什么想换工作?
今年是我在这家公司的第三个年头了,不过最近我打算出去看一看了。
这家公司不好吗?
965,很少加班;中等薪资水平,对得起工时了;小福利还算不错,该有的都有,还会不定时的发一些购物卡;工作也很稳定,如果不犯错的话,我应该可以在这退休。
听起来是“梦中情司”了,那我为什么还要换工作?
第一,保险这类业务导向的公司,谁是公司的“爸爸”?业务部门!因此,许多“奇思妙想”的需求会让你很心累,有时候你甚至需要解释“为什么APP的主题不能跟随手机壳改变”这种问题。
第二,传统行业的“低并发”看不到太多技术层面的挑战,虽然leader已经努力的拥抱“新技术”了,但始终是畏手畏脚,可以理解他的顾虑,所以想去看看外面的世界。
第三,个人规划的原因,我并不打算留在北京,或许是留不下来。我想回去,因此需要一段“叫得上名字”的互联网公司的工作经历为我背书,仅仅是保险行业内的名气并不会让我有太多议价权。
第四,还有比跳槽涨薪更快的方式吗?
做了哪些准备工作?
相信很多长期不挪窝的小伙伴,看到别人跳槽涨薪内心都蠢蠢欲动,可是想到要面试,又不知道要准备哪些内容,于是在“挣扎”中慢慢的浪费着时间。
其实我也是这样的,在自己的舒适圈内过得很安逸,想了很多次的跳槽,可总感觉自己没准备好。想想之前的三次面试都是“裸面”,每次结果都不是很理想,所以这一次,我要充分的准备,力求让我即便在“寒冬”也能得到不错的结果。
那么这次我都做了哪些准备?
首先是回顾了下数据结构与算法的知识,也就是《和王有志一起学习数据结构与算法》的内容,只不过最近为了学习Python,暂时中断了。
接着是自学了Python,系统的学习了语法,因为有Java的基础,这部分学起来其实很快,只不过要一边工作一边学习,大概花了一周左右。

然后找了一个简单的爬虫,抄抄改改的花了2天时间完成某准网的“玩具爬虫”,虽然有点坎坷,也算是满足了需求。
第四步就是数据分析了,花了一点时间过滤掉无效信息,然后花了一顿小吊梨汤,找了朋友帮忙写了关键词统计和分析的程序,因为用了他们的二方库,程序就不放上来了。
Java面试到底问啥?
这次总共爬取了30家公司的面经,原始数据约4000条,从中选取了近两年(2021年开始)的社招面经数据约400条数据,我就从这400条数据进行“小”数据分析。
数据统计
说明下统计方法,程序统计关键词出现的频率,然后针对程序无法识别的内容进行人工统计,因此有些关键词出现的次数会大于400的。
我将面经中出现的问题分为9大类:
- Java核心编程:Java基础,集合框架,并发编程,Java虚拟机等;
- 计算机基础:数据结构与算法,计算机网络,操作系统等;
- 软件工程:设计模式,系统设计等;
- 应用框架:Spring,Spring Boot,Mybatis,Netty等;
- 数据库:SQL,MySQL,Redis,MongoDB等
- 分布式与微服务:分布式理论,分布式事务,Spring Cloud(Alibaba)等;
- 消息中间件:消息中间件设计,Kafka,Rocket MQ等;
- 常规提问:根据简历提问,项目提问等;
- 其他:面经中出现次数较少,如:K8S,Docker等。
我们通过一张饼图来展示数据分析的结果:

很明显,Java依旧是面试中提问次数最多的,其次是计算机基础和数据库相关的内容,然后就是应用框架和项目相关的内容。
接下来我们看看面试“三幻神(Java,计算机基础,数据库)”具体涉及到哪方面。
Java都问啥?
我将Java的问题分为了4大类:
- Java基础:面向对象,API,IO,网络编程等;
- 集合框架:Map和Collection接口下的内容,但不包含JUC中的容器;
- 并发编程:线程,线程池,synchronized,volatile和JUC等;
- 虚拟机:垃圾回收,内存模型,类加载机制等。
具体的统计结果如下:

并发编程和虚拟机不出所料的荣登冠亚军宝座,这两部分的内容基本上可以考虑全量准备了,而且会问得非常深,请尽量做好准备再参加面试。
Java基础是设计理念,API应用等,大部分内容较为基础,随着工作年龄的增加,问到的概率逐渐降低,但是需要特别关注String类,反射,动态代理,IO/NIO和网络编程。
集合框架想必大家都很清楚了吧,HashMap和ArrayList会扣着源码问,建议有能力的同学阅读源码,尤其是注释会有详细的解释为什么这样设计,例如:HashMap中使用到的泊松分布。
计算机基础都问啥?
计算机基础的问题分为3大类:
- 数据结构与算法
- 计算机网络
- 操作系统
统计结果如下:

如果目标是互联网公司,复习的时候重点可以放在数据结构与算法上,常问的内容有链表,二叉树,排序,动态规划和贪心算法等,题目的难度在LettCode上属于中等。
由于HashMap中使用到红黑树,因此二叉树中会涉及到红黑树,大部分是讲原理即可,极少会要求实现。而过往较少涉及的多路搜索树,也是因为MySQL中使用B+树作为索引的结构,常会问到多种搜索树结构(不仅仅是多路搜索树)的对比。
至于计算机网络和操作系统的内容,可以关注我后续的文章。
数据库都问啥?
我将Redis的部分也放到了数据库的统计中:
- SQL基础:SQL的基础用法,MySQL中的函数;
- MySQL:索引,引擎,事务,隔离级别,优化等;
- Redis:Redis的数据类型,分布式锁,持久化,集群,解决方案等;
- 数据库设计:三范式,表设计;
- 其他:MongoDB,PostgreSQL等。
统计结果如下:

MySQL占据了半壁江山,重点依旧是索引,隔离级别和SQL优化,MySQL的引擎也会被提问到,索引的部分会和数据结构产生联动(数据结构真的有用!!!)。
Redis中涉及到的主要是,实现原理,数据类型,分布式锁,持久化,集群等,缓存雪崩/击穿/穿透等,从数据上看布隆过滤器很少被问到。
SQL基础的话基本都是给出案例写SQL,对SQL功底的要求较高。而数据库设计的部分,主要是分库分表设计,如果目前的项目还无需分库分表,也可以先储备这些知识。
一些结论
到目前为止,我给出了面试“三幻神”中一些细分内容的统计,至于应用框架,分布式与微服务,消息中间件等的具体统计结果,介于篇幅的原因,我会在今后的文章中放出。
先给出一些我得到对的结论:
- Java“三幻神”:并发编程,虚拟机,HashMap
- MySQL“三幻神”:索引,隔离级别,优化
- 应用框架“三幻神”:Spring,Spring Boot,MyBatis
- Redis和kafka是中间件中最常问到的内容
- 消息中间件的设计也是一个重点
- 互联网企业中,数据结构与算法属于必备技能
- 分布式理论/事务,是3年以上Java工程师的基础,涉及到解决方案,设计原理
- 涉及到云原生和DevOops的较少,如果能够熟练,算是亮点
- 要能够完全“掌控”简历上的内容,无论是精通还是熟练,都会深入讨论
- 项目要“出彩”,即便是“屎山”项目也要“美化”成一朵“花”
最后额外说一点:
技术人员要有好口才!
技术人员要有好口才!
技术人员要有好口才!
结语
今天和大家分享了我这个星期在做的一些工作,也算是为大家提供一个面试准备的思路,希望对大家有所帮助。
数据统计的原始结果会放到Git仓库下,初步整理后的结果可以关注王有志回复关键字统计结果,至于题目,因为是手工整理,暂时还没有完成,后续会按照分类结果逐步提供给大家。
本篇内容的代码仓库:Gitee代码仓库
好了,今天就到这里了,Bye~~
01.Java面试都问啥?的更多相关文章
- Java面试必问之Hashmap底层实现原理(JDK1.7)
1. 前言 Hashmap可以说是Java面试必问的,一般的面试题会问: Hashmap有哪些特性? Hashmap底层实现原理(get\put\resize) Hashmap怎么解决hash冲突? ...
- Java面试常问的问题(转载)
并发.JVM.分布式.TCP/IP协议 1)Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap,TreeMap这一类的.以下简单模拟一个数据结构的连环炮. ...
- 一线大厂Java面试必问的2大类Tomcat调优
一.前言 最近整理了 Tomcat 调优这块,基本上面试必问,于是就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍 ...
- java面试必问问题总结
1. 自我介绍 2. get跟load的区别 3. 什么是重载,什么是重写 4. HashTable跟HashMap的区别 5. Jsp九大隐式对象 6. Forword和redirect 的区别 7 ...
- 2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1.什么是 Spring Boot? 2.Spring Boot 有哪些优点? 3.什么是 JavaConfig? 4.如何重新加载 Spring Boot 上的更改, ...
- 国内Java面试总是问StringBuffer,StringBuilder区别是啥?档次为什么这么低?
GitHub 6.6k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 6.6k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 6.6k Star 的 ...
- Java面试必问:ThreadLocal终极篇 淦!
点赞再看,养成习惯,微信搜一搜[敖丙]关注这个互联网苟且偷生的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列 ...
- java面试必问:多线程的实现和同步机制,一文帮你搞定多线程编程
前言 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进程的地址空间是互相隔离的:进程拥有各种资源和状态信息,包括打开的文件.子进程和信号处理. 线 ...
- 数据结构笔记02:Java面试必问算法题
1. 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的 ...
- 2019年JVM面试都问了什么?快看看这22道面试题!(附答案解析)
一. Java 类加载过程? Java 类加载需要经历一下 7 个过程: 1. 加载 加载是类加载的第一个过程,在这个阶段,将完成一下三件事情: • 通过一个类的全限定名获取该类的二进制流. • 将该 ...
随机推荐
- .net程序员的android studio 初体验 (环境设置2022年10月)
很久以前用DevExtreme写的一个Hybird APP要添加蓝牙打印功能,但是用来打包APP的phonegap被adobe关闭了,所以,只能自己用cordova去打包安卓APP,不得已,研究了 ...
- mujoco d4rl 安装问题
最近mujoco免费了,属实爽歪歪,安装d4rl没有以前那么麻烦了(不知为何半年前我安装d4rl时走了那么多弯路) mujoco安装 在 https://mujoco.org/download 上面下 ...
- 这次彻底读透 Redis
1. Redis 管道 我们通常使用 Redis 的方式是,发送命令,命令排队,Redis 执行,然后返回结果,这个过程称为Round trip time(简称RTT, 往返时间).但是如果有多条命令 ...
- Ignite实战
1.概述 本篇博客将对Ignite的基础环境.集群快照.分布式计算.SQL查询与处理.机器学习等内容进行介绍. 2.内容 2.1 什么是Ignite? 在学习Ignite之前,我们先来了解一下什么是I ...
- Typora图床上传配置:PicGo+Gitee 不完全指南
每次写Markdown都要手动传图,再复制链接到Typora里,这样比较繁琐. 设置好图床,搭配PicGo,写作时直接剪贴图片到Typora,就能实现自动上传,这样就方便很多. Gitee配置: 许多 ...
- ES6 学习笔记(一)let、const与作用域
一.let命令 1.1用法 1.1.1 let类似于var,但所声明的变量只在let命令所在的代码块有效. 如: { let a = 10 var b = 20 } console.log(b) co ...
- 2021年WebStorm安装破解教程
一.WebStorm工具介绍 WebStorm是一款JavaScript 开发工具,为JavaScript和编译到JavaScript语言.Node.js.HTML和CSS提供了智能编码帮助.享受代码 ...
- zabbix-钉钉报警部署
zabbix-钉钉报警部署 1. 流程说明 申请钉钉机器人 获取Webhook配置安全设置 获取钉钉号 使用脚本(shell/python)调用钉钉接口: python 输入收件人 信息 配置发件人 ...
- 国产图形化的msf——Viper初体验
目录 免责声明: Viper简介 安装 使用 免责声明: 本文章仅供学习和研究使用,严禁使用该文章内容对互联网其他应用进行非法操作,若将其用于非法目的,所造成的后果由您自行承担,产生的一切风险与本文作 ...
- kubeEdge的MetaManager模块简介
MetaManager 是edged和edgehub之间的消息处理器,它还负责将元数据存储到轻量级数据库SQLite或从中检索元数据(metadata). 根据以下不同的operation接收不同类型 ...