Java面试题总结

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。




















































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值