自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Lua源码分析 - 实战篇 - 编写Lua的扩展库(20)
原力计划

Lua的扩展库编写有三种方式: 注册方式:在主体语言里面编写扩展函数,然后通过lua_register方式,注册到Lua全局注册表中 动态调用:编写独立的扩展函数文件,编译成.so动态库文件,然后在lua中动态调用 扩展库编写:按照Lua语言本身的扩展库设计方式进行编写 如果忘记了扩展库的实...

2020-04-10 19:44:22 679 0

原创 Lua源码分析 - 实战篇 - Lua的API使用(19)
原力计划

目录 实战篇 - Lua的安装和Makefile 实战篇 - Lua的API使用 实战篇 - C语言中实现动态调用Lua 实战篇 - Lua的安装和Makefile 前面18章,我们详细的介绍了整个Lua语言的架构和实现原理。 Lua是一门C语言编写的脚本语言,非常的轻巧,大部分情...

2020-04-10 17:23:14 531 0

原创 Lua源码分析 - 虚拟机篇 - 语义解析之Opcode执行(18)

目录 虚拟机篇 - 指令执行函数luaV_execute 虚拟机篇 - 一个变量赋值操作看实现 虚拟机篇 - 指令执行函数luaV_execute 在《Lua源码分析 - 主流程篇 - 函数调用栈的实现(08)》我们看到了整个Lua脚本语言的执行主流程。 Lua脚本主流程:通过文件解析-...

2020-04-09 16:41:46 554 0

原创 Lua源码分析 - 虚拟机篇 - 语义解析之Opcode生成(17)
原力计划

上一篇我们讲解了语义的解析编译过程。我们基本知道了Lua的代码是一遍解析文件,一遍编译成字节码指令的。这一节,我们主要讲一下lcode.c文件,Opcode是如何生成的。 虚拟机篇 - 指令集存储数据结构Proto 上一篇,我们有讲到Proto是主要用来存储指令集的。 指令集存放:解析完毕的...

2020-04-02 17:57:26 621 0

原创 Lua源码分析 - 虚拟机篇 - 语义解析之编译过程(16)

目录 虚拟机篇 - 编译过程的核心数据结构 虚拟机篇 - 指令集存储结构Instruction 上一章节,讲解了语法的解析功能luaX_next,这一章节主要讲解虚拟机代码编译成操作码的过程。 虚拟机篇 - 编译过程的核心数据结构 我们首先看下,Lua核心虚拟机实现的几个重要文件:lle...

2020-04-01 17:10:00 550 0

原创 Lua源码分析 - 虚拟机篇 - 语义解析之Token分割器(15)

上一篇,我们讲到了Lua脚本文件加载和读取的方式。其中luaX_next函数就是用来将Lua脚本字符串逐个切割出Token。 虚拟机篇 - 语义分割单位Token结构 Token定义:Lua会对脚本语言逐个切分出最小单位Token。例如lua保留字“if”的Token是TK_IF,字符串Tok...

2020-02-25 20:41:56 674 0

原创 Lua源码分析 - 虚拟机篇 - 语义解析之loadfile文件读取(14)

前几章主要讲解了Lua的主流程和Lua的扩展库实现机制。本章开始讲解Lua虚拟机部分的实现机制。 虚拟机 - 从Lua的例子入手 我们通过一个Lua的例子,来看一下Lua脚本的执行。 我们首先顶一个一个lua文件,test.lua,里面是一段协程的简单示例脚本。 -- 定义一个协程回调函...

2020-02-21 19:41:15 714 0

原创 Lua源码分析 - 扩展库篇 - 扩展库Open的实现(13)

上一章,我们讲解了如何将Require进来。本章节具体将一下注册扩展库的实现。 扩展库 - 注册扩展库的配置 注册一个扩展库,首先需要进行两个基础配置:loadedlibs数组配置 & 库名称和回调函数的配置(lualib.h) loadedlibs是一个二维数组。第一个参数为库名称...

2020-02-18 19:02:04 367 0

原创 Lua源码分析 - 扩展库篇 - 扩展库Require的实现(12)

我们前面几章节讲过,Lua的函数调用有三种类型:C语言闭包函数,C 扩展库API和Lua语言函数。这一章我们主要讲解一下Lua的扩展库Require的实现。

2020-02-15 23:31:57 541 6

原创 Lua源码分析 - 主流程篇 - 注册表的实现(11)

Lua通过实现全局的注册表,来管理全局变量、C API扩展库的加载等信息。 注册表主要通过Table的数据结构进行管理,所以注册表是一个多维数组的结构。本章我们主要讲解Lua的注册表的整体操作方式。 Lua注册表 - 实现机制 前面我们说过,Lua的注册表是通过Table的结构实现了一个多维...

2020-02-14 20:15:08 714 0

转载 转载和积累系列 - L4负载均衡的设计与实现

目录 简介 一、LVS的局限性 1. 数据包转发性能问题 2.HA-主备结构的浪费 3.转发模式的优缺点 二、google maglev负载均衡 Maglev Consistent Hash Google下一步是什么? 三、facebook katran 第一代 L4LB 四...

2020-08-11 09:39:27 127 0

原创 业务知识 - 行业笔记

第一章:抖音成为电商流量新宠 从电商到微商,再到抖商: 电商:通过长期消费类积累信用(淘宝、天猫) 微商:依靠社交关系信任来消费(微商直销、社群运营) 抖商:传播和销售一体化 抖商竞争力五点: 粉丝接受度高。非直接硬广,通过精美饰品+音乐+情节,让商家产品直观明显 用户更加精准。算法推...

2020-07-31 14:50:01 260 0

转载 转载和积累系列 - 为什么 HashMap 加载因子是0.75?而不是0.8,0.6?

有很多东西之前在学的时候没怎么注意,笔者也是在重温HashMap的时候发现有很多可以去细究的问题,最终是会回归于数学的,如HashMap的加载因子为什么是0.75? 本文主要对以下内容进行介绍: 为什么HashMap需要加载因子? 解决冲突有什么方法? 为什么加载因子一...

2020-07-22 09:57:52 100 0

转载 业务知识 - 结构化思维

"结构化思维”对于技术人员 Coding 能力的升级至关重要,是一线互联网大厂升级为高工及技术专家的关键之一。“结构化思维”对于应对网上甚嚣尘上的“35 岁中年危机”也是关键。 表达要有逻辑 表达要有逻辑,如公众演讲,转正答辩,晋升评审,严密的逻辑有时可以折服石榴裙等。 四种组织思...

2020-06-05 10:20:51 194 0

转载 转载和积累系列 - 秒杀系统设计思路

目录 前言 一:秒杀应该考虑哪些问题 1.1:超卖问题 1.2:高并发 1.3:接口防刷 1.4:秒杀url 1.5:数据库设计 1.6:大量请求问题 二:秒杀系统的设计和技术方案 2.1:秒杀系统数据库设计 2.2:秒杀url的设计 2.3:秒杀页面静态化 2.4:单体...

2020-06-05 09:45:24 205 0

转载 转载和积累系列 - 分库分表的细节讲解

目录 数据库瓶颈 分库分表 水平分库 水平分表 垂直分库 垂直分表 分库分表工具 分库分表带来的问题 事务一致性问题 跨节点关联查询 Join 问题 跨节点分页、排序、函数问题 全局主键避重问题 数据迁移、扩容问题 什么时候考虑分库分表 能不分就不分 数据量过大,正...

2020-06-03 17:34:17 127 0

转载 转载和积累系列 - 缓存穿透、缓存并发、热点缓存之最佳招式

目录 一、缓存常见问题 缓存穿透 缓存并发 缓存失效 问题汇总 二、缓存穿透与并发方案 三、热点缓存解决方案 一、缓存常见问题 我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题: 缓存穿透 缓存并发 缓存失效 ...

2020-06-03 14:28:51 117 0

转载 转载和积累系列 - 如何设计一个安全的对外接口

目录 前言 安全措施 如何实现 1.数据加密 2.数据加签 3.时间戳机制 4.AppId机制 5.限流机制 6.黑名单机制 7.数据合法性校验 前言 最近有个项目需要对外提供一个接口,提供公网域名进行访问,而且接口和交易订单有关,所以安全性很重要;这里整理了一下常用的一些...

2020-06-03 10:16:29 144 0

转载 转载和积累系列 - HTTPS原理和HTTP缓存机制

HTTPS原理 HTTPS 随着 HTTPS 建站的成本下降,现在大部分的网站都已经开始用上 HTTPS 协议。大家都知道 HTTPS 比 HTTP 安全,也听说过与 HTTPS 协议相关的概念有 SSL 、非对称加密、 CA证书等,但对于以下灵魂三拷问可能就答不上了: 1.为什么用了 HT...

2020-06-03 09:52:33 198 0

转载 转载和积累系列 - 微服务(Microservices)和服务网格(Service Mesh)

目录 微服务(Microservices) 服务网格(Service Mesh) 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技术热点。而以 Spring Cloud 为代表的传统侵入式开发框架,占...

2020-06-02 16:15:09 102 0

转载 转载和积累系列 - Faas,又一个未来?

目录 前言 一、什么是Faas 二、Kubernetes 与 FaaS 三、后记 前言 云计算时代出现了大量XaaS形式的概念,从IaaS、PaaS、SaaS到容器云引领的CaaS,再到火热的微服务架构,以及现在越来越多被谈起的Serverless和FaaS,我们正在经历?一个技术飞速...

2020-06-02 15:50:28 99 0

转载 转载与积累系列 - Docker 核心技术与实现原理

目录 Namespaces 进程 网络 Libnetwork 挂载点 Chroot CGroups UnionFS 存储驱动 AUFS 其他存储驱动 总结 提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不...

2020-06-01 18:09:38 95 0

转载 转载和积累系列 - 三种常见的限流算法

介绍 一般做接口限流主要是为了应对突发流量,避免突发流量拖垮服务。如下面一些场景就有可能发生突发流量 微博热搜 恶意刷单 恶意爬虫 促销活动 接口限流的算法有如下几种 计数器算法 这是最容易理解和实现的算法,假设一个接口1s中最多请求100次。最开始设...

2020-05-15 11:57:43 166 0

原创 业务知识 - 人群圈层汇总

小镇青年 定义 三线、四线及以下城市的90后群体 人群 移动互联网人群渗透:2.12亿 场景 社交、网络K歌、游戏、短视频和照相图片 渗透率高 喜欢类型 小镇青年更喜欢直接、放松的视频类、游戏类等Kill...

2020-05-06 16:05:13 634 2

原创 业务知识 - 互联网产品/模式研究

1. 哔哩哔哩 B站 MAU 1.2亿,次留40% 关键词 二次元、御宅族、弹幕、直播、游戏、视频搬运者、UGC、ACG 核心功能 ACG:(动画、漫画、游戏)、直播、影视 用户核心抓手 弹幕互动(参与感、认同感、归属感) ...

2020-05-06 11:13:49 799 0

原创 Lua源码分析 - 主流程篇 - 协程的实现(10)

协程:协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。 Lua语言没有独立的线程,所以每次执行Lua脚本的时候,都是单线程执行。同一个执行过程中,Lua没有实现线程,但是实现了协程。 相比线程,线程相对资源独立,有自己的上下文,由系统切换调用 协程也相对独立,有自己...

2020-02-13 16:31:17 973 0

原创 Lua源码分析 - 主流程篇 - 异常处理机制实现(09)

异常处理机制 -setjmp和longjmp 在讲解Lua的异常处理机制的时候,我们首先要看一下C语言的setjmp和longjmp的实现机制。 setjmp和longjmp分别承担非局部标号和goto作用。整体的逻辑如下: 使用setjmp,保存一个当前环境到jmp_buf跳转点,默认返回...

2020-02-12 18:43:17 481 0

原创 Lua源码分析 - 主流程篇 - 函数调用栈的实现(08)

前面几章我们介绍了Lua常用的最重要的几个数据结构。这章节开始,我们开始讲解主流程篇。 主流程,一般都是从lua.c的main方法开始。那我们就从main方法开始看整个链路和流程。 调用栈操作 - pmain方法的调用总流程 从main方法中,创建完基础的lua_State *L结构后,我们...

2020-02-10 19:35:19 886 0

原创 Lua源码分析 - 数据结构篇 - Mem内存操作(07)

原先以为Lua的内存操作也是高大上的,但是仔细研究了一下,突然发现,这块代码绕来绕去,封装来封装去,有一些low low感。 废话少说,直接上原理吧。这部分的代码,我也不画详细的图了。 Mem内存操作 - 核心分配函数 Lua的全局状态机里面,有两行代码,定义了内存分配的基础函数。底层的内存...

2020-02-02 16:01:54 771 0

原创 Lua源码分析 - 数据结构篇 - Table实现(06)

Lua语言中,Table结构类型是比较强大的一个存在。和PHP的数组有些类似。比较万能和强大。 Lua语言中Table的具体实现,主要在ltable.c文件中。 Lua语言的Table有两个特性: 1. Table使用关联数组,可以用任意类型来作为数组的索引键值 2. Table没有固定大...

2020-02-01 16:32:13 840 0

原创 Lua源码分析 - 数据结构篇 - 字符串池实现(05)

前面两章我们讲解了Lua的整个栈操作。本篇文章开始,我们重点阅读一下Lua的几个重要数据结构:字符串、内存操作、对象操作等。 字符串操作对应的文件:lstring.c 字符串 - 数据结构 Lua的字符串管理都会统一挂载到global_State全局状态机上。 字符串都会存储在TStrin...

2020-01-31 17:45:37 801 2

原创 Lua源码分析 - 栈结构篇 - 栈操作函数的实现(04)

上一章节讲解了Lua的栈结构,理解了上一篇的栈接口在看本片应该比较好理解。 Lua常用的栈操作API主要在lapi.c(lapi.c也提供给外部使用)文件中。 Lua栈操作 - 垃圾回收值处理 Lua针对需要垃圾回收的元素,在压入栈时,都会在Lua(也就是Lua虚拟机中)生成一个副本。 总...

2019-07-26 10:58:11 1087 0

原创 Lua源码分析 - 栈结构篇 - 数据栈和调用栈(03)

Lua栈结构 - 栈存储方式 Lua栈结构主要是lua_State结构上。Lua的栈结构主要由两部分组成:数据栈和调用栈 数据栈:主要由一个StkId结构的数组组成。所有的数据都通过lapi.c文件中的lua_push*函数向栈上压入不同类型的值(数字、字符串、函数等)。L->stack...

2019-07-25 17:14:18 2293 1

原创 Lua源码分析 - 基础篇 - 全局状态机的实现(02)

从main函数看整个状态机的初始化 Lua的main函数方法中,lua_State *L = luaL_newstate(); ,主要用于创建全局状态机。 luaL_newstate主要用来为每一个LUA线程创建独立的函数栈和线程栈,以及线程执行过程中需要用到的内存管理、字符串管理、gc等信息...

2019-03-11 15:06:51 4564 5

原创 Lua源码分析 - 基础篇 - Lua源码的结构和架构图(01)

很久很久没有写博客了,一直忙于工作和项目,最近依然想静下来阅读一些好的源码。自从读完了Nginx和Memcache的源码后,对服务器端的基础开源软件的实现原理有了一定的认识,接下来想看看Lua这门精巧的语言是如何实现的。 开启Lua源码阅读之旅 Lua是一门用C语言编写的脚本语言,一共1w多行...

2018-11-26 17:43:41 10829 1

转载 转载和积累系列 - 分析服务器日志常用命令

1、查看有多少个IP访问:awk '{print $1}' log_file|sort|uniq|wc -l2、查看某一个页面被访问的次数:grep "/index.php" log_file | wc -l3、查看每一个IP访问了多少个页面:awk �...

2017-06-12 12:55:38 1146 0

原创 Nginx源码分析 - 实战篇 - 编写一个阶段化的模块(25)

HTTP模块篇,我们讲过Nginx的HTTP阶段处理 《Nginx源码分析 - HTTP模块篇 - ngx_http_core_run_phases函数和HTTP模块的阶段处理PHASE handler》我们代码在《Nginx源码分析 - 实战篇 - 编写一个自定义的模块》的基础上,将定义一个回调...

2017-06-08 13:19:07 4205 5

原创 Nginx源码分析 - 实战篇 - 编写一个自定义的模块(24)

Nginx源码分析 - 实战篇 - 编写一个自定义的模块

2017-06-08 12:03:28 4925 1

原创 Nginx源码分析 - HTTP模块篇 - HTTP模块的阶段处理PHASE handler(23)

上一章我们讲解了HTTP request的解析过程。我们基本知道了Nginx是如何解析HTTP的行和头。这一章我们主要讲解Nginx的阶段处理(PHASE 状态机实现)。阶段处理的概念如何理解,我举个例子:一个HTTP请求过来,除了解析HTTP的行和头外,还需要解析URI的rewrite、接受HT...

2017-06-07 14:49:26 4496 0

原创 Java深入 - jdk8特性

1. 接口提供默认方法Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可public interface Test { int get(); /* JAVA8 接口默认方法*/ default int getVal(int ...

2017-04-27 14:03:42 1248 0

提示
确定要删除当前文章?
取消 删除