Java

首页 标签 Java
# Java #
关注
263441内容
线程池
本文深入剖析Java线程池实现原理,涵盖ThreadPoolExecutor与ScheduledThreadPoolExecutor核心机制,解析线程复用、任务队列、拒绝策略及周期性调度的底层逻辑,并对比Executors工具类各类线程池适用场景。
One Trick Per Day
初始化Map应避免容量设置不当,Guava的`newHashMapWithExpectedSize`或手动计算初始容量。禁止使用`Executors`创建线程池,易因无界队列或过多线程导致OOM,应显式使用`ThreadPoolExecutor`并设有限队列。`Arrays.asList`返回不可变列表,禁止修改操作。遍历Map时优先使用`entrySet`或JDK8的`forEach`提升性能。`SimpleDateFormat`非线程安全,用`ThreadLocal`隔离或改用Java 8新时间API。并发更新记录需加锁,推荐乐观锁(version控制),冲突率低时更高效,重试不少于3次。
ArrayList扩容机制
ArrayList 添加元素时,先调用 `ensureCapacityInternal` 检查容量,首次添加时默认扩容至 10。每次扩容为原容量的 1.5 倍(通过位运算 `oldCapacity >> 1` 实现),确保添加高效。`modCount` 记录结构修改次数,`size()` 返回元素个数,`length` 用于数组,`length()` 用于字符串。
1.常见配置
MyBatis配置优先级:方法参数 > resource/url > properties体内。核心属性包括缓存、延迟加载、自增主键等。支持多环境配置,通过environments指定,默认使用default环境。事务管理支持JDBC和MANAGED,与Spring集成时由Spring接管。详细配置参考官方Java API文档。
3.分页
本文介绍了五种分页实现方式:MyBatis自带RowBounds内存分页、PageHelper插件分页、SQL原生分页、数组分页(查全量再subList)及拦截器分页。其中,RowBounds为逻辑分页,适合小数据量;其余属物理分页,适用于大数据量,避免内存溢出。推荐优先使用物理分页。
Java泛型类型擦除以及类型擦除带来的问题
Java泛型在编译时会进行类型擦除,所有泛型信息被移除,仅保留原始类型(如Object或限定类型)。例如,List<String>和List<Integer>在运行时均为List,导致无法通过instanceof判断泛型类型。类型检查在编译期完成,基于引用而非对象本身。擦除后的方法调用通过桥接方法和自动强转实现多态兼容。静态成员不能使用类的泛型参数,因泛型实例化依赖对象创建,而静态上下文无此支持。
汇总
MyBatis配置优先级:方法参数 > resource/url > properties内。支持多环境、事务管理(JDBC/MANAGED),XML映射可实现一对一、一对多、多对多关联。分页推荐物理分页(如PageHelper),避免大数据内存溢出。一级缓存默认开启,二级缓存需手动配置。执行器支持SIMPLE、REUSE、BATCH三种模式。
5-MongoDB实战演练
本项目基于SpringBoot与MongoDB实现头条文章评论功能,涵盖增删改查、按文章ID查询评论及点赞功能。采用SpringDataMongoDB简化数据操作,通过MongoRepository和MongoTemplate提升开发效率与执行性能,支持分页查询与局部字段更新。
生产环境发布管理
本文介绍大型团队如何通过自动化部署平台实现多环境(dev/test/pre/prod)高效发布与运维。涵盖各环境职责、基于Jenkins+K8S的CI/CD流程、分支管理、一键发布及Skywalking日志链路追踪,提升发布效率与故障排查能力。
4.2 服务端(Cursor)-接口开发(部门管理)
基于SpringBoot+Mybatis+PageHelper,使用JDK8+语法,连接内网MySQL数据库(Sealos托管),完成部门管理5大接口开发:列表查询、根据ID查询、添加、修改、删除部门。结合dept表结构与接口文档,实现RESTful API,返回统一格式数据,通过ApiFox测试验证功能完整可用。(239字)
免费试用