一个四五年的Java开发程序员,该准备哪些去面试?

上周面试了一周,感触颇深,总结一下。

面试了公司大概有阿里,携程,爱奇艺,唯品会,途牛,bilibili,大众点评,阿里和爱奇艺是电话面试,其他现场面试。

首先,五年左右,应该算高级开发工程师,大部分面试不用去做题,背string和stringbuilder区别的,几乎都是底层和远离,分布式等。虽然一个程序员,在工作中大部分还是写流水代码,增删查改。

1 JVM

这个大公司基本都会问,内存模型,GC,jvm都有哪些区域?栈桢存了什么?

常用垃圾回收器哪些,特点?jvm性能调优,这些从周志明的jvm特性那本书基本都有答案,一个高级程序员必读,出去面试,至少得读两遍,理解,不是死记硬背,面试官会问的很细,你如果死记硬背,人家随便一问,你就跪。

2 线程池

这个基本必考,高级程序员不会问你启动线程哪几种方式,都是高并发场景。比如四种线程池,都在那哪几种场景使用的多。线程池的几个重要参数哪些,这些重要参数,在不同线程池下比较。高并发下阻塞队列用哪个,我记得是大众点评问我的,用linkblockqueue还是arrayblockqueue,我当时候说,后者吧,队列添加任务快,基于列表,人家说错了,前者,array是连续的,回收的快,这些都是细节。剩下的就是阻塞队列拒绝策略。默认都是拒绝,有个面试官问我,假如阻塞队列满了,请求拒绝,但是这些请求是重要的,怎么办?这种情况实际开发中会遇到,每个系统总有个峰值,达到峰值,系统可能处理不了,他说,这个时候先把所有请求落数据库,或者mq,后面处理,真实场景会遇到,可能之前你没遇到,但是面试官会问这些,觉得你有没有思考的能力。线程池,tomcat默认就有线程池,会问到调优,所有系统基本离不开吧。

3 锁

这个也是必考,虽然开发中有时候不用,基本会问,syncnizched关键字,作用,类锁,对象锁,方法锁区别?

静态方法加锁,两线程会互斥吗,非静态方法,加锁,会互斥吗?这个比较简单。这个关键字,内置对象锁,jvm创建对象后,会在对象的对象头,存着。然后和lock锁区别,这个如果你去背,可能不理解,我是这么理解的,假如有个厕所,很多人想去上,假如是sync锁,所有人会不定时去敲门,厕所有人吗,非常耗性能,CPU切换,但是lock锁,相当于加了个管理员,举着个牌子,进去一个人,排着写着有人,剩下的看到,就不会去敲门了,人走了,把牌子改下,Java,是基于volitale关键字,通过aqs保证,还有sync阻塞的,比如有个人在厕所玩手机,sync只能等。释放锁,但是lock,可以中断,或其他操作。问的深的会问锁优化之类的,虽然。开发基本用不到,但是你想拿高薪,必须要会。另外,数据库的锁会问。表锁。lock的读锁,写锁,怎么用。原理。这块必须深入理解。不然只能被虐。

4 缓存

这个基本必考,redis,问的问题挺多,es可能会问,分布式系统,redis的唯一ID能做什么?新数据来了,是先存数据库还是redis,过期策略,什么时候用redis做缓存,什么时候用做数据库,和es,mongo,区别。这个只是个缓存,稍微看下,不会问的很深。

5 MQ

消息中间价,分布式系统基本使用,原理,哪几个组成部分,kafka和rabbitmq,区别?

如何保证消息不丢失。基于哪种协议?他的好处?你的项目怎么使用它的。点对点,订阅发布,区别,你的理解。

6 分布式

分布式是啥。一个服务器问题造成血崩怎么办,四层负载均衡和七层区别,说下用过哪些RPC框架。dubbo基于哪些协议,服务如何注册,如何被发现?这个基本都考些,当然,也不要求你都精通,大致原理懂就好。

7 spring

bean的生命周期,spring得核心,spring的代理模式,动态代理,第三方cglib代理哪些场景使用,spring用了哪些设计模式。

spring的事务,传播行为。哪些常用注解?

8 springmvc

原理,常用注解。和struts区别,这个也要花点时间准备。

9 集合

这个必考,重要重要重要,说三遍。哪些常用集合,几种集合,区别,比如ArrayList和linklist区别,性能,这个是基础,问的最多,最多,最多,hashmap,concurrentHashmap,JDK7和JDK8concurrentHashmap区别,实现,原理,两种JDK的size() 方法怎么实现?这个最好把源码看几遍,什么初始化,扩容,底层为什么要用数组加链表加红黑树,什么是红黑树,这个大部分公司必考,看你能力。

10 数据库

索引,必考,基于b+树,唯一索引,普通索引,联合索引,join是否让索引失效,联合索引的最左原则,两个字段加了联合索引,两个一起用,或者第一个字段,查询,都不会实现,用右边的字段,失效,等等。有的会让你手写SQL,数据库引擎,myisam和innoDB区别,基本不会问别的。

11 同步io阻塞io

nio bio aio 区别,用法,b阿里和爱奇艺都问了。

12 其他

其他问的不多,上面基本全了,性能优化。系统稳定性。问之前的项目。

总结

大部分问的,开发用不到,但是想拿高薪。还是准备下基础,因为公司会把这个面试情况衡量你是否是一个人才。另外,偶尔还会有笔试,去bilibili,途牛,笔试题,写算法,哎,坑爹的,总之一句话,多准备,多面试。另外遇到面试官问的,你不会,要问他答案。不然下一个面试官问到你还是不会。

时间: 2024-10-02 21:31:32

一个四五年的Java开发程序员,该准备哪些去面试?的相关文章

这20个核心技术,作为Java开发程序员,你一定要掌握

1. JVM相关(重点) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可. 不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的. JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透. 我在面试有超过3年Java经验的开发者的时候, JVM几乎就是一个必问的问题了. 当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证java开发能力的高低. 在JVM这个大类中,我认为

资料汇总--java开发程序员必备技能

1.  熟练使用Java语言进行面向对象程序设计(面向对象:继承.多态.抽象): 有良好的编程习惯(阿里开发手册  链接:http://pan.baidu.com/s/1dFEA6cT 密码:kqj4): 熟悉常用的 JavaAPI,包括I/O(NIO).Socket.JDBC.XML.集合框架.多线程(并发编程).反射等. 2.  熟悉基于JSP.Servlet的JavaWeb开发,工作原理,生命周期: 熟练的使用JSTL和EL编写无脚本动态页面: 有使用监听器.过滤器等Web组件以及MVC架

如何成为一名Java初级程序员

目前,JAVA是开发人员的热宠,很多论坛都有不少热爱JAVA的开发人员,也有不少想成为JAVA程序员,但苦于不知道该如何学习,也不清楚该学些什么知识才能成为一个JAVA程序员.本人在这里抛砖引玉,和大家讨论成为一个JAVA初级程序员应该具有的知识,与大家共享. 个人认为想成为一个合格的JAVA初级程序员应该具备如下知识: 一.面向对象的知识:JAVA是一个面向对象的开发语言,因此熟悉面向对象对学习JAVA很有必要,您要了解:什么是对象,什么是类;什么是封装,什么是多态,什么是继承;什么是抽象类,

如何给一个完全不懂的非程序员解释复杂的、耗时的、易出错的软件开发的过程?

简评:相当有趣的一篇文章,教导你如何给非程序员讲清楚最难.最复杂的那些开发问题. 回答这个问题首先你应该解释一下如何泡一壶茶: 烧水 把茶叶放在锅里 当水烧开后,把它倒入锅里 等待 5 分钟 把茶倒进杯子里 喝 现在开始变得有趣了.你需要开始问他们这些问题: 烧水? 水来自哪里? 水壶在哪里呢? 你怎么把水弄到水壶里去呢 你怎么知道放了多少水 如果没有水 / 水壶 / 电怎么办? 如果你的填充传感器失败了怎么办? 如果你的沸腾传感器失败了? 把茶叶放在锅里? 锅在哪里,如果没有一个呢?我们应该在

【转】成为Java顶尖程序员 ,看这11本书就够了

成为Java顶尖程序员 ,看这11本书就够了 转自:http://developer.51cto.com/art/201512/503095.htm 以下是我推荐给Java开发者们的一些值得一看的好书.但是这些书里面并没有Java基础.Java教程之类的书,不是我不推荐,而是离我自己学习 Java基础技术也过去好几年了,我学习的时候看的什么也忘了,所以我不能不负责任地推荐一些我自己都没有看过的书给大家. 作者:来源:攻城狮之家|2015-12-31 09:55 收藏 分享 “学习的最好途径就是看

浅谈Android移动开发程序员的职业发展之路

现在几乎每个it公司都在开发移动产品,我最早知道Android还是在09年成都某学院上大学的时候,从新闻上知道有这么一家公司,创始人安迪·鲁宾很有名,但安卓到底是做什么的,我并没有关注. 到2010年毕业的时候,Android已经发展到了2.2版本,百度了一下Android,知道了(应用)开发采用的是Java语言.我当时学过C,C++,对java有些了解,从成都辗转来到北京,找到的工作正是开发一款Android应用(生活服务类).这时我有了一个HTC的安卓最新版手机. 现在做Android移动开

Java冠军程序员告诉你如何提升技术

让我们跟着兄弟连JavaEE培训 导师,聊一聊--怎样成为冠军程序员 ? 我认为以下几点能力是非常有帮助的: 1.强大的记忆力.当 我上八年级的时候,全因那位死气沉沉的历史老师,让我自己都相信我的记忆力太差了.然而,令我惊讶的是,历经多年程序员的工作,我惊奇地发现自己对之前看过的 Java 源代码可以立即重现.在我阅读 JDK 里的一个方法(method)的时侯,我常常能说出该方法(method)相较先前版本有无改动.也许我并不能记清楚某个人的长相和名字,但是对于 Java 代码可以做到过目不忘

转: 如何成为一个通晓多种编程语言的程序员

如何成为一个通晓多种编程语言的程序员 2015-07-16 程序猿 学习一门新的语言是一种冒险.我总是热衷于尝试新的东西——学习新的语法,了解不同的模式,乃至彻底改变思维方式.不幸的是,许多开发人员对此不以为然,甚至可能是深恶痛绝的——学习新语言,就得走出舒适区,花时间花精力来学习新的理念和方法. 这段日子,我每天都要用大约5种不同的语言来写不同的项目! 我应该先学哪种语言? 有关这方面的讨论真可谓数不胜数.很多刚进入编程社区的初学者,都会问这个问题,简直就是前赴后继.有些人建议先学不费力的,如

译:如何成为一个通晓多种编程语言的程序员

学习一门新的语言是一种冒险.我总是热衷于尝试新的东西——学习新的语法,了解不同的模式,乃至彻底改变思维方式.不幸的是,许多开发人员对此不以为然,甚至可能是深恶痛绝的——学习新语言,就得走出舒适区,花时间花精力来学习新的理念和方法. 这段日子,我每天都要用大约5种不同的语言来写不同的项目! 我应该先学哪种语言? 有关这方面的讨论真可谓数不胜数.很多刚进入编程社区的初学者,都会问这个问题,简直就是前赴后继.有些人建议先学不费力的,如Python和Ruby,也有的人认为应该先学例如C.C++和GO这类