此文的目的是为了督促自己去不断学习,让自己有更明确的方向去提升自己。以技能树为基础,以面试要点为大纲,我觉得比抓住什么看什么要更有目的,更能坚持下去。世界瞬息万变,我们要时刻准备着、时刻提高着自己,才能使自己更具有竞争力。

一、Java技能树

1、基本语法

这包括static、final、transient等关键字的作用,foreach循环的原理等等。比如面试的时候面试官问你static关键字有哪些作用,如果你答出static修饰变量、修饰方法面试官会认为你合格,答出静态块,会认为你不错,答出静态内部类会认为你很好,答出静态导包会对你很满意,因为能看出你非常热衷研究技术。

2、集合

集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的实现原理,当然能掌握CopyOnWrite容器和Queue是再好不过的了。

还需要了解ConcurrentHashMap的锁分段技术,ConcurrentHashMap的读是否要加锁,为什么,ConcurrentHashMap的迭代器是强一致性的迭代器还是弱一致性的迭代器

3、设计模式

知道常用设计模式的优缺点。

能画出常用设计模式的UML图。

4、多线程

Thread和Runnable的区别和联系、多次start一个线程会怎么样、线程有哪些状态。

假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?

常用的线程池有几种?这几种线程池之间有什么区别和联系?线程池的实现原理是怎么样的?

synchronized和ReentrantLock的区别、synchronized锁普通方法和锁静态方法、死锁的原理及排查方法等等。

5、JDK源码

要想拿高工资,JDK源码不可不读,总结一下比较重要的源码:

  • List、Map、Set实现类的源代码;
  • ReentrantLock、AQS的源代码;
  • AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的;
  • 线程池的实现原理;
  • Object类中的方法以及每个方法的作用。

6、数据库

union和union all的区别、left join、几种索引及其区别,数据库性能的优化。

7、数据结构和算法分析

数组、链表是基础,栈和队列深入一些但也不难,树挺重要的,比较重要的树AVL树、红黑树,可以不了解它们的具体实现,但是要知道什么是二叉查找树、什么是平衡树,AVL树和红黑树的区别。

8、Java虚拟机

  • Java虚拟机的内存布局
  • GC算法及几种垃圾收集器、
  • 类加载机制,也就是双亲委派模型
  • Java内存模型
  • happens-before规则
  • volatile关键字使用规则

9、Web方面的一些问题

  • 分布式Session的几种实现方式
  • Session和Cookie的区别和联系以及Session的实现原理。
  • get/post的区别、forward/重定向的区别、HTTPS的实现原理
  • 一致性Hash算法

二、Java面试题

1 Java 基础

1.1 Java 基础语法

  • 面向对象的特征
  • java 中四种修饰符的限制范围
  • 重载和重写的区别
  • 抽象类和接口有什么区别
  • Java 基本数据类型
  • int 和 Integer 有什么区别
  • 说说&和&&的区别
  • final, finally, finalize 的区别
  • Object 类中的方法
  • equals 与 == 的区别

1.2 Java 常用集合

  • List 和 Set 区别
  • List 和 Map 区别
  • Arraylist 与 LinkedList 区别
  • ArrayList 与 Vector 区别
  • ArrayList在循环过程中删除,会不会出问题
  • HashMap 和 Hashtable 的区别
  • HashSet 和 HashMap 区别
  • HashMap 的源码,实现原理
  • HaspMap 扩容是怎样的,为什么都是2的N次幂的大小
  • HashMap,HashTable,ConcurrentHashMap 的区别

1.3 Java IO 和 NIO

  • 什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们长度是多少,各有什么区别
  • java 中有几种类型的流
  • 字符流和字节流有什么区别
  • 什么是 java 序列化,如何实现 java 序列化?
  • IO 和 NIO 区别
  • ByteBuffer 与 StringBuffer 有什么区别
  • 内存映射缓存区是什么
  • 直接缓冲区与非直接缓冲器有什么区别
  • 原生的 NIO 在 JDK 1.7 版本存在 epoll bug

2 多线程

2.1 线程的基本概念

  • 线程和进程的区别
  • 创建线程的方式有哪几种
  • Callable 和 Future 的了解
  • 线程的生命周期
  • ThreadLocal 原理分析
  • sleep 和 wait 的区别
  • notify 和 notifyAll 的区别
  • sleep() 、join()、yield()有什么区别

2.2 线程池

  • 为什么使用线程池
  • 线程池的几种实现方式
  • 线程池的实现原理
  • 线程池的停止方法

2.3 锁

  • synchronized 关键字的用法,优缺点
  • synchronized 与 lock 的区别
  • volitile 关键字的作用,原理
  • CAS 概念及理解
  • 悲观锁和乐观锁
  • 可重入锁的用处及实现原理

3 数据库

  • 数据库锁、行锁
  • 事物的性质
  • MySQL 索引使用的注意事项
  • 数据库索引的原理
  • MySQL 数据库的常用存储引擎

4 算法

  • 排序算法
  • B+树
  • 红黑树

5 框架

  • BeanFactory 和 ApplicationContext 有什么区别
  • Spring Bean 的生命周期
  • Spring 的单例实现原理
  • Spring IOC 如何实现
  • 说说 Spring AOP
  • Spring AOP 实现原理
  • 动态代理(cglib 与 JDK)
  • Spring 框架中用到了哪些设计模式
  • MVC 设计思想
  • Spring MVC 运行流程
  • SpringMVC 的Controller 是如何处理参数的

6 网络

  • 计算机网络的模型
  • TCP,UDP 区别
  • 三次握手,四次挥手,为什么要四次挥手
  • 长连接和短连接
  • 连接池适合长连接还是短连接
  • https 原理

PS:这是本人之前面试过程中遇到的较多的以及不太懂的问题、本人觉得比较重要的。也参考了一些网上别人的面试问题,欢迎大家补充。

觉得有收获的同学,也可以关注一下我的公众号:《Java技术zhai》,不定期的干货技术分享,带你重新领略架构的魅力!

为何我建议1-3年的Java程序员仔细看看这篇文章的更多相关文章

  1. java程序员的NodeJS初识篇

    摘要 作为一个一直用java来写后端的程序员用NodeJS来写后台,实在不是很爽.这里记下这两个月的NodeJS学习所遇之坑,与java转NodeJS的同仁共勉.学习时间不长,若有理解错误,望指正. ...

  2. Java 程序员们值得一看的好书推荐

    "学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一 ...

  3. 从小工到专家 ——读《Java程序员职场全攻略》有感

    从小工到专家 ——读<Java程序员职场全攻略>有感   <Java程序员职场全攻略>是以故事的形式,向读者介绍Java程序员的职场经验.作者牛开复在北京从事软件开发,已经是一 ...

  4. 【转】java架构师之路:JAVA程序员必看的15本书的电子版下载地址

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...

  5. 转载:java程序员如何拿到2万月薪

    作者:匿名用户链接:https://www.zhihu.com/question/39890405/answer/83676977来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  6. Java 程序员们值得一看的好书推荐[转载]

    “学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他 ...

  7. Java教程-Java 程序员们值得一看的好书推荐

    学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资 ...

  8. Java程序员转Android开发必读经验分享

    小编最近几日偷偷的发现部分Java程序员想转安卓开发,故此加紧补充知识,为大家搜集资料,积极整理前人的经验,希望可以给正处于困惑中的你,带来些许的帮助. 啰哩啰嗦的说说Java和Android程序的区 ...

  9. Java程序员修炼之道 之 Logging(1/3) - Logback 配置(转)

    转自紫风乱写:http://www.blogjava.net/justfly/archive/2014/08/10/416768.html,建议大家去原处学习 写在前面的话: 作为<Java程序 ...

随机推荐

  1. 【西北师大-2108Java】第十一次作业成绩汇总

    [西北师大-2108Java]第十一次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第13周学习指导及要求 实验目的与要求 (1)掌握事件处理的基本原理,理解其用途: (2)掌握AWT事件模型 ...

  2. FIRST 集与 FOLLOW 集

    文法: S→ABc A→a|ε B→b|ε First 集合求法: 能 由非终结符号推出的所有的开头符号或可能的ε,但要求这个开头符号是终结符号.如此题 A 可以推导出 a 和ε,所以 FIRST(A ...

  3. python - 操作excel表格

    说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...

  4. SSM整合1(springMVC+mybatis)

    整合目标:控制层采用springmvc.持久层使用mybatis实现 整合思路: Dao层: 1.SqlMapConfig.xml,空文件即可,但是需要文件头. 2.applicationContex ...

  5. .WrongArgumentException: Malformed database URL, failed to parse the connection string near ';characterEncoding=UTF-8&;serverTimezone=Asia/Shanghai'.)

    连接mysql库报的异常信息: org.springframework.transaction.CannotCreateTransactionException: Could not open JDB ...

  6. JavaScript动态加载script方式引用百度地图API,Uncaught ReferenceError: BMap is not defined

    百度地图官网文档介绍使用JSSDK时,仅提供了2种引入方式: script引入 异步加载 实际工作场景中仅某一两个页面或者只是单纯有功能需要用到百度地图,所以没有必要在 index.html 中全局引 ...

  7. WebViewJavascriptBridge的详细使用

    参考链接: https://www.jianshu.com/p/d12ec047ce52 https://www.jianshu.com/p/ba6358b1eec3 有demo:https://ww ...

  8. 【JDBC】C3P0连接池的使用

    C3P0连接池的c3p0-config.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <c3p ...

  9. 20个常用的JavaScript字符串方法

    摘要: 玩转JS字符串. 原文:JS 前20个常用字符串方法及使用方式 译者:前端小智 Fundebug经授权转载,版权归原作者所有. 本文主要介绍一些最常用的JS字符串函数. 1. charAt(x ...

  10. [Go] protobuffer 的环境配置

    一般使用gprc是需要使用protobuf作为数据传输的格式标准,可以对要传输的对象结构体进行序列化 先安装protoc,找到对应版本,下载直接把二进制文件复制到环境变量可以访问到的地方就行 http ...