-
ReentrantLock提供比synchronized更灵活的线程同步控制,支持可中断、超时获取、公平锁及Condition协作,需显式加锁并确保finally中释放,适用于复杂并发场景。
-
包用于组织类,避免命名冲突并控制访问权限。类的全限定名由包名和类名组成,必须唯一。包名对应目录结构,如com.example.App位于com/example/App.java。public类可被任意包访问,默认访问权限仅限本包内。包与类的关系实现了代码的模块化、可维护性和安全性,是Java大型项目开发的基础。
-
FileSystems.getDefault()仅返回默认FileSystem实例,不处理路径;Paths.get()才是跨平台路径构造的关键,自动适配分隔符、规范化路径并支持可变参数。
-
Java中截取子字符串常用String类的substring()方法,提供两种重载形式:从指定索引到末尾,或指定起止索引(左闭右开)。2.该方法不修改原字符串,返回新字符串,索引从0开始。3.需注意索引越界会抛出StringIndexOutOfBoundsException异常,beginIndex不能大于endIndex且均不能为负。4.结合indexOf、lastIndexOf等方法可动态截取,如提取URL域名。5.若beginIndex等于endIndex,返回空字符串。掌握其用法和边界情况可满足大
-
Gradle通过gradlew脚本按项目自动下载管理版本,无需全局安装;必须用gradlew而非gradle命令,首次运行gradlewrapper生成包装器;Java项目需应用java插件、遵循源码结构、显式配置JDK工具链和JUnit5;run任务需application插件及mainClass配置。
-
ConcurrentHashMap的value字段不加volatile,因其通过UnsafeCAS操作和内存屏障保障可见性,而非依赖字段修饰符;JDK8/9+中Node.value均为普通字段,加volatile反增写屏障开销且无必要。
-
需先set(Calendar.DAY_OF_MONTH,1)再get(Calendar.DAY_OF_WEEK),并转换为周一为第1天的序号:(value-1)%7+1;注意月份从0开始,日历首行空格数=该月1号序号减1,月底需手动换行。
-
Java中实现线程同步锁的核心目的是保证多线程访问共享资源时的数据一致性和线程安全,主要通过synchronized关键字、ReentrantLock、volatile关键字及Condition条件变量等方式实现;其中synchronized用于方法或代码块的自动加锁,ReentrantLock提供可中断、可重入、超时获取等更灵活的显式锁控制,volatile确保变量可见性但不保证原子性,适用于状态标志场景,而Condition配合ReentrantLock可实现精准线程通信;选择同步方式需根据实际需求权
-
优先选择组合而非继承,因继承导致类耦合紧、脆弱基类问题频发;组合通过接口隔离依赖,提升可替换性与可测性,且避免状态泄露;接口default方法不可替代继承,仅适用于无状态逻辑。
-
包装类用于将基本类型转为对象,支持自动装箱拆箱、字符串与数值转换及类型间转换。Java为每种基本类型提供对应包装类,如Integer、Double等,位于java.lang包。自动装箱允许基本类型直接赋值给包装类变量,反之则为拆箱。字符串转基本类型用parseXxx()方法,如Integer.parseInt("123");转包装类对象可用valueOf(),该方法对-128~127的Integer值有缓存优化。基本类型转字符串可通过String.valueOf()或toString()方法。数值类型间转
-
匿名内部类访问局部变量必须为final或effectivelyfinal,根本原因是栈帧销毁后局部变量不复存在,而内部类对象仍存活;编译器将其值快照为隐式字段存入堆中,故需确保值不变。
-
parallel()并非调用即并行,实际执行取决于ForkJoinPool.commonPool()线程可用性及数据源是否支持高效分割(如ArrayList可、LinkedList不可);常见错误包括共享变量非原子操作、forEach无序不安全、未预热导致性能误判,优化关键在确认其真比串行快且无竞态。
-
Future不触发get()的常见原因有三:线程池已关闭导致任务被拒绝;CachedThreadPool中快速任务被误判为未执行;Runnable提交后get()恒返回null。
-
ArrayList底层基于Object[]数组实现,非链表或哈希结构;初始化为空数组,首次添加时分配默认容量10;支持O(1)随机访问,末尾插入均摊O(1),中间插入最坏O(n);扩容按1.5倍增长,依赖Arrays.copyOf()拷贝;因泛型擦除使用Object[]存储,get()返回值由编译器自动强转;modCount用于fail-fast机制,校验单线程下迭代器误用,不保证线程安全。
-
Maven支持深度嵌套的多模块结构(如architecture→architecture_utils→architecture_utils_io),只需正确配置父POM的<modules>和子模块的<parent>关系即可实现;但需警惕过度拆分带来的构建复杂度上升与依赖管理负担。