乐趣区

Java到底要做到什么程度才能适应市场的需求(本人的面试经历)

前言:从过年前就萌生出要跳槽的想法,到过年来公司从月初提出离职到~~ 号正式离职,上班的时间也出去面试过几家公司,后来总觉的在职找工作总是得请假,便决心离职后找工作。到 3 月 10 号找到了一家互联网公司成功应聘上,中间也经历了很多公司,有外包的、创业的、互联网的等等各种类型,也收到了很多 offer, 也有面试不顺序的 … 今天来记录一下自己面试中的问题,围绕着 java 到底应该具备什么样的水平才能适应现在市场的要求的主题来谈一谈。

本篇文章目录:
一:面试中的问题二: 面试中要注意的问题三:关于最后的选择四:两年 java 到底应该具备什么样的水平
一:面试中的问题
java 集合框架:
1:介绍一下 java 的集合框架 2:HashMap 遇见哈希冲突会如何怎么办?HashMap 是线程安全的吗?HashMap 在高并发下会有什么问题?然后引入 ConcurrentHashMap 的原理?3:Hahtable 和 concurrentHashMap 的区别?4:数组和 ArrayList 的区别?Arraylist 是如何扩容的?5:线程池中的阻塞队列一般会选择哪种队列?为什么?6:RetreenLock 的原理?AQS 的原理?7:HashMap 的容量为什么推荐是 2 的幂次方?
框架类:
1:mybatis 的二级缓存有什么问题?2:mybaits 中的 mapper 的 #{}和 ${}有什么区别?哪种可以防止 sql 注入?2:我们知道 mybatis 的 mapper 和接口之间是没有对象的,那么它是如何映射的?4:说说 springmvc 的注解有哪些?他们的原理是什么?5:springmvc 的控制器是单例的吗? 是线程安全的吗?6:struts1 和 struts2 的区别?是线程安全的吗?7:spring 如何解析它的 xml 文件?8:spring 的核心是什么?Aop 的原理是什么?
redis 相关:
1:redis 数据类型有哪些?2:zset 数据类型是如何排序的?3:redis 如何做项目的中间缓存层?4:redis 的 Hash 的时间复杂度是多少?
数据库:
1:数据库索引分为哪几种?组合索引有什么要注意的问题?2:什么是悲观锁 什么是乐观锁?如何实现悲观锁?3: 数据库关键字的执行顺序是什么?4:如何进行 sql 优化?5:有没有进行过分库分表操作?分库之后如何保持事务一致?
分布式和微服务:
1:微服务要克服那些问题?微服务系统是怎样通信的?2:分布式环境下如何解决 session 不一致的问题?3:分布式下如何保证 id 一致?4:你在 dubbo 的使用过程中遇到什么问题?5: zookeeper 的负载均衡算法有哪些?
jdk 源码相关
1:synchronized 的原理?它该怎么用?如何一个方法是 synchronized 的,其他的非 synchronzied 线程能进入吗?2:cvs 中的 ABA 问题如何解决?3:volatile 的原理是什么?volatile 一定是线程安全的吗?4:ThreadLocal 是什么?它的原理是什么?5:CountDowanLatch 有没有用过?适合在什么样的场景下用?
设计模式相关:
1:实现两种单例模式 2:讲一下观察者模式 3:spring 中都用到哪些设计模式?4:动态代理模式是如何实现的?5:你在项目中用到哪些设计模式了?讲解一下业务场景
算法相关:
1: 快速排序的时间复杂度?手写快速排序(注意递归式和非递归式的实现方式)2: 手写二分查找 3: 手写堆排序 4: 一个 int 数组如何进行奇数和偶数分离?5:用算法实现 String 转 double
jvm 相关:
1: jvm 的垃圾回收算法有哪些?分别解释一下?2: 新生代为什么要设置两个 survior 区?3:如何通过一个.class 文件获取它的 jdk 版本?4:jvm 的内存模型?哪些是线程私有的?哪些是公共的?
关于自己的项目(问的时间最长)
1:简述一下自己的项目?你在其中主要是做什么的?2:你在项目中都遇到了哪些难题?最后都是怎么解决的?3:项目有多大规模?周期多久(这个很多都问到的)4:讲一下某一模块的具体实现方式?然后从中挑刺 5:如何解决某一时刻的高并发请求?6:如何解决订单支付回调的超时问题?轮询应该怎么写?
其他:
1:秒杀场景如何削峰?2:http 和 udp 的区别是什么?3:ajax 的跨域问题 4:nio 与 io 的区别?什么情况下适合用 nio5: 说说常见的 linux 命令,linux 查看内存的命令是什么?7:git 遇见代码冲突了怎么办?8:说几个常见的 maven 命令,maven 如何排除一个 jar 包的冲突?
二: 面试中要注意的问题
2.1:一定要有自己的实际项目经验按照我这么多面试经验?其实有的公司会侧重于问自己做的项目经验,有的公司侧重于问问题,一般互联网公司会对技术要求比较高,既要求项目经验又要要求技术水平
2.2:可以适当渲染,但是不要夸大其词面试的过程中最忌讳的就是夸夸其谈,高屋建瓴很厉害,但是一到实际细节都不知所云了,在技术总监面前,其实你吹牛或者是真的会他是一目了然的。不懂装懂,有的面试官又给你台阶下,不然你就卡带了,这很容易造成面试的不好印象
2.3:要会自我介绍面试的时候一般的话都会让你做一个自我介绍,这个要分对象,是技术官还是 Hr,如果是技术官侧重于综述一下自己的项目的实际技术栈和技术路线,如果是 Hr 的话不要用过多的技术语言,而要说一些自己的实际工作经历或者自己上家公司的运营情况
2.4:关于简历简历切记不可太啰嗦,但是不可太简单,作为技术的简历一般起码得在 3 页,不然 HR 会觉得你的求职态度不怎么好,不管如何求职结果如何,一个良好的简历会给人留下好的第一印象
(有简历模板)
三:关于最后的选择
说实话也接受到很多 HR 的 offer 邀请,但是我一般会选择说考虑一下一天以后再给回复,切不可直接把话说死,不然后面就尴尬了。实际提供的 offer 的有一家外包公司,三家创业公司,两家互联网公司,最终选择了一家互联网公司,虽然实际上班地点有点远(下了地铁还得座公交,后来还是选择骑单车了),但是互联网公司会给你快的成长速度,并且互联网技术栈都比较新.. 相比于传统企业会有更多的技术挑战。而外包公司的话,可能环境不怎么好,我记得自己当初还是个小白的时候,去了外包,那里的优点就是会有不断的活,新人进去的话收获还是挺多的,但是作为已经有两年经验的我,外包很显然不适合我的后期职业发展。缺点:技术更新迭代的太慢,没有归属感,最后的选择我个人的意见是选择技术优先,毕竟以后软件路还长,技术才是王道
四:两年 java 到底应该具备什么样的水平
两年 java 的面试过程中遇到了很多挑战,也遇到了一些不谈技术的公司,从上面的面试题可以看出,目前对于 java 的要求越来越高,水涨船高,毕竟这个行业的人数越来越多,而保持自己的竞争力的唯一方法就是找对方向,不断学习,注意这里我提到的第一点是方向,然后才是学习。给自己制定一个职业规划,按照这个路线往前走,我其实还在想分布式微服务这块以后再深入学习,可是按照市场要求,现在已经刻不容缓了,一些技术架构比如:springcloud、duboo 都得保持学习,这样才能有竞争力!作为一名两年的 javaSir,
你必须具备以下技能
1:阅读源码的能力,多用 Intelj idea 这个开发工具,而不是 eclipse。它是直接支持反编译 class 文件的,多读 jdk 源码,吸收优秀的源码并加以复用 2:做到能够手写常见的排序算法,比如快速排序和堆排序、冒泡排序、选择排序、二分查找这些都是必须的 3:对 java 的框架有很深入的认识,现在基本流行的 ssm 框架很多人都会,可是知道一些原理的人就不多了,得不断研究这些框架本身,它们都是经过无数次锤炼 出来的优秀框架 4:多用 redismongodb,传统的关系型数据库已经无法市场需求了,这些东西也是面试中的一部分,虽不是重点,但也是加分的选项 5:对于微服务和分布式,这个是有一定难度的,我在面试人人车的时候,一面很顺利,二面被技术总监给 pass 了,问题就是分布式不是特别熟悉!要想进入好的互联网公司,分布式和微服务是很必须的 6:jvm 的底层,这里要推荐的书就是周志明的《深入 jvm 虚拟机》这本书了,我总在闲暇时间读它,所以 jvm 的问题还是信手拈来的
最后送上福利: 腾讯课堂的的 Java 工程化、高性能及分布式、高性能、高架构、性能调优、Spring、MyBatis、Netty 源码分析视频、java 高并发处理视频 (在腾讯买得花 1800 块左右) 如果有谁想要,可以私信我,免费分享哦,我花了些钱买的

退出移动版