总结
蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。
经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。
它们的存在是为了:更加准确的表达一个类型的作用。
@Repository
public class UserDAO {}
@Service
public class UserService {}
@Controller
public class UserController {}
注意:Spring 整合 Mybatis 开发过程中,不使用 @Repository
、@Component
作用:控制简单对象创建次数
注意:不添加 @Scope
,Spring 提供默认值 singleton
XML 配置:
注解:
// 创建单例对象
@Component
@Scope(“singleton”)
public class Customer {}
// 创建多例对象
@Component
@Scope(“prototype”)
public class Customer {}
作用:延迟创建单实例对象
注意:一旦使用 @Lazy
注解后,Spring 会在使用这个对象的时候,才创建这个对象。
XML 配置:
注解:
@Component
@Lazy
public class Account {
public Account() {
System.out.println(“Account.Account”);
}
}
@PostConstruct、@PreDestroy:生命周期注解
初始化相关方法: @PostConstruct
InitializingBean
销毁方法:@PreDestory
DisposableBean
注意:
-
上述的两个注解并不是 Spring 提供的,由 JSR(JavaEE规范)520 提供
-
再次验证,通过注解实现了接口的契约性
=========================================================================
@Autowired
注解 基于类型进行注入 [推荐]:
- 注入对象的类型,必须与目标成员变量类型相同或者是其子类(实现类)
@Autowired
private UserDAO userDAO;
@Autowired
、@Qualifier
注解联合实现 基于名字进行注入 [了解]
- 注入对象的 id 值,必须与
@Qualifier
注解中设置的名字相同
@Autowired
@Qualifier(“userDAOImpl”)
private UserDAO userDAO;
@Autowired
注解放置位置:
-
放置在对应成员变量的 set 方法上,调用 set 方法赋值(在 set 里写的代码会被执行)
-
直接放置在成员变量上,Spring 通过反射直接对成员变量进行赋值 [推荐]
JavaEE 规范中类似功能的注解:
- JSR250 提供的
@Resource(name="xxx")
基于名字进行注入
等价于 @Autowired
与 @Qualifier
联合实现的效果
注意:@Resource
注解如果名字没有配对成功,会继续 按照类型进行注入
@Resource(name=“userDAOImpl”)
private UserDAO userDAO;
- JSR330 提供的
@Injection
作用与@Autowired
完全一样,一般用在 EJB3.0 中
方法一:@value
注解的基本使用:
- 设置xxx.properties
id = 10
name = suns
- Spring的工厂读取这个配置文件
<context:property-placeholder location=“”/>
- 代码中进行注入
属性 @Value(“${key}”)
方法二:使用 @PropertySource
取代 xml配置:
- 设置xxx.properties
id = 10
name = suns
-
在实体类上应用@PropertySource(“classpath:/xx.properties”)
-
代码
属性 @Value(“${key}”)
@value
注解使用细节:
-
@Value
注解不能应用在静态成员变量上,如果使用,获取的值为 null -
@Value
注解 + Properties 这种方式,不能注入集合类型
Spring 提供新的配置形式 YAML(YML) (更多的用于SpringBoot中)
=========================================================================
这样配置,会扫描当前包及其子包 :
<context:component-scan base-package=“com.yusael”/>
<context:component-scan base-package=“com.yusael”>
<context:exclude-filter type=“” expression=“”/>
</context:component-scan>
type="xxx"
,xxx
有以下几个可选项:
-
assignable
:排除特定的类型 -
annotation
:排除特定的注解 -
aspectj
:切入点表达式,比较常用
包切入点: com.yusael.bean..*
类切入点: *..User
-
regex
:正则表达式,不常用,与切入点类似 -
custom
:自定义排除策略,常用于框架底层开发(在 SpringBoot 源码中大量使用)
排除策略可以叠加使用:
<context:component-scan base-package=“com.yusael”>
<context:exclude-filter type=“assignable” expression=“com.yusael.bean.User”/>
<context:exclude-filter type=“aspectj” expression=“com.yusael.injection…*”/>
</context:component-scan>
<context:component-scan base-package=“com.yusael” use-default-filters=“false”>
<context:include-filter type=“” expression=“”/>
</context:component-scan>
与排除方式使用的区别:
-
use-default-filters="false"
让 Spring 默认的注解扫描方式失效 -
<context:include-filter type="" expression=""/>
用于指定扫描哪些注解
type="xxx"
与排除方式完全一样,可以参考上面
包含策略也可以叠加使用:
<context:component-scan base-package=“com.baizhiedu” use-default-filters=“false”>
<context:include-filter type=“annotation” expression=“org.springframework.stereotype.Repository”/>
<context:include-filter type=“annotation” expression=“org.springframework.stereotype.Service”/>
最后
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)
最新整理电子书
ype.Service"/>
最后
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)
[外链图片转存中…(img-zIrTg4BW-1715481814508)]
最新整理电子书
[外链图片转存中…(img-YcGn1XtV-1715481814509)]