主页

Golang

1、Go 语言简介 Go 语言起源 2007 年,并于 2009 年正式对外发布 Go 语言三位作者: Robert Griesemer,参与开发 Java HotSpot 虚拟机; Rob Pike,Go 语言项目总负责人,贝尔实验室 Unix 团队成员,参与的项目包括 Plan 9,Inferno 操作系统和 Limbo 编程语言; Ken Thompson,贝尔实验室 Unix 团队成员,C 语言、Unix 和 Plan 9 的创始人之一,与 Rob Pike 共同开发了 UTF-8 字符集规范 为什么要创造一门编程语言: C/C++ 的发展速度无法跟上计算机发展的脚步,十多年来也没...

阅读更多

系统设计

1、高并发 系统设计高并发 1.1、负载均衡 根据节点负载情况,将客户端请求发送到不同的节点。常用的负载均衡算法如下: 轮询 加权轮询 最少连接数 随机 源地址哈希(IP Hash) 1.2、缓存 网站性能优化的第一定律:有限考虑使用缓存。 1.3、消息队列 1.3.1、模型 点对点模式:一个消息只能被一个消费者消费一次。 发布订阅模式:多个订阅者可以从频道订阅这条消息并消费。 1.3.2、使用场景 异步处理:例如用户注册发送奖励。 流量削锋:服务器根据处理能力从消息队列中获取消息处理。防止短时间内大量请求压垮服务器。 应用解藕:一个模块修改不影响其他模块,实现可扩展性。 1.3.3、可靠性 发送端可靠性:使用本地...

阅读更多

Zookeeper

什么是Zookeeper 漫画:什么是ZooKeeper? Zookeeper是一个分布式协调服务,可以在分布式系统中共享配置,协调锁资源,提供命名服务。 Zookeeper的数据模型很像数据结构当中的树,也很像文件系统的目录。 Zookeeper的数据存储基于节点,这种节点叫做Znode。Znode包含了数据、子节点引用、访问权限等等。 data:Znode存储的数据信息。 ACL:记录Znode的访问权限,即哪些人或哪些IP可以访问本节点。 stat:包含Znode的各种元数据,比如事务ID、版本号、时间戳、大小等等。 child:当前节点的子节点引用,类似于二叉树的左孩子右孩子。 Zo...

阅读更多

C++

1、C++语法基础 指针和引用 指针有自己的一块内存空间,引用只是一个别名。 sizeof 指针大小为4,sizeof 引用为被引用对象的大小。 引用必须初始化,且是一个已存在对象的引用。指针可以初始化为 nullptr。 可以有const指针,但是没有const引用。 程序编译过程 预处理阶段:对源代码文件中文件包含关系(头文件)、预编译语句(宏定义)进行分析和替换,生成预编译文件。 编译阶段:将经过预处理后的预编译文件转换成特定汇编代码,生成汇编文件。 汇编阶段:将编译阶段生成的汇编文件转化成机器码,生成可重定位目标文件。 链接阶段:将多个目标文件及所需要的库连接成最终的可执行目标文件。 static、const、#define的用法和...

阅读更多

计算机网络

TCP报文格式 1、OSI七层模型、TCP/IP四层 OSI七层模型 TCP/IP模型 功能 TCP/IP协议族 应用层 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP:80,SNMP,FTP:21,SMTP:25,DNS:53,Telnet 表示层 - 数据格式化,代码转换,数据加密 没有协议 会话层 - 接触或建立别的节点的联系 没有协议 传输层 ...

阅读更多

数据库

事务的ACID特性 事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。事务是DBMS中最基础的单位,事务不可分割。 事务具有4个基本特征,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration),简称ACID。 原子性:事务被视为不可分割的最小单元,事物的所有操作要不成功,要不失败回滚,而回滚可以通过日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作。(原子性实现原理 - Undo Log) 一致性:数据库在事务执行前后都保持一致性状态,在一致性状态下,所有事务对一个数据的读取结果都是相同的。 隔离性:一个事务所做的修...

阅读更多

算法与数据结构

常见算法类型 排序算法(冒泡、插入、选择、快排、希尔、堆排、归并、桶排、基数、计数)、字符串操作、数组操作、递归、回溯、分治、动态规划等 如何准备算法可见历史文章:进入BAT和字节跳动最难的一关,手撕代码! 排序算法 十大经典排序算法(动图演示) 冒泡排序 快速排序 void QSort(vector<int> &arr, int left, int right) { if (left >= right) return; int low = left; int high = right; int key = arr[left]; while (left...

阅读更多