JAVA 面试题真题解析(5)DASHEN

面试题真题解析(5)DASHEN

沈阳大神科技有限公司

简答题

1、面向对象的三个特性

封装、继承和多态

2、什么是函数的重载

函数重载是一个同名函数完成不同的功能,编译系统在编译阶段通过函数参数个数、参数类型不同,函数的返回值来区分该调用哪一个函数,即实现的是静态的多态性。但是记住:不能仅仅通过函数返回值不同来实现函数重载。

3、接口和抽象类有哪些区别

接口和抽象类的区别:

  • 接口是由 interface 修饰的;抽象类是由 abstract 修饰的。
  • 接口需要被 implements 实现;抽象类需要被 extends 继承。
  • 接口中只能有常量或抽象方法;抽象类可以有成员变量,方法,且不一定有抽象方法。
  • 一个类能实现多个接口;但一个类只能继承一个抽象类。
  • 接口中不能定义构造方法;抽象类中可以定义构造方法。
  • 接口中访问修饰符默认 public static final;抽象类中任何访问修饰符都行。

4、static 和 final 的区别

static:

static 表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以修饰代码块和内部类。static 静态的特点:

  • 随着类的加载而加载
  • 优先于对象存在
  • 被所有对象所共享
  • 可以被类名点直接调用

final:

  • final 是最终的意思,可以修饰变量、方法、类
  • final 修饰成员变量表示常量,只能被赋值一次,赋值后不能再被改变
  • final 修饰方法不能被子类的方法覆盖,但可以被继承
  • final 修饰类不能被继承,没有子类,final 类中的方法默认是 final 的
  • final 不能修饰构造方法

5、"==" 和 equals 方法有什么区别

“==”

  • 在基本类型中,比较的是值是否相等。
  • 在引用类型中,比较的是两个对象的地址是否相等。

“equals”

  • 默认(Object类)的情况下也是比较的是引用是否相等(地址值)
  • 如果类重写了(String、Integer 等)equals 方法,比较的就是对象的内容是否相等。

6、一个 static 方法内部可以对非 static 方法的调用吗?

不可以,静态(static)方法只能访问静态成员,因为静态的内容是随着类的加载而加载,他是先进入内存中的。而非 static 方法是要与对象关联在一起的,必须创建一个对象后才可以在该对象上进行方法调用。

7、int 和 Integer 的区别是什么?

int 和 Integer 的区别:

  • int 是基本类型,Integer 是 int 的包装类,是一种引用类型。
  • int 类型可以直接使用,而 Integer 变量必须实例化后才能使用。
  • int 是直接存储数据值,而 Integer 实际上是对象的引用,当 new 一个 Integer 时实际上是生成一个指针指向此对象。
  • int 的默认值是 0,而 Integer 的默认值是 null。

8、 HashMap 与 LinkedHashMap,和 TreeMap 的区别?

HashMap:

  • HashMap 根据键的 HashCode 值存储数据,根据键可以直接获取他的值。
  • HashMap 有很快的访问速度。
  • HashMap 遍历时区的数据的顺序是完全随机的。
  • HashMap 是非线程安全的。

LinkedHashMap:

  • LinkedHashMap 是 HashMap 的一个子类。
  • LinkedHashMap 基于链表,保存了记录的插入顺序。
  • LinkedHashMap 一般情况下遍历的时候速度会比 HashMap 慢,但是 LinkedHashMap 的遍历速度只和实际数据有关,而 HashMap 的遍历速度和容量有关。

TreeMap:

  • TreeMap 实现的 SortMap 接口,能够把保存的记录根据键排序,默认按键值的圣墟排序。
  • TreeMap 取出来的是排序后的键值对,也可以自定义比较器。
  • TreeMap 是非线程安全的。

9、写出下列代码的输出结果

public class Test {
    public static void main(String[] args) {
        String a = new String("XX");
        String b = new String("XX");
        System.out.println(a==b);
        System.out.println(a.equals(b));
    }
}

正确答案:false、true

当一个引用指向了一个新的对象时,地址就不同了,== 比较的是地址,所以不同,equals 比较的是具体的值,所以相等。

10、写出下列代码的计算结果

public class Test {
    public static void main(String[] args) {
        Integer a = new Integer(3);
        Integer b = 3;
        int c = 3;
        System.out.println(a==b);
        System.out.println(a==c);
    }
}

正确答案:false、true

a 指向的是新的对象,b 指向的是内存中的数据,所以不同。

Integer 和 int 进行比较时,会自动拆箱,所以相同。

11、写出下列代码的计算结果

public class Test {
    public static void main(String[] args) {
        byte a = 127;
        byte b = 127;
        b = (a + b);
        System.out.println(b);
    }
}

正确答案:-2

无力吐槽,你这代码编译都不通过啊大哥。。。第五行不强转的么??

byte 的可用范围在 -128 到 127,一旦超过就会溢出,所以结果为 -2

12、你在何种场景下使用过缓存?用到了哪些组件或产品?

浏览器缓存:浏览器可以缓存一些静态资源,比如图片、js、css等,这些都是不常变化的内容,所以没有必要每次都去请求。(减少网络IO消耗,提高访问速度)

CPU缓存
是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。(选用存储介质,提高访问速度:高速缓存>内存;减少重复量)

数据库缓存
在 WebServer 和 DB 之间加一层 cache,这层 cache 一般选取的介质是内存,因为我们都知道存入数据库的数据都具有持久化的特点,那么读写会有磁盘IO的操作,内存的读写速度远比磁盘快得多。(选用存储介质,提高访问速度:内存>>磁盘;减少磁盘IO的操作,减少重复查询,提高吞吐量)

13、缓存数据一般存储在哪里?比数据库存储有哪些优势?

一般存储在 Redis 数据库中,Redis 相比数据库性能高、速度快,也支持数据的持久化。Redis 不仅仅支持简单的 key-value 类型数据,同时还提供 list、set、zset、hash 等数据结构的存储。Redis 还支持数据的备份,即 master-slave 主从模式的数据备份。Redis 支持事务。

14、缓存过期策略有哪些?你是怎样将数据库同步到缓存的?

缓存过期策略:

  1. FIFO(First In First out):先见先出,淘汰最先近来的页面,新进来的页面最迟被淘汰,完全符合队列。

  2. LRU(Least recently used):最近最少使用,淘汰最近不使用的页面

  3. LFU(Least frequently used): 最近使用次数最少, 淘汰使用次数最少的页面

同步到缓存:??

15、谈谈你对 AOP 的理解

AOP(Aspect Oriented Programming)是面向切面编程,作为面向对象编程的补充,用于对一些与业务无关的,但是可能对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为 “切面” ,减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志管理、事务处理等。

16、你开发 SpringBoot 工程是如何编译和发布到服务器上的,用到了哪些插件和工具?

首先在 IDEA 工具上将 SpringBoot 工程打包,点击 Maven 栏内的 package 或 install 会自动将打包好的 jar 包保存在项目的 target 目录下。我们获取到 jar 包以后,通过 Xshell 或者 MobaXterm 等远程控制软件将 jar 包存入到 Linux 指定目录下,并输入部署指令即可发布到服务器中。

17、你在 SpringBoot 工程中使用了何种数据持久化框架?

SpringBoot 整合 JDBC Template

SpringBoot 整合 MyBatis

SpringBoot 整合 JPA

18、什么是数据库的聚集索引和非聚集索引?

不懂

19、什么是数据库事务?

数据库是面向多用户的共享机制,所以数据库管理要具有并发性和同步机制,而事务就是一种多个执行步骤的执行特性,即要么同时执行相应的操作要么一个也不执行。这样就保证了在多个用户操作同一数据时数据的一致性。这样保证数据一致性的操作执行特性就称为事务。

20、SQL 语句中 left join 和 inner join 的区别是什么?

  • left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
  • right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
  • inner join(等值连接) 只返回两个表中联结字段相等的行

21、根据如下结构表,按如下需求写出 SQL 语句:

student 表:

student_idstudent_namegenderscore
1徐正奇90
2王红梅97
3卢锡安89
4乔鲁诺96
5江天泽98
6张涵99
7江天泽87
8宋雨琦93

Q1:计算出男生人数

select count(1) from student where gender = “男”

Q2:计算总分数

select sum(score) from student

Q3:全班最高分数的同学

select * from student order by score desc limit 1

Q4:找出同名的同学

select student_name from student group by student_name having count(1) > 1

Q5:使用 group by,sum,avg 等函数计算出男生和女生的平均分数

select avg(score) from student group by gender

22、根据如下表结构,按如下需求写出 SQL 语句:

student 表:

student_idstudent_namegenderscoreclass_id
1徐正奇901
2王红梅971
3卢锡安891
4乔鲁诺961
5江天泽981
6张涵992
7江天泽872
8宋雨琦932

class 表:

class_idclass_name
1一年一班
2一年二班

根据上述 student 表和 class 表,通过 sql 语句得出如下结论:

student_nameclass_namegenderscore
江天泽一年二班87
宋雨琦一年二班93

SQL 语句:

select student_name sn,class_name cn,gender g,score from student s join class c on s.class_id = c.class_id where s.class_id = 2 and score < 95

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值