java教程技术文章
-
自定义ThreadFactory的核心目标是让每个线程在创建时就具备可识别的名称和一致的行为属性,命名需含业务标识、自增序号和可选类型后缀,长度≤32字符;newThread()中须统一设置守护状态、优先级、异常处理器和线程组;避免耗时操作、静态实例复用及运行时改名。128 收藏 -
最简多线程方式是newThread()并调用start(),不可用run();仅能start一次;推荐传Runnable而非继承Thread;需注意命名、守护线程设置时机及共享变量的线程安全问题。194 收藏 -
fetch()发起GET请求分三步:调用函数、处理响应、解析JSON;默认为GET,需用response.json()解析数据,推荐async/await写法并用try/catch统一捕获错误。180 收藏 -
答案:通过Socket编程实现Java群聊功能,服务端用多线程管理客户端连接并广播消息,客户端双线程处理收发,使用线程安全集合存储输出流,确保消息实时同步。107 收藏 -
应优先选择ChannelInboundHandlerAdapter;SimpleChannelInboundHandler会自动释放消息,仅适用于只读场景,否则易致ReferenceCountException或ClassCastException。341 收藏 -
用StringBuilder.reverse()最省事但会修改原对象;应优先使用newStringBuilder(str).reverse().toString()避免副作用,手写翻转只需遍历一半长度。357 收藏 -
ATM类设计需保证线程安全:账户余额用AtomicInteger或synchronized保护;Account与ATM解耦;余额操作返回boolean;避免在getter/toString中做业务判断;withdraw需严格参数校验。480 收藏 -
for循环中声明的变量作用域仅限于该for语句块内,循环结束后变量不可访问,这是Java语言规范明确规定的声明作用域规则。398 收藏 -
Math.ceil()用于向上取整,正确计算分页总数:inttotalPages=(int)Math.ceil((double)totalCount/pageSize),需确保除法为double类型且pageSize>0。369 收藏 -
Collectors.collectingAndThen先执行收集操作再对结果进行转换,适用于不可变集合包装、类型转换和结果封装;例如结合toList与unmodifiableList创建只读列表,或对averagingInt结果取整,还可将结果封装进自定义对象,使用时需确保finisher无副作用且处理null情况。264 收藏 -
HashSet底层基于HashMap实现,元素作为key、value为静态对象PRESENT,唯一性由hashCode()和equals()共同保证,二者必须同时重写且保持一致性。234 收藏 -
装饰器模式通过组合动态扩展对象行为,核心是装饰器持有被装饰对象引用并委托调用;需定义统一接口,抽象装饰器提供默认委托实现,具体装饰器只添加自身逻辑,使用时可自由叠加。434 收藏 -
@Transactional+@Rollback是最直接有效的回滚方案,SpringBoot默认不自动回滚测试数据,必须显式启用事务管理才能触发回滚,核心机制是在测试方法执行前开启事务、结束时由@Rollback自动回滚。192 收藏 -
本文介绍一种“匹配优先”而非“分割优先”的正则策略:通过交替模式(alternation)一次性捕获所有目标单元——包括浮点数、预设关键词(如"cats""dogs")及其余单字符,避免复杂循环与多轮拆分。162 收藏 -
Collections.rotate()是Java中对List原地循环移位的方法;distance>0时向右移(末尾元素移至前面),<0时向左移,不创建新列表。225 收藏