Java基础:
①垃圾回收机制原理:
在JAVA中,JVM每隔一段时间就会查看每一块由new分配的内存空间,看指向它的有效引用是否存在,如果
这个引用不存在,系统会会自动将这块空间归入空闲内存区,这就叫垃圾回收。
类serializable可序列化的:
序列化作用:完整的保存了某一状态下的对象信息。对于基本数据类型,数据库里面有与之对应的数据结构。
序列化目的:(1)偏于存储(2)偏于传输
②volatile关键字
当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。
③session失效方法:
1 session.setMaxInactiveInterval(900); 超时(就是以上设置了时间后)服务器会销毁session;2、点击eclipse中控制台的红色按钮异常关闭服务器要销毁session
3、手动调用session的invalidate方法session.invalidate();
④session和cookie区别:
cookie数据保存在客户端,session数据保存在服务器端。Cookies不会占服务器资源,是存在客服端内存或者一个cookie的文本文件中;
而“Session”则会占用服务器资源。所以,尽量不要使用Session,而使用Cookies。
但是我们一般认为cookie是不可靠的,session是可靠地。
⑤<%@ include file%>和<JSP:include page>区别:
<%@ include file%>是把引入的文件和当前的文件共同合斌成一个servlet文件进行解析。<JSP:include page>是把当前文件和引入文件生成两个不同的servlet文件,在当前文件中在进行动态的调用引入的servlet文件。
⑥常见的线程池
(1) newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
(2) newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
(3) newScheduledThreadPool
创建一个定时线程池,支持定时及周期性任务执行。
(4)newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
⑦lombok:spring4.2是一个通过注解的形式简化 Java 代码的工具
在Lombok中,生成构造方法的annotation一共有三个,@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsContructor。使用这三个annotation来完成项目中对于不同构造方法的需求。
@NoArgsConstructor : 生成一个无参数的构造方法,这个annotation在与其他的annotation配合起来使用的时候更加能凸显出他的重要性,
例如在使用hibernate这种框架的时候,如果有一个有参数的构造方法的时候,NoArgsConstructor会展示出他的作用。
@RequiredArgsConstructor: 会生成一个包含常量,和标识了NotNull的变量 的构造方法。
生成的构造方法是private,如何想要对外提供使用可以使用staticName选项生成一个static方法。
@AllArgsContructor: 会生成一个包含所有变量,同时如果变量使用了NotNull annotation ,会进行是否为空的校验。
Hibernate:
①Hibernate:
是一个开放源代码的 对象关系映射框架,对JDBC进行了非常轻量级的对象封装,完成对数据持久化的重任。②Hibernate的5个重要接口:session、sessionfactory、transition、query和configuration。
session:负责执行被持久化对象的CRUD操作,但是线程不安全。sessionfactory:负责初始化hibernate。负责数据处理源的代理,并负责创建session对象。
Configuration:负责配置并启动hibernate,创建sessionfactory对象。首先定位映射文档位置、读取配置,然后再创建sessionfactory对象。
Transaction:负责事物的相关操作。
③sql和hql查询语言的特点:
sql是关系数据库查询语言,面对的是数据库;hql(面向对象的查询语言)是hibernate提供的内置查询语言。相同点:都可以从数据库中查询数据,
不同点:sql操作的是表和字段,而hql操作的是持久化的类及其属性。
④hibernate对象的三种状态:
瞬时态:transient 在内存中孤立存在,是携带信息的载体,不和数据库中的数据有任何关联。持久态:persistent 和session关联,在数据库中有关联的记录。
托管态:detached 已经持久化,但不在session中,这种状态叫做游离对象。
⑤hibernate尸体之间的关联关系:
一对一关联一对多关联
多对多关联
⑥Spring实现了那几种模式?都应用在哪里?
工厂模式:beanfactory,传入唯一的标识获取对象。单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点。
适配器(Adaptor):把一个类的接口转换成客户需要的另外一个接口。
代理(Proxy):为其他对象提供一种代理以控制对这个对象的访问。在aop中有所体现。(如Cglib2AopProxy和jdkDynamicAopProxy)
⑦hibernate三中检索方式:
HQL检索方式QBC检索方式
SQL检索方式
⑧hibernate中session什么时候处于游离状态:
session.close();方法后⑨bean的5中作用域:
singleton :ioc容器只会创建一个bean的唯一的实例。prototype:ioc容器在每次请求该bean的时候都创建一个新的实例。
request:在一次http请求中ioc会返回bean的同一个实例,而对于不同用户请求,则会返回不同实例。
session:在一次http请求请求session中ioc容器会返回该bean的同一实例,对于不同用户的session,则返回不同的实例。
global session:在一个全局http请求session中。
注解讲解:
@MappedSuperclass注解的使用:使用条件:
当我们进行开发项目时,我们经常会用到实体映射到数据库表的操作,此时我们经常会发现在我们需要隐
射的几个实体类中,有几个共同的属性,例如编号ID,创建者,创建时间,修改者,修改时间,备注等。
遇到这种情况,我们可能会想到把这些属性抽象出来当成一个父类,然后再以不同的实体类来继承这个
父类。
使用环境:
1.@MappedSuperclass注解使用在父类上面,是用来标识父类的
2.@MappedSuperclass标识的类表示其不能映射到数据库表,
因为其不是一个完整的实体类,但是它所拥有的属性能够隐射在其子类对用的数据库表中。
3.@MappedSuperclass标识得类不能再有@Entity或@Table注解
@Temporal 注解使用:
1.日期:@Temporal(TemporalType.DATE)--在页面端取值:2011-07-05
2.时间:@Temporal(TemporalType.TIME)--在页面端取值:22:50:30
3.日期和时间(默认):@Temporal(TemporalType.TIMESTAMP)在页面端取值:2011-07-05 22:51:34:000
在jsp里控制不显示毫秒:
<fmt:formatDate value="${list[0].createTime}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate>
@controller和@RestController区别
我们一般都会在Controller上加上@Controller注解,但是有时候也见有加上@RestController的,现在就说说他们的区别:
@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@ResponseBody注解,也可以返回实体对象。@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面。
@RestController相当于@ResponseBody + @Controller。