哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

還在自己實(shí)現(xiàn)責(zé)任鏈?我建議你造輪子之前先看看這個(gè)開(kāi)源項(xiàng)目

京東云 ? 來(lái)源:jf_75140285 ? 作者:jf_75140285 ? 2024-09-20 14:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. 前言

設(shè)計(jì)模式在軟件開(kāi)發(fā)中被廣泛使用。通過(guò)使用設(shè)計(jì)模式,開(kāi)發(fā)人員可以更加高效地開(kāi)發(fā)出高質(zhì)量的軟件系統(tǒng),提高代碼的可讀性、可維護(hù)性和可擴(kuò)展性。

責(zé)任鏈模式是一種常用的行為型設(shè)計(jì)模式,它將請(qǐng)求沿著處理鏈進(jìn)行發(fā)送,直到其中一個(gè)處理者對(duì)請(qǐng)求進(jìn)行處理為止。在責(zé)任鏈模式中,通常會(huì)有多個(gè)處理者,每個(gè)處理者都有一個(gè)處理請(qǐng)求的方法。當(dāng)一個(gè)請(qǐng)求到達(dá)處理鏈的起點(diǎn)時(shí),會(huì)依次傳遞給每個(gè)處理者進(jìn)行處理,直到某個(gè)處理者能夠處理該請(qǐng)求。這樣可以保證每個(gè)請(qǐng)求都能被處理,并且可以根據(jù)實(shí)際情況動(dòng)態(tài)地添加或刪除處理者,以滿足不同的需求。

責(zé)任鏈模式可以幫助降低系統(tǒng)的耦合度,增加系統(tǒng)的靈活性和可擴(kuò)展性,其在SpringMVC、Netty等許多框架中均有實(shí)現(xiàn)。責(zé)任鏈模式常用于以下場(chǎng)景:處理復(fù)雜的請(qǐng)求邏輯,例如權(quán)限驗(yàn)證、日志記錄等;避免請(qǐng)求發(fā)送者和接收者之間的耦合關(guān)系;動(dòng)態(tài)地組織處理流程,以適應(yīng)不同的請(qǐng)求類型和復(fù)雜度。

我們?cè)谌粘i_(kāi)發(fā)中如果要使用責(zé)任鏈模式,通常需要自己來(lái)實(shí)現(xiàn),但自己臨時(shí)實(shí)現(xiàn)的責(zé)任鏈既不通用,也很容易產(chǎn)生框架與業(yè)務(wù)代碼耦合不清等問(wèn)題,增加Code Review 的成本。

Netty的代碼向來(lái)以優(yōu)雅著稱,早年我在閱讀Netty的源碼時(shí),萌生出將其責(zé)任鏈的實(shí)現(xiàn)應(yīng)用到業(yè)務(wù)開(kāi)發(fā)中的想法,之后花了點(diǎn)時(shí)間將Netty中責(zé)任鏈的實(shí)現(xiàn)代碼抽取出來(lái),形成了本項(xiàng)目,也就是pie。pie的核心代碼均來(lái)自Netty,絕大部分的 API 與 Netty 是一致的。

pie 是一個(gè)可快速上手的責(zé)任鏈框架,開(kāi)發(fā)者只需要專注業(yè)務(wù),開(kāi)發(fā)相應(yīng)的業(yè)務(wù)Handler,即可完成業(yè)務(wù)的責(zé)任鏈落地。

一分鐘學(xué)會(huì)、三分鐘上手、五分鐘應(yīng)用,歡迎 star。

pie 源碼地址:https://github.com/feiniaojin/pie.git

pie 案例工程源碼地址:https://github.com/feiniaojin/pie-example.git

2. 快速入門(mén)

2.1 引入 maven 依賴

pie 目前已打包發(fā)布到 maven 中央倉(cāng)庫(kù),開(kāi)發(fā)者可以直接通過(guò) maven 坐標(biāo)將其引入到項(xiàng)目中。


    com.feiniaojin.ddd.ecosystem
    pie
    1.0

目前最新的版本是 1.0

2.2 實(shí)現(xiàn)出參工廠

出參也就是執(zhí)行結(jié)果,一般的執(zhí)行過(guò)程都要求有執(zhí)行結(jié)果返回。實(shí)現(xiàn) OutboundFactory 接口,用于產(chǎn)生接口默認(rèn)返回值。

例如:

public class OutFactoryImpl implements OutboundFactory {
    @Override
    public Object newInstance() {
        Result result = new Result();
        result.setCode(0);
        result.setMsg("ok");
        return result;
    }
}

2.3 實(shí)現(xiàn) handler 接口完成業(yè)務(wù)邏輯

在 pie 案例工程( https://github.com/feiniaojin/pie-example.git )的 Example1 中,為了展示 pie 的使用方法,實(shí)現(xiàn)了一個(gè)虛擬的業(yè)務(wù)邏輯:CMS類項(xiàng)目修改文章標(biāo)題、正文,大家不要關(guān)注修改操作放到兩個(gè) handler 中是否合理,僅作為講解案例。

三個(gè) Handler 功能如下:

CheckParameterHandler:用于參數(shù)校驗(yàn)。

ArticleModifyTitleHandler:用于修改文章的標(biāo)題。

ArticleModifyContentHandler:用于修改文章的正文。

CheckParameterHandler 的代碼如下:

public class CheckParameterHandler implements ChannelHandler {

    private Logger logger = LoggerFactory.getLogger(CheckParameterHandler.class);

    @Override
    public void channelProcess(ChannelHandlerContext ctx,
                               Object in,
                               Object out) throws Exception {

        logger.info("參數(shù)校驗(yàn):開(kāi)始執(zhí)行");

        if (in instanceof ArticleTitleModifyCmd) {
            ArticleTitleModifyCmd cmd = (ArticleTitleModifyCmd) in;
            String articleId = cmd.getArticleId();
            Objects.requireNonNull(articleId, "articleId不能為空");
            String title = cmd.getTitle();
            Objects.requireNonNull(title, "title不能為空");
            String content = cmd.getContent();
            Objects.requireNonNull(content, "content不能為空");
        }
        logger.info("參數(shù)校驗(yàn):校驗(yàn)通過(guò),即將進(jìn)入下一個(gè)Handler");
        ctx.fireChannelProcess(in, out);
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx,
                                Throwable cause,
                                Object in,
                                Object out) throws Exception {
        logger.error("參數(shù)校驗(yàn):異常處理邏輯", cause);
        Result re = (Result) out;
        re.setCode(400);
        re.setMsg("參數(shù)異常");
    }
}

ArticleModifyTitleHandler 的代碼如下:

public class ArticleModifyTitleHandler implements ChannelHandler {

    private Logger logger = LoggerFactory.getLogger(ArticleModifyTitleHandler.class);

    @Override
    public void channelProcess(ChannelHandlerContext ctx,
                               Object in,
                               Object out) throws Exception {

        logger.info("修改標(biāo)題:進(jìn)入修改標(biāo)題的Handler");

        ArticleTitleModifyCmd cmd = (ArticleTitleModifyCmd) in;

        String title = cmd.getTitle();
        //修改標(biāo)題的業(yè)務(wù)邏輯
        logger.info("修改標(biāo)題:title={}", title);

        logger.info("修改標(biāo)題:執(zhí)行完成,即將進(jìn)入下一個(gè)Handler");
        ctx.fireChannelProcess(in, out);
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx,
                                Throwable cause,
                                Object in,
                                Object out) throws Exception {
        logger.error("修改標(biāo)題:異常處理邏輯");
        Result re = (Result) out;
        re.setCode(1501);
        re.setMsg("修改標(biāo)題發(fā)生異常");
    }
}

ArticleModifyContentHandler 的代碼如下:

public class ArticleModifyContentHandler implements ChannelHandler {

    private Logger logger = LoggerFactory.getLogger(ArticleModifyContentHandler.class);

    @Override
    public void channelProcess(ChannelHandlerContext ctx,
                               Object in,
                               Object out) throws Exception {

        logger.info("修改正文:進(jìn)入修改正文的Handler");
        ArticleTitleModifyCmd cmd = (ArticleTitleModifyCmd) in;
        logger.info("修改正文,content={}", cmd.getContent());
        logger.info("修改正文:執(zhí)行完成,即將進(jìn)入下一個(gè)Handler");
        ctx.fireChannelProcess(in, out);
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx,
                                Throwable cause,
                                Object in,
                                Object out) throws Exception {

        logger.error("修改標(biāo)題:異常處理邏輯");

        Result re = (Result) out;
        re.setCode(1502);
        re.setMsg("修改正文發(fā)生異常");
    }
}

2.4 通過(guò) BootStrap 拼裝并執(zhí)行

public class ArticleModifyExample1 {

    private final static Logger logger = LoggerFactory.getLogger(ArticleModifyExample1.class);

    public static void main(String[] args) {
        //構(gòu)造入?yún)?        ArticleTitleModifyCmd dto = new ArticleTitleModifyCmd();
        dto.setArticleId("articleId_001");
        dto.setTitle("articleId_001_title");
        dto.setContent("articleId_001_content");

        //創(chuàng)建引導(dǎo)類
        BootStrap bootStrap = new BootStrap();

        //拼裝并執(zhí)行
        Result result = (Result) bootStrap
                .inboundParameter(dto)//入?yún)?                .outboundFactory(new ResultFactory())//出參工廠
                .channel(new ArticleModifyChannel())//自定義channel
                .addChannelHandlerAtLast("checkParameter", new CheckParameterHandler())//第一個(gè)handler
                .addChannelHandlerAtLast("modifyTitle", new ArticleModifyTitleHandler())//第二個(gè)handler
                .addChannelHandlerAtLast("modifyContent", new ArticleModifyContentHandler())//第三個(gè)handler
                .process();//執(zhí)行
        //result為執(zhí)行結(jié)果
        logger.info("result:code={},msg={}", result.getCode(), result.getMsg());
    }
}

2.5 執(zhí)行結(jié)果

以下是運(yùn)行 ArticleModifyExample1 的 main 方法打出的日志,可以看到我們定義的 handler 被逐個(gè)執(zhí)行了。

wKgaombtGFuAFlFjAAMfA3tGG9c190.png

3. 異常處理

3.1 Handler 異常處理

當(dāng)某個(gè)Handler執(zhí)行發(fā)生異常時(shí),我們可將其異常處理邏輯實(shí)現(xiàn)在當(dāng)前 Handler 的 exceptionCaught 方法中。

在 pie 案例工程( https://github.com/feiniaojin/pie-example.git )的 example2 包中,展示了某個(gè) Handler 拋出異常時(shí)的處理方式。

假設(shè) ArticleModifyTitleHandler 的業(yè)務(wù)邏輯會(huì)拋出異常,實(shí)例代碼如下:

public class ArticleModifyTitleHandler implements ChannelHandler {

    private Logger logger = LoggerFactory.getLogger(ArticleModifyTitleHandler.class);

    @Override
    public void channelProcess(ChannelHandlerContext ctx,
                               Object in,
                               Object out) throws Exception {

        logger.info("修改標(biāo)題:進(jìn)入修改標(biāo)題的Handler");
        ArticleTitleModifyCmd cmd = (ArticleTitleModifyCmd) in;
        String title = cmd.getTitle();
        //此處的異常用于模擬執(zhí)行過(guò)程中出現(xiàn)異常的場(chǎng)景
        throw new RuntimeException("修改title發(fā)生異常");
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx,
                                Throwable cause,
                                Object in,
                                Object out) throws Exception {
        logger.error("修改標(biāo)題:異常處理邏輯");
        Result re = (Result) out;
        re.setCode(1501);
        re.setMsg("修改標(biāo)題發(fā)生異常");
    }
}

此時(shí) ArticleModifyTitleHandler 的 channelProcess 方法一定會(huì)拋出異常, 在當(dāng)前 Handler 的 exceptionCaught 方法中對(duì)異常進(jìn)行了處理。

運(yùn)行 ArticleModifyExample2 的 main 方法,輸出如下:

wKgaombtGGeAdo9GAAHqAaCzzZs111.png

3.2 全局異常處理

有時(shí)候,我們不想每個(gè) handler 都處理一遍異常,我們希望在執(zhí)行鏈的最后統(tǒng)一進(jìn)行處理。
在 ArticleModifyExample3 中,我們展示了通過(guò)一個(gè)全局異常進(jìn)行最后的異常處理,其實(shí)現(xiàn)主要分為以下幾步:

3.2.1 業(yè)務(wù) Handler 傳遞異常

如果業(yè)務(wù) Handler 實(shí)現(xiàn)了 ChannelHandler 接口,那么需要手工調(diào)用 ctx.fireExceptionCaught 方法向下傳遞異常。
例如 CheckParameterHandler 捕獲到異常時(shí)的示例如下:


@Override
public class XXXHandler implements ChannelHandler {

    //省略其他邏輯

    //異常處理
    public void exceptionCaught(ChannelHandlerContext ctx,
                                Throwable cause,
                                Object in,
                                Object out) throws Exception {

        logger.info("參數(shù)校驗(yàn)的異常處理邏輯:不處理直接向后傳遞");
        ctx.fireExceptionCaught(cause, in, out);
    }
}

如果業(yè)務(wù) Handler 繼承了 ChannelHandlerAdapter,如果沒(méi)有重寫(xiě) fireExceptionCaught 方法,則默認(rèn)將異常向后傳遞。

3.2.2 實(shí)現(xiàn)全局異常處理的 Handler

我們把業(yè)務(wù)異常處理邏輯放到最后的 Handler 中進(jìn)行處理,該 Handler 繼承了ChannelHandlerAdapter,只需要重寫(xiě)異常處理的exceptionCaught
方法。
示例代碼如下:

public class ExceptionHandler extends ChannelHandlerAdapter {

    private Logger logger = LoggerFactory.getLogger(ExceptionHandler.class);

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx,
                                Throwable cause,
                                Object in,
                                Object out) throws Exception {

        logger.error("異常處理器中的異常處理邏輯");
        Result re = (Result) out;
        re.setCode(500);
        re.setMsg("系統(tǒng)異常");
    }
}

3.2.3 將 ExceptionHandler 加入到執(zhí)行鏈中

直接通過(guò) BootStrap 加入到執(zhí)行鏈最后即可,示例代碼如下:


public class ArticleModifyExample3 {

    private final static Logger logger = LoggerFactory.getLogger(ArticleModifyExample3.class);

    public static void main(String[] args) {
        //入?yún)?        ArticleTitleModifyCmd dto = new ArticleTitleModifyCmd();
        dto.setArticleId("articleId_001");
        dto.setTitle("articleId_001_title");
        dto.setContent("articleId_001_content");
        //創(chuàng)建引導(dǎo)類
        BootStrap bootStrap = new BootStrap();

        Result result = (Result) bootStrap
                .inboundParameter(dto)//入?yún)?                .outboundFactory(new ResultFactory())//出參工廠
                .channel(new ArticleModifyChannel())//自定義channel
                .addChannelHandlerAtLast("checkParameter", new CheckParameterHandler())//第一個(gè)handler
                .addChannelHandlerAtLast("modifyTitle", new ArticleModifyTitleHandler())//第二個(gè)handler
                .addChannelHandlerAtLast("modifyContent", new ArticleModifyContentHandler())//第三個(gè)handler
                .addChannelHandlerAtLast("exception", new ExceptionHandler())//異常處理handler
                .process();//執(zhí)行
        //result為執(zhí)行結(jié)果
        logger.info("result:code={},msg={}", result.getCode(), result.getMsg());
    }
}

3.2.4 運(yùn)行 ArticleModifyExample3

運(yùn)行 ArticleModifyExample3 的 main 方法,控制臺(tái)輸出如下,可以看到異常被傳遞到最后的 ExceptionHandler 中進(jìn)行處理。

wKgZombtGGmAT1MbAAKoayl5eCE437.png

4. 總結(jié)

本文通過(guò)簡(jiǎn)單的例子,向讀者介紹了如何使用pie框架快速進(jìn)行責(zé)任鏈模式開(kāi)發(fā),包括責(zé)任鏈初始化和異常處理等日常開(kāi)發(fā)中常見(jiàn)的場(chǎng)景。讀者可以參考這些案例,并將pie框架應(yīng)用于實(shí)際開(kāi)發(fā)中,以快速實(shí)現(xiàn)通用的責(zé)任鏈模式,最終降低代碼的耦合度、增加代碼的可擴(kuò)展性和提高代碼的可讀性。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9595

    瀏覽量

    157599
  • 開(kāi)源
    +關(guān)注

    關(guān)注

    3

    文章

    4339

    瀏覽量

    46431
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    689

    瀏覽量

    31474
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    微型遙控賽車開(kāi)源項(xiàng)目介紹

    給各位電子 DIY 與遙控模型愛(ài)好者分享一款超有創(chuàng)意的開(kāi)源項(xiàng)目:微型遙控賽車。把經(jīng)典游戲《馬力歐賽車》的核心互動(dòng)機(jī)制搬到現(xiàn)實(shí),小車通過(guò)板載傳感器識(shí)別賽道道具,自動(dòng)實(shí)現(xiàn)加速、打轉(zhuǎn)、減速
    的頭像 發(fā)表于 04-22 13:47 ?34次閱讀
    微型遙控賽車<b class='flag-5'>開(kāi)源</b><b class='flag-5'>項(xiàng)目</b>介紹

    就是那個(gè)32歲還在點(diǎn)點(diǎn)點(diǎn)的測(cè)試狗!

    2019年入行,如果問(wèn)我有沒(méi)有后悔選測(cè)試這條路,說(shuō)實(shí)話,有也沒(méi)有。工作前兩年幾乎是在混日子,完全沒(méi)方向,機(jī)械點(diǎn)點(diǎn)點(diǎn)、提bug,和現(xiàn)在剛?cè)胄械男氯藳](méi)太大差別。那個(gè)階段沒(méi)有成長(zhǎng)、也沒(méi)思考,腦子里沒(méi)有
    的頭像 發(fā)表于 12-12 10:02 ?434次閱讀
    <b class='flag-5'>我</b>就是那個(gè)32歲<b class='flag-5'>還在</b>點(diǎn)點(diǎn)點(diǎn)的測(cè)試狗!

    開(kāi)源鴻蒙項(xiàng)目順利孵化畢業(yè)

    2025年11月21日,2025開(kāi)放原子開(kāi)發(fā)者大會(huì)在北京隆重啟幕。作為本次大會(huì)的重磅環(huán)節(jié)和核心焦點(diǎn)之一,在大會(huì)開(kāi)幕式上,開(kāi)放原子開(kāi)源基金會(huì)(以下簡(jiǎn)稱“基金會(huì)”)宣布開(kāi)源鴻蒙項(xiàng)目達(dá)成開(kāi)源
    的頭像 發(fā)表于 11-27 14:36 ?696次閱讀

    【社區(qū)之星】歐小龍——保護(hù)的好奇心:它是所有創(chuàng)造力的源泉

    的時(shí)候會(huì)看重些什么呢?應(yīng)屆生和有兩、三年左右工作經(jīng)驗(yàn)人有什么側(cè)重點(diǎn)呢? @ouxiaolong: 從的經(jīng)歷來(lái)看,一個(gè)項(xiàng)目通常不是按部就班地完成的,需要靈光一閃的瞬間,抓住腦海里蹦出的小火花
    發(fā)表于 11-26 16:31

    開(kāi)源鴻蒙項(xiàng)目達(dá)成開(kāi)源孵化目標(biāo)順利畢業(yè)

    11月21日,2025開(kāi)放原子開(kāi)發(fā)者大會(huì)在北京隆重啟幕。作為本次大會(huì)的重磅環(huán)節(jié)和核心焦點(diǎn)之一,在大會(huì)開(kāi)幕式上,開(kāi)源鴻蒙項(xiàng)目達(dá)成開(kāi)源孵化目標(biāo)、順利畢業(yè),這是項(xiàng)目
    的頭像 發(fā)表于 11-25 17:36 ?1254次閱讀

    開(kāi)源鴻蒙和開(kāi)源歐拉成為開(kāi)放原子開(kāi)源基金會(huì)首批畢業(yè)項(xiàng)目

    11月21日,在2025開(kāi)放原子開(kāi)發(fā)者大會(huì)開(kāi)幕式上,開(kāi)放原子開(kāi)源基金會(huì)宣布旗下開(kāi)源鴻蒙(OpenHarmony)與開(kāi)源歐拉(openEuler)成為首批畢業(yè)項(xiàng)目。
    的頭像 發(fā)表于 11-25 17:22 ?963次閱讀

    僅花1塊樂(lè)鑫科技ESP32-S3開(kāi)發(fā)板,竟在家實(shí)現(xiàn)了魚(yú)缸水質(zhì)監(jiān)測(cè)自由?!代碼開(kāi)源!啟明云端樂(lè)鑫代理

    上期我們的智能魚(yú)缸已經(jīng)成功實(shí)現(xiàn)了自動(dòng)水循環(huán)功能,水“活”起來(lái)了:偷懶神器?用樂(lè)鑫科技ESP32-S3開(kāi)發(fā)板做了個(gè)會(huì)自己養(yǎng)魚(yú)的智能魚(yú)缸!低成本開(kāi)源!那本期我們就來(lái)完成上期留下的“作業(yè)”
    的頭像 發(fā)表于 11-20 18:02 ?2185次閱讀
    僅花1塊樂(lè)鑫科技ESP32-S3開(kāi)發(fā)板,<b class='flag-5'>我</b>竟在家<b class='flag-5'>實(shí)現(xiàn)</b>了魚(yú)缸水質(zhì)監(jiān)測(cè)自由?!代碼<b class='flag-5'>開(kāi)源</b>!啟明云端樂(lè)鑫代理

    開(kāi)源RISC-V處理器(蜂鳥(niǎo)E203)學(xué)習(xí)(二)修改FPGA綜合環(huán)境(移植到自己的Xilinx FPGA板卡)

    ;quot;拷入到虛擬機(jī)的共享目錄下,這個(gè)操作可以參考之前的文章:搭建屬于自己的數(shù)字IC EDA環(huán)境(三):Centos7安裝EDA(vcs2018、verdi2018等)IC工具以
    發(fā)表于 10-31 08:46

    了一臺(tái)‘迷你 Switch’,還能自己寫(xiě)游戲!

    問(wèn)題來(lái)了——能不能用極低的成本,整出一臺(tái)性能強(qiáng)勁、畫(huà)質(zhì)清晰、手感流暢的掌上游戲機(jī)?可以很負(fù)責(zé)任地告訴:能,而且做出來(lái)了!今天的主角就是——啟明云端ESP32-
    的頭像 發(fā)表于 08-12 18:05 ?818次閱讀
    <b class='flag-5'>我</b><b class='flag-5'>造</b>了一臺(tái)‘迷你 Switch’,還能<b class='flag-5'>自己</b>寫(xiě)游戲!

    開(kāi)放原子開(kāi)源基金會(huì)與新一批開(kāi)源項(xiàng)目完成捐贈(zèng)簽約

    近日,在2025開(kāi)放原子開(kāi)源生態(tài)大會(huì)開(kāi)幕式上,開(kāi)放原子開(kāi)源基金會(huì)與新一批開(kāi)源項(xiàng)目完成捐贈(zèng)簽約,涵蓋人工智能、具身智能、基礎(chǔ)軟件、區(qū)塊等多個(gè)
    的頭像 發(fā)表于 07-28 17:04 ?1132次閱讀

    2025開(kāi)放原子開(kāi)源生態(tài)大會(huì)亮點(diǎn)搶先看

    2025年,從“開(kāi)源VS閉源”的激烈交鋒到軟件供應(yīng)安全危機(jī),再到企業(yè)數(shù)字化轉(zhuǎn)型浪潮中開(kāi)源的挑戰(zhàn),“開(kāi)源”始終占據(jù)C位,開(kāi)源產(chǎn)業(yè)也呈現(xiàn)出一系
    的頭像 發(fā)表于 07-23 10:01 ?1156次閱讀

    這個(gè)夏天,用代碼定義的硬核實(shí)力!RT-Thread開(kāi)源之夏重磅來(lái)襲

    還在為簡(jiǎn)歷項(xiàng)目發(fā)愁?想和業(yè)界大牛零距離交流?渴望讓自己的代碼跑在千萬(wàn)級(jí)設(shè)備上?今年,RT-Thread再次加入開(kāi)源之夏,帶來(lái)了四個(gè)有趣又有挑戰(zhàn)的項(xiàng)目
    的頭像 發(fā)表于 05-23 16:06 ?942次閱讀
    <b class='flag-5'>這個(gè)</b>夏天,用代碼定義<b class='flag-5'>你</b>的硬核實(shí)力!RT-Thread<b class='flag-5'>開(kāi)源</b>之夏重磅來(lái)襲

    51單片機(jī)筆記(建議收藏!)

    任何一個(gè)事物,最好把握它的本質(zhì)。對(duì)于各個(gè)各樣的嵌入式微處理器產(chǎn)品,實(shí)際上用一頁(yè)紙就可以把本質(zhì)的脈絡(luò)說(shuō)清楚。有這么神奇,嗯...也是自己總結(jié)的,大家可以看看,加以斧正。 8位和32位機(jī)都可以看成是“內(nèi)核
    發(fā)表于 05-21 17:24

    開(kāi)源力量!樹(shù)莓派與 AI 聯(lián)手構(gòu)建智能城市監(jiān)控!

    用樹(shù)莓派規(guī)劃的早晨通勤。如果打算出門(mén),看看你所在地區(qū)的天氣和交通報(bào)告也無(wú)妨。但是如果能獲取更具體的數(shù)據(jù)呢?這就是開(kāi)發(fā)者Glossyio開(kāi)發(fā)這個(gè)很酷的RaspberryPi
    的頭像 發(fā)表于 05-10 08:35 ?598次閱讀
    <b class='flag-5'>開(kāi)源</b>力量!樹(shù)莓派與 AI 聯(lián)手構(gòu)建智能城市監(jiān)控!

    在構(gòu)建自動(dòng)布線工具之前我會(huì)告訴自己的13件事

    在為 tscircuit(一款用TypeScript編寫(xiě)的開(kāi)源電子CAD內(nèi)核)開(kāi)發(fā)自動(dòng)布線工具上耗費(fèi)了約一年時(shí)間。如果能回到一年前,以下是我會(huì)告訴自己的13件事: 一個(gè)鍵盤(pán)項(xiàng)目自動(dòng)布
    的頭像 發(fā)表于 05-08 11:20 ?1375次閱讀
    在構(gòu)建自動(dòng)布線工具<b class='flag-5'>之前</b>我會(huì)告訴<b class='flag-5'>自己</b>的13件事
    温宿县| 嘉义县| 永顺县| 石棉县| 巴青县| 大英县| 惠来县| 都昌县| 西乌珠穆沁旗| 蒲城县| 金沙县| 浏阳市| 民县| 淳安县| 大兴区| 垫江县| 永嘉县| 区。| 宁陵县| 和平区| 从化市| 岢岚县| 隆昌县| 苏尼特左旗| 岐山县| 浦江县| 井研县| 中阳县| 新田县| 娱乐| 卢氏县| 海原县| 九江市| 沐川县| 襄垣县| 霞浦县| 犍为县| 沙雅县| 木兰县| 青岛市| 梓潼县|