什么是鸭子类型(duck typing)

1 duck type

“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。

duck-type

比如在 python 中,有很多 file-like 的东西,比如 StringIO, GzipFile, socket; 它们有很多相同的方法,我们把它们当作文件使用。

……

阅读全文

浅谈微服务架构、大数据技术

1 微服务架构现状及原理 目前 SpringCloud、Dubbo等微服务主流开发框架盛行, Spring Cloud 也被开发者认为是最好的开发框架;越来越多的单体应用架构向微服务化转变。微服务化与容器技术相辅相成,容器技术的成熟为微服务提供了得天独厚的客观条件。轻量化的容器是微服务的最佳运行环境,微服务应用在容器环境下等到了运维效率的提升。 其中: 微服务化主要是对单体应用功能解耦。 1.1 微服务架构优点 通过分解单体应用为多个微服务的方式降低了单体应用的复杂度。每个服务通过rpc或者消息驱动的api定义清楚边界。微服务模式为单体式……

阅读全文

五种 IO 模型

1 Preface 同步 (synchronous IO) 和异步 (asynchronous) IO,阻塞 (blocking) IO和非阻塞(non-blocking) IO分别是什么,到底有什么区别? 这个问题不同的人给出的答案可能不同。为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。 我们这里讨论的背景是Linux环境下的network IO, 本文参考 Richard Stevens 2003 年的传世之作 1 ,如果英文够好的话,推荐直接阅读。Stevens的文风是有名的深入浅出,所以不用担心看不懂。 2 五种 I/O 模型 blocking I/O nonblocking I/O I/O multiplexing (select and poll) signal driven I/O (SIGIO) asynchronous I/O (the POSIX aio_functions) 再说一下IO发生时涉及的对象和步骤。 对于一个net……

阅读全文

Red Black Tree (01)

1 BST BST (Binary Search Tree) 二叉搜索树, 在key 恰好有序的时候,会退化成链表。 Conclusion BST 的查询复杂度取决于树的高度, 树的高度即最大比较次数。 一棵具有 N 个 node 的 BST 树高(height)取值范围为:logN ≤ height ≤ N 因此,BST越平衡,在树中查找的时间就越短,连带地插入,删除也会变得效率更高。 红黑树的特征 红黑树(RBT)是节点涂了「颜色」的二分搜索树(BST),借助颜色控制,能够保证在 RBT 中,最长路径(path)不会超过最短路径的2倍(若最短的路径是5,最长的路径至多只能是10),如此,RBT便能够近似地视为平衡,如下图: 上图:……

阅读全文

Multithreading-with-ZeroMQ

本文翻译自ZeroMQ文档的一小部分内容, 该段落提供了解决多线程问题的一个绝佳方式。 这是前辈30多年的并发编程经验之谈! 点击阅读原文:Multithreading-with-ZeroMQ Preface ZeroMQ(又称为ØMQ,0MQ,或zmq)看起来像一个可嵌入的网络编程库, 但用起来更像是一个并发框架。 它为你提供的套接字(sockets), 能以进程间, 进程内, TCP 和多播等多种方式传输原子消息。 你可以用fan-out, pub-sub, 任务分发, 和 req-rep 等多种模式, 给套接字建立多对多的连接。 它速度之快足以构建集群产品。 它的异步I……

阅读全文

Zookeeper+Kafka集群搭建方案

Preface Zookeeper是一个高性能分布式应用协调服务 Naming Service 配置管理 Leader Election 服务发现 同步 Group Service Barrier 分布式队列(其实zookeeper并不适合作为分布式队列,性能不高只不过在特定场合可以) 两阶段提交 Zookeeper工作方式 Zookeeper集群包含一个1个Leader,多个Follower 所有的Follower都可提供读服务 所有的写操作都会被forward到Leader Client与Server通过NIO通信 全局串行化所有的写操作 保证同一客户端的指令被FIFO执行 保证消息通知的FIFO 与Kafka读写操作不一……

阅读全文

eventfd 入门

1 eventfd 是什么 eventfd 是linux内核一个计数器,主要用于进程间或者线程间,高效的事件通知。 它也是一个系统调用,在内核空间进行计数,用于事件通知 (since linux 2.6.22)。 eventfd 也是一个fd,同样可以使用read/write进行读写操作,本质上是eventfd实现了read/write接口(里氏替换)。 更详细的可以查看 man eventfd 1 2 3 #include <sys/eventfd.h> int eventfd(unsigned int initval, int flags); eventfd() 创建一个 eventfd 对象,可以由用户空间应用程序实现事件等待/通知机制, 或由内核发送事件通知, 到用户空间的应用程序。 该对象包含了一个无符号64位整型计数器,计数器由内核维护。 此计数器,……

阅读全文

kafka安装

Install zookeeper cp conf/zoo-sample.cfg conf/zoo.cfg vi conf/zoo.cfg 主要修改配置文件中,数据目录的位置。 启动zookeeper服务 bin/zkServer.sh start kafka 2.12 修改配置文件: config/zookeeper.properties 修改数据目录: dataDir=/home/hadoop/zk #因为zookeeper变更为zk,所以需要在这里修改一下 启动zookeeper bin/zookeeper-server-start.sh config/zk.properties 启动kafka服务器(broker) 启动kafka服务器(broker)……

阅读全文

Simple Binary Encoding

金融系统通过发送大量不同格式的消息进行通信。当人们使用类似“巨量的”这一类术语时,我正常会想 “真的..是多少?” 因此,让我们为金融行业量化“巨大”。……

阅读全文

最近文章

分类

友情链接

标签

-Wall(1) 2017(1) 2023(1) about(1) AC自动机(1) algorithm(2) atomic(1) BigData(1) busy(1) C++11(3) cache(3) chrome(1) cluster(1) CMake(1) cmd(1) Code Review(1) communication(1) core(1) CPA(1) CPC(1) CPM(2) CPP(15) CPS(1) CPT(1) CPU(1) CR(1) CS(4) Diary(3) Docker(1) DP(1) duck-type(1) echarts(1) epoll(1) etcd(1) Eureka(1) event(1) eventfd(1) Feeling(1) future(2) Gerrit(1) git(6) go(3) go-cmp(1) Golang(8) hardware(1) Hundsun(2) intersection(1) iPhone(1) Java(2) kafka(2) lambda(1) Languages(2) LeetCode(3) libuv(1) Life(12) LinkList(1) Linux(2) LogReplay(1) lua(3) MacOS(1) MySQL(1) mysqldump(1) narrow cast(1) nullptr(1) OKR(1) oneof(1) OpenTelemetry(1) owners(1) pkg(2) plan(1) plugin(2) plugins(1) poll(1) promise(1) proto3(1) Protobuf(1) rb-tree(1) Reactive(1) ready_future(1) rebase(1) recommend(2) recursive(1) Redis(1) reflection(3) Registry Center(1) Release(1) resume(1) rpm(1) seastar(4) select(2) set(1) shared_ptr(1) SIGABRT(1) Simulate Location(1) sql(2) std::thread(1) syscall(1) tcp(1) timeout(1) TodoList(1) Tools(3) tracing(1) Travel(1) unique_ptr(1) unwound stack(1) weak_ptr(1) Web(2) Wireshark(4) Work(9) zeromq(2) zookeeper(2) zsh(1) 个人旅游(1) 企微机器人(1) 优点(1) 全麻(1) 动态规划(1) 在线广告(1) 多模匹配(1) 工作总结(1) 广告(1) 开源工具(1) 开源库(4) 总结(2) 扔鸡蛋问题(1) 文本消息指令(1) 智齿(1) 流量录制回放(1) 用户标签(1) 缺点(1) 群收款(1) 背包问题(1) 读书笔记(8) 香港签注(1) 高可用(2) 鼻炎(1)

其它