-
对象锁和类锁互不阻塞,因锁对象不同(thisvs类.class);对象锁仅限同一实例,类锁全局唯一;应缩小锁粒度、选稳定锁对象、按共享变量类型匹配锁机制。
-
interrupt()不生效的主因是线程未响应中断:纯计算循环未检查isInterrupted()、吞掉InterruptedException未重设标志、阻塞IO不响应、守护线程无法用于超时控制;可靠方案是Future+ExecutorService配合任务内中断检查。
-
Logback异步日志需显式配置queueSize(256–1024)和discardingThreshold=0,禁用includeCallerData,搭配RollingFileAppender并验证AsyncAppender-Worker线程及QUEUE_FULL警告。
-
连接Redis前必须确认JedisPool配置正确、Redis服务端已启用认证且绑定正确网卡、客户端防火墙未拦截6379端口;需用telnet或redis-cli测试连通性,并确保bind和protected-mode配置适配访问场景。
-
自顶向下从高层抽象入手,定义接口与依赖注入,适合架构优先项目;自底向上基于基础组件构建复杂系统,适用于探索性开发;两者结合更有效。
-
在Fragment中使用DataBinding时,必须在onDestroyView()中手动置空绑定对象(如调用binding=null或binding.unbind()),否则可能因持有View引用而导致内存泄漏——这与ViewBinding的最佳实践完全一致。
-
IdentityHashMap按引用比较键,确保只有同一对象实例才被视为相同,适用于需区分实例而非内容的场景。
-
Java8在Win7上安装失败需用jdk-8u202安装包,配PATH到JDK的bin目录并设JAVA_HOME指向JDK根目录,避免新版插件限制。
-
多态通过动态绑定实现运行时方法调用,当父类引用指向子类对象并调用重写方法时,JVM在运行时根据实际对象类型确定具体执行的方法,如Animala=newDog()调用a.makeSound()会执行Dog类的makeSound(),体现同一方法调用的不同行为。
-
首先确认JDK已安装并找到实际路径,Windows默认为C:\ProgramFiles\Java\jdk-版本号\,macOS/Linux常见路径为/Library/Java/JavaVirtualMachines/jdk-版本号.jdk/Contents/Home或/usr/lib/jvm/jdk-版本号;接着设置JAVA_HOME环境变量,Windows通过系统属性添加变量名JAVA_HOME和对应路径,macOS/Linux在~/.bashrc或~/.zshrc中添加exportJAVA_HOME=
-
ReferenceQueue通过JVMGC时将失效Reference入队触发,需显式构造并手动poll/remove清理;软引用缓存须配合ConcurrentHashMap等结构防击穿,且清理逻辑应置于put()入口以避免内存泄漏。
-
线程同步的根本原因是共享变量的可见性与原子性丢失;synchronized通过互斥访问和内存屏障解决,volatile仅保证可见性不保证原子性,同步粒度不当易致性能下降或死锁。
-
类是模板,对象是用new创建的具体实例;类不占内存、不能执行方法,仅描述结构,真正存储数据和执行行为的是对象,每个对象拥有独立字段值,静态成员除外。
-
在Java中实现JSON与XML转换可通过Jackson和XStream库完成。1.使用Jackson时,需引入jackson-dataformat-xml依赖,先将JSON解析为Java对象,再通过XmlMapper转为XML;2.使用XStream可将XML转为JSON,借助JsonHierarchicalStreamDriver输出近似JSON格式,但需注意其非标准性;3.转换中常见问题包括结构不一致、信息丢失、类型错误等,建议设计映射规则、避免深层嵌套、进行前后校验;4.JSON相较XML更简洁、
-
SpringBoot处理文件上传下载的核心是HTTP请求和响应的操作。2.上传通过MultipartFile解析文件流并保存,下载通过ResponseEntity写入响应体并设置头信息。3.实现上传需配置依赖与大小限制,编写Controller接收文件并安全存储。4.下载需返回Resource并处理文件名编码、MIME类型及完整性。5.大文件上传应使用流式处理或分片上传避免内存溢出及提升稳定性。6.安全性方面应防止路径遍历、校验文件类型、集成病毒扫描。7.文件下载需确保完整性与用户体验,如支持断点续传、正