Java基础+框架 面试题

第一轮面试题

面试题

第二轮面试题

Java基础

1.活字印刷,面向对象

在这里插入图片描述

2.面向对象原则

2.1 开放-封闭原则

白话解释:对于拓展是开放的,对于更改是封闭的
在这里插入图片描述

2.2依赖倒置原则

通俗解释:针对接口编程,不要对实现编程

在这里插入图片描述

2.3里氏替换原则

通俗解释:在软件里面,把父类都替换成它的子类,程序的行为没有变化

2.4单一职责

通俗解释:就一个类而言,应该仅有一个引起它变化的原因

2.5 一些基本概念

类和对象

在这里插入图片描述
类就是具有相同属性和功能的对象的集合

重载

最好的例子是有参构造函数和无参构造函数

多态

在这里插入图片描述

抽象类和接口的定义和区别

地址

3.通俗理解异常及其处理机制

地址

在这里插入图片描述

4.进程、线程

定义

在这里插入图片描述
实例理解:比如你打开360安全管家,既可以点击体检又可以点击一键清理,这两个功能可以同时进行

线程的5种状态

在这里插入图片描述

在这里插入图片描述

6.反射

地址
反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应的方法。

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Apple {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        //正常调用
        Apple apple = new Apple();
        apple.setPrice(5);
        System.out.println("Apple Price"+apple.getPrice());

        //反射调用
        Class  cla = Class.forName("August.Apple");  //获取类模板(Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。)
        Constructor appleConstructor = cla.getConstructor(); //根据类模板获取到构造方法
        Object appleObj = appleConstructor.newInstance(); //根据构造方法创建实例对象
        Method setPrice = cla.getMethod("setPrice", int.class); //根据类模板获取到相应方法
        setPrice.invoke(appleObj,14); //与上文的apple.setPrice(14)等价,其实我们可以从右往左读,appleObj调用了serPrice方法,即appleObj.setPrice(14)
        Method getPrice = cla.getMethod("getPrice");
        System.out.println("Apple Price:"+getPrice.invoke(appleObj));


    }
    private int price;

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}

7.IO流

I/O流全面且通俗
我想在座各位肯定经历都过这样的场景。当你编辑一个文本文件也好用eclipse打代码也罢,忘记了ctrl+s ,在你关闭文件的哪一瞬间手残点了个不该点的按钮,但你反应过来,心早已拔凉拔凉的了。

我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input 和输出output ,即流向内存是输入流,流出内存的输出流。

8.枚举

9.hashcode

hashCode就是对象的散列码,是根据对象的某些信息推导出的一个整数值,默认情况下表示是对象的存储地址。通过散列码,可以提高检索的效率,主要用于在散列存储结构中快速确定对象的存储地址,如Hashtable、hashMap中。

equal和==的区别

1、equals():用来检测两个对象是否相等,即两个对象的内容是否相等。

2、==:用于比较引用和比较基本数据类型时具有不同的功能,具体如下:

(1)、基础数据类型:比较的是他们的值是否相等,比如两个int类型的变量,比较的是变量的值是否一样。

(2)、引用数据类型:比较的是引用的地址是否相同,比如说新建了两个User对象,比较的是两个User的地址是否一样。

在这里插入图片描述

10.深入理解HashMap和ConcurrentHashMap

深入理解HashMap和ConcurrentHashMap
HashMap死循环问题分析

HashMap实现原理及其源码分析
HashMap扩容原理详解

红黑树
在这里插入图片描述

为何重写equals方法就得重写hashCode方法
equals方法与hashCode方法根本就是配套使用的。对于任何一个对象,不论是使用继承自Object的equals方法还是重写equals方法。hashCode方法实际上必须要完成的一件事情就是,为该equals方法认定为相同的对象返回相同的哈希值,比如当我们比较引用数据类型时,如果我们没有重写hashcode()方法,默认继承自 Object的 hashCode 方法,而每个 Object对象的 hash 值都是独一无二的。

如果我们没有重写hashcode()方法,不同的对象得到的hashcode是不一样的

在这里插入图片描述
在这里插入图片描述

如果我们没有重写hashcode()方法,如果A.equal(B),那么A.hashcode==B.hashcode

在这里插入图片描述在这里插入图片描述

12.HashSet

地址

基础知识

HashSet是基于HashMap来实现的,操作很简单,更像是对HashMap做了一次“封装”,而且只使用了HashMap的key来实现各种特性,我们先来感性的认识一下这个结构:

HashSet<String> set = new HashSet<String>();
set.add("语文");
set.add("数学");
set.add("英语");
set.add("历史");
set.add("政治");
set.add("地理");
set.add("生物");
set.add("化学");

在这里插入图片描述

如何保证不重复

在这里插入图片描述

LinkedHashSet

在这里插入图片描述

11.泛型

地址

13.static

地址

地址

14.Stream流

15.Java中为什么实体类需要实现序列化

地址

16.在磁盘中创建文件

public static void main(String[] args) {
      public static void main(String[] args) {
        File file = new File("c:\\test","test1.txt");
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }

        File file2 = new File("c:/test","test2.txt");
        try {
            file2.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }

这两种文件目录的方式都能创建,不过在Java中"“为转义字符,所以需要为"c:\test”

17.泛型擦除

地址

18.StringBuffer和StringBuilder的区别

地址

19.hashmap和hashtable区别

地址

20.final

地址
子类不可以重写父类的final方法,但是可以重载父类的方法

21枚举类

地址
在这里插入图片描述
我们以这道笔试题来深入理解下枚举类,其实枚举类是一个特殊的类

enum Color
  {
      RED, GREEN, BLUE;
  }

其实每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。
以上的枚举类 Color 转化在内部类实现:

class Color
{
     public static final Color RED = new Color();
     public static final Color BLUE = new Color();
     public static final Color GREEN = new Color();
}

所以我们在直接用Color.RED输出(因为RED用staitic修饰)时会有四个构造函数被构造

22.重载的好例子

class OverloadDemo{
    void test(){
        System.out.println("No parameters");
    }
    void test(int a){
        System.out.println("a: "+a);
    }
    void test(int a,int b){
        System.out.println("a: "+a+" b: "+b);
    }
    double test(double a){
        System.out.println("double a: "+a);
        return a*a;
    }
}
public class Main{
    public static void main(String args[]){
        OverloadDemo ob=new OverloadDemo();
        double result;
        ob.test();
        ob.test(10);
        ob.test(10,20);
        result=ob.test(123.22);
        System.out.println("Result of ob.test(123.22): "+result);
    }
}

在这里插入图片描述

23.浅拷贝和深拷贝

地址

浅拷贝:同一个文件夹的两个快捷方式,虽然是两个不同的快捷方式,但是指向的文件夹是同一个,不管是通过哪个快捷方式进入,对该文件夹下的文件修改,相互影响。(创建文件夹的快捷方式只要点击鼠标右键,然后选择创建快捷方式两步就能完成,所以比较浅)
深拷贝:我们复制某个文件夹(含里面的内容)在另外一个目录进行粘贴,就可得到具有相同内容的新目录,对新文件夹修改不影响原始文件夹(复制文件夹我们在不考虑快捷键的时候,需要点击鼠标右键,然后再点击复制,然后在目标地址,再鼠标右键,然后再点击粘贴,四步才能完成,所以比较深)
在这里插入图片描述

24.Java中有哪些集合

地址

25.ArrayList和LinkedList区别

添加链接描述

26.同步和异步

用生动形象的例子来理解同步、异步、阻塞、非阻塞的区别

27.文件操纵类?

jdk1.8以后的新特性

Javaweb

cookie、session、sessionStorage、localStorage区别

地址

1 Web常见概念通俗解释

详细解释

2.通俗理解同步和异步通信

地址

3.同源和跨域

地址

4.重定向和转发

地址

Spring

AOP

地址
 AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
优点:利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
为了更清晰的逻辑,可以让你的业务逻辑去关注自己本身的业务,而不去想一些其他的事情,这些其他的事情包括:安全,事务,日志等。
在这里插入图片描述
核心专有名词:
在这里插入图片描述
核心思想:
spring用代理类包裹切面,把他们织入到Spring管理的bean中。也就是说代理类伪装成目标类,它会截取对目标类中方法的调用,让调用者对目标类的调用都先变成调用伪装类,伪装类中就先执行了切面,再把调用转发给真正的目标bean。

  1. JDK动态代理:
     我也实现和你一样的接口,反正上层都是接口级别的调用,这样我就伪装成了和目标类一样的类(实现了同一接口,咱是兄弟了),也就逃过了类型检查,到java运行期的时候,利用多态的后期绑定(所以spring采用运行时),伪装类(代理类)就变成了接口的真正实现,而他里面包裹了真实的那个目标类,最后实现具体功能的还是目标类,只不过伪装类在之前干了点事情(写日志,安全检查,事务等)。

这就好比,一个人让你办件事,每次这个时候,你弟弟就会先出来,当然他分不出来了,以为是你,你这个弟弟虽然办不了这事,但是他知道你能办,所以就答应下来了,并且收了点礼物(写日志),收完礼物了,给把事给人家办了啊,所以你弟弟又找你这个哥哥来了,最后把这是办了的还是你自己。但是你自己并不知道你弟弟已经收礼物了,你只是专心把这件事情做好。
  兄弟模式:spring会使用JDK的java.lang.reflect.Proxy类,它允许Spring动态生成一个新类来实现必要的接口,织入通知,并且把对这些接口的任何调用都转发到目标类。
3. Cglib动态代理:
这次用子类来做为伪装类,当然这样也能逃过JVM的强类型检查,我继承的吗,当然查不出来了,子类重写了目标类的所有方法,当然在这些重写的方法中,不仅实现了目标类的功能,还在这些功能之前,实现了一些其他的(写日志,安全检查,事务等)。

这次的对比就是,儿子先从爸爸那把本事都学会了,所有人都找儿子办事情,但是儿子每次办和爸爸同样的事之前,都要收点小礼物(写日志),然后才去办真正的事。当然爸爸是不知道儿子这么干的了。这里就有件事情要说,某些本事是爸爸独有的(final的),儿子学不了,学不了就办不了这件事,办不了这个事情,自然就不能收人家礼了。 
  父子模式:spring使用CGLIB库生成目标类的一个子类,在创建这个子类的时候,spring织入通知,并且把对这个子类的调用委托到目标类。CGLib采用底层的字节码技术,可以为一个类创建子类,在子类中采用方法拦截的技术拦截所有父类方法的调用并顺势的织入横切逻辑。

自动配置

我们先来了解几个常用的注解

@Value()

地址
spring的@Value注解使用

@PropertiesConfig

地址

@Configuration注解与Java类配置

地址

自动配置原理

地址
Enable:开启
1.SpringBoot启动会加载大量的自动配置类(@SpringbootApplciation复合注解包含了自动装配的核心注解@EnableAutoConfiguration,而在@EnableAutoConfiguration复合注解中有一个导入的注解@Import(EnableAutoConfigurationImportSelector.class),通过这个类的方法读取spring-boot-autoconfigure-2.3.7.RELEASE.jar包(版本可变)的spring.factory,里面就是形形色色的自动配置类了)

2、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;

3、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)

4、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可(xxxxAutoConfigurartio自动配置类中有一个@EnableConfigurationProperties({xxxProperties.class})注解,可以启动指定类的ConfigurationProperties功能、将配置文件中对应的值和xxxProperties绑定起来、并把xxProperties加入到ioc容器中, 进入这个xxxProperties查看,xxxProperties类中有一个@ConfigurationProperties(prefix = “spring.http”) 注解将从配置文件中获取指定的值和bean的属性进行绑定)


xxxxAutoConfigurartion:自动配置类;给容器中添加组件

xxxxProperties:封装配置文件中相关属性的类

如何指代事务隔离级别

isolation事务隔离级别,使用时一般如下。

@Transactional(isolation=Isolation.DEFAULT)
public void method(){}

isolation的参数有以下五种:
1_1、Isolation.DEFAULT:为数据源的默认隔离级别
1_2、isolation=Isolation.READ_UNCOMMITTED:未授权读取级别
1_3、iIsolation.READ_COMMITTED:授权读取级别
1_4、iIsolation.REPEATABLE_READ:可重复读取级别
1_5、iIsolation.SERIALIZABLE:序列化级别

Mybatis

mybatis缓存

地址

SpringBoot

SpringBoot Controller 控制层常见注解及含义

地址

Springcloud

CAP原则

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。 CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

一致性是什么:
致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。同时,一致性也是指事务的基本特征或特性相同,其他特性或特征相类似

redis

redis学习路线
Redis的五种数据结构的底层实现原理
地址

redis5大基本数据类型

第一篇之——string(字符串):类似于java中的ArrayList

以下四种可以看作先创立一个容器,然后再放键值对
第二篇之——list(列表):类似于Java语言中的LinkedList,它是一个双向链表数据结构
第三篇之——hash(散列):相当于Java语言中的HashMap
第四篇之——set(集合):相当于Java语言里的HashSet,它内部的键值对是无序的、唯一的
第五篇之——zset(有序集合):
它类似于Java语言中的SortedSet和HashMap的结合体,它一方面通过set来保证内部value值的唯一性,另一方面通过value的score(权重)来进行排序。这个排序的功能是通过Skip List(跳跃列表)来实现的

Redis三种特殊数据类型

Bitmaps-位图
HyperLogLog 使用及其算法原理详细讲解
Geospatial-地理空间

Redis底层数据结构

大佬级分篇讲解
合集:有点low
跳跃表

Redis持久化

地址
详解
通俗易懂的地址

redis是用了做什么

Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。使用C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。

过期时间怎么设置

EXPIRE key seconds命令来设置数据的过期时间

redis缓存雪崩

UML

一图记住类图的主要关系

在这里插入图片描述

1.1关联关系

在这里插入图片描述

1.2 聚合关系

在这里插入图片描述

1.3 组合关系

在这里插入图片描述

1.4 依赖关系

在这里插入图片描述

操作系统

操作系统中常用的进程调度算法

地址
1.先来先服务
2.短作业优先
3.时间片轮转法(类比于负载均衡策略的轮询策略)
4.多级反馈队列调度算法
在这里插入图片描述

在这里插入图片描述
5、优先权调度算法(类比于负载均衡策略的轮询策略权重策略)

操作系统读写磁盘,影响磁盘读写时间的因素有哪些

寻道时间、旋转延迟、实际数据的读取或者写入时间

磁盘的基本结构

地址

linux内核态和用户态

https://blog.csdn.net/qq_41709234/article/details/124320482

CPU中的主要寄存器

地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值