面试笔记1

1.基础
2.多线程
题目1:乐观锁、悲观锁,可重入锁、不可重入锁概念,并举例Java中应用。
悲观锁(Pessimistic Lock), 就是很悲观,每次去拿数据的时候都认为别人会修改。所以每次在拿数据的时候都会上锁。这样别人想拿数据就被挡住,直到悲观锁被释放。
乐观锁(Optimistic Lock), 就是很乐观,每次去拿数据的时候都认为别人不会修改。所以不会上锁,不会上锁!但是如果想要更新数据,则会在更新前检查在读取至更新这段时间别人有没有修改过这个数据。 如果修改过,则重新读取,再次尝试更新,循环上述步骤直到更新成功(当然也允许更新失败的线程放弃操作)。乐观锁的基础是CAS(Compare-and-Swap)
可重入锁,即允许同一个线程多次获取同一把锁。比如一个递归函数里有加锁操作,递归过程中这个锁会阻塞自己吗?如果不会,那么这个锁就是可重入锁(因为这个原因可重入锁也叫做递归锁)
不可重入锁:不可递归调用,递归调用就发生死锁。
题目2:简述Java多线程中是如何实现线程隔离的。
ThreadLocal key是当前线程,即Thread.currentThread()
3.sql
题目1:学生成绩表stu(sname 姓名,subject 科目,grade 成绩)
①查询每个学生所有科目分数总和的平均分数
SELECT stu.sname,AVG(stu.grade) from stu GROUP BY stu.sname;
② 查询至少有两门科目大于等于90 分的学生及成绩
SELECT stu.* FROM stu WHERE stu.sname in (SELECT stu.sname from stu WHERE stu.grade >=90 GROUP BY stu.sname HAVING COUNT(stu.grade) >=2);
题目2:主键和外键的区别
主键:
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
外键:
一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。
注意,在创建外键约束时,必须先创建外键约束所依赖的表,并且该列为该表的主键
4.框架
题目1:aop的原理
参考:https://shimo.im/docs/PQ9V86hXWD86hvqv/ 《Spring AOP常见面试题目 》
5.数据结构与算法
题目1:红黑树与平衡树的区别
1)红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单。
2)平衡二叉树追求绝对平衡,条件比较苛刻,实现起来比较麻烦,每次插入新节点之后需要旋转的次数不能预知。
6.其他技术
posted @ 2019-08-08 11:26  落幕情殇  阅读(135)  评论(0编辑  收藏  举报