1、@Autowired注解和@Resoure注解的区别
a、@Autowired是Spring提供的注解。默认使用byTye方式注入。如果发现有多个bean就按照byName方式注入,如果仍有相同name的bean就报错。
@Resource是java JSR-250定义的注解。默认使用byName方式注入。如果没有明确指定名称,则默认名称是从字段名称或设置方法(get、set方法)派生的。 如果用在字段上,则采用字段名称; 如果用在在setter方法,它采用其属性名称(例如getProperty()方法,取property做为属性名称)。
b、@Autowired注解的作用范围@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Resource的作用范围@Target({TYPE, FIELD, METHOD})
c、如果存在多个相同类型的bean,@Autowired注解还可同@Qualifier注解一起使用。
d、@Autowired注解可设置required=false,允许注入的属性为null
2、Spring循环依赖
a、构造器注入,抛异常。BeanCurrentlyInCreationException
b、set方法注入,成功注入。
c、原型模式下,同构造器注入,会抛异常。
具体可参考文章:
循环依赖
3、tomcat如何区分不同项目中的相同类的,如果是你,你会如何设计。
4、synchronized的锁升级
5、CAS的工作原理?是否就一定是非阻塞的。
6、ReentrantLock 读写锁
读写锁
7、CPU100%的处理办法,用哪些工具。
https://www.cnblogs.com/shengulong/p/8513652.html
8、mysql 联合索引的路由
先按第一个(最左边)索引列查找,然后第二个、第三个
(这个在当时回答的时候没完全理解面试官的意思,以为是问二级索引的存储结构。)
9、select count(*) 和 select count(列名)的区别
count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,count(column) 是不包括NULL的统计。
selelct 常量 from … 对应所有行,返回的永远只有一个值,即常量。所以正常只会用来判断是否有还是没有(比如exists子句)。而select * from … 是返回所有行的所有列。
10、线程池,如何保证在队列不满,核心线程数满的时候启动非核心线程。
这个问题没想到正确解决方法。
11、hotspot解释执行与编译执行,优缺点是什么
HotSpot的解释器和JIT编译器。
12、redis主从中加入一个新机器,是如何做主从同步的
13、递归函数为什么会栈溢出
JVM分配给每个线程的内存大小是固定的,当递归时操作一直入栈而不出栈,就会造成栈溢出。
14、dubbo是如何监控的流量
可以使用dubbokeeper
15、StringBuilder 多线程情况下append会发生什么问题。
1)如下代码:append()时会修改count。
操作如下:
count+=str.len();
如果多个线程同时执行,那么这个操作就不是原子操作了。
//存储字符串的具体内容
char[] value;
//已经使用的字符数组的数量
int count;
2)如下代码,count的不一致会导致在数组复制时数组越界。
比如,线程1执行了append()操作count变为了7,此时线程2也执行了append操作count变为了8,线程一执行str.getChars(0, len, value, count);时,拿到的count=8执行char数组拷贝的时候就会抛ArrayIndexOutOfBoundsException异常。
public AbstractStringBuilder append(String str) {
if (str == null)
return appendNull();
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}
str.getChars(0, len, value, count);
public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {
//中间省略了一些检查
...
System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin);
}
16、ReentrantLock公平锁是如何实现的
17、ThreadLocal
18、如何限流的