2026/5/31 23:51:50
网站建设
项目流程
动态ip怎么做网站,ftp服务器搭建设置网站信息,医院网站制作多少钱,网站建设 费用一、Java概述
1. 谈谈你对 Java 平台的理解#xff1f;
① 平台无关性#xff08;一次编译到处运行#xff09;
② GC#xff08;垃圾自动回收机制#xff0c;不像C那样需要手动去释放堆内存#xff09;
③ 语言特性#xff08;泛型、反射、Lambda 表达式#xff0…一、Java概述1. 谈谈你对 Java 平台的理解① 平台无关性一次编译到处运行② GC垃圾自动回收机制不像C那样需要手动去释放堆内存③ 语言特性泛型、反射、Lambda 表达式④ 面向对象封装、继承、多态⑤ 类库集合、并发库、网络库等、IO、NIO⑥ 异常处理2. JDK、JRE和JVM的关系**JDK**Java开发工具包包含JRE、编译工具和打包工具**JRE**Java运行环境包含JVM和和核心类库**JVM**Java虚拟机是实现跨平台的核心部分3. 什么是跨平台性原理是什么所谓跨平台性是指java语言编写的程序一次编译后可以在多个系统平台上运行。实现原理Java程序是通过虚拟机在系统平台上运行的只要该系统安装相应的java虚拟机该系统就可以运行java程序。4. 什么是字节码采用字节码的最大好处是什么字节码Java源代码经过虚拟机编译器编译后产生的文件即扩展为.class的文件采用字节码的好处① 解决了传统解释型语言执行效率低的问题② 又保留了解释型语言可移植的特点③ 在多种不同的计算机上运行。篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题需要全套面试笔记及答案【点击此处即可】免费获取二、基础语法1. Java有哪些数据类型① 数据类型组成② 各种数据类型所占的位数备注java底层没有boolean类型都是用int代替boolean类型占了单独使用是4个字节在数组中是1个字节2. Java自动装箱与拆箱装箱基本数据类型转换为包装器类型valueOf拆箱包装器类型转换为基本数据类型intValue3. 基本数据类型和包装类的区别①包装类是对象拥有方法和字段对象的调用都是通过引用对象的地址基本数据类型不是②包装类型是引用的传递基本类型是值的传递③声明方式不同基本数据类型不需要new关键字而包装类型需要new在堆内存中进行new来分配内存空间④存储位置不同基本数据类型直接将值保存在值栈中而包装类型是把对象放在堆中然后通过对象的引用来调用它们⑤初始值不同eg:int的初始值为0、boolean的初始值为fales 而包装类型的初始值为null⑥使用方法不同基本数据类型直接赋值使用就好而包装类型是在集合如collction Map时会使用例如List4. Integer、new Integer() 和 int 比较问题**① 两个 new Integer() 变量比较 永远是 false**因为new生成的是两个对象其内存地址不同② Integer变量和 new Integer() 变量比较 永远为 false因为 Integer变量 指向的是 java 常量池 中的对象而 new Integer() 的变量指向 堆中 新建的对象两者在内存中的地址不同**③ 两个Integer 变量比较如果两个变量的值在区间-128****到127 之间则比较结果为true**如果两个变量的值不在此区间则比较结果为 false**。**因为java对于-128到127之间的数会进行缓存。④int 变量 与 Integer、 new Integer() 比较时只要两个的值是相等则为true因为包装类Integer 和 基本数据类型int 比较时java会自动拆包装为int 然后进行比较实际上就变为两个int变量的比较。5. 访问修饰符 public,private,protected,以及不写默认时的区别6. 和的区别相同点运算符的两边都是true的时候结果才是true不同点是两边都会运算然后来判断结果从左边找到一个为false直接返回false注意运算符有两种用法① **按位与**按位与运用二进制进行计算 ② **逻辑与**逻辑与比较符号两边的真假输出逻辑值**拓展**逻辑或运算符|和短路或运算符||的差别也是如此。7. final finally finalize区别① final是一个修饰符关键字可以修饰类、方法、变量修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个常量不能被重新赋值。② finally是一个异常处理的关键字一般作用在try-catch-finally代码块中在处理异常的时候通常我们将一定要执行的代码放在finally代码块中表示不管是否出现异常该代码块都会执行一般用来存放一些关闭资源的代码。③ finalize是属于Object类的一个方法该方法一般由垃圾回收器来调用它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize 机制现在已经不推荐使用并且在 JDK 9 被标记为 deprecated。8. break ,continue ,return 的区别及作用break结束当前的循环体continue跳出本次循环继续执行下次循环return结束当前的方法直接返回三、面向对象1. 面向对象和面向过程的区别面向过程是具体化的流程化的解决一个问题你需要一步一步的分析一步一步的实现性能比面向对象好一般用于单片机、嵌入式开发方面开发面向对象是抽象化的模型化的你只需抽象出一个类这是一个封闭的盒子在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了不必去一步一步的实现至于这个功能是如何实现的我们可以不用太关心会用就可以了面向对象有封装、继承、多态性的特性所以**易维护、易复用、易扩展******但性能上比面向过程差2. 面向对象三大特性封装封装是把一个对象的属性私有化同时提供一些可以被外界访问属性的方法继承子类继承父类、子类拥有父类的所有属性。多态性多态有三个必要条件继承、重写、向上转型。3. 抽象类和接口的对比从设计层面来说抽象类是对类的抽象是一种模板设计接口是行为的抽象是一种行为的规范。相同点① 接口和抽象类都不能实例化② 都位于继承的顶端用于被其他类实现或继承③ 都包含抽象方法其子类都必须重写这些抽象方法不同点注Java8中接口中引入默认方法和静态方法以此来减少抽象类和接口之间的差异。现在我们可以为接口提供默认实现的方法了并且不用强制子类来实现它。4. 成员变量与局部变量的区别有哪些5. 重载Overload和重写Override的区别方法的重载和重写都是实现多态的方式区别在于前者实现的是编译时的多态性而后者实现的是运行时的多态性。**重载**发生在同一个类中方法名相同参数列表不同参数类型不同、个数不同、顺序不同与方法返回值和访问修饰符无关即重载的方法不能根据返回类型进行区分**重写**发生在父子类中方法名、参数列表必须相同返回值小于等于父类抛出的异常小于等于父类访问修饰符大于等于父类里氏代换原则如果父类方法访问修饰符为private则子类中就不是重写。6. 和 equals 的区别是什么: 它的作用是判断两个对象的内存地址是不是相等。即判断两个对象是不是同一个对象。(基本数据类型 比较的是值引用数据类型 比较的是内存地址)equals(): 它的作用也是判断两个对象是否相等。有两种使用情况情况1类没有覆盖 equals() 方法等价于通过“”比较这两个对象。情况2类覆盖了 equals() 方法。一般我们都覆盖 equals() 方法来判断两个对象的内容相等若它们的内容相等则返回 true (即认为这两个对象相等)。7. hashCode 与 equalshashCode()介绍hashCode() 的作用是获取哈希码也称为散列码它实际上是返回一个int类型的整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在JDK的Object类中这就意味着Java中的任何类都包含有hashCode()函数。散列表存储的是键值对(key-value)它的特点是能根据“键”快速的检索出对应的“值”。这其中就利用到了散列码可以快速找到所需要的对象为什么要有 hashCode我们以“HashSet 如何检查重复”为例子来说明为什么要有 hashCode当你把对象加入 HashSet 时HashSet 会先计算对象的 hashcode 值来判断对象加入的位置同时也会与其他已经加入的对象的 hashcode 值作比较如果没有相同的hashcodeHashSet会假设对象没有重复出现。但是如果发现有相同 hashcode 值的对象这时会调用 equals()方法来检查 hashcode 相等的对象是否真的相同。如果两者相同HashSet 就不会让其加入操作成功。如果不同的话就会重新散列到其他位置。先进行 hashcode 比较后进行 equals 方法比较的目的可以大大减少了 equals 方法比较的次数相应就大大提高了执行速度。hashCode()与equals()的相关规定如果两个对象相等则hashcode一定也是相同的两个对象相等对两个对象分别调用equals方法都返回true两个对象有相同的hashcode值它们不一定是相等的因此当重写equals方法后有必要将hashCode方法也重写这样做才能保证不违背hashCode方法中“相同对象必须有相同哈希值”的约定。8. 值传递和引用传递有什么区别**值传递**调用函数时将实际参数复制一份传递到函数中函数内部对参数内部进行修改不会影响到实际参数,即创建副本不会影响原生对象引用传递****方法接收的是实际参数所引用的地址不会创建副本对形参的修改将影响到实参即不创建副本会影响原生对象四、异常1. 什么是异常请描述一下Java异常架构Java异常是Java提供的一种识别及响应错误的一致性机制。异常能清晰的回答what, where, why这3个问题异常类型回答了“什么”被抛出异常堆栈跟踪回答了“在哪”抛出异常信息回答了“为什么”会抛出。2. Error 和 Exception 区别是什么Error表示系统级的错误和程序不必处理的异常例如系统崩溃、内存溢出、jvm错误Exception表示需要捕捉或者需要程序进行处理的异常3. 什么是运行时异常编译时异常什么是受检异常与非受检异常**运行时异常非受检异常**RuntimeException 类及其子类Java 编译器不会检查它此类异常一般是由程序逻辑错误引起的需要通过修改代码来进行避免编译时异常受检异常Exception 中除 RuntimeException 及其子类之外的异常Java 编译器会检查它要么通过throws进行声明抛出要么通过try-catch进行捕获处理否则不能通过编译篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题需要全套面试笔记及答案****【点击此处即可】****免费获取4. JVM 是如何处理异常的在一个方法中如果发生异常这个方法会创建一个异常对象并转交给 JVM该异常对象包含异常名称异常描述以及异常发生时应用程序的状态。创建异常对象并转交给 JVM 的过程称为抛出异常。可能有一系列的方法调用最终才进入抛出异常的方法这一系列方法调用的有序列表叫做调用栈。JVM 会顺着调用栈去查找看是否有可以处理异常的代码如果有则调用异常处理代码。如果 JVM 没有找到可以处理该异常的代码块JVM 就会将该异常转交给默认的异常处理器默认处理器为 JVM 的一部分默认异常处理器打印出异常信息并终止应用程序。5. 从性能角度来审视一下 Java 的异常处理机制try-catch 代码段会产生额外的性能开销或者换个角度说它往往会影响 JVM 对代码进行优化所以建议仅捕获有必要的代码段尽量不要一个大的 try 包住整段的代码利用异常控制代码流程也不是一个好主意远比我们通常意义上的条件语句if/else、switch要低效Java 每实例化一个 Exception都会对当时的堆栈进行快照这是一个相对比较重的操作。如果发生的非常频繁这个开销可就不能被忽略了。6. throw 和 throws 的区别是什么throw运用于方法内部用于给调用者返回一个异常对象和renturn一样结束当前方法throws运用于方法声明之上用于表示当前方法不处理异常而是提示该方法的调用者处理异常7. try-catch-finally 中如果 catch 中 return 了finally 还会执行吗其实return与finally并没有明显的谁强谁弱。在执行时是return语句先把返回值写入但内存中然后停下来等待finally语句块执行完return再执行后面的一段例子如果fun1的finally加上return输出就是20因为重新放到内存里而fun2本身是操作内存因为s是引用类型public int fun1() {int i 10;try { return i; } catch (Exception e) { return i; } finally { i 20; }} // 10public StringBuilder fun2() {StringBuilder s new StringBuilder(1);try {s.append(2); return s; }catch (Exception e) {return s;} finally {s.append(3);}} // 1238. Java常见异常有哪些① Errorjava.lang.OutOfMemoryError内存不足错误 java.lang.StackOverflowError堆栈溢出错误② Exception编译异常NoSuchMethodException方法未找到异常 IOException输入输出异常 EOFException文件已结束异常 FileNotFoundException文件未找到异常 NumberFormatException字符串转换为数字异常 SQLException操作数据库异常③ RuntimeException运行时异常ConcurrentModificationException并发修改异常 NullPointerException(空指针异常) ClassCastException(类转换异常) IndexOutOfBoundsException(索引越界异常) ClassNotFoundException类文件未找到异常 ArithmeticException数学计算异常9. 说几个Java异常处理最佳实践不要忽略异常在Java中忽略异常是一种很常见的错误。它可能导致程序崩溃、数据丢失等问题。所以在异常处理中一定不要忽略异常应该对异常进行适当的处理。使用try-catch-finally块在处理异常时应该使用try-catch-finally块。try块中包含可能会抛出异常的代码catch块中包含处理异常的代码finally块中包含无论是否发生异常都需要执行的代码。这种方式可以有效地捕获异常并进行处理。使用多个catch块在使用try-catch块时应该使用多个catch块来捕获不同类型的异常。这可以使异常处理更加细粒度化从而更加有效地处理不同类型的异常。不要在finally块中抛出异常在finally块中抛出异常是一种很常见的错误。如果在finally块中抛出异常它可能会覆盖在try块或catch块中抛出的异常从而使问题更加难以排查。所以在finally块中最好只执行一些清理工作而不是抛出异常。不要捕获不必要的异常有些异常是Java中的运行时异常它们在运行时可能会发生但通常不需要捕获。捕获不必要的异常会增加代码的复杂性并可能导致性能下降。使用自定义异常在Java中可以使用自定义异常来表示特定的错误或异常情况。这可以使异常处理更加细粒度化并使代码更易于维护和调试。记录异常信息在捕获异常时应该记录异常信息包括异常类型、异常消息和堆栈跟踪信息。这可以帮助开发人员更好地理解问题所在并更快地排查问题。10. NoClassDefFoundError 和 ClassNotFoundException 有什么区别NoClassDefFoundError是一个错误(Error)JVM或者ClassLoader实例尝试加载类的时候却找不到类的定义。要查找的类在编译的时候是存在的运行的时候却找不到了。这个时候就会导致NoClassDefFoundError。ClassNOtFoundException是一个异常Java支持使用反射方式在运行时动态加载类例如使用Class.forName方法来动态地加载类时可以将类名作为参数传递给上述方法从而将指定类加载到JVM内存中如果这个类在类路径中没有被找到那么此时就会在运行时抛出ClassNotFoundException异常11. OOM你遇到过哪些情况SOF你遇到过哪些情况OOM1OutOfMemoryError异常2虚拟机栈和本地方法栈溢出3运行时常量池溢出4方法区溢出SOF堆栈溢出StackOverflowStackOverflowError 的定义当应用程序递归太深而发生堆栈溢出时五、IO流1. java 中 IO 流分为几种?按照流的流向分可以分为输入流和输出流按照操作单元划分可以分为字节流和字符流按照流的角色划分可以分为节点流和处理流。Java IO流共涉及40多个类这些类看上去很杂乱但实际上很有规则而且彼此之间存在非常紧密的联系 Java IO流的40多个类大部分都是从如下4个抽象类基类中派生出来的。InputStream/Reader: 所有的输入流的基类前者是字节输入流后者是字符输入流。OutputStream/Writer: 所有输出流的基类前者是字节输出流后者是字符输出流。2. Java中字符流与字节流的区别Java****中的字节流处理的最基本单位为单个字节它通常用来处理二进制数据Java中的字符流处理的最基本的单元是Unicode****码元大小2字节它通常用来处理文本数据3. BIO,NIO,AIO 有什么区别?BIO、NIO 和 AIO 都是 Java 中用于实现网络编程的技术它们有以下区别BIOBlocking I/O同步阻塞 I/O即传统的 I/O 模型使用阻塞式的方法处理数据流。BIO 的特点是模型简单、编程方便但并发处理能力较弱适用于连接数目比较小且固定的架构例如实现简单的服务器。NIONon-blocking I/O同步非阻塞 I/O即新的 I/O 模型使用非阻塞式的方法处理数据流。NIO 的特点是支持高并发适用于连接数目多且连接比较短的架构例如实现高性能 Web 服务器等。AIOAsynchronous I/O异步非阻塞 I/O即基于事件和回调机制实现的 I/O 模型。AIO 的特点是能够处理更多的并发请求适用于连接数目多且连接比较长的架构例如实现高并发的网络应用程序。4. BIO、NIO、AIO 实现原理BIOBlocking I/O实现原理BIO 使用阻塞式 I/O 处理数据采用同步阻塞方式即应用程序的线程在读取或写入数据时如果数据还没有准备好那么线程会被阻塞直到数据准备好并读取或写入完成。NIONon-blocking I/O实现原理NIO 使用非阻塞式 I/O 处理数据采用同步非阻塞方式即应用程序的线程可以继续执行其他任务而不是等待数据的读取或写入。当数据准备好后线程会得到通知可以读取或写入数据。NIO 实现的关键是**选择器Selector和通道Channel**的概念。选择器可以同时监控多个通道的状态当一个通道的状态发生变化时选择器会得到通知线程可以处理该通道的数据。AIOAsynchronous I/O实现原理AIO 采用异步非阻塞方式即应用程序的线程不需要等待数据的读取或写入而是通过回调机制在数据读取或写入完成后得到通知。AIO 实现的关键是异步通道Asynchronous Channel和 CompletionHandler 回调函数。异步通道可以在数据读取或写入完成后向操作系统发出通知当操作系统完成数据读取或写入后会调用注册的 CompletionHandler回调函数应用程序可以在回调函数中处理读取或写入的数据。总之BIO、NIO、AIO 三种技术实现原理不同分别采用同步阻塞、同步非阻塞和异步非阻塞方式处理数据。选择合适的技术取决于应用程序的特点和需求。Java开发的就业市场正在经历结构性调整竞争日益激烈传统纯业务开发岗位如仅完成增删改查业务的后端工程师的需求特别是入门级岗位正显著萎缩。随着企业技术需求升级市场对Java人才的要求已从通用技能转向了更深入的领域经验如云原生、微服务或前沿的AI集成能力。这也导致岗位竞争加剧在一、二线城市求职者不仅面临技术内卷还需应对学历与项目经验的高门槛。大模型为核心的AI领域正展现出前所未有的就业热度与人才红利2025年AI相关新发岗位数量同比激增543%单月增幅最高超过11倍大模型算法工程师位居热门岗位前列。行业顶尖人才的供需严重失衡议价能力极强跳槽薪资涨幅可达30%-50%。值得注意的是市场并非单纯青睐算法研究员而是急需能将大模型能力落地于复杂业务系统的工程人才。这使得具备企业级架构思维和复杂系统整合经验的Java工程师在向“Java大模型”复合人才转型时拥有独特优势成为企业竞相争夺的对象其薪资天花板也远高于传统Java岗位。说真的这两年看着身边一个个搞Java、C、前端、数据、架构的开始卷大模型挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis稳稳当当过日子。结果GPT、DeepSeek火了之后整条线上的人都开始有点慌了大家都在想“我是不是要学大模型不然这饭碗还能保多久”先给出最直接的答案一定要把现有的技术和大模型结合起来而不是抛弃你们现有技术掌握AI能力的Java工程师比纯Java岗要吃香的多。即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇如何学习AGI大模型作为一名热心肠的互联网老兵我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。因篇幅有限仅展示部分资料需要点击下方链接即可前往获取2025最新版CSDN大礼包《AGI大模型学习资源包》免费分享**一、2025最新大模型学习路线一个明确的学习路线可以帮助新人了解从哪里开始按照什么顺序学习以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛没有明确的学习路线可能会导致新人感到迷茫不知道应该专注于哪些内容。我们把学习路线分成L1到L4四个阶段一步步带你从入门到进阶从理论到实战。L1级别:AI大模型时代的华丽登场L1阶段我们会去了解大模型的基础知识以及大模型在各个行业的应用和分析学习理解大模型的核心原理关键技术以及大模型应用场景通过理论原理结合多个项目实战从提示工程基础到提示工程进阶掌握Prompt提示工程。L2级别AI大模型RAG应用开发工程L2阶段是我们的AI大模型RAG应用开发工程我们会去学习RAG检索增强生成包括Naive RAG、Advanced-RAG以及RAG性能评估还有GraphRAG在内的多个RAG热门项目的分析。L3级别大模型Agent应用架构进阶实践L3阶段大模型Agent应用架构进阶实现我们会去学习LangChain、 LIamaIndex框架也会学习到AutoGPT、 MetaGPT等多Agent系统打造我们自己的Agent智能体同时还可以学习到包括Coze、Dify在内的可视化工具的使用。L4级别大模型微调与私有化部署L4阶段大模型的微调和私有化部署我们会更加深入的探讨Transformer架构学习大模型的微调技术利用DeepSpeed、Lamam Factory等工具快速进行模型微调并通过Ollama、vLLM等推理部署框架实现模型的快速部署。整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握而L3 L4更多的是通过项目实战来掌握大模型的应用开发针对以上大模型的学习路线我们也整理了对应的学习视频教程和配套的学习资料。二、大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。书籍含电子版PDF三、大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。四、大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。五、大模型面试题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。因篇幅有限仅展示部分资料需要点击下方链接即可前往获取2025最新版CSDN大礼包《AGI大模型学习资源包》免费分享