集合是必问的,写在前面
1.说一下集合
(1)Java中常见集合分为三大类,Set,List,Map;
(3)Set集合是无序的,不可重复的,常见实现类有HashSet,TreeSet;
(2)List集合是有序的,可重复的,常见实现类有ArrayList,LinkedList,Vector;ArrayList查询快,但是线程不安全,LinkedList增删快
(4)Map集合用来存储key-value键值对,其中key是无序不可重复的,常见实现类有HashMap,TreeMap,Hashtable。HashMap是无序,非线程安全的,TreeMap是有序的
1.HashMap 和 Hashtable 有什么区别?
存储:HashMap 允许 key 和 value 为 null,⽽ Hashtable 不允许。
线程安全:Hashtable 是线程安全的,⽽ HashMap 是⾮线程安全的。
(推荐使⽤:在 Hashtable 的类注释可以看到,Hashtable 是保留类不建议使⽤,推荐在单线程环境下 使⽤ HashMap 替代,如果需要多线程使⽤则⽤ ConcurrentHashMap 替代)
2.ArrayList 和 LinkedList 的区别是什么?
数据结构实现:ArrayList 是动态数组的数据结构实现,⽽ LinkedList 是双向链表的数据结构实现。
随机访问效率:ArrayList查询快,但是线程不安全,LinkedList增删快(ArrayList ⽐ LinkedList 在随机访问的时候效率要⾼,因为 LinkedList 是线性的数据 存储⽅式,所以需要移动指针从前往后依次查找。 增加和删除效率:在⾮⾸尾的增加和删除操作,LinkedList 要⽐ ArrayList 效率要⾼,因为 ArrayList 增删操作要影响数组内的其他数据的下标。 综合来说,在需要频繁读取集合中的元素时,更推荐使⽤ ArrayList,⽽在插⼊和删除操作较多时,更推荐 使⽤ LinkedList)
3.HashSet 的实现原理/HashSet和HashMap的关系
HashSet 是基于 HashMap 实现的,HashSet 底层使⽤ HashMap 来保存所有元素,因此 HashSet 的实现 ⽐较简单,相关 HashSet 的操作,基本上都是直接调⽤底层 HashMap 的相关⽅法来完成,HashSet 不允许重复的值
static关键字的作用(也是必问重点):
1.static成员变量
静态成员变量属于类,非静态成员变量属于对象
2.static成员方法
静态成员方法属于类,不属于对象,因此不需要创建对象就可以被调用
非静态成员方法需要通过对象来调用
3.static代码块
所有的静态代码块只能在JVM加载类时被执行一次
4.static内部类
静态内部类不能访问外部类的实例成员(普通的成员变量和方法),只能访问外部类的类成员(静态成员变量和静态方法),静态内部类的非静态成员方法也不能访问外部类的实例成员
不依赖于外部类实例而被实例化
1.JDK 和 JRE 有什么区别?
JDK:Java Development Kit 的简称,java 开发⼯具包,提供了 java 的开发环境和运⾏环境。 JRE:Java Runtime Environment 的简称,java 运⾏环境,为 java 的运⾏提供了所需环境。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试 和分析的⼯具。简单来说:如果你需要运⾏ java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程 序,需要安装 JDK
2.== 和 equals 的区别是什么?(多次问到)
== 对于基本类型来说是值⽐较,对于引⽤类型来说是⽐较的是引⽤;⽽ equals 默认情况下是引⽤ ⽐较,只是很多类重写了 equals ⽅法,⽐如 String、Integer 等把它变成了值⽐较,所以⼀般情况下 equals ⽐较的是值是否相等
3.三种修饰符
public、具有最大访问权限,外部类可以访问
private、访问权限仅限于类的内部,外部类不可以访问
protected保护子类,子类可以用它修饰的成员,其他的不可以
4.八种基本数据类型
byte、short、long、int
float、double、boolean、char
5.int和integer区别
1.int基本数据类型,integer是包装类
2.integer变量必须实例化才能使用,而int变量不需要
3.integer实际是对象的引用,int是直接存储数据值
6.char和varchar区别
1、最大长度:
char最大长度是255字符,varchar最大长度是65535个字节。
2、定长:
char是定长的,不足的部分用隐藏空格填充,varchar是不定长的。
3、空间使用:
char会浪费空间,varchar会更加节省空间。
4、查找效率:
char查找效率会很高,varchar查找效率会更低。
5、尾部空格:
char插入时可省略,vaechar插入时不会省略,查找时省略。
7.堆和栈的区别
(72条消息) 一文读懂堆与栈的区别_恋喵大鲤鱼的博客-CSDN博客_堆和栈的区别
8.break和continue的区别
break终止循环
continue跳出当次循环,继续进入下一次循环
9.类与对象的区别
1.类是模板,对象是实例
2.对象是一个实体,具有状态和行为
3.对象可以是有形的(物理)实体,也可以是无形的(逻辑)实体
类是一个逻辑实体
4.对象通过关键字new创建,类通过关键字class声明
5.类只需声明一次,对象可多次
6.对象在创建时就会占用内存,类在创建时不占用任何内存
7.创建对象的方法有很多种,如new关键字,newInstance()方法,clone()方法,反序列化
定义类只有使用class关键字这一种方法
9.设计模式
Java设计模式面试题(1~9题)_java364100的博客-CSDN博客_java的设计模式面试题
10.谈谈你对Spring的理解
1)Spring是当前主流的开发框架,是一个轻量级开源框架,用来封装Java对象,以IoC和AOP为内核,具有简单、可测试和松耦合等特点
2)IoC(控制反转),通过控制反转达到松耦合的目的,将类的创建和依赖关系写在配置文件里,由配置文件注入,实现了松耦合
Spring提供了对IOC的良好支持,IOC是一种编程思想,是一种架构艺术,利用这种思想可以很好地实现模块之间的解耦,IOC也被称为DI,即依赖注入。
3)AOP(面向切面编程) 将安全,事务等于程序逻辑相对独立的功能抽取出来,利用spring的配置文件将这些功能插进去,实现了按照方面编程,提高了复用性
数据库
1.MySQL如何优化?
这个我还没弄懂,找了个链接可以看看:
(72条消息) java mysql优化,java面试(一)Mysql优化_滴水荥阳的博客-CSDN博客
2.针对简历中学生管理系统提问:
1.模糊查询
查询包含123的信息:%123%
2.查询河北省最高分
首先用group by按省份分组,然后用一个max()函数查询
非专业性提问(IT公司对这个关注的不多,仅有一家问过)
1.你认为培训和看B站学习哪个好?
(我当时很实在的回答说“看视频,因为不用交钱”,基于我是培训过一段时间的虽然那个老师讲的不咋样,但是我简历上是写有培训经历的,现在想想应该这么回答:)
培训,因为遇到问题可以当面请教老师同学,面对面解决问题更高效,且更深刻。B站虽然是免费的,但是遇到问题没有老师同学一起研究讨论,遇到问题解决起来很慢也很困难。
2.为什么看你简历上得过这么多奖,却没拿过奖学金?
因为大学的时间精力都放在做喜欢的事,不想为了奖学金去卷绩点,为了拿奖学金加量化而去参加各种没有意义的比赛。我在入学时就定下了要就业的目标,也有很多个人爱好,所以课余时间都用在学习相关技术上和发展个人爱好了。
介绍简历上某个项目怎么写的,某个功能怎么实现的
写在最后
Java基础、多态是重点,要尽量做到深刻掌握
面试前多看看面经和自己做过的项目,交流更自信一点