面试题集合

获取Class对象的三种方式

  1. Class.forName(“全类名”)。多用于配置文件,将类名定义在配置文件中。
  2. 类名.class。多用于参数的传递。
  3. 对象.getClass()。多用于对象的获取字节码的方式。

IOC底层实现原理

       IOC 控制反转,是一种设计思想,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方。他是通过反射机制+工厂模式是实现的,在实例化一个类时,它通过反射调用类中set方法将事先保存在map种的类属性注入到类中

DI——Dependency Injection,即依赖注入 由容器动态的将某个依赖关系注入到组件之中。

AOP 底层实现原理

       面向切面编程,利用一种称为“横切”的技术,剖解开封装的对象内部。将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,实现AOP的技术,主要分为两大类:一是采用动态代理技术,spring默认使用jdk动态代理,如果目标类不是接口选择cglib动态代理,二是采用静态织入的方式

SpringBoot好处有哪些?

  1. 用来简化spring初始搭建和开发过程使用特定的方式进行配置(properties或者yml文件)
  2. 创建独立的spring引用程序main方法运行
  3. 嵌入Tomcat无需部署war包,直接打成jar包nohup java -jar -& 启动就好
  4. 简化了maven的配置
  5. 自动配置spring添加对应的starter自动化配置

SpringBoot常用的starter:

  1. spring-boot-starter-web(嵌入Tomcat和web开发需要的servlet和jsp支持)
  2. spring -boot-starter-data-jpa(数据库支持)
  3. spring-boot-starter-data-redis(redis支持)
  4. spring-boot-starter-data-solr (solr搜索应用框架支持)

sleep() wait() 有什么区别?

       sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep 不会释放对象锁。wait 是Object 类的方法,对此对象调用wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify 方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

请说出你所知道的线程同步的方法。

答:线程同步的方法:. (1)wait ():使一个线程处于等待状态,并且释放所持有的对象的lock。. (2)sleep ():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉 InterruptedException异常。. (3)notify ():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的 唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。. (4)notityAll ():唤醒所有处于等待状态的线程,注意并不是给所有唤醒线程一个对象的锁, 而是让它们竞争。.

关键字:JDK,JRE,JVM
摘要:JDK是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,
    在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。


1.三者联系
    JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。
    在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是           jvm工作所需要的类库,
    而jvm和 lib和起来就称为jre。JVM+Lib=JRE。总体来说就是,我们利用JDK(调用JAVA API)      开发了属于我们自己的JAVA程序后,
    通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些       JAVA字节码,JVM解析这些字节码,
    映射到CPU指令集或OS的系统调用。

2.三者区别
    a.JDK和JRE区别:在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来      将java文件编译成class文件的,
    这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等等      用于开发的可执行指令文件。
    这也证实了一个是开发环境,一个是运行环境。
    b.JRE和JVM区别:JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。

java中this和super的用法区别

     this 是自身的一个对象,代表对象本身,用法大致分为以下3类:

    1、普通的直接引用当前对象本身

    2、形参和成员名重名,用this来区分

    3、引用构造方法 ,this(参数) ,应该为构造函数中的第一条语句,调用的事1本类中另外一种形式的构造方法。

     super 可以理解为是指向自己超(父)类对象,这个超类指的是离自己最近的一个父类。也大致      分为3种用法

    1、普通的直接引用,与this类似,只不过它是父类对象,可以通过它调用父类成员。

    2、子类中的成员变量或方法与父类中的成员变量或方法同名,可以使用super区分。

    3、引用构造方法,super(参数):调用父类中的某一个构造方法(应该为构造方法中的第一             条语句)。

spring常用注解分析

@Resource和@Autowired区别

    @Resource 注解,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通  过 @Resource 的使用来消除 set ,get方法。 @Autowired功能和注解 @Resource 一样,可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。只不过注解@Resource 是按照名称来进行装配,而@Autowired 则是按照类型来进行装配。(它首先会根据类型去匹配,多个则按名称,空则会抛出异常。法二:@Autowired 和 @Qualifier(“名称”) 配合使用)

@Qualifier:将@Qualifier注解和@Autowire注解结合使用,指定需要装配的确切的bean。

1、@controller:   controller控制器层(注入服务)
2、@service :      service服务层(注入dao)
3、@repository :  dao持久层(实现dao访问)
4、@component:  标注一个类为Spring容器的Bean,(把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)

@Required:表明bean的属性必须在配置的时候设置.

@Configuration 声明当前类是一个配置类 @Configuation等价于

@Bean 注解的方法将会实例化、配置和初始化一个新对象,这个对象将由 Spring的 IoC 容器来管理, 作用与 元素类似

Spring MVC的常用注解解释

@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。

@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数

@RequestMapping(value="/product/{productId}",method = RequestMethod.GET)

public String getProduct(@PathVariable(“productId”) String productId)

@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用;

在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。例如,异步获取 json 数据,加上 @Responsebody 注解后,就会直接返回 json 数据。

@RequestParam 在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter(“name”),另外一种是用注解@RequestParam直接获取。这里主要讲这个注解 。 spring会自动根据参数名字封装进入,我们可以直接拿这个参数名来用

Controller, RestController的共同点

都是用来表示Spring某个类的是否可以接收HTTP请求。

Controller, RestController的不同点

@Controller:标识一个Spring类是Spring MVC controller处理器,@RestController:@RestController是@Controller和@ResponseBody的结合体,两个标注合并起来的作用。@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@ResponseBody注解,也可以返回实体对象。@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面。

 元注解
用来描述注解的注解,就5个:

@Target 注解用在哪里:类上、方法上、属性上等等
@Retention 注解的生命周期:源文件中、字节码文件中、运行中
@Inherited 允许子注解继承
@Documented 生成javadoc时会包含注解,不常用
@Repeatable注解为可重复类型注解,可以在同一个地方多次使用,不常用
 

处理请求参数

当客户端打开浏览器要访问服务器时,可能会带着一些http请求参数过来.

这时,服务器需要获取http参数进行业务处理,如何处理http请求并获取参数呢?

总共有8种,重点时两种方式:GET方式和POST方式.

GET方式
向特定的资源发出请求,并返回实体.有固定的写法.而且数据有最大长度,超出就不行

例如:
http://localhost:8080/car/insert?id=1&name=张三&age=18

POST方式
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

RESTFul方式(推荐)
为了简化GET请求的写法,可以使用RESTFul方式,用法:

1、需要使用注解@PathVariable来获取请求路径中的参数值,@PathVariable用来绑定值

2、通过{???}获取路径中传递来的值

3、以前GET的访问方式即将被简化成:

      http://localhost:8080/car/insert/1/张三/18


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值