鸡蛋蛋🥚


  • 首页

  • 归档

  • 标签

  • 书单

  • 关于

常见位运算

发表于 2018-11-04 |
位运算简介(WIKI)Bit manipulation is the act of algorithmically manipulating bits or other pieces of data shorter than a word. 需要进行位运算的程序包括:低层设备控制、错误检测、校正算法 ...
阅读全文 »

拜占庭将军问题

发表于 2018-10-23 |
拜占庭将军问题(byzantine-generals-problem)是Leslie Lamport(2013年的图灵奖得主)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子。 拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个 ...
阅读全文 »

深入理解 go channel

发表于 2018-10-15 |
概述channel是goroutine之间的通信机制,同时,channel也是实现复杂高并发程序的基础。在这里会对channel内部的工作机制,包括channel如何被调度器调度、内存管理系统等进行深入的说明。 我们可以用channel实现一个简单的任务队列。 channel 具有如下特性: c ...
阅读全文 »

go grpc 样例

发表于 2018-10-14 |
Go gRPC 基础通过route_guide($GOPATH/src/google.golang.org/grpc/examples/route_guide/routeguide)这个样例来了解grpc的使用,主要包括 在 .proto 文件中定义service。 使用protocol buff ...
阅读全文 »

TCP三次握手、四次挥手

发表于 2018-09-09 |
TCP状态转换图 TCP三次握手 TCP 三次握手流程最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,而B被动打开连接。(A、B关闭状态CLOSED——B收听状态LISTEN——A同步已发送状态SYN-SENT——B同步收到状态SYN-RCVD——A、B连接已建立状态ESTABLIS ...
阅读全文 »

java 单例模式

发表于 2018-09-06 |
单例模式定义Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。) 单例的实现主要是通过以下两个步骤: 将构造方法定义为 ...
阅读全文 »

linux线程调度

发表于 2018-08-26 |
实时与非实时操作系统实时操作系统对一些中断的响应的时效性非常高,即使在内核态的时候。非实时反之。目前像VxWorks属于实时操作系统,大家常用的windows和linux都属于非实时操作系统,也叫做分时操作系统。响应实时的表现主要是抢占,抢占通过优先级来控制,优先级高的任务最先占用CPU。 Linu ...
阅读全文 »

线程 协程

发表于 2018-08-26 |
进程、线程和协程进程进程 (process) 是执行中的程序,这是一种非正式的说法。进程不只是程序代码,程序代码有时候称为文本段。进程还包括当前活动,通过程序计数器的值和处理器寄存器的内容来表示。另外,进程通常还包括进程堆栈段(包括临时数据,如方法参数、返回地址和局部变量)和数据段(包含全局变量)。 ...
阅读全文 »

golang 线程模型提纲

发表于 2018-08-26 |
golang goroutine相关内容的整理。 线程、协程、goroutine 线程、协程、goroutine的定义 线程和goroutine之间的对比 Linux系统线程模型 Linux系统线程模型 Linux系统线程调度 golang 线程模型 M P G 定义 goroutine ...
阅读全文 »

golang 垃圾收集器各版本变化

发表于 2018-08-25 |
go 语言在 1.3 以前,使用的是比较蠢的传统 Mark-Sweep 算法。1.3版本以前,golang的垃圾回收算法都非常简陋,然后其性能也广被诟病:go runtime在一定条件下(内存超过阈值或定期如2min),暂停所有任务的执行,进行mark-sweep操作,操作完成后启动所有任务的执行。 ...
阅读全文 »

对象存活判断

发表于 2018-08-25 |
对象是否存活判断gc工作中非常重要的一步就是对象是否存活判断,因为只有“死去”(没有被引用的)对象才能被回收。 其中常见的对象存活判断的方法有两种:1.引用计数法 2.可达性分析算法 引用计数法 (Reference Counting)给对象添加一个引用计数器。每当有一个地方对它进行引用的时候,引用 ...
阅读全文 »

垃圾回收算法&垃圾收集器

发表于 2018-08-25 |
垃圾回收算法标记清除 (Mark-Sweep)算法分为两个阶段:标记 和 清除,首先标记出所有要回收的对象,在标记完成之后统一回收所有标记的对象。它有两个不足: 一个效率问题:标记和清除两个过程的效率都不高; 另一个是空间问题:标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程 ...
阅读全文 »

golang 栈内存管理

发表于 2018-08-23 |
golang 栈内存介绍golang中栈内存用来存储函数内变量、执行函数调用等。在golang函数、协程退出后,其占用的栈内存也会一同被释放。 实际应用中协程的启动、退出可能会比较频繁,runtime必须要做点什么来保证启动、销毁协程的代价尽量小。而申请、释放stack空间所需内存则是一个比较大的开 ...
阅读全文 »

golang 内存管理提纲

发表于 2018-08-22 |
这一阶段一直在看golang内存管理的相关内容,为了能让自己学习相关内容的思路更加清晰,参考jvm讲解内存管理的章节次序,列出了golang内存管理应当掌握的内容。 golang new和make : 简单了解golang创建对象的基本方法。 golang 逃逸分析 : 解决了对象是分配在堆上还 ...
阅读全文 »

golang堆内存管理

发表于 2018-08-22 |
内存管理对于内置runtime system的编程语言,通常会抛弃传统的内存分配方式,改为自主管理内存。这样可以完成类似预分配、内存池、垃圾回收等操作,以避开频繁地向操作系统申请、释放内存,产生过多的系统调用而导致的性能问题。 golang的runtime system同样实现了一套内存池机制,接管 ...
阅读全文 »

golang逃逸分析

发表于 2018-08-21 |
逃逸分析在编程语言的编译优化原理中,分析指针动态范围的方法称之为逃逸分析。通俗来讲,当一个对象的指针被多个方法或线程引用时,我们称这个指针发生了逃逸。发生逃逸行为的情况主要有两种: 方法逃逸:当一个对象在方法中定义之后,作为参数传递到其它方法中; 线程逃逸:如类变量或实例变量,可能被其它线程访问到 ...
阅读全文 »

golang中的new和make

发表于 2018-08-21 |
零值要了解make和new首先要了解golang中关于零值的定义:当一个变量或者新值被创建时, 如果没有为其明确指定初始值,go语言会自动初始化其值为此类型对应的零值。各类型的零值如下: bool : false integer : 0 float : 0.0 string : “” pointe ...
阅读全文 »

url参数的Sign签名

发表于 2018-08-20 |
现在大多数APP和后端都是使用http、https来进行交互的。在这里对开放式API接口如何对数据安全进行保证进行简单的梳理和说明。 常见的开放性API接口的安全性问题:请求来源是否合安全(对身份进行验证)。请求参数是否被篡改。请求的唯一性(不可复制性)如何进行保证。 不验证的方式APP请求后台接口 ...
阅读全文 »

app 登录保持

发表于 2018-08-20 |
简介在使用App时,一次登录后App如果不主动退出登录,App将会在很长一段时间内保持登录状态。让用户感觉到登录一次就不用每次输入登录密码才能进行登录了。 常见App保持登录的实现方式前端保存用户和密码 利用用户名和密码保持登录是指用户在第一次登录成功时,把用户名和密码保存的本地,下次用户打开Ap ...
阅读全文 »

tcmalloc简介

发表于 2018-08-17 |
系统内存管理内存管理可以分为三个层次,自底向上分别是: 操作系统层级:通过调用操作系统API来申请内存,如在Linux中通过brk,mmap,munmap这些系统调用来申请内存。 语言层级:例如glibc层使用系统调用维护的内存管理算法。也可以理解为包装好的,用作内存管理的三方库。 应用层级:应用 ...
阅读全文 »
123
LiMingji

LiMingji

43 日志
26 标签
© 2019 LiMingji
由 Hexo 强力驱动
主题 - NexT.Mist