Java语言基础+计算机网络+数据结构 知识手册
最近有不少Java同学陆续开始准备找工作,这篇文章算是推给他们让他们提前准备一下。
加油,美好的一天开始啦~
纯Java语言基础内容
1、常见集合源码分析。(以下是我们被问到过,能想起的所有知识点)
ArrayList:
1、初始化时机,初始化发生了什么。
对数组的初始化,如果看过源码会发现,是在add的时候,会先判断是否初始化数组,如果没有,则初始化数组。
2、扩容机制。
仍发生在add阶段,如果数组空间不足则出发扩容,扩容大小为1.5当前数组大小。
3、扩容时,使用什么样的方式创建数组。
Arrays.copyOf()。
4、add(int index, E element)和set(int index, E element)区别
看过源码会发现,add(index,value),value不会覆盖index数据,而是后移。而set则是覆盖index。
LinkedList:
1、结构是什么样子的。
双向链表。
2、addFirst(E e)/addLast(E e)的实现思路。
因为是双向链表,直接挂在Node的prev/拿到最后一个Node挂到next上。
3、和ArrayList的区别。
因为是链表,所以很容添加和删除;也因为是链表不容易随机去查数据(需要遍历)。
HashMap:
1、初始化时机,初始化发生了什么。
put的时候才会初始化Entry数组,计算初始数组大小(16),设置扩容时机:数组大小*0.75。
2、扩容机制(负载因子的作用)。
当数组使用率>扩容时机时,数组大小乘2,然后重新hash,使数据均匀分布。(负载因子,默认0.75,用于计算扩容时机)
3、如何解决冲突(冲突的Entry挂在链头还是链尾)。
链表法;挂在链表的头。
4、实现原理(1.8版本的改变了解么)。
Entry数组,且Entry是链表,put(key,value)时会先hash选出此<key,value>放在数组的哪个index中,如果已经存放那就挂在链头;取是一个反向hash的过程。1.8引入了红黑树,在链表长度>8时,将转为红黑树结构,
而非链表。
5、key重复的情况。
超出上一个key相同的Entry,覆盖value,并返回被覆盖的value。
2、同步相关
synchronized和ReentrantLock异同点。
都是重入锁;synchronized是悲观锁的实现,ReentrantLock是乐观锁。
synchronized和static synchronized的区别。
一个锁是对象的实例,一个锁是该类下的所有实例。
自旋锁、分段锁、乐观锁、悲观锁、重入锁的区别。
自行百度吧~一些概念
CAS原理;如何解决ABA问题。
自行百度吧~一种思想
volatile作用;如何保证原子性。
保证可见性和有序性(结合线程模型);AtomicInteger相关的类可以保证对应的基本类型的原子性。
原子性,可见性,有序性;Java中对应如何实现。
自行百度吧~
ThreadLocal原理。
内含一个Map,通过key可得到这个Map的实例,这个Map的key是ThreadLocad的实例,value是想要存放的值。
生产者、消费者模型。
适时阻塞和适时唤醒。
线程与进程的区别,线程的状态。
自行百度吧~
解释Happens-Before。
自行百度吧~
3、语言基础
final、static修饰类、方法、变量的作用。
自行百度吧~(final类型的变量,要么在声明时初始化,要么在构造方法里初始化)
拆装箱,int和Integer,Integer内部缓存问题。
因为自动拆装箱的存在,int转Integer,系统做了缓存处理(-128-127)的i,会直接返回对应的Integer,大于这个范围直接new。(FLoat,Double无缓存)
equals和==
==判断内存地址,equals根据不同类型的重写,自行处理。Object的equlas就是==。
4、JVM、CG、JMM相关
类加载机制,双亲委派机制。
线程模型。
程序计数器的作用。
记录当前线程执行到那条指令了。
各种垃圾回收的算法。
标记-清除、标记-整理、标记-复制。分代的思想。
如何判断对象可以被回收。
引用计数、GCRoot可达性。
计算机网络
HTTP请求报文,相应报文的内容。
请求:Accept-Language、Accept-Encoding...响应:Content-Type、Content-Length...
这类的,这些内容自行百度就好~
HTTP各种状态码的含义。
2XX、3XX、4XX、5XX。
TCP/UDP区别。
TCP:面向连接;UDP:不面向连接,尽可能发送。
访问一个链接会经历的过程;对应用到的协议,及含义。
可阅读我们之前关于《计算机网络》的推文。
为什么有了MAC还需要IP地址。
数据结构
把数据结构单独抽出来是因为,它属于可以初期就能影响到我们开发者,不过在面试过程中,大多数不会直接询问关于数据结构的理解。而是基于数据结构的基础进行算法上边的刁难。这里说一些较为基础的数据结构思想和对应的算法。
基础的数据结构
栈,队列,链表,树
对应的算法面试题:
翻转栈
借用一个栈,将需要翻转的栈挨个弹出至借用栈,然后借用栈,挨个弹出至需要翻转的栈中即可。
判断俩条链表是否有相交,并找到交点
两个链遍历找的最后一个节点,俩条链节点相同则为有交点,然后向前逐个遍历,不相同的时候,那么就可以找到交点了。
将给定数组,排序为奇数在前,偶数在后
设置一个头指针,一个尾指针;头指针去找偶数,尾指针找奇数,找到后;俩个数交互。俩指针继续找。
单链表是否有环
这个快指针,一个慢指针去表里链表,如果俩个指针相等了,即为有环。
较为常见的算法题目:二分查找、快排、二叉树的遍历、二维数组匹配
尾声
这部分内容先到此结束,如果准备找工作的小伙伴,这些内容基本都能了解或者有很深的理解,那么面试这关:Java语言内容,以及数据结构,计算机网络部分将比较容易通过。
我是一个应届生,最近和朋友们维护了一个公众号,内容是我们在从应届生过渡到开发这一路所踩过的坑,已经我们一步步学习的记录,如果感兴趣的朋友可以关注一下,一同加油~

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【Java】几道让你拿offer的面试题
前言 只有光头才能变强 之前在刷博客的时候,发现一些写得比较好的博客都会默默收藏起来。最近在查阅补漏,有的知识点比较重要的,但是在之前的博客中还没有写到,于是趁着闲整理一下。 文本的知识点: Integer常量池 TCP拆包粘包 select、poll、epoll简单区别 jdk1.6以后对Synchronize锁优化 Java内存模型 本文力求简单讲清每个知识点,希望大家看完能有所收获 一、神奇的Integer 前阵子在群上看有人在讨论关于Integer的true或者false问题,我本以为我已经懂了这方面的知识点了。但还是做错了,后来去请教了一下朋友。朋友又给我发了另一张图: 后来发现这是出自《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》中的10.3.2小节中~ public class Main_1 { public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e = 321; Integer f = 3...
- 下一篇
程序员如何自我学习?阿里资深技术专家这样做
阿里妹导读:互联网信息技术的迭代周期快是有目共睹的,因此,学习、更新知识这件事就变得相当重要。今天,阿里资深技术专家雷卷,将分享自己平时学习的方法和心得,希望能够带给大家一些启发(本文推荐养家糊口之外有点小追求的同学阅读,Ph.D、paper秒懂的学霸同学可自动忽略~)。 为何要持续学习,靠经验积累不行吗? 很多人都说程序员的薪资水平不错,可以媲美医生和律师。而程序员和医生、律师的不同点在于持续学习上。不是说医生和律师不需要学习,医生、律师能够凭之前的case积累非常多的经验(这也是大家看病喜欢找年纪大的医生的原因之一),而且这些经验很大程度上可以被复用(很多病因和判罚案例带有相似性)。 程序员这个职业则不同,主要是因为行业更新得太快,积累的经验很快就不适用了。 举几个例子: 如果你是Java程序员,且非常擅长Struts + JSP开发
相关文章
文章评论
共有0条评论来说两句吧...