当前位置:   article > 正文

java面试题微服务,Spring入门,java高级开发工程师面试问题_java工程师 常用面试题

java工程师 常用面试题
public UserDaolmpl(){

    System.out.println("创建对象");

}



@Override

public void save() {

    System.out.println("save running......");

}



//初始化方法

public void init(){

    System.out.println("初始化。。。。");

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

//销毁方法

public void destroy(){

    System.out.println("销毁.....");

}
  • 1
  • 2
  • 3
  • 4
  • 5

}




> 测试代码



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

public class SpringTest {

@Test

public void test01(){

    ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

    

    UserDao userDao1 = (UserDao) app.getBean("userDao");

    

    System.out.println(userDao1);

    

    ((ClassPathXmlApplicationContext)app).close();

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

}




![在这里插入图片描述](https://img-blog.csdnimg.cn/3de3d797a1e74b92b116acdf3f73adef.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YCa5b6AMjAyM-eahOS7o-eggQ==,size_14,color_FFFFFF,t_70,g_se,x_16#pic_center)



* * *



[]( )4、依赖注入

-------------------------------------------------------------------------



> 问题引入:

> 

> 1.  创建 UserService,UserService 内部在调用 UserDao的save() 方法

> 

> ```

> public class UserServiceImpl implements UserService {

>     @Override

>     public void save() {

>         ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

>         UserDao userDao = (UserDao) app.getBean("userDao");

>         userDao.save();

>     }

> }

> 

> ```

> 

> 2.  将 UserServiceImpl 的创建权交给 Spring

>     

>     ```

>     <bean id="userDao" class="com.kang.impl.UserDaolmpl"></bean>

>         <bean id="userService" class="com.kang.impl.UserServiceImpl"></bean>

>     

>     ```

>     

> 3.  从 Spring 容器中获得 UserService 进行操作

>     

> 

> ```

>  @Test

>     public void test02(){

>         ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

>         UserService userService = (UserService) app.getBean("userService");

>         userService.save();

>     }

> 

> ```

> 

> \[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gT469oAN-1645704192217)(Spring入门.assets/image-20220224093008916.png)\]



上述做法是将UserService实例和UserDao都存在spring容器中,然后再容器外部获取UserService实例和UserDao实例,然后在程序中进行结合



![在这里插入图片描述](https://img-blog.csdnimg.cn/23291c97680349efaaddc5e1916cb7b0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YCa5b6AMjAyM-eahOS7o-eggQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)



> **这当中存在的问题是:加载配置文件的时候,不需要getBean方法,配置文件的内容都被执行了,导致配置文件加载了多次,浪费资源**

> 

> **在test中,只需要UserService,但是UserDao也实例化了**



**因为UserService和UserDao都在Spring容器中,而最终程序直接使用的是UserService,所以可以在 Spring容器中,将UserDao设置到UserService内部。**



![在这里插入图片描述](https://img-blog.csdnimg.cn/f3e27e9b1c194a78aad87184cd072c34.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YCa5b6AMjAyM-eahOS7o-eggQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)



> 要解决这个问题,就需要用到依赖引入



![在这里插入图片描述](https://img-blog.csdnimg.cn/95606b91839d438283d11d40bd05dbe0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YCa5b6AMjAyM-eahOS7o-eggQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)



* * *



### []( )4.1、依赖引入的方式



> **通过构造方法和set方法实现将UserDao注入到UserService内部**



* * *



#### []( )4.1.1、set方法注入



> set方法注入的前提,是要在UserServiceImpl里定义一个私有变量UserDao

> 

> 然后通过set方法给该私有变量赋值



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155

public class UserServiceImpl implements UserService {

private UserDao userDao;

@Override

public void save() {

    userDao.save();

}



public void setUserDao(UserDao userDao) {

    this.userDao = userDao;

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

}


  • 1
<bean id="userDao" class="com.kang.impl.UserDaolmpl"></bean>

<bean id="userService" class="com.kang.impl.UserServiceImpl">

    <!--第一个userDao是指set方法后面的UserDao, 既setUserDao-->

    <!--第二个userDao 是指上面的id的userDao的Bean实例化返回的UserDao对象-->

    <property name="userDao" ref="userDao"/>

</bean>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11



> **注意:虽然两个userDao写法一样,但是两个userDao所代表的意思并不一样,注意区分**



> **set方法注入还可以用P空间命名注入**

> 

> 首先引入P空间命名空间:

> 

> ```

> xmlns:p="http://www.springframework.org/schema/p"

> 

> ```

> 

> 接着,修改注入方式:

> 

> ```

> <bean id="userService" class="com.kang.impl.UserServiceImpl" p:userDao-ref="userDao">

>         <!--第一个userDao是指set方法后面的UserDao(首字母大写换小写), 既setUserDao-->

>         <!--第二个userDao 是指上面的id的userDao(对象引用)-->

>         <!--<property name="userDao" ref="userDao"/>-->

>     </bean>

> 

> ```



spring的XML配置文件如下:



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xmlns:p="http://www.springframework.org/schema/p"

   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">



<!--<bean id="factory" class="com.kang.factory.UserDaolmplFactory"></bean>-->

<!--<bean id="userDao" factory-bean="factory" factory-method="CreateUserDao"></bean>-->

<!--<bean id="userDao" class="com.kang.impl.UserDaolmpl" init-method="init" destroy-method="destroy"></bean>-->



<bean id="userDao" class="com.kang.impl.UserDaolmpl"></bean>

<bean id="userService" class="com.kang.impl.UserServiceImpl" p:userDao-ref="userDao">

    <!--第一个userDao是指set方法后面的UserDao, 既setUserDao-->

    <!--第二个userDao 是指上面的id的userDao-->

    <!--<property name="userDao" ref="userDao"/>-->

</bean>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27



* * *



#### []( )4.1.2、通过构造方法注入



创建有参构造方法



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

package com.kang.impl;

import com.kang.dao.UserDao;

import com.kang.service.UserService;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**

  • @ClassName UserServiceImpl

  • @Description TODO

  • @Author kang

  • @Date 2022/2/24 上午 9:22

  • @Version 1.0

*/

public class UserServiceImpl implements UserService {

private UserDao userDao;



public UserServiceImpl(UserDao userDao) {

    this.userDao = userDao;

}



public UserServiceImpl() {

}



@Override

public void save() {

    userDao.save();

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

}




配置spring的xml配置文件



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

<bean id="userService" class="com.kang.impl.UserServiceImpl" >

    <!--第一个userDao是指有参构造方法的参数-->

    <!--第二个userDao是指引用对象,即上面的id属性-->

    <constructor-arg name="userDao" ref="userDao"></constructor-arg>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7



Java的测试类代码依然不用变



![在这里插入图片描述](https://img-blog.csdnimg.cn/4281c706001047a3b1ae8f92f378da78.png#pic_center)



* * *



[]( )5、Bean的依赖注入的数据类型

-----------------------------------------------------------------------------------



> Bean的依赖注入的数据类型有很多种,除了上面的对象**还支持普通数据类型,集合等**可以在容器中进行注入

> 

> **注入的三种基本数据类型**

> 

> *   普通数据类型

> *   引用数据类型

> *   集合数据类型

> 

> 上述对对象的操作就是对引用数据类型的依赖注入



* * *



### []( )5.1、普通数据类型的注入



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

public class UserServiceImpl implements UserService {

private String name;

private int age;



public void setName(String name) {

    this.name = name;

}



public void setAge(int age) {

    this.age = age;

}



@Override

public void save() {

    System.out.println("name = " + name);

    System.out.println("age = " + age);

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

在这里插入图片描述

最新整理电子书

在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

img-g8mLVu5A-1712261455992)]

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

[外链图片转存中…(img-JhzcGkLP-1712261455993)]

最新整理电子书

[外链图片转存中…(img-DCeNpWfK-1712261455993)]

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/881757
推荐阅读
相关标签
  

闽ICP备14008679号