前言

第一次写文章,慢慢走在程序员的道路上,也阅读过好多前辈的博客,其中借用了大佬们的文章技术点,请多多包涵,有问题的家人们可以直接私信我,本人知错就改,未来请多多指教

文章目录

  • 前言
  • Jsd2205面试题
    • 一、Java 基础部分:
    • 二、数据库(MySQL)部分:
    • 三、JDBC&XML 部分:
    • 四、HTML/CSS/JavaScript 部分
    • 五、Servlet&Jsp 部分:
    • 六、框架部分

Jsd2205面试题

一、Java 基础部分:

1.什么是面向对象?面向对象有哪些特征?
以事物为驱动的编程思想。封装、继承、多态

2.说一下什么是 javaBean 规范:
(1)javabean 类必须是一个公共类,用 public 修饰
(2)属性都是私有的–private
(3)提供无参构造器
(4)属性应该通过一组存取方法(setXXX 和 getXXX 方法)来访问
(5)实现序列化接口(Serializable)

3.简述一下 java 基本数据类型及所占位数:
java 基本数据类型:4 类 8 种
逻辑型: boolean false/true (1byte 8bit)
字符型: char (2byte 16bit) 运算时按照 int 类型运算
整数型:

位数 运算规则
byte(1byte 8bit) 运算时按照 int 类型运算
short(2byte 16bit) 运算时按照 int 类型运算
int(4byte 32bit) 运算时按照 int 类型运算
long(8byte 64bit) 后缀为 L/l

注:整数类型的默认类型是 int 类型,也就是说整数类型的字面量都是 int 类型

浮点数型:

位数 后缀
float(4byte 32bit) 后缀为 F/f
double(8byte 64bit) 后缀为 D/d

注:浮点类型的默认类型是 double 类型除了基本数据类型,其他类型都是引用类型。

4.说出 9 个运行时异常:
RunTimeException
|——NullPointerException:空指针异常,操作一个空引用时出现此异常
|——ArrayIndexOutOfBoundsException:数组下标越界异常
|——ArithmeticException:算数运算时,被除数为 0 时触发的异常
|——ClassCastException:类型转换异常
|——NumberFormatException:数字格式化异常
|——SystemException:系统异常
|——ArrayStoreException:数据存储异常,将与数组类型不兼容的值赋值给数组元素时抛出的异常
|——EmptyStackException:堆栈为空时出现此异常
|——OutOfMemoryException:内存不足,通常发生于创建对象之时
注:异常 Exception 分为两大类:
编译时异常:编译期间要检查的;
运行时异常:编译期间不检查的。

5.说出 5 个常用的 java-api 包
java.lang、java.util、java.sql、java.text、java.io

6.abstract class 和 interface 有什么联系和区别?什么时候用抽象类?什么时候用接口?
联系:
(1)接口和抽象类都不能被实例化,用于被其他类实现和继承。
(2)接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
区别:
(1)接口只能定义静态常量,不能定义普通成员变量;抽象类则可以定义普通成员变量,也可以定义静态常量。
(2)接口不能包含构造器,抽象类可以包含构造器。(抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。)
(3)一个类最多只有一个直接父类,包括抽象类,但一个类可以实现多个接口,通过实现多个接口可以弥补 java 单继承的不足。
(4)抽象类可以有不是抽象的方法。接口中所有的方法都是抽象的(JDK1.8以后,接口中可以有static修饰的实例方法)。
当用于关系比较密切的对象时用抽象类,当为不相关的类提供通用功能时用接口。

7.String, StringBuffer StringBuilder 的区别?
String 是不可变的;StringBuffer 是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer。StringBuilder 是从 JDK1.5 开始提供的类,通常应该优先使用 StringBuilder 类,因为它支持所有与 StringBuffer 相同的操作,但由于它不执行同步,所以速度更快。
StringBuilder 是非线程安全,执行效率高;
StringBuffer 是线程安全执行效率较StringBuilder 低。

8.重写和重载的区别?
重写: 发生在父子类之间,方法名相同,参数列表(类型、个数、顺序)相同,当返回值为 8 种基本类型时应相同,为引用类型时,子类的返回值应小于等于父类,访问权限不能更封闭,抛出异常不能更宽泛。在程序运行时,根据对象的类型不同(而不是引用类型)而调用不同的版本。
重载: 发生在同一个类中,方法名相同,但是参数列表不同(类型不同或个数不同或参数的顺序不同),与返回值无关。在编译时,根据参数的个数和类型来决定绑定哪个方法。

9.IO 字节流 、字符流
IO 字节流:

Stream 操作
FileInputStream 和 FileOutputStream 对文件基本的输入输出操作
BufferedInputStream 和 BufferedOutputStream 加缓冲区的操作
DataInputStream 和 DataOutputStream 对基本操作的扩展, 可以一次读一种基本数据类型的数据.

IO 字符流:

Stream 操作
InputStreamReader 和 OutputStreamWriter 基本字符流,可以处理字符编码
BuffereReader 和 PrintWriter 可以一次读取一行数据

10.接口是否可继承接口? 抽象类是否可实现接口? 抽象类是否可继承实体类?
接口可以继承接口,并且可以继承多个其它接口;抽象类可以实现接口中的方法;抽象类可以继承实体类。

11.构造器 Constructor 是否可以被继承?是否可以被 Override?
构造器 Constructor 不能被继承,因此不能重写 Override,但可以被重载 Overload。

12.HashMap 和 HashTable 的区别:
(1)HashMap 允许空键值对(key 和 value 都允许出现 null 值),HashTable 不允许
(2)HashMap 不是线程安全的,HashTable 是线程安全的
(3)二者虽然都实现了 Map 接口,但是 HashMap 继承 AbstractMap 类,HashTable 继承Dictionary 类
(4)HashTable 的默认容量为 11,而 HashMap 为 16
(5)HashTable 扩容时,将容量变为原来的 2 倍加 1,而 HashMap 扩容时,将容量变为原来的 2 倍

13.final, finally, finalize 的区别
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally 是异常处理语句结构的一部分,表示总是执行。
finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

14.Collection 和 Collections 的区别。
Collection 是集合类的上级接口,继承于他的接口主要有 Set 和 List.
Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

15. ArrayList,Vector,LinkedList 存储性能和特性它们都实现 List 接口
ArrayList 和 Vector 都是基于数组实现的
LinkedList 基于双向循环链表(查找效率低,添加删除容易)
ArrayList 不是线程安全的而 Vector 是线程安全的,所以速度上 ArrayList 高于 Vector

16.说出 String 类中常用的 5 个方法
charAt() 返回指定索引处的 char 值
concat() 将指定字符串连接到此字符串的结尾
length() 返回此字符串的长度
split() 根据给定正则表达式的匹配拆分此字符串
trim() 返回字符串的副本,忽略前导空白和尾部空白.
indexOf() 返回指定字符的索引
subString() 截取字符串

17.用一句话总结一下冒泡排序,并写出相应的代码。
依次比较相邻的两个数,将小数放在前面,大数放在后面

for (int i=0;i<ary.length-1;i++){for (int j=0;j<ary.length-i-1;j++){ if (ary[j]>ary[j+1]){ int t = ary[j]; ary[j]=ary[j+1]; ary[j+1]=t;}}
}

18.实现线程安全的两种方式
1)synchronized 方法:通过在方法声明中加入 synchronized 关键字来声明 synchronized 方法。
2)synchronized 块:通过 synchronized 关键字来声明 synchronized 块。

19.实现多线程的两种方式
1)继承 Thread 类
2)实现 Runnable 接口
优先选择实现 Runnable 接口,因为比较灵活。

20.说一下“==”和 equals()方法在字串变量操作中的不同?
”==”比较的是两个字符串对象的地址,equals()是比较的两个字符串的具体值。

21. sleep()和 wait()有什么区别?
sleep 是线程类(Thread)的方法,导致此线程暂停,然后执行给定时间,让出 cpu 给其他线程,但不会释放对象锁,时间到了自动恢复.
wait 是 Object 类的方法,对此对象调用 wait 方法导致本线程放弃对象锁,只有调用 notify 方法(或 notifyAll)后本线程才能进入等待运行状态。

22.&与&&的区别?
& 位运算符,非短路逻辑运算符,它会把所有条件执行完毕之后,才会返回结果
&& 逻辑运算符(and):短路运算符,遇到不符合条件,立即终止程序的执行

23. error 和 exception 的区别?
error 表示系统级的错误和程序不必处理的异常,是 java 运行环境中的内部错误或者硬件问题。比如:内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由 Java 虚拟机抛出的。
exception 表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。

24.遍历文件夹下所有.java 的文件?

public void listFiles(String path){File dir = new File(path);File files [] = dir.listFiles(new FileFilter(){ public boolean accept(File f){ return f.getName().endWith(".java");}});for(File file : files){System.out.println(file.getName());}
}

25.描述一下 JVM 加载 class 文件的原理机制?
JVM 中类的装载是由 ClassLoader 和它的子类来实现的。ClassLoader 是一个重要的 Java 运
行时系统组件,它负责在运行时查找和装入类文件,其实质是把类文件从硬盘读取到内存中。

26.同步和异步有何异同?
同步:上公交,排队
异步:同时运行,互不干扰

27.阐述一下 Collection 接口包含哪些子集?分别有什么区别?实现类分别是什么?
list 和 set。
List:有序,可重复。Set:无序,不可重复
List 实现类:ArrayList----按顺序存放数据的数组 LinkedList-----按顺序存放数据的链表
Set 实现类:HashSet----根据 HashCode()和 equals()方法来判断是否有重复
TreeSet:通过实现 Comparable 和 Comparator 接口而具有排序功能的集合

28.什么是 Map?实现类是什么?有什么区别?
Map 中存放是 Key 和 value 的键值对。
实现类是 HashMap(查询速度快,非线程安全的)和 TreeMap(查询速度慢,元素的排列顺序是不固定的)和 Hashtable(线程安全的,效率慢)。
遍历 key 方法:keySet(),
遍历 value 方法:values(),
遍历 entry 键值对方法: entrySet()。

29.StringBuilder 类的常用方法?
append():追加字符串
insert():插入字符串
delete():删除字符串
replace():替换字符串
reverse():字符串反转

30.abstract 的 method 是否可同时是 static,是否可同时是 synchronized?
都不能

31.数组有没有 length()这个方法? String 有没有 length()这个方法?
数组没有 length()这个方法,有 length 的属性。
String 有 length()这个方法。

32.启动一个线程是用 run()还是 start()?
启动一个线程是调用 start()方法。

33.构造器 Constructor 是否可被 override?
构造器 Constructor 不能被继承,因此不能重写,但可以被重载。

34.是否可以从一个 static 方法内部发出对非 static 方法的调用?
不可以,如果其中包含对象的 method(),不能保证对象初始化.

35.在 java 中怎么设定时间的格式?
用 SimpleDateFormat 里的 format 方法

36.什么是反射?
反射是 Java 提供的动态检查机制,动态的检查对象和类,分析出对象的属性、类的属性、类的方法,可以进一步动态加载类、动态创建对象、动态访问属性和方法。

37. 简述 ArrayList ,Vector ,LinkedList 的存储性能和特性
它们都实现 List 接口
ArrayList 和 Vector 都是基于数组实现的
LinkedList 基于双向循环链表(查找效率低,添加删除容易)
ArrayList 不是线程安全的,而 Vector 是线程安全的,所以速度上 ArrayList 高于 Vector

38.创建对象有哪几种方式?
(1)用 new 语句创建对象
(2)运用反射 newInstance()方法
(3)调用对象的 clone()方法
(4)运用反序列化调用 readObject()方法。

39.什么是回调函数?
某个程序 S(Student.main)调用服务程序 A(Arrays)中的某个方法(sort),服务程序 A 的 sort 方法在某个时候反过来调用 S 的某个方法(compareTo),这种情况下,compareTo 叫做 S 的回调方法。

40.web 三要素?
浏览器、服务器、HTTP 协议

41.JVM、JRE和JDK的关系
JVM
Java Virtual Machine是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。
JRE
Java Runtime Environment包括Java虚拟机和Java程序所需的核心类库等。如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JDK
Java Development Kit是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK,就无需再单独安装JRE了。

42.访问修饰符
public 公共的;protected 受保护的; default 默认的;private 私有的;

43.break ,continue ,return 的区别及作用
break 结束当前的循环体
continue 跳出本次循环,继续执行下次循环-
return 结束当前的方法,直接返回

44.成员变量与局部变量的区别有哪些
成员变量:方法外部,类内部定义的变量
局部变量:类的方法中的变量。

作用域
成员变量:针对整个类有效。
局部变量:只在某个范围内有效。

存储位置
成员变量:存储在堆内存中。
局部变量:存储在栈内存中。

生命周期
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:在方法被调用,或者语句被执行的时候存在,当方法调用完,或者语句结束后,就自动释放。

初始值
成员变量:有默认初始值。
局部变量:没有默认初始值,使用前必须赋值。

使用原则
在使用变量时需要遵循的原则为:就近原则
首先在局部范围找,有就使用;接着在成员位置找。

二、数据库(MySQL)部分:

1.如何创建表?
create table 表名(字段 1 名类型,字段 2 名类型,字段 3 名类型);

2.查看表结构?
desc 表名

3.修改表名?
rename 旧名 to 新名。

4.修改表结构,添加一列信息?
alter table 表名 add 字段名 数据类型;

5.修改表结构,删除一列信息?
alter table 表名 drop 字段名;

6.修改字段名和类型?
alter table 表名 change 原字段名 新字段名 新类型

7.修改字段类型和位置?
alter table 表名 modify 字段名 类型 位置(first/after ***);

8.编码集相关设置:
(1)创建数据库时设置编码集:
create database db1 character set utf8;
(2)建表时设置编码集:
create table 表名(字段 1 名类型,字段 2 名类型,字段 3 名类型) charset=utf8;
(3)修改数据库的编码集:
alter database 库名 character set utf8;
(4)修改表的编码集:
alter table 表名 charset=gbk;

9.模糊查询使用什么关键字?
like

10.数据库中用于统计返回记录的行数的函数是什么?
count

11.数据库中排序用什么?分组用什么?
order by 、group by

12.说出几个常用的约束?
主键(primary key)、外键(foreign key)、唯一(unique)、非空(not null)、自增(auto_increment)

13.怎么把字符串转换成日期格式?
str_to_date()

14.数据库中怎么格式化日期?
date_format()

15.怎么去除字符串的重复信息?
distinct

16.举出几个常用的聚合函数?
avg()、sum()、count()、max()、min()

17.在一个千万级的数据库查寻中,如何提高查询效率?
a.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
b.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,
c.并不是所有索引对查询都有效,SQL 是根据表中数据来进行查询优化的,当索引列有大量数据重复时,查询可能不会去利用索引
d.避免频繁创建和删除临时表,以减少系统表资源的消耗。
e.应尽量避免在 where 子句中使用!=或<>操作符、使用 or 来连接条件,否则将使引擎放弃使用索引而进行全表扫描。
f.尽量不要使用模糊查询
g.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”。

18.删除一张表中所有数据的方式?
1.truncate 删除内容,不删除定义,释放空间
2.delete 删除内容,不删除定义,不释放空间 truncate 比 delete 速度快,且使用的系统和事务日志资源少。delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。

19.索引(index)
相当于书签,能够提高数据的访问效率
注:主键列自动创建索引(聚集索引),其他列必须手动创建索引(非聚集索引)。

20.视图(view)
虚拟的存在于数据库中。
用到视图的时候,系统会自动搜索数据库中的表,数据都是从表中取到的,并不是从视图中直接拿到的。

21.什么是事务?事务的特性是什么?
事务,是指数据库中作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。事务默认是自动提交。
事务的特性:ACID(原子性、一致性、隔离性、持久性)。
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

22.什么是批处理?
批处理指的是在一次操作中执行多条 SQL 语句。
addBatch():添加要执行的语句
executeBatch():获得批处理的结果

23.数据库三范式?
第一范式是指在关系模型中,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。简而言之,第一范式就是无重复的域。

第二范式要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。

第三范式,在第二范式的基础上,任何非主属性不依赖于其它非主属性(在第二范式基础上消除传递依赖)。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足第二范式的基础上,任何非主属性不得传递依赖于主属性。

三、JDBC&XML 部分:

1. jdbc 连接数据库的步骤
1.注册驱动 Class.forName(“”);
2.获得连接 Connection conn=DriverManager.getConnection(“”);
3.创建声明(Statement/PreparedStatement 对象)
4.执行 sql 语句,获得结果集(ResultSet),进行结果集的处理
5.关闭结果集
6.关闭声明
7.关闭连接,释放资源

2. Statement 和 PreparedStatement 的区别
1)Statement 是 PreparedStatemnet 的父类
2)Statement 是直接发送 sql 语句到数据库,事先没有进行预编译,PreparedStatement 会将 sql 进行预编译,当 sql 语句要重复执行时,数据库会调用以前编译好的 sql,所以PreparedStatement 在性能方面会更好
3)PreparedStatement 在执行 sql 时,对传入的参数进行强制类型转换,以保证数据格式与底层数据库格式一致。
4)PreparedStatement 相对于 Statemnet 要安全一些,可以有效防止 sql 注入.

3. JAVA 中如何进行事务的处理?
setAutoCommit():设置是否自动提交事务,默认为自动提交事务,即为 true。
commit():提交事务;
rollback():回滚事务。

4.数据库连接池的工作机制:
J2EE 服务器启动的时候,会创建一定数量的池连接,并维持不少于此数量的池连接。程序需要时,池驱动程序会返回一个未使用的池连接并将其标记为忙。如果当前没有空闲连接,池驱动会新建一批,数量由配置参数决定。当调用池连接完成后,池驱动将此连接标记为空闲,其他调用就可以使用这个连接。

四、HTML/CSS/JavaScript 部分

1.一个完整的网页由结构、表现、行为组成。
结构指 HTML、XHTML、XML 等
表现指 CSS 样式
行为指 脚本(JS)

2.什么是 HTML?
超文本标记语言。

3.Html 基本结构:

<html> <head><title></title></head><body></body></html>

4.设置隐藏文本框:

<input type="hidden" name="id">

设置只读文本框:

<input type="text" readonly="readonly" name="username">

5. ” == ” 和” === ”有什么区别?

== : 等于 比较的是值

=== :绝对等于 不仅比较值,还要比较类型

6.获得对象: document.getElementById(“id”);
获得对象的值: document.getElementById(“id”).value

7.文本元素包括什么?
标题元素 段落元素 列表元素 分区元素 行内元素

8.怎么引入一个 js 文件?怎么引入一个 css 文件?
在 script 中使用 src;使用 link

9. Undefined:未定义
(1)声明但没有赋值
(2)没有声明的变量

五、Servlet&Jsp 部分:

1.servlet 的生命周期
(1)web 容器加载 servlet,生命周期开始。
(2)通过调用 servlet 的 init()方法进行 servlet 的初始化。
(3)通过调用 service()方法实现,根据请求的不同调用不同的 doGet()或者 doPost()方法。
(4)结束服务,web 容器调用 servlet 的 destroy()方法。

2.请简单阐述什么是 Servlet?什么是 jsp?二者有什么区别与联系?
Servlet:全称 Java Servlet,是用 Java 编写的服务器端程序。其主要功能在于交互式的浏览和修改数据,生成动态 Web 内容。
Jsp:全称 Java Server Page,是 Sun 公司提供的一种服务器端动态页面技术规范。
联系:jsp 是 Servlet 技术的扩展,其本质就是 Servlet,jsp 经编译后形成“Servlet 类”。
区别:
1)Servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 HTML 里分离开来。
而 JSP 的情况是 Java 和 HTML 可以组合成一个扩展名为.jsp 的文件。
2)jsp 更擅长于页面显示,Servlet 更擅长于逻辑控制。
3)jsp 有内置对象,Servlet 没有。

3 .jsp 有哪些内置对象?作用分别是什么?
答:JSP 共有以下 9 种基本内置组件:
(1)request 客户端请求,此请求包含来自 GET/POST 的请求参数
(2)response 响应客户端的请求的有关信息。
(3)session 指客户端与服务器的一次会话
(4)out 是向客户端输出内容常用的对象
(5)page 它指当前 JSP 页面本身,有点类似于 this
(6)application 实现用户间的数据共享,可以改变全局变量
(7)exception 它是一个异常对象,当一个页面的运行过程中发生异常时产生
(8)pageContext 它提供了对 JSP 页所有对象及名字空间的访问。
(9)config 它是在一个 Servlet 初始化时,JSP 引擎向它传递信息用的。

4.转发(forward)和重定向(redirect)的区别?
forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect 就是服务端根据逻辑,发送一个 302 状态码和 Location,告诉浏览器重新去请求那个地址。
具体区别如下:
(1)转发在服务器端完成的;重定向是在客户端完成的
(2)转发的速度快;重定向速度慢
(3)转发的是同一次请求;重定向是两次不同请求
(4)转发不会执行转发后的代码;重定向会执行重定向之后的代码
(5)转发地址栏没有变化;重定向地址栏有变化
(6)转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成

5.get 和 post 的区别?
1)get 参数通过 url 传递,post 放在 request body 中;
2)get 传输的数据量小,这主要是因为受 URL 长度限制;而 post 可以传输大量的数据,所以在上传文件只能使用 Post;
3)get 比 post 更不安全,因为参数直接暴露在 url 中,所以不能用来传递敏感信息。

6.Tomcat 常用的部署方式有哪些?
(1)在 conf\Catalina\localhost 目录下添加.xml 配置文件
(2)修改 server.xml 文件进行部署
(3)将项目拷贝到 webapps 目录下

7.什么是 cookie?什么是 session?二者的区别是什么?
cookie(cookies)是服务器在本地机器上存储的小段文本,并随每一个请求发送至同一服务器,是在客户端保持状态的方案。
session 是一次浏览器和服务器的交互的会话,是在一次会话中解决 2 次 HTTP 的请求之间的关联问题,让它们产生联系,让两个页面都能读取到这个全局的 session 信息。
区别:
1、Cookie 和 Session 都是会话技术,Cookie 是运行在客户端,Session 是运行在服务器端;
2、session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象;
3、Cookie 有大小限制(单个 cookie 保存的数据不能超过 4k),而且浏览器在存 cookie 的个数也有限制(很多浏览器都限制一个站点最多保存 20 个 cookie);Session 没有大小限制,和服务器的内存大小有关;
4、Cookie 有安全隐患,通过拦截或本地文件找得到你的 cookie 后可以进行攻击;
5、Session 是保存在服务器端上会存在一段时间才会消失,如果 session 过多会增加服务器的压力。

六、框架部分

1. 什么是 MVC?MVC 分别代表什么?
MVC 是一种编程模式。
M——Model——模型(封装业务逻辑)
V——View——视图(实现表示逻辑)
C——Controller——控制器(协调模型和视图)

2.使用 MVC 的目的是什么?优点,缺点各是什么?
使用 MVC 思想来设计软件,最根本的目的是为了实现模型的复用。
1)优点:
①可以实现模型的复用。
②模型或者视图发生改变,不会相互影响。
③方便测试(比如,将业务逻辑写在 Java 类里面,可以直接测试,如果写在 Servlet 里面,必须要先部署才能测试)。
2)缺点:使用 MVC 后,
①会增加设计的难度。
②代码量也会增加。
③相应地也会增加软件的开发成本。

3.介绍一下 SpringMVC 的工作原理
1).SpringMVC 将所有的请求都提交给 DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。
2).DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的 Controller.
3).DispatcherServlet 将请求提交到目标 Controller
4).Controller 进行业务逻辑处理后,会返回一个 ModelAndView
5).DispatcherServlet 查询一个或多个 ViewResolver 视图解析器,找到 ModelAndView 对象指定的视图对象
6).视图对象负责渲染返回给客户端。

4. 什么是 Spring?为什么要用 spring?
Spring 是一个开源的轻量级的 IOC 和 AOP 框架。其本质是管理软件中的对象,即创建对象和维护对象之间的关系。
IOC(控制反转):是指程序中的对象的获取发生反转,把创建对象的权利交给框架,是框架的重要特征。它包括依赖注入和依赖查找。
AOP(面向切面编程),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

5.拦截器(Interceptor)和过滤器(Filter)的区别?
1)拦截器是 Spring MVC 中的,仅当使用这个框架时可以使用,而过滤器是 Java EE 体系的,无论使用哪种框架,都可以使用过滤器;
2)过滤器会在所有的 Servlet 之前运行,而拦截器会在 Spring MVC 中的 DispatcherServlet 之后运行,所以,过滤器在项目中可以过滤任何请求(只要是配置了对应的路径的),而拦截器只能在 DispatcherServlet 处理的请求的基础之上进行拦截。

6.Spring 和 SpringMVC 是什么关系?
Spring 是轻量级开源框架,是为了解决企业应用开发的复杂性,其核心是:IOC,AOP.
springMVC 是基于 Spring 实现的一个表示层应用组件,其人为的把项目分成 Model、View、Controller 三层,方便代码的维护和管理。

7.什么是 mybatis?使用 mybatis 的好处是什么?
答:封装了 JDBC 的代码。
好处:使用简单的 xml 或注解做配置和定义映射关系,sql 语句可以独立封装在一个 xml 映射文件里。

8.Java 中都有哪些常用的设计模式?
Factory(工厂模式),Singleton(单例模式),Proxy(代理模式)等。

9.spring 的优点?
1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦
2.可以使用容易提供的众多服务,如事务管理,消息服务等
3.容器提供单例模式支持
4.容器提供了 AOP 技术,利用它很容易实现如权限拦截,运行期监控等功能
5.容器提供了众多的辅助类,能加快应用的开发
6.spring 对于主流的应用框架提供了集成支持,如 hibernate,JPA,Struts 等
7.spring 属于低侵入式设计,代码的污染极低
8.独立于各种应用服务器
9.spring 的 DI 机制降低了业务对象替换的复杂性
10.Spring 的高度开放性,并不强制应用完全依赖于 Spring,开发者可以自由选择 spring 的部分或全部

10.什么是 DI 机制?
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在 spring 中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由 spring 来完成,然后注入调用者,因此也称为依赖注入。
spring 以动态灵活的方式来管理对象, 注入的两种方式:设置注入和构造注入。
设置注入的优点:直观,自然
构造注入的优点:可以在构造器中决定依赖关系的顺序。

11.什么是 AOP?
面向切面编程(AOP)完善 spring 的依赖注入(DI),面向切面编程在 spring 中主要表现为两个方面:
1.面向切面编程提供声明式事务管理
2.spring 支持用户自定义的切面
面向切面编程(aop)是对面向对象编程(oop)的补充,面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
AOP 从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop 是静态的抽象,
AOP是动态的抽象,是对应用执行过程中的步骤进行抽象,从而获得步骤之间的逻辑划分。

12.AOP框架具有的两个特征:
1.各个步骤之间的良好隔离性 2.源代码无关性
4. 应用服务器有哪些:weblogic ,jboss ,tomcat

13.什么是 Spring Boot?
Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式处理方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

14.Spring Boot 需要独立的容器运行吗?
可以不需要,内置了 Tomcat/ Jetty 等容器。

15.开启 Spring Boot 特性有哪几种方式?
1)继承 spring-boot-starter-parent 项目
2)导入 spring-boot-dependencies 项目依赖

16.运行 Spring Boot 有哪几种方式?
1)打包用命令或者者放到容器中运行
2)用 Maven/ Gradle 插件运行
3)直接执行 main 方法运行

17.Spring Boot 可以兼容老 Spring 项目吗,如何做?
可以兼容,使用@ImportResource 注解导入老 Spring 项目配置文件。

18.springboot 读取配置文件的方式
springboot 默认读取配置文件为 application.properties 或者 application.yml

19.RequestMapping 和 GetMapping 的不同之处在哪里?
RequestMapping 具有类属性的,可以进行 GET,POST,PUT 或者其它的注释中具有的请求方法。
GetMapping 是 GET 请求方法中的一个特例。它只是 ResquestMapping 的一个延伸,目的是为了提高清晰度。

20.SpringBoot 框架的优点(为什么要使用 SpringBoot 框架):
1.创建独立的 Spring 应用程序
2.嵌入的 Tomcat,无需部署 WAR 文件
3.简化 Maven 配置
4.自动配置 Spring
5.去除了大量的 xml 配置文件

预祝家人们前程似锦,未来可期,面试成功!!!

Jsd2205面试题相关推荐

  1. mysql关于时间的面试题,mysql时间设置默认值MySQL常见面试题

    1.limit(选出10 到20 条) select * from students order by id limit 9,10; 2.MySQL 会使用索引的操作符号 =,>,=,betwe ...

  2. C++ 笔记(33)— C/C++ 程序员常见面试试题深入剖析

    1. 找错题 试题1: void test1() {char string[10];char* str1 = "0123456789";strcpy(string, str1); ...

  3. 前端面试题笔记 2021.8.26

    2021.8.26学习笔记 如果需要匹配包含文本的元素,用下面哪种方法来实现? A. text() B. contains() C. input() D. attr(name) 正确答案: B tex ...

  4. andorid 启动模式面试题

    现在有四个activity a,b,c,d ,设置a为标准模式,b为singletop模式 c设置singletask模式,d设置SingleInstance 模式 a启动b ,b 启动 c ,c启动 ...

  5. java 关键字(面试题)

    学而时习之,温故而知新. 今天群里有人问java中true ,false 是关键字吗, 这里记录下,不是关键字,我还特意翻看之前的书看看 下面是 Java 语言保留使用的 50 个关键字: 关键字 g ...

  6. Kotlin的几个面试题

    今天去自己心仪的公司去面试,本来信心满满,结果面试下面自己深感能力不足,哎,错失了一次这么好的机会 不过还是感谢能给自己这次面试的机会 1 说一下Kotlin的伴生对象(关键字companion使用要 ...

  7. 浙江大学数学专业考研试题参考解答

    浙江大学2009年数学分析考研试题参考解答 浙江大学2010年数学分析考研试题参考解答 浙江大学2011年数学分析考研试题参考解答 浙江大学2012年数学分析考研试题参考解答 浙江大学2013年数学分 ...

  8. Java程序猿面试题集(181- 199)

    Java面试题集(181-199) 摘要:这部分是包括了Java高级玩法的一些专题,对面试者和新入职的Java程序猿相信都会有帮助的. 181.  182. 183. 184. 185. 186. 1 ...

  9. Erlang服务端开发(无需Erlang基础)笔试题

    某游戏公司Erlang服务端开发(无需Erlang基础)笔试题,面向C/C++程序员 一.用你熟悉的语言解决下面的问题. 1.反转输出字符串,并移除其中的空格. 2.快速的判断一个数是否素数的方法. ...

最新文章

  1. 康威生命游戏是如何搭建计算机的?
  2. Linux中打包和解压到的方法
  3. SEO 百度后台主动推送链接
  4. [html] 你有了解HTML5的地理定位吗?怎么使用?
  5. 微软ping程序源代码完整版(附详细的注释)
  6. modification of global variable “Promise.prototype.finally“ is not allowed when using plugins at app
  7. MySQL 日志文件
  8. preg_match_all使用实例
  9. Eigen教程(10)之混淆
  10. vant在cell中加表格_在vant 中使用cell组件 定义图标该图片和位置操作
  11. Kettle JAVA代码表达式
  12. 为何要学习 Linux?
  13. 关于微软拼音输入法被管家和卫士弄丢的解决办法
  14. ETL(SSIS)组件使用
  15. 两种方法在Qt中使用OpenGL库加载stl三维模型
  16. 网络游戏制作---坦克大战(1)
  17. Centos 普通用户su到root用户提示错误
  18. Kotlin object的三种用法
  19. 规则引擎drools系列(一)
  20. 基于全生命周期的主数据管理:MDM详解与实战学习02 第二章 主数据管理的内涵

热门文章

  1. 如果网站访问速度比较慢,你该如何处理?
  2. omap3530 linux串口驱动,omap3530(Cortex-A8)硬件平台软件调试笔记
  3. 公关战之下,分裂的今日头条
  4. android 进入页面隐藏输入法
  5. 一个伪随机数生成算法
  6. aws php 上传文件 限制大小_单个文件大小 上传百度云盘 微信发送 有大小限制 怎么破?...
  7. 生活污水处理厂工程脱水车间设计、果汁饮料厂工艺流程及车间平面布置CAD设计、水处理车间工艺图、氯乙烯分离车间平面布置图、乳品车间设备布置图、核桃乳饮料厂工艺流程及车间平面布置CAD设计……
  8. 报错:RuntimeError: view size is not compatible with input tensor‘s size and stride (at least one dimen
  9. Tomcat 提示 -Djava.endorsed.dirs=/Users/admin/apache-tomcat-9.0.13/endorsed is not supported. Endorsed
  10. 红蓝对抗场景下的二三事