java教程技术文章
-
AS别名需显式书写、引号规范、作用域明确:SELECTnameASusername;含空格/中文/关键字时,MySQL用反引号,其余用双引号;仅SELECT和ORDERBY可用,WHERE/GROUPBY不可用;计算字段别名提升可读性与下游兼容性。483 收藏 -
本文介绍在Java中高效提取字符串中从起始位置到某个目标单词结尾处的子串,核心方法是结合indexOf()与substring(),避免遍历或正则开销,简洁且性能优越。483 收藏 -
Redis的Hash类型不支持字段级过期,而Redisson的RMapCache依赖Lua脚本模拟该行为;当写入速率过高(如500万条/30分钟)时,脚本执行被阻塞,过期逻辑失效,最终触发RedisOutOfMemoryException。483 收藏 -
new是最直接的对象创建方式,需类非抽象/接口且构造器可访问;反射newInstance()已弃用,应改用getDeclaredConstructor().newInstance();静态工厂更灵活安全,推荐优先使用。483 收藏 -
String.substring() 两个参数版本(即 substring(start, end))可以用来提取字符串中从 start 索引开始到 end 索引结束(不包含 end)的内容。要精准提取特定标签(如
... )包裹的内容,可以结合正则表达式或手动定位标签位置。方法一:使用正则表达式 + substringconst text = "Hello
Hello
使用substring提取标签内容需先动态定位边界:用indexOf找起始标签和闭合>确定beginIndex,再找结束标签位置作为endIndex(substring的endIndex不包含),注意索引越界、多标签及属性变化等陷阱,复杂场景应改用正则或HTML解析器。483 收藏
Java中不存在“上下文加载器”标准术语,实际问题是ThreadLocal持有ClassLoader导致的类污染;需通过比对getClassLoader()、检查异步调用路径、排查ThreadLocal中ClassLoader残留来定位,并在任务边界显式清理。483 收藏
定义方法需使用publicstatic返回值类型方法名(参数列表),基本类型传参不改变原值,引用类型则影响原对象,可通过重载模拟默认参数。483 收藏
CMS低延迟核心在于分阶段并发标记与写屏障协同:初始标记仅STW标记GCRoots直连对象(10–100ms);并发标记靠写屏障记录引用变更,保障准确性;重新标记STW修补变动,耗时取决于并发期引用修改频率;浮动垃圾可容忍,但并发模式失败将触发FullGC,需保守设置启动阈值并监控。482 收藏
Java中用for循环校验多层括号配对需模拟栈:单类型用depth计数器,遇'('加1、')'减1并检查越界;多类型用char数组栈,遇左括号入栈、右括号匹配弹出,最后栈空则合法。482 收藏
抽象类该有构造函数,且通常必须有;它不能是private,推荐用protected修饰,子类构造器需显式调用super(...)。481 收藏
应使用枚举配合switch实现状态分流,显式覆盖所有枚举值、禁用default兜底,Java14+推荐switch表达式,旧版default抛AssertionError;case仅调度不实现业务;状态变量须强类型绑定枚举;优先考虑在枚举内定义抽象方法实现行为穷尽。481 收藏
Thread.enumerate()仅返回当前线程组活跃线程快照数组,需配合getState()逐个判断状态;统计时应先用activeCount()预估并扩容数组,再enumerate填充,遍历非null线程计数各State频次。481 收藏
安全获取Stream首个元素应始终基于Optional的存在性做显式分支处理:用ifPresent()执行无返回操作,orElse()/orElseGet()提供默认值,map()+orElse()链式转换,orElseThrow()仅用于业务强制非空场景。481 收藏
Optional.or()提供惰性、可组合的备选值获取机制,接收Supplier<Optional<T>>,仅在为空时调用并返回Optional,支持链式操作与多级fallback。481 收藏
基本类型必须通过包装类才能存入Java集合,因集合只支持引用类型;自动装箱/拆箱简化操作,但需注意==比较陷阱、null值检查及字符串转换异常处理。481 收藏