大家好,我是王有志。好久不见,不过这次没有休假,而是搞了个“大”工程,花了点时间自学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面试都问啥?的更多相关文章

  1. Java面试必问之Hashmap底层实现原理(JDK1.7)

    1. 前言 Hashmap可以说是Java面试必问的,一般的面试题会问: Hashmap有哪些特性? Hashmap底层实现原理(get\put\resize) Hashmap怎么解决hash冲突? ...

  2. Java面试常问的问题(转载)

    并发.JVM.分布式.TCP/IP协议 1)Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap,TreeMap这一类的.以下简单模拟一个数据结构的连环炮. ...

  3. 一线大厂Java面试必问的2大类Tomcat调优

    一.前言 最近整理了 Tomcat 调优这块,基本上面试必问,于是就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍 ...

  4. java面试必问问题总结

    1. 自我介绍 2. get跟load的区别 3. 什么是重载,什么是重写 4. HashTable跟HashMap的区别 5. Jsp九大隐式对象 6. Forword和redirect 的区别 7 ...

  5. 2019年Spring Boot面试都问了什么?快看看这22道面试题!

    Spring Boot 面试题 1.什么是 Spring Boot? 2.Spring Boot 有哪些优点? 3.什么是 JavaConfig? 4.如何重新加载 Spring Boot 上的更改, ...

  6. 国内Java面试总是问StringBuffer,StringBuilder区别是啥?档次为什么这么低?

    GitHub 6.6k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 6.6k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 6.6k Star 的 ...

  7. Java面试必问:ThreadLocal终极篇 淦!

    点赞再看,养成习惯,微信搜一搜[敖丙]关注这个互联网苟且偷生的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列 ...

  8. java面试必问:多线程的实现和同步机制,一文帮你搞定多线程编程

    前言 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进程的地址空间是互相隔离的:进程拥有各种资源和状态信息,包括打开的文件.子进程和信号处理. 线 ...

  9. 数据结构笔记02:Java面试必问算法题

    1. 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的 ...

  10. 2019年JVM面试都问了什么?快看看这22道面试题!(附答案解析)

    一. Java 类加载过程? Java 类加载需要经历一下 7 个过程: 1. 加载 加载是类加载的第一个过程,在这个阶段,将完成一下三件事情: • 通过一个类的全限定名获取该类的二进制流. • 将该 ...

随机推荐

  1. 洛谷P4147 玉蟾宫 (单调栈)

    要求我们去找一个最大矩形面积. 单调栈做法(和P1950 长方形那道题类似(一模一样)). 1 #include<bits/stdc++.h> 2 using namespace std; ...

  2. BZOJ3732 Network(Kruskal重构树)

    Kruskal重构树的模板题. 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N.图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: ...

  3. MatrixOne从入门到实践01——初识MatrixOne

    初识MatrixOne 简介 MatrixOrigin 矩阵起源 是一家数据智能领域的创新企业,其愿景是成为数字世界的核心技术提供者. 物理世界的数字化和智能化无处不在.我们致力于建设开放的技术开源社 ...

  4. Tableau Server 常用命令

    Tableau Server 常用命令 1> 停止tableau server服务 tabadmin stop 2> 恢复tableau server数据 tabadmin restore ...

  5. Kafka之安装

    Kafka之安装 一.下载kafka 此博客只讲述kafka0.8和kafka1.0两个版本 更改kafka下的/home/bigdata/kafka/config/server.properties ...

  6. mongodb基础整理篇————副本概念篇[外篇]

    前言 副本集整理. 开始逐步把mongodb博客补齐了. 正文 什么是副本集 副本集是一组服务器,其中一个是用于处理写入操作的主节点,还有多个用于保存主节点的数据副本的从节点. 如果主节点崩溃了,则从 ...

  7. How to get the return value of the setTimeout inner function in js All In One

    How to get the return value of the setTimeout inner function in js All In One 在 js 中如何获取 setTimeout ...

  8. Linux系统管理_软件管理

    RPM命令 #管理.rpm文件 #RPM包软件命名规则:name-version-releases.arch.rpm rpm -ivh pkgname #安装软件包 rpm -ivh --test p ...

  9. 在Centos7上安装JDK1.8和tomcat8.5的步骤和过程(亲测可用)

    文章目录 1.在阿里云(Linux)Centos7上安装JDK1.8步骤过程 2.阿里云(Linux)centos7上安装Tomcat8.5步骤过程记录: 卸载JDK Centos7一般都会带有自己的 ...

  10. 函数柯里化实现sum函数

    需求 实现sum函数,使其可以传入不定长参数,以及不定次数调用 //示例 console.log(sum(1,2)(3)()) //6 console.log(sum(2,3,4,5)(1,2)(3) ...