01JAN1950是几月几号(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~~
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!