部分场景与项目实战

《遥感大模型生产级实战:从数据到决策的端到端AI工程》系列第二部分:智慧农业精准监测与产量预测系统项目实战-文章 10:生成式建模:数据增强与病虫害场景仿真 我们将深入浅出地剖析扩散模型的核心原理,从直观的“雕塑家”类比到严谨的数学公式,让读者彻底理解其“从噪声中创造图像”的精妙机制。本章的核心将是一个详尽的、生产级的条件扩散模型架构设计与实现,我们将分步构建一个能够根据作物类型和病害类别生成逼真遥感影像的“AI画家”。我们将提供超过15000行的、带有详尽注释的PyTorch代码,涵盖从U-Net骨干、时间步嵌入、条件机制到完整的训练与推理流程。最后,我们将通过两个高级应用——数据增强和场景仿真,来验证模型的巨大价值。 阅读详情

语雀完整版:

https://www.yuque.com/g/mingrun/embiys/qthuog/collaborator/join?token=GWbvRHnmcZardDoZ&source=doc_collaborator# 《项目实战》

项目实战

延时任务

如何实现延时任务? (qq.com)

  1. 数据库轮询
    • 用定时任务,比如三秒一次,去数据库查是否有过期的订单
    • 优点是简单,缺点是数据量大的话 比如上千万,这样全部扫描一次会有很大的损耗,而且三秒一扫描,那就可能订单过期了三秒才会被扫描到
  1. 使用JDK的延迟队列 DelayQueue
    • 放入该队列的对象要实现 Delayed接口,设置的延迟期满的时候才能被获取到
    • 使用put方法,放入元素并且设置延迟时间,然后使用take方法获取延期元素,如果获取不到就会进行wait
    • 优点是任务没有延低,缺点是宕机了数据就完蛋了
  1. 时间轮算法
    • 假设一个表盘,从第一秒到第六秒划分6格,假设3秒后有个任务要执行,那就把这个任务放到4的位置,而如果是10秒那就要多转一圈,可使用 Netty的HashedWheelTimer来实现
    • 优点是触发延迟 比DelayQueue更低,缺点也是宕机丢数据
  1. 使用Redis
    • 方案一:使用ZSet
      • 相关命令
添加元素:ZADD key score member [[score member] [score member] …]
按顺序查询元素:ZRANGE key start stop [WITHSCORES]
查询元素:score:ZSCORE key member
移除元素:ZREM key member [member …]

      • 放入订单的时候,key随便根据业务表示下,重点是score和member,假设是10秒后执行,那么score也就是排序值 就放10秒后的时间戳,member就放订单号
      • 取订单的时候,定义一个for循环,在循环中按照顺序取一个元素,要是没取到就休眠一会儿,取到了就把它的socre值拿出来,让当前时间戳与其比较,要是大于的话就把当前这个 member删除掉,如果删除成功,说明他还没有被其它的线程消费,那我就可以把这个个消费掉了
    • 方案二:使用键空间机制
      • 在redis2.8版本之后,key失效之后会给客户端发一个回调
  1. 使用消息队列
    • 如rabbit写一个 带过期时间的消息,等消息过期后就会变成死信 进入到死信队列中

抽奖

参考

企业红包雨项目缓存预热&抽奖逻辑核心步骤设计思路总结&资料分享_洺润Star的博客-优快云博客

实现

  1. 业务:可以用到兑吧的抽奖实现上,比如转盘抽奖、红包雨抽奖、普通抽奖、
  1. 缓存
    • 活动开始前1分钟(缓存预热) 将发奖策略放入到缓存中(时间戳从小到大),令牌由(时间戳+随机数)组成,出队时比较时间戳,如果now >时间戳就代表中奖了,否则没中奖,需要重新放回队列。 出队和重新放回队列逻辑由lua脚本完成,在脚本执行期间没有其它命令与其并行

    • 令牌的设计:这里不再使用上述途中k-v结构,令牌直接由三部分组成,第一部分是时间戳,第二部分是发奖策略Id,第三部分是随机数(防止令牌重复)
    • 使用令牌出奖:从令牌中拿到发奖策略,再用发奖策略取出奖品信息(奖品信息也在缓存中存放)
  1. 应用
    • 适用业务场景:
      • 兑吧的转盘抽奖是要配置具体 的抽奖概率,但这里的实现并不支持这个,一个令牌对应一个奖品,只能加大奖品数量,来提高中奖概率
      • 总结:兑吧的抽奖 如果去实现那就是概率抽奖组件,用红包雨这一套实现的就是活动抽奖组件
    • 活动抽奖组件
      • 在活动开始的这段时间内 投放奖品,每个奖品对应一定的数量
      • 时间越短,就意味着流量越大,越是凸显缓存预热的作用
      • 应用
        • 转盘抽奖:从该缓存中获取奖品信息,如果没抽中,就要给一个默认奖品
        • 红包雨抽奖:每一个红包会有一个红包Id,如果抽中奖就会 对应一个令牌
        • 普通营销活动应用:从该缓存中获取奖品信息
  1. 其它细节
    • 缓存预热:缓存默认在活动开始前1分钟加载,如果获取抽奖时没有存储桶那也要加载
    • 令牌均匀分布策略
      • 如果不开启该策略,令牌的生成方式如下所示,可能会造成奖品集中在某个时间段
//活动持续时间(ms)
long duration = end ‐ start;
long rnd = start + new Random().nextInt((int)duration);
//为什么乘1000,再额外加一个随机数呢? ‐ 防止时间段奖品多时重复
long token = rnd * 1000 + new Random().nextInt(999);

      • 均匀分布策略分两种情况
        • 活动总时间,大于一小时,小于一天:比如活动持续时间为 10小时,且奖品数大于10,就会循环奖品列表,把随机 时间戳均匀的在每个时间段内生成
        • 活动总时间,大于一天:比如活动持续时间为 10天,逻辑与上面相同,之不过奖品要均匀分不到这十天里面
    • 时间戳
      • 时间戳一般是 从1970年1月1日(00:00:00GMT)至当前时间的总秒数/毫秒数
      • 获取方式
//当前时间与 UTC 时间 1970 年 1 月 1 日午夜之间的差值(以毫秒为单位)。
System.out.println(System.currentTimeMillis());
//与上面相同
System.out.println(new Date().getTime());

排行榜实现

参考

  1. 资料
    手把手教你使用 Java 和 Redis 实现排行榜! (qq.com)
    好好的 Tair 排行榜不用,非得自己写?20 行代码实现高性能排行榜 (qq.com)
    Redis排行榜功能实现?多排序条件 (qq.com)
  1. 功能(参考星速台)
    • 页面

    • 用例
      • 获取排行耪列表(有名词限制,比如500名)
      • 查询当前用户在第几名
      • 查询排行榜期数信息
      • 查询排行榜发奖配置

实现(Redis Zset)

  1. 使用redis的zet数据结构,它的主要操作如下Redis 有序集合命令

序号

命令及描述

1

[ZADD key score1 member1 score2 member2]

向有序集合添加一个或多个成员,或者更新已存在成员的分数

2

ZCARD key

获取有序集合的成员数

3

ZCOUNT key min max

计算在有序集合中指定区间分数的成员数

4

ZINCRBY key increment member

有序集合中对指定成员的分数加上增量 increment

5

[ZINTERSTORE destination numkeys key key ...]

计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 destination 中

6

ZLEXCOUNT key min max

在有序集合中计算指定字典区间内成员数量

7

[ZRANGE key start stop WITHSCORES]

通过索引区间返回有序集合指定区间内的成员

8

[ZRANGEBYLEX key min max LIMIT offset count]

通过字典区间返回有序集合的成员

9

[ZRANGEBYSCORE key min max WITHSCORES] [LIMIT]

通过分数返回有序集合指定区间内的成员

10

ZRANK key member

返回有序集合中指定成员的索引

11

[ZREM key member member ...]

移除有序集合中的一个或多个成员

12

ZREMRANGEBYLEX key min max

移除有序集合中给定的字典区间的所有成员

13

ZREMRANGEBYRANK key start stop

移除有序集合中给定的排名区间的所有成员

14

ZREMRANGEBYSCORE key min max

移除有序集合中给定的分数区间的所有成员

15

[ZREVRANGE key start stop WITHSCORES]

返回有序集中指定区间内的成员,通过索引,分数从高到低

16

[ZREVRANGEBYSCORE key max min WITHSCORES]

返回有序集中指定分数区间内的成员,分数从高到低排序

17

ZREVRANK key member

返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

18

ZSCORE key member

返回有序集中,成员的分数值

19

[ZUNIONSTORE destination numkeys key key ...]

计算给定的一个或多个有序集的并集,并存储在新的 key 中

20

[ZSCAN key cursor MATCH pattern] [COUNT count]

迭代有序集合中的元素(包括元素成员和元素分值)

  1. 值的设计
    • key(多级索引):
      • 一个key值可分解出多层意思,用 #分割,例如 activityId#7#2#6#16,代表 活动Id为 activityId,后面是活动开始后的对应时间,第七月的第二周的第六天,第16个小时
    • socre
      • 排序值可以使用 比如游戏里面的积分,但如果遇到多个条件,比如奖牌榜需要综合 金牌、银牌、铜牌来排序,这是就需要自行转换,比如金牌对应三个积分值,铜牌对应一个积分值,最终加起来再放入zset中
    • member
      • 使用用户Id
  1. 其它细节
    • 为什么不使用MySQL
      • 首先肯定要在这个排序值上面建立索引,如果有修改或者添加比较频繁,索引也会重建,比较消耗性能
      • 数据量大的时候比较消耗性能

兑吧用户锁与普通锁的实现

用户锁

用途

在星速台的活动中 通过添加注解,和自带的玩法框架为方法加锁,一个方法就是一个操作,加了用户锁之后,用户同一时刻只能 进行一个操作(只能执行其中一个加了用户锁的方法)

实现

UserLock

  • 代码位置:cn.com.duiba.projectx.sdk.utils.UserLock
    • 主要方法有tryLock()和unlock()
    • 解锁要放到try-catch中,且该锁是非可重入锁
    • 锁的默认过期时间是 3s,且默认对预设方法不加锁
  • UserLock是个接口,他在以下类中都有实现


    以ProjectRequestContextImpl为例,该类在一些玩法类中都有使用,比如ScoringPlayway

  • ProjectRequestContextImpl对userLock的实现
@Override
public UserLock getUserLock() {
    if (userLock == null) {
        userLock = new UserLock() {
            private RedisLock lock;
            //锁的key:project+userId
            private String getKey() {
                return "ul_" + getProject().getId() + "_" + getUserId();
            }

            @Override
            public boolean tryLock(int expireSeconds) {
                if (lock != null) {
                    throw new RuntimeException("cann't  tryLock before unlock");
                }
                lock = DuibaService.getRedisAtomicClient().getLock(getKey(), expireSeconds);
                return lock != null;
            }
            @Override
            public void unlock() {
                if (lock != null) {
                    lock.unlock();
                    lock = null;
                }
            }
        };
    }
    return userLock;
}

    • 获取锁的实现
@Component("redisAtomicClient")
public class RedisAtomicClientServiceImpl implements edisAtomiClientService{
    // ...
    @Override
    public RedisLockInner getLock(final String key, long expireSeconds) {
        RedisLock lock = redisAtomicClient.getLock(key, expireSeconds);
        if(lock == null){
            return null;
        }
        return new RedisLockInner(lock);
    }
    // ...
}

      • 其中这里给的最大重试次数和重试等待时间都是0,也就是说用户锁只尝试一次,加锁失败就返回null(false),在playway中就直接返回给用户你的操作过于频繁,请稍后再试

普通锁

用途

  1. 用途是为资源加锁
  1. 使用(代码 cn/com/duiba/project/q1/zhangtao/assist/FreeGetPrizeAssist.java:164)
//声明锁
DistributedLock lock = api.newLock(key, 3);
//尝试加锁
lock.tryLock()
//解锁
lock.unlock();

实现

	DistributedLock newLock(String key, int expireSeconds);

    @Override
    public DistributedLock newLock(String key, int expireSeconds) {
        String realKey = "LK_" + getContext().getProjectId() + "_" + key;
        return lockService.newLock(realKey, expireSeconds);
    }

重点代码如下,提供了两个tryLock和unlock,其中调用的getLock方法,与上面用户锁的getLock是同一个,其中要特别注意最大尝试次数和尝试时间

@Override
    public DistributedLock newLock(String key, int expireSeconds) {
        return new DistributedLock() {
            private RedisLock redisLock;

            @Override
            public boolean tryLock() {
                redisLock = redisAtomicClientService.getLock(key, expireSeconds);
                return Objects.nonNull(redisLock);
            }

            @Override
            public boolean tryLock(int maxRetryTimes, long retryIntervalTimeMillis) {
                redisLock = redisAtomicClientService.getLock(key, expireSeconds, maxRetryTimes, retryIntervalTimeMillis);
                return Objects.nonNull(redisLock);
            }

            @Override
            public void unlock() {
                if (Objects.nonNull(this.redisLock)) {
                    this.redisLock.unlock();
                }
            }
        };
    }

解锁代码

    private static final String COMPARE_AND_DELETE =
            "if redis.call('get',KEYS[1]) == ARGV[1]\n" +
            "then\n" +
            "    return redis.call('del',KEYS[1])\n" +
            "else\n" +
            "    return 0\n" +
            "end";

public void unlock(){
    if(Thread.currentThread().getId() != threadId){
        //只允许创建锁的线程解锁
        throw new IllegalMonitorStateException();
    }
    List<String> keys = Collections.singletonList(key);
    stringRedisTemplate.execute(new DefaultRedisScript<>(COMPARE_AND_DELETE, Long.class), keys, expectedValue);
}

存在的问题

  1. 解锁的时候需要是当前线程才解锁,这里衍生出来两个问题
    • 为什么要保证解锁的是当前线程
      • 假设锁的有效期是30s, A线程执行30秒后还未执行完,此时B线程获取到了锁,B线程在执行过程中 A执行完毕,要释放锁,
        这时如果不对线程进行校检,A线程就会把B的锁给释放掉
      • 注意:上面所说的这个过程没有加看门口机制,看门狗机制是 比如A线程创建一个定时任务(守护线程,每隔一定时间去给锁续期用的)
    • ThreadId问题
      • getId方法如下所示
/**
     * Returns the identifier of this Thread.  The thread ID is a positive
     * {@code long} number generated when this thread was created.
     * The thread ID is unique and remains unchanged during its lifetime.
     * When a thread is terminated, this thread ID may be reused.
     *
     * @return this thread's ID.
     * @since 1.5
     */
public long getId() {
    return tid;
}

      • tid的 值是在构造方法中进行设置的
  private Thread(ThreadGroup g, Runnable target, String name,
                   long stackSize, AccessControlContext acc,
                   boolean inheritThreadLocals) {
     //省略 。。。
        /* Set thread ID */
        this.tid = nextThreadID();
    }

      • 那么这里就出现了问题,如果应用是集群部署,上面的A线程是在 R1机器上运行,B线程是在R2机器上运行,那么他们的threadId就有可能相同
      • 解决办法是,在放入threaId的时候加上uuid
public class GenerateUniqueCode {
    
    public static final String uniqueCode =  UUID.randomUUID().toString();
}

领域驱动

  1. 模型:
    • 模型是对现实世界的抽象,建模有很多种方法,不过最终产出的模型,都应该是以帮助我们 解决问题,理解问题为目的
    • 模型的种类分 物理模型、数学模型、思维模型、概念模型(将现实世界转换为信息时间)
  1. 领域建模(面向对象精髓)
    • 概述:从本质上来说,软件开发过程就是问题空间到解决方案空间的一个映射转化

      • 问题空间就是系统要解决的领域问题,因此,也可以简单理解为一个领域就对应一个问题空间,是一个特定范围边界内的业务需求的总和。
      • 领域模型”就是“解决方案空间”,是针对特定领域里的关键事物及其关系的可视化表现,是为了准确定义需要解决问题而构造的抽象模型,是业务功能场景在软件系统里的映射转化,其目标是为软件系统的构建统一的认知。
        • 例如:
          • 请假系统解决的是人力工时的问题,属于人力资源领域,对口的是HR部门;
          • 费用报销系统解决的是员工和公司之间的财务问题,属于财务领域,对口的是财务部门;
          • 电商平台解决的是网上购物问题,属于电商领域。
          • 可以看出,每个软件系统本质上都解决了特定的问题,属于某一个特定领域,实现了同样的核心业务功能来解决该领域中核心的业务需求。
  1. DDD
    • Domain-Driven Design, 指通过统一语言、业务抽象、领域划分和领域建模等一系列手段来控制软件复杂度的方法论
    • 初步体验DDD(小demo 银行转账)
    • 数据驱动
    • 领域驱动:兑吧的开发流程就是领域驱动的(本人认为),它主要分成下面两个步骤
      • 领域划分:根据需求划分为不同的模块,在我们组叫做划分成不同的玩法或者组件,比如我们现在有一个营销活动,根据需求 我们划分出了 任务组件,定期组件 ,发奖组件,邀请玩法
      • 领域建模:领域划分完成之后 就是领域建模,领域建模一般使用用例分析法,把需求中的关键词给抽离出来,一般写的代码会跟需求非常贴近


热点数据自动统计

  1. 背景:ali tair缓存数据库,对于热点key,由于采用一致性哈希算法,导致同样的key的数据都会 在同一台机器上进行读写,从而有单机的读写瓶颈,tair则提供了 热点数据自动发现的能力

  2. 设想应用:可以结合mysql的 bufferPool中的冷热链表和上图中的技术细节,应用到管控台中,做一个业务场景

Calibre部分提参实战:Hcell与Xcell技巧及常见问题排查 寄生提取是版图验证中的关键环节,直接影响后仿真的精度与效率。在数模混合芯片中,全芯片提参往往耗时过长,因此基于Calibre PEX的部分提参技术成为提升效率的重要手段。其核心原理是通过Hcell、Xcell等层次化控制语句,结合Net和Layer过滤,实现选择性提取。合理运用可大幅缩短提参时间,降低DSPF文件体积,适用于大型SoC中关键模块的验证。然而,Hcell定义不生效、Xcell导致Net缺失等问题频发,需严格遵循规则并交叉验证。本文聚焦Calibre部分提参的实战技巧与常见问题排查,帮助工程师规 阅读详情

相关推荐

UGit v5.37.1 大文件管理实战:Unity 项目 10GB 资源 Git LFS 配置与性能实测

本文详细介绍了UGit v5.37.1在Unity项目中的大文件管理实战,通过Git LFS配置与性能实测,展示了如何高效管理10GB资源文件。UGit的可视化工具和深度优化显著提升了仓库瘦身、操作加速和带宽优化效果,为游戏开发团队提供了企业级解决方案。

weixin_30645617的博客 392

全套百度云教程Python基础进阶项目篇:全面掌握Python实战能力

全套百度云教程Python基础进阶项目篇:全面掌握Python实战能力 【下载地址】全套百度云教程Python基础进阶项目篇 这套Python学习资源为不同层次的学习者提供了全面的教程,涵盖基础、进阶和实战项目三大部分。基础篇从Python语言概述、环境搭建到文件操作与异常处理,帮助初学者快速入门;进阶篇深入讲解面向对象...

gitblog_06756的博客 1073

Java编程深入解析与nix-4项目实战

本文还有配套的精品资源,点击获取 简介:Java是一种广泛使用的面向对象的编程语言,具有简单性、健壮性、安全性、平台独立性和可移植性等特点。本课程深入探讨Java的核心概念,包括语法基础、类库与API使用、内存管理、多线程编程、泛型、反射、注解,以及JVM的运作机制。此外,将通过“nix-4”项目实战,学习模块化系统、Spring框架和Java EE技术在实际开发中的应用。...

weixin_35734408的博客 1983

互联网大厂Java面试全攻略:从基础八股到项目实战

本文通过模拟面试场景,系统梳理了Java面试中的核心知识点,帮助求职者从基础到实战全面准备。技术学习不仅要掌握理论,更要结合实际场景思考解决方案。

qq_35565095的博客 1791

Unity奇幻场景设计与打包项目

Unity3D是一个跨平台的游戏引擎,广泛应用于游戏开发与交互式内容制作。开发者可以使用它创建2D和3D游戏,适用于多种平台,包括PC、游戏机、移动设备和网页。Unity3D的主要优势在于其高效的开发流程,强大的图形渲染能力,以及庞大的开发社区支持。

weixin_30838971的博客 1289

群晖NAS搭建Git Server避坑指南:从SSH配置到权限管理的完整流程

本文提供了一份详尽的群晖NAS搭建Git Server实战指南。文章从启用并安全配置SSH服务入手,深入解析了用户权限体系设计、SSH连接与仓库初始化、客户端SSH密钥配置等核心步骤,并提供了常见错误排查与生产环境加固方案,帮助开发者成功构建私有、安全的代码托管平台。

rock5的博客 419

互联网大厂Java面试全攻略:从八股文到实战场景解析

本文通过面试对话形式,全面解析Java技术栈的面试问题,帮助开发者从基础到实战提升技能。希望对你的面试有所帮助!

qq_35565095的博客 386

采用LM324输出方波、正弦波、三角波

介绍以LM324运放芯片为核心,设计电路连接,实现三角波转化为正弦波,再由正弦波转化为方波输出的简易函数信号发生器的基本功能。本文介绍通过使用NI Multisim 14.0软件仿真模拟搭建所设计的电路,再使用这个软件的示波器进行仿真输出三角波,正弦波,方波。使用软件进行仿真后再到实验室进行调试,将其接入电源,并通过在显示器上观察波形以及数据,得到结果。该电路结构简单,信号的幅度、频率等参数可调,在仿真软件和实验室检测都有较好的性能输出,可替代实验室标准的函数信号发生器完成一般的实验要求。

qq_48771816的博客 7万+

【亲测免费】 深入探索KVM虚拟化技术:实战与原理解析

深入探索KVM虚拟化技术:实战与原理解析 【下载地址】KVM虚拟化技术实战与原理解析分享 KVM虚拟化技术实战与原理解析 项目地址: https://gitcode.com/Open-source-documentation-tu...

gitblog_06618的博客 550

第七章-分布式搜索引擎-ES:全文查询、分词查询、精确查询、地理坐标查询、组合查询(bool、funtion_score)以及RestApi

111

weixin_36580930的博客 1630

AMD MI50 Linux ROCm 6.4 手动编译与大模型推理实战

GPU加速计算是现代AI推理的核心基础,其性能依赖于硬件架构、驱动栈与运行时环境的深度协同。ROCm作为AMD开源GPU计算平台,采用‘自下而上’的Linux生态集成路径,强调对上游内核、编译器与固件的强耦合。MI50基于Vega 20(gfx900)架构,虽具备32GB HBM2高带宽显存与14.7 TFLOPS FP16算力,但因ROCm官方支持策略转向CDNA架构,自6.5版本起被移出支持列表,仅ROCm 6.4仍提供实验性兼容——这使其成为Linux下部署私有大模型的关键‘最后一班船’。本文围绕MI

weixin_32770423的博客 367

hello-javascript高级函数技巧:闭包、柯里化与递归实战指南

JavaScript作为现代Web开发的核心语言,掌握其高级函数技巧是提升编程能力的关键。本文将通过hello-javascript项目中的实战案例,深入解析闭包、柯里化和递归等核心概念,帮助开发者构建更优雅、高效的代码。 ## 🎯 为什么需要学习高级函数技巧? 在JavaScript编程中,高级函数技巧不仅仅是语法糖,它们能够解决实际的开发问题。比如闭包可以创建私有变量,柯里化能够实现函数

gitblog_00929的博客 898

【推荐100个unity插件】unity易于使用模块化设计的天空、体积云和天气系统——Enviro 3

Enviro 3是一款功能强大的Unity天空与天气系统插件,提供动态天空、体积云、天气模拟等丰富功能。安装时需将预制体拖入场景并配置主相机,URP支持需激活深度纹理和添加渲染特性。模块化设计允许自由添加/移除时间、光照、雾效等模块,并通过API控制参数。推荐配合色调映射(如ACES模式)获得最佳视觉效果。插件支持季节、温湿度模拟及闪电风暴等特效,适用于需要逼真环境渲染的Unity项目。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2094

【亲测免费】 IT项目经理成长手记PDF:你的项目管理进阶指南

IT项目经理成长手记PDF:你的项目管理进阶指南 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 《IT项目经理成长手记PDF》是一份专为IT项目管理从业者量身定制的珍贵资源。无论你是初入职场的新人,还是希望在项目管理领域更上一层楼的资深人士,这份文档都将为你提供宝贵的知识和实战经验。本书不仅涵盖了IT项目管理的核心概念和流程,还结合了众多行业专家的真实案例,帮助读者在...

gitblog_06667的博客 593

SAP-ABAP: BP主数据完全指南:从基础到高阶应用

SAP-ABAP: BP主数据完全指南:从基础到高阶应用

baidu_35680696的博客 1647

华为校招&实习&留学生机试真题目录+算法分类+在线OJ+通过率+视频讲解

全网最新最全华为校招&实习&留学生机试真题题库

m0_73659489的博客 6866

互联网大厂Java面试全攻略:从基础八股到项目实战的深度解析

本文通过模拟面试场景,从基础到实战,全面覆盖Java技术栈的核心知识点,帮助读者系统准备大厂面试。

qq_35565095的博客 750

Spring AI Alibaba实战训练营-05模型输出质量评估

本文介绍了使用Spring AI Alibaba库评估AI模型输出质量的方案。项目通过5种评估器实现自动化评估:相关性评估、事实准确性评估、答案相关性评分、答案正确性评估和忠实度评估。开发步骤包括环境准备(Java 17、Maven、API Key获取)、创建Maven项目、配置Spring AI(通过环境变量安全设置API Key)以及实现RAG流程。重点强调了通过评估器自动检测AI输出的质量指标,帮助开发者优化AI应用性能。

program哲学 217

web-basics实战指南:如何利用场景题提升前端开发能力

web-basics是一个专注于大厂前端所需JS基础能力的开源项目,汇集了丰富的大厂场景题和面试真题,帮助开发者系统提升前端开发技能。通过实战场景题练习,开发者可以快速掌握前端核心知识点,轻松应对面试挑战。 ## 为什么场景题是提升前端能力的关键? 在前端开发领域,理论知识固然重要,但实际应用能力才是衡量开发者水平的核心标准。大厂场景题正是连接理论与实践的桥梁,它模拟了真实工作中可能遇到的各种

gitblog_00026的博客 661

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【C#基础:第七部分 实战提升】综合项目实战

摘要:文围绕 C# 综合项目实战展开,涵盖控制台应用开发、类库设计与单元测试、简单的 API 服务构建等内容。通过详细的实操流程和完整代码示例,帮助读者深入理解并掌握在不同场景下运用 C# 进行项目开发的方法。此外,附录部分提供了 C# 编码规范与最佳实践、常用 .NET 类库速查、学习资源推荐以及 C# 版本特性对照表,为读者进一步学习和实践提供了全面的参考。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1538

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

第七部分:Rust 项目实战

本部分通过两个实际项目案例展示 Rust 的应用场景与实现细节。第一个项目是命令行工具,演示如何解析命令行参数并处理文件内容;第二个项目是构建一个简单的 Web 服务,展示 Rust 在网络开发中的强大能力。通过两个实际项目案例,你学会了如何使用 Rust 开发命令行工具和 Web 服务。Rust 的工具链和框架生态在实际开发中表现出了高效和安全的特性。下一部分将介绍 Rust 的性能优化和进阶技术,包括宏、测试和调试工具。目标:开发一个 Rust 命令行工具,用于统计文本文件中的单词数量。

底层软件设计内幕 1206

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

理解bind与call,apply区别及其在实际项目中部分场景的运用

总结bind与call、apply的区别,并举出实际项目中的部分场景的运用~

yolo0927的前端学习之路 6819

Makefile实战教程:项目的核心功能/场景

Makefile实战教程:项目的核心功能/场景 去发现同类优质开源项目:https://gitcode.com/ 《Makefile实战教程》 项目介绍 在软件开发领域,自动化构建是提高效率、保证项目质量的关键环节。Makefile作为Linux环境下的一种构建工具,已经成为了项目管理中不可或缺的配置文件。本次推荐的《Makefile实战教程》项目,为您提供了一份全面而详尽的Makefile使用指...

gitblog_06785的博客 1069

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 42
上一篇: lambda&stream深入剖析
下一篇: 设置线程池参数
金心靖晨
博客等级 码龄9年 460粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值