
1. Java学习笔记从基础到面试全攻略最近整理了一份Java学习笔记涵盖了从环境配置到面试准备的完整知识体系。这份笔记源于我多年Java开发经验的积累特别适合那些正在自学Java或准备面试的开发者。Java作为一门经久不衰的编程语言其生态系统庞大而复杂新手往往不知从何入手。我的笔记试图解决这个问题提供一个系统化的学习路径。2. Java环境配置与基础入门2.1 JDK安装与环境变量配置Java开发的第一步是正确安装JDK并配置环境变量。我推荐使用JDK 11这个LTS版本它在稳定性和新特性之间取得了很好的平衡。安装完成后需要设置三个关键环境变量JAVA_HOME指向JDK安装目录PATH添加%JAVA_HOME%\binCLASSPATH设置库文件路径验证安装是否成功java -version javac -version常见问题如果遇到java不是内部或外部命令错误通常是因为PATH配置不正确。建议检查环境变量设置特别是分号的使用。2.2 第一个Java程序从经典的Hello World开始public class HelloWorld { public static void main(String[] args) { System.out.println(Hello, Java!); } }编译和运行javac HelloWorld.java java HelloWorld初学者常犯的错误包括类名与文件名不一致忘记main方法的public static void修饰符大小写错误Java严格区分大小写3. Java核心概念精讲3.1 面向对象三大特性封装通过private/protected/public控制访问权限public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name name; } }继承使用extends关键字class Animal { void eat() { System.out.println(Eating...); } } class Dog extends Animal { void bark() { System.out.println(Barking...); } }多态父类引用指向子类对象Animal myDog new Dog(); myDog.eat(); // 调用的是Dog类继承的eat方法3.2 集合框架详解Java集合框架主要分为两大类Collection接口List有序可重复ArrayList, LinkedListSet无序不重复HashSet, TreeSetMap接口HashMapTreeMap性能比较集合类型获取插入删除内存ArrayListO(1)O(n)O(n)低LinkedListO(n)O(1)O(1)高HashMapO(1)O(1)O(1)中4. Java与数据库交互4.1 连接SQL Server 2008使用JDBC连接SQL Server的步骤下载并添加sqljdbc4.jar到classpath加载驱动Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);建立连接String url jdbc:sqlserver://localhost:1433;databaseNameYourDB; Connection conn DriverManager.getConnection(url, username, password);注意SQL Server 2008使用1433默认端口较新版本可能需要启用TCP/IP协议。4.2 使用PreparedStatement防止SQL注入String sql SELECT * FROM users WHERE username ? AND password ?; PreparedStatement pstmt conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); ResultSet rs pstmt.executeQuery();5. 内存管理与性能优化5.1 解决OutOfMemoryError常见内存错误及解决方案Java堆空间不足增加JVM参数-Xmx1024m设置最大堆内存检查内存泄漏使用VisualVM分析方法区/元空间溢出增加-XX:MaxMetaspaceSize参数减少动态类生成栈溢出检查递归调用调整-Xss参数5.2 Lombok编译器问题解决当遇到you arent using a compiler supported by lombok错误时确保IDE安装了Lombok插件在Maven中添加依赖dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId version1.18.22/version scopeprovided/scope /dependency启用注解处理在IDE设置中6. Java设计模式实战6.1 单例模式实现线程安全的单例实现public class Singleton { private static volatile Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance null) { synchronized (Singleton.class) { if (instance null) { instance new Singleton(); } } } return instance; } }6.2 观察者模式应用Java内置的观察者模式实现import java.util.Observable; import java.util.Observer; class NewsPublisher extends Observable { void publishNews(String news) { setChanged(); notifyObservers(news); } } class NewsSubscriber implements Observer { Override public void update(Observable o, Object arg) { System.out.println(Received news: arg); } }7. Java面试准备指南7.1 高频面试题解析HashMap工作原理数组链表/红黑树结构哈希冲突解决扩容机制JVM内存模型程序计数器Java虚拟机栈本地方法栈堆方法区线程池参数corePoolSizemaximumPoolSizekeepAliveTimeworkQueuethreadFactoryhandler7.2 面试实战技巧项目经验描述使用STAR法则情境、任务、行动、结果算法题准备重点掌握排序、查找、树操作系统设计从单体到微服务的演进思路反问环节准备3-5个有深度的问题8. Java与STM32F嵌入式开发虽然Java主要应用于企业级开发但通过以下方式可以与STM32F系列单片机交互使用串口通信RS232/USB转串口CommPortIdentifier portId CommPortIdentifier.getPortIdentifier(COM3); SerialPort serialPort (SerialPort) portId.open(STM32, 2000); serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);通过TCP/IP协议如果STM32具有网络功能使用专门为嵌入式设计的Java版本Java ME9. 学习路线建议根据我的经验一个系统的Java学习路径应该是Java基础2-3个月语法基础面向对象集合框架IO/NIO进阶知识1-2个月多线程网络编程JVM原理主流框架2-3个月Spring全家桶MyBatis/Hibernate微服务架构项目实战持续进行从简单CRUD到分布式系统参与开源项目技术博客写作10. 常见问题速查表问题现象可能原因解决方案类找不到CLASSPATH未设置检查环境变量或IDE配置空指针异常对象未初始化添加null检查内存溢出对象未释放检查循环引用连接拒绝服务未启动检查端口占用注解不生效处理器未启用配置注解处理在实际开发中我习惯使用IntelliJ IDEA作为主力IDE配合Maven进行依赖管理。调试时多用条件断点和表达式求值功能这能显著提高排查效率。对于复杂问题JVisualVM和Arthas是分析性能问题的利器。