一个四五年的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,途牛,笔试题,写算法,哎,坑爹的,总之一句话,多准备,多面试。另外遇到面试官问的,你不会,要问他答案。不然下一个面试官问到你还是不会。
一个四五年的Java开发程序员,该准备哪些去面试?的更多相关文章
- 十年Java开发程序员回答,自学Java,培训Java的利和弊
最近有一个朋友在群里面问我:是应该去培训Java还是应该自学Java,我想的说的是我并不是想给他一个去培训或者不去培训,我用自己多年对于行业的了解去分析这个问题,然后让他自己去思考,哪种更加适合他.他 ...
- 资料汇总--java开发程序员必备技能
1. 熟练使用Java语言进行面向对象程序设计(面向对象:继承.多态.抽象): 有良好的编程习惯(阿里开发手册 链接:http://pan.baidu.com/s/1dFEA6cT 密码:kqj4 ...
- Java开发程序员必须要学会的linux命令总结
查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. find . -name "*.xml" 递归查找所有的xml文 ...
- Android开发,java开发程序员常见面试题,求100-200之间的质数,java逻辑代码
public class aa{ public static void main (String args []){ //author:qq986945193 for (int i = 100;i&l ...
- Android开发,java开发程序员常见基础面试题,更换两个变量的值,java逻辑代码
public class abswitch{ public static void main (String args []){ //author:qq986945193 int a=1; int b ...
- 科普,想成为厉害的 Java 后端程序员,你需要懂这 13 个知识点
老读者就请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题. 站 ...
- 科普,想成为厉害的 Java 后端程序员,你需要懂这些
站在运筹帷幄的角度来看,一名厉害的 Java 后端程序员都需要懂得哪些知识呢?我想,这也是很多读者迫切想知道的一个问题,因为如果不站在一个宏观的角度的话,所有学过的知识点都是零散的,就感觉像一只迷路的 ...
- Java技术开发程序员如果在2019年立足
2019年的互联网环境相对以往来说要更复杂一些,互联网领域也正在经历从消费互联网向产业互联网转型的阵痛期.其实不少公司从2018年开始已经在陆续进行结构化调整,这些调整中的重要内容就是岗位调整,而岗位 ...
- 寻找下一个结点 牛客网 程序员面试金典 C++ java Python
寻找下一个结点 牛客网 程序员面试金典 C++ java Python 题目描述 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继). 给定树的根结点指针TreeNode* root ...
随机推荐
- 查看Linux 内核版本命令
1.Ubuntu 查看版本命令,三种方法. 1.使用 "uname -a" 2.使用 "lsb_release -a" 3.使用 "cat ...
- java 一维数组的输出方式
1.使用传统的for()循环输出: //定义一个数组 int []array = {1,2,3,4,5}; for(int i=0;i<array.length;i++) { System.ou ...
- grunt完整的配置demo
const path = require('path') const fs = require('fs'); module.exports = function (grunt) { grunt.reg ...
- sysobjects syscolumns
在sysobjects系统表中存储着数据库的所有对象,每个对象都有一个唯一的id号进行标识.object_id就是根据对象名称返回该对象的id.反之,object_name是根据对象id返回对象名称. ...
- PHP算法之转换成小写字母
实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串. 示例 1: 输入: "Hello"输出: &q ...
- Erlang学习记录:语法和特性
特性 大下排序:number < atom < reference < fun < port < pid < tuple < list < bit st ...
- 不会在CentOS 8上安装htop?今天教你正确安装
它显示有关CPU和RAM利用率,正在执行的任务,平均负载和正常运行时间的信息.另外,htop显示所有正在运行的进程的列表,并且还可以树状格式显示这些进程. htop优于top的优势包括 以颜色标记输出 ...
- 简单的 js手写轮播图
html: <div class="na1"> <div class="pp"> <div class="na ...
- 安装和设置kubectl命令
Linux [root@cx-- ~]# curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.13.5/bin/ ...
- 关于CTreeView中CTreeCtrl空间的使用
昨天QQ群里有人问我怎么实现CTreeCtrl的功能,说实话,我也是一个VC 的初级学者,没有弄过CTreeView的代码,参考了MSDN后,写了一小段代码,和大家一起分享,其中包括窗口切分,都是比较 ...