15道面试题

继承星轨
• 阅读 985
1、面向对象的三大特征?

封装、继承、多态

封装 就是把同一类事物的属性和方法归到同一个类中,方便使用 防止该类的代码和数据被外部类定义的代码随意访问 要访问该类的数据和代码必须通过严格的方法控制

继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法

多态 封装和继承几乎都是为多态而准备的 多态是同一个行为具有多个不同表现实行或形态的能力 多态是一个接口,使用不同的实例而执行不同的操作

2、ArrayList和LinkedList区别

ArrayList是基于数组实现,LinkedList是基于链表实现。
ArrayList在查找时速度快,LinkedList在插入与删除时更具优势。
LinkedList 比 ArrayList 需要更多的内存

3、接口和抽象类的异同是什么?

相同点:
--都可以出现抽象方法
--都不能被实例化
--都需要子类重写抽象方法
--接口 和 抽象类 体现了继承结构里的 抽象层

 附:问题: 抽象层的表现可以是接口?也可以是抽象类?--到底设计成谁?
 答案: 看需不需要提供方法体。
        如果都是抽象方法,那就直接设计成接口,还可以多继承多实现更灵活。
        如果有普通方法,那就还是设计成抽象类吧,坏处是只能单继承。

不同点:
--抽象类里有构造方法,用来给子类创建对象.接口里没有构造方法.
--抽象类里有变量,但是接口里,只有常量,会为简写的常量自动拼接public static final
--抽象类里有普通方法,但是接口里,都是抽象方法(除了jdk1.8)
--接口里的抽象方法可以简写,会为简写的抽象方法自动拼接public abstract
--抽象类只能是和子类之间发生单根继承关系 -
-接口和实现类之间是实现 关系,而且可以 多实现
--接口和接口 之间是继承 关系,而且可以 多继承
--接口 是为了突破java单继承的局限性来的

4、说说反射的用途?

反射最重要的用途就是开发各种通用框架。

反射机制是Java语言中一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许对其内部成员进行操作。反射机制提供的功能主要有:得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象的方法。

5、解释什么是JSON?

json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。

(1)JSON 是一种轻量级的数据交换格式。
(2)JSON 独立于语言和平台,JSON 解析器和 JSON 库支持许多不同的编程语言。
(3)JSON的语法表示三种类型值,简单值(字符串,数值,布尔值,null),数组,对象

6、AJAX请求的时候get和post方式有什么区别?

1.使用Get请求时,参数在URL中显示,而使用Post方式,则不会显示出来
2.使用Get请求发送数据量小,Post请求发送数据量大
3.get请求需注意缓存问题,post请求不需担心这个问题

7、简单解释JavaScript中闭包的用法?

闭包可以用在许多地方。它的最大用处有两个, 一个是可以读取函数内部的变量。 另一个就是让这些变量的值始终保持在内存中。

1、提供一种间接访问函数内部变量的方法
2、延长函数内部的局部变量的生命周期(慎用!局部变量过多会占大量内存)
3、全局变量私有化,减少全局变量污染
4、函数局部变量在函数执行完后释放内存(函数执行完毕,其内部的变量立即销毁)
5、更新复杂变量(可以对变量进行校验和判断,保证安全性和稳定性)

8、数据库事务ACID原则?
  • A 原子性:顾名思义原子就不可在分的,事务作为一个整体,对数据库的执行要么成功,要么失败。
  • C 一致性:事务从一个一致状态转换到另一个一致状态。
  • I 隔离性:多个事务并发执行,事务之间的执行互不干扰。
  • D 持久性:一旦一个事务提交,它对数据库的操作将永久保存到数据库当中。
9、SQL语句
10、请说明进程和线程的区别?并说出三种进程间通讯的方式及三种线程同步的方法?

1.进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)

2.进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、.堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

3.线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。

4.多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

11、请对冒泡排序、插入排序、堆排序、快速排序的速度进行排序?并说明哪种算法是稳定的?如果对学生成绩进行排序应该使用哪一种?

冒泡排序>插入排序>快速排序>堆排序

稳定的:冒泡排序、插入排序、

冒泡插入

12、请说明IO操作中同步和异步的区别?

同步是阻塞模式,异步是非阻塞模式。

同步: 就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;

异步: 是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

13、单例模式特点?你还知道哪些设计模式?

java中单例模式是一种常见的设计模式,单例模式分两种:懒汉式单例、饿汉式单例

特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统 中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。

23种设计模式分为三大类:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

14、什么是视图?有什么优缺点?

视图(VIEW)也被称作虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一个名字,即视图名字。 视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。

视图的优点
(1)视图能简化用户的操作
(2)视图机制可以使用户以不同的方式查询同一数据
(3)视图对数据库重构提供了一定程度的逻辑独立性
(4)视图可以对机密的数据提供安全保护

15、1³+5³+3³=153 这样的数叫水仙花数,请编程写出1000以内水仙花数水仙花数?
 public class Test {
        public static void main(String[] args) {
            //  打印1-1000的水仙花数水仙花数:
            // 例如 153=1*1*1+5*5*5+3*3*3
            //定义标记,水仙花数起始值位0
            int count =0;
            //要找出1000以内的水仙花数,先要遍历其每个数字;因为水仙花数是三位数所以从100开始
            for (int i = 100; i < 1000; i++) {
                //取出个位
                int g = i%10;
                //取出十位
                int s = i/10%10;
                //取出百位
                int b = i/100;
                //判断每个位上的立方和是否等于它自己,如果是则打印出该数字
                if (g*g*g+s*s*s+b*b*b==i){
                    //如果是水仙花数,count加一
                    count++;
                    System.out.println(i);
                }
            }
            System.out.println("1000以内水仙花数的个数:"+count);
        }
    }
16.Java语言中访问修饰符有哪些?作用域分别是什么?

public 当前类 同包类 子孙类 所有包
protected 当前类 同包类 子孙类
default 当前类 同包类
private 当前类

17.下列程序会输出什么?

String a="abc";
String b="a";
String c=b+"bc";
String d="a"+"bc";
String e=c.intern();
System.out.println(a==c); //false
System.out.println(a==d); //true
System.out.println(a==e); //true

18.创建线程的方式有哪些?线程的生命周期有哪些?

实现Runnable接口
继承Thread类
生命周期:新建 可运行 运行 阻塞 死亡

19.简述List、Set、Map集合有哪些子类?子类的使用场景有哪些?应用场景
20.简述接口和抽象类的区别与使用场景?
  1. 接口中没有构造方法 抽象类中有构造方法
  2. 接口与类之间是实现关系可以多实现、接口和接口是继承的关系可以是多继承 抽象类与子类之间是继承关系单继承
  3. 接口使用interface修饰 抽象类是abstract 修饰
  4. 接口中只有常量 抽象类中可以有变量
  5. 接口中的普通方法必须需要加default或static修饰 抽象类中不需要
21.数组[2,3,5,8,9,0,7,6,1],请用程序找出数组中最大的三个数。
package 面试;

import java.util.Arrays;

public class 排序 {

    public static void main(String[] args) {

        int[] arr = {2,3,5,8,9,0,7,6,1};
        int date;
        for(int i = 0;i<arr.length;i++) {
            for (int j = i+1; j < arr.length; j++) {
                if (arr[i]<=arr[j]) {
                    date=arr[j];
                    arr[j]=arr[i];
                    arr[i]=date;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
        System.out.println(arr[0]+","+arr[1]+","+arr[2]);
        
        int[] arr1 = {2,3,5,8,9,0,7,6,1};
        Arrays.sort(arr1);
        System.out.println(arr1[arr1.length-1]+","+arr1[arr1.length-2]+","+arr1[arr1.length-3]);
        
    }

}
22.有三个线程A、B、C,请写出程序使得三个线程

(1)同时执行
(2)A、B同时执行后执行C
(3)先执行线程A,A执行结束后执行线程B,B执行结束后执行线程C

package 面试;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Thread3 implements Runnable {

    final Lock lock = new ReentrantLock();

    private String name;

    public Thread3(String name) {
        super();
        this.name = name;
    }

    @Override
    public void run() {
        for (int i = 1; i < 100; i++) {
            System.out.println("线程" + name + ":" + i);
        }
    }

    public static void main(String[] args) {
        Thread3 t1 = new Thread3("A");
        Thread3 t2 = new Thread3("B");
        Thread3 t3 = new Thread3("C");

        Thread A = new Thread(t1);
        Thread B = new Thread(t2);
        Thread C = new Thread(t3);
//第二题答案~~~~
        try {
            A.start();
            B.start();
            B.join();
            C.start();
            C.join();

        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
点赞
收藏
评论区
推荐文章
半臻 半臻
4年前
Python基础6——面向对象
14面向对象14.1面向对象基础​面向对象是一种编程思想,处理面向对象编程以外,还有面向过程编程​三大特征:1.封装2.继承3.多态​面向过程与面向对象的区别1.面向过程:自己动手洗衣服,拧衣服、晾衣服2.面向对象:构造一个洗衣机对象,让洗衣机对象完成14.2类和对象​类:相同属性和功能的一类事物。​人是一个类,张三(
Wesley13 Wesley13
3年前
java面试(1)
1.面向对象的基本特征  封装、继承、多态、  封装:把客观事物封装成类  继承:继承一个类,就可以使用这个类的所有功能,并且在无需编写原来类的情况下对这些功能进行扩展  多态:子对象调用父对象,父对象会根据当前调用的子对象以不同的方式运作  实现多态:覆盖,重载2.final\\finally\\finalize的区别  fin
Wesley13 Wesley13
3年前
java面向对象的三大特性
java面向对象的三大特性1.封装,把事物封装成抽象的类,通过访问控制符把自己的成员变量和函数对不可信的进行信息隐藏以及提供方法给可信的类和对象来操作。2.继承,继承可以使用现有类的所有功能和成员变量,并且无需重新编写原来的类的情况下对这些功能进行扩展。3.多态,实现了对代码的复用,多态具体体现为重载和重
Wesley13 Wesley13
3年前
java的封装和this关键字知识整理
封装封装概述封装,是面向对象思想的特征之一。面向对象共有三个特征:封装,继承,多态。|封装表现:1.方法是最基本的封装体2.类也是一个封装体.封装的好处:1、提高了代码的复用性。 2、隐藏了实现细节,还要对外提供可以访问的方式。便于调用者的使用。这是核心之一,也可以理解为就是封装的概念。 3、提高了安全性。
Wesley13 Wesley13
3年前
java知识点二:面向对象
面向对象一.什么叫面向对象把一组数据结构和处理他们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)/泛化(generalization),通过多态(polymorp
lucien-ma lucien-ma
4年前
Java封装详解,通俗易懂
封装什么是封装?封装是指将类的属性隐藏在内部,外部不能直接访问和修改,必须通过类提供的方法来完成属性的访问和修改。封装的核心思想就是尽可能把属性都隐藏在内部,对外提供方法来访问,我们可以在这些方法中田间逻辑处理来实现过滤,以屏蔽错误的数据的赋值。封装的步骤1.修改属性的访问权限,使得外部不能直接访问2.提供外部可以直接调用的方法3.在方法中加入属性
Wesley13 Wesley13
3年前
Java(3)
面向对象编程思想:抽象 继承 多态 封装对象:万事万物皆对象. 类:把具有相同属性和方法的对象抽象出来形成的几何体!类是对象的抽象,对象是类的具体!如何描述一个类1.属性(属性不初始化时也有初始值,会自动初始化,整形为0 小数型为0.0  boolea
Wesley13 Wesley13
3年前
Java面试题(一)
看到一篇不错的java面试题的文章,自己整理一下,作为备用吧!Java面试题面向对象的特征有哪些方面?封装最常见的是把属性私有化封装在一个类里面,只能通过方法去访问继承子类继承父类,从而继承了父类的方法和属性抽象
Wesley13 Wesley13
3年前
JAVA面向对象
一、java面向对象的特征?答:java面向对象的特征:封装、继承、多态、抽象。如果问java面向对象的三大特征是什么?那就是封装、继承、多态,但说到面向对象,还有一个很主要的特征就是抽象。1、封装a)铺垫:Java把真实世界中某些具有共同特征的实体抽象成Java中的类,类的实例就是一个对象,而对象和真实世界的实体是一一
Wesley13 Wesley13
3年前
Java面向对象之封装
概述面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。封装的原则将属性隐藏起来,若需要访问某个属性,提供公共方法
桥蕤 桥蕤
1年前
Python封装,继承与多态
封装、继承和多态是面向对象的三大特点;直接看Python中是怎么实现的封装首先定义一个Human类,初始化类的属性和方法:pythonclassHuman:definit(self):这是可以公共知道的属性self.ageNone年龄self.height