摘要: 本文是effective go的摘要笔记,主要包括go语言一些习惯用法和要点。 阅读全文
posted @ 2020-03-17 20:10 程序猿k哥 阅读(466) 评论(0) 推荐(1) 编辑
摘要: 本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满、fd泄漏等问题。命令包括ping、fping、tcpdump、lsof、netstat、/proc/$pid/fd、du、grep、traceroute、dig。 阅读全文
posted @ 2019-08-25 11:30 程序猿k哥 阅读(740) 评论(0) 推荐(2) 编辑
摘要: 本文详细介绍了curl命令基础和高级用法,包括跳过https的证书验证,详细追踪整个交互过程,可用于调用网络后端接口,诊断http和https网络服务故障。 阅读全文
posted @ 2019-08-22 19:42 程序猿k哥 阅读(6444) 评论(1) 推荐(1) 编辑
摘要: linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、信号(signal)、消息队列、共享内存、信号量、套接字(socket)。管道用于具有亲缘关系的进程间通信,有名管道的每个管道具有名字,使没有亲缘关系的进程间也可以通信。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身。消息队列是消息的链接表,消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。共享内存使得多个进程可以访问同一块内存空间,是最快的可用IPC形式,针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。信号量(semaphore)主要作为进程间以及同一进程不同线程之间的同步手段。套接口(Socket)更为一般的进程间通信机制,可用于不同机器之间的进程间通信。 阅读全文
posted @ 2019-08-10 16:59 程序猿k哥 阅读(2168) 评论(1) 推荐(1) 编辑
摘要: zookeeper作为分布式协调组件,在开源社区有着广泛应用,比如作为dubbo的注册中心,本文详细介绍zookeeper集群搭建和zookeeper的基本概念、数据模型,并研究zookeeper的常用场景,给出实现代码,包括分布式锁、分布式队列及leader选举等。 阅读全文
posted @ 2019-07-27 14:57 程序猿k哥 阅读(563) 评论(0) 推荐(1) 编辑
摘要: 网络IO模型包括阻塞、非阻塞、IO复用、信号驱动IO和异步IO五种类型。阻塞IO无法应对多个连接的情形,单个socket操作阻塞会导致服务端无法接受其他连接,虽然可以用多线程、多进程的方式,将不同的连接放在不同的线程中和客户端交互,并利用线程池和连接池进行优化。但创建进程和线程会占用系统资源,当面对大规模连接时,系统资源浪费严重,系统响应效率不高。 非阻塞模型当socket读写操作未就绪时会立即返回,而不会阻塞等待,可以利用轮询的方式来进行读写操作,但当内核收到数据报到应用进程感知并处理会有时延。 利用IO复用,将监控socket读写操作是否就绪和进行读写操作分开,且IO复用可监控socket集合,IO复用包含select、poll、epoll三种模型。 select模型存在如下三种缺点: 1) 每次都需要将fd_set拷贝到内核空间,当fd_set较大时开销很大 2) 每次都需要在内核中遍历fd加入到等待队列,fd较多开销较大 3) select支持的文件描述符太小,默认为1024。 poll模型可同时监控的socket没有上线限制,取决于系统资源, 阅读全文
posted @ 2019-07-08 00:11 程序猿k哥 阅读(4820) 评论(2) 推荐(6) 编辑
摘要: spark学习笔记,主要包括spark core的内容RDD弹性分布式数据集和广播变量及累计器.Spark Sql的内容Sql、Dataset和DataFeame. 阅读全文
posted @ 2019-06-15 09:31 程序猿k哥 阅读(585) 评论(0) 推荐(1) 编辑
摘要: cap理论是分布式系统的基础理论,任何一个分布式系统不可能同时满足强一致性、可用性和分区容错性,而只能在三者之间权衡。为了提高系统的写入性能,一般系统只需满足最终一致性,最终一致性有几下几种常见变种:因果一致性、读已之所写、会话一致性、单调读一致性和单调写一致性。cap理论演化出Base理论,是工业界对分布式系统实践的总结,其核心思想是即使无法达到强一致性,也要保证满足最终一致性。 阅读全文
posted @ 2019-05-09 00:18 程序猿k哥 阅读(1163) 评论(0) 推荐(1) 编辑
摘要: 大部分人在用开源软件的时候,并不知道一个优秀的开源软件内部是如何启动起来的,本文通过分析redis启动过程的源码,来学习优秀软件的启动过程 阅读全文
posted @ 2019-03-18 23:47 程序猿k哥 阅读(1574) 评论(0) 推荐(2) 编辑
摘要: Redis常用数据类型有字符串String、字典disct、列表List、集合Set、有序集合SortedSet,List常用于获取最新topN条新闻等类似问题和生产者消费者模式,集合set可以求对象的共同标签,而有序集合SortedSet用于游戏中的分数排名,SortedSet底层采用压缩列表ziplist及跳表skiplist实现,本文会对ziplist和skiplist的概念及优点进行详细介绍,并通过剖析redis源码来深入理解。 阅读全文
posted @ 2019-02-24 21:44 程序猿k哥 阅读(1365) 评论(1) 推荐(3) 编辑
摘要: Linux性能观测工具按类别可分为系统级别和进程级别,系统级别对整个系统的性能做统计,而进程级别则具体到进程,为每个进程维护统计信息。 按实现原理分,可分为基于计数器和跟踪以及剖析。含义如下: 计数器:内核维护的统计数据,通常为无符号整型,用于对发生的事件计数,比如,网络包接收计数器,磁盘IO计数器等。 跟踪:跟踪会收集每一个事件的具体数据,由于跟踪捕获事件数据需要消耗CPU且需要较大的存储空间储存收集数据,默认不开启。日志就是一种低频率的跟踪,会记录事件数据。 剖析:对目标采样或快照来归纳目标特征,如:CPU使用率,通过对程序计数器采样(一种寄存器,用于指示下一条指令的地址),跟踪栈找到消耗CPU周期的代码路径。剖析也可以通过非计时的硬件事件,如CPU硬件缓存未命中或总线活动,这类信息可以帮助开发人员针对系统资源的使用来优化自己的代码。 本文会对基于计数器原理的系统级linux性能工具做介绍,详细说明其用法及数据来源,后续会对进程级及基于其它原理的工具做介绍。 阅读全文
posted @ 2019-01-27 22:06 程序猿k哥 阅读(1463) 评论(2) 推荐(1) 编辑
摘要: 迭代器模式及其在python中的实现 阅读全文
posted @ 2018-11-25 21:42 程序猿k哥 阅读(528) 评论(0) 推荐(1) 编辑
摘要: 当进行网络请求失败时,需要进行重试,而最好的重试逻辑应该与业务逻辑分离,实现代码的无侵入,本文给出python第三方库重试库retrying的用法,并深入分析retrying的源码,来领略其思想。 阅读全文
posted @ 2018-10-21 22:05 程序猿k哥 阅读(872) 评论(0) 推荐(1) 编辑
摘要: python实践中经常出现编码相关的异常,大多网上找资料而没有理解原理,导致一次次重复错误。本文对常用Unicode、UTF-8、GB2312编码的原理进行介绍,接着介绍了python字符类型unicode和str以及常见编解码错误UnicodeEncodeError和UnicodeDEcodeError,并详细说明了出现这类异常的原因,从而达到庖丁解牛的效果。 阅读全文
posted @ 2018-10-07 12:34 程序猿k哥 阅读(8693) 评论(1) 推荐(1) 编辑
摘要: 大厂一线研发揭秘:怎么样才算全面了解了业务? 刚做开发时,觉得自己要好好学习技术,对业务不上心,公司让我做什么就用自认为极其优雅的编码方式解决,但对为什么要做这个事,做了对业务有什么影响,做完了有没有达到业务目标,并没有很关心。后续观察了身边的一些同学,整体上业务与技术链接比较好的同学职场上更容易脱颖而出,也促使我最近一直在思考到底什么是业务,怎么样才算较为全面的了解了业务,在此记录下来,希望能给对业务理解存在一些问题的同学带来少许启发。 阅读全文
posted @ 2024-04-21 19:58 程序猿k哥 阅读(352) 评论(0) 推荐(1) 编辑
摘要: 身在职场的你,是否遇到下面的学习困境: 年复一年,工作原地踏步,不知道该学什么进一步突破自己。 日复一日,这也学,那也学,仿佛知识没有尽头,学得身心俱疲。 你可能以为是自己太懒,不够努力,其实并不是,出现这种困境的原因是你没有构建个人知识体系。 阅读全文
posted @ 2024-03-02 08:32 程序猿k哥 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 在工作中,我们经常会遇到以下问题: * 在周报/总结中,罗列了一大堆做的事情,别人也看不出来你做得怎么样,有没有风险。 * 在向TL汇报工作进展时,TL常常听不出你想要阐释的重点,你的汇报进程总是被打断或者被提出很多挑战。 * 做技术分享写作时,写着写着连自己都不清楚在写什么。 你可能以为是自己表达能力不够好,其实并不是,原因是你没有掌握表达的底层逻辑---结构化表达。而表达的有效结构是---金字塔结构。 阅读全文
posted @ 2024-03-01 20:51 程序猿k哥 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 你是否在解决问题时,常常觉得脑子很乱,很多零散的信息迸发出来,但就是无法形成解决方案。 之所以这样,原因就在于,我们的大脑处理不了太多零散而复杂的信息。人类大脑在处理信息的时候,有两个规律:第一,不能一次太多,太多信息会让我们的大脑觉得负荷过大;第二,喜欢有规律的信息。 如果我们在解决问题时,能够找到一个结构,将所有的碎片信息放进去,就能够大大减轻大脑的负担,更容易地解决问题。而这,就是所谓的“结构化思维”。 阅读全文
posted @ 2024-03-01 20:43 程序猿k哥 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 本文是go官网关于module文章的学习笔记,包含module的使用、创建并发布module版本及升级为v2版本等操作。 阅读全文
posted @ 2020-03-08 17:59 程序猿k哥 阅读(814) 评论(0) 推荐(1) 编辑
摘要: 本文详细介绍了java线程的基础知识、用法及原理,包括线程的四种创建方式,线程在linux下状态查看命令。同时,对wait、sleep、join、yield、ThreadLocal等常用方法进行介绍,并根据源码对其原理进行刨析,从而达到深入理解java多线程底层的目的。 阅读全文
posted @ 2019-10-19 16:05 程序猿k哥 阅读(1100) 评论(0) 推荐(0) 编辑
摘要: 并发编程存在原子性、可见性、有序性问题。内存模型用于解决原子性、有序性、可见性问题。java内存模型是比顺序一致性模型和处理器内存模型约束更强,更易编程的跨平台模型,提供了一系列机制和原语保证原子性、可见性、有序性,包括synchronized、volatile等。 阅读全文
posted @ 2019-10-13 13:12 程序猿k哥 阅读(578) 评论(1) 推荐(2) 编辑