面试题01
Java中&&和&的区别
&&表示逻辑与,或短路与,只有当符号两边都为真时,表达式才为真,只要左边为假,则不需要计算符号右边的表达式即可判断这个表达式为假,因此称为短路与。短路或与这个的原理类似,只要左边为真,则不需要计算右边的真假,因为这已经够判断表达式为真了。
&表示按位与,只有符号两边都为真才可判断表达式的真假。即无论左边的表达式真假,符号右边的表达式都会被计算。
Java中如何跳出多重嵌套的循环
方法一
在需要跳出的地方加标签tag
再break tag;
方法二
Ref
https://www.cnblogs.com/Xieyang-blog/p/8488612.html
在循环外添加一个boolean类型的判断条件,将判断条件加到循环的判断条件中
ArrayList、Vector、LinkedList存储性能和特性
Ref :疯狂java讲义第五版 p317
ArrayList和Vector的对比
第一点:ArrayList和Vector的功能基本相同,且都是基于数组实现的List类,它们的长度都可以手动分配,也可以根据元素的增加而自动增长,也正因为它们是由数组实现的,所以随机访问list中的元素时性能较好,但是增删元素时的性能很差。但是Vector是一个古老的集合,从JDK1.0开始就存在了,那时java还没有提供系统的集合框架,所以Vector中有很多方法名很长的方法;而JDK1.2后,Java提供了系统的集合框架,之后才将Vector整合到了集合框架中(让Vector实现List接口)Vector有很多缺点,开发中应尽量少用。
第二点,ArrayList和Vector的一大区别是:ArrayList线程不安全,需要手动同步数据,Vector线程安全,因此ArrayList的性能更高。但是还要注意,ArrayList可以使用Collections工具类来使ArrayList变成线程安全的,因此还是要避免使用Vector。
第三点,Vector有一个古老的子类“Stack”栈,它的性能也很差,因此要少用,如果程序需要使用栈这种数据及结构,建议使用ArrayDeque。
LinkedList
LinkedList实现了List、Deque两个接口,说明LinkedList既可以充当list使用,又可以充当栈和队列来使用,是一种功能强大的集合类。它的内部以链表的形式来保存集合中的元素,因此随机访问集合内的元素时性能很差,因为每次都需要遍历,但是在插入和删除时的性能较好,因为只需要改变指针的地址。
小结:ArrayList和Vector在随机访问方面性能高,LinkedList在增删方面性能高。总体来说ArrayList的性能比LinkedList好。
数据库
在答题前,要先有数据库模型:即至少有学生表、课程表、分数表这三张表,其中
student表至少有sid、sname字段
course表至少有cid、cname字段
score表至少有sid、cid、score字段
这个基本模型是答题的前提。很重要,要能快速识别并建立这个模型。
查询平均成绩大于60的同学的学号和平均成绩
Ref
https://www.cnblogs.com/yuanyuan2017/p/11322831.html
查询 平均成绩大于60 的同学的 学号 和 平均成绩
这里提到平均分,用到avg分组函数,需要按照学生分组,再求平均分,之后用having来过滤分组结果。
Select sid, avg(score) from student group by studentid having avg(socre) > 60
https://blog.csdn.net/weixin_30561177/article/details/98888830
查询同时学过课程1和课程2的同学的学号、姓名
查询学过课程1的同学的id,结果用tb1表示
(Select sid from stu_score where cid=1) tb1
查询学过课程2的同学的id,结果用tb2表示
(Select sid from stu_score where cid=2) tb2
查询同时学过课程1和2的同学的id,结果用r表示
(Select sid from tb1, tb2 where tb1.sid=tb2.sid)r
查询学生的详细信息
Select sid, sname from student s left join r on s.id=r.sid
整合
Select sid , sname from student s
Left join (
Select sid from (
(Select sid from stu_score where cid=1) tb1,
(Select sid from stu_score where cid=2) tb2
) where tb1.sid=tb2.sid r
) on s.id=r.sid