-
Firestore查询未返回全部文档,通常是因为缺少复合索引——尤其在使用orderBy配合where条件(如whereGreaterThanOrEqualTo+whereLessThanOrEqualTo)时,Firebase会静默限制结果或直接报错(部分SDK版本可能仅返回部分数据而不抛异常),必须手动在Firebase控制台创建对应索引。
-
抽象类能实现接口方法,如Bird实现Flyable接口但未实现fly(),由Sparrow子类完成,既可部分实现也可全部实现,用于统一契约、复用代码和保留扩展性。
-
Java并发应从Thread和Runnable入门,先实践线程启动、共享变量可见性、sleep/join协作;再深入synchronized三种用法及锁对象本质;接着掌握ThreadPoolExecutor核心参数;最后理解CompletableFuture的执行时机与线程池选择。
-
自定义异常通过继承Exception或RuntimeException实现,提供构造方法并可在异常中添加错误码等信息,用于处理特定业务错误,提升代码可读性和维护性。
-
不会。System.gc()仅向JVM发出垃圾回收建议,不保证立即执行或触发FullGC,实际行为取决于GC策略、堆状态和运行时负载,频繁调用反而干扰GC自适应策略。
-
Java中处理IO异常主要通过try-catch捕获IOException,或使用try-with-resources自动管理资源关闭,也可通过throws向上抛出异常。
-
ArrayList默认初始容量为0,首次add()时才扩容至10;后续扩容按1.5倍(oldCapacity+oldCapacity>>1)增长,预设容量可避免多次复制开销。
-
可见性是指线程修改共享变量后其他线程能否立即看到该修改;因JMM中线程工作内存与主内存分离,且存在缓存、优化和重排序,导致修改未及时同步,从而引发可见性问题。
-
信号量通过许可机制控制并发访问,Java中Semaphore类提供acquire()和release()方法实现线程同步,支持公平与非公平模式,限制同时访问资源的线程数。
-
Thread.sleep让兔子“睡过头”是因为它粗暴暂停线程且不释放锁,若写在循环开头则每轮固定休眠,无法模拟随机懒惰;应改用Random生成波动休眠时间,并避免在synchronized块中调用。
-
答案:基于Servlet+JSP+JDBC实现用户注册登录,需设计用户表并加密存储密码;注册时校验数据、检查用户名唯一性并用BCrypt加密;登录时通过查询数据库并比对哈希密码,验证成功后创建会话;同时应使用PreparedStatement防SQL注入、校验输入、启用HTTPS等安全措施。
-
HexFormat.parseHex无法解析带空格字符串,因默认只接受连续十六进制字符;需预处理去除空格等非十六进制字符,且输入长度须为偶数。
-
String.isEmpty()仅判断长度是否为0,对null抛异常;StringUtils.isBlank()则统一处理null和全空白字符,语义更准、更安全。
-
SpringBoot2.x默认仅暴露health和info端点;其他端点需显式配置exposure.include才启用,禁用通配符,应明确列出所需端点并配合SpringSecurity单独配置/actuator/*路径的认证授权。
-
正确使用逻辑与短路运算符&&可提升性能并避免异常。当第一个操作数为false时,后续操作不会执行,因此应将空值检查等轻量判断放左侧,方法调用或复杂计算放右侧,如if(obj!=null&&obj.getValue()>0)可防止NullPointerException。与非短路运算符&不同,&&仅在必要时计算右侧,而&始终执行两边,易导致异常或性能浪费。此外,不可依赖右侧表达式的副作用(如日志输出),因其可能不被执行。合理组织条件顺序能确保代码安全高效,核心原则是:前面为假,后面不看。