-
Java中List反转首选Collections.reverse(),它原地反转、时间复杂度O(n)、空间O(1),但仅适用于可变List实现类,不支持Set/Map、不可变集合及基本类型数组直接转换的列表。
-
双亲委派模型是JVM类加载的强制委托规则:先由父加载器尝试加载,失败后才由子加载器自行加载,确保核心类(如java.lang.String)由高信任级加载器加载,防止恶意替换,其本质实现在loadClass方法中。
-
Java接口多实现能解决解耦合、提升复用性及支持组合优于继承的问题;适用于多个正交职责场景,避免抽象类单继承限制与职责污染,同时满足Spring代理、自动配置与测试Mock等框架需求。
-
首先安装配置JDK,然后编写名为HelloWorld.java的源文件,接着使用javac命令编译,最后通过java命令运行程序,输出“Hello,World!”。
-
int为32位,取值范围小,适用于常规计算;long为64位,范围大,用于超大数值。声明时long需加L;int更省性能,常用于循环、索引;long用于时间戳、大数运算等场景。
-
Set接口保证元素不重复但不保证顺序;HashSet依赖hashCode()和equals()去重,需同步重写且避免可变字段;TreeSet要求元素可比较,否则运行时抛ClassCastException;LinkedHashSet保持插入顺序但内存开销更大。
-
推荐使用Logback或Log4j2结合SLF4J记录异常日志;2.在catch块中应使用logger.error(message,throwable)完整输出堆栈;3.避免仅调用printStackTrace()或忽略异常;4.根据异常类型合理使用warn或error级别;5.通过MDC添加用户ID、请求ID等上下文信息提升排查效率。
-
IDEA启动提示“NoJDKspecified”需手动配置JDK路径:通过Configure→ProjectDefaults→ProjectStructure→SDKs添加JDK根目录(如C:\ProgramFiles\Java\jdk-17.0.1),再在ProjectSettings中指定该SDK;若仍报“Cannotresolvesymbol‘String’”,需同步检查ModuleSDK与ProjectSDK一致,并确认pom.xml中java.version兼容。
-
Java命令能直接运行的核心是将JDK的bin目录加入系统PATH。需先确认JDK已正确安装并定位bin路径,再依操作系统配置JAVA_HOME和PATH,最后验证java与javac双版本。
-
数据竞争源于多线程并发读写共享变量且缺乏同步;2.synchronized可保证原子性与可见性,确保同一时刻仅一个线程执行临界区;3.volatile保证变量可见性与禁止重排序,但不保证复合操作原子性;4.原子类如AtomicInteger基于CAS实现高效无锁原子操作;5.减少共享状态、使用不可变对象和ThreadLocal可从根本上避免数据竞争。
-
Java条件语句包括if、if-else、switch和三元运算符,用于根据布尔表达式控制程序流程;if执行单向判断,if-else实现二选一分支,switch适用于多值等值比较,三元运算符简化简单条件赋值。
-
根本原因是源文件编码与javac默认读取编码不一致;JDK17+默认UTF-8,旧版JDK在Windows默认GBK,而编辑器多存为UTF-8,导致编译乱码或报错。
-
ConcurrentHashMap是高并发读写场景的默认首选,分段锁或CAS+synchronized实现高吞吐,读无锁、写低冲突;误用get()+put()会导致更新丢失,应使用computeIfAbsent()等原子方法。
-
静态块中异常需捕获或处理,否则导致类初始化失败。1.用try-catch在静态块内捕获异常,防止抛出ExceptionInInitializerError;2.采用静态方法实现延迟初始化,将异常控制在方法级别;3.初始化失败时设置默认值或标志位,提升容错能力;4.捕获后包装为RuntimeException抛出,便于问题排查。核心是确保静态块不向上传播异常,保障类正常加载。
-
javac执行完整前端编译流程:词法→语法→语义分析→注解处理→字节码生成;内置注解在语义分析检查,Lombok等自定义注解处理器在注解处理阶段介入修改AST或生成类。