「java大厂代码」大厂java面经
本篇文章给大家谈谈java大厂代码,以及大厂java面经对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
Java泛型
泛型中? extends T和? super T 差别
? extends T和? super T含有JAVA5.0的新的概念。由于它们的外表导致了很多人误解了它们的用途:
1.?
extends T首先你很容易误解它为继承于T的所有类的集合,这是大错特错的,相信能看下去你一定见过或用过List?
extends T吧?为什么我说理解成一个集合是错呢?如果理解成一个集合那为什么不用ListT来表示?所以?
extends
T不是一个集合,而是T的某一种子类的意思,记住是一种,单一的一种,问题来了,由于连哪一种都不确定,带来了不确定性,所以是不可能通过
add()来加入元素。你或许还觉得为什么add(T)不行?因为? extends
T是T的某种子类,能放入子类的容器不一定放入超类,也就是没可能放入T。
2.? super T这里比较容易使用,没? extends T这么多限制,这里的意思是,以T类为下限的某种类,简单地说就是T类的超类。但为什么add(T)可以呢?因为能放入某一类的容器一定可以放入其子类,多态的概念。
擦除
也
许泛型最具挑战性的方面是擦除(erasure),这是 Java
语言中泛型实现的底层技术。擦除意味着编译器在生成类文件时基本上会抛开参数化类的大量类型信息。编译器用它的强制类型转换生成代码,就像程序员在泛型出
现之前手工所做的一样。区别在于,编译器开始已经验证了大量如果没有泛型就不会验证的类型安全约束。
通过擦除实现泛型的含意是很重要的,并
且初看也是混乱的。尽管不能将ListInteger 赋给ListNumber,因为它们是不同的类型,但是
ListInteger 和 ListNumber 类型的变量是相同的类!要明白这一点,请评价下面的代码:
new ListNumber().getClass() == new ListInteger().getClass()
编译器只为 List 生成一个类。当生成了 List 的字节码时,将很少剩下其类型参数的的跟踪。
当
生成泛型类的字节码时,编译器用类型参数的擦除替换类型参数。对于无限制类型参数(V),它的擦除是
Object。对于上限类型参数(K extends ComparableK),它的擦除是其上限(在本例中是
Comparable)的擦除。对于具有多个限制的类型参数,使用其最左限制的擦除。
如果检查生成的字节码,您无法说出 ListInteger 和 ListString 的代码之间的区别。类型限制 T 在字节码中被 T 的上限所取代,该上限一般是 Object。
多重限制
一个类型参数可以具有多个限制。当您想要约束一个类型参数比如说同时为 Comparable 和 Serializable 时,这将很有用。多重限制的语法是用“与”符号分隔限制:
class CT extends Comparable? super TSerializable
通配符类型可以具有单个限制 —— 上限或者下限。一个指定的类型参数可以具有一个或多个上限。具有多重限制的类型参数可以用于访问它的每个限制的方法和域。
类型形参和类型实参
在
参数化类的定义中,占位符名称(比如 CollectionV 中的 V)叫做类型形参(type
parameter),它们类似于方法定义中的形式参数。在参数化类的变量的声明中,声明中指定的类型值叫做类型实参(type
argument),它们类似于方法调用中的实际参数。但是实际中二者一般都通称为“类型参数”。所以给出定义:
interface CollectionV { ... }
和声明:
CollectionString cs = new HashSetString();
那么,名称 V(它可用于整个 Collection 接口体内)叫做一个类型形参。在 cs 的声明中,String 的两次使用都是类型实参(一次用于 CollectionV,另一次用于 HashSetV)。
关
于何时可以使用类型形参,存在一些限制。大多数时候,可以在能够使用实际类型定义的任何地方使用类型形参。但是有例外情况。不能使用它们创建对象或数组,
并且不能将它们用于静态上下文中或者处理异常的上下文中。还不能将它们用作父类型(class FooT extends
T),不能用于 instanceof 表达式中,不能用作类常量。
类似地,关于可以使用哪些类型作为类型实参,也存在一些限制。类型实参
必须是引用类型(不是基本类型)、通配符、类型参数,或者其他参数化类型的实例化。所以您可以定义
ListString(引用类型)、List?(通配符)或者
ListList?(其他参数化类型的实例化)。在带有类型形参 T 的参数化类型的定义中,您也可以声明
ListT(类型形参)。
Java都需要那些技术?
Java工程师需要学习的技术还是比较多的。
尤其是现在技术更新迭代比较快,需要不断学习掌握新的技术,给自身镀金才能在IT行业发展的较好。
下面列举出来一些需要掌握的技术:
1、理解Java面向对象思想
2、掌握开发中常用基础API
3、熟练使用集合框架、IO流、异常
4、能够基于JDK8开发
5、掌握流行关系型数据MySQL常见操作
6、熟练增删改查数据处理
7、掌握Java JDBC、连接池操作
8、掌握基本的JavaWeb基础知识JSP/Servlet/Vue等
9、具备基本的B/S结构软件开发能力
10、可以动手开发一个B/S架构的Web项目
11、掌握SSM框架技术
12、掌握使用Maven进行模块的开发
13、熟悉基本的Linux命令以及Linux服务器的使用
14、掌握高级缓存技术Redis的原理,并熟练使用
15、掌握Git、Nginx、Docker、Elasticsearch、SpringBoot、SpringCloud、RabbitMQ、分布式事务、JVM、JUC、Zookeeper、Dubbo、Nacos等技术
16、企业级开发项目
虽然需要学习掌握的技术比较多,但是坚信“只要功夫深铁杵磨成针”,加油!
Java的就业前景?
互联网计算机行业是未来行业大咖,发展前景好,薪资可佳。而Java作为计算机行业的热门课程,在生活中运用的广泛,并且很多互联网大厂都急需这方面的人才,可想而知发展前景非常不错的。
java应用广泛,课程体系全面,提到零基础通过自学Java最终找到一份Java开发的工作,其实这件事还是有难度的。没有好的学习教材以及良性的学习规划、遇到难题无法解决导致学习效率很低、作为一个零基础的初学者没有人指导带着学都是需要克服的问题。
java学习内容主要有:
①JAVA编程基础(基础语法、面向对象、和谐特性等)
②WEB应用开发(静态网页制作、Oracle数据库、Java Web开发技术、Linux技术、网站性能与安全、软件工程开发流程、Java Web和谐等)
③企业级框架开发(数据结构与算法、SSH框架、JavaEE和谐等)
④项目实训
互联网行业目前还是最热门的行业之一,学习IT技能之后足够优秀是有机会进入腾讯、阿里、网易等互联网大厂高薪就业的,发展前景非常好,普通人也可以学习。
想要系统学习,你可以考察对比一下开设有相关专业的热门学校,好的学校拥有根据当下企业需求自主研发课程的能力,能够在校期间取得大专或本科学历,中博软件学院、南京课工场、南京北大青鸟等开设相关专业的学校都是不错的,建议实地考察对比一下。
祝你学有所成,望采纳。
北大青鸟学生课堂实录
java基础技能中强调程序代码的读写能力如果一个类很长你会怎样读写
Java经典面试题 带答案(二) 原创
2022-04-29 14:34:07

qdwd888 
码龄1年
关注
所谓引用传递就是把一个对象在堆中保存的数据传递给一个变量,此时新的变量与原有的变量对应同一个内存存储空间,当新的变量修改对象的属性时,内存中的数据也会修改。
3.接口与抽象类的区别?
1:接口里面不可以实现方法体,抽象类可以实现方法体。
2:接口可以多继承接口,抽象类不可以。
3:接口需要被子类实现,抽象类是要被子类继承(单一继承)。
4:接口中只能有公有的方法和属性而且必须赋初始值,抽象类中可以有私有方法和属性.
5: 接口中不能存在静态方法,但属性可以和final,抽象类中方法中可以有静态方法,属性也可以。
4.谈谈继承,为什么要使用继承?
所谓继承就是找出几个类中共同的部分,提取出来作为父类。而子类只需要继承父类,就可以共享父类的方法。
使用继承能够减少重复的代码。
5.方法重载的好处?
所谓重载就是在一个类中可以定义多个相同的方法,但是方法的参数类型和参数的个数以及顺序要不同。
重载的好处就是能够让我们很快的掌握该方法的功能,我们只要要记住该方法就能很快的理解该方法的参数以及参数的作用
6.项目中印象最深的部分?
我觉得在该项目中我体现到了反射技术的强大之处,原来我一直不清楚反射是一种什么样的技术,只知道一些概念上的知识,经过这个项目之后,终于知道该怎样灵活运用反射,以及在什么时候运用。
谈谈你对面向对象的理解与认识?
我觉得使用面向对象这种思维的方式比较符合我们人类的思想,不需要去学习一些什么新的思考方式,就按照现实生活做的一些故事就能让人理解该内容的知识以及他们的作用。
我的看法就是:
1:当加入新的功能的时候不会修改原有的代码。(面向接口编程)
2: 当我们写的一个类可以重复的运用在其他项目中。(代码的复用性)
3:当写一个新类的时候要考虑到他的可扩展性。(灵活性)
7.谈谈集合框架?
集合框架分为三部分,第一部分是collection接口,第二部分是Map接口、第三部分是collections帮助类
首先说一下collection接口,collection接口下面的接口分为set接口、list接口,在往下面就是他们一些实现类。
说到实现类在分为两部分,第一部分是set的实现类有TreeSet、HashSet,第二部分是list的实现类有: Arraylist、LinkedList、Vector。
8.再说Map接口,map接口下面有treeMap、HashMap、HashTable三个实现类。
最后说collections帮助类,collections提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。
9.什么是异常?描述下异常处理?
所谓异常就在执行程序的时发生的错误,他能终止正在执行的程序。
异常的处理:1:使用try-catch捕获异常。
2:使用throw-throws抛出异常。
10.多线程的优先级?为什么要分优先级?
因为有有一些线程可能比较重要,所以才划分优先级。
异常框架的类结构?
Throwable所有错误的超类,他下面有两个子类:error和Exception。
error代表系统级的错误能捕获,但是不能处理。
Exception代表异常主要出自于程序,可以捕获也能处理。Exception有分为两类:编译期异常、运行期异常。
区别他是运行期异常还是编译期异常就看他是不是RuntimeException的子类,如果是的话,就是运行期异常否则是编译期异常。
谈谈HashMap与Hashtable的区别。
HashMap:hashmap中可以有空值,线程不安全的类。hashmap的父类是abstractMap抽象类(效率高)
HashTable:hashtable中不允许有空值,线程安全的类.hashtable的父类是Dictionary类(效率低)
说一下iterator。
iterator是一个接口,用于实现对容器里面的元素遍历操作。
任何的遍历都可以使用iterator。
什么是泛型?它有什么样的好处?
泛型就是自己指定一种类型,以后存放的东西就只能有这一种类型。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
说一下你在项目中遇到的异常,并说出什么时候发生的,怎么解决的。
空指针异常最常见。根据异常提示找到相应的类进行处理。发生的原因很多,比如没有初始化变量,没有进行赋值等都是空指针所包含的。
你的程序遇到错时怎么解决的?
根据错误提示找到错误的API进行相应的处理。
谈谈和的区别
是位运算符,表示按位与运算,是逻辑运算符,表示逻辑与(and)。
System.out和System.in是什么意思?
System.out是输出。
System.in是输入
java为什么能够跨平台?
对于不同的系统平台有不同的虚拟机,虚拟机提供了硬件平台规范。
用java开发的程序被编译成由java虚拟机指令组成的字节代码,虚拟机会将这些指令翻译成操作系统特定的指令.(因为jvm屏蔽了底层操作系统的硬件)。
private变量能不能被其他类访问?如果能,怎么访问?
能。通过反射. getDeclaredField_r();
演示java项目如何打包成jar文件
1:选择导出 jar 直到输出
java的环境变量如何配置?为什么要配置?
1:在我的电脑 属性 高级 环境变量 系统变量 新建 变量名 java-Home,设置值:java的JDK目录
2:在选择新建 设置变量名 PATH 变量值 %java_home%/bin目录
为了方便在dos窗口操作。
static和非static修饰的变量哪个生命周期长?
static的生命周期长。因为他一直在内存里面。
什么是线程同步?
线程同步就是说在同一时间访问的资源的时候,资源只能被一个线程所使用.
什么是封装?封装的好处是什么?
封装:封装就是把一个已经实现好的功能的代码,放在一个方法中(实现了隐藏)。
好处:代码的重用性、好全性、只需要调用该方法不管具体的实现
在线程中wait与sleep的区别?
1:wait是Object定义的方法,而sleep是线程Thread定义的方法。
2:sleep是让当前线程睡泯,所以可以放在任何位置,而wait是让当前线程放弃资源的使用权,必须放在同步块或同步方法里面。
3:sleep他不会释放对象锁,而wait会释放对象同步锁.
4:sleep是等待一段时间后会自动醒来,而wait必须让其他的线程唤醒。
Class 和class的区别
class是java的关键字。
Class是类的名字。
awt和swing的区别?
awt是重量级的组件。
swing是轻量级的组件.
比如:(在swing组件中当我们调用repaint()方法时,会很快调用paint(),而对于重量级组件会首先调用upate()方法,然后upate()方法再调用paint()方法,在重量级组件中实现双缓冲,我们就要重写upate()方法,在重写的时候记得实现帅新屏幕).
为什么实现一个接口必须要实现接口里面所有的方法?
因为这是sun公司的规定。如果不实现它里面所有的方法那就不叫接口。
线程和进程的区别是什么?
进程是一个小的应用程序,需要分配内存空间。
线程是进程中的一个顺序控制流,也可以这样理解(线程是进程的实体).
Java基础技能中强调程序代码的读写能力,如果一个类很长,你会怎样读写?
1:类分解,每个类只做他该做的事情。
2:方法分解。
抽象方法能不能是private和static修饰符?
能。
用接口有什么好处?
1:使用接口有很好的扩展性。
2:接口可以多继承接口。
3:隐藏实现。
什么是反射?
所谓反射就是在编译的时候不知道加载什么,只有等到运行的时候才知道该执行什么。
创建对象的方式有哪些?
1:new 2:反射 3:clone 4:反序列化
transient是什么意思?
transient代表无法到达某一对象所抛出的异常。但也不代表没有该对象。
在设计类的时候,你是怎么使用静态变量和成员变量的?
如果需要一直存在于内存当中,就选择静态变量否则就选择成员变量。
定义 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 抽象方法的意义何在?
1:为了减少重复代码。
2:抽象方法有很好的扩展性。
谈集合遍历的方式
forEach()、for()、iterator
java安全性体现在什么地方? 1:Java提供一个用于网络/分布式的计算环境。因此,Java强调安全性,如确保无病毒、小应用程序运行安全控制等等。
2:Java的验证技术是以公钥(public-key)加密算法为基础,而且从环境变量、类加载器、文件系统、网络资源和名字空间等方面实施安全策略。
谈谈线程所拥有的几种状态
就绪:线程分配了CPU以外的全部资源,等待获得CPU调度
执行:线程获得CPU,正在执行
阻塞:线程由于发生I/O或者其他的操作导致无法继续执行,就放弃处理机,转入线程就绪队列
挂起:由于终端请求,操作系统的要求等原因,导致挂起。
面向对象的特征有哪些?
封装、继承、多态
解释一下在项目里你怎么去实现多线程的。
1:一般是实现Runnable接口,new Thread().start(); 重写run();
启动线程时可以调用run()方法吗?
可以.因为run方法里面执行的代码就是线程所要执行的方法.
Java程序的执行过程是怎样的?
java源程序 编译.class字节码 类加载器 字节码校验器 解释执行
Java的引用数据类型有哪些?
对象、集合、数组、接口
变量按作用域分类分为几种?
分为两种。局部变量和全局变量.
集合里的接口有哪些?请你创建一个List类的实例。
Collection接口、set接口、list接口、map接口、iterator接口
List list = new ArrayList();
int与Integer的区别?
int是原始数据类型,integer是int的包装类,他提供转换类型的很多方法。
checked异常与unchecked异常的区别是什么?
区分他们的区别主要是看他们是不是runtime的子类,如果是runtime的子类那么就是运行期异常,否则是编译期异常。
final与finally、finalize的区别?
final用于声明属性、方法和类,分别表示属性不可更改,方法不可重写,类不可以继承。
finally是异常处理语句结构的一部分,他表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
重写与重载的区别?参数一样,返回类型不一样 是重载吗?
重载:方法名相同,参数类型不同,参数个数不同,参数顺序不同。
重写:方法名相同,参数的类型相同,返回的类型相同。
不是。因为重载是根据参数来断定的。
写一个数组的创建。
int[] i = new int[5];
int[] i={1,2,3,4,5};
什么时候用输入流,什么时候用输出流?
读取数据的时候使用输入流。
写入数据的时候使用输出流.
双缓冲如何实现的?为什么要用双缓冲?
先在内存中分配一个和我门动画窗口一样大的空间(在内存中的空间我门是看不到的),然后利用 getGraphics_r()方法去获得给空间并将它全部一次性的显示到我门的屏幕上.这样在我门的动画窗口上面是显示出来就非常的流畅了.避免了上面的闪烁效果.
举出常用的list类。哪种情况用哪种好?
arraylist、LinkedList、Vector.
arraylist是连续的空间,遍历速度快,插入和删除就比较慢。
linkedList是一个双向链表存放数据。如果删除和添加元素比较多的话,要效率高的就可以使用LinkedList。
vector和arraylist的功能一样,唯一的区别就是vector是线程安全的,而arraylist是线程不安全的。
Map、list与set的区别?里面常用的类有哪些?
map是以键值对的方式存数据。
list里面的数据可以重复,有顺序
set里面的数据不可以重复,没有顺序。
list的常用类有arraylist
set的常用类有treeset
map的常用类用hashmap
什么时候用继承Thread?什么时候实现Runnable接口?
当一个类中没有继承的时候可以使用thread。
如果一个类中已经使用了继承,就只有实现runnable接口
对对象进行比较怎么做?为什么不用“==”?
其实如果是非String的话,==与equals并没有区别。
因为String他是重写了object的方法,所以这才有了equals比较内容,==比较地址。
静态变量与成员变量的区别。
静态变量在对象加载之前初始化,而成员变量是在编译期间初始化。
静态变量可以直接通过类名点的方式进行访问,而成员变量则不行。
访问修饰符有哪几种?它们之间的区别是什么?
有四种。
前提:在一个项目中。
public可以在所有包中的所有类随意进行访问。
private只能在被当前类访问。
protected:在同一包中,或子类可以进行访问。
默认:同包下能被访问。
对象的序列化怎么实现的?
实现Serializable接口。
讲一下多态的概念。
多态就是相同的行为不同的体现方式。(比如:爱好,每个人都要自己的爱好,但是爱好都不同)
子类继承父类,父类的构造方法能被继承吗?
能。
子类中怎么调用父类的方法?
通过super.方法
this、super的用法与区别?
this的访问当前类的属性和方法。
super是访问父类的属性和方法。
什么是构造方法?构造方法的作用?(目的、意义)
构造方法是在调用的时候被new出来的,每个类都有构造方法。
作用:为对象分配内存、初始化类变量、初始化属性、返回引用。
Error和Exception的区别是什么?
Error:是系统级的错误,可以捕获,但不同处理。
exception是程序错误,可以捕获也可以进行处理。
输入输出流分几种?分别在什么时候使用?
输入流:InputStream、Read
输出流:OutputStream、writer
读取字节,使用InputStream 以字符读取用Read
输出字节,使用OutputStream 以字符输出用writer
异常捕获的流程?如果有异常发生是怎样的流程?
try{
容易发生异常的代码
}catch(错误的类型){
打印错误信息
}finally{
不管有没有异常都要执行
}
String是基本数据类型吗?基本数据类型有哪些?
不是。
基本数据类型:byte、short、int、long、float、double、char、boolean
Collection与Collections的区别?
Collection是一个接口.
collections是一个帮助类。(主要对查找、排序)
HashMap等是实现的 Collection的接口吗?
不是。
hashMap实现的是map接口。他是以键值对的形式保存。
游戏中的paint()方法从何处来的?让窗本重绘最好采用哪种方法?
NO!!!没做过。
为什么从集合中取出来的元素都是Object类型的?.
因为他们都是object的子类。
如果try块中有多种异常,在catch块中如何处理?
直接在类型catch中写一个Exception异常。
如果要抛出异常怎么做?
使用throw明确要抛出异常的代码,在方法中使用throws抛出异常类型。
实现接口使用什么关键字?在实现一个接口时必须要做什么?
使用interface关键字。
实现一个接口必须实现这个接口里面的所有方法.
GUI响应一个事件的代码如何写?
确定事件源;确定监听器,监听器需要实现监听器接口,重写其中的方法;完成事件源和监听器的注册
JVM是什么?它的作用是什么?它和java运行环境有什么区别?
Java虚拟机是一个抽象的计算机,和实际的计算机一样,它具有一个指令集并使用不同的存储区域。
它负责执行指令,还要管理数据、内存和寄存器。Java解释器负责将字节代码翻译成特定机器的机器代码
没有java虚拟机就更不要说运行环境了。
集合和数组的区别。
1:集合中可以存放不同元素的类型,而数组中只能放同一种类型的数据。
2:集合的长度可以随着元素的多少自动增长,而数据的长度一旦定义就不能更改。
3:集合中只能放置对象,数组中可以是对象也可以基本数据类型。
4:集合提供了很好的算法,而数组里面的算法有限。
final这个修饰符的用法?
final主要修饰属性、方法、类。分别代表属性的值不可更改、方法不可以重写、类不可以继承。
如何定义一个常量?定义常量的意义何在?
国内著名的java公司有哪些?
国内著名的java公司有哪些
如何选择一个靠谱的公司,开发软件的费用,简单来说就是这个软件需要多少人、做多长时间、人员的工资是多少。对于软件开发的报价,一般取决于下面几个因素:
1 北京华盛恒辉软件开发公司互联网是个神奇的大网,大数据开发和软件定制也是一种模式,这里提供最详细的报价,如果你真的想做,可以来这里,这个手机的开始数字是一伍扒中间的是壹壹三三最后的是泗柒泗泗,按照顺序组合起来就可以找到,我想说的是,除非你想做或者了解这方面的内容,如果只是凑热闹的话,就不要来了。
2 北京五木恒润软件开发公司
3 北京平步科技有限公司
4 航天信息股份有限公司
5 北电网络nortel
1、软件做软件致电壹伍扒壹壹叁叁泗柒泗泗开发支持平台:
常见的软件开发平台包括、B/S和C/S,做的软件开发是针对其中某一个、还是两个平台都需要,对应了不同的开发成本。
除了软件开发本身,很多软件开发还有管理后台,管理后台的开发成本也需要考虑在内
2、开发人员工资
一般来说,外包项目报价的基础是开发人员的工资,而工资又是和工作年限、经验、水平等决定的。这里的开发人员包括产品经理、UI设计师、前端工程师、服务端工程师、和C++工程师等,不同的外包项目需要的开发人员不同。
举个例子,假设一个软件开发工程师一月工资22000元(工资数值仅举例),按照每月21.75个工作日来计算每天的开发费用,这里是每天 (22000/21.75)=1000元,如果你考虑20%的利润,则每天费用变为了1000x(1+20%)=1200元。
(注:现实中,开发人员的工资之外,还有社保等其他人力成本支出)
3、产品功能的复杂程度
产品功能的复杂程度决定了所需要的开发人员和时间,开发需要30人/天和100人/天,价格是不同的。
接前面的例子,如果一个项目需要一个软件开发工程师30人/天,那么按照1200元每天的价格,项目总费用就是(1200x30)=36000元。
4、外包团队经验和素质
如果是产品功能复杂的项目,外包团队的素质对最终结果影响很大,而好的团队则报价自然会更高一些。产品功能简单的项目,另当别论。
5、外包团队的所在地
同样能力的外包团队,在不同的城市也会导致开发成本的差异,比如在北京、深圳和上海的外包团队成本自然高一些,因为当地开发人员薪资和其他支出相对更高。
6、客户预算
如果产品需求很多,但是预算不够,那也白搭,因此客户应该根据预算了确定产品功能需e69da5e6ba90e79fa5e9819331333431363561求。
当然,一定会有甲乙双方讨价还价的过程,双方合作共赢才是王道。
java大厂代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于大厂java面经、java大厂代码的信息别忘了在本站进行查找喔。
发布于:2022-12-22,除非注明,否则均为
原创文章,转载请注明出处。