架构师面试问题:
如何设计高可用
如何设计高并发
如何设计高扩展
如何jvm调优及管控
如何复用及重构
1、使用那些设计模式解决生产中的问题
2、架构选型过程考虑
3、如何保证开发的代码质量实践及减少生产问题
4、如何保证稳定性,99.98%
5、如何定位及处理OOM,及减少OOM
QPS ,TPS
1、String类为什么是final的
String的值不可变aaa,修改值bbb后,string新开辟一个内存空间存储新值bbb,保证其他已经指向aaa的string不用改变,保证效率及安全,string的定义在stack中,值在heap中
2、HashMap原理
HashMap的底层主要是基于数组和链表来实现的,它之所以有相当快的查询速度主要是因为它是通过计算散列码来决定存储的位置
解决hash冲突的方法有很多,HashMap底层是通过链表来解决hash冲突的。
https://www.jianshu.com/p/9f7f851bd17f
3、@Autowired和@Resource的区别是什么?
@Autowired功能虽说非常强大,但是也有些不足之处。比如:比如它跟spring强耦合了,如果换成了JFinal等其他框架,功能就会失效。而@Resource是JSR-250提供的,它是Java标准,绝大部分框架都支持。
https://www.zhihu.com/question/39356740
@Autowired注解,是用来自动装配对象的,通过Bytype方式,要求针对相同类型的对象只有一个的情况
@Resource 是用来自动装配对象的,通过Byname方式
- @Autowired默认按byType自动装配,而@Resource默认byName自动装配。
- @Autowired只包含一个参数:required,表示是否开启自动准入,默认是true。而@Resource包含七个参数,其中最重要的两个参数是:name 和 type。
- @Autowired如果要使用byName,需要使用@Qualifier一起配合。而@Resource如果指定了name,则用byName自动装配,如果指定了type,则用byType自动装配。
- @Autowired能够用在:构造器、方法、参数、成员变量和注解上,而@Resource能用在:类、成员变量和方法上。
- @Autowired是spring定义的注解,而@Resource是JSR-250定义的注解。
作者:苏三说技术
链接:https://www.zhihu.com/question/39356740/answer/1907479772
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
4、@ComponentScan作用
@ComponentScan如果不设置basePackage的话 默认会扫描包的所有类,所以最好还是写上basePackage ,减少加载时间。默认扫描**/*.class
路径 比如这个注解在com.first.springbootproject.springboot 下面 ,那么会扫描这个包下的所有类还有子包的所有类,比如包com.first.springbootproject.springboot.helloworld的应用。
5、@SpringBootApplication 启动类
使用替换
- @Configuration(@SpringBootConfiguration点开查看发现里面还是应用了@Configuration)
- @EnableAutoConfiguration
- @ComponentScan
如果在启动类使用这个三个注解,整个SpringBoot应用依然可以与之前的启动类功能一样。但每次写这3个比较啰嗦,所以写一个@SpringBootApplication方便点。
6、循环依赖问题
如果A依赖于B,B依赖于C,C又依赖于A,这样就形成了一个死循环。
spring的bean默认是单例的,如果单例bean使用@Autowired自动装配,大多数情况,能解决循环依赖问题。
但是如果bean是多例的,会出现循环依赖问题,导致bean自动装配不了。
还有有些情况下,如果创建了代理对象,即使bean是单例的,依然会出现循环依赖问题。