-
Java中应优先用URI解析和构造资源标识,因其语法严格、不触发网络请求;仅在发起HTTP连接时才用URL或HttpClient,且后者直接接受URI参数。
-
super只能访问直接父类中被覆盖或隐藏的非private成员,且调用父类构造器必须是子类构造器第一行;不能赋值、instanceof或传参。
-
任务类需强制非空校验、状态封装为枚举、ID用Long或UUID、setter链式返回且禁设null;单线程用ArrayList配合synchronizedList,禁用Vector和盲目用CopyOnWriteArrayList。
-
答案:优化Java面向对象设计应避免深度继承,优先使用组合、接口和工具类。通过组合实现灵活行为注入,用小而专注的接口定义能力,将通用逻辑封装在静态工具类中,并利用record简化不可变数据载体,从而降低耦合、提升可维护性与扩展性。
-
在Android开发中,Spinner的getSelectedItemPosition()方法可直接返回当前选中项的零基索引(即“行号”),而非文本内容,适用于保存数据库ID或进行位置关联操作。
-
Java中FileVisitor遍历目录树的核心是Files.walkFileTree()配合自定义访问器,实现深度优先、安全可控的遍历;其接口含preVisitDirectory、visitFile、visitFileFailed、postVisitDirectory四个关键回调方法,分别对应目录进入前、文件访问时、访问失败时、目录退出后四种状态。
-
不应捕获Error类异常(如OutOfMemoryError、StackOverflowError)和代表编程缺陷的RuntimeException(如NullPointerException、ArrayIndexOutOfBoundsException),而应捕获可预期、可恢复的受检异常(如IOException、SQLException)及少数明确需干预的运行时异常。
-
Java中sleep是Thread类静态方法,使当前线程暂停指定时间而不释放锁、不参与CPU竞争,需处理InterruptedException,且与wait有本质区别。
-
JAVA_HOME必须指向JDK根目录(如C:\ProgramFiles\Java\jdk-17.0.1),不可指向JRE或bin子目录;PATH中%JAVA_HOME%\bin须优先于System32;CLASSPATH一般应删除;多JDK切换只改JAVA_HOME并重启终端。
-
CountedCompleter通过pendingcount机制实现自定义任务完成条件,适用于分治算法;其核心是手动管理等待计数,调用tryComplete()触发onCompletion回调合并结果,比RecursiveTask更灵活但复杂。
-
Queue接口适用于FIFO场景,如多线程任务解耦、BFS算法遍历、请求节流控制;不适用于随机访问、严格优先级或双向操作,此时应选ArrayList、PriorityQueue或Deque。
-
活锁是线程持续响应冲突、反复退让却无法推进;饥饿是线程可运行但因调度或资源分配不公平而长期得不到执行;死锁是线程互相等待对方释放锁而永久阻塞。
-
Java异常处理核心是try-catch-finally及try-with-resources:try块放可能出错代码,catch按子类到父类顺序捕获并处理,finally确保资源释放;推荐用try-with-resources自动关闭AutoCloseable资源;运行时异常应修复而非捕获,检查型异常须处理或throws声明。
-
HashSet通过hashCode和equals方法实现去重,需重写这两个方法以确保自定义对象正确去重,如Student类按姓名和年龄判断重复;使用HashSet可高效去除List中重复元素,但需注意初始化容量、避免null值及线程安全问题。
-
微服务演进是应对百万级Java应用高并发与复杂性的必然选择,通过领域驱动设计划分服务边界,采用绞杀者模式渐进拆分单体应用,利用SpringBoot+SpringCloud构建服务生态,结合Docker与Kubernetes实现弹性部署;面对性能瓶颈、开发效率低下、扩展不灵活等问题,微服务通过解耦提升系统韧性与迭代速度;数据一致性通过消息队列+Saga模式实现最终一致性,保障订单、库存等跨服务事务可靠执行;团队需建立统一技术规范,避免技术栈碎片化,强化CI/CD、集中日志(ELK/Loki)、监控(Prom