aguesuka 最近的时间轴更新
aguesuka

aguesuka

V2EX 第 390901 号会员,加入于 2019-03-10 10:32:35 +08:00
分享 Lombok 一个有意思的 Issue
Java  •  aguesuka  •  2022-05-20 21:22:53 PM  •  最后回复来自 ychost
11
如何翻译 "Applies this function to the given argument" 中的 "apply"
问与答  •  aguesuka  •  2021-07-07 16:20:20 PM  •  最后回复来自 Tumblr
8
请教个有向图的算法题
算法  •  aguesuka  •  2021-05-30 09:31:23 AM  •  最后回复来自 aguesuka
8
NIO 里面, SocketChannel.connect 的时候发生了什么?
Java  •  aguesuka  •  2020-02-23 13:54:35 PM  •  最后回复来自 SoloCompany
3
用 Java 撸了一个 yield 的玩具
  •  2   
    Java  •  aguesuka  •  2019-09-07 22:03:12 PM  •  最后回复来自 janus77
    16
    aguesuka 最近回复了
    没测过,不过思路应该没问题

    type Tree = Array<TreeItem>
    type RawNode = {
    id: string
    pid?: string
    prev_id?: string
    next_id?: string
    [key: string]: any
    }
    interface LinkedNode<E> {
    node: E,
    firstChild?: LinkedNode<E>
    nextNode?: LinkedNode<E>
    }

    function toTree<E, K, T>(elements: E[],
    getId: (element: E) => K,
    getParentId: (element: E) => K | undefined,
    getPrevId: (element: E) => K | undefined,
    createTreeNode: (element: E) => T,
    appendChild: (parent: T, child: T) => void): T[] {
    const linkedNodes: Map<K, LinkedNode<T>> = new Map();
    elements.forEach(element => linkedNodes.set(getId(element), {node: createTreeNode(element)}));
    const rootLinkedNode: LinkedNode<T>[] = []
    for (let element of elements) {
    const parentId = getParentId(element);
    const id = getId(element)
    const linkedNode = linkedNodes.get(id)!

    if (parentId) {
    const prevId = getPrevId(element)
    if (prevId) {
    const pervLinkedNode = linkedNodes.get(prevId);
    console.assert(!!pervLinkedNode, `${prevId} is not found`)
    pervLinkedNode!.nextNode = linkedNode
    } else {
    const parentLinkedNode = linkedNodes.get(parentId);
    console.assert(!!parentLinkedNode, `${parentId} is not found`)
    parentLinkedNode!.firstChild = linkedNode
    }
    } else {
    rootLinkedNode.push(linkedNode)
    }
    }
    for (let linkedNode of linkedNodes.values()) {
    for (let child = linkedNode.firstChild; child; child = child.nextNode) {
    appendChild(linkedNode.node, child.node)
    }
    }
    return rootLinkedNode.map(linkedNode => linkedNode.node)
    }


    function test(){
    const raw_nodes = [/**/]
    const rootNodes :Tree = toTree<RawNode, string, RawNode>(raw_nodes,
    node => node.id,
    node => node.pid,
    node => node.prev_id,
    node => {
    node.children = [];
    return node;
    },
    (parent, child) => parent.children.push(child)
    )
    console.info(rootNodes)
    }
    189 天前
    回复了 chengxiao 创建的主题 Linux 生态这玩意儿,还真得看大厂的支持
    虽然但是 v 社就人数来说并不是大厂,而且相当一部分技术员工精力在于游戏制作和游戏本身。所以生态这东西比想象的还要简单。

    所以什么时候 linux 玩炎孕才能播放 cg
    保守主义(英语:conservatism ),是一种旨在促进和保护传统的社会制度和实践的文化、社会和政治哲学。[1][2]保守主义的核心原则因其所处的具体文化和文明的现状( status quo )而有所不同。保守派倾向于支持保证稳定性并逐渐演变的制度和实践[2],经常反对进步主义并寻求回归传统价值观。
    @Biggoldfish 二极管, 只有左右两个极端
    好歹换成 Haskell 吧, 21 世纪了还在用 sum type 代替 product type
    @codehz 借你吉言, 今年 7 月已经超过了
    day2 在播 bad apply
    319 天前
    回复了 unt 创建的主题 程序员 求问 MQTT 和 TCP 透传优劣
    首先透传是什么意思, 比如电表和服务器不直接通信, 而是电表通过电线载波通信到集中器, 再由集中器通信到应用程序. 注意载波通信是利用输电线通信的. 那么电表发给集中器的报文如果直接发送给服务器, 就是透传. 而集中器中途做处理就不是透传.

    抛开集中器的问题 mqtt 的缺点
    1. mqtt 是发布订阅模式, 但是业务模型绝大部分是 rpc 模型.
    2. mqtt 提供的功能看起来很美好, 比如一条消息只发一次, 最少发一次, 实际上没人敢依赖这个特性, 还是要实现幂等, 假设消息丢失.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1762 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 16ms · UTC 16:36 · PVG 00:36 · LAX 09:36 · JFK 12:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.