1、面向对象思想,三个特性
思想:区别于面向过程思想的针对程序的开发过程一步一步进行开发,面向对象是将程序当成一个对象进行分析并进行开发。
特性:继承,封装,多态
2、String的特点
1.String类对象的相等判断使用equals() 方法完成,“==”实现的是地址数值的比较。
2.字符串内容一旦声明则不可改变,String类对象内容的改变是依靠引用关系的变更实现的,创建一个新的对象进行引用,旧的对象若是没有被引用则等待回收。
3.String类有两种实例化方式,使用直接赋值可以不产生垃圾空间,并且可以自动入池,不要使用构造方法完成。
https://zhuanlan.zhihu.com/p/81869136
3、String是否可变,是否可继承,为什么?
都不行
https://blog.csdn.net/weixin_36380516/article/details/55539613
4、java八种基本数据类型及包装类详解
基本类型:short,int,long,double,flont,byte,char,boolean
将基本数据类型装箱起来就成了包装类,反过来就是拆箱,包装类是面向对象的。
基本数据类型 包装类
byte Byte
boolean Boolean
short Short
char Character
int Integer
long Long
float Float
double Double
https://blog.csdn.net/sinat_30973431/article/details/89332443
5、=和==和.equals()的区别
=是赋值符号,A=B,B赋值给A
==比较的是对象的地址
.equals()比较的是对象的值
https://zhidao.baidu.com/question/80665121.html
6、Object类有哪些常用方法
clone()
hashCode()
equals()
toString()
getClass()
wait()
wait(long)
wait(long,int)
notify()
notifyAll()
finalize()
https://blog.csdn.net/weixin_42387953/article/details/80750902
7、String的方法有哪些
equals():字符串是否相同
equalsIgnoreCase():忽略大小写后字符串是否相同
compareTo():根据字符串中每个字符的Unicode编码进行比较
compareToIgnoreCase():根据字符串中每个字符的Unicode编码进行忽略大小写比较
indexOf():目标字符或字符串在源字符串中位置下标
lastIndexOf():目标字符或字符串在源字符串中最后一次出现的位置下标
valueOf():其他类型转字符串
charAt():获取指定下标位置的字符
codePointAt():指定下标的字符的Unicode编码
concat():追加字符串到当前字符串
isEmpty():字符串长度是否为0
contains():是否包含目标字符串
startsWith():是否以目标字符串开头
endsWith():是否以目标字符串结束
format():格式化字符串
getBytes():获取字符串的字节数组
getChars():获取字符串的指定长度字符数组
toCharArray():获取字符串的字符数组
join():以某字符串,连接某字符串数组
length():字符串字符数
matches():字符串是否匹配正则表达式
replace():字符串替换
replaceAll():带正则字符串替换
replaceFirst():替换第一个出现的目标字符串
split():以某正则表达式分割字符串
substring():截取字符串
toLowerCase():字符串转小写
toUpperCase():字符串转大写
trim():去字符串首尾空格
https://www.cnblogs.com/ConstXiong/p/11808189.html
8、方法重载和方法重写
重载(overload) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同对方法进行重新载入。
重写(override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写。
https://blog.csdn.net/weixin_44502804/article/details/90523478
9、接口和抽象类有什么区别
(1)抽象类只能继承一个,但是可以实现多个接口
(2)接口和抽象类必须实现其中所有的方法,抽象类中如果有未实现的抽象方法,那么子类也需要定义为抽象类。抽象类中可以有非抽象的方法
(3)接口中的变量必须用 public static final 修饰,并且需要给出初始值。所以实现类不能重新定义,也不能改变其值。
(4)接口中的方法默认是 public abstract,也只能是这个类型。不能是 static,接口中的方法也不允许子类覆写,抽象类中允许有static 的方法
https://www.cnblogs.com/zzfpz/p/10990210.ht
10、常见异常有哪些
(1)数学运算异常
(2)空指针异常
(3)数组大小为负值异常
(4)数组下标越界异常
(5)数据格式异常
(6)输入类型不匹配异常
(7)方法不存在异常
(8)数据格式错误异常
(9)未找到类定义异常
(10)内存不足错误
(11)堆栈溢出错误
(12)线程结束
(13)未知错误
https://blog.csdn.net/geekmubai/article/details/82021888?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160431459719215646513606%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160431459719215646513606&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v28-1-82021888.first_rank_ecpm_v3_pc_rank_v2&utm_term=JAVA%E5%B8%B8%E8%A7%81%E9%94%99%E8%AF%AF%E7%B1%BB%E5%9E%8B&spm=1018.2118.3001.4449
12、Sql删除的区别(Drop、Truncate、Delete)
https://www.cnblogs.com/ypha/p/13711288.html
13、栈和队列的区别,栈和堆的区别
栈和队列的区别:
栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的。
栈是先进后出,队列是先进先出。
栈只允许在表尾一端进行插入和删除,队列只允许在表尾一端进行插入,在表头一端进行删除。
栈和堆的区别:
栈区:由编辑器自动分配释放,存放函数的参数值,局部变量的值等(基本类型值)。
堆区:由程序员分配释放,若程序员不释放,程序结束时可能有OS回收(引用类型值)。
栈(数据结构):一种先进后出的数据结构。
堆(数据结构):堆可以被看成是一棵树,如:堆排序。
https://www.cnblogs.com/jinbang/p/8658708.html
14、冒泡排序的原理
从数组第一个数开始,前一个和后一个进行比较,数小的往前,数大的往后,依次重复比较直到排序完成。
https://mp.weixin.qq.com/s?__biz=MjM5MTE1NTQ4Mg==&mid=2649732688&idx=1&sn=48a7b8eb37ad6628b1c3febd08f15f20&chksm=bea2c22589d54b33e2db7f65cb013e3a32c39a6cdeb3089a404a425d8c04507547dd426f848d&mpshare=1&scene=24&srcid=0813MJQ6b7ryDEtBBVutQwyH&sharer_sharetime=1603550477528&sharer_shareid=178d93c4c9c828257b7ae96e0478076b&ascene=14&devicetype=android-29&version=27001353&nettype=3gnet&abtest_cookie=AAACAA%3D%3D&lang=zh_CN&exportkey=AWRnjlzSsJar5yRZeay4%2FjQ%3D&pass_ticket=e9Qdn7r6x37ZKjbiX%2BK4gyqgslOZ92pf%2FPQM8Cd34t4DqFH%2B%2FGG0J%2BZPWvLC9Vhb&wx_header=1
15、Map遍历方式
(1)在for循环中使用entries()方法实现Map的遍历 (JavaScript)
(2)在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能上比使用entrySet较好
(3)通过Iterator迭代器遍历;
(4)通过键找值遍历,这种方式的效率比较低,因为本身从键取值是耗时的操作;
https://www.cnblogs.com/damoblog/p/9124937.html
16、List接口有哪些
(1)LinkedList
基于链表实现,链表内存是散列的,增删快,查找慢;
(2)ArrayList
基于数组实现,非线程安全,效率高,增删慢,查找快;
(3)Vector
基于数组实现,线程安全,效率低,增删慢,查找慢;
(4)Stack
Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。
https://blog.csdn.net/yangxingpa/article/details/81023138
https://www.cnblogs.com/jxxblogs/p/11561629.html
17、Set接口有哪些
(1)HashSet
底层是由 Hash Map 实现,不允许集合中有重复的值,使用该方式时需要重写 equals()和 hash Code()方法
(2)LinkedHashSet
继承于 HashSet,同时又基于 LinkedHashMap 来进行实现,底层使用的是 LinkedHashMap
(3)TreeSet
TreeSet是二叉树实现的,基于TreeMap,生成一个总是处于排序状态的set,内部以TreeMap来实现,不允许放入null值。它是使用元素的自然顺序对元素进行排序,或者根据创建Set时提供的 Comparator 进行排序,具体取决于使用的构造方法。
https://www.cnblogs.com/jxxblogs/p/11561629.html
18、遍历List
一般for循环,增强for循环和迭代器
https://blog.csdn.net/qq_40389276/article/details/100068468?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160622600119725255552813%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160622600119725255552813&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-9-100068468.first_rank_ecpm_v3_pc_rank_v2&utm_term=LIST%E9%81%8D%E5%8E%86&spm=1018.2118.3001.4449
19、遍历Set
迭代器方法、增强for、set.forEach、set.stream().forEach
https://www.cnblogs.com/chenxiaoge/p/13335454.html
20、枚举的作用是什么,为什么用枚举
https://blog.csdn.net/qq_41262587/article/details/106540292
21、封装类的equals()方法和object类中的equals()方法的区别
在String、Double等封装类中,已经重写(overriding)了Object类的equals()方法,于是有了另一种计算公式,是进行内容的比较。在Object类中是比较地址。
22、JAVA三种引用类型
数组,接口,类
23、JAVA迭代器
就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节。
https://www.cnblogs.com/zyuze/p/7726582.html
24、JAVA集合类
集合类型主要有3种:set(集)、list(列表)和map(映射)。