<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>麦农编程网</title><link>http://maynowei.com/</link><description>编程文章_技术教程_实战案例</description><item><title>太牛逼了!阿里技术团队重磅开放《Java 开发手册》附下载地址</title><link>http://maynowei.com/post/1011.html</link><description>&lt;p&gt;《阿里巴巴 Java 开发手册》的愿景是码出高效，码出质量。它结合作者的开发经验和架构历程，提炼阿里巴巴集团技术团队的集体编程经验和软件设计智慧，浓缩成为立体的编程规范和最佳实践。&lt;/p&gt;&lt;p&gt;从严格意义上讲，《阿里巴巴 Java 开发手册》超越了 Java 语言本身，明确作为一名合格开发者应该具备的基本素质，因此本手册适合计算机相关行业的管理者和研发人员、高等院校的计算机专业师生、求职者等阅读，希望成为大家如良师益友般的工作手册、工具字典和床头书。&lt;/p&gt;&lt;p&gt;本书目录如下：&lt;/p&gt;&lt;p&gt;相关资源，由于微信外链限制，我已经整理好了，放到后台了，保证你阅读起来很舒服！&lt;/p&gt;&lt;p&gt;&lt;strong&gt;手册获取方法&lt;/strong&gt;&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot;&gt;转发、关注、点赞，私信发送【手册】然后自取&lt;/h1&gt;&lt;p&gt;通过这本书，相信你一定可以学到很多骚操作，当然，包括你需要改变地一些规范。&lt;/p&gt;&lt;p&gt;另外，也为了回馈广大读者朋友，我特地给大家整理了一份 &lt;strong&gt;2020 年全网最新最全的 Java 面试题宝典（含完整目录和答案）&lt;/strong&gt;，部分截图如下（点击图片可拉大）：&lt;/p&gt;&lt;p&gt;另外分享一份60页的《Python数据分析入门PPT》，可以下载学习&lt;/p&gt;&lt;p&gt;最后，再分享一个不错的Pandas文档，Panda是是一个强大的分析结构化数据的工具集；它的使用基础是Numpy（提供高性能的矩阵运算）；用于数据挖掘和数据分析，同时也提供数据清洗功能。学习Pandas最好的方法就是看官方文档：&lt;/p&gt;&lt;p&gt;《10 Minutes to pandas》、《Pandas cookbook》、《Learn Pandas》英文版读起来稍显吃力，所以向大家推荐Pandas官方文档中文版！&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;获取方式：&lt;/strong&gt;&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot;&gt;转发、关注、点赞&lt;/h1&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot;&gt;私信发送【资料】然后自取&lt;/h1&gt;</description><pubDate>Thu, 23 Oct 2025 07:45:02 +0800</pubDate></item><item><title>「是时候升级Java11了」 JDK11优势和JDK选择</title><link>http://maynowei.com/post/1010.html</link><description>&lt;blockquote class=&quot;pgc-blockquote-abstract&quot;&gt;&lt;p&gt;专注于Java领域优质技术，欢迎关注&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;作者：冷冷gg&lt;/p&gt;&lt;h2 class=&quot;heading&quot;&gt;Java8 商用收费&lt;/h2&gt;&lt;p&gt;从2019年1月份开始，Oracle JDK 开始对 Java SE 8 之后的版本开始进行商用收费，确切的说是 8u201/202 之后的版本。如果你用 Java 开发的功能如果是用作商业用途的，如果还不想花钱购买的话，能免费使用的最新版本是 8u201/202。当然如果是个人客户端或者个人开发者可以免费试用 Oracle JDK 所有的版本。&lt;/p&gt;&lt;h2 class=&quot;heading&quot;&gt;Java11 的性能提升&lt;/h2&gt;&lt;p&gt;仅通过切换到 Java 11 就有 16％ 的改进，这种改进可能是因为 Java 10 中引入了 JEP 307: Parallel Full GC for G1。&lt;/p&gt;&lt;p&gt;详情请见Java 11 究竟比 8 快了多少？看看这个基准测试&lt;/p&gt;&lt;h2 class=&quot;heading&quot;&gt;从java 8到java 11变化一览&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;说明&lt;/strong&gt;：这里面我们不会介绍全部特性，只会列举部分作为开发者最关心的变化。&lt;/p&gt;&lt;h3 class=&quot;heading&quot;&gt;&lt;strong&gt;紧凑型的字符串&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;从Java 9开始 String 数据承载由 char[] 改为 byte[] 紧凑的字符串，在很多时候只包含Latin-1里的字符，这些字符可节省一半内存。&lt;/p&gt;&lt;h2 class=&quot;heading&quot;&gt;增强api&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;1.字符串增强 @since 11&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.集合增强&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;从Java 9 开始，jdk里面就为集合（List、Set、Map）增加了of和copyOf方法。它们用来创建不可变集合。&lt;/p&gt;&lt;ul class&gt;&lt;li&gt;of() @since 9&lt;/li&gt;&lt;li&gt;copyOf() @since 10&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;示例一：&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;示例二：&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;示例三：&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;注意：使用 of 和 copyOf 创建的集合为不可变集合，不能进行添加、删除、替换、排序等操作，不然会报&lt;br&gt;java.lang.UnsupportedOperationException异常，使用Set.of()不能出现重复元素、Map.of()不能出现重复key，否则回报&lt;br&gt;java.lang.IllegalArgumentException。。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.Stream增强 @since 9&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Stream是Java 8 中的特性，在Java 9 中为其新增了4个方法：&lt;/p&gt;&lt;p class=&quot;syl-line-pure-english&quot;&gt;&lt;strong&gt;3.1&lt;/strong&gt; ofNullable(T t)&lt;/p&gt;&lt;p&gt;此方法可以接收null来创建一个空流&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot; class=&quot;syl-page-code&quot;&gt;&lt;code&gt;// 以前
Stream.of(null); //报错
// 现在
Stream.ofNullable(null);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;syl-line-pure-english&quot;&gt;&lt;strong&gt;3.2&lt;/strong&gt; takeWhile(Predicate&amp;lt;? super T&amp;gt; predicate)&lt;/p&gt;&lt;p&gt;此方法根据Predicate接口来判断如果为true就 取出 来生成一个新的流,只要碰到false就终止，不管后边的元素是否符合条件。&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot; class=&quot;syl-page-code&quot;&gt;&lt;code&gt;Stream&amp;lt;Integer&amp;gt; integerStream = Stream.of(6, 10, 11, 15, 20);
Stream&amp;lt;Integer&amp;gt; takeWhile = integerStream.takeWhile(t -&amp;gt; t % 2 == 0);
takeWhile.forEach(System.out::println); // 6,10&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;syl-line-pure-english&quot;&gt;&lt;strong&gt;3.3&lt;/strong&gt; dropWhile(Predicate&amp;lt;? super T&amp;gt; predicate)&lt;/p&gt;&lt;p&gt;此方法根据Predicate接口来判断如果为true就 丢弃 来生成一个新的流,只要碰到false就终止，不管后边的元素是否符合条件。&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot; class=&quot;syl-page-code&quot;&gt;&lt;code&gt;Stream&amp;lt;Integer&amp;gt; integerStream = Stream.of(6, 10, 11, 15, 20);
Stream&amp;lt;Integer&amp;gt; takeWhile = integerStream.dropWhile(t -&amp;gt; t % 2 == 0);
takeWhile.forEach(System.out::println); //11,15,20&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;3.4&lt;/strong&gt; iterate重载&lt;/p&gt;&lt;p&gt;以前使用iterate方法生成无限流需要配合limit进行截断&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot; class=&quot;syl-page-code&quot;&gt;&lt;code&gt;Stream&amp;lt;Integer&amp;gt; limit = Stream.iterate(1, i -&amp;gt; i + 1).limit(5);
limit.forEach(System.out::println); //1,2,3,4,5&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;现在重载后这个方法增加了个判断参数&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot; class=&quot;syl-page-code&quot;&gt;&lt;code&gt;Stream&amp;lt;Integer&amp;gt; iterate = Stream.iterate(1, i -&amp;gt; i &amp;lt;= 5, i -&amp;gt; i + 1);
iterate.forEach(System.out::println); //1,2,3,4,5&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;4.Optional增强 @since 9&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;syl-line-pure-english&quot;&gt;&lt;strong&gt;4.1&lt;/strong&gt; stream()&lt;/p&gt;&lt;p&gt;如果为空返回一个空流，如果不为空将Optional的值转成一个流。&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p class=&quot;syl-line-pure-english&quot;&gt;&lt;strong&gt;4.2&lt;/strong&gt; ifPresentOrElse(Consumer&amp;lt;? super T&amp;gt; action, Runnable emptyAction)&lt;/p&gt;&lt;p&gt;个人感觉这个方法就是结合isPresent()对Else的增强，ifPresentOrElse 方法的用途是，如果一个 Optional 包含值，则对其包含的值调用函数 action，即 action.accept(value)，这与 ifPresent 一致；与 ifPresent 方法的区别在于，ifPresentOrElse 还有第二个参数 emptyAction —— 如果 Optional 不包含值，那么 ifPresentOrElse 便会调用 emptyAction，即 emptyAction.run()。&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p class=&quot;syl-line-pure-english&quot;&gt;&lt;strong&gt;4.3&lt;/strong&gt; or(Supplier&amp;lt;? extends Optional&amp;lt;? extends T&amp;gt;&amp;gt; supplier)&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5.InputStream增强 @since 9&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;h2 class=&quot;heading&quot;&gt;&lt;strong&gt;HTTP Client API&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;改api支持同步和异步两种方式，下面是两种方式的示例：&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p class=&quot;syl-page-br syl-page-br-hide&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;h2 class=&quot;heading&quot;&gt;&lt;strong&gt;移除内容&lt;/strong&gt;&lt;/h2&gt;&lt;ul class&gt;&lt;li&gt;com.sun.awt.AWTUtilities。&lt;/li&gt;&lt;li&gt;sun.misc.Unsafe.defineClass 使用java.lang.invoke.MethodHandles.Lookup.defineClass来替代。&lt;/li&gt;&lt;li&gt;Thread.destroy() 以及 Thread.stop(Throwable) 方法。&lt;/li&gt;&lt;li&gt;sun.nio.ch.disableSystemWideOverlappingFileLockCheck 属性。&lt;/li&gt;&lt;li&gt;sun.locale.formatasdefault 属性。&lt;/li&gt;&lt;li&gt;jdk snmp 模块。&lt;/li&gt;&lt;li&gt;javafx，openjdk 是从java10版本就移除了，oracle java10还尚未移除javafx ，而java11版本将javafx也移除了。&lt;/li&gt;&lt;li&gt;Java Mission Control，从JDK中移除之后，需要自己单独下载。&lt;/li&gt;&lt;li&gt;Root Certificates ：Baltimore Cybertrust Code Signing CA，SECOM ，AOL and Swisscom。&lt;/li&gt;&lt;li&gt;在java11中将java9标记废弃的Java EE及CORBA模块移除掉。&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;heading&quot;&gt;&lt;strong&gt;完全支持Linux容器（包括docker）&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;许多运行在Java虚拟机中的应用程序（包括Apache Spark和Kafka等数据服务以及传统的企业应用程序）都可以在Docker容器中运行。但是在Docker容器中运行Java应用程序一直存在一个问题，那就是在容器中运行JVM程序在设置内存大小和CPU使用率后，会导致应用程序的性能下降。这是因为Java应用程序没有意识到它正在容器中运行。随着Java 10的发布，这个问题总算得以解决，JVM现在可以识别由容器控制组（cgroups）设置的约束。可以在容器中使用内存和CPU约束来直接管理Java应用程序，其中包括：&lt;/p&gt;&lt;ul class&gt;&lt;li&gt;遵守容器中设置的内存限制&lt;/li&gt;&lt;li&gt;在容器中设置可用的CPU&lt;/li&gt;&lt;li&gt;在容器中设置CPU约束&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;heading&quot;&gt;&lt;strong&gt;JDK推荐&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;由于 Java 11 开始，Oracle 提供的是付费支持的商业版本。笔者在这更加推荐使用亚马逊的 Corretto，Corretto 采用 GPL 协议。&lt;/p&gt;&lt;p&gt;Corretto的长期支持（LTS）包括Corretto 8的性能增强和安全更新，至少在2023年6月之前免费提供。 更新计划每季度发布一次。&lt;/p&gt;&lt;p&gt;亚马逊将为Corretto 11提供LTS的季度更新，至少持续到2024年8月。&lt;/p&gt;&lt;p&gt;Github 下载地址：&lt;a class=&quot;pgc-link&quot; data-content=&quot;mp&quot; href=&quot;https://github.com/corretto/corretto-8/releases&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;「链接」&lt;/a&gt;&lt;/p&gt;&lt;h2 class=&quot;heading&quot;&gt;声明&lt;/h2&gt;&lt;p&gt;本系列文章由微服务核心组件mica作者如梦技术共同整理撰写， 如有参考或者转载，请保留原作者和注明出处。&lt;/p&gt;&lt;blockquote class=&quot;pgc-blockquote-abstract&quot;&gt;&lt;p&gt;&lt;span&gt;来源：掘金 链接：&lt;br&gt;https://juejin.im/post/5e4df461e51d4526cd1de49a&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><pubDate>Thu, 23 Oct 2025 07:45:01 +0800</pubDate></item><item><title>2021Java最新学习路线图新鲜出炉_javaee学习路线</title><link>http://maynowei.com/post/1009.html</link><description>&lt;p class&gt;深知广大爱好Java的人学习是多么困难，专门整理了新版的学习路线图，不管你是不懂电脑的小白，还是已经步入开发的大牛，这套路线路绝对不容错过！传智教育旗下黑马程序员分享免费视频教程长达12余万小时，受益人数达千万。2021年我们不忘初心，继续前行。 路线图的宗旨就是分享，专业，便利，让喜爱Java的人，都能平等的学习。从今天起不要再找借口，不要再说想学Java却没有资源，赶快行动起来，Java等你来探索，高薪距你只差一步！&lt;/p&gt;&lt;h1&gt;第一阶段：Java语言入门到精通 &lt;/h1&gt;&lt;p&gt;学前导读：&lt;/p&gt;&lt;p&gt;学习任何一门编程语言，首先要学习的是基础语法，开启Java学习的第一步，当然就是深入掌握计算机基础、编程基础语法，面向对象，集合、IO流、线程、并发、异常及网络编程，这些我们称之为JavaSE基础。当你掌握了这些内容之后，你就可以做出诸如：电脑上安装的迅雷下载软件、QQ聊天客户端、考勤管理系统等桌面应用软件。&lt;/p&gt;&lt;h1&gt;第二阶段：JavaWeb核心技术 &lt;/h1&gt;&lt;p&gt;学前导读：&lt;/p&gt;&lt;p&gt;掌握前端技术只能做静态网站，但它页面数据一成不变，而动态网站可以根据数据库中变更的数据实现不同的内容展示，应用更广泛，因此程序员必须要学会做动态网站。使用Java做动态网站，我们需要学习Servlet、Filter、Session、Cookie、JSP、EL表达式、JSTL等做动态网站的完整知识体系，学完可研发出OA系统、内容网站、BBS等。&lt;/p&gt;&lt;h1&gt;第三阶段：编程强化 &lt;/h1&gt;&lt;p&gt;学前导读：&lt;/p&gt;&lt;p&gt;前面学了JavaSE基础，但它在企业级应用中程序处理业务的效率并不高、扩展差，编程强化是对JavaSE基础的加强，将针对性的提高程序处理业务的执行效率、增强程序扩展性。编程强化将加强多线程高级学习，涉及线程内存、线程通信等技术。学完以后，能增加一个中级程序员的知识储备，无论在面试过程中还是将来技术的深入打一个良好的基础。&lt;/p&gt;&lt;h1&gt;第四阶段：项目管理工具&lt;/h1&gt;&lt;p&gt;学前导读：&lt;/p&gt;&lt;p&gt;公司开发都是团队协同开发，为更好地掌握实际开发，我们还需要学习常用的项目管理平台、版本控制器、项目构建工具以及自动化部署工具。项目开发一定是有版本升级的，管理好项目进度和版本需要Git、Maven、Sonar这样的系统平台。学习完软件项目管理后，将掌握整个项目实际开发过程以及整个项目开发过程中所使用协同开发工具。&lt;/p&gt;&lt;h1&gt;第五阶段：热门框架技术&lt;/h1&gt;&lt;p&gt;学前导读：&lt;/p&gt;&lt;p&gt;Javaweb掌握后，已经具备企业中实际项目的开发能力了，但它开发效率低，代码量大，开发周期长、开发成本高。企业中广泛使用一些优秀的框架技术来解决上述问题，因此我们还需要学习框架技术，项目开发中主流的Java框架技术有SpringMVC、Spring、MyBatis、MyBatis Plus、SpringData等。这些框架技术都是一个优秀程序员所必备的技能。&lt;/p&gt;&lt;h1&gt;第六阶段：分布式架构&lt;/h1&gt;&lt;p&gt;学前导读：&lt;/p&gt;&lt;p&gt;需要用到分布式微服务的技术。学习完该阶段课程，可以具备大型SOA架构和微服务架构能力，能掌握大型微服务项目必备技术和实际经验。企业发展过程中，业务量和用户量逐渐增加，为了保证系统的可用性，系统越做越复杂，研发人员增多，大家很难共同维护一个复杂的系统，往往修改部分内容，导致牵一发而动全身，所以我们需要升级系统架构，&lt;/p&gt;&lt;h1&gt;第七阶段：服务器技术&lt;/h1&gt;&lt;p&gt;学前导读：&lt;/p&gt;&lt;p&gt;不管是使用原生Javaweb进行开发，还是使用框架进行开发，项目最终需要对外发布才能供全世界的人访问到，而服务器板块就可以解决这个问题，所以服务器是项目发布的必要技术。该板块包括虚拟化和web应用服务器的学习，主要包括如下几个模块：Vmware，虚拟机软件；Linux，专门用于服务器的系统；Nginx，集群部署时反向代理服务器；Tomcat，项目发布时主要使用的服务器。该板块学习后，我们就可以把开发好的项目发布到服务器中，然后供你的小伙伴远程访问了，超酷！&lt;/p&gt;&lt;h1&gt;第八阶段：业务解决方案&lt;/h1&gt;&lt;p&gt;学前导读：企业开发中会遇到一些通用的业务场景，诸如：搜索引擎、缓存、定时任务、工作流、报表导出、日志管理、系统监控等，那么这些通用的解决方案也有现成优秀的免费开源中间件，可供使用。诸如：ElasticSearch、Lucene、Solr、redis、MongoDB、slf4J、ECharts、Quartz、POI等。业务解决方案课程的业务方案和技术难点，解决了企业开发中90%以上的痛点和难点。&lt;/p&gt;</description><pubDate>Thu, 23 Oct 2025 07:44:48 +0800</pubDate></item><item><title>甲骨文:Java始终与Windows XP不离不弃</title><link>http://maynowei.com/post/1008.html</link><description>&lt;p&gt;IT之家（www.ithome.com）：甲骨文：Java始终与Windows XP不离不弃&lt;/p&gt;&lt;p&gt;7月4日，Java美国官网正式宣布Java 8不再支持Windows XP，不少XP用户担忧Java将停止XP支持。不过近日，甲骨文公司又发布新声明，表示Java始终与Windows XP不离不弃，后期将提供累积安全更新、功能更新等。&lt;/p&gt;&lt;p&gt;据甲骨文官方公告介绍，“我们期望Java全系列持续支持微软Windows XP平台，例如JDK 7未来将继续在XP平台工作。同样，甲骨文公司将继续为XP平台提供安全更新服务，用户只需从Java官网下载最新版JDK 7开发工具。”&lt;/p&gt;&lt;p&gt;同时，甲骨文也“改口”：Java 8或支持Windows XP平台。&lt;/p&gt;&lt;p&gt;例如当开发者在Windows XP平台直接安装Java 8时，会因兼容性无法正常安装，但是甲骨文表示，开发者只需解压Java 8安装包，手动运行安装包，即可在XP平台完成安装工作。&lt;/p&gt;&lt;p&gt;甲骨文表示：“JDK 8暂不支持Windows XP平台，主要源于XP安装包的兼容问题，导致无法正常部署安装。我们也正在尝试解决该问题，但不能肯定是否完成修复。”&lt;/p&gt;</description><pubDate>Thu, 23 Oct 2025 07:44:47 +0800</pubDate></item><item><title>JDK的下载安装与环境变量的配置_jdk怎么安装环境变量</title><link>http://maynowei.com/post/1007.html</link><description>&lt;p data-track=&quot;1&quot;&gt;一、JDK下载&lt;/p&gt;&lt;p data-track=&quot;2&quot;&gt;1.jdk下载地址 官网 https://www.oracle.com&lt;/p&gt;&lt;p data-track=&quot;3&quot;&gt;2.选择Products&lt;/p&gt;&lt;p data-track=&quot;43&quot;&gt;3.选择Java&lt;/p&gt;&lt;p data-track=&quot;5&quot;&gt;4.选择Java SE，进入Oracle JDK&lt;/p&gt;&lt;p data-track=&quot;6&quot;&gt;5.根据需要选择版本&lt;/p&gt;&lt;p data-track=&quot;7&quot;&gt;6.我所使用的版本&lt;/p&gt;&lt;p data-track=&quot;8&quot;&gt;二、JDK安装&lt;/p&gt;&lt;p data-track=&quot;9&quot;&gt;1.按正常软件安装即可，双击安装包，下一步，下一步 ，... ，完成。&lt;/p&gt;&lt;p data-track=&quot;10&quot;&gt;2.如果不想安装在C盘，可以更改安装盘符，其他目录最好不变。&lt;/p&gt;&lt;p data-track=&quot;11&quot;&gt;3.也可以更改安装目录，但所在目录不要有中文字符。&lt;/p&gt;&lt;p data-track=&quot;12&quot;&gt;三、配置环境变量&lt;/p&gt;&lt;p data-track=&quot;13&quot;&gt;1.我的电脑 右击 —— 属性 —— 高级系统设置 —— 环境变量 —— 系统变量&lt;/p&gt;&lt;p data-track=&quot;14&quot;&gt;2.新建系统变量JAVA_HOME，值为安装目录的全路径：D:\Program Files\Java\jdk1.8.0_241(根据自己的安装目录配置)&lt;/p&gt;&lt;p data-track=&quot;15&quot;&gt;3.在Path中添加，%JAVA_HOME%\bin&lt;/p&gt;&lt;p data-track=&quot;16&quot;&gt;4.验证jdk是否安装成功&lt;/p&gt;&lt;p data-track=&quot;17&quot;&gt;5.按win + R键，输入cmd + 回车键，打开命令提示符&lt;/p&gt;&lt;p data-track=&quot;18&quot;&gt;6.在命令提示符中输入 java -version 回车&lt;/p&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;检验是不是自己所安装的版本&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p data-track=&quot;40&quot;&gt;注：对初学者来说，可以直接在Path路径中添加javac.exe文件所在的全路径D:\Program Files\Java \jdk1.8.0_241\bin&lt;/p&gt;&lt;/blockquote&gt;&lt;p data-track=&quot;22&quot;&gt;四、运行java程序&lt;/p&gt;&lt;p data-track=&quot;23&quot;&gt;1.新建 类名.java文件（public修饰的类的类名），编写源文件，保存。&lt;/p&gt;&lt;p data-track=&quot;24&quot;&gt;2.在源文件所在目录下，打开命令提示符&lt;/p&gt;&lt;p data-track=&quot;25&quot;&gt;3.输入 javac 类名.java 回车键，生成 类名.class 文件。&lt;/p&gt;&lt;p data-track=&quot;26&quot;&gt;4.输入 java 类名 回车键，程序执行&lt;/p&gt;&lt;p data-track=&quot;27&quot;&gt;五、JDK、JRE、JVM简介&lt;/p&gt;&lt;p data-track=&quot;28&quot;&gt;1.JDK (Java Development Kit)，java 开发工具包&lt;/p&gt;&lt;p data-track=&quot;29&quot;&gt;1）安装目录介绍&lt;/p&gt;&lt;p data-track=&quot;30&quot;&gt;（1）bin binary 二进制&lt;/p&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;javac.exe 编译工具。将 java 源代码编译为 字节码二进制文件。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;java.exe 解释器。&lt;/li&gt;&lt;/ul&gt;&lt;p data-track=&quot;42&quot;&gt;2.JRE，javaruntime Environment Java 运行环境&lt;/p&gt;&lt;p data-track=&quot;34&quot;&gt;不包括开发环境，没有编译的环境。&lt;/p&gt;&lt;p data-track=&quot;35&quot;&gt;3.JVM，java virtual machine，Java虚拟机&lt;/p&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;负责解释执行 字节码 .class 文件，是一个使用软件模拟的计算机。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;class 文件中是 虚拟机指令 和 数据的集合&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;jvm 也有自己的指令集合。&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;注：JDK包含JRE，JRE包含JVM&lt;/p&gt;&lt;/blockquote&gt;</description><pubDate>Thu, 23 Oct 2025 07:44:46 +0800</pubDate></item><item><title>Linux 下安装JDK17_linux的jdk安装</title><link>http://maynowei.com/post/1006.html</link><description>&lt;p data-track=&quot;1&quot;&gt;一、安装环境&lt;/p&gt;&lt;p data-track=&quot;2&quot;&gt;操作系统：&lt;/p&gt;&lt;p data-track=&quot;3&quot;&gt;JDK版本：17&lt;/p&gt;&lt;p data-track=&quot;6&quot;&gt;二、安装步骤&lt;/p&gt;&lt;p data-track=&quot;7&quot;&gt;第一步：下载安装包&lt;/p&gt;&lt;p data-track=&quot;8&quot;&gt;&lt;span style=&quot;color: #393939; --tt-darkmode-color: #A3A3A3;&quot;&gt;&lt;span&gt;下载Linux环境下的jdk1.8，请去官网（&lt;br&gt;https://www.oracle.com/java/technologies/downloads/#java8）中下载jdk的安装文件；&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot; data-track=&quot;9&quot;&gt;&lt;span style=&quot;color: #393939; --tt-darkmode-color: #A3A3A3;&quot;&gt;由于我的Linux是64位的，因此我下载jdk-17_linux-x64_bin.tar.gz（https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz）。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot; data-track=&quot;10&quot;&gt;&lt;span style=&quot;color: #393939; --tt-darkmode-color: #A3A3A3;&quot;&gt;如下图所示：&lt;/span&gt;&lt;/p&gt;&lt;p data-track=&quot;15&quot;&gt;远程调用下载文件直接用wget就可以，一般文件路径类型是http。如果有遇到是https就会下载出错。只需要在wget后面加上--no-check-certificate就可以，需要一个认证下载指令而已。&lt;/p&gt;&lt;p data-track=&quot;17&quot;&gt;第二步、解压&lt;/p&gt;&lt;p data-track=&quot;19&quot;&gt;在usr目录下新建一个java文件夹，&lt;span style=&quot;color: #393939; --tt-darkmode-color: #393939;&quot;&gt;将【jdk-17.0.2】里的数据拷贝至/user/java目录下&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;pgc-h-arrow-right&quot; data-track=&quot;22&quot;&gt;第三步、修改环境变量&lt;/p&gt;&lt;p data-track=&quot;25&quot;&gt;&lt;span style=&quot;color: #393939; --tt-darkmode-color: #A3A3A3;&quot;&gt;在文件末尾添加一下内容&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot; class=&quot;syl-page-code&quot;&gt;&lt;code&gt;export JAVA_HOME=/usr/java/jdk-17.0.2
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}&lt;/code&gt;&lt;/pre&gt;&lt;p data-track=&quot;28&quot;&gt;&lt;span style=&quot;color: #393939; --tt-darkmode-color: #A3A3A3;&quot;&gt;通过命令source /etc/profile让profile文件立即生效，如图所示&lt;/span&gt;&lt;/p&gt;&lt;p data-track=&quot;29&quot;&gt;&lt;span style=&quot;color: #393939; --tt-darkmode-color: #A3A3A3;&quot;&gt;第四步、测试是否安装成功&lt;/span&gt;&lt;/p&gt;&lt;p data-track=&quot;30&quot;&gt;①、使用javac命令，不会出现command not found错误&lt;/p&gt;&lt;p data-track=&quot;31&quot;&gt;②、使用java -version，出现版本为java version &amp;#34;17.0.2&amp;#34; 2022-01-18 LTS&lt;/p&gt;&lt;p data-track=&quot;32&quot;&gt;③、echo $PATH，看看自己刚刚设置的的环境变量配置是否都正确&lt;/p&gt;&lt;p data-track=&quot;33&quot;&gt;如图所示：&lt;/p&gt;&lt;p class=&quot;pgc-p syl-page-br&quot; data-track=&quot;34&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p data-track=&quot;35&quot;&gt;&lt;span style=&quot;color: #393939; --tt-darkmode-color: #A3A3A3;&quot;&gt;至此，安装结束&lt;/span&gt;&lt;/p&gt;</description><pubDate>Thu, 23 Oct 2025 07:44:45 +0800</pubDate></item><item><title>程序员:JDK的安装与配置(完整版)_jdk安装流程</title><link>http://maynowei.com/post/1005.html</link><description>&lt;p data-track=&quot;29&quot;&gt;对于Java程序员来说，jdk是必不陌生的一个词。但怎么安装配置jdk，对新手来说确实头疼的一件事情。&lt;/p&gt;&lt;p data-track=&quot;31&quot;&gt;我这里以jdk10为例，详细的说明讲解了jdk的安装和配置，如果有不明白的小伙伴可以评论区留言哦&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;1&quot;&gt;下载&lt;/h1&gt;&lt;p data-track=&quot;3&quot;&gt;想要安装某个东西，当然是先下载啦&lt;br class=&quot;sysbr&quot;&gt;&lt;span&gt;下载链接：&lt;br&gt;https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html&lt;/span&gt;&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;4&quot;&gt;安装&lt;/h1&gt;&lt;p data-track=&quot;5&quot;&gt;安装步骤一路回车即可。&lt;/p&gt;&lt;p data-track=&quot;6&quot;&gt;当然也可以修改默认的安装路径（如果修改的话，要记住地址哦）&lt;/p&gt;&lt;p data-track=&quot;8&quot;&gt;我的安装路径&lt;/p&gt;&lt;p class=&quot;pgc-p syl-page-br&quot; data-track=&quot;7&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;10&quot;&gt;配置&lt;/h1&gt;&lt;p data-track=&quot;11&quot;&gt;右键点击我的电脑-&amp;gt;点击属性，点击高级系统设置，然后点击环境变量，即可弹出下图右边的窗口。&lt;/p&gt;&lt;p data-track=&quot;12&quot;&gt;然后点击新建，然后添加变量名 JAVA_HOME 和变量值 D:\Program Files\Java\jdk-10.0.2&lt;/p&gt;&lt;p data-track=&quot;17&quot;&gt;然后再新建一个，添加变量名 JRE_HOME 和变量值 D:\Program Files\Java\jre-10.0.2&lt;/p&gt;&lt;p data-track=&quot;18&quot;&gt;如图所示，变量值要符合自己的安装路径&lt;/p&gt;&lt;p data-track=&quot;15&quot;&gt;最后，仍然新建：&lt;/p&gt;&lt;p data-track=&quot;19&quot;&gt;添加变量名CLASSPATH &lt;span style=&quot;color: #0000FF; --tt-darkmode-color: #005CFF;&quot;&gt;，&lt;/span&gt;&lt;/p&gt;&lt;p data-track=&quot;20&quot;&gt;变量值 .&lt;span style=&quot;color: #000000; --tt-darkmode-color: #A3A3A3;&quot;&gt;;%JAVA_HOME%\lib;%JRE_HOME%\lib&lt;/span&gt;&lt;/p&gt;&lt;p data-track=&quot;21&quot;&gt;（千万看清楚配置代码哦）&lt;/p&gt;&lt;p data-track=&quot;22&quot;&gt;最后的最后，找到path，点击进去，添加新值： %JAVA_HOME%\bin;%JRE_HOME%\bin;&lt;/p&gt;&lt;p data-track=&quot;25&quot;&gt;至此，就安装和配置完毕了。&lt;/p&gt;&lt;p class=&quot;pgc-p syl-page-br&quot; data-track=&quot;24&quot; style&gt;&lt;br&gt;&lt;/p&gt;&lt;p data-track=&quot;23&quot;&gt;怎么验证是否配置成功呢&lt;/p&gt;&lt;p data-track=&quot;27&quot;&gt;打开cmd命令窗口，输入： &lt;span style=&quot;color: #FF0000; --tt-darkmode-color: #FF0C00;&quot;&gt;java -version &lt;/span&gt;或 &lt;span style=&quot;color: #0000FF; --tt-darkmode-color: #005CFF;&quot;&gt;where java&lt;/span&gt;&lt;/p&gt;&lt;p data-track=&quot;28&quot;&gt;出现图示，即安装配置成功了，即可开始自己的Java之路了&lt;/p&gt;</description><pubDate>Thu, 23 Oct 2025 07:44:22 +0800</pubDate></item><item><title>干货|JDK下载安装与环境变量配置图文教程「超详细」</title><link>http://maynowei.com/post/1004.html</link><description>&lt;p&gt;&lt;strong&gt;1. JDK介绍&lt;/strong&gt;&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot;&gt;&lt;strong&gt;1.1 什么是JDK?&lt;/strong&gt;&lt;/h1&gt;&lt;p style=&quot;text-align: start&quot;&gt;SUN公司提供了一套Java开发环境，简称JDK(JavaDevelopmentKit)，它是整个Java的核心，其中包括Java编译器、Java运行工具、Java文档生成工具、Java打包工具等。&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;SUN公司除了提供JDK，还提供了一种JRE(JavaRuntimeEnvironment)工具，它是Java运行环境，是提供给普通用户使用的。由于用户只需要运行事先编写好的程序，不需要自己动手编写程序，因此JRE工具中只包含Java运行工具，不包含Java编译工具。&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;值得一提的是，为了方便使用，SUN公司在其JDK工具中自带了一个JRE工具，也就是说开发环境中包含运行环境，这样一来，开发人员只需要在计算机上安装JDK即可，不需要专门安装JRE工具了。&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot;&gt;&lt;strong&gt;1.2 JDK版本介绍&lt;/strong&gt;&lt;/h1&gt;&lt;p style=&quot;text-align: start&quot;&gt;SE(JavaSE)，standard edition，标准版，是我们通常用的一个版本，从JDK 5.0开始，改名为Java SE。&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;EE(JavaEE)，enterprise edition，企业版，使用这种JDK开发J2EE应用程序，从JDK 5.0开始，改名为Java EE。从2018年2月26日开始，J2EE改名为Jakarta EE [1-2]。&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;ME(J2ME)，micro edition，主要用于移动设备、嵌入式设备上的java应用程序，从JDK 5.0开始，改名为Java ME。&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;下面我们介绍，Windows7 和 Windows10下载安装JDK与JDK环境配置的方法。&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot;&gt;&lt;strong&gt;2. JDK下载与安装&lt;/strong&gt;&lt;/h1&gt;&lt;p&gt;&lt;span style=&quot;background-color: #F6F6F6; --tt-darkmode-bgcolor: #1B1B1B;&quot;&gt;JDK下载安装与环境变量配置图文教程【超详细】&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #999999; --tt-darkmode-color: #999999;&quot;&gt;黑马程序员的视频&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #999999; --tt-darkmode-color: #999999;&quot;&gt; · 3 播放&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;(1)官方下载JDK&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;打开JDK官网版本选择页面。我下载的版本是JDK8。&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;（2）选择合适的版本，点击后面相应的Download按钮，即可来到版本选择页面，官网提供了包括Linux、Windows、MacOS在内的多个系统，可以选择自己所需要的系统对应版本进行下载，我这里选择Windows 64位JDK版本，下载前需要注意要接受一下网站条款才可以下载，界面如下：&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;（3）登录账号之后下载(没有账号就注册一个)&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;注意如果下载过慢，可以尝试使用迅雷或者百度云盘下载。&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;（4）下载完成，双击运行 jdk-8u231-windows-x64.exe&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;（5）点击下一步，选择安装的组件，也可以按照自己的需要更改下路径，这里组件主要包含下面的开发工具、JRE以及一些源代码，其实对于开发人员来说，公共的JRE是不需要另外安装的，JDK内部已经包含了一个JRE，这里其实我取消了公共JRE的安装，你也可以自己选择。&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;组件界面如下：&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;（6）点击下一步，等待提示安装成功&lt;/p&gt;&lt;p style=&quot;text-align:start&quot; class=&quot;syl-page-br syl-page-br-hide&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;安装成功。&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;&lt;strong&gt;附加：JDK安装文件介绍&lt;/strong&gt;&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot;&gt;&lt;strong&gt;3、win7 和 win10环境变量配置&lt;/strong&gt;&lt;/h1&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot;&gt;&lt;strong&gt;3.1 win7 系统下jdk环境变量配置&lt;/strong&gt;&lt;/h1&gt;&lt;p style=&quot;text-align: start&quot;&gt;（1）计算机右键属性，高级系统设置，高级，环境变量;&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;（2）选择系统变量下的，新建；&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;（3）新建，添加变量名 JAVA_HOME ，变量值为之前自己jdk的安装路径C:\Program Files\Java\jdk1.8.0_231&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;（4）新建，添加变量名 CLASSPATH ，变量值为 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar（注意前面的有个点“.”不要漏掉）&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;&lt;br&gt;（5）找到系统变量里变量为Path的行，选中，并点击编辑，追加 ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 到变量值最后。&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;（6）设置完成，win+R，输入cmd，打开命令行输入 java -version，确定安装是否正确。&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot;&gt;&lt;strong&gt;3.2 win10系统 jak环境变量配置&lt;/strong&gt;&lt;/h1&gt;&lt;p style=&quot;text-align: start&quot;&gt;（1）右击“此电脑”，点击属性，找到高级系统设置。&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;&lt;br&gt;（2）新建，添加变量名 JAVA_HOME ，变量值为之前自己jdk的安装路径C:\Program Files\Java\jdk1.8.0_231&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;（3）找到系统变量里变量为Path的，选中，并点击编辑。&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;（4）点击新建按钮，添加新的变量值：&lt;br class=&quot;sysbr&quot;&gt;%JAVA_HOME%\bin&lt;br class=&quot;sysbr&quot;&gt;和&lt;br class=&quot;sysbr&quot;&gt;%JAVA_HOME%\jre\bin&lt;br class=&quot;sysbr&quot;&gt;两个变量。并且把这两个变量按照下图，点击上移，移动到顶部，如下图所示。&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;（5）在系统变量那里再新建一个CLASSPATH的变量，变量的值为：&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tool.jar&lt;/p&gt;&lt;p style=&quot;text-align: start&quot;&gt;（6）使用快捷键win+R，在弹出的运行命令窗口输入CMD回车运行，输出java，然后回车，看到如下图所示，表示环境变量安装成功。&lt;/p&gt;</description><pubDate>Thu, 23 Oct 2025 07:44:21 +0800</pubDate></item><item><title>这份Java面试八股文让329人成功进入大厂，堪称2021最强</title><link>http://maynowei.com/post/1003.html</link><description>&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;373&quot;&gt;前言&lt;/h1&gt;&lt;p data-track=&quot;372&quot;&gt;2021秋招即将来临，很多同学会问Java面试八股文有必要背吗？&lt;/p&gt;&lt;p data-track=&quot;366&quot;&gt;我的回答是：&lt;strong&gt;很有必要&lt;/strong&gt;。你可以讨厌这种模式，但你一定要去背，因为不背你就进不了大厂。&lt;/p&gt;&lt;p data-track=&quot;367&quot;&gt;国内的互联网面试，恐怕是现存的、最接近科举考试的制度。&lt;/p&gt;&lt;p data-track=&quot;368&quot;&gt;而且，我国的八股文确实是独树一帜。以美国为例，北美工程师面试比较重视&lt;strong&gt;算法&lt;/strong&gt;（Coding），近几年也会加入&lt;strong&gt;Design轮&lt;/strong&gt;（系统设计和面向对象设计OOD）和&lt;strong&gt;BQ轮&lt;/strong&gt;（Behavioral question，行为面试问题）。&lt;/p&gt;&lt;p data-track=&quot;369&quot;&gt;那么为什么国内面试不采取这样的考察方式呢？&lt;strong&gt;&lt;span style=&quot;color: #F04142; --tt-darkmode-color: #F04142;&quot;&gt;简单来说，互联网IT行业的求职者太多了，如果考察的是清一溜的算法题和设计题，那么会要求面试官有极高的技术水平，还要花大量的时间成本和精力。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p data-track=&quot;370&quot;&gt;也许现行的八股文面试不是最优的解法，但的确是最符合当前国内IT环境的做法。&lt;/p&gt;&lt;p data-track=&quot;374&quot;&gt;所以，我采访了超过20位资深大厂面试官后，一直在尽量精炼准确的整理一套切实可行的八股文，现在已经有329位粉丝通过这套题走入了理想的岗位，所以分享出来给大伙看看，有什么不足之处欢迎评论补充。&lt;/p&gt;&lt;p data-track=&quot;375&quot;&gt;篇幅所限本文就只贴一下题目了，同学们可以自己先看看有哪些题是会的，答案的话我整理的一本&lt;strong&gt;&lt;span style=&quot;color: #F04142; --tt-darkmode-color: #F04142;&quot;&gt;《Java面试八股文》&lt;/span&gt;&lt;/strong&gt;PDF里都有，获取的方法在文末了哦！&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;2&quot;&gt;一、Java基础 44 道&lt;/h1&gt;&lt;p data-track=&quot;3&quot;&gt;1. 解释下什么是面向对象？面向对象和面向过程的区别？&lt;/p&gt;&lt;p data-track=&quot;4&quot;&gt;2. 面向对象的三大特性？分别解释下？&lt;/p&gt;&lt;p data-track=&quot;5&quot;&gt;3. JDK、JRE、JVM 三者之间的关系？&lt;/p&gt;&lt;p data-track=&quot;6&quot;&gt;4. 重载和重写的区别？&lt;/p&gt;&lt;p data-track=&quot;7&quot;&gt;5. Java 中是否可以重写一个 private 或者 static 方法？&lt;/p&gt;&lt;p data-track=&quot;8&quot;&gt;6. 构造方法有哪些特性？&lt;/p&gt;&lt;p data-track=&quot;9&quot;&gt;7. 在 Java 中定义一个不做事且没有参数的构造方法有什么作用？&lt;/p&gt;&lt;p data-track=&quot;10&quot;&gt;8. Java 中创建对象的几种方式？&lt;/p&gt;&lt;p data-track=&quot;11&quot;&gt;9. 抽象类和接口有什么区别？&lt;/p&gt;&lt;p data-track=&quot;12&quot;&gt;10. 静态变量和实例变量的区别？&lt;/p&gt;&lt;p data-track=&quot;13&quot;&gt;11. 12、short s1 = 1；s1 = s1 + 1；有什么错？那么 short s1 = 1; s1 += 1；呢？有没有错误？&lt;/p&gt;&lt;p data-track=&quot;14&quot;&gt;12. Integer 和 int 的区别？&lt;/p&gt;&lt;p data-track=&quot;15&quot;&gt;13. 装箱和拆箱的区别&lt;/p&gt;&lt;p data-track=&quot;16&quot;&gt;14. switch 语句能否作用在 byte 上，能否作用在 long 上，能否作用在 String 上？&lt;/p&gt;&lt;p data-track=&quot;17&quot;&gt;15. 16、final、finally、finalize 的区别&lt;/p&gt;&lt;p data-track=&quot;18&quot;&gt;16. == 和 equals 的区别？&lt;/p&gt;&lt;p data-track=&quot;19&quot;&gt;17. 两个对象的 hashCode() 相同，则 equals() 也一定为 true 吗？&lt;/p&gt;&lt;p data-track=&quot;20&quot;&gt;18. 为什么重写 equals() 就一定要重写 hashCode() 方法？&lt;/p&gt;&lt;p data-track=&quot;21&quot;&gt;19. &amp; 和 &amp;&amp; 的区别？&lt;/p&gt;&lt;p data-track=&quot;22&quot;&gt;20. Java 中的参数传递时传值呢？还是传引用？&lt;/p&gt;&lt;p data-track=&quot;23&quot;&gt;21. Java 中的 Math.round(-1.5) 等于多少？&lt;/p&gt;&lt;p data-track=&quot;24&quot;&gt;22. 如何实现对象的克隆？&lt;/p&gt;&lt;p data-track=&quot;25&quot;&gt;23. 深克隆和浅克隆的区别？&lt;/p&gt;&lt;p data-track=&quot;26&quot;&gt;24. 什么是 Java 的序列化，如何实现 Java 的序列化？&lt;/p&gt;&lt;p data-track=&quot;27&quot;&gt;25. 什么情况下需要序列化？&lt;/p&gt;&lt;p data-track=&quot;28&quot;&gt;26. Java 的泛型是如何工作的 ? 什么是类型擦除 ?&lt;/p&gt;&lt;p data-track=&quot;29&quot;&gt;27. 什么是泛型中的限定通配符和非限定通配符 ?&lt;/p&gt;&lt;p data-track=&quot;30&quot;&gt;28. List 和 List 之间有什么区别 ?&lt;/p&gt;&lt;p data-track=&quot;31&quot;&gt;29. Java 中的反射是什么意思？有哪些应用场景？&lt;/p&gt;&lt;p data-track=&quot;32&quot;&gt;30. 反射的优缺点？&lt;/p&gt;&lt;p data-track=&quot;33&quot;&gt;31. Java 中的动态代理是什么？有哪些应用？&lt;/p&gt;&lt;p data-track=&quot;34&quot;&gt;32. 怎么实现动态代理？&lt;/p&gt;&lt;p data-track=&quot;35&quot;&gt;33. static 关键字的作用？&lt;/p&gt;&lt;p data-track=&quot;36&quot;&gt;34. super 关键字的作用？&lt;/p&gt;&lt;p data-track=&quot;37&quot;&gt;35. 字节和字符的区别？&lt;/p&gt;&lt;p data-track=&quot;38&quot;&gt;36. String 为什么要设计为不可变类？&lt;/p&gt;&lt;p data-track=&quot;39&quot;&gt;37. String、StringBuilder、StringBuffer 的区别？&lt;/p&gt;&lt;p data-track=&quot;40&quot;&gt;38. String 字符串修改实现的原理？&lt;/p&gt;&lt;p data-track=&quot;41&quot;&gt;39. String str = &amp;#34;i&amp;#34; 与 String str = new String(&amp;#34;i&amp;#34;) 一样吗？&lt;/p&gt;&lt;p data-track=&quot;42&quot;&gt;40. String 类的常用方法都有那些？&lt;/p&gt;&lt;p data-track=&quot;43&quot;&gt;41. final 修饰 StringBuffer 后还可以 append 吗？&lt;/p&gt;&lt;p data-track=&quot;44&quot;&gt;42. Java 中的 IO 流的分类？说出几个你熟悉的实现类？&lt;/p&gt;&lt;p data-track=&quot;45&quot;&gt;43. 字节流和字符流有什么区别？&lt;/p&gt;&lt;p data-track=&quot;46&quot;&gt;44. BIO、NIO、AIO 有什么区别？&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;47&quot;&gt;二、Java异常 9 道&lt;/h1&gt;&lt;p data-track=&quot;48&quot;&gt;1. finally 块中的代码什么时候被执行？&lt;/p&gt;&lt;p data-track=&quot;49&quot;&gt;2. finally 是不是一定会被执行到？&lt;/p&gt;&lt;p data-track=&quot;50&quot;&gt;3. try-catch-finally 中，如果 catch 中 return 了，finally 还会执行吗？&lt;/p&gt;&lt;p data-track=&quot;51&quot;&gt;4. try-catch-finally 中那个部分可以省略？&lt;/p&gt;&lt;p data-track=&quot;52&quot;&gt;5. Error 和 Exception 的区别？&lt;/p&gt;&lt;p data-track=&quot;53&quot;&gt;6. 运行时异常与受检异常有何异同？&lt;/p&gt;&lt;p data-track=&quot;54&quot;&gt;7. throw 和 throws 的区别？&lt;/p&gt;&lt;p data-track=&quot;55&quot;&gt;8. 常见的异常类有哪些？&lt;/p&gt;&lt;p data-track=&quot;56&quot;&gt;9. 主线程可以捕获到子线程的异常吗？&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;59&quot;&gt;三、Java集合 24 道&lt;/h1&gt;&lt;p data-track=&quot;60&quot;&gt;1. Java 中常用的容器有哪些？&lt;/p&gt;&lt;p data-track=&quot;61&quot;&gt;2. ArrayList 和 LinkedList 的区别？&lt;/p&gt;&lt;p data-track=&quot;62&quot;&gt;3. ArrayList 实现 RandomAccess 接口有何作用？为何 LinkedList 却没实现这个接口？&lt;/p&gt;&lt;p data-track=&quot;63&quot;&gt;4. ArrayList 的扩容机制？&lt;/p&gt;&lt;p data-track=&quot;64&quot;&gt;5. Array 和 ArrayList 有何区别？什么时候更适合用 Array？&lt;/p&gt;&lt;p data-track=&quot;65&quot;&gt;6. HashMap 的实现原理/底层数据结构？JDK1.7 和 JDK1.8&lt;/p&gt;&lt;p data-track=&quot;66&quot;&gt;7. HashMap 的 put 方法的执行过程？&lt;/p&gt;&lt;p data-track=&quot;67&quot;&gt;8. HashMap 的 get 方法的执行过程？&lt;/p&gt;&lt;p data-track=&quot;68&quot;&gt;9. HashMap 的 resize 方法的执行过程？&lt;/p&gt;&lt;p data-track=&quot;69&quot;&gt;10. HashMap 的 size 为什么必须是 2 的整数次方？&lt;/p&gt;&lt;p data-track=&quot;70&quot;&gt;11. HashMap 多线程死循环问题？&lt;/p&gt;&lt;p data-track=&quot;71&quot;&gt;12. HashMap 的 get 方法能否判断某个元素是否在 map 中？&lt;/p&gt;&lt;p data-track=&quot;72&quot;&gt;13. HashMap 与 HashTable 的区别是什么？&lt;/p&gt;&lt;p data-track=&quot;73&quot;&gt;14. HashMap 与 ConcurrentHashMap 的区别是什么?&lt;/p&gt;&lt;p data-track=&quot;74&quot;&gt;15. HashTable 和 ConcurrentHashMap 的区别？&lt;/p&gt;&lt;p data-track=&quot;75&quot;&gt;16. ConcurrentHashMap 的实现原理是什么？&lt;/p&gt;&lt;p data-track=&quot;76&quot;&gt;17. HashSet 的实现原理？&lt;/p&gt;&lt;p data-track=&quot;77&quot;&gt;18. HashSet 怎么保证元素不重复的？&lt;/p&gt;&lt;p data-track=&quot;78&quot;&gt;19. LinkedHashMap 的实现原理?&lt;/p&gt;&lt;p data-track=&quot;79&quot;&gt;20. Iterator 怎么使用？有什么特点？&lt;/p&gt;&lt;p data-track=&quot;80&quot;&gt;21. Iterator 和 ListIterator 有什么区别？&lt;/p&gt;&lt;p data-track=&quot;81&quot;&gt;22. Iterator 和 Enumeration 接口的区别？&lt;/p&gt;&lt;p data-track=&quot;82&quot;&gt;23. fail-fast 与 fail-safe 有什么区别？&lt;/p&gt;&lt;p data-track=&quot;83&quot;&gt;24. Collection 和 Collections 有什么区别？&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;84&quot;&gt;四、Java并发 42 道&lt;/h1&gt;&lt;p data-track=&quot;85&quot;&gt;1. 并行和并发有什么区别？&lt;/p&gt;&lt;p data-track=&quot;86&quot;&gt;2. 线程和进程的区别？&lt;/p&gt;&lt;p data-track=&quot;87&quot;&gt;3. 守护线程是什么？&lt;/p&gt;&lt;p data-track=&quot;88&quot;&gt;4. 创建线程的几种方式？&lt;/p&gt;&lt;p data-track=&quot;89&quot;&gt;5. Runnable 和 Callable 有什么区别？&lt;/p&gt;&lt;p data-track=&quot;90&quot;&gt;6. 线程状态及转换？&lt;/p&gt;&lt;p data-track=&quot;91&quot;&gt;7. sleep() 和 wait() 的区别？&lt;/p&gt;&lt;p data-track=&quot;92&quot;&gt;8. 线程的 run() 和 start() 有什么区别？&lt;/p&gt;&lt;p data-track=&quot;93&quot;&gt;9. 在 Java 程序中怎么保证多线程的运行安全？&lt;/p&gt;&lt;p data-track=&quot;94&quot;&gt;10. Java 线程同步的几种方法？&lt;/p&gt;&lt;p data-track=&quot;95&quot;&gt;11. Thread.interrupt() 方法的工作原理是什么？&lt;/p&gt;&lt;p data-track=&quot;96&quot;&gt;12. 谈谈对 ThreadLocal 的理解？&lt;/p&gt;&lt;p data-track=&quot;97&quot;&gt;13. 在哪些场景下会使用到 ThreadLocal？&lt;/p&gt;&lt;p data-track=&quot;98&quot;&gt;14. 说一说自己对于 synchronized 关键字的了解？&lt;/p&gt;&lt;p data-track=&quot;99&quot;&gt;15. 如何在项目中使用 synchronized 的？&lt;/p&gt;&lt;p data-track=&quot;100&quot;&gt;16. 说说 JDK1.6 之后的 synchronized 关键字底层做了哪些优化，可以详细介绍一下这些优化吗？&lt;/p&gt;&lt;p data-track=&quot;101&quot;&gt;17. 谈谈 synchronized 和 ReenTrantLock 的区别？&lt;/p&gt;&lt;p data-track=&quot;102&quot;&gt;18. synchronized 和 volatile 的区别是什么？&lt;/p&gt;&lt;p data-track=&quot;103&quot;&gt;19. 谈一下你对 volatile 关键字的理解？&lt;/p&gt;&lt;p data-track=&quot;104&quot;&gt;20. 说下对 ReentrantReadWriteLock 的理解？&lt;/p&gt;&lt;p data-track=&quot;105&quot;&gt;21. 说下对悲观锁和乐观锁的理解？&lt;/p&gt;&lt;p data-track=&quot;106&quot;&gt;22. 乐观锁常见的两种实现方式是什么？&lt;/p&gt;&lt;p data-track=&quot;107&quot;&gt;23. 乐观锁的缺点有哪些？&lt;/p&gt;&lt;p data-track=&quot;108&quot;&gt;24. CAS 和 synchronized 的使用场景？&lt;/p&gt;&lt;p data-track=&quot;109&quot;&gt;25. 简单说下对 Java 中的原子类的理解？&lt;/p&gt;&lt;p data-track=&quot;110&quot;&gt;26. atomic 的原理是什么？&lt;/p&gt;&lt;p data-track=&quot;111&quot;&gt;27. 说下对同步器 AQS 的理解？&lt;/p&gt;&lt;p data-track=&quot;112&quot;&gt;28. AQS 的原理是什么？&lt;/p&gt;&lt;p data-track=&quot;113&quot;&gt;29. AQS 对资源的共享模式有哪些？&lt;/p&gt;&lt;p data-track=&quot;114&quot;&gt;30. AQS 底层使用了模板方法模式，你能说出几个需要重写的方法吗？&lt;/p&gt;&lt;p data-track=&quot;115&quot;&gt;31. 说下对信号量 Semaphore 的理解？&lt;/p&gt;&lt;p data-track=&quot;116&quot;&gt;32. CountDownLatch 和 CyclicBarrier 有什么区别？&lt;/p&gt;&lt;p data-track=&quot;117&quot;&gt;33. 说下对线程池的理解？为什么要使用线程池？&lt;/p&gt;&lt;p data-track=&quot;118&quot;&gt;34. 创建线程池的参数有哪些？&lt;/p&gt;&lt;p data-track=&quot;119&quot;&gt;35. 如何创建线程池？&lt;/p&gt;&lt;p data-track=&quot;120&quot;&gt;36. 线程池中的的线程数一般怎么设置？需要考虑哪些问题？&lt;/p&gt;&lt;p data-track=&quot;121&quot;&gt;37. 执行 execute() 方法和 submit() 方法的区别是什么呢？&lt;/p&gt;&lt;p data-track=&quot;122&quot;&gt;38. 说下对 Fork和Join 并行计算框架的理解？&lt;/p&gt;&lt;p data-track=&quot;123&quot;&gt;39. JDK 中提供了哪些并发容器？&lt;/p&gt;&lt;p data-track=&quot;124&quot;&gt;40. 谈谈对 CopyOnWriteArrayList 的理解？&lt;/p&gt;&lt;p data-track=&quot;125&quot;&gt;41. 谈谈对 BlockingQueue 的理解？分别有哪些实现类？&lt;/p&gt;&lt;p data-track=&quot;126&quot;&gt;42. 谈谈对 ConcurrentSkipListMap 的理解？&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;129&quot;&gt;五、Java JVM 42 道&lt;/h1&gt;&lt;p data-track=&quot;130&quot;&gt;1. 说一下 Jvm 的主要组成部分？及其作用？&lt;/p&gt;&lt;p data-track=&quot;131&quot;&gt;2. 谈谈对运行时数据区的理解？&lt;/p&gt;&lt;p data-track=&quot;132&quot;&gt;3. 堆和栈的区别是什么？&lt;/p&gt;&lt;p data-track=&quot;133&quot;&gt;4. 堆中存什么？栈中存什么？&lt;/p&gt;&lt;p data-track=&quot;134&quot;&gt;5. 为什么要把堆和栈区分出来呢？栈中不是也可以存储数据吗？&lt;/p&gt;&lt;p data-track=&quot;135&quot;&gt;6. Java 中的参数传递时传值呢？还是传引用？&lt;/p&gt;&lt;p data-track=&quot;136&quot;&gt;7. Java 对象的大小是怎么计算的？&lt;/p&gt;&lt;p data-track=&quot;137&quot;&gt;8. 对象的访问定位的两种方式？&lt;/p&gt;&lt;p data-track=&quot;138&quot;&gt;9. 判断垃圾可以回收的方法有哪些？&lt;/p&gt;&lt;p data-track=&quot;139&quot;&gt;10. 垃圾回收是从哪里开始的呢？&lt;/p&gt;&lt;p data-track=&quot;140&quot;&gt;11. 被标记为垃圾的对象一定会被回收吗？&lt;/p&gt;&lt;p data-track=&quot;141&quot;&gt;12. 谈谈对 Java 中引用的了解？&lt;/p&gt;&lt;p data-track=&quot;142&quot;&gt;13. 谈谈对内存泄漏的理解？&lt;/p&gt;&lt;p data-track=&quot;143&quot;&gt;14. 内存泄露的根本原因是什么？&lt;/p&gt;&lt;p data-track=&quot;144&quot;&gt;15. 举几个可能发生内存泄漏的情况？&lt;/p&gt;&lt;p data-track=&quot;145&quot;&gt;16. 尽量避免内存泄漏的方法？&lt;/p&gt;&lt;p data-track=&quot;146&quot;&gt;17. 常用的垃圾收集算法有哪些？&lt;/p&gt;&lt;p data-track=&quot;147&quot;&gt;18. 为什么要采用分代收集算法？&lt;/p&gt;&lt;p data-track=&quot;148&quot;&gt;19. 分代收集下的年轻代和老年代应该采用什么样的垃圾回收算法？&lt;/p&gt;&lt;p data-track=&quot;149&quot;&gt;20. 什么是浮动垃圾？&lt;/p&gt;&lt;p data-track=&quot;150&quot;&gt;21. 什么是内存碎片？如何解决？&lt;/p&gt;&lt;p data-track=&quot;151&quot;&gt;22. 常用的垃圾收集器有哪些？&lt;/p&gt;&lt;p data-track=&quot;152&quot;&gt;23. 谈谈你对 CMS 垃圾收集器的理解？&lt;/p&gt;&lt;p data-track=&quot;153&quot;&gt;24. 谈谈你对 G1 收集器的理解？&lt;/p&gt;&lt;p data-track=&quot;154&quot;&gt;25. 说下你对垃圾回收策略的理解/垃圾回收时机？&lt;/p&gt;&lt;p data-track=&quot;155&quot;&gt;26. 谈谈你对内存分配的理解？大对象怎么分配？空间分配担保？&lt;/p&gt;&lt;p data-track=&quot;156&quot;&gt;27. 说下你用过的 JVM 监控工具？&lt;/p&gt;&lt;p data-track=&quot;157&quot;&gt;28. 如何利用监控工具调优？&lt;/p&gt;&lt;p data-track=&quot;158&quot;&gt;29. JVM 的一些参数？&lt;/p&gt;&lt;p data-track=&quot;159&quot;&gt;30. 谈谈你对类文件结构的理解？有哪些部分组成？&lt;/p&gt;&lt;p data-track=&quot;160&quot;&gt;31. 谈谈你对类加载机制的了解？&lt;/p&gt;&lt;p data-track=&quot;161&quot;&gt;32. 类加载各阶段的作用分别是什么？&lt;/p&gt;&lt;p data-track=&quot;162&quot;&gt;33. 有哪些类加载器？分别有什么作用？&lt;/p&gt;&lt;p data-track=&quot;163&quot;&gt;34. 类与类加载器的关系?&lt;/p&gt;&lt;p data-track=&quot;164&quot;&gt;35. 谈谈你对双亲委派模型的理解？工作过程？为什么要使用&lt;/p&gt;&lt;p data-track=&quot;165&quot;&gt;36. 怎么实现一个自定义的类加载器？需要注意什么？&lt;/p&gt;&lt;p data-track=&quot;166&quot;&gt;37. 怎么打破双亲委派模型？&lt;/p&gt;&lt;p data-track=&quot;167&quot;&gt;38. 有哪些实际场景是需要打破双亲委派模型的？&lt;/p&gt;&lt;p data-track=&quot;168&quot;&gt;39. 谈谈你对编译期优化和运行期优化的理解？&lt;/p&gt;&lt;p data-track=&quot;169&quot;&gt;40. 为何 HotSpot 虚拟机要使用解释器与编译器并存的架构？&lt;/p&gt;&lt;p data-track=&quot;170&quot;&gt;41. 说下你对 Java 内存模型的理解？&lt;/p&gt;&lt;p data-track=&quot;171&quot;&gt;42. 内存间的交互操作有哪些？需要满足什么规则？&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;172&quot;&gt;六、SSM框架 37 道&lt;/h1&gt;&lt;p data-track=&quot;173&quot;&gt;1. 使用 Spring 框架的好处是什么？&lt;/p&gt;&lt;p data-track=&quot;174&quot;&gt;2. 解释下什么是 AOP？&lt;/p&gt;&lt;p data-track=&quot;175&quot;&gt;3. AOP 的代理有哪几种方式？&lt;/p&gt;&lt;p data-track=&quot;176&quot;&gt;4. 怎么实现 JDK 动态代理？&lt;/p&gt;&lt;p data-track=&quot;177&quot;&gt;5. AOP 的基本概念：切面、连接点、切入点等？&lt;/p&gt;&lt;p data-track=&quot;178&quot;&gt;6. 通知类型（Advice）型（Advice）有哪些？&lt;/p&gt;&lt;p data-track=&quot;179&quot;&gt;7. 谈谈你对 IOC 的理解？&lt;/p&gt;&lt;p data-track=&quot;180&quot;&gt;8. Bean 的生命周期？&lt;/p&gt;&lt;p data-track=&quot;181&quot;&gt;9. Bean 的作用域?&lt;/p&gt;&lt;p data-track=&quot;182&quot;&gt;10. Spring 中的单例 Bean 的线程安全问题了解吗？&lt;/p&gt;&lt;p data-track=&quot;183&quot;&gt;11. 谈谈你对 Spring 中的事物的理解？&lt;/p&gt;&lt;p data-track=&quot;184&quot;&gt;12. Spring 中的事务隔离级别？&lt;/p&gt;&lt;p data-track=&quot;185&quot;&gt;13. Spring 中的事物传播行为？&lt;/p&gt;&lt;p data-track=&quot;186&quot;&gt;14. Spring 常用的注入方式有哪些？&lt;/p&gt;&lt;p data-track=&quot;187&quot;&gt;15. Spring 框架中用到了哪些设计模式？&lt;/p&gt;&lt;p data-track=&quot;188&quot;&gt;16. ApplicationContext 通常的实现有哪些?&lt;/p&gt;&lt;p data-track=&quot;189&quot;&gt;17. 谈谈你对 MVC 模式的理解？&lt;/p&gt;&lt;p data-track=&quot;190&quot;&gt;18. SpringMVC 的工作原理/执行流程？&lt;/p&gt;&lt;p data-track=&quot;191&quot;&gt;19. SpringMVC 的核心组件有哪些？&lt;/p&gt;&lt;p data-track=&quot;192&quot;&gt;20. SpringMVC 常用的注解有哪些？&lt;/p&gt;&lt;p data-track=&quot;193&quot;&gt;21. @RequestMapping 的作用是什么？&lt;/p&gt;&lt;p data-track=&quot;194&quot;&gt;22. 如何解决 POST 请求中文乱码问题，GET 的又如何处理呢？&lt;/p&gt;&lt;p data-track=&quot;195&quot;&gt;23. SpringMVC 的控制器是不是单例模式，如果是会有什么问题，怎么解决？&lt;/p&gt;&lt;p data-track=&quot;196&quot;&gt;24. SpringMVC 怎么样设定重定向和转发的？&lt;/p&gt;&lt;p data-track=&quot;197&quot;&gt;25. SpringMVC 里面拦截器是怎么写的？&lt;/p&gt;&lt;p data-track=&quot;198&quot;&gt;26. SpringMVC 和 Struts2 的区别有哪些?&lt;/p&gt;&lt;p data-track=&quot;199&quot;&gt;27. 谈谈你对 MyBatis 的理解？&lt;/p&gt;&lt;p data-track=&quot;200&quot;&gt;28. MyBaits 的优缺点有哪些？&lt;/p&gt;&lt;p data-track=&quot;201&quot;&gt;29. MyBatis 与 Hibernate 有哪些不同？&lt;/p&gt;&lt;p data-track=&quot;202&quot;&gt;30. MyBatis 中 #{} 和 ${}的区别是什么？&lt;/p&gt;&lt;p data-track=&quot;203&quot;&gt;31. MyBatis 是如何进行分页的？分页插件的原理是什么？&lt;/p&gt;&lt;p data-track=&quot;204&quot;&gt;32. MyBatis 有几种分页方式？&lt;/p&gt;&lt;p data-track=&quot;205&quot;&gt;33. MyBatis 逻辑分页和物理分页的区别是什么？&lt;/p&gt;&lt;p data-track=&quot;206&quot;&gt;34. MyBatis 是否支持延迟加载？如果支持，它的实现原理是什么？&lt;/p&gt;&lt;p data-track=&quot;207&quot;&gt;35. 说一下 MyBatis 的一级缓存和二级缓存？&lt;/p&gt;&lt;p data-track=&quot;208&quot;&gt;36. Mybatis 有哪些执行器（Executor）？&lt;/p&gt;&lt;p data-track=&quot;209&quot;&gt;37. MyBatis 动态 SQL 是做什么的？都有哪些动态 SQL？能简述一下动态 SQL的执行原理不？&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;210&quot;&gt;七、MySQL 31 道&lt;/h1&gt;&lt;p data-track=&quot;211&quot;&gt;1. 请说下你对 MySQL 架构的了解？&lt;/p&gt;&lt;p data-track=&quot;212&quot;&gt;2. 一条 SQL 语句在数据库框架中的执行流程？&lt;/p&gt;&lt;p data-track=&quot;213&quot;&gt;3. 数据库的三范式是什么？&lt;/p&gt;&lt;p data-track=&quot;214&quot;&gt;4. char 和 varchar 的区别？&lt;/p&gt;&lt;p data-track=&quot;215&quot;&gt;5. varchar(10) 和 varchar(20) 的区别？&lt;/p&gt;&lt;p data-track=&quot;216&quot;&gt;6. 谈谈你对索引的理解？&lt;/p&gt;&lt;p data-track=&quot;217&quot;&gt;7. 索引的底层使用的是什么数据结构？&lt;/p&gt;&lt;p data-track=&quot;218&quot;&gt;8. 谈谈你对 B+ 树的理解？&lt;/p&gt;&lt;p data-track=&quot;219&quot;&gt;9. 为什么 InnoDB 存储引擎选用 B+ 树而不是 B 树呢？&lt;/p&gt;&lt;p data-track=&quot;220&quot;&gt;10. 谈谈你对聚簇索引的理解？&lt;/p&gt;&lt;p data-track=&quot;221&quot;&gt;11. 谈谈你对哈希索引的理解？&lt;/p&gt;&lt;p data-track=&quot;222&quot;&gt;12. 谈谈你对覆盖索引的认识？&lt;/p&gt;&lt;p data-track=&quot;223&quot;&gt;13. 索引的分类？&lt;/p&gt;&lt;p data-track=&quot;224&quot;&gt;14. 谈谈你对最左前缀原则的理解？&lt;/p&gt;&lt;p data-track=&quot;225&quot;&gt;15. 怎么知道创建的索引有没有被使用到？或者说怎么才可以知道这条语句运行很慢的原因?&lt;/p&gt;&lt;p data-track=&quot;226&quot;&gt;16. 什么情况下索引会失效？即查询不走索引？&lt;/p&gt;&lt;p data-track=&quot;227&quot;&gt;17. 查询性能的优化方法？&lt;/p&gt;&lt;p data-track=&quot;228&quot;&gt;18. InnoDB 和 MyISAM 的比较？&lt;/p&gt;&lt;p data-track=&quot;229&quot;&gt;19. 谈谈你对水平切分和垂直切分的理解？&lt;/p&gt;&lt;p data-track=&quot;230&quot;&gt;20. 主从复制中涉及到哪三个线程？&lt;/p&gt;&lt;p data-track=&quot;231&quot;&gt;21. 主从同步的延迟原因及解决办法？&lt;/p&gt;&lt;p data-track=&quot;232&quot;&gt;22. 谈谈你对数据库读写分离的理解？&lt;/p&gt;&lt;p data-track=&quot;233&quot;&gt;23. 请你描述下事务的特性？&lt;/p&gt;&lt;p data-track=&quot;234&quot;&gt;24. 谈谈你对事务隔离级别的理解？&lt;/p&gt;&lt;p data-track=&quot;235&quot;&gt;25. 解释下什么叫脏读、不可重复读和幻读？&lt;/p&gt;&lt;p data-track=&quot;236&quot;&gt;26. MySQL 默认的隔离级别是什么？&lt;/p&gt;&lt;p data-track=&quot;237&quot;&gt;27. 谈谈你对MVCC 的了解？&lt;/p&gt;&lt;p data-track=&quot;238&quot;&gt;28. 说一下 MySQL 的行锁和表锁？&lt;/p&gt;&lt;p data-track=&quot;239&quot;&gt;29. InnoDB 存储引擎的锁的算法有哪些？&lt;/p&gt;&lt;p data-track=&quot;240&quot;&gt;30. MySQL 问题排查都有哪些手段？&lt;/p&gt;&lt;p data-track=&quot;241&quot;&gt;31. MySQL 数据库 CPU 飙升到 500% 的话他怎么处理？&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;244&quot;&gt;八、Redis 12 道&lt;/h1&gt;&lt;p data-track=&quot;245&quot;&gt;1. 谈下你对 Redis 的了解？&lt;/p&gt;&lt;p data-track=&quot;246&quot;&gt;2. Redis 一般都有哪些使用场景？&lt;/p&gt;&lt;p data-track=&quot;247&quot;&gt;3. Redis 有哪些常见的功能？&lt;/p&gt;&lt;p data-track=&quot;248&quot;&gt;4. Redis 支持的数据类型有哪些？&lt;/p&gt;&lt;p data-track=&quot;249&quot;&gt;5. Redis 为什么这么快？&lt;/p&gt;&lt;p data-track=&quot;250&quot;&gt;6. 什么是缓存穿透？怎么解决？&lt;/p&gt;&lt;p data-track=&quot;251&quot;&gt;7. 什么是缓存雪崩？该如何解决？&lt;/p&gt;&lt;p data-track=&quot;252&quot;&gt;8. 怎么保证缓存和数据库数据的一致性？&lt;/p&gt;&lt;p data-track=&quot;253&quot;&gt;9. Redis 持久化有几种方式？&lt;/p&gt;&lt;p data-track=&quot;254&quot;&gt;10. Redis 怎么实现分布式锁？&lt;/p&gt;&lt;p data-track=&quot;255&quot;&gt;11. Redis 淘汰策略有哪些？&lt;/p&gt;&lt;p data-track=&quot;256&quot;&gt;12. Redis 常见性能问题和解决方案？&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;257&quot;&gt;九、计算机网络 45 道&lt;/h1&gt;&lt;p data-track=&quot;258&quot;&gt;1. 为什么需要三次握手？两次不行？&lt;/p&gt;&lt;p data-track=&quot;259&quot;&gt;2. 为什么需要四次挥手？三次不行？&lt;/p&gt;&lt;p data-track=&quot;260&quot;&gt;3. TCP与UDP有哪些区别？各自应用场景？&lt;/p&gt;&lt;p data-track=&quot;261&quot;&gt;4. HTTP1.0，1.1，2.0 的版本区别&lt;/p&gt;&lt;p data-track=&quot;262&quot;&gt;5. POST和GET有哪些区别？各自应用场景？&lt;/p&gt;&lt;p data-track=&quot;263&quot;&gt;6. HTTP 哪些常用的状态码及使用场景？&lt;/p&gt;&lt;p data-track=&quot;264&quot;&gt;7. HTTP状态码301和302的区别，都有哪些用途？&lt;/p&gt;&lt;p data-track=&quot;265&quot;&gt;8. 在交互过程中如果数据传送完了，还不想断开连接怎么办，怎么维持？&lt;/p&gt;&lt;p data-track=&quot;266&quot;&gt;9. HTTP 如何实现长连接？在什么时候会超时？&lt;/p&gt;&lt;p data-track=&quot;267&quot;&gt;10. TCP 如何保证有效传输及拥塞控制原理&lt;/p&gt;&lt;p data-track=&quot;268&quot;&gt;11. IP地址有哪些分类？&lt;/p&gt;&lt;p data-track=&quot;269&quot;&gt;12. GET请求中URL编码的意义&lt;/p&gt;&lt;p data-track=&quot;270&quot;&gt;13. 什么是SQL 注入？举个例子？&lt;/p&gt;&lt;p data-track=&quot;271&quot;&gt;14. 谈一谈 XSS 攻击，举个例子？&lt;/p&gt;&lt;p data-track=&quot;272&quot;&gt;15. 讲一下网络五层模型，每一层的职责？&lt;/p&gt;&lt;p data-track=&quot;273&quot;&gt;16. 简单说下 HTTPS 和 HTTP 的区别&lt;/p&gt;&lt;p data-track=&quot;274&quot;&gt;17. 对称加密与非对称加密的区别&lt;/p&gt;&lt;p data-track=&quot;275&quot;&gt;18. 简单说下每一层对应的网络协议有哪些？&lt;/p&gt;&lt;p data-track=&quot;276&quot;&gt;19. ARP 协议的工作原理？&lt;/p&gt;&lt;p data-track=&quot;277&quot;&gt;20. TCP 的主要特点是什么？&lt;/p&gt;&lt;p data-track=&quot;278&quot;&gt;21. UDP 的主要特点是什么？&lt;/p&gt;&lt;p data-track=&quot;279&quot;&gt;22. TCP 和 UDP 分别对应的常见应用层协议有哪些？&lt;/p&gt;&lt;p data-track=&quot;280&quot;&gt;23. 为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢？&lt;/p&gt;&lt;p data-track=&quot;281&quot;&gt;24. 保活计时器的作用？&lt;/p&gt;&lt;p data-track=&quot;282&quot;&gt;25. TCP 协议是如何保证可靠传输的？&lt;/p&gt;&lt;p data-track=&quot;283&quot;&gt;26. 谈谈你对停止等待协议的理解？&lt;/p&gt;&lt;p data-track=&quot;284&quot;&gt;27. 谈谈你对 ARQ 协议的理解？&lt;/p&gt;&lt;p data-track=&quot;285&quot;&gt;28. 谈谈你对滑动窗口的了解？&lt;/p&gt;&lt;p data-track=&quot;286&quot;&gt;29. 谈下你对流量控制的理解？&lt;/p&gt;&lt;p data-track=&quot;287&quot;&gt;30. 谈下你对 TCP 拥塞控制的理解？使用了哪些算法？&lt;/p&gt;&lt;p data-track=&quot;288&quot;&gt;31. 什么是粘包？&lt;/p&gt;&lt;p data-track=&quot;289&quot;&gt;32. TCP 黏包是怎么产生的？&lt;/p&gt;&lt;p data-track=&quot;290&quot;&gt;33. 怎么解决拆包和粘包？&lt;/p&gt;&lt;p data-track=&quot;291&quot;&gt;34. forward 和 redirect 的区别？&lt;/p&gt;&lt;p data-track=&quot;292&quot;&gt;35. HTTP 方法有哪些？&lt;/p&gt;&lt;p data-track=&quot;293&quot;&gt;36. 在浏览器中输入 URL 地址到显示主页的过程？&lt;/p&gt;&lt;p data-track=&quot;294&quot;&gt;37. DNS 的解析过程？&lt;/p&gt;&lt;p data-track=&quot;295&quot;&gt;38. 谈谈你对域名缓存的了解？&lt;/p&gt;&lt;p data-track=&quot;296&quot;&gt;39. 谈下你对 HTTP 长连接和短连接的理解？分别应用于哪些场景？&lt;/p&gt;&lt;p data-track=&quot;297&quot;&gt;40. HTTPS 的工作过程？&lt;/p&gt;&lt;p data-track=&quot;298&quot;&gt;41. HTTP 和 HTTPS 的区别？&lt;/p&gt;&lt;p data-track=&quot;299&quot;&gt;42. HTTPS 的优缺点？&lt;/p&gt;&lt;p data-track=&quot;300&quot;&gt;43. 什么是数字签名？&lt;/p&gt;&lt;p data-track=&quot;301&quot;&gt;44. 什么是数字证书？&lt;/p&gt;&lt;p data-track=&quot;302&quot;&gt;45. Cookie 和 Session 有什么区别？&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;305&quot;&gt;十、操作系统 32 道&lt;/h1&gt;&lt;p data-track=&quot;306&quot;&gt;1. 简单说下你对并发和并行的理解？&lt;/p&gt;&lt;p data-track=&quot;307&quot;&gt;2. 同步、异步、阻塞、非阻塞的概念&lt;/p&gt;&lt;p data-track=&quot;308&quot;&gt;3. 进程和线程的基本概念&lt;/p&gt;&lt;p data-track=&quot;309&quot;&gt;4. 进程与线程的区别？&lt;/p&gt;&lt;p data-track=&quot;310&quot;&gt;5. 为什么有了进程，还要有线程呢？&lt;/p&gt;&lt;p data-track=&quot;311&quot;&gt;6. 进程的状态转换&lt;/p&gt;&lt;p data-track=&quot;312&quot;&gt;7. 进程间的通信方式有哪些？&lt;/p&gt;&lt;p data-track=&quot;313&quot;&gt;8. 进程的调度算法有哪些？&lt;/p&gt;&lt;p data-track=&quot;314&quot;&gt;9. 什么是死锁？&lt;/p&gt;&lt;p data-track=&quot;315&quot;&gt;10. 产生死锁的原因？&lt;/p&gt;&lt;p data-track=&quot;316&quot;&gt;11. 死锁产生的必要条件？&lt;/p&gt;&lt;p data-track=&quot;317&quot;&gt;12. 解决死锁的基本方法？&lt;/p&gt;&lt;p data-track=&quot;318&quot;&gt;13. 怎么预防死锁？&lt;/p&gt;&lt;p data-track=&quot;319&quot;&gt;14. 怎么避免死锁？&lt;/p&gt;&lt;p data-track=&quot;320&quot;&gt;15. 怎么解除死锁？&lt;/p&gt;&lt;p data-track=&quot;321&quot;&gt;16. 什么是缓冲区溢出？有什么危害？&lt;/p&gt;&lt;p data-track=&quot;322&quot;&gt;17. 分页与分段的区别？&lt;/p&gt;&lt;p data-track=&quot;323&quot;&gt;18. 物理地址、逻辑地址、虚拟内存的概念&lt;/p&gt;&lt;p data-track=&quot;324&quot;&gt;19. 页面置换算法有哪些？&lt;/p&gt;&lt;p data-track=&quot;325&quot;&gt;20. 谈谈你对动态链接库和静态链接库的理解？&lt;/p&gt;&lt;p data-track=&quot;326&quot;&gt;21. 外中断和异常有什么区别？&lt;/p&gt;&lt;p data-track=&quot;327&quot;&gt;22. 一个程序从开始运行到结束的完整过程，你能说出来多少？&lt;/p&gt;&lt;p data-track=&quot;328&quot;&gt;23. 什么是用户态和内核态&lt;/p&gt;&lt;p data-track=&quot;329&quot;&gt;24. 用户态和内核态是如何切换的？&lt;/p&gt;&lt;p data-track=&quot;330&quot;&gt;25. 进程终止的方式&lt;/p&gt;&lt;p data-track=&quot;331&quot;&gt;26. 守护进程、僵尸进程和孤儿进程&lt;/p&gt;&lt;p data-track=&quot;332&quot;&gt;27. 如何避免僵尸进程？&lt;/p&gt;&lt;p data-track=&quot;333&quot;&gt;28. 介绍一下几种典型的锁？&lt;/p&gt;&lt;p data-track=&quot;334&quot;&gt;29. 常见内存分配内存错误&lt;/p&gt;&lt;p data-track=&quot;335&quot;&gt;30. 内存交换中，被换出的进程保存在哪里？&lt;/p&gt;&lt;p data-track=&quot;336&quot;&gt;31. 原子操作的是如何实现的&lt;/p&gt;&lt;p data-track=&quot;337&quot;&gt;32. 抖动你知道是什么吗？它也叫颠簸现象&lt;/p&gt;&lt;h1 class=&quot;pgc-h-arrow-right&quot; data-track=&quot;338&quot;&gt;十一、消息队列与分布式 26 道&lt;/h1&gt;&lt;p data-track=&quot;339&quot;&gt;1. 消息队列的基本作用？&lt;/p&gt;&lt;p data-track=&quot;340&quot;&gt;2. 消息队列的优缺点有哪些？&lt;/p&gt;&lt;p data-track=&quot;341&quot;&gt;3. 如何保证消息队列的高可用？&lt;/p&gt;&lt;p data-track=&quot;342&quot;&gt;4. 如何保证消息不被重复消费？或者说，如何保证消息消费的幂等性？&lt;/p&gt;&lt;p data-track=&quot;343&quot;&gt;5. 如何保证消息的可靠性传输？或者说，如何处理消息丢失的问题？&lt;/p&gt;&lt;p data-track=&quot;344&quot;&gt;6. 如何保证消息的顺序性？&lt;/p&gt;&lt;p data-track=&quot;345&quot;&gt;7. 大量消息在 MQ 里长时间积压，该如何解决？&lt;/p&gt;&lt;p data-track=&quot;346&quot;&gt;8. MQ 中的消息过期失效了怎么办？&lt;/p&gt;&lt;p data-track=&quot;347&quot;&gt;9. RabbitMQ 有哪些重要的角色？&lt;/p&gt;&lt;p data-track=&quot;348&quot;&gt;10. RabbitMQ 有哪些重要的组件？&lt;/p&gt;&lt;p data-track=&quot;349&quot;&gt;11. RabbitMQ 有几种广播类型？&lt;/p&gt;&lt;p data-track=&quot;350&quot;&gt;12. Kafka 可以脱离 zookeeper 单独使用吗？为什么？&lt;/p&gt;&lt;p data-track=&quot;351&quot;&gt;13. Kafka 有几种数据保留的策略？&lt;/p&gt;&lt;p data-track=&quot;352&quot;&gt;14. Kafka 的分区策略有哪些？&lt;/p&gt;&lt;p data-track=&quot;353&quot;&gt;15. 谈下你对 Zookeeper 的认识？&lt;/p&gt;&lt;p data-track=&quot;354&quot;&gt;16. Zookeeper 都有哪些功能？&lt;/p&gt;&lt;p data-track=&quot;355&quot;&gt;17. 谈下你对 ZAB 协议的了解？&lt;/p&gt;&lt;p data-track=&quot;356&quot;&gt;18. Zookeeper 怎么保证主从节点的状态同步？&lt;/p&gt;&lt;p data-track=&quot;357&quot;&gt;19. Zookeeper 有几种部署模式？&lt;/p&gt;&lt;p data-track=&quot;358&quot;&gt;20. 说一下 Zookeeper 的通知机制？&lt;/p&gt;&lt;p data-track=&quot;359&quot;&gt;21. 集群中为什么要有主节点？&lt;/p&gt;&lt;p data-track=&quot;360&quot;&gt;22. 集群中有 3 台服务器，其中一个节点宕机，这个时候 Zookeeper 还可以使用吗？&lt;/p&gt;&lt;p data-track=&quot;361&quot;&gt;23. 说一下两阶段提交和三阶段提交的过程？分别有什么问题？&lt;/p&gt;&lt;p data-track=&quot;362&quot;&gt;24. Zookeeper 宕机如何处理？&lt;/p&gt;&lt;p data-track=&quot;363&quot;&gt;25. 说下四种类型的数据节点 Znode？&lt;/p&gt;&lt;p data-track=&quot;364&quot;&gt;26. Zookeeper 和 Dubbo 的关系？&lt;/p&gt;&lt;hr&gt;&lt;p data-track=&quot;420&quot;&gt;好了，本文就写到这了，上述所有题目的答案我都整理成PDF了&lt;/p&gt;&lt;p data-track=&quot;422&quot;&gt;需要的同学&lt;strong&gt;&lt;span style=&quot;color: #F04142; --tt-darkmode-color: #F04142;&quot;&gt;转发本文+关注+私信【725】即可获取！&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p data-track=&quot;423&quot;&gt;&lt;a class=&quot;tteditor-forum&quot; data-name=&quot;程序员&quot; data-uid data-id=&quot;5443343699&quot; data-concern-id=&quot;6213176809811347969&quot; rel=&quot;noopener noreferrer&quot;&gt;#程序员#&lt;/a&gt;&lt;a class=&quot;tteditor-forum&quot; data-name=&quot;面试&quot; data-uid data-id=&quot;1610488422497358&quot; data-concern-id=&quot;6413580767472912898&quot; rel=&quot;noopener noreferrer&quot;&gt;#面试#&lt;/a&gt;&lt;a class=&quot;tteditor-forum&quot; data-name=&quot;秋招&quot; data-uid data-id=&quot;1609459506418691&quot; data-concern-id=&quot;6592346138752322056&quot; rel=&quot;noopener noreferrer&quot;&gt;#秋招#&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 23 Oct 2025 07:44:20 +0800</pubDate></item><item><title>太赞了!终于来了!阿里巴巴Java开发手册泰山版 (附下载)</title><link>http://maynowei.com/post/1002.html</link><description>&lt;p&gt;《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结，这份手册让众多开发人员养成了编写好代码的习惯，不得不说真的是无私的奉献。&lt;/p&gt;&lt;p&gt;2016 年 12 月份，阿里首次向业界开放了这份《Java 开发手册》，到泰山版发布，已经过去了 3 年多时间了，这份手册也在全球 Java 开发者共同的努力下，成为业界普遍遵循的开发规范。这份手册包含的知识点非常全面，七大维度编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程规约、设计规约都有罗列。在延伸信息中，“说明”对规约做了适当扩展和解释；“正例”提倡什么样的编码和实现方式；“反例”说明需要提防的雷区，以及真实的错误案例。&lt;/p&gt;&lt;p&gt;近期阿里发布了最新的泰山版本，这次的泰山版发布，新增34条规约，修改描述 90 处，其中错误码规则更是第一次提出完整的解决方案，大家可参考错误码示例表。&lt;/p&gt;&lt;h2 class=&quot;pgc-h-arrow-right&quot;&gt;&lt;strong&gt;《阿里巴巴Java开发手册(规约)》目录&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;这里推荐给Java开发人员，值得收藏学习。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;资源包&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;关注回复【泰山】获取&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;（公众号：程序员生活志）&lt;/strong&gt;&lt;/p&gt;</description><pubDate>Thu, 23 Oct 2025 07:44:19 +0800</pubDate></item></channel></rss>