1. == 和 equals 的区别是什么?
==应用于基本数据类型,如果==应用与引用数据类型那么就是在比较两个引用是否相同
equals是Object类里的一个方法 绝大多数的类会重写它。 各自类有各自类的相等的方案。
2. 用最有效率的方法算出2的32次方等于几?
32 1<<5 小心数字溢出
3. 循环利用标签跳出指定的层级的循环
给外层循环添加一个标签,语法是 标签名: 内层循环break后面跟标签名。
4. new的对象存放在哪,变量存放在哪?
5. 什么是面向对象?你怎么理解面向对象?展开面向对象特点分别解释:
封装、继承,代码的重用性、多态
(1)面向对象是基于面向过程的一种编程思想
(2)基于可见性的封装,面向不同的场景,我们的成员和方法、类的可见性是不一样的
(3)继承与实现 extends
提升了代码的扩展性。提升了代码的重用性
(4)多态
一个对象有多重状态
一个方法有多重状态,对象的多种状态就是各种转型,方法的多种状态就是重载
6. 方法的值传递和引用传递的区别?
基本数据类型还是引用数据类型,作为方法的参数的时候的不同。
String属于引用数据类型,属于引用传递,内部是基于char[]数组
7.什么是重载和重写?(Overload和Override的区别?)
重载:方法的多态
重写:父子类关系,重写父类的方法
8. 简述super和this关键字
super和this必须是第一行
super指代的是父类的对象,是父类的构造器
this指代的是当前类的对象,是当前类的构造器
9. String、StringBuffer、StringBuilder的区别
StringBuffer:线程安全。它几乎所有的常用方法都被synchronized修饰
也正因为如此,它在多线程的情况下,效率不佳
StringBuilder:线程不安全。因为它几乎所有的常用方法都不加锁
也正因为如此,它在多线程情况下,不安全,效率就高
String不可变。而后两者可变。
因此,一些拼接操作,尽可能用后两者去append()
而不是用string = string + '1123';
10. union和unionall的区别
union去重,unionall不去重
它俩都是结果集的纵向链接
SQL会产生一个ResultSet => List<>
表里的字段名和类里面的成员名不对应怎么办?
select id as sid
11. MySQL的内连接、左连接、右连接有什么区别?
表A 表B
SQL是集合的操作
内连接:AB的交集
左连接:A里面的数据全要,即便没连接上也要,连上的数据原封不动,没连上的显示null
右连接:B里面的数据全要,即便没连接上也要,连上的数据原封不动,没连上的显示null
12. 解释一下什么是IOC(Inversion of Control)?
控制反转 把组装对象的控制权交出去。交给使用的工具
13. 解释一下Spring的DI(Dependency Injection)?
依赖注入
你用什么对象,Spring就给你什么对象,不用自己new
Spring负责管理所有的对象,当你用一个对象的时候,Spring把对象给你。这样如果Spring认为这个对象只需要new一次。那么你每一次都获得相同的对象,极大的节约了堆内存的空间。
14. 解释一下什么是AOP()?
面向切面编程
如果一个方法要运行,如果用反射来调用这个方法的运行
15. Spring AOP的五大通知?
环绕方法、事前方法、异常发生时的方法、事后方法、返回时方法
16. 数据库事务的特性?
(1)原子性:一个事务时数据库执行的基本单元,不可再分,内部封装的动作,要么都执行,要么都不执行,不存在只执行一部分
(2)一致性:数据库的事务会把数据库中的数据从一个一致性状态,转变为另一个一致性状态。比如:转帐前后,各账户总额不变
(3)隔离性:数据库执行事务的时候,事务之间彼此不可见,比如说,一个事务更新一个字段,另一个事务读不到
(4)持久性:数据库执行事务,一旦提交,不可回滚,它对数据库中的数据的影响是永久的
17. 什么是二分查找,基本的编程思路是什么?
每一次比较,都把一半的数据淘汰掉
也叫折半查找
时间复杂度:O(log(n))
18. Java容器(集合)都有哪些?它们的区别是什么?
List Set Map
List是线性的,操作依靠角标index
Set是无序的,遍历使用迭代器
Map是key-value键值对,使用put、get操作
19. Java中都有哪些引用类型?强软弱虚
强引用:jvm宁可自己异常,也不回收
软引用:jvm内存紧张后,找软引用回收(动态缓存)
弱引用:jvm内存即便不紧张,发现了也回收
虚引用:jvm不认为是引用的引用,随时可能被回收
20. 文件上传怎么处理?和普通表单有什么区别?
表单的格式:enctype=multipart/form-data
后端用流接收
文件上传还可以不指定enctype,直接当成String处理
一个文件就是一个String(Base64的String)
获取到文件的base64,还原为010101,用流写入到服务器的文件中