专栏首页网络小说作家的编程技术沉思录Java后端面试经验总结分享(一)

Java后端面试经验总结分享(一)

今天下午两点的时候,我去面了一家招Java开发的公司,本人工作经验2年多一丢丢。

跟大部分公司类似,先做一份笔试题,题目都比较简单,基本都写完了。我把题目以及答案列在下面一下,给自己做一下总结的,也分享给一些需要的小伙伴,下面答案是我根据网上的进行总结的。

一.抽象类与接口的区别。

相同点: 都不能被实例化

区别:

1.一个接口可以继承多个接口,但一个类只能有一个父类,类可以实现多个接口;

2.接口和抽象类必须实现其中所有的方法,抽象类中如果有未实现的抽象方法,那么子类也需要定义为抽象类。抽象类中可以有非抽象的方法。

3.抽象类中可以包含普通方法,但接口中只能包含public abstract方法(JDK 1.8之前);JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰

4.抽象类中的成员变量没有访问权限的限制,但接口中的变量只能被public static final修饰;

5.接口强调特定功能的实现,而抽象类强调所属关系;

二.String,StringBuffer,StringBuilder三者的区别。

1.运行速度方面:StringBuilder > StringBuffer > String。

2.可变性:String是final定义的,是字符串常量,一旦创建之后该对象是不可更改的(若重新给原来的引用赋值,改变的只是引用的指向位置,但常量池里还是保留原来的字符串),但后两者的对象是是可以更改的。

3.线程安全方面:StringBuilder是线程不安全的,而StringBuffer是线程安全的。StringBuffer线程安全的一个原因是很多方法例如append里,是带有synchronized关键字,所以可以保证线程是安全的,而StringBuffer是没有的,所以是线程不安全;

三.try catch finally的三者作用。

其中try{...}这一块代码是需要被检测异常的代码;而catch{...}这一段是处理异常的代码;最后的finally{...}代码块是一定会被执行的代码。

四.Struts,SpringMVC,Springboot三者的区别。

struts2 和 springMvc:

1.Springmvc的入口是servlet前端控制器(DispatcherServlet),struts2入口是一filter过滤器(StrutsPrepareAndExecuteFilter);

2.SpringMVC开发效率高于Struts2;

3.struts2通过在action类中定义成员变量接收参数,它使用多例模式管理action.

4.springmvc通过在coontroller方法中定义形参接收参数,springmvc可以使用单例模式管理controller.

5.springMvc属于一个企业WEB开发的MVC框架,涵盖面包括前端视图开发、文件配置、后台接口逻辑开发等,XML、config等配置相对比较繁琐复杂;

6. springBoot框架相对于springMvc框架来说,更专注于开发微服务后台接口,不开发前端视图;

五.写一个学生课程成绩的主要数据库,可能需要实现的SQL报表语句;

答案原贴链接:https://blog.csdn.net/jerryDzan/article/details/86217415

表架构

Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表

学生表:

1 CREATE TABLE student 
2 ( 
3      s_id  INT,
4      sname varchar(32),
5      sage  INT, 
6      ssex  varchar(8) 
7  );

课程表:

1 CREATE TABLE course 
2   ( 
3      c_id    INT, 
4      cname varchar(32), 
5      t_id    INT 
6   );

分数表:

1 CREATE TABLE sc 
2 ( 
3      s_id  INT, 
4      c_id  INT, 
5      score INT 
6 ) ;

教师表:

CREATE TABLE teacher 
( 
     t_id    INT, 
     tname varchar(16) 
);
 1 1、查询“001”课程比“002”课程成绩高的所有学生的学号; 
 2      select a.s_id FROM
 3      (select s_id,score from sc where c_id = '001')a,(select s_id,score from sc where c_id = '002')b
 4      where a.score > b.score and a.s_id = b.s_id;
 5  
 6 2、查询平均成绩大于60分的同学的学号和平均成绩; 
 7     select s_id,avg(score)
 8       from sc
 9     group by s_id
10     having avg(score)>60;
11 3、查询所有同学的学号、姓名、选课数、总成绩; 
12    select Student.s_id,Student.Sname,count(SC.c_id),sum(score) 
13    from Student left Outer join SC on Student.S_id=SC.S_id 
14    group by Student.S_id,Sname ;
15 4、查询姓“李”的老师的个数; 
16         select DISTINCT(count(tname))
17         from teacher
18         where tname like '李%';
19 5、查询没学过“叶平”老师课的同学的学号、姓名; 
20    select Student.S_id,Student.Sname 
21    from Student  where s_id not in
22    (select distinct( SC.S_id) from SC,Course,Teacher where  SC.C_id=Course.C_id and Teacher.T_id=Course.T_id and teacher.tname = '叶平')
23    
24     
25 6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名; 
26     
27     select student.s_id,student.sname from SC,student where  SC.s_id=student.s_id and SC.C_id='001'
28   and EXISTS 
29   (select * from SC as SC2  where  SC2.s_id=SC.s_id and SC2.C_id='002')
30  
31 7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
32    select s_id,sname
33    from student
34    where s_id in
35    (select SC.S_id from SC,Course,Teacher where  SC.C_id=Course.C_id and Teacher.T_id=Course.T_id and teacher.tname = '叶平' 
36    GROUP BY sc.s_id
37    having count(SC.c_id) =
38    (select count(c.c_id) from course c,teacher t
39    where c.t_id=t.t_id and t.tname = '叶平')) ;
40     
41   
42 8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名; 
43      select a.s_id,a.sname from
44       (select sc.s_id,sc.score,student.sname from SC,student where  SC.s_id=student.s_id and SC.C_id='001')a,
45       (select sc.s_id,sc.score from SC,student where  SC.s_id=student.s_id and SC.C_id='002')b
46     where a.s_id = b.s_id and a.score> b.score;
47  
48  
49 9、查询所有课程成绩小于60分的同学的学号、姓名; 
50   select S_id,Sname 
51   from Student 
52   where S_id not in (select S.S_id from Student AS S,SC where S.S_id=SC.S_id and score>60); 
53  
54 10、查询没有学全所有课的同学的学号、姓名; 
55   select s.s_id,s.sname
56   from student s,sc sc
57   where s.s_id = sc.s_id
58   GROUP BY s.s_id,s.sname
59   HAVING COUNT(sc.c_id) < (select count(c_id) from course)
60     
61 11、查询至少有一门课与学号为“1”的同学所学相同的同学的学号和姓名; 
62      select  DISTINCT Student.s_id,Student.sname 
63    from Student,sc where student.s_id = sc.s_id
64      and sc.c_id in (select c_id from sc where s_id='1')

六.算法题: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数?

这道算法题,我第一眼看到的时候,其实是懵逼的,后来,把他们的前几个月的数量情况列了一下

1月

2月

3月

4月

5月

6月

7月

8月

1

1

2

3

5

8

13

21

根据上面这个规律,其实已经看出来, 这是类似斐波那契数列的数列: Sn = Sn-1+Sn-2(斐波那契数列从0开始的),也就是说,每一个值,都等于前面两个值得和。

基于这个思路,我们可以用递归来实现这个算法:

 1 public class Example{
 2 
 3 public static void main(String[] args){
 4        for(int i=1;i<=24;i++){
 5        System.out.print("每个月兔子的总数:"+f(i));
 6     }
 7 }
 8 
 9 public static int f(int n){
10         if(n==1||n==2)
11                return 1;
12         else f(n-2)+f(n-1);   
13 }
14 
15 }

七.算法题:一个球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下。它在第10次落地时,共经过多少米?第10次反弹多高?

这道算法题也比较简单,实现思路如下:

public class Example20 {
public static void main(String[] args){
double sum=0;
double height=100;

sum(sum,height);
}
public static void sum(double sum,double height){
for(int i=2;i<=10;i++){
height=height/2;
sum+=height*2;
}
System.out.println("总经过的长度:"+sum+100);
System.out.println("第十次反弹多高:"+height/2);
}
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot+SpringMVC+MyBatis快速整合搭建

    SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过...

    IT大咖说
  • Spring常见问题总结(补充版)

    这篇文章主要是想通过一些问题,加深大家对于 Spring 的理解,所以不会涉及太多的代码!这篇文章整理了挺长时间,下面的很多问题我自己在使用 Spring 的过...

    乔戈里
  • 事务隔离级别中的可重复读能防幻读吗?

    其中,可重复读这个隔离级别,有效地防止了脏读和不可重复读,但仍然可能发生幻读,可能发生幻读就表示可重复读这个隔离级别防不住幻读吗?

    码农阿宇
  • 单元测试不止Junit,会MockMvc才是高手!

    在前面的章节我们介绍过 Junit 的使用,也了解过 spring-test,今天我们来了解一个新玩意 -- mock 测试。这里仅仅做一个入门,对返回视图和返...

    java思维导图
  • Spring MVC项目使用Feign声明式服务调用

    声明式编程范式:声明式编程表明想要实现什么目的,应该做什么,但是不指定具体怎么做。

    suveng
  • 你知道@RequestMapping的name属性有什么用吗?带你了解URI Builder模式(UriComponents/UriComponentsBuilder)【享学Spring MVC】

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    BAT的乌托邦
  • Struts2基本使用

    是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。

    木瓜煲鸡脚
  • MySQL purge 线程

    https://dev.mysql.com/doc/refman/5.7/en/innodb-improved-purge-scheduling.html

    二狗不要跑
  • Spring Boot 中自定义 SpringMVC 配置,到底继承谁?

    用过 Spring Boot 的小伙伴都知道,我们只需要在项目中引入 spring-boot-starter-web 依赖,SpringMVC 的一整套东西就会...

    江南一点雨
  • Java微信公众平台开发(一)--接入微信公众平台 一、验证服务器代码编写。二、服务器端验证。

    今天正式开始微信公众平台的二次开发。网上有很多的及射入微信公众平台的教程。总的来说都差不多,当了解了接入流程解析,什么都显得理所当然。

    用户2417870

扫码关注云+社区

领取腾讯云代金券