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

面试了公司大概有阿里,携程,爱奇艺,唯品会,途牛,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开发程序员,该准备哪些去面试?的更多相关文章

  1. 十年Java开发程序员回答,自学Java,培训Java的利和弊

    最近有一个朋友在群里面问我:是应该去培训Java还是应该自学Java,我想的说的是我并不是想给他一个去培训或者不去培训,我用自己多年对于行业的了解去分析这个问题,然后让他自己去思考,哪种更加适合他.他 ...

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

    1.  熟练使用Java语言进行面向对象程序设计(面向对象:继承.多态.抽象): 有良好的编程习惯(阿里开发手册  链接:http://pan.baidu.com/s/1dFEA6cT 密码:kqj4 ...

  3. Java开发程序员必须要学会的linux命令总结

    查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. find . -name "*.xml" 递归查找所有的xml文 ...

  4. Android开发,java开发程序员常见面试题,求100-200之间的质数,java逻辑代码

    public class aa{ public static void main (String args []){ //author:qq986945193 for (int i = 100;i&l ...

  5. Android开发,java开发程序员常见基础面试题,更换两个变量的值,java逻辑代码

    public class abswitch{ public static void main (String args []){ //author:qq986945193 int a=1; int b ...

  6. 科普,想成为厉害的 Java 后端程序员,你需要懂这 13 个知识点

    老读者就请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题. 站 ...

  7. 科普,想成为厉害的 Java 后端程序员,你需要懂这些

    站在运筹帷幄的角度来看,一名厉害的 Java 后端程序员都需要懂得哪些知识呢?我想,这也是很多读者迫切想知道的一个问题,因为如果不站在一个宏观的角度的话,所有学过的知识点都是零散的,就感觉像一只迷路的 ...

  8. Java技术开发程序员如果在2019年立足

    2019年的互联网环境相对以往来说要更复杂一些,互联网领域也正在经历从消费互联网向产业互联网转型的阵痛期.其实不少公司从2018年开始已经在陆续进行结构化调整,这些调整中的重要内容就是岗位调整,而岗位 ...

  9. 寻找下一个结点 牛客网 程序员面试金典 C++ java Python

    寻找下一个结点 牛客网 程序员面试金典 C++ java Python 题目描述 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继). 给定树的根结点指针TreeNode* root ...

随机推荐

  1. Vue项目如何关闭Eslint检测

    找到build/webpack.base.config.js文件,修改如下 将图中第二个红色框的内容 "createLintingRule()" 清空,然后保存重新启动项目即可.

  2. java 冒泡排序法、选择排序

    1.冒泡排序 /* * 冒泡排序 * 外层控制循环多少趟,内层控制每一趟的循环次数 */ public class Test08 { public static void main(String[] ...

  3. lock tables和unlock tables

    1.lock tables table1 read,table2 read,table3 read igoodful@a8-apple-iphone-db00.wh(glc) > show ta ...

  4. Tool Zip 破解

    //侵权请联系我进行删除 email:YZFHKM@163.com 0x00 fcrackzip简单介绍 fcrackzip是一款专门破解zip类型压缩文件密码的工具,工具小巧方便.破解速度快,能使用 ...

  5. Kunbernetes从私有仓库nexus拉取镜像

    1.docker登陆认证 [root@master ~]# vim /etc/docker/daemon.json { "insecure-registries": [" ...

  6. duilib教程之duilib入门简明教程9.界面布局

    上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...

  7. python和go对比字符串的链式处理

    一.什么是链式处理 对数据的操作进行多步骤的处理称为链式处理,链式处理器是一种常见的编程设计,链式处理的开发思想将数据和操作拆分,解耦,让开发者可以根据自己的技术优势和需求,进行系统开发,同时将自己的 ...

  8. RPC远程过程调用实例详解

    1.创建IDL文件,定义接口. IDL文件可以由uuidgen.exe创建. 首先找到系统中uuidgen.exe的位置,如:C:\Program Files\Microsoft Visual Stu ...

  9. 20.multi_case04

    import aiohttp import asyncio import ssl async def fetch(session, url): async with session.get(url,s ...

  10. 05_mybatis动态sql

    1.sql片段 1.sql片段**** mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 2.需求 用户信息综合查询列表和用户信息查询列表总数这两个sta ...