java基础笔记.docx
《java基础笔记.docx》由会员分享,可在线阅读,更多相关《java基础笔记.docx(70页珍藏版)》请在冰豆网上搜索。
![java基础笔记.docx](https://file1.bdocx.com/fileroot1/2022-10/26/e6d8ba85-61d6-43c8-ba35-4cd49ca18870/e6d8ba85-61d6-43c8-ba35-4cd49ca188701.gif)
java基础笔记
序言
J2SE基础
1.九种基本数据类型的大小,以及他们的封装类。
2.Switch能否用string做参数?
3.equals与==的区别。
4.Object有哪些公用方法?
5.Java的四种引用,强弱软虚,用到的场景。
6.Hashcode的作用。
7.ArrayList、LinkedList、Vector的区别。
8.String、StringBuffer与StringBuilder的区别。
9.Map、Set、List、Queue、Stack的特点与用法。
10.HashMap和HashTable的区别。
11.HashMap和ConcurrentHashMap的区别,HashMap的底层源码。
12.TreeMap、HashMap、LindedHashMap的区别。
13.Collection包结构,与Collections的区别。
14.try catch finally,try里有return,finally还执行么?
15.Excption与Error包结构。
OOM你遇到过哪些情况,SOF你遇到过哪些情况。
16.Java面向对象的三个特征与含义。
17.Override和Overload的含义去区别。
18.Interface与abstract类的区别。
19.Static class 与non static class的区别。
20.java多态的实现原理。
21.实现多线程的两种方法:
Thread与Runable。
22.线程同步的方法:
sychronized、lock、reentrantLock等。
23.锁的等级:
方法锁、对象锁、类锁。
24.写出生产者消费者模式。
25.ThreadLocal的设计理念与作用。
26.ThreadPool用法与优势。
27.Concurrent包里的其他东西:
ArrayBlockingQueue、CountDownLatch等等。
28.wait()和sleep()的区别。
29.foreach与正常for循环效率对比。
30.Java IO与NIO。
31.反射的作用于原理。
32.泛型常用特点,List能否转为List
33.解析XML的几种方式的原理与特点:
DOM、SAX、PULL。
34.Java与C++对比。
35.Java1.7与1.8新特性。
36.设计模式:
单例、工厂、适配器、责任链、观察者等等。
37.JNI的使用。
Java里有很多很杂的东西,有时候需要你阅读源码,大多数可能书里面讲的不是太清楚,需要你在网上寻找答案。
推荐书籍:
《java核心技术卷I》《Thinking in java》《java并发编程》《effictive java》《大话设计模式》
JVM
1.内存模型以及分区,需要详细到每个区放什么。
2.堆里面的分区:
Eden,survival from to,老年代,各自的特点。
3.对象创建方法,对象的内存分配,对象的访问定位。
4.GC的两种判定方法:
引用计数与引用链。
5.GC的三种收集方法:
标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?
6.GC收集器有哪些?
CMS收集器与G1收集器的特点。
7.Minor GC与Full GC分别在什么时候发生?
8.几种常用的内存调试工具:
jmap、jstack、jconsole。
9.类加载的五个过程:
加载、验证、准备、解析、初始化。
10.双亲委派模型:
Bootstrap ClassLoader、Extension ClassLoader、ApplicationClassLoader。
11.分派:
静态分派与动态分派。
JVM过去过来就问了这么些问题,没怎么变,内存模型和GC算法这块问得比较多,可以在网上多找几篇博客来看看。
推荐书籍:
《深入理解java虚拟机》
操作系统
1.进程和线程的区别。
2.死锁的必要条件,怎么处理死锁。
3.Window内存管理方式:
段存储,页存储,段页存储。
4.进程的几种状态。
5.IPC几种通信方式。
6.什么是虚拟内存。
7.虚拟地址、逻辑地址、线性地址、物理地址的区别。
因为是做android的这一块问得比较少一点,还有可能上我简历上没有写操作系统的原因。
推荐书籍:
《深入理解现代操作系统》
TCP/IP
1.OSI与TCP/IP各层的结构与功能,都有哪些协议。
2.TCP与UDP的区别。
3.TCP报文结构。
4.TCP的三次握手与四次挥手过程,各个状态名称与含义,TIMEWAIT的作用。
5.TCP拥塞控制。
6.TCP滑动窗口与回退N针协议。
7.Http的报文结构。
8.Http的状态码含义。
9.Http request的几种类型。
10.Http1.1和Http1.0的区别
11.Http怎么处理长连接。
12.Cookie与Session的作用于原理。
13.电脑上访问一个网页,整个过程是怎么样的:
DNS、HTTP、TCP、OSPF、IP、ARP。
14.Ping的整个过程。
ICMP报文是什么。
15.C/S模式下使用socket通信,几个关键函数。
16.IP地址分类。
17.路由器与交换机区别。
网络其实大体分为两块,一个TCP协议,一个HTTP协议,只要把这两块以及相关协议搞清楚,一般问题不大。
推荐书籍:
《TCP/IP协议族》
数据结构与算法
1.链表与数组。
2.队列和栈,出栈与入栈。
3.链表的删除、插入、反向。
4.字符串操作。
5.Hash表的hash函数,冲突解决方法有哪些。
6.各种排序:
冒泡、选择、插入、希尔、归并、快排、堆排、桶排、基数的原理、平均时间复杂度、最坏时间复杂度、空间复杂度、是否稳定。
7.快排的partition函数与归并的Merge函数。
8.对冒泡与快排的改进。
9.二分查找,与变种二分查找。
10.二叉树、B+树、AVL树、红黑树、哈夫曼树。
11.二叉树的前中后续遍历:
递归与非递归写法,层序遍历算法。
12.图的BFS与DFS算法,最小生成树prim算法与最短路径Dijkstra算法。
13.KMP算法。
14.排列组合问题。
15.动态规划、贪心算法、分治算法。
(一般不会问到)
16. 大数据处理:
类似10亿条数据找出最大的1000个数.........等等
算法的话其实是个重点,因为最后都是要你写代码,所以算法还是需要花不少时间准备,这里有太多算法题,写不全,我的建议是没事多在OJ上刷刷题(牛客网、leetcode等),剑指offer上的算法要能理解并自己写出来,编程之美也推荐看一看。
推荐书籍:
《大话数据结构》《剑指offer》《编程之美》
J2SE基础
1.九种基本数据类型的大小,以及他们的封装类。
java提供了一组基本数据类型,包括
boolean,byte,char,short,int,long,float,double,void.
同时,java也提供了这些类型的封装类,分别为
Boolean,Byte,Character,Short,Integer,Long,Float,Double,Void
类型字节表示范围包装类
byte(字节型)1-128~127Byte
short(短整型)2-32768~32767Short
int(整型)4-48~47Integer
long(长整型)8-808~807Long
float(浮点型)4-3.4E38~3.4E38Float
double(双精度型)8-1.7E308~1.7E308Double
char(字符型)2从字符型对应的整型数来划分,其表示范围是0~65535Charater
booealn(布尔型)1true或falseBoolean
2.Switch能否用string做参数?
在Java7之前,switch只能支持byte、short、char、int或者其对应的封装类以及Enum类型。
在Java7中,String支持被加上了。
3.equals与==的区别。
“==”比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】
equal用于比较两个对象的值是否相同【不是比地址】
【特别注意】Object类中的equals方法和“==”是一样的,没有区别,而String类,Integer类等等一些类,是重写了equals方法,
才使得equals和“==不同”,所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法。
"=="比"equal"运行速度快,因为"=="只是比较引用.
4.Object有哪些公用方法?
Object是所有类的父类,任何类都默认继承Object。
Object类到底实现了哪些方法?
(1)clone方法
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
主要是JAVA里除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递,我们有时候不希望在方法里讲参数改变,这是就需要在类中复写clone方法。
(2)getClass方法
final方法,获得运行时类型。
(3)toString方法
该方法用得比较多,一般子类都有覆盖。
(4)finalize方法
该方法用于释放资源。
因为无法确定该方法什么时候被调用,很少使用。
(5)equals方法
该方法是非常重要的一个方法。
一般equals和==是不一样的,但是在Object中两者是一样的。
子类一般都要重写这个方法。
(6)hashCode方法
该方法用于哈希查找,可以减少在查找中使用equals的次数,重写了equals方法一般都要重写hashCode方法。
这个方法在一些具有哈希功能的Collection中用到。
一般必须满足obj1.equals(obj2)==true。
可以推出obj1.hash-Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。
不过为了提高效率,应该尽量使上面两个条件接近等价。
如果不重写hashcode(),在HashSet中添加两个equals的对象,会将两个对象都加入进去。
(7)wait方法
wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。
wait()方法一直等待,直到获得锁或者被中断。
wait(longtimeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(7.1)其他线程调用了该对象的notify方法。
(7.2)其他线程调用了该对象的notifyAll方法。
(7.3)其他线程调用了interrupt中断该线程。
(7.4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
(8)notify方法
该方法唤醒在该对象上等待的某个线程。
(9)notifyAll方法
该方法唤醒在该对象上等待的所有线程。
5.Java的四种引用,强弱软虚,用到的场景。
(1)强引用
以前我们使用的大部分