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


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

    一、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》,不定期的干货技术分享,带你重新领略架构的魅力!

  • 相关阅读:
    力扣209. 长度最小的子数组
    707.设计链表
    力扣反转字母
    力扣35. 搜索插入位置
    力扣59. 螺旋矩阵 II
    力扣203. 移除链表元素
    VS2012的又一个Bug,坑死人了
    为什么需要一个严格的规范来约束团队?
    游戏汉化教程2资源分析
    游戏汉化教程1汉化流程
  • 原文地址:https://www.cnblogs.com/lfs2640666960/p/11388928.html
Copyright © 2020-2023  润新知