/img/head.jpg

Blog

何昔日之芳草兮,今直为此萧艾也

关于矛盾论

辩证法研究对象的本质自身中的矛盾 – 列宁 从这句话得知矛盾是辩证法的核心。因为是核心,所以涉及许多方面和哲学问题:两种宇宙观、矛盾的普遍性、矛盾的特殊性、主要矛盾和主要矛盾的方面、矛盾诸多方面的同一性和斗争性、对抗在矛盾中的地位。

管理什么的

小团队的话,管理者个人开发能力过关,再加上分配工作合理就能有不错的效果。再进一步就是把项目规划好,在项目进展中及时纠正错误问题(计划、设计、工作分配等),及时反馈问题(技术不可达),做好与其他部门的协作。这应该会是一个不错稳定的团队。

提高读书效果

以下的读书方法针对的是以收集信息、获得判断为目的 为什有的人努力学习了却没有结果呢?因为我们大多数时候只是以过程为导向学习,而没有以目标为导向 1. 效率 - 明确目标 有目的性阅读,而非过程导向

grpc-go

grpc Server 本文简单阅读源代码,了解grpc server的执行流程,从建立连接,到处理一条请求的过程。 使用方式 使用方式很简单,生成pb,注册建立服务,就可以等待请求了

计算机网络-传输层

TCP/IP 模型 应用层将数据传递给传输层,传输层将数据分段,每段加入自己的首部数据,然后传递给下一层,之后的每层都会封装上自己层需要的首部,最后经过物理链路传递到指定主机,然后每层又向剥洋葱一样,一层层处理自己的首部数据,到达传输层,传输层最终交付给应用程序。

源码阅读 - go Context

Context有什么用 当处理一个请求A,而这个请求需要在3秒内完成相应,A请求分别创建了B和C goroutine来处理逻辑,如果B或者C处理时间过长超过了3秒,那么继续执行显然是没必要且浪费资源。这时候就需要一个能终止他们的操作,而go没有提供类似 goroutineID这样的变量来记录goroutine状态。官方认为这样非常容易被滥用。所以Context就为此而来。

百年孤独

第一章 简要 一个叫 何塞·阿尔卡蒂奥·布恩迪亚 的人,从吉卜赛人 梅尔吉亚德斯,一个诚实善良的人手中换来各种新奇未见过的道具:磁铁,放大镜等。 他天马行空,爱钻研,专注,却又有些愚蠢,这些道具在他手中没有按他所想如意,结果让自己变得抑郁寡欢,曾经的他带领人们寻找安家之所,他和妻子是全村的楷模,如今痴迷于科学,变得慵懒不修边幅。但他却根据吉普赛人的知识,自己研究出了 地球是圆的,在当时难以置信的超前想法。没多久他的好友梅尔吉亚德斯病逝,之后来了 另一批吉普赛人,他第一次见到,抚摸到冰。

读CSAPP(4) - 虚拟内存

虚拟内存系统解决了物理寻址的缺点。利用内存管理单元(MMU)和页表(Page Table)将虚拟地址转换为物理内存地址。 进程运行过程不再加载全部数据,而是只保留当前运行需要的数据在内存中。为了让MMU更高效加入了TLB,缓存映射关系,还利用多级页表降低页表内存占用有了

读CSAPP(3) - 存储器层次结构

了解硬件 随机访问存储器(Random-Access Memory,RAM) RAM分两类,静态(SRAM)的和动态的(DRAM),SRAM要比DRAM更快,价格也更高。 SRAM用于高速缓存存储器,可以在cpu芯片上,也可以在片下。DRAM用来作为主存以及 图形系统的帧缓冲区。无论哪种RAM一旦断电,所有信息都会丢失。

Go Channel

如何使用 channel在<-左边 表示向channel发送数据 channel在<-右边 表示从channel接收数据 close(channelName) 关闭一个channel channel := make(chan string, 2) //发送数据: 写 channel <- "struct" //接收数据: 读 data := <-channel fmt.Println(data) close(channel) Channel的关闭 关闭一个未初始化(nil) 的 channel 会产生 panic 重复关闭同一个 channel 会产生 panic 向一个已关闭的 channel 中发送消息会产生 panic 从一个 …

Go Groutine

并发与并行 并行(parallel): 指在同一时刻,有多条指令在多个处理器上同时执行(靠机器) 并发(concurrency): 指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,宏观看起来是并行的,微观是cpu在不断的快速切换.(操作系统) 线程安全问题 协作式调度: 当线程终止或阻塞是发生调度 => “主动让出” 抢占式调度: 允许逻辑上将可继续运行的线程在运行过程中暂停的调度方式 => “被迫让出” 脏数据原因: 抢占式调度被迫让出cpu控制权,一个行为可能有多个指令组合而成 多指令在执行过程中被中断,导致未执行完整出现脏数据. 举例: i= 0, 线程1 执行 i++,线程 2 也执行 i++, 想要的结果 …

读CSAPP(2) - 程序性能优化

高效的程序需要做到 合适的数据结构与算法 编写出编译器能够有效优化以转换成高效可执行代码的源码。 将运算量特别大的计算,可以分成多部分,这些部分可以在多核多处理器的某种组合上并行处理 本篇主要以第二点进行讨论,编译器在优化的时候只会做最坏打算,做各种假设。为了保证程序的准确性,舍弃性能优化。

Go 竞态问题

定义 单处理器中低优先级的进程被高优先级的进程抢占,同时他们访问同一块共享资源 多处理器中,CPU1的进程、CPU2的进程同时访问同一块共享资源 如何避免竞态条件 变量只读 //下面两种获取map信息的方式 //懒汉获取方式,有则获取无则加载: 会有读写错乱情况 func loadmap(name string) int { return 2 } func getmap2(name string) int { v, ok := maps[name] if !ok { v = loadmap(name) maps[name] = v } return v } //预先加载好, 使getmap只读, 就不会存在竞态问题 var maps …

读CSAPP(1) - 信息的表示和处理

计算机存的什么 计算机存储的是二进制,每一位存储的是0或1。大多数计算机使用1字节(也就是8位),作为最小可寻址的内存单位。 每个字节都有一个唯一的数字来标识,也就是地址(address)。每个计算机都有一个字长(word size),也就是常说的64位操作系统,32位操作系统。字长决定了虚拟地址空间的大小, 比如32位有4GB的内存空间,64位则是16EB(1TB = 1024GB,1 EB = 1,024 PB = 1,048,576 TB)。

暗时间

学习方面 最近看《暗时间》这本书,感觉很不错。 投入的时间≠实际时间,要用高效的方法学习,充分利用暗时间,学习过程要不断思考推断,而不是一味的死记硬背。 只有当进入沉浸状态学习效率才会提高,并且不被其他因素中断。 最后将学到的知识进行归纳,或者讲给别人听,加深巩固知识。 学习过程或者做一件事情的过程,如果能记录进度,知道自己还差多少完成,心里就会有所期待。 学以致用才是最终目的