Java面试八股文(素材来自网络)

不定时更新,素材来自网络,都附注有超链接,侵删联系邮箱:zhenyu_li1998@163.com

数据量太大在线更新不方便,有需要的可以邮箱联系给原稿(typora文档)

我是2022届双非软件工程应届生,目前在准备秋招,总结了一篇的八股文,如果你正好需要可以关注一下,共同学习;善用Ctrl+F查找

CSDN已停止更新,可关注语雀,不间断更新 超链接:点击跳转 icon-default.png=M276https://www.yuque.com/qietingfengyin-jxsea

目录

Java基础知识

面向对象

接口

重写与重载

Java数据类型

局部变量与成员变量对于基本数据类型与引用类型的存储

什么是构造方法

类之间几种常见的关系

泛型

IO流

面向字符的流

BIO NIO AIO

适用场景

同步和异步

阻塞与非阻塞

同步阻塞与同步非阻塞

异步阻塞与异步非阻塞

数组初始化后默认值

反射

正则表达式

Java的位运算

JDK、JRE与JVM的关系

Java体系结构包括四个独立但相关的技术

关键字

标识符

权限修饰符

for 与 foreach

abstract 与 implement

switch

final

static

super

String、StringBuffer、StringBuilder

new String 与String

栈与堆的区别

==和equals比较

instanceof运算符

Scanner,BufferedReader,InputStreamReader 简介与对比

函数取值方法

集合

java.util.Collection [I]

List和Map区别

java.util.Map [I]

哪些集合类是线程安全的/p>

多线程

线程和进程区别

多进程和多线程区别

进程间通信和线程间通信区别

线程状态

守护线程和用户线程

进程状态

创建多线程

序列化

Thread与Runnable

执行流程

线程安全

线程池

异常处理

RuntimeException和非RuntimeException的区别

throw与throws

try catch }finally

死锁

常用方法

throw和throws区别

start与run方法

sleep与wait

volatile

发布与逸出

synchronized使用与原理

Sychronized的自旋锁、偏向锁、轻量级锁、重量级锁

synchronized与Lock的区别:

sychronized和ReentrantLock

CAS与synchronized的使用情景

乐观锁与悲观锁

多线程与事务

框架与后台传输

Spring 事务

AOP IOC

Spring装配Bean的两种方式:

Aspect Oriented Program 面向切面编程

IOC控制反转

applicationContext & BeanFactory区别

Bean 定义

Bean的生命周期

注解

@Bean

@Component

@ComponentScan

@Autowired

@Autowired 与@Resource的区别(详细)

@Configuration

forward与redirect

Servlet (了解)

状态码

项目

验证码

图片上传

拦截器

1.实现HandlerInterceptor接口自定义拦截器

2.重写addInterceptor方法实例化LoginHandlerInterceptor

常用算法

基础概念

时间复杂度

什么是稳定排序

刷题算法

二分

贪心

冒泡改进版

CPU调度算法

JVM

运行时数据区

java堆、栈、堆栈,常量池的区别

垃圾回收

什么是GC

GC收集器有哪些/p>

判断是否回收

垃圾收集算法

内存分配与回收

类加载机制

双亲委派

Java内存模型

数据库

NoSQL四大分类

Redis

数据类型

Redis是单线程

操作案例

MySQL

事务四大特性ACID

范式通俗理解

数据类型优化

执行SQL相关

索引

脏读、不可重复读、幻读

事务隔离级别

SQL注入

mybatis是如何做到防止sql注入的

MySQL连接数

MySQL的读写分离

设计模式

设计模式的六大原则

单例模式

1.懒汉式

2.懒汉式(加锁)

3.饿汉式

观察者模式

工厂模式

桥接模式

装饰者模式

生产者-消费者

计算机网络

访问一个网页的全过程

TCP与UDP

http与https

三次握手

get请求与post请求

Cookie 与 Session

Linux简单命令

创建进程

查询日志

查看进程

文件操作

ls — List

2.mkdir — Make Directory

3.pwd — Print Working Directory

4.cd — Change Directory

5.rmdir— Remove Directory

6. rm— Remove

7. cp— Copy

8. mv— Move

12.grep

13.find

14.tar

15. gzip

16. unzip

通过关键词查找文件

vim编辑机

yum 命令

yum 语法

yum常用命令

Git

git与svn

工作流程

具体使用

忽略上传

使用码云(gitee)上传

传统软件架构与互联网软件架构

传统行业

互联网行业

能力要求

行业关注点

待总结



Java基础知识

锁的实现原理

面向对象

面向对象基本概念 面向对象通俗举例蛋炒饭与盖饭

Java面试八股文(素材来自网络)

概论:面向对象是把一组数据结构和处理他们的方法组成对象;把具有相同行为的对象归纳成类;

通过封装隐藏类的内部细节;通过继承使类得到泛化;通过多态实现基于对象类型的动态分派

吃饭

  • 面向过程:买菜,洗菜,做饭,洗手吃饭,洗碗

  • 面向对象:点外卖,吃饭,扔外卖盒

两者区别:对比面向过程,面向对象更注重事情的每一个步骤及顺序,面向对象更注重事情有哪些参与者(对象),以及如何更好按需分配 面向对象更加易于复用,扩展和维护; 面向过程直接高效

面向过程优点:流程化使得编程任务明确,在开发之前基本考虑了实现方式和最终结果,具体步骤清楚,便于节点分析。

效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。

java是面向对象的,但是不是所有的都是对象,;

封装:明确标识出允许外部使用的所有成员函数和数据项;内部细节对外部调用透明,外部调用无需修改或关心内部实现

1.JavaBean的属性私有,提供get set对外访问,因为属性的赋值或者获取逻辑只能由JavaBean本身决定,而不能由外部糊涂乱改

2.orm框架:操作系统库,我们不需要关心连接是如何建立的,sql如何执行,只需引入mybatis调方法即可

继承:继承基类方法,并做出自己的改变和/或扩展子类共性的方法或者直接使用父类的属性,而无需自己再定义,只需扩展自己个性化的;继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段; 访问修饰符决定了是否可继承

多态:基于对象所属类的不同,外部相同类型变量对同一方法的调用,实际执行逻辑不同

继承,方法重写,父类引用指向子类对象 .前提条件:必须有子父类关系。

作用:提高了代码的扩充性和可维护性

牛客例题

无法直接调用子类特有功能(需要向下转型)

  • 多态的转型分为向上转型和向下转型两种

  1. 向上转型:多态本身就是向上转型过的过程使用格式:父类类型 变量名=new 子类类型();

    适用场景:当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作。

  2. 向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型使用格式:

    子类类型 变量名=(子类类型) 父类类型的变量;适用场景:当要使用子类特有功能时。

    成员变量:编译看左边,执行看左边; 成员方法:编译看左边,执行看右边。

    向下转型可以调用子类类型中所有的成员,不过需要注意的是如果父类引用对象指向的是子类对象,那么在向下转型的过程中是安全的,也就是编译是不会出错误。但是如果父类引用对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现我们开始提到的 Java 强制类型转换异常,一般使用 instanceof 运算符来避免出此类错误。

instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false

抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面,抽象只关注对象的哪些属性和行为,并不关注这此行为的细节是什么 可以有构造函数,但不能实例化

牛客例题 牛客例题2 牛客例题3

接口

牛客例题 牛客例题2 牛客例题3 JAVA基础——接口(全网最详细教程) Java之implements

为什么要用接口:接口被用来描述一种抽象。因为Java不像C++一样支持多继承,所以Java可以通过实现接口来弥补这个局限。 接口也被用来实现解耦。 接口被用来实现抽象,而抽象类也被用来实现抽象,为什么一定要用接口呢口和抽象类之间又有什么区别呢因是抽象类内部可能包含非final的变量,接口的静态成员变量要用static final public 来修饰 接口中的方法都是抽象的,是没有方法体的,可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法。

可以直接把接口理解为*100%的抽象类*,既接口中的方法*必须全部*是抽象方法。(JDK1.8之前可以这样理解)

牛客例题4 类实现多个接口的时候,只需要一个implements,多个接口通过逗号进行隔开,先继承类再实现接口

重写与重载

Java中重载与重写 牛客例题 牛客例题2

Java面试八股文(素材来自网络)

Java面试八股文(素材来自网络)

Java数据类型

Java基本数据类型 Java 基本数据类型 及 == 与 equals 方法的区别 牛客例题 牛客例题2 牛客例题3 牛客例题4

Java面试八股文(素材来自网络)

Java面试八股文(素材来自网络)

Java面试八股文(素材来自网络)

实线可以直接转,虚线直接的转换可能损失精度

位移运算符

& ( ” and ” ) | ( ” or ” ) ^ ( ” xor ” ) ~ ( ” not ” )

局部变量与成员变量对于基本数据类型与引用类型的存储

  • 对于局部变量来说,不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,对于基本类型来说,这块区域包含的是基本类型的内容;而对于引用类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上。

  • 对于成员变量来说,不论是基本数据类型还是引用类型,他们都会存储在堆内存或者方法区中;成员变量可细分为静态成员变量和普通成员变量,静态成员变量类属于类,类可以直接访问,存储在方法区中;普通成员变量属于类对象,必须声明对象之后,通过对象才能访问,存储在堆中。

基本类型的变量数据和对象的引用都是放在栈里面的,对象本身放在堆里面,显式的String常量放在常量池,String对象放在堆中

什么是构造方法

什么是构造方法Java构造方法 牛客例题 牛客例题2 牛客例题3 牛客例题4

来源:不会起名字啦

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年2月13日
下一篇 2022年2月13日

相关推荐