java教程技术文章
-
DFA比正则匹配更适合敏感词过滤,因其将所有词构建成状态转移图,文本仅扫描一遍,时间复杂度接近O(n),且词库规模扩大时过滤性能稳定;而正则逐条匹配在词库达数百个时性能显著下降。275 收藏 -
SortedSet.add()排序异常的根本原因是缺少有效比较逻辑:未实现Comparable或未传Comparator;常见错误包括修改比较字段、compareTo()不满足自反对称传递性、compare()误返回布尔值而非负/零/正值。307 收藏 -
Java一维数组动态初始化用new声明后分配内存,如int[]arr=newint[5];静态初始化用大括号直接赋值,如int[]nums={1,2,3};二者均不可变长,final修饰仅禁止引用重赋值,不限制元素修改。192 收藏 -
重写方法必须具有相同的方法签名:方法名、参数列表(类型、数量、顺序)完全一致;返回类型支持协变(子类返回类型为父类返回类型的子类型),但基本类型和void不支持;访问修饰符不能更严格;不能重写final、static、private方法;检查异常声明只能缩小或不变。397 收藏 -
Firestore查询未返回全部文档,通常是因为缺少复合索引——尤其在使用orderBy配合where条件(如whereGreaterThanOrEqualTo+whereLessThanOrEqualTo)时,Firebase会静默限制结果或直接报错(部分SDK版本可能仅返回部分数据而不抛异常),必须手动在Firebase控制台创建对应索引。366 收藏 -
抽象类能实现接口方法,如Bird实现Flyable接口但未实现fly(),由Sparrow子类完成,既可部分实现也可全部实现,用于统一契约、复用代码和保留扩展性。410 收藏 -
Java并发应从Thread和Runnable入门,先实践线程启动、共享变量可见性、sleep/join协作;再深入synchronized三种用法及锁对象本质;接着掌握ThreadPoolExecutor核心参数;最后理解CompletableFuture的执行时机与线程池选择。460 收藏 -
自定义异常通过继承Exception或RuntimeException实现,提供构造方法并可在异常中添加错误码等信息,用于处理特定业务错误,提升代码可读性和维护性。274 收藏 -
不会。System.gc()仅向JVM发出垃圾回收建议,不保证立即执行或触发FullGC,实际行为取决于GC策略、堆状态和运行时负载,频繁调用反而干扰GC自适应策略。265 收藏 -
Java中处理IO异常主要通过try-catch捕获IOException,或使用try-with-resources自动管理资源关闭,也可通过throws向上抛出异常。390 收藏 -
ArrayList默认初始容量为0,首次add()时才扩容至10;后续扩容按1.5倍(oldCapacity+oldCapacity>>1)增长,预设容量可避免多次复制开销。243 收藏 -
可见性是指线程修改共享变量后其他线程能否立即看到该修改;因JMM中线程工作内存与主内存分离,且存在缓存、优化和重排序,导致修改未及时同步,从而引发可见性问题。165 收藏 -
信号量通过许可机制控制并发访问,Java中Semaphore类提供acquire()和release()方法实现线程同步,支持公平与非公平模式,限制同时访问资源的线程数。203 收藏 -
Thread.sleep让兔子“睡过头”是因为它粗暴暂停线程且不释放锁,若写在循环开头则每轮固定休眠,无法模拟随机懒惰;应改用Random生成波动休眠时间,并避免在synchronized块中调用。419 收藏 -
答案:基于Servlet+JSP+JDBC实现用户注册登录,需设计用户表并加密存储密码;注册时校验数据、检查用户名唯一性并用BCrypt加密;登录时通过查询数据库并比对哈希密码,验证成功后创建会话;同时应使用PreparedStatement防SQL注入、校验输入、启用HTTPS等安全措施。212 收藏