春暖花开,宅在家里快两个月的在家办公模式基本告一段落。企业复工,大家的工作生活终于可以回归正轨,相信不少朋友已经走出家门,迎战跳槽季了。一些动作快的朋友已经拿到一两个 Offer 了。
其实,除了表达能力和面试技巧外,无非就从这些个方面进行准备:
一、那么专业技能怎么写?
先问一下你自己会什么,然后看看你意向的公司需要什么。我说的是一般HR可能并不太懂技术,(当然内部人员来面试就不一样了)所以他在筛简历的时候可能就盯着你专业技能的关键词来看。对于公司有要求而你不会的技能,你可以提前花几天时间学习一下,然后在简历上可以写上自己了解这个技能。比如你可以这样写(下面这部分内容摘自我的简历,大家可以根据自己的情况做一些修改和完善):
- 计算机网络、数据结构、算法、操作系统等课内基础知识:掌握
- Java 基础知识:掌握
- JVM 虚拟机(Java内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM内存管理):掌握
- 高并发、高可用、高性能系统开发:掌握
- Struts2、Spring、Hibernate、Ajax、Mybatis、Redis、JQuery :掌握
- SSH 整合、SSM 整合、 SOA 架构:掌握
- Dubbo: 掌握
- Zookeeper: 掌握
- 常见消息队列: 掌握
- Linux:掌握
- MySQL常见优化手段:掌握
- Spring Boot +Spring Cloud +Docker:了解
- Hadoop 生态相关技术中的 HDFS、Storm、MapReduce、Hive、Hbase :了解
- Python 基础、一些常见第三方库比如OpenCV、wxpy、wordcloud、matplotlib:熟悉
二、分享一下我面试某家公司Java高级开发岗位,文末会分享一些我个人的学习文档
一面(基础面:大约60分钟)
- 自我介绍
- 对象相等的判断,equals方法实现。Hashcode的作用,与 equal 有什么区别?
- Java中CAS算法?
- G1回收器讲一下?
- HashMap,ConcurrentHashMap与LinkedHashMap的区别
- 如何在多线程环境下使用Map,ConcurrentHashMap原理,ConcurrentHashMap如何加锁。
- 多线程并发的同步实现,有两个方法,每个方法里有a部分代码和b部分代码,我要让两个线程分别执行两个方法,并且让他们运行完a部分代码再一起向下执行,如何实现。
- TCP连接中的三次握手和四次挥手,四次挥手的最后一个ack的作用是什么,为什么要time wait,为什么是2msl。
- aio,nio,bio的了解
- ReetrantLock和synchronized的区别。
- Java有哪些悲观锁的实现?
- Java有哪些类实现了乐观锁?
二面(二面就死抓多线程问)
- 线程池有哪些参数?分别有什么用?如果任务数超过的核心线程数,会发生什么?阻塞队列大小是多少?
- 数据库连接池介绍下,底层实现说下
- hashset底层实现,hashmap的put操作过程
- 说说HaspMap底层原理?再说说它跟HaspTable和ConcurrentHashMap他们之间的相同点和不同点?
- 说说B+树和B树的区别,优缺点等?
- 算法题,对一个链表进行归并排序,链表可能有环
- 怎么实现一个线程安全的计数器?
- 原子类AtomicInteger实现原理是什么?和你设计的计数器优劣比较?CAS怎么实现原子操作的?
- Java中的锁有什么?synchronized与Lock的区别?公平锁和非公平底层怎么实现的?AQS原理详细介绍一下?
- 你在项目中一般怎么调优JVM的呢?
- 说一下GC吧,什么时候进行Full GC呢?
- 你了解哪些收集器?CMS和G1。详细谈谈G1的优点
三面(Redis和mysql也要掌握,面试也是必问)
- 了解哪些排序算法,讲讲复杂度
- 手撕归并排序
- Redis有哪些数据结构?底层的编码有哪些?有序链表采用了哪些不同的编码?
- redis的hash数据结构最多能存储多少个元素
- 自己如何实现RPC?
- mysql默认存储引擎?MyISAM、InnoDB、MEMORY的区别
- 什么是幻读,如何解决
- 事务隔离级别有什么?通过什么来实现的?分别解决了什么问题?
- 乐观锁与悲观锁的使用场景
四面(这里问的技术问题就较多了 分布式架构 dubbo Spring cloudKafka 数据库)
- 介绍对你技术能力帮助最大的项目,重点讲架构设计思路
- 分布式全局唯一ID怎样来实现?
- dubbo的生产者如何发布服务,注册服务,消费者如何调用服务?
- dubbo负载均衡的策略有哪些?一致性哈希详细聊一下?
- 分布式session如何实现的
- 微服务你的理解?以及常用的微服务方案dubbo、spring cloud的比较?
- Kafka怎么保证数据可靠性?
- 数据库主从同步数据一致性如何解决?技术方案的优劣势比较?
- 分布式锁的实现方式你知道有哪些?主流的解决方案是什么?
- Spring两大特性?AOP和IOC
- Spring的初始化过程?Spring bean的生命周期?
- 多个RPC请求进来,服务器怎么处理并发呢?
面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。
三、比如,有如下的职位描述。
我们能从中挖掘出如下的技能需求点:
- 3年经验,熟悉常用类库
- 熟悉Spring和Mybatis框架
- 熟悉分布式中间件(比如消息,缓存等中间件)
- 熟悉数据库,最好是NoSQL
- 最好有大数据经验
而关于非技能的要求如下:
- 有责任心,有主动性
- 需要有团队合作的能力
- 需要有良好的编码习惯,学习能力要强。
对于java高级开发而言,可以准备如下的话题,大家也能以此为参考,准备些其它的话题:
- 虚拟机内存优化
- 数据库性能调优
- 分布式高并发架构
- 一些热门组件,比如redis,nginx等
- 大数据方向的用法
- java core(比如集合或多线程)方面的底层实现代码
- Spring系列(比如IOC, AOP, MVC,Spring Boot, Spring Cloud)方面的底层实现代码。
四、要准备到什么程度:
- 最好结合项目实际说出真的用过这些技术。
- 最好往性能调优方面靠。
下面就以虚拟机为例,说下如何在面试中引出该话题,以及面试时该怎么说。其它亮点话题也可以照此准备。
第一:在简历的最近项目介绍里加上类似这样描述,“这个项目的内存要求比较高,虽然在项目里分配的对象不少,但这个项目只被分配了1G内存,所以在这个项目里,我实践了一些定位排查内存问题的技能,也做了些调优的工作“,这样面试官见到简历的描述,就会自然而然地提问了。
第二:在面试中总会有“项目介绍”这个环节,面试官会让候选人介绍最近的(或最拿得出手)的一个项目,这样大家就可以顺势说出刚才已经给出的描述。
第三:大家可以在回答数据库或集合等方面的问题时引出这个话题,比如回答完JDBC问题后,大家可以说一句,“用好的Connection对象我们会及时关闭,否则它所占用的内存对象无法被GC回收”,或者在谈及List等集合类型时,同时多说一句,“用好的集合对象我们会及时clear掉,否则这个集合也会对一些对象产生强引用,这样就会延迟对象的回收时间”。
第四:在自我总结时,可以说,有虚拟机调优的经验。
那么,在面试时,该怎么说呢?
- 大家可时设置成null,以撤销强引用。集合对象用好后应当及时clear。尽量别频繁地使用String(或其它不变类)对象,这样容易产生内存碎片。
- 还展示监控、定位和调优方面的综合能力。这里可以说下,比如通过Jprofiler+jmeter进行JVM性能调优的方法。
- 大家甚至可以看些虚拟机的底层实现细节,在面试中说下,这样能大大提升自己的专业素养。
五、刷题:
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
六、提示自身的软实力(知识和技术)
第二个关键就要自己的自身实力过硬了,无论是你应届生,还是工作好几年,无论是校招还是社招,企业招聘的永远是自身实力过硬的,也就是你的知识储备,你的技术水平要达到要求,而提升自身软实力的唯一办法就是:不断学习。
以下分享一些我个人的学习文档,有需要的朋友加VX:msb_1600365490 自行选择获取:
友情提醒:获取以上所有文档资料,加VX:msb_1600365490 即可打包获取!(免费分享的~)
- Java核心知识点
- Spring系列(实战)
网友评论