0%

逻辑运算符:规则、优先级与应用

逻辑运算符是程序设计中用于处理布尔值(真 / 假)运算的核心工具,主要包括逻辑与(&&)、逻辑或(||)、逻辑非(!) 三种,它们的运算规则和优先级直接影响表达式的执行结果。

三种逻辑运算符的运算规则

1. 逻辑与(&&,相当于 AND)

  • 运算规则:当且仅当两个操作数都为 “真(true)” 时,结果才为 “真”;只要有一个操作数为 “假(false)”,结果就为 “假”。

  • 真值表

    | 操作数 A | 操作数 B | A && B |
    | ———— | ———— | ——— |
    | true | true | true |
    | true | false | false |
    | false | true | false |
    | false | false | false |

  • 示例
    (5 > 3) && (2 < 4)true && true → 结果为 true
    (5 > 10) && (2 < 4)false && true → 结果为 false

  • 短路特性:如果第一个操作数为false,则不再判断第二个操作数(因为结果已确定为false)。
    例如:(5 > 10) && (a = 3) → 由于5>10falsea=3不会执行,a的值不变。

阅读全文 »

进制转换:二进制、八进制、十进制、十六进制的转换方法

在计算机领域,二进制(B)、八进制(O)、十进制(D)和十六进制(H)是最常用的数制。掌握它们之间的转换规则,是理解计算机数据存储和运算的基础。以下是详细的转换方法:

十进制与其他进制的转换

1. 十进制转二进制(除 2 取余法)

核心步骤:将十进制数反复除以 2,记录每次的余数,直到商为 0,最后将余数从后往前排列

示例:将十进制数94转为二进制

  • 计算过程:

    1
    2
    3
    4
    5
    6
    7
    94 ÷ 2 = 47  余数 0  
    47 ÷ 2 = 23 余数 1
    23 ÷ 2 = 11 余数 1
    11 ÷ 2 = 5 余数 1
    5 ÷ 2 = 2 余数 1
    2 ÷ 2 = 1 余数 0
    1 ÷ 2 = 0 余数 1
  • 结果:余数从后往前排列 → 1011110(即 94D = 1011110B)。

2. 十进制转八进制(除 8 取余法)

核心步骤:类似二进制转换,将十进制数反复除以 8,记录余数,最后从后往前排列

阅读全文 »

广告系统的平台架构:核心模块与协同机制

广告系统是连接广告主(需求方)、媒体(流量方)和用户(受众)的复杂生态,其架构设计需满足高并发、精准定向、数据实时性等核心需求。一个完整的广告平台通常围绕业务支撑、数据处理、投放执行、效果监测四大核心模块展开,各模块协同实现广告从创建到投放再到效果分析的全生命周期管理。

核心参与角色与架构设计目标

核心角色

  • 广告主:需求方,希望通过广告获取用户转化(如销售、下载、咨询),关注投放效果与成本。
  • 媒体:流量方,提供广告展示位置(如 App、网站、短视频),关注流量变现效率。
  • 平台:连接广告主与媒体的中间层,负责广告投放、数据统计、策略优化等核心功能。

架构设计目标

  • 高效匹配:将合适的广告在合适的时机推送给合适的用户。
  • 数据驱动:基于用户行为和投放数据优化策略,提升 ROI(投资回报率)。
  • 稳定可靠:支持高并发请求(如峰值千万级 QPS),确保广告正常曝光。
  • 灵活扩展:适配多类型媒体(图文、视频、信息流)和广告形式(横幅、原生、搜索)。

四大核心平台架构详解

业务平台:广告全生命周期的业务支撑

定位:面向运营 / 执行人员的操作入口,负责广告投放的全流程配置与管理。

阅读全文 »

Log4j2 自动删除日志文件:配置策略与最佳实践

线上系统日志文件持续增长,若不及时清理会导致磁盘空间耗尽,影响服务稳定性。Log4j2 的DefaultRolloverStrategy中内置了Delete操作,支持在日志滚动时自动清理过期文件,无需手动干预。本文详细解析自动删除配置的核心参数、注意事项及实战案例。

自动删除日志的核心原理

Log4j2 的自动删除功能依赖DefaultRolloverStrategy中的<Delete>标签,其工作机制是:
当日志滚动触发时(如达到时间或大小阈值),执行预定义的删除规则,清理符合条件的旧日志文件。

  • 触发时机:与日志滚动同步,仅在滚动发生时执行删除(避免频繁检查磁盘);
  • 删除规则:通过<IfFileName>(文件名匹配)和<IfLastModified>(修改时间匹配)组合筛选文件;
  • 安全性:支持配置目录扫描深度和文件匹配规则,避免误删非日志文件。

<Delete>标签核心配置参数

<Delete>标签的配置决定了删除范围和条件,关键参数如下:

参数名 作用说明 示例值
basePath 扫描的根目录(绝对路径或通过变量指定,如${LOG_HOME} /data/logs/app
maxDepth 目录扫描深度(0= 仅basePath本身,1= 包含直接子目录,2= 包含孙子目录) 2
<IfFileName> 文件名匹配规则(支持通配符*?glob属性指定模式) glob="app-*.log.bz2"
<IfLastModified> 文件最后修改时间条件(age属性指定过期时间,单位d天、h小时等) age="30d"(30 天前)

自动删除配置示例与解析

以下是生产环境常用的自动删除配置,结合日志滚动策略实现 “按时间归档 + 大小限制 + 自动清理” 的完整流程:

阅读全文 »

Log4j2 日志文件滚动详解:触发策略与滚动策略的完整实践

在生产环境中,日志文件若持续写入会导致单文件体积过大,不仅占用大量磁盘空间,还会导致日志查询和分析效率低下。Log4j2 的RollingFileAppender通过日志滚动机制,按时间、大小等条件自动分割日志文件,是解决这一问题的核心方案。本文详细解析日志滚动的触发策略(TriggeringPolicy)和滚动策略(RolloverStrategy),并结合配置示例说明实战用法。

日志滚动的核心概念

日志滚动的本质是:当满足预设条件时,RollingFileAppender停止向当前日志文件(fileName指定)写入,转而创建新文件继续写入,并对旧文件按规则命名和归档。核心依赖两大组件:

  • 触发策略(TriggeringPolicy):决定 “何时” 触发滚动(如文件达到 1GB、时间到凌晨 0 点);
  • 滚动策略(RolloverStrategy):决定 “如何” 滚动(如旧文件命名规则、保留数量、自动清理)。

触发策略(TriggeringPolicy):何时触发滚动

触发策略定义滚动的触发条件,Log4j2 提供 5 种常用策略,可单独或组合使用(通过<Policies>标签组合)。

1. TimeBasedTriggeringPolicy:基于时间触发(最常用)

核心逻辑:根据日志文件命名格式(filePattern)中的时间粒度,定时触发滚动(如按天、按小时)。

关键特性:
  • 依赖filePattern中的时间占位符(如%d{yyyyMMdd}表示按天,%d{yyyyMMddHH}表示按小时);
  • 滚动时机由时间粒度决定,与日志是否写入无关(即使无日志,到时间也会触发空文件滚动);
  • 支持interval(滚动间隔)和modulate(时间对齐)参数。
配置示例:
阅读全文 »