还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
技术培训课程Java欢迎参加这门全面的技术培训课程我们将带领您从零基础逐步掌握Java Java编程,直至能够开发企业级应用本课程基于最新版本,为您提供系统化JDK的学习路径,确保理论与实践相结合无论您是编程初学者还是希望提升技能的开发者,本课程都将满足您的需Java求我们精心设计的课程内容涵盖了编程的各个方面,从基础语法到高级Java框架,让您全面掌握这门强大的编程语言课程概述小时核心内容50我们精心设计了小时的核心教学内容,覆盖编程的各个方面,从基础50Java语法到高级框架应用,确保学习者能够系统掌握技术Java编程实践任务1200+课程包含超过个精心设计的编程实践任务,帮助学习者巩固所学知识,1200培养实际编程能力和问题解决技巧企业真实案例分析通过分析来自实际企业环境的真实案例,学习者能够了解在商业环境中Java的应用,并学习处理实际开发中常见的挑战阶段性项目开发简介Java起源与发展由詹姆斯高斯林()及其团队于年开发,最初设计用于交Java·James Gosling1995互式电视,后发展成为通用编程语言经过多年发展,已成为全球最流行的编Java程语言之一生态系统Java生态系统由(,开发工具包)、(Java JDKJava DevelopmentKit JREJava Runtime,运行环境)和(,虚拟机)组成,三者相Environment JVM Java VirtualMachine互配合,支持程序的开发与运行Java跨平台特性的一次编写,到处运行特性使其成为跨平台开发的理想选择这一特性得益Java于,它在不同操作系统上提供一致的运行环境,使程序无需修改即可在不JVMJava同平台上运行全球应用如今,广泛应用于企业级应用、移动开发、大数据处理、云计算等领域,被Java强企业广泛采用,支撑着全球无数关键业务系统Fortune500能做什么?Java移动开发Android企业级应用开发应用开发主要使用语言,全球Android Java超过亿活跃设备的应用大多基于25Android是企业级应用开发的首选语言,广泛用Java开发掌握是进入移动开发领域的Java Java于银行、金融、保险等行业的核心业务系统重要基础其稳定性和安全性使其能够支持高并发、高可用的企业应用大数据处理框架、等主流大数据处理框架都Hadoop Spark是基于开发的的高性能和可靠性Java Java使其成为处理海量数据的理想选择物联网应用开发云服务与微服务()专为资源受限设备Java MEMicro Edition设计,使成为物联网设备编程的有力竞Java等框架使成为开发云原生Spring CloudJava争者,能够连接并控制各类智能设备应用和微服务架构的强大工具众多云服务提供商也提供了完善的Java SDK学习路线图基础语法(天)10掌握变量、数据类型、运算符、控制流程、数组和字符串处理等基Java础语法,建立编程思维,为后续学习打下基础面向对象(天)7深入理解面向对象编程概念,学习类与对象、封装、继承、多态等核心机制,培养面向对象设计思想核心技术(天)Java15学习异常处理、集合框架、流、多线程、反射机制等核心技术,I/O Java提升编程能力和解决复杂问题的能力企业级开发(天)18掌握、开发、生态系统、微服务架构等企业级技术,具JDBC WebSpring备开发实际商业应用的能力开发环境搭建安装与配置JDK从官网下载最新版并安装安装完成后,需要配置环境变量和更Oracle JDKJAVA_HOME新变量,使命令可以在任何目录下运行可通过命令验证安装PATH Javajava-version是否成功设置IntelliJ IDEA下载并安装,这是目前最流行的配置路径、代码样式、插IntelliJ IDEAJava IDEJDK件等,打造舒适的开发环境提供智能代码补全、重构工具和调试功能,大幅IDEA提升开发效率程序编写Hello World创建第一个项目,编写并运行经典的程序,体验完整的编码、Java HelloWorld编译和运行过程通过这个简单的程序,了解的基本文件结构和执行流程Java项目结构解析Java学习项目的标准目录结构,包括源代码目录、资源目录、测试目录等Java了解包()的概念和命名规范,为构建复杂项目打下基础package基础语法Java I变量与数据类型Java是强类型语言,提供两类数据类型基本类型和引用类型基本类型包括整数类型(byte、short、int、long)、浮点类型(float、double)、字符类型(char)和布尔类型(boolean)引用类型包括类、接口和数组变量声明需指定类型和名称,如int count=10;类型转换规则Java中的类型转换分为自动转换(隐式转换)和强制转换(显式转换)自动转换发生在小类型向大类型转换时,如int到long;强制转换需要显式指定,如int i=int
3.5;类型转换需注意精度损失和数据溢出问题命名规范与约定Java命名采用驼峰命名法类名首字母大写(PascalCase);变量和方法名首字母小写(camelCase);常量全部大写,单词间用下划线分隔包名全部小写,通常使用组织的反向域名良好的命名习惯可以提高代码可读性注释的正确使用Java支持三种注释单行注释(//)、多行注释(/**/)和文档注释(/***/)文档注释可被javadoc工具提取生成API文档,应包含对类、方法、参数的详细描述良好的注释习惯是专业开发的重要标志基础语法Java II运算符与表达式优先级与结合性条件语句()if-else提供多种运算符算术运算运算符优先级决定表达式计算顺语句用于根据条件执行不Java if-else符()、关系运算符序,从高到低依次为括号一同代码块基本形式为条件+,-,*,/,%if()、逻辑运算符元运算符乘除加减移位语句语句可以使用,,==,!={1}else{2}()、位运算符(关系逻辑条件赋值构建多条件判断链,||,!,|,^,else if~)、赋值运算符(=,+=,-=)和语句的应用switch同优先级运算符按结合性决定执条件表达式必须是布尔类型注条件运算符():行顺序大多数运算符从左到右意避免常见错误,如将赋值运算语句适合多值判断场景,switch表达式由变量、运算符和方法调结合,但赋值运算符从右到左结符()误用为等于运算符=基于一个变量的值执行不同代码用组成,计算后会产生一个值合建议使用括号明确表达计算()在许多场景下,==if-else块支持、、、byte shortint例如顺序可以简化为三元运算符形式int result=a+b*c;、枚举类型和(char StringJava)作为判断条件7+每个后需使用语句防止case break执行后续分支处理case default所有未匹配情况引入了Java12表达式,使语法更简洁switch循环结构循环详解与区别嵌套循环实现与控制for whiledo-while breakcontinuefor循环是最常用的循环结构,适合已知while循环先判断条件再执行循环体,适嵌套循环指在一个循环内部包含另一个break语句立即终止当前循环,程序继续迭代次数的场景其语法为for初始化;合未知迭代次数的场景while条件{循循环,常用于处理二维数据结构外层执行循环后的代码;continue语句跳过条件;更新{循环体}Java5引入增强for环体}do-while循环确保至少执行一次循环每执行一次,内层循环将完整执行当前迭代剩余代码,直接进入下一次迭循环(for-each),简化集合和数组遍循环体do{循环体}while条件;选择一遍使用嵌套循环时需注意性能影响,代在嵌套循环中,这些语句默认只影历for元素类型变量:集合{循环体}合适的循环结构可提高代码清晰度避免不必要的嵌套层次响最内层循环,可通过标签指定影响的循环层级数组基础创建方式语法示例特点声明并分配空间int[]numbers=new int
[5];元素默认初始化为0声明并直接初始化简洁,同时完成分配和赋值int[]numbers={1,2,3,4,5};先声明后初始化分两步完成,灵活性更高int[]numbers;numbers=new int[]{1,2,3};多维数组可创建不规则数组int[][]matrix=newint
[3]
[4];数组是最基本的数据结构,用于存储同类型元素的固定长度序列数组是对象,创建后长度Java不可变,索引从开始数组创建后会在堆内存中分配连续空间,数组变量本身是一个引用,指向0这块内存区域数组提供属性获取长度遍历数组可使用传统循环(通过索引)或增强循环Java lengthfor for()数组越界访问会抛出异常,程序设计时需注意Java5+ArrayIndexOutOfBoundsException边界条件数组进阶操作数组排序算法掌握冒泡、选择、插入等基本排序算法二分查找实现学习在有序数组中高效查找元素数组工具类Arrays使用内置工具简化数组操作Java常见数组应用案例通过实际案例巩固数组操作技能提供了丰富的数组操作方法,通过工具类可以轻松实现排序、查找、复制和比较等功能方法使用改进的快速排序算法,性能优异;Java ArraysArrays.sort方法实现二分查找,要求数组已排序;和提供不同的数组复制机制Arrays.binarySearch Arrays.copyOf System.arraycopy在实际应用中,数组是实现矩阵运算、图像处理、数据缓存等功能的基础掌握数组的高级操作,可以显著提升算法设计和数据处理能力,为学习更复杂的数据结构打下基础字符串处理类常用方法StringString是Java中最常用的类之一,代表不可变的字符序列常用方法包括length获取长度,charAt访问单个字符,substring截取子串,indexOf和lastIndexOf查找子串位置,equals和equalsIgnoreCase比较字符串,startsWith和endsWith检查前缀后缀,trim去除首尾空白,toUpperCase和toLowerCase大小写转换等String对象一旦创建就不可修改,任何修改操作都会创建新的String对象和StringBuilder StringBuffer当需要频繁修改字符串内容时,应使用StringBuilder(线程不安全,性能高)或StringBuffer(线程安全,性能略低)它们提供append、insert、delete、replace等方法,支持高效的字符串构建与String不同,StringBuilder和StringBuffer是可变的,避免了频繁创建对象的开销字符串性能优化正则表达式基础字符串操作是性能敏感的,不当使用可能导致严重性能问题应避免在循环中使用+连接字符串,改Java通过java.util.regex包支持正则表达式,主要类包括Pattern和Matcher正则表达式用于复杂的用StringBuilder;合理使用字符串常量池;注意String.intern方法的使用时机;字符串比较优先使字符串匹配、验证和替换操作常见应用包括表单验证(邮箱、电话)、文本提取、数据清洗用equals而非==;大量文本处理考虑使用专门的文本处理库等Pattern.compile可以预编译正则表达式提高性能面向对象基础对象交互对象间通过方法调用进行通信和协作行为方法定义对象能执行的操作和功能状态属性描述对象特征的数据字段模板类定义对象的结构和行为的蓝图面向对象编程()是一种以对象为中心的编程范式,将相关的数据和行为封装在对象中是一种纯面向对象的语言,几乎所有内容都是对象(基本数据类型OOP Java除外)类是创建对象的模板,定义了对象拥有的属性(成员变量)和行为(方法)对象是类的实例,通过关键字创建例如创建对象时,会分配内存空间,执行构造器初始化对象,并返回对象引用构new Studentstudent=new StudentJVM造器是特殊的方法,与类同名,无返回值,用于初始化对象可以定义多个构造器实现方法重载关键字指代当前对象,常用于区分局部变量和成员变量,或在this构造器中调用其他构造器封装与访问控制访问修饰符同一类同一包子类其他包✓✗✗✗private默认无修饰✓✓✗✗符✓✓✓✗protected✓✓✓✓public封装是面向对象编程的核心原则之一,它隐藏对象的内部实现细节,只暴露必要的功能接口良好的封装可以提高代码的安全性、灵活性和可维护性在中,封装主要通过访问修饰符和Java方法实现getter/setter访问修饰符控制类、变量、方法和构造器的访问范围成员仅在类内部可见;默认(无修private饰符)成员在同一包内可见;成员对同一包和所有子类可见;成员对所有类可protected public见遵循最小可见性原则,成员应使用满足需求的最严格访问级别和方法是封装的标准实践,允许对私有属性的受控访问它们提供了验证输入、按Getter Setter需计算、保持不变量等额外功能是一种特殊的类,具有私有属性、公共Java Bean、无参构造器,常用于数据传输和框架集成getter/setter继承机制父类定义创建基类,包含通用属性和方法•使用public/protected修饰符使成员可被继承•设计合适的抽象级别子类继承使用extends关键字继承父类•自动获得父类的非私有成员•可添加新成员扩展功能方法重写子类重新实现父类方法•方法签名必须相同•返回类型可以是父类返回类型的子类•访问修饰符不能更严格使用关键字super引用父类成员和调用父类构造器•super.方法名调用父类方法•super调用父类构造器•super.属性名访问父类属性继承是面向对象编程的三大特性之一,允许新类(子类)基于现有类(父类)创建,复用其属性和方法Java只支持单继承,一个类只能有一个直接父类,但可以通过多层继承形成继承链所有Java类都直接或间接继承自java.lang.Object类多态性向上转型与向下转型向上转型(Upcasting)是将子类引用赋值给父类变量,这是自动且安全的Parent p=new Child;向下转型(Downcasting)是将父类引用转换为子类类型,需要显式转换且可能失败Child c=Childp;在向下转型前,应使用instanceof运算符检查对象的实际类型,避免ClassCastException动态绑定机制动态绑定是多态的核心机制,指在运行时而非编译时确定调用哪个方法实现当通过父类引用调用被重写的方法时,实际执行的是对象真实类型的方法实现Java中,方法调用默认采用动态绑定,但final、static和private方法使用静态绑定动态绑定提供了代码的灵活性和可扩展性运算符instanceofinstanceof运算符用于检查对象是否为特定类型的实例,返回布尔值obj instanceofType它常用于向下转型前的类型检查,以及在处理多态对象时根据实际类型执行不同操作Java14引入了模式匹配增强,简化了instanceof后的类型转换if objinstanceof Strings{使用s}多态是面向对象编程的核心特性,允许不同类的对象对相同消息做出不同响应Java中的多态通过方法重写和动态绑定实现,提高了代码的灵活性、可扩展性和可维护性多态是实现依赖于抽象而非具体实现设计原则的基础,是设计模式和框架的重要支柱抽象类与接口抽象类接口抽象类用关键字声明,可以包含抽象方法(没有实现的方法)和具接口用关键字声明,传统上只能包含常量和抽象方法引入abstract interfaceJava8体方法(有实现的方法)抽象类不能被实例化,只能被继承抽象方法必默认方法和静态方法,引入私有方法,使接口更加灵活接口不能被Java9须由子类实现,除非子类也是抽象类实例化,只能被实现()implement抽象类适用于表示是什么的关系,用于创建具有共同特性但需要不同实现接口适用于表示能做什么的关系,定义对象的行为契约一个类可以实现细节的类层次结构多个接口,实现了中的多重继承机制Java•可以包含构造器、实例变量、静态方法•所有方法默认为public abstract•子类只能继承一个抽象类(单继承)•所有字段默认为public staticfinal•抽象方法不能是private、static或final•一个类可以实现多个接口接口默认方法抽象类接口选择Java8vs引入的默认方法()允许在接口中提供方法实现,选择抽象类还是接口取决于设计需求使用抽象类的情况需要共享代码Java8default method使接口演化更加灵活默认方法使用关键字修饰,解决了向现有接实现;需要访问非公共成员;需要状态(实例变量)使用接口的情况default口添加方法而不破坏兼容性的问题当类实现多个具有相同默认方法的接需要多重继承;定义类型而非实现;期望不相关的类实现相同行为最佳口时,必须覆盖该方法解决冲突实践是组合使用两者,接口定义契约,抽象类提供部分实现异常处理异常发生寻找处理器程序执行过程中遇到错误,创建异常对象并抛出JVM沿调用栈查找能处理该异常的catch块程序继续异常处理异常处理完成后程序继续执行或终止匹配的catch块执行异常处理逻辑Java的异常处理机制用于处理程序运行时的错误情况,提高程序的健壮性Java将异常分为三类检查异常(Checked Exception)、运行时异常(RuntimeException)和错误(Error)检查异常必须显式处理(try-catch或throws声明);运行时异常是编程错误,通常应该避免而非捕获;错误表示严重问题,程序通常无法恢复try-catch-finally结构是异常处理的基本语法try块包含可能抛出异常的代码;catch块捕获并处理特定类型的异常;finally块包含无论是否发生异常都会执行的清理代码Java7引入try-with-resources语法,自动管理资源的关闭创建自定义异常应继承Exception(检查异常)或RuntimeException(非检查异常),并提供清晰的错误信息异常处理的最佳实践包括只捕获能处理的异常;提供有意义的异常信息;避免捕获异常后不处理;适当使用异常链;遵循早抛出,晚捕获原则集合框架Java I集合框架概述统一的数据结构接口与实现与ArrayList LinkedList顺序集合的不同实现与性能特点与HashSet TreeSet无重复元素集合的哈希与树形实现集合遍历方式多种遍历技术的适用场景与效率集合框架提供了一套统一的接口和实现,用于存储和操作对象组主要接口包括、、、和其中是、和的父接口,Java Collection List Set Queue MapCollectionListSetQueue而代表键值对集合,是独立的分支集合框架极大简化了数据结构的使用,并提供了丰富的操作方法Map接口表示有序、可重复的集合基于动态数组实现,随机访问快但插入删除慢;基于双向链表实现,插入删除快但随机访问慢接口表示无序、List ArrayListLinkedList Set不可重复的集合基于哈希表实现,提供常数时间的添加、删除和包含操作;基于红黑树实现,元素自动排序集合遍历可使用循环、迭代器HashSet TreeSetfor-each()、表达式()等方式,不同集合类型和操作场景下应选择最合适的遍历方式Iterator LambdaJava8+集合框架Java II工作原理HashMapHashMap是Java中最常用的Map实现,基于哈希表数据结构它使用键的hashCode方法计算存储位置,通过equals方法处理哈希冲突在Java8中,HashMap进行了重要优化当哈希桶中的元素超过阈值(默认8)时,链表会转换为红黑树,提高查找效率;当元素减少到阈值以下时,会退化回链表HashMap允许一个null键和多个null值,不保证元素顺序,非线程安全有序映射TreeMapTreeMap基于红黑树实现,保证键的自然顺序或自定义顺序键必须实现Comparable接口或提供ComparatorTreeMap的主要特点是可以按键排序,支持范围查询(如subMap、headMap、tailMap方法),但相比HashMap,其添加、删除、查找操作的时间复杂度为Olog nTreeMap不允许null键(会抛出NullPointerException),但允许多个null值集合选择与性能选择合适的集合实现对性能至关重要ArrayList适合频繁随机访问;LinkedList适合频繁插入删除;HashSet/HashMap适合快速查找;TreeSet/TreeMap适合有序数据;ConcurrentHashMap适合高并发环境集合性能还受初始容量、负载因子、元素分布等因素影响实际应用中,应根据数据规模、访问模式和操作频率选择最合适的集合类型,并考虑内存占用和并发需求Java集合框架提供了丰富的排序机制Collections.sort方法可对List进行排序;Comparable接口允许类定义自然排序;Comparator接口支持自定义排序逻辑Java8引入的Stream API提供了强大的集合处理能力,支持过滤、映射、归约等函数式操作,简化了集合处理代码,提高了可读性和表达能力泛型编程泛型基本概念泛型()是引入的重要特性,允许在定义类、接口和方法时使用类型参数,提Generics Java5供编译时类型安全检查,消除类型转换泛型使代码更加类型安全、可重用和易于理解,是现代编程的基础Java泛型类与泛型方法泛型类在类名后使用尖括号声明类型参数,创建实例时指定具体类型class Box{}Box box泛型方法在返回类型前声明类型参数,调用时可显式指定类=new Box;T methodTt型或依赖类型推断类型擦除机制泛型采用类型擦除实现,编译后泛型信息被擦除,类型参数替换为上界(默认为)Java Object这保证了与旧代码的兼容性,但也带来了一些限制不能创建泛型数组、不能使用instanceof检查泛型类型、静态字段不能使用泛型类的类型参数等泛型通配符通配符用于增强泛型的灵活性无界通配符表示任何类型;上界通配符表示或其子类;下界T通配符表示或其父类原则()帮助正确使用通T PECSProducer-Extends,Consumer-Super配符数据提供者使用,数据消费者使用extends super流I/O字节流与字符流缓冲流优化非阻塞NIO I/OJava I/O流分为字节流和字符流两大缓冲流Java NIO(New I/O)是Java
1.4引入的类字节流(替代标准I/O的API,提供了三个核心组(InputStream/OutputStream)以字BufferedInputStream/BufferedOutput件Channels(通道)、Buffers(缓冲节为单位处理数据,适用于所有类型的Stream、区)和Selectors(选择器)NIO支持文件,基本类包括BufferedReader/BufferedWriter)通非阻塞I/O操作,适用于高并发、高吞吐FileInputStream/FileOutputStream过内部缓冲区减少实际I/O操作次数,显文件读写操作量的场景,如网络服务器字符流(Reader/Writer)以字符为单位著提高性能BufferedReader提供Channel与Buffer配合使用,数据总是从处理文本数据,自动处理字符编码,基readLine方法方便按行读取;Java提供多种文件读写方式传统方式通道读取到缓冲区,或从缓冲区写入通本类包括FileReader/FileWriter BufferedWriter提供newLine方法写入使用道;Selector允许单线程监控多个通平台相关的换行符FileInputStream/FileOutputStream或处理文本文件时应优先使用字符流;处实际应用中应尽可能使用缓冲流包装基道,提高资源利用率Java7引入的FileReader/FileWriter;Java7引入了理二进制文件(图片、音频等)时必须本流缓冲流的默认缓冲区大小通常为NIO.2(java.nio.file包)提供了更强大Files类,提供readAllBytes、使用字节流Java7引入了Files和Paths8KB,可通过构造器自定义大小readAllLines、write等静态方法简化的文件系统操作能力工具类,简化了文件操作文件操作;Java8引入了Stream支持,可通过Files.lines获取文件行的流进行处理处理文件时,应使用try-with-resources语句自动关闭资源,避免资源泄漏文件路径可以是相对路径或绝对路径多线程基础线程生命周期线程的主要状态Java线程创建方式•NEW线程已创建但未启动提供三种创建线程的方式Java•RUNNABLE线程正在运行或等待CPU•继承Thread类并重写run方法•BLOCKED线程等待锁•实现Runnable接口并传给Thread构造器•WAITING线程无限期等待唤醒•使用Callable和Future获取返回值•TIMED_WAITING线程等待特定时间•TERMINATED线程执行完成线程安全问题线程同步机制并发编程中的常见问题避免并发问题的同步机制•竞态条件结果依赖于线程执行顺序•synchronized关键字(方法或代码块)•死锁两个或多个线程互相等待资源•volatile关键字(可见性但非原子性)•活锁线程不断响应对方,但无法继续•显式锁(Lock接口及实现)•线程饥饿线程长时间无法获取资源•原子类(java.util.concurrent.atomic)并发编程进阶关键字synchronizedsynchronized是Java内置的同步机制,可应用于方法或代码块synchronized方法锁定当前对象(实例方法)或类对象(静态方法);synchronized块可指定锁定对象JVM通过监视器(monitor)实现synchronized,每个对象都有一个与之关联的监视器从Java6开始,HotSpot JVM对synchronized进行了多项优化,包括偏向锁、轻量级锁和自适应自旋,大大提高了性能不过,synchronized仍有局限性无法中断等待、无法设置超时、无法尝试获取锁接口与实现类Lockjava.util.concurrent.locks包提供了比synchronized更灵活的锁机制Lock接口的主要实现包括ReentrantLock(可重入锁)、ReadWriteLock(读写锁)和StampedLock(Java8引入的带版本号的锁)这些显式锁提供了更多高级特性可中断获取、可超时获取、可轮询获取、公平排队等使用显式锁需要在finally块中手动释放,否则可能导致死锁相比synchronized,显式锁性能略高,但代码更复杂,更容易出错线程池使用线程池管理线程生命周期,重用线程,减少创建和销毁开销java.util.concurrent.Executors提供了多种预配置的线程池,如FixedThreadPool、CachedThreadPool、ScheduledThreadPool和SingleThreadExecutorThreadPoolExecutor类允许自定义线程池参数,包括核心线程数、最大线程数、保持活动时间、工作队列和拒绝策略生产环境应避免使用Executors工厂方法,而是直接使用ThreadPoolExecutor,指定合理的参数防止资源耗尽原子类与机制CASjava.util.concurrent.atomic包提供了一系列原子变量类,如AtomicInteger、AtomicLong、AtomicReference等,它们支持在无锁状态下进行原子操作这些类基于CAS(Compare-And-Swap)算法,是一种乐观锁技术,适用于竞争不激烈的场景CAS操作包含三个操作数内存位置、预期值和新值只有当内存位置的值与预期值相同时,才会将其更新为新值,否则操作失败CAS比传统锁轻量,但可能出现ABA问题,需使用AtomicStampedReference解决新特性Java8表达式函数式接口Lambda Stream APILambda表达式是Java8引入的最重要特性,提供了一种简函数式接口是只包含一个抽象方法的接口,可以用Stream API提供了强大的声明式数据处理能力,支持对集合洁方式来表示匿名函数Lambda表达式的基本语法为参@FunctionalInterface注解标记Java8在进行链式操作Stream操作分为中间操作(filter、map、数-{表达式体}对于单参数的Lambda,参数括号可省略;java.util.function包中提供了多种预定义的函数式接口,如sorted等,返回Stream)和终端操作(collect、forEach、对于单语句的表达式体,花括号和return关键字可省略Consumer(接收一个输入无返回)、Supplier(无输入产reduce等,触发计算)Stream可以串行执行或通过Lambda表达式极大简化了函数式编程,特别是在集合操作生一个结果)、Function(输入映射到输出)、Predicate parallel转为并行执行Stream不存储数据,不修改源数和事件处理中,使代码更加简洁和可读Lambda底层通过(条件测试)、BiFunction(接收两个参数返回一个结果)据,支持延迟执行(惰性计算)StreamAPI大大简化了集invokedynamic指令和方法引用实现,比传统匿名内部类更等函数式接口是Lambda表达式的目标类型,方法引用(::)合处理代码,特别适合数据转换、过滤、统计等操作,与高效提供了引用已有方法作为Lambda的简写方式Lambda表达式配合使用效果最佳Java8还引入了Optional类处理空值,避免NullPointerExceptionOptional是一个容器对象,可以包含也可以不包含非空值它提供了map、filter、orElse等方法,鼓励开发者显式处理可能为空的情况,提高代码健壮性使用Optional需要避免常见陷阱,如不当调用get、不必要的isPresent-get模式,而应利用其函数式方法链日期时间API类名用途示例LocalDate表示不带时间的日期LocalDate.of2023,10,1LocalTime表示不带日期的时间LocalTime.of13,45,20LocalDateTime表示日期和时间LocalDateTime.nowZonedDateTime带时区的日期时间ZonedDateTime.nowZoneId.ofAsia/ShanghaiInstant时间线上的一点Instant.nowDuration两个时间之间的间隔Duration.betweentime1,time2Period两个日期之间的间隔Period.betweendate1,date2Java8引入的新日期时间API(java.time包)解决了旧API(java.util.Date和Calendar)的多项设计缺陷新API采用不可变对象设计,线程安全;提供了更直观的方法命名;支持ISO-8601日历系统;分离了人类可读时间和机器时间;提供了丰富的格式化和解析功能日期时间格式化通过DateTimeFormatter实现,支持预定义格式(如ISO_DATE)和自定义模式(如yyyy-MM-ddHH:mm:ss)ZonedDateTime和OffsetDateTime处理时区信息,解决了跨时区计算的复杂性日期时间计算变得简单直观,如date.plusDays
5、time.minusHours2与旧API的互操作通过Date.frominstant和date.toInstant方法实现新日期时间API的不可变性和清晰设计大大提高了代码的可靠性和可读性反射机制获取对象Class反射的起点是获取Class对象,有三种方式•类名.class编译时类型已知•对象.getClass运行时从实例获取•Class.forName类名字符串动态加载获取类信息从Class对象可以获取多种类信息•getFields/getDeclaredFields获取字段•getMethods/getDeclaredMethods获取方法•getConstructors/getDeclaredConstructors获取构造器•getAnnotations获取注解•getSuperclass/getInterfaces获取继承信息访问与修改通过反射可以动态操作对象•使用setAccessibletrue突破访问限制•Field对象的get/set读写字段值•Method对象的invoke调用方法•Constructor对象的newInstance创建实例注意事项反射使用应注意•性能开销大,避免在性能敏感代码中使用•可能绕过安全检查,需谨慎处理•破坏封装性,可能影响代码可维护性•不适合需要编译时检查的场景Java反射机制允许程序在运行时检查和修改自身行为,是Java语言动态性的核心通过反射,可以在运行时获取类的结构信息、创建对象、调用方法、访问字段,甚至突破访问权限限制反射广泛应用于框架开发、IDE工具、序列化/反序列化、动态代理、依赖注入容器等场景注解编程内置注解使用自定义注解创建Java提供了多种内置注解@Override确保方法重写父类方法;创建自定义注解使用@interface关键字public@interface@Deprecated标记过时的元素;@SuppressWarnings抑制编译MyAnnotation{}注解可以包含属性(类似方法声明)器警告;@FunctionalInterface标记函数式接口;String valuedefault可以使用元注解控制注解特性@SafeVarargs处理可变参数泛型安全性这些注解既是代码文@Retention定义保留策略(SOURCE、CLASS或RUNTIME);档,也提供了编译时检查,帮助开发者避免常见错误@Target限制应用位置(如TYPE、METHOD、FIELD);@Documented决定是否包含在文档;@Inherited允许注解被Java8引入的重复注解(@Repeatable)允许在同一元素上多子类继承次使用相同类型的注解;类型注解(TYPE_USE和TYPE_PARAMETER)扩展了注解使用的位置,增强了类型安全自定义注解通常与反射结合使用,在运行时检测和处理注解信息,实现各种功能扩展注解处理器注解处理器(Annotation Processor)是在编译时处理注解的工具使用javax.annotation.processing包中的接口和类创建处理器,实现Processor接口,并使用@SupportedAnnotationTypes、@SupportedSourceVersion等配置处理器在编译过程中可以检查代码、生成新的源文件或资源,但不能修改现有代码通过注解处理器实现的代码生成可以减少样板代码,提高开发效率,常见于ORM映射、JSON序列化、依赖注入等场景运行时注解结合反射,可以实现强大的元编程功能获取注解信息的主要方法包括Class.getAnnotation、Method.getAnnotation、Field.getAnnotation等这种技术广泛应用于框架开发,如Spring的@Component、@Autowired;JPA的@Entity、@Column;JUnit的@Test等运行时注解处理需注意性能影响,尤其是在高频调用场景数据库编程JDBC数据库连接建立JDBC(Java DatabaseConnectivity)是Java访问关系型数据库的标准API建立数据库连接需要以下步骤加载JDBC驱动(Class.forName驱动类名);创建连接(DriverManager.getConnectionurl,user,password)连接URL格式因数据库而异,如MySQL jdbc:mysql://localhost:3306/dbname最佳实践是使用try-with-resources自动关闭连接,避免资源泄漏常见数据库驱动包括MySQL的mysql-connector-java、Oracle的ojdbc、PostgreSQL的postgresql、SQLite的sqlite-jdbc等PreparedStatementPreparedStatement是预编译的SQL语句,相比Statement具有多项优势性能更好(预编译缓存);防止SQL注入攻击(参数安全转义);支持批处理和二进制数据创建PreparedStatement conn.prepareStatementsql,使用作为参数占位符;设置参数pstmt.setXXX索引,值,索引从1开始;执行executeQuery返回ResultSet,executeUpdate返回影响行数ResultSet通过next方法遍历结果集,使用getXXX方法获取列值,支持按列名或列索引访问事务管理JDBC事务控制关系到数据完整性和一致性默认情况下,每个SQL语句自动提交(auto-commit)手动事务管理步骤关闭自动提交(conn.setAutoCommitfalse);执行SQL操作;成功则提交(conn.commit);失败则回滚(conn.rollback)在try-catch块中进行事务管理,确保任何异常都触发回滚事务应遵循ACID特性原子性、一致性、隔离性和持久性不同隔离级别(READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE)解决脏读、不可重复读和幻读问题连接池配置数据库连接是昂贵资源,连接池通过复用连接提高性能常用连接池包括HikariCP(性能最佳,Spring Boot默认)、Apache DBCP、C3P
0、Tomcat JDBC等连接池配置关键参数初始连接数、最大连接数、最小空闲连接、最大空闲时间、连接检测间隔、获取连接超时等使用连接池时,不要显式关闭连接,而是调用close将连接归还池中监控连接池健康状况,适时调整参数满足业务需求处理XML解析DOMDOM(Document ObjectModel)将整个XML文档加载到内存,构建树形结构,允许任意顺序访问和修改节点Java中使用org.w3c.dom包和javax.xml.parsers.DocumentBuilder实现DOM解析主要步骤创建DocumentBuilderFactory;获取DocumentBuilder;解析XML文件生成Document对象;使用Document的方法访问和操作节点DOM优点是操作灵活,支持查询、修改、创建节点;缺点是内存消耗大,不适合处理大型XML文件解析对比SAXSAX(Simple APIfor XML)是一种基于事件的解析器,逐行读取XML文档并触发相应事件Java中使用org.xml.sax包和javax.xml.parsers.SAXParser实现使用步骤创建SAXParserFactory;获取SAXParser;创建自定义Handler继承DefaultHandler;重写startElement、endElement、characters等方法;解析XML文件SAX优点是内存占用小,适合大文件和流处理;缺点是只支持单向读取,不能修改文档,且需手动跟踪状态数据绑定JAXBJAXB(Java Architecturefor XMLBinding)提供XML和Java对象间的双向转换关键注解@XmlRootElement定义根元素;@XmlElement配置子元素;@XmlAttribute标记属性;@XmlAccessorType控制字段访问方式主要操作使用JAXBContext创建上下文;调用marshal将对象转为XML;调用unmarshal将XML转为对象JAXB大大简化了XML处理,使代码更清晰、更面向对象Java9后JAXB被移出JDK核心,需添加单独依赖应用场景XMLXML在Java应用中有广泛应用配置文件(如Spring、Hibernate配置);Web服务(SOAP协议使用XML封装消息);数据交换格式(不同系统间传输结构化数据);文档存储(如Office文档)选择合适的XML处理方式取决于具体需求DOM适合小文件且需频繁修改;SAX适合大文件只读场景;JAXB适合与业务对象紧密集成的场景近年来,JSON因其简洁性和JavaScript亲和性逐渐替代XML成为主流数据交换格式,但XML在特定领域仍不可替代处理JSON格式规范库应用与对象转换接口数据格式JSON JacksonJSON RESTfulJSON(JavaScript ObjectNotation)是一种轻量Jackson是Java最流行的JSON处理库,提供三种处对象序列化为JSONJSON是RESTful API的标准数据格式,具有轻量、级数据交换格式,由键值对组成,易于人阅读和机理方式数据绑定(最常用,直接转换对象)、树objectMapper.writeValuewriter,object或跨平台、语言无关等优势RESTful API通常使用器解析基本语法包括对象({})、数组([])、模型(类DOM,灵活访问)和流式API(类SAX,objectMapper.writeValueAsStringobjectJSON HTTP方法(GET、POST、PUT、DELETE)操作资名称/值对(name:value);值可以是字符串、高效处理)核心类包括ObjectMapper(数据绑反序列化为对象objectMapper.readValuejson,源,JSON作为请求体和响应体常见模式包括状数字、布尔值、null、对象或数组;不支持注释;定)、JsonNode(树模型)和Class处理集合类型需使用TypeReference解决态码传递结果状态;分页数据包含元数据;错误响字符串必须使用双引号;数字可以是整数或浮点JsonParser/JsonGenerator(流式API)关键注泛型擦除问题objectMapper.readValuejson,应包含代码和消息;版本信息纳入URL或头部;使数JSON相比XML更简洁,但缺乏命名空间和模式解@JsonProperty自定义字段名;@JsonIgnore newTypeReference{}自定义序列化/反序列用HATEOAS提供自描述导航链接定义忽略字段;@JsonFormat格式化日期;化逻辑可实现JsonSerializer/JsonDeserializer接@JsonInclude控制空值处理口,处理复杂类型转换网络编程Java通信客户端实现网络协议处理Socket HTTPSocket是网络通信的基础,提供端到端Java提供多种HTTP客户端实现方式传Java网络编程不限于HTTP和Socket,还双向通信通道Java支持两种Socket统方式使用HttpURLConnection;Java支持多种协议SMTP/POP3/IMAP使面向连接的TCP Socket11引入了新的HttpClient API,支持同步用JavaMail API处理电子邮件的发送和接(java.net.Socket和ServerSocket类)和异步请求、WebSocket、HTTP/2等特收FTP使用Apache CommonsNet库网络服务开发和无连接的UDP Socket性实现文件传输LDAP使用JNDI API访(DatagramSocket和DatagramPacket问目录服务JMS Java消息服务,实现HttpClient基本用法创建HttpClient实Java提供多种网络服务开发技术基于类)异步消息通信例;构建HttpRequest(设置URL、方Servlet的Web应用开发使用Servlet处TCP Socket服务器端步骤创建法、头部、体);发送请求获取理HTTP请求,JSP生成动态内容,部署网络安全是关键考虑因素使用HTTPSServerSocket绑定端口;调用accept HttpResponse;处理响应状态码、头部到Tomcat等容器中基于Spring的REST(SSLSocket/SSLEngine)保护传输安等待客户端连接;获取输入/输出流进行和体高级特性包括连接池管理、请服务使用Spring MVC或Spring全;实施适当的认证和授权机制;防范通信;关闭资源客户端步骤创建求超时设置、重定向处理、认证支持、WebFlux创建RESTful API,支持常见网络攻击如注入、XSS和CSRF;处Socket连接服务器;获取输入/输出流通代理设置和Cookie管理JSON/XML序列化和各种数据交换格式理敏感数据时应用加密技术;遵循安全信;关闭资源Socket支持设置超时、编码实践如输入验证和输出编码实际项目中,通常使用更高级的HTTP客WebSocket实现实时双向通信Java提缓冲区大小、保持连接等选项户端库如Apache HttpClient、OkHttp或供javax.websocket API,支持全双工通信,适合聊天、实时数据等场景微服多客户端处理通常采用线程池或NIO技Spring RestTemplate,它们提供更丰富术NIO提供非阻塞I/O和多路复用,适的功能和更简洁的API务架构使用Spring Cloud或MicroProfile构建分布式服务网络,提供服务发现、合高并发场景负载均衡、熔断等特性设计模式I单例模式实现与应用工厂模式家族观察者模式单例模式确保一个类只有一个实例,并工厂模式封装对象创建逻辑,分为三种观察者模式定义了对象间一对多依赖,提供全局访问点Java实现方式包括简单工厂(一个工厂创建不同产品);当一个对象状态改变时,所有依赖者都饿汉式(类加载时创建实例,线程安全工厂方法(定义创建对象的接口,子类得到通知Java内置支持但可能浪费资源);懒汉式(首次使用决定实例化哪个类);抽象工厂(创建java.util.Observable类和Observer接时创建,需同步防止并发问题);双重相关产品族)工厂模式优点是降低耦口(Java9已废弃)现代实现通常使检查锁定(兼顾延迟加载和性能);静合,隐藏实现细节,方便扩展;缺点是用自定义接口或事件监听器模式关键态内部类(利用类加载机制保证线程安增加类数量,可能引入复杂性应用场角色包括主题(被观察者)和观察者全);枚举(最简洁,天然防御序列化景包括GUI组件创建、数据库连接、实现要点主题维护观察者列表;提供和反射攻击)单例常用于配置管理、复杂对象构建等Java标准库中的工厂注册和注销方法;状态变化时通知所有线程池、连接池、日志系统等全局资源示例Calendar.getInstance、观察者观察者模式广泛应用于事件处Collections.synchronizedList等理、消息推送、UI更新等场景策略模式策略模式定义算法族,使它们可以互相替换,让算法独立于使用它的客户端关键角色策略接口(定义所有支持的算法);具体策略(实现接口的特定算法);上下文(维护策略引用)策略模式优点是封装变化、消除条件语句、支持开闭原则;缺点是增加类数量,客户端需了解不同策略Java8后,简单策略可用Lambda表达式实现应用示例比较器(Comparator)、验证器、支付处理等设计模式II适配器模式装饰器模式代理模式模板方法模式适配器模式让不兼容的接口能够一起工装饰器模式动态地向对象添加额外职责,代理模式为其他对象提供一个替代品或占模板方法模式定义算法骨架,将一些步骤作,将一个类的接口转换为客户端期望的提供了子类化的灵活替代方案关键角色位符,以控制对原对象的访问Java中有延迟到子类实现它由一个抽象类定义算另一个接口Java中有两种实现类适配包括组件接口、具体组件、装饰器(基三种代理静态代理(手动创建代理法框架,包含一个模板方法(定义算法结器(使用继承)和对象适配器(使用组类)和具体装饰器装饰器实现了与被装类)、动态代理(JDK代理,基于接口)构,调用抽象方法和钩子方法)、抽象方合,更常用)适配器模式使现有类能够饰对象相同的接口,通过组合持有被装饰和CGLIB代理(基于继承)代理模式的法(子类必须实现)和钩子方法(可选实在不修改源码的情况下满足新接口需求,对象,可以在调用原方法前后添加行为主要用途包括远程代理(RMI)、虚拟现,提供默认行为)模板方法提高了代促进了代码重用典型应用包括旧系统多个装饰器可以嵌套使用,实现功能叠代理(延迟加载)、保护代理(访问控码复用,体现了好莱坞原则(别调用我集成、第三方库封装、不同数据格式转换加Java I/O库大量使用了装饰器模式,制)、智能引用(引用计数)等Spring们,我们会调用你)应用场景包括框等Java标准库中的适配器例子包括如BufferedInputStream、AOP使用了代理模式实现方法拦截,架设计、批处理流程、测试用例等JavaArrays.asList(数组到集合)、DataInputStream等装饰器模式符合开Hibernate使用代理实现懒加载与装饰器标准库中的例子包括InputStreamReader(字节流到字符流)闭原则,但可能导致系统中出现大量小模式不同,代理通常控制对象访问,而非InputStream.read、AbstractList等等类,增加复杂性扩展功能Java8后,部分场景可使用Lambda表达式和默认方法替代传统模板方法基础Servlet服务阶段容器将请求分发给service方法处理初始化阶段容器加载Servlet并调用init方法销毁阶段容器调用destroy方法释放资源Servlet是Java Web应用的核心组件,是服务器端处理客户端请求的Java类Servlet API由javax.servlet和javax.servlet.http包提供(Jakarta EE中改为jakarta.servlet)Servlet接口定义了与容器交互的核心方法,如init、service和destroyHttpServlet是最常用的Servlet实现,提供了针对HTTP协议的方法如doGet、doPost等,对应不同的HTTP请求方法请求和响应处理通过HttpServletRequest和HttpServletResponse对象进行请求处理包括获取参数(getParameter)、获取头部(getHeader)、获取会话(getSession)、获取Cookie(getCookies)、处理文件上传等响应处理包括设置状态码(setStatus)、设置头部(setHeader)、设置内容类型(setContentType)、获取输出流(getWriter/getOutputStream)输出内容会话管理主要通过HttpSession实现,支持用户身份识别和状态维护会话可通过Cookie或URL重写传递会话ID会话数据存储在服务器端,可设置超时时间和销毁监听器Servlet
3.0引入了多项新特性注解配置(@WebServlet替代web.xml)、异步处理(AsyncContext支持长连接)、文件上传简化、可插拔设计等,大大简化了Web应用开发技术JSPJSP元素语法用途脚本表达式%=表达式%输出表达式结果到页面脚本片段%Java代码%执行Java代码声明%!变量或方法声明%声明变量或方法指令%@指令属性=值%配置页面属性动作执行内置功能注释%--注释内容--%添加不会发送到客户端的注释JSP(JavaServer Pages)是一种简化动态网页开发的技术,允许在HTML中嵌入Java代码JSP页面会被转换为Servlet并编译执行,生成HTML响应JSP主要元素包括脚本元素(表达式、片段、声明)、指令(page、include、taglib)、动作(jsp:include、jsp:forward、jsp:useBean等)、隐式对象(request、response、session等)和注释EL(Expression Language)表达式语言提供了访问各种作用域数据的简便方法,语法为${表达式}EL支持点号和方括号访问对象属性,可使用算术、逻辑和关系运算符,提供了多种内置对象如pageScope、requestScope等JSTL(JSP StandardTag Library)是标准标签库,提供了核心、格式化、SQL和XML处理等功能,极大简化了JSP页面开发,减少了scriptlet的使用MVC(Model-View-Controller)架构是Web应用的常见设计模式在基于JSP的MVC实现中,Servlet作为控制器处理请求并准备数据(Model),JSP作为视图(View)负责展示这种分离提高了代码的可维护性和可复用性虽然现代Web开发已逐渐转向前后端分离架构,但JSP/Servlet仍在传统企业应用中发挥重要作用框架基础SpringSpring Cloud微服务生态系统Spring Boot自动配置和快速开发数据访问集成/JDBC、ORM、事务等WebSpring MVC、WebFluxAOP面向切面编程Core ContainerIoC容器Spring框架是Java企业级应用开发的事实标准,提供了全面的编程和配置模型Spring的核心是IoC(控制反转)容器,它管理应用组件(Bean)的生命周期和依赖关系IoC通过DI(依赖注入)实现,将对象依赖的创建和绑定转移给容器,降低了组件间耦合度,提高了可测试性和可维护性Spring支持三种依赖注入方式构造器注入(推荐,强制依赖)、Setter注入(可选依赖)和字段注入(不推荐,难以测试)Bean配置方式包括XML配置(传统但冗长)、注解配置(@Component、@Service等)和Java配置(@Configuration、@Bean)Bean作用域主要有singleton(默认,单例)、prototype(每次请求新实例)、request、session和application(Web环境)Bean生命周期包括多个阶段实例化、属性填充、初始化(调用初始化方法)和销毁可以通过实现InitializingBean/DisposableBean接口或使用@PostConstruct/@PreDestroy注解定义初始化和销毁行为ApplicationContext是BeanFactory的高级实现,提供了更多企业级特性,如国际化、事件发布、资源加载等常用的ApplicationContext实现包括ClassPathXmlApplicationContext、AnnotationConfigApplicationContext和WebApplicationContextSpring MVC请求客户端发送HTTP请求前端控制器DispatcherServlet接收并分发请求处理器映射HandlerMapping查找对应的Controller控制器Controller处理请求并返回ModelAndView视图解析ViewResolver解析视图名称响应视图渲染结果返回客户端Spring MVC是基于Servlet的Web框架,实现了MVC设计模式核心组件DispatcherServlet作为前端控制器,负责接收请求并协调处理过程控制器使用@Controller注解定义,方法使用@RequestMapping及其变体(@GetMapping、@PostMapping等)指定URL映射请求参数绑定支持多种方式@RequestParam获取查询参数;@PathVariable获取路径变量;@RequestBody接收请求体(通常是JSON);@ModelAttribute绑定表单数据响应处理同样灵活返回ModelAndView指定模型数据和视图;返回String表示视图名;返回void用于直接响应;@ResponseBody(或使用@RestController)将返回值序列化为JSON/XML数据验证通过Bean Validation(@Valid注解和BindingResult参数)实现,支持内置和自定义验证规则RESTful API开发是Spring MVC的强项使用@RestController定义API控制器;HTTP方法对应CRUD操作(GET查询、POST创建、PUT更新、DELETE删除);路径设计遵循资源导向原则;状态码传达操作结果;内容协商支持不同格式(JSON/XML);使用ResponseEntity自定义响应Spring MVC还提供了拦截器(HandlerInterceptor)、异常处理(@ExceptionHandler、@ControllerAdvice)、文件上传、国际化等功能,满足各类Web应用需求Spring Boot自动配置原理Spring Boot的自动配置是其核心特性,通过@EnableAutoConfiguration启用它基于条件化配置(@ConditionalOnClass、@ConditionalOnMissingBean等)和类路径扫描,自动配置应用所需的Bean自动配置类位于spring-boot-autoconfigure.jar中,每个配置类负责特定功能模块配置优先级从高到低命令行参数、外部属性(application.properties/yml)、profile特定配置、默认配置起步依赖管理起步依赖(Starter)简化了项目依赖管理,一个starter封装了一组相关依赖,如spring-boot-starter-web包含SpringMVC和内嵌Tomcat等Spring Boot通过依赖管理提供了版本控制,确保依赖兼容性主要starter包括spring-boot-starter(核心)、spring-boot-starter-web(Web应用)、spring-boot-starter-data-jpa(JPA数据访问)、spring-boot-starter-security(安全)等自定义starter通过遵循命名约定和实现AutoConfiguration类创建外部化配置Spring Boot提供了多层次的配置方式,实现外部化配置应用属性可在application.properties/yml中定义,支持不同profile配置不同环境(如application-dev.yml)@ConfigurationProperties将属性绑定到Java对象,简化配置读取配置属性可通过环境变量、系统属性、命令行参数覆盖,遵循严格的优先级顺序敏感配置(如密码)可使用加密属性或外部配置服务(如Spring Cloud Config)管理应用开发Spring BootSpring Boot应用以@SpringBootApplication注解的主类为入口,它组合了@Configuration、@EnableAutoConfiguration和@ComponentScan内嵌容器(默认Tomcat)使应用成为可执行JAR,无需外部部署开发工具包括spring-boot-devtools提供热重载;Actuator暴露监控端点;Spring BootCLI支持脚本式开发测试支持通过@SpringBootTest提供自动配置的测试环境,结合MockMvc实现Web层测试,或使用TestRestTemplate进行集成测试框架MyBatis概念映射文件与集成ORM SQLMyBatis SpringORM(对象关系映射)是一种编程技术,将MyBatis的XML映射文件定义SQL语句和对象MyBatis与Spring的集成通过mybatis-关系型数据库的表结构映射到对象模型映射关系主要元素包括mapper(根spring库实现,主要配置包括ORM解决了Java对象和关系数据之间的阻抗元素,指定命名空间);select、SqlSessionFactoryBean(创建不匹配问题,简化数据访问代码主流Java insert、update、delete(定义SqlSessionFactory);ORM框架包括Hibernate(完全自动映CRUD操作);resultMap(定义结果映MapperScannerConfigurer(自动扫描射)、JPA(标准规范)和MyBatis(半自动射,处理复杂映射关系);sql(定义可Mapper接口);映射)重用SQL片段);cache(配置二级缓DataSourceTransactionManager(事务管动态SQL存)理)Spring Boot进一步简化了集成,通MyBatis是一个灵活的持久层框架,介于过mybatis-spring-boot-starter提供自动配MyBatis的动态SQL是其最强大的特性之JDBC和全自动ORM之间它支持自定义参数传递支持多种方式#{param}表示预编置一,允许根据条件构建不同的SQL语句主SQL、存储过程和高级映射,同时避免了全译参数(防SQL注入);${param}表示文本要元素包括if(条件判断);自动ORM的复杂性和性能开销MyBatis核替换(用于动态表名等);@Param注解指集成后的优势包括利用Spring的依赖注入choose、when、otherwise(多条心组件包括SqlSessionFactory(创建会定参数名称;使用Map或对象传递多个参直接注入Mapper;使用Spring的声明式事件分支);where(智能处理WHERE子话)、SqlSession(执行SQL)、Mapper接数结果映射同样灵活,支持自动映射、显务管理;与Spring数据源和连接池集成;与句);set(智能处理SET子句);口(定义数据操作方法)和映射文件(XML式resultMap、关联查询和集合映射等Spring Boot的属性配置集成实际应用foreach(遍历集合);trim(自定义或注解)中,通常采用接口+注解(简单查询)和接前缀/后缀处理)口+XML(复杂查询)混合使用的方式,权衡便捷性和可维护性动态SQL极大简化了复杂查询构建,特别是在多条件查询、批量操作等场景与字符串拼接相比,动态SQL更易维护、更不易出错,且自动处理了许多边界情况(如首个AND/OR、逗号等)微服务Spring Cloud微服务架构原则服务注册与发现配置中心服务网关与熔断微服务架构是一种将应用服务注册与发现是微服务配置中心提供了集中式、服务网关是微服务的统一拆分为小型、自治服务的架构的基础设施,解决了动态的配置管理Spring入口,负责请求路由、负设计方法,每个服务负责服务实例动态变化的问CloudConfig是官方配置载均衡、认证授权等特定业务能力核心原则题Spring Cloud提供多服务,支持Git/SVN/本Spring CloudGateway包括单一职责(服务聚种实现Eureka地文件系统作为配置存基于Spring WebFlux,焦于一个业务能力);自(Netflix开发,AP系储,提供版本控制、环境提供了响应式、非阻塞的治(独立开发、部署和扩统,自我保护机制);隔离和加密属性配置刷API网关,支持断言展);去中心化(分布式Consul(HashiCorp开新可通过手动触发(Predicate)和过滤器数据管理);领域驱动设发,CP系统,支持健康(/actuator/refresh端(Filter)链处理请求计(按业务边界划分服检查);Zookeeper点)或使用Spring Cloud熔断器模式防止故障级联务);容错设计(故障隔(Apache项目,CP系Bus实现自动刷新传播,保护系统稳定性离和优雅降级);演进式统,强一致性);Nacos Nacos、Apollo等第三方Resilience4j(Spring设计(支持持续交付和系(阿里开发,支持AP/CP配置中心提供了更丰富的Cloud CircuitBreaker的统演进)微服务的优势切换)典型工作流程功能,如配置历史、灰度默认实现)提供了熔断、是开发效率高、扩展性服务启动时向注册中心注发布和权限控制配置最限流、重试、舱壁隔离等好、技术异构性,但也带册;客户端查询服务实例佳实践包括环境分离、容错模式断路器状态包来了分布式系统复杂性和信息;负载均衡器选择实敏感信息加密、配置分组括关闭(正常)、开启运维挑战例;服务实例定期发送心和分层、变更审计等微(阻断请求)和半开(试跳;故障实例自动下线服务从配置中心获取配探恢复),根据失败率自Spring Cloud通过置,可实现无需重启的配动切换服务间通信通常@EnableDiscoveryClien置更新,支持不同环境和使用声明式REST客户端t和DiscoveryClient接口区域的配置差异化(如OpenFeign)简化远统一了不同实现的API程调用,结合负载均衡和熔断机制提高可靠性项目管理Maven生命周期与插件多模块项目配置Maven基于生命周期(lifecycle)和阶段(phase)多模块项目(又称聚合项目)允许将大型项目分解为概念组织构建过程三个内置生命周期clean(清子模块,简化管理父项目使用理)、default(主要构建)和site(文档生成)packagingpom/packaging声明为POM类型,通default生命周期包含主要阶段如compile、test、过modules指定子模块子模块通过parent引用依赖管理机制package、install和deployMaven插件实现具体构父项目,继承共同配置私服与构建配置建任务,每个阶段绑定默认插件目标(goal)常用dependencyManagement集中定义依赖版本,确Maven依赖管理是其核心功能,通过坐标系统插件包括compiler(编译)、surefire(测试)、保一致性;pluginManagement统一配置插件多Maven仓库分为本地仓库(~/.m2/repository)、中(groupId:artifactId:version)唯一标识构件依赖jar/war(打包)、source(源码)、javadoc(文档)模块项目支持聚合构建(一次命令构建所有模块)和央仓库(Maven Central)和私有仓库(企业内部)声明在pom.xml的dependencies中,支持传递性和shade(可执行jar)等插件配置可在build部继承(复用配置),遵循关注点分离原则组织代码私有仓库(又称私服)如Nexus、Artifactory提供依赖(自动包含间接依赖)依赖范围(scope)控分定义了缓存外部依赖、托管内部构件、权限控制等功能制依赖在不同阶段的可见性,主要包括compile仓库配置通过repositories和(默认)、provided、runtime、test、system和distributionManagement指定Maven配置文件import依赖冲突解决基于最近原则(路径最短优(settings.xml)控制全局设置,包括本地仓库位置、先)和版本声明顺序,可通过镜像、服务器认证等Maven属性(${property})dependencyManagement和exclusions精确控支持变量替换,profile机制允许针对不同环境切换配制置2314单元测试框架测试用例编写测试覆盖率分析JUnit5JUnit5是Java主流单元测试框架,分为三个子项目JUnit高质量的单元测试遵循FIRST原则Fast(快速执行)、测试覆盖率衡量代码被测试执行的程度,主要指标包括行Platform(测试运行平台)、JUnit Jupiter(新API和扩展模Independent(相互独立)、Repeatable(可重复运行)、覆盖率(执行的代码行百分比)、分支覆盖率(执行的条件型)和JUnit Vintage(兼容旧版本)测试类无需继承特定Self-validating(自验证)和Timely(及时编写)测试用分支百分比)、方法覆盖率(测试调用的方法百分比)和类基类,测试方法使用@Test注解标记生命周期注解包括例应该覆盖正常路径、边界条件和异常场景,确保功能完整覆盖率(测试涉及的类百分比)JaCoCo是流行的Java覆盖@BeforeEach、@AfterEach(每个测试前后)和性率工具,可与Maven、Gradle集成@BeforeAll、@AfterAll(整个测试类前后)测试用例结构通常遵循AAA模式Arrange(准备测试环境和高覆盖率不等于高质量测试,应关注测试的有效性和关键路JUnit5引入了多项新特性@DisplayName自定义测试名数据)、Act(执行被测方法)和Assert(验证结果符合预径覆盖设置合理的覆盖率目标(通常70%-80%),并确保称;@Nested支持嵌套测试类;@ParameterizedTest参数期)测试数据准备可以使用@BeforeEach方法、工厂方法核心业务逻辑达到更高覆盖率覆盖率报告帮助识别测试薄化测试;@RepeatedTest重复测试;@Tag标记测试分类;或测试数据构建器对于复杂对象,可以使用对象母版弱区域,但不应成为唯一质量指标避免为提高覆盖率而编@Disabled暂时禁用测试;@Timeout限制执行时间断言(Object Mother)或测试数据构建器(Test DataBuilder)写无意义测试API更丰富,支持lambda表达式,如assertThrows验证异模式创建测试数据常,assertAll分组断言对象使用MockMock对象模拟依赖组件行为,实现隔离测试Mockito是Java流行的Mock框架,支持创建和配置模拟对象核心API包括mock或@Mock创建模拟对象;when.thenReturn设置方法返回值;verify验证方法调用;ArgumentCaptor捕获方法参数;@InjectMocks自动注入模拟对象测试替身分为多种类型Dummy(传递但不使用)、Fake(简化实现)、Stub(返回固定响应)、Spy(部分真实实现)和Mock(验证交互)明智选择测试替身类型,避免过度模拟导致测试脆弱模拟静态方法和最终类需要特殊技术,如Mockito扩展或PowerMock日志应用日志门面SLF4JSLF4J(Simple LoggingFacade forJava)是一个日志抽象层,提供统一的日志API,允许在运行时绑定不同的日志实现使用SLF4J的主要优势是解耦应用与具体日志实现,便于日后切换日志框架,避免多个依赖引入不同日志框架的冲突SLF4J基本用法首先获取Logger实例(LoggerFactory.getLoggerClass),然后使用不同级别的方法记录日志支持占位符格式({})提高性能,如logger.debugUser{}logged in,username,只有日志级别启用时才会执行字符串拼接配置LogbackLogback是SLF4J的原生实现,也是Spring Boot的默认日志框架,提供了高性能、灵活的日志功能Logback配置文件通常命名为logback.xml或logback-spring.xml(Spring Boot推荐),定义了日志输出位置、格式和级别主要配置元素包括appender定义日志输出目标(控制台、文件、数据库等);encoder指定日志格式;logger配置特定包的日志级别;root设置根日志器级别高级特性包括滚动文件(按大小或时间)、异步日志、MDC上下文、条件处理和过滤器日志级别与输出标准日志级别从低到高依次为TRACE、DEBUG、INFO、WARN、ERROR生产环境通常使用INFO或更高级别,开发环境使用DEBUG级别以获取更详细信息日志级别控制可以精确到包或类,实现不同模块的差异化日志策略日志输出格式通常包括时间戳、日志级别、线程名、logger名称、消息内容和异常堆栈MDC(Mapped DiagnosticContext)提供了线程级的上下文映射,可在日志中包含请求ID、用户ID等关联信息,便于追踪分布式系统中的请求流程日志实践最佳方案日志最佳实践包括选择合适的日志级别(ERROR用于必须立即处理的问题,WARN用于潜在问题,INFO用于重要业务事件,DEBUG/TRACE用于开发调试);避免日志爆炸和性能影响;使用参数化日志而非字符串拼接;记录关键业务事件和异常情况;包含足够上下文信息便于排障企业级应用应考虑集中式日志管理,使用ELK(Elasticsearch、Logstash、Kibana)或EFK(Elasticsearch、Fluentd、Kibana)等栈收集、存储和分析分布式系统的日志合理的日志保留策略和安全措施(避免敏感信息泄露)也是生产环境日志管理的重要方面垃圾回收Java内存模型JVMJVM内存分为多个区域堆(存放对象实例,GC主要工作区域);方法区/元空间(存储类信息、常量、静态变量);Java虚拟机栈(线程私有,存储局部变量和调用信息);本地方法栈(类似Java栈,用于本地方法);程序计数器(记录当前线程执行位置)垃圾回收主要关注堆内存管理垃圾回收算法主要垃圾回收算法包括标记-清除(Mark-Sweep,标记存活对象,清除其他对象,会产生内存碎片);标记-整理(Mark-Compact,标记后将存活对象移动到一端,适合老年代);复制(Copying,将内存分为两块,每次只用一块,存活对象复制到另一块,适合新生代);分代收集(Generational,根据对象生命周期特点对不同年龄对象采用不同策略)垃圾收集器对比HotSpot JVM提供多种垃圾收集器Serial(单线程,简单高效,适合小内存);ParNew(Serial的多线程版本);ParallelScavenge/Parallel Old(关注吞吐量);CMS(Concurrent MarkSweep,低延迟,降低停顿时间);G1(Garbage First,面向服务器,平衡吞吐量和停顿时间);ZGC(极低延迟,适合大内存);Shenandoah(类似ZGC,低延迟)选择收集器应根据应用特点和性能目标调优基础GCGC调优目标是减少停顿时间和提高吞吐量常见调优参数包括堆大小设置(-Xms、-Xmx);新生代与老年代比例(-XX:NewRatio);垃圾收集器选择(-XX:+UseG1GC等);并行线程数(-XX:ParallelGCThreads);触发阈值(-XX:InitiatingHeapOccupancyPercent)调优应基于实际监控数据,使用GC日志(-Xloggc)和可视化工具(GCViewer、VisualVM)分析GC行为Java垃圾回收是JVM自动管理内存的机制,开发者无需手动释放对象垃圾回收器通过可达性分析判断对象是否存活,从GC Roots(线程栈变量、静态变量、JNI引用等)出发,可到达的对象被视为存活,其余被回收垃圾回收过程会导致应用线程暂停(Stop-The-World),尤其是在Full GC时为减少影响,现代收集器采用并发、增量和分区等技术降低停顿时间对象分配和回收遵循分代假设大多数对象朝生夕死,少数长寿因此,JVM将堆分为新生代(Young,包含Eden和两个Survivor)和老年代(Old),分别采用不同回收策略性能优化Java参数配置JVM1通过合理设置JVM参数提升性能代码级优化技巧运用高效编程实践降低资源消耗内存泄漏检测发现并修复内存异常消耗问题性能测试工具使用专业工具评估系统性能表现JVM参数配置是性能优化的基础关键参数包括内存相关(-Xms、-Xmx设置堆大小,-XX:MetaspaceSize设置元空间);GC相关(选择合适收集器,如G
1、ZGC,配置触发阈值和线程数);JIT相关(-XX:+TieredCompilation分层编译,-XX:CompileThreshold控制编译阈值)不同应用场景需要不同配置高吞吐量系统关注整体处理能力;低延迟系统关注响应时间稳定性;批处理系统关注峰值处理能力适当的JVM监控(如JMX、JFR)有助于发现优化机会代码级优化涉及多个方面集合选择与使用根据访问模式选择ArrayList(随机访问)或LinkedList(频繁插删);HashMap的初始容量和负载因子影响性能;规避不必要的装箱拆箱操作字符串处理使用StringBuilder替代+连接;避免不必要的字符串创建;合理使用字符串池并发优化适当使用线程池避免线程创建开销;选择合适的锁粒度和策略;使用无锁数据结构如ConcurrentHashMap、原子类算法与数据结构优化选择合适的算法降低时间复杂度;减少不必要的计算;利用缓存避免重复计算I/O优化使用缓冲流;批量处理;采用NIO和异步I/O提高吞吐量内存泄漏是性能恶化的常见原因常见泄漏来源包括未关闭的资源(流、连接);静态集合持续增长;ThreadLocal未清理;监听器未注销;缓存无界增长检测工具包括VisualVM、Eclipse MAT、JProfiler等,通过堆转储分析对象引用关系找出泄漏源预防措施包括使用try-with-resources自动关闭资源;弱引用缓存;定期清理集合;遵循RAII原则大数据处理5+核心组件Hadoop生态系统主要模块数量200+节点规模典型企业级Hadoop集群规模PB数据量级Hadoop能处理的数据级别60%市场应用采用Java开发的大数据工具比例Hadoop技术栈是大数据处理的核心框架,主要组件包括HDFS(分布式文件系统,提供高容错、高吞吐的数据存储);MapReduce(分布式计算模型,适合批处理);YARN(资源管理平台,调度计算资源);Hive(数据仓库,提供SQL接口);HBase(列式存储数据库,适合实时查询);Spark(内存计算引擎,速度快于MapReduce);Storm/Flink(流处理框架);ZooKeeper(分布式协调服务)Java与Hadoop的集成有多种方式直接使用Hadoop JavaAPI开发MapReduce应用,实现Mapper和Reducer接口;使用Spring forApache Hadoop简化开发,提供与Spring集成的模板和工具;基于Spark JavaAPI进行高性能计算,支持流处理和机器学习;使用Storm/Flink JavaAPI开发实时处理应用开发大数据应用需注意数据分区设计、序列化效率、内存管理和作业调优等方面大数据处理案例包括日志分析(收集系统日志,提取指标和异常);推荐系统(分析用户行为,生成个性化推荐);欺诈检测(识别异常交易模式);实时监控(IoT设备数据处理和告警);数据仓库(ETL处理和数据挖掘)这些应用通常涉及数据采集、存储、处理、分析和可视化的完整流程,Java在各环节都有成熟的工具和框架支持项目实战在线商城技术栈选择需求分析与设计后端选择SpringBoot作为基础框架,提供快速开发能力;明确功能需求和非功能需求,包括用户管理、商品管理、购Spring Security处理认证授权;MyBatis或Spring DataJPA物车、订单处理、支付集成、库存管理等采用领域驱动设实现数据访问;Redis缓存热点数据提升性能;RabbitMQ或计方法,识别核心业务实体和边界设计系统架构,决定采Kafka处理异步消息;Elasticsearch实现商品搜索功能前用单体架构还是微服务架构,规划技术演进路径制定数据端可选择Vue.js或React构建单页应用,或使用Thymeleaf服库设计,包括实体关系图和表结构务端渲染Docker和Kubernetes考虑用于容器化部署和编排功能模块实现数据库建模用户模块注册、登录、个人信息管理、权限控制;商品模设计核心实体表用户表(User)存储账户信息;商品表4块分类管理、商品CRUD、图片上传、搜索功能;购物车(Product)包含详情和库存;分类表(Category)构建商模块添加商品、修改数量、删除商品、结算;订单模块品层次;订单表(Order)和订单项表(OrderItem)记录交创建订单、支付集成、订单跟踪、评价系统;管理后台销易信息;购物车表(Cart)和购物项表(CartItem)管理购售统计、库存管理、用户管理、权限配置各模块遵循分层物状态;支付表(Payment)记录支付信息设计合理的索架构控制层、服务层、数据访问层,确保关注点分离引提升查询性能,考虑分库分表应对数据增长项目实施需要良好的工程实践支持版本控制使用Git,遵循GitFlow或Feature Branch工作流;持续集成/持续部署(CI/CD)通过Jenkins或GitLab CI实现,自动化构建、测试和部署;测试策略包括单元测试、集成测试和端到端测试,确保代码质量;性能优化关注数据库查询、缓存策略、静态资源和API响应时间;安全措施包括输入验证、XSS防御、CSRF防护、SQL注入防范和敏感数据加密项目挑战与解决方案包括高并发场景(商品秒杀)通过缓存预热、限流和异步处理解决;分布式事务使用TCC或Saga模式确保数据一致性;Session管理通过Redis实现分布式会话;订单超时通过延迟队列自动取消;服务降级和熔断保障系统稳定性项目后期需关注监控告警、日志聚合、性能测试和用户反馈收集,持续优化系统求职与面试准备开发岗位需求简历编写技巧技术面试常见问题编程能力展示JavaJava开发职位分为多个级有效的Java开发简历应突Java面试通常包括多个环除简历外,展示编程能力别和方向初级开发(0-出技术能力和实际贡献节技术筛选(基础知的渠道包括GitHub个2年经验,基础编码能核心部分包括简洁的个识);编码测试(算法和人仓库(包含个人项目和力);中级开发(2-5年人概述(1-2句话概括专实现);系统设计(架构开源贡献);技术博客经验,独立完成复杂功业背景);技能列表(分能力);项目深度(实际(分享学习心得和解决方能);高级开发(5年以类展示核心技术,避免堆经验);行为面试(软技案);Stack Overflow回上经验,系统设计和技术砌);工作经历(按时间能和文化契合)常见技答(展示问题解决能决策);架构师(全局技倒序,强调成就而非职术问题包括Java基础力);个人网站/作品集术规划和演进)专业方责);项目经验(结构化(集合、并发、JVM);(展示完整项目);编程向包括后端开发(API描述背景、挑战、解决框架应用(Spring、竞赛成绩;开源项目贡和业务逻辑);全栈开发方案、成果);教育背景MyBatis等);数据库献;技术演讲和分享示(前后端结合);大数据(学位、专业、相关课(SQL优化、事务);设例项目应体现代码质量、开发(Hadoop生态);程);证书和培训计模式应用;微服务架架构能力和最佳实践Android开发(移动应(Oracle认证、Spring认构;性能调优经验;安全用);DevOps工程师证等)最佳实践提升竞争力的方法构建(构建部署自动化)简历撰写建议使用量化1-2个有深度的项目而非企业普遍看重的技能包数据展示影响(性能提升面试准备策略复习核心多个简单demo;编写详括扎实的Java基础;百分比、服务可用性概念和原理;练习常见算细的README文档;保持Spring生态系统经验;数等);突出解决的技术挑法和数据结构;准备项目代码风格一致性;实现完据库设计和优化;微服务战;展示业务理解而非纯案例STAR描述(情境、整的测试覆盖;展示架构理解;并发和性能调技术;适当使用技术关键任务、行动、结果);了CI/CD和DevOps技能;优;测试和质量保障;问词便于ATS筛选;保持2解目标公司技术栈;准备在代码审查中积极参与;题分析和解决能力页以内篇幅;针对不同职技术选型理由;思考职业持续学习新技术并有实际位定制内容规划和成长应用学习资源与未来发展。
个人认证
优秀文档
获得点赞 0