今天下午两点的时候,我去面了一家招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) 教师表

学生表:

 CREATE TABLE student
(
s_id INT,
sname varchar(32),
sage INT,
ssex varchar(8)
);

课程表:

 CREATE TABLE course
(
c_id INT,
cname varchar(32),
t_id INT
);

分数表:

 CREATE TABLE sc
(
s_id INT,
c_id INT,
score INT
) ;

教师表:

CREATE TABLE teacher
(
t_id INT,
tname varchar(16)
);
 1、查询“001”课程比“002”课程成绩高的所有学生的学号;
select a.s_id FROM
(select s_id,score from sc where c_id = '')a,(select s_id,score from sc where c_id = '')b
where a.score > b.score and a.s_id = b.s_id; 2、查询平均成绩大于60分的同学的学号和平均成绩;
select s_id,avg(score)
from sc
group by s_id
having avg(score)>60;
3、查询所有同学的学号、姓名、选课数、总成绩;
select Student.s_id,Student.Sname,count(SC.c_id),sum(score)
from Student left Outer join SC on Student.S_id=SC.S_id
group by Student.S_id,Sname ;
4、查询姓“李”的老师的个数;
select DISTINCT(count(tname))
from teacher
where tname like '李%';
5、查询没学过“叶平”老师课的同学的学号、姓名;
select Student.S_id,Student.Sname
from Student where s_id not in
(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 = '叶平') 6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名; select student.s_id,student.sname from SC,student where SC.s_id=student.s_id and SC.C_id=''
and EXISTS
(select * from SC as SC2 where SC2.s_id=SC.s_id and SC2.C_id='') 7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
select s_id,sname
from student
where s_id in
(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 = '叶平'
GROUP BY sc.s_id
having count(SC.c_id) =
(select count(c.c_id) from course c,teacher t
where c.t_id=t.t_id and t.tname = '叶平')) ; 8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;
select a.s_id,a.sname from
(select sc.s_id,sc.score,student.sname from SC,student where SC.s_id=student.s_id and SC.C_id='')a,
(select sc.s_id,sc.score from SC,student where SC.s_id=student.s_id and SC.C_id='')b
where a.s_id = b.s_id and a.score> b.score; 9、查询所有课程成绩小于60分的同学的学号、姓名;
select S_id,Sname
from Student
where S_id not in (select S.S_id from Student AS S,SC where S.S_id=SC.S_id and score>60); 10、查询没有学全所有课的同学的学号、姓名;
select s.s_id,s.sname
from student s,sc sc
where s.s_id = sc.s_id
GROUP BY s.s_id,s.sname
HAVING COUNT(sc.c_id) < (select count(c_id) from course) 11、查询至少有一门课与学号为“1”的同学所学相同的同学的学号和姓名;
select DISTINCT Student.s_id,Student.sname
from Student,sc where student.s_id = sc.s_id
and sc.c_id in (select c_id from sc where s_id='')

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

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

1月 2月 3月 4月 5月 6月 7月 8月
1 1 2 3 5 8 13 21

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

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

 public class Example{

 public static void main(String[] args){
for(int i=1;i<=24;i++){
System.out.print("每个月兔子的总数:"+f(i));
}
} public static int f(int n){
if(n==1||n==2)
return 1;
else f(n-2)+f(n-1);
} }

七.算法题:一个球从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);
}
}

Java后端面试经验总结分享(一)的更多相关文章

  1. 腾讯,华为,阿里…7家Java后端面试经验大公开!

    感觉面试还是主要围绕简历来问的,所以不熟悉的东西最好不要随便写上去.项目和基础都很重要,整体的基础知识的框架可以参考GitHub 上 CYC2018的博客,分类很全,但是深入的学习还是要自己去看书,写 ...

  2. Java后端面试的一切技巧和常见的问题经验总结

    原文地址:cnblogs.com/JavaArchitect/p/10011253.html 上周,密集面试了若干位Java后端候选人,工作经验在3到5年间.我的标准其实不复杂(适用90%小小小公司, ...

  3. 三年半Java后端面试经历

    经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于开始重拾面试信心,再次出征. 鹅厂 面试职位:go后端开发工程师,接受从Java转语言 都知道鹅厂是cpp的主战场,而以cpp为背景 ...

  4. 两年Java的面试经验

    前言:从过年前就萌生出要跳槽的想法,到过年来公司从3月初提出离职到23号正式离职,上班的时间也出去面试过几家公司,后来总觉的在职找工作总是得请假,便决心离职后找工作.到4月10号找到了一家互联网公司成 ...

  5. 转:Java后端面试自我学习

    引自:https://www.cnblogs.com/JavaArchitect/p/10011253.html 最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前 ...

  6. 三年半Java后端面试鹅厂,三面竟被虐的体无完肤

    经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于开始重拾面试信心,再次出征. 鹅厂 面试职位: go后端开发工程师,接受从Java转语言 都知道鹅厂是cpp的主战场,而以cpp为背 ...

  7. Java面经 面试经验 互联网公司面试经验 后端面试经验

    应聘相关 声明: 1,程序员相关的哈 2,万事无定论,比如说,就算你小学毕业,但是java基础却扎实到变态,我相信open的公司还是会给你机会的. 3,心态很重要,虽然日常的心态不容易控制,面试那俩小 ...

  8. 2018年Java后端面试经历

    楼主16年毕业,16年三月份进入上一家公司到今年3月底,所以这是一份两年工作经验面经分享. 都说金三银四,往些年都是听着过没啥特别的感觉.今年自己倒是确确实实体验了一把银四,从3月26裸辞到4月17号 ...

  9. java后端面试

    背景:最近在找工作,但是发现每次找的时候都需要整理一些基础知识,这些点又是面试过程中经常被问到的,每次都进行整理很麻烦,所以有打算好好总结下. 转载自:https://www.cnblogs.com/ ...

随机推荐

  1. unsqueeze 和 squeeze

    squeeze压缩的意思 就是在第几维为1 去掉 unsqueeze 解缩 在第几维增加 变成*1 squeeze用法 c = b.view(1, 1, 1, 2, 3) c.squeeze(0) # ...

  2. neural_transfer风格迁移

    ContentLoss 首先是要定义一个内容差异损失函数,这里直接调用functional.mse_loss(input,self.target)就可以计算出其内容差异损失. 注意这里一般是定义一个网 ...

  3. python3虚拟环境中解决 ModuleNotFoundError: No module named '_ssl'

    前提是已经安装了openssl 问题 当我在python3虚拟环境中导入ssl模块时报错,报错如下: (py3) [root@localhost Python-3.6.3]# python3 Pyth ...

  4. error LNK2001: unresolved external symbol "__declspec(dllimport)

    作为C++的小白,出现这个错误,是最头痛的.针对这种问题,我搜了网上的相关答案,很多都是在教Project ---> Settings中改动相关设置.我改了之后,问题依旧没有解决.后面查了这种问 ...

  5. 《Java 8 in Action》Chapter 2:通过行为参数化传递代码

    你将了解行为参数化,这是Java 8非常依赖的一种软件开发模式,也是引入 Lambda表达式的主要原因.行为参数化就是可以帮助你处理频繁变更的需求的一种软件开发模式.一言以蔽之,它意味 着拿出一个代码 ...

  6. 关于事务,事务的特性,spring事务的传播特性

    1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败). 2.事务特性: 事务特性分为四个:原子性(At ...

  7. 原生js实现的一个随机颜色的简单效果

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta na ...

  8. Liunx软件安装之Tomcat

    一.Tomcat 安装 1.1 yum 安装 1) 安装 tomcat 基础服务 sudo yum -y install tomcat 2) 安装管理界面 sudo yum -y install to ...

  9. python 12 生成器

    目录 1. 生成器 yeild 2. 推导式 2.1 列表推导式: 2.2 生成器推导式: 2.3 字典推导式: 2.4 集合推导式: 3. 内置函数(一) 1. 生成器 yeild 生成器的本质就是 ...

  10. CentOS -- Zookeeper installation and configure

    1 JDK 1.8 must installed first 2 Get Zookeeper package wget https://archive.apache.org/dist/zookeepe ...