[后台开发工程师总结系列] 11. 分布式原理

分布式什么是分布式分布式系统是一组通过网络进行通信,为完成共同任务而协调工作节点组成的计算机系统。分布式系统的出现是为了用廉价的、普通的单机完成无法计算、存储的任务。其目的是利用更多的机器, 处理更多的数据。 分布式系统挑战分布式系统需要大量机器协作,面临诸多挑战: 异构的机器与网络 分布式中的机器配置不一样、运行的服务语言、架构不同、因此处理能力不一样。而且网络带宽、延时、丢包率也不一样。 普遍的节点故障 虽然单个节点的故障率低,但是节点数据达到一定规模,出故障的概率就变高了。分布式需要故障发生时,系统仍然是可用的。 不可靠的网络 节点间通过网络通信,而网络问题:分割、延时、丢包、乱序

Continue Reading →

[后台开发工程师总结系列] 10. 常用算法及参考实现

常考算法题设计类问题// 1. 带过期时间LRU // 2. 设计一个Hashmap 基础数据结构及算法// 1. 二叉树的三种非递归遍历 + 层次遍历 // 2. 单例模式 // 3. 并查集及最小生成树 // 4. 最短路(Dijikstra算法) // 5. 拓扑排序 // 6. 先序和中序 构造二叉树 // 7. 字典树 // 8. 合并k个排序的链表、数组 // 9. 二叉树的最长路径(最大路径和) // 10. LCA问题 // 11. 三个经典的进程同步模型// 生产者消费者、读者写者问题、哲学家进餐问题 // 12. 二叉树中序的下一个节点 // 13. 两个排序数组中位数,TOP K // 14. 快排 // 15. 链表排序 // 16. 堆排序 // 17. 几个C语言函数实现(strlen(), strcmp(), strcpy(), memset()) // 18. 字符串全排列

Continue Reading →

[后台开发工程师总结系列] 8.STL概论

STL概论 长久以来软件届一直希望建立一种可复用的东西,以及一种得以造出“可重复运用东西”的方法。 子程序、程序、函数、类别、函数库、类别库、组件、结构模块化设计、模式、面向对象 … 都是为了 复用性的提升 复用性必须建立在某种标准之上,但是在许多环境下开发最基本的算法和数据结构还迟迟不能有标准。大量程序员从事重复劳动,完成前人完成而自己不拥有的代码。

Continue Reading →

[后台开发工程师总结系列] 7.Redis简介

Redis特点Redis 本质上是一个Key-value类型的内存数据库,很像memcached, 整个数据库在内存中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保护,因为是存内存操作,Redis性能十分出色,每秒可以处理10万次的读写操作,是已知性能最快的DB。 Redis性能出色之处不仅仅是性能,Redis最大魅力是支持多种数据结构,Redis单个value的最大限制是1GB, 而memcached只能保证1MB的数据。Redis 可以用LIST做双向链表实现一个轻量级的高性能消息服务队列。 Redis的主要缺点是数据库容量收到物理内存的限制,不能用做海量数据的高性能读写

Continue Reading →

[后台开发工程师总结系列] 6.数据库原理及MySQL

数据库系统原理事务事务指满足ACID特性的一组操作,可以通过commit 提交,也可以通过rollback回滚 事务的ACID特性 原子性(Atomicity) 事务被视为不可分割的最小单元,事务的所有操作要么全部成功提交,要么全部失败回滚,回滚可以使用回滚日志来实现,回滚事务记录着执行的修改操作,回滚时反向执行即可 一致性(Consistency) 数据在事务的执行前后都保持一致性状态,在一致性状态下,所有事务对一个数据的读取结构都是相同的 隔离性(Isolation) 一个事务所做的修改在最终提交以前对其他事务不可见 持久性(Durability) 一旦事务提交,则其所做修改会永远保存到数据库中,即使系统崩溃事务执行结果也不能丢失,使用重做日志来保障持久性 事务的ACID特性比较简单,但是并不容易理解,他们并不平级 只有满足一致性,事务的执行结果才是正确的的 在无并发的情况下,事务串行执行,隔离性一定能满足。此时只要满足原子性,一致性即可满足 并发的情况下,多个事务并行执行,事务不仅满足原子性,还要满足隔离性 才能满足一致性 事务满足持久性是为了维护数据库崩溃的情况

Continue Reading →

[后台开发工程师总结系列] 5.网络IO模型

网络IO模型IO是计算机体系中的重要部分,IO外设有打印机、键盘、复印机等;储存设备有硬盘、磁盘、U盘等;通信设备有网卡,路由器等。不同的IO设备通信很难统一。 IO有两种操作,同步IO和异步IO,同步IO必须等IO操作完成后控制权才返回给用户进程,而异步IO无需等待IO操作完成,就将控制权返回给用户进程。 当一个IO发生时,它涉及两个系统对象,一个是调用IO的进程,一个是系统内核。一个read操作两个阶段,1等待数据准备 2 数据从内核拷贝到进程。 下面针对网络IO的四种模型分别讲解:阻塞IO、非阻塞IO、多路IO复用、异步IO

Continue Reading →

[后台开发工程师总结系列] 4..计算机网络

计算机网络 复习七层网络模型国际标注化组织ISO于1981年 正式推荐了一个网络体系结构–七层参考模型,也被叫做开放系统互连模型 这七层网络模型在传输过程中还会对数据进行封装,过程如图所示 在ISO七层网络模型中,当一台主机需要传送用户数据时,数据先进入应用层。在应用层中,数据被加上应用层报头(AH),形成应用层协议数据单元(PDU),然后被递交到表示层。表示层不关心上层应用数据格式而是把整个数据包看成一个整体(应用层数据)进行封装,及加上表示层报头(PH)。下层分别加上自己的报头,其中数据链路层还会封装一个链尾,形成一帧数据。 当一帧数据通过物理层传输到目标主机物理层时,主机递交到数据链路层,同样经历上述相反的过程一层一层解包拿到数据。

Continue Reading →

[后台开发工程师总结系列] 3.操作系统之线程

多线程为了更好的理解线程的概念,先对进程、线程的背景做介绍。 早期的计算机都只允许一个程序独占系统资源,一次只能执行一个程序。 这种背景下,一台计算机支持多个程序并发执行的需求就变得迫切,由此产生了进程的概念。进程在多数早期多任务操作系统中是执行工作的基本单元。进程是包含程序指令和相关资源的集合,每个进程和其他进程一起参与调度,竞争CPU、内存。每次进程的切换都存在进程资源的保护和恢复动作,这称为上下文切换。进程的引入可以解决多用户支持的问题,但也引入了新的问题:进程频繁切换可能严重影响性能。 同一个进程内部可能有多个线程,共享同一个京城的所有资源。通过线程支持了同一应用程序内部的并发,免去了进程频繁切换的开销,另外并发任务也更简单。 网络具有天生的并发性,比如数据库可能同时需要处理数以千计的请求。而由于网络连接的不确定性和不可靠性,等待网络交互时,可以让当前的线程进入睡眠、退出调度,处理其他线程,这样能够充分利用系统资源,发挥系统实时处理能力。

Continue Reading →