五、session 和 cookie 有什么区别?
1、存储位置不同
-
cookie在客户端浏览器;
-
session在服务器;
2、存储容量不同
-
cookie<=4K,一个站点最多保留20个cookie;
-
session没有上线,出于对服务器的保护,session内不可存过多东西,并且要设置session删除机制;
3、存储方式不同
-
cookie只能保存ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据;
-
session中能存储任何类型的数据,包括并不局限于String、integer、list、map等;
4、隐私策略不同
-
cookie对客户端是可见的,不安全;
-
session存储在服务器上,安全;
5、有效期不同
-
开发可以通过设置cookie的属性,达到使cookie长期有效的效果;
-
session依赖于名为JESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session达不到长期有效的效果;
6、跨域支持上不同
-
cookie支持跨域;
-
session不支持跨域;
六、tcp 为什么要三次握手,两次不行吗?为什么?
因为客户端和服务端都要确认连接,①客户端请求连接服务端;②针对客户端的请求确认应答,并请求建立连接;③针对服务端的请求确认应答,建立连接;
两次无法确保A能收到B的数据;
七、使用工厂模式最主要的好处是什么?在哪里使用?
1、工厂模式好处
-
良好的封装性、代码结构清晰;
-
扩展性好,如果想增加一个产品,只需扩展一个工厂类即可;
-
典型的解耦框架;
2、在哪里使用?
-
需要生成对象的地方;
-
不同数据库的访问;
八、什么是 Spring inner beans?
在Spring框架中,无论何时bean被使用时,当仅被调用一个属性。可以将这个bean声明为内部bean。内部bean可以用setter注入“属性”和构造方法注入“构造参数”的方式来实现。比如,在我们的应用程序中,一个Customer类引用了一个Person类,我们要做的是创建一个Person实例,然后再Customer内部使用。
package com;
public class Customer {
private Person person;
}
class Person{
private int id;
private String name;
private int age;
}
九、Spring 框架中的单例 Beans 是线程安全的么?
Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Spring bean并没有可变的状态,所以在某种程度上说Spring的单例bean时线程安全的。如果你的bean有多种状态的话,比如view model,就需要自行保证线程安全啦。
最浅显的解决办法就是将多态bean的作用域由singleton变更为prototype。
十、如何集成 Spring Boot 和 ActiveMQ?
ActiveMQ简介,了解就好,继承暂不做解释了。
MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目。
(1)特点:
-
支持多种语言编写客户端
-
对spring的支持,很容易和spring整合
-
支持多种传输协议:TCP,SSL,NIO,UDP等
-
支持AJAX
(2)消息形式:
-
点对点(queue)
-
一对多(topic)
十一、如何使用 Spring Boot 实现分页和排序?
使用Spring Data Jpa可以实现将可分页的传递给存储库方法。
十二、hibernate 实体类可以被定义为 final 吗?
可以将hibernate的实体类定义为final,但这种做法不好。
因为hibernate会使用代理模式在延迟关联的情况下提高性能,如果你把实体类定义成final类之后,因为Java不允许对final类进行扩展,所以hibernate就无法再使用代理了,如此一来就限制了使用可以提升性能的手段。
不过,如果你的持久化类实现了一个接口,而且在该接口中声明了所有定义于实体类中的所有public的方法的话,就能避免出现前面所说的不利后果。
十三、mybatis 有哪些执行器(Executor)?
1、mybatis有三种基本的Executor执行器:
(1)、SimpleExecutor
每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。
(2)、PauseExecutor
执行update或select,以sql做为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而且放置于Map内,供下一次使用。简言之,就是重复使用Statement对象。
(3)、BatchExecutor
执行update,将所有sql通过addBatch()都添加到批处理中,等待统一执行executeBatch(),它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理。与JDBC批处理相同。
2、作用范围:
Executor的这些特点,都严格限制在SqlSession生命周期范围内。
3、Mybatis中如何指定使用哪一种Executor执行器?
在mybatis的配置文件中,可以指定默认的ExecutorType执行器类型,也可以手动给DefaultSqlSessionFactory的创建SqlSession的方法传递ExecutorType类型参数。
十四、char 和 varchar 的区别是什么?
-
char的长度是固定的,varchar的长度的可变的;
-
char的效率比varchar的效率高;
-
char占用空间比varchar大,char在查询时需要使用trim;
十五、float 和 double 的区别是什么?
1、float 和 double 的区别是什么?
(1)内存中占有的字节数不同
单精度浮点数在内存中占有4个字节;
双精度浮点数在内存中占有8个字节;
(2)有效数字位数不同
单精度浮点数有效数字8位;
双精度浮点数有效数字16位;
(3)数值取值范围不同
单精度浮点数的表示范围:-3.40E+38~3.40E+38
双精度浮点数的表示范围:-1.79E+308~-1.79E+308
(4)在程序中处理速度不同
一般来说,CPU处理单精度浮点数的速度比双精度浮点数的速度快
如果不声明,默认小数是double类型,如果想用float,要进行强转;
2、例如
float f = 1.3;会编译报错,正确的写法是float f = (float)1.3;或者float a = 1.3f;(f或F都可以不区分大小写)
3、注意
float是八位有效数字,第七位会四舍五入;
4、面试题
(1)java中3*0.1==0.3将会返回什么?true还是false?
最后,附一张自己面试前准备的脑图:
面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典
- Java核心知识整理
- Spring全家桶(实战系列)
Step3:刷题
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
以下是我私藏的面试题库:
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
最后祝愿各位身体健康,顺利拿到心仪的offer!
UyN4gIT-1714401125378)]
- Spring全家桶(实战系列)
[外链图片转存中…(img-8o1LG9uu-1714401125378)]
Step3:刷题
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
以下是我私藏的面试题库:
[外链图片转存中…(img-lHCc3vlc-1714401125379)]
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
最后祝愿各位身体健康,顺利拿到心仪的offer!