基础面试题

news2024/9/22 3:51:31

1、面向对象的三个基本特征?

封装,继承,多态;

`继承:让某个类型的对象获得另一个类型的对象的属性的方法。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。`
    
封装:隐藏部分对象的属性和实现细节,对数据的访问只能通过外公开的接口。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。    
    
 多态:对于同一个行为,不同的子类对象具有不同的表现形式。多态存在的3个条件:1)继承;2)重写;3)父类引用指向子类对象。   
    
    public class Animal { // 动物
    public void sleep() {
        System.out.println("躺着睡");
    }
}
class Horse extends Animal { // 马 是一种动物
        @Override
    public void sleep() {
        System.out.println("站着睡");
    }
}
class Cat extends Animal { // 猫 是一种动物
    private int age;
    public int getAge() {
        return age + 1;
    }
    @Override
    public void sleep() {
        System.out.println("四脚朝天的睡");
    }
}
        
在这个例子中:
​
House 和 Cat 都是 Animal,所以他们都继承了 Animal,同时也从 Animal 继承了 sleep 这个行为。
​
但是针对 sleep 这个行为,Horse 和 Cat 进行了重写,有了不同的表现形式(实现),这个我们称为多态。
​
在 Cat 里,将 age 属性定义为 private,外界无法直接访问,要获取 Cat 的 age 信息只能通过 getAge 方法,从而对外隐藏了 age 属性,这个就叫做封装。当然,这边 age 只是个例子,实际使用中可能是一个复杂很多的对象。
​
    

2、访问修饰符public,private,protected,以及不写时的区别?

img

3、下面两个代码块能正常编译和执行吗?

// 代码块1
short s1 = 1; s1 = s1 + 1;
代码块1编译报错,错误原因是:不兼容的类型: 从int转换到short可能会有损失”。
​
// 代码块2
short s1 = 1; s1 += 1;
代码块2正常编译和执行。
public class com.joonwhee.open.demo.Convert {
  public com.joonwhee.open.demo.Convert();
    Code:
       0: aload_0
       1: invokespecial #1 // Method java/lang/Object."<init>":()V
       4: return
 
  public static void main(java.lang.String[]);
    Code:
       0: iconst_1 // 将int类型值1入(操作数)栈
       1: istore_1 // 将栈顶int类型值保存到局部变量1中
       2: iload_1 // 从局部变量1中装载int类型值入栈
       3: iconst_1 // 将int类型值1入栈
       4: iadd // 将栈顶两int类型数相加,结果入栈
       5: i2s // 将栈顶int类型值截断成short类型值,后带符号扩展成int类型值入栈。
       6: istore_1 // 将栈顶int类型值保存到局部变量1中
       7: return
}
可以看到字节码中包含了 i2s 指令,该指令用于将 int 转成 short。i2s 是 int to short 的缩写。
​
其实,s1 += 1 相当于 s1 = (short)(s1 + 1),有兴趣的可以自己编译下这两行代码的字节码,你会发现是一摸一样的。
​

4、基础考察,指出下题的输出结果

下面先介绍Integer和Int的区别:

2、Integer 类和 int 的区别   ①、Integer 是 int 包装类,int 是八大基本数据类型之一(byte,char,short,int,long,float,double,boolean)

  ②、Integer 是类,默认值为null,int是基本数据类型,默认值为0;

  ③、Integer 表示的是对象,用一个引用指向这个对象,而int是基本数据类型,直接存储数值。

回到顶部 3、Integer 的自动拆箱和装箱   自动拆箱和自动装箱是 JDK1.5 以后才有的功能,也就是java当中众多的语法糖之一,它的执行是在编译期,会根据代码的语法,在生成class文件的时候,决定是否进行拆箱和装箱动作。

①、自动装箱   一般我们创建一个类的时候是通过new关键字,比如:

Object obj = new Object();

  但是对于 Integer 类,我们却可以这样:

Integer a = 128;

  为什么可以这样,通过反编译工具,我们可以看到,生成的class文件是:

Integer a = Integer.valueOf(128);

  这就是基本数据类型的自动装箱,128是基本数据类型,然后被解析成Integer类。

  ②、自动拆箱   我们将 Integer 类表示的数据赋值给基本数据类型int,就执行了自动拆箱。

Integer a = new Integer(128);
​
​
​
int m = a;

  反编译生成的class文件:

Integer a = new Integer(128);
​
​
​
int m = a.intValue();

  简单来讲:自动装箱就是Integer.valueOf(int i);自动拆箱就是 i.intValue();

回到顶部

            public static void main(String[] args) {
            Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
​
            System. out.println( f1 == f2); //true
            System. out.println( f3 == f4); //false
       

public static void main(String[] args) {
    Integer i = 10;
    Integer j = 10;
    System.out.println(i == j);
    第一个打印结果为 true
  对于 i == j ,我们知道这是两个Integer类,他们比较应该是用equals,这里用==比较的是地址,那么结果肯定为false,但是实际上结果为true,这是为什么?
  我们进入到Integer 类的valueOf()方法:
​
  
​
  分析源码我们可以知道在 i >= -128 并且 i <= 127 的时候,第一次声明会将 i 的值放入缓存中,第二次直接取缓存里面的数据,而不是重新创建一个Ingeter 对象。那么第一个打印结果因为 i = 10 在缓存表示范围内,所以为 true。
​
    Integer a = 128;
    Integer b = 128;
    System.out.println(a == b);
    ②、第二个打印结果为 false
​
  从上面的分析我们知道,128是不在-128到127之间的,所以第一次创建对象的时候没有缓存,第二次创建了一个新的Integer对象。故打印结果为false
    
    
     
    int k = 10;
    System.out.println(k == i);
    
    ③、第三个打印结果为 true
​
  Integer 的自动拆箱功能,也就是比较两个基本数据类型,结果当然为true
    
    
    int kk = 128;
    System.out.println(kk == a);
    
    ③、第三个打印结果为 true
​
  Integer 的自动拆箱功能,也就是比较两个基本数据类型,结果当然为true
      
    Integer m = new Integer(10);
    Integer n = new Integer(10);
    System.out.println(m == n);
    
    ③、第三个打印结果为 true
​
  Integer 的自动拆箱功能,也就是比较两个基本数据类型,结果当然为true
    
  
}

5、用最有效率的方法计算2乘以8?

2 << 3。

进阶:通常情况下,可以认为位运算是性能最高的。但是,其实编译器现在已经“非常聪明了”,很多指令编译器都能自己做优化。所以在实际实用中,我们无需特意去追求实用位运算,这样不仅会导致代码可读性很差,而且某些自作聪明的优化反而会误导编译器,使得编译器无法进行更好的优化。

这可能就是所谓的“猪队友”吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1013616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卷积神经网络实现咖啡豆分类 - P7

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 目录 环境步骤环境设置包引用全局设备对象 数据准备查看图像的信息制作数据集 模型设…

FL Studio21.2国内中文语言最新试用版新增功能介绍

FL studio是一款音乐软件国内试用版仅更新至21.0&#xff0c;国外已更新至21.2了&#xff01;初始自带的鼓组音色也从土嗨鼓变成了beat作者喜闻乐见的808&#xff0c;KSHMR直接原地失业。注意安装后上方的菜单可能会出现布局杂乱的情况&#xff0c;右键菜单空白处选择default即…

Linux的常见指令

目录 pwd命令ls 指令mkdir指令touch指令cd 指令rmdir指令 && rm 指令man指令nanocp指令mv指令cat指令more指令less指令head指令tail指令grep指令热键zip/unzip指令tar指令uname –r指令输出重定向 图形化界面和命令行操作本质都是对操作系统进行直接或间接的操作 pwd命…

x86平台运行arm64平台docker 镜像

本文介绍在x86服务器上安装qemu-aarch64-statick仿真器&#xff0c;以实现x86服务器可以运行docker或docker-compose镜像。 报错信息&#xff1a; x86服务器默认不能运行ARM平台镜像&#xff0c;会提示如下错误&#xff1a; WARNING: The requested images platform (linux/ar…

Mock数据:单元测试中的心灵鸡汤

在当今的软件开发领域&#xff0c;质量控制已经成为了一个不可或缺的环节。为了确保软件的稳定性和可靠性&#xff0c;开发者们投入了大量的时间和精力进行各种测试。其中&#xff0c;单元测试作为最基础的测试方法&#xff0c;其重要性不言而喻。然而&#xff0c;单元测试中的…

GDB之源码与汇编映射对应关系(十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

排序算法-----归并排序

目录 前言&#xff1a; 归并排序 1. 定义 2.算法过程讲解 2.1大致思路 2.2图解示例 拆分合成步骤 ​编辑 相关动态图 3.代码实现&#xff08;C语言&#xff09; 4.算法分析 4.1时间复杂度 4.2空间复杂度 4.3稳定性 前言&#xff1a; 今天我们就开始学习新的排序算法…

数值类型表示二——定点和浮点格式

目录 目录 定点小数与定点整数 定点小数原反补的转换 定点小数与定点整数的取值范围 位数扩展的区别 浮点数的格式 浮点数的规格化 规格化处理举例 例1&#xff1a; 例2&#xff1a; 特例&#xff1a; 知识点总结&#xff1a; 浮点数的IEEE754标准 移码的回顾&…

通过UltraSync减轻主节点负担、提升业务系统性能,AntDB如何做到?

众所周知&#xff0c;数据库在多中心场景下&#xff0c;主中心主库不仅要承担原本业务的压力&#xff0c;而且还要将redo日志传输到不同的备库端&#xff0c;这样对主库将产生很大的性能影响。通常情况下&#xff0c;备中心和主中心不在同⼀机房&#xff0c;为了保证业务响应速…

Linux内核 6.6版本将遏制NVIDIA驱动的不正当行为

导读Linux 内核开发团队日前宣布&#xff0c;即将发布的 Linux 6.6 版本将增强内核模块机制&#xff0c;以更好地防御 NVIDIA 闭源驱动的不正当行为。 Linux 内核开发团队日前宣布&#xff0c;即将发布的 Linux 6.6 版本将增强内核模块机制&#xff0c;以更好地防御 NVIDIA 闭…

【HR】胜任力相关资料--20230915

0_建模技术介绍 传统的两种胜任力词典 光辉合益LOMINGER 67项能力检核表 海氏 DDI胜任力词典2.0 北森GENE建模技术 三种建模的方法 A公司 建模及应用 素质模型的组合 建模的选择 工具&#xff1a;光辉领导力素质卡片【38条素质】 素质模型示例 素质模型的应用及意义 1_能力素…

创建UI账号密码登录界面

头文件 #ifndef MYWND_H #define MYWND_H#include <QPushButton> #include <QMainWindow>class MyWnd : public QMainWindow {Q_OBJECTpublic:MyWnd(QWidget *parent nullptr);~MyWnd(); }; #endif // MYWND_H 源文件 #include "mywnd.h" #include &…

链动2+1模式:让中小企业家轻松实现社交电商

社交电商是一种利用社交网络和社群平台&#xff0c;通过人与人之间的互动和分享&#xff0c;实现商品或服务的销售和推广的电商模式。社交电商具有低成本、高效率、高转化率、高忠诚度等优势&#xff0c;是当下最火热的电商趋势之一。 然而&#xff0c;对于中小企业家来说&…

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 七)

PersistentStorage&#xff1a;持久化存储UI状态 前两个小节介绍的LocalStorage和AppStorage都是运行时的内存&#xff0c;但是在应用退出再次启动后&#xff0c;依然能保存选定的结果&#xff0c;是应用开发中十分常见的现象&#xff0c;这就需要用到PersistentStorage。 Pe…

MongoDB的搭建 和crud操作

MongoDB docker 下载 docker run --restartalways -d --name mongo -v /docker/mongodb/data:/data/db -p 27017:27017 mongo:4.0.6使用navcat工具使用MongoDB Crud操作 jar包 <dependency><groupId>org.projectlombok</groupId><artifactId>lom…

three.js 入门 初识

基本步骤&#xff1a; 初始设置创建场景创建相机创建可见对象创建渲染器渲染场景 安装 npm install three 引入 import * as THREE from "three"; 一、three三要素&#xff1a;场景、相机、渲染 1.场景&#xff1a; //创建场景 const scenenew THREE.Scene()…

python中not的用法

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 话不多说&#xff0c;直接开搞&#xff0c;如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 python中的not具体表示是什么: 在python中not是逻辑判断词&#xff0c;用于布尔型True和False&#xff0c; not True为F…

【Unity插件】实现多人在线游戏——Mirror插件的使用介绍

文章目录 前言导入Mirror插件 简单介绍一、RPC调用二、错误注意 基本使用一、创建场景的网络管理器二、创建一个玩家三、添加玩家初始生成位置四、玩家控制五、同步摄像机六、同步不同角色的名字和颜色修改七、同步动画八、同步子弹方法一方法二 九、聊天功能十、场景同步切换十…

torch.where()两种用法

参考官方文档。 官方文档中只给了第一种用法。根据条件condition&#xff0c;从input,other中选择元素f返回。如果满足条件&#xff0c;则返回input元素。若不满足&#xff0c;返回other元素。 还有一种用法是通过where返回张量中满足条件condition的坐标&#xff0c;以二维张…

【Unity每日一记】资源加载相关和检测相关

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…