2014校招后台开发(服务端开发)经验总结 | Charles的技术博客 

作者:JerryXia | 发表于 , 阅读 (0)
1. 引言本文介绍了博主2014年校招期间应聘服务端开发岗位的准备工作和部分经验。希望通过本文能为即将找工作的童鞋们提供一点点参考,如果在阅读本文后,能对您有那么一点点帮助,那么博主就非常开心啦!
1.1 关于我博主是华中科技大学计算机学院小硕一枚,读研期间抱着师兄大腿中过两篇论文(学生二作),由于平时比较爱折腾,所以会自娱自乐地造一些轮子,另外,博主对工业界的使用的一些技术比较好奇,所以挣扎着看过几个小开源项目的源码。
在2014年校招期间,博主拿到的offer情况如下:
亚马逊中国 SDE网易游戏 游戏研发工程师摩根士丹利IT 研发百度 系统工程师腾讯 后台开发工程师阿里 研发工程师美团 基础架构研发工程师1.2 本文大纲经过博主的梳理,认为在准备找技术工作的时候,以下几个方面比较重要,本文也将从这几个方向依次展开:
选择技术方向准备所选技术方向的技能基础知识项目语言算法和数据结构2. 选择技术方向计算机是个很大的学科,里面涉及的技术方向很多,对于咱这种普通人肯定不可能同时深入多个方向,所以,博主认为在准备找工作之前,选择一个技术方向是非常有必要的。那么问题来了,如何选择技...阅读全文

 libeasy基础数据结构 | Charles的技术博客 

作者:JerryXia | 发表于 , 阅读 (0)
1. 简介libeasy网络框架包含了基础数据结构、内存管理、线程池、io管理以及包处理等模块,本文分析的是基础数据结构模块。基础数据结构模块包括简单的内存池、缓冲区管理、链表、数组、字符串、哈希表等。
2. 简单内存池
libeasy内存池的内存分配情况如上图所示,主要有两种大小的内存,一种是默认的小块内存,称为Block;另一种是大块的内存,用于存放大块内存申请的数据部分,称为Large Data Area。
Block的大小是固定的,由内存池的使用者在初始化的时候指定,其用于存放申请的小块内存的Header和Data部分,以及大块内存的Header部分,多个Block之间采用链表的方式链接。Large Data Area的大小不是固定的,由用户申请的内存大小决定,但一定比Block要大,用来存放大块内存申请的数据部分。
以小块内存申请和大块内存申请的过程来讨论libeasy内存池的管理:
2.1 小块内存申请如图所示,假设申请的内存空间为S1字节,其中S1小于Block的大小。libeasy会从资源池的某个Block开始遍历,寻找Block剩余空间能容纳下当前申请S1字...阅读全文

 分布式系统学习思路 | Charles的技术博客 

作者:JerryXia | 发表于 , 阅读 (0)
介绍博主近段时间准备学习分布式系统相关的东西,本文整理了学习分布式系统的思路,此文还未经过实践,可能还需要不断调整,仅供参考。
分布式系统一般分为分布式K/V系统、分布式文件系统和分布式数据库等几个大类,在学习这几类系统的时候,需要掌握的知识或技能应该包括计算机基础知识、分布式算法和协议相关论文、分布式系统设计范型相关论文、开源的分布式系统案例以及造相关的轮子。
基础知识根据博主目前经验来看,学习分布式系统首先要掌握以下基础知识:
OS相关体系结构相关Unix系统编程Unix网络编程并发编程常用数据结构和算法论文分布式系统的论文主要分为两大方面,一方面是算法或者协议相关的论文,另一方面是系统设计相关的。
算法或者协议相关Byzantine General
paxos
paxos made simple 和 paxos made live
raftcap base2pc 3pcleasesacidtime and orderingTime Clocks and the ordering of Events in a Distributed System
Virtual T...阅读全文