为何我建议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》,不定期的干货技术分享,带你重新领略架构的魅力!
为何我建议1-3年的Java程序员仔细看看这篇文章的更多相关文章
- java程序员的NodeJS初识篇
摘要 作为一个一直用java来写后端的程序员用NodeJS来写后台,实在不是很爽.这里记下这两个月的NodeJS学习所遇之坑,与java转NodeJS的同仁共勉.学习时间不长,若有理解错误,望指正. ...
- Java 程序员们值得一看的好书推荐
"学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一 ...
- 从小工到专家 ——读《Java程序员职场全攻略》有感
从小工到专家 ——读<Java程序员职场全攻略>有感 <Java程序员职场全攻略>是以故事的形式,向读者介绍Java程序员的职场经验.作者牛开复在北京从事软件开发,已经是一 ...
- 【转】java架构师之路:JAVA程序员必看的15本书的电子版下载地址
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...
- 转载:java程序员如何拿到2万月薪
作者:匿名用户链接:https://www.zhihu.com/question/39890405/answer/83676977来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- Java 程序员们值得一看的好书推荐[转载]
“学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他 ...
- Java教程-Java 程序员们值得一看的好书推荐
学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资 ...
- Java程序员转Android开发必读经验分享
小编最近几日偷偷的发现部分Java程序员想转安卓开发,故此加紧补充知识,为大家搜集资料,积极整理前人的经验,希望可以给正处于困惑中的你,带来些许的帮助. 啰哩啰嗦的说说Java和Android程序的区 ...
- Java程序员修炼之道 之 Logging(1/3) - Logback 配置(转)
转自紫风乱写:http://www.blogjava.net/justfly/archive/2014/08/10/416768.html,建议大家去原处学习 写在前面的话: 作为<Java程序 ...
随机推荐
- 逻辑卷管理器LVM
逻辑卷管理器LVM •将设备指定为物理卷 • 用一个或者多个物理卷来创建一个卷组 • 物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的 • 在物理卷上创建的逻辑卷是由物理区 ...
- 【测试基础】App测试要点总结
测试工作过程中思维过程:测试人员常被看作Bug寻找者,程序的破坏者. 1.好的测试工程师所具备的能力: 细心的观察能力 有效的提问能力 产品的业务能力 好奇心 2.测试人员需要询问问题:测试人员的核心 ...
- [C]表达式结合规律和运算符优先级
表达式结合规律 如果运算符具有相同的优先级(precedence)有些表达式的结合方式是从左往右,有些则是从右往左结合的(例如赋值运算符): 表达式 结合律 组合方式 a/b%c 从左往右 (a/b) ...
- day99_12_3numpy的索引以及pandas的两个数据结构。
一.索引与切片. nump的索引和python中的索引差不多,都是左开右闭区间. 如一个普通的array的索引,是由0开始的: res = np.array([1,2,3,4,5]) #### npa ...
- ReactNative: 使用Image图片组件
一.简介 在应用程序中,图片组件非常常见,不论是缩略图.大图.还是小图标等等,都需要使用图片组件进行显示.在Web开发中提供了<img/>标签显示图片,在iOS中提供了UIImageVie ...
- easyui treegrid数据重复加载问题
在使用easyui的时候,出现了数据重复加载的问题.如下图 关于这个问题有两种说法,第一种说法是 easyui-datagrid 类在html和js中重复定义,数据渲染时会加载两次.另一种是$(&qu ...
- SAP MCH1表和MCHA表更新逻辑
SAP MCH1表和MCHA表更新逻辑 笔者所在的A项目里,批次是在material level 唯一, 意味着不同物料号可以有相同的批次号,只要物料号+批次号组合是唯一的即可. SE11 看MCH1 ...
- 大话Git系列之初识版本控制系统(1)
前言:何谓版本控制系统呐?有两种说法:一种叫法为SCM,==source code management (源代码管理系统)另一种说法为VCS,==version control system(版本控 ...
- sqlserver取字符串拼音首字母
sqlserver 使用函数获取一个字符串的拼音首字母 create function dbo.fn_getpinyin ( @str nvarchar(max) ) returns nvarchar ...
- [Go] protobuffer 的环境配置
一般使用gprc是需要使用protobuf作为数据传输的格式标准,可以对要传输的对象结构体进行序列化 先安装protoc,找到对应版本,下载直接把二进制文件复制到环境变量可以访问到的地方就行 http ...