Got

程序的一生:从源程序到进程的辛苦历程

一曲冷凌霜 提交于 2020-03-17 10:34:39
某厂面试归来,发现自己落伍了!>>> 摘要:一个程序的一生,从源程序到进程的辛苦历程!本文不深入研究编译原理、操作系统原理,主要聚焦于程序的加载和链接。 一、前言 作为计算机专业的人,最遗憾的就是在学习编译原理的那个学期被别的老师拉去干活了,而对一个程序怎么就从源代码变成了一个在内存里活灵活现的进程,一直也心怀好奇。这种好奇驱使我要找个机会深入了解一下,所以便有了本文,来督促自己深入研究程序的一生。不过, 本文没有深入研究编译原理、操作系统原理,而是主要聚焦于程序的链接和加载。 学习的过程中主要参考了三本书、一个视频、一个音频(文末有列出),三本书里,最主要的还是**《程序员的自我修养 - 链接、装载与库》**,里面的代码放到了 我的github 上,并且配有shell脚本和说明,运行后可以实操理解到更多内容。 南大袁春风老师的计算机原理讲解 对我帮助最大,视频是最直接传达知识的方式。另外,为了方便自己的实验,制作了一个ubuntu的环境,并且内置了代码,方便实验:阿里docker镜像 docker pull registry.cn-hangzhou.aliyuncs.com/piginzoo/learn:1.0 二、概述 每天都有无数的程序被编译、部署,不停地跑着,它们干着千奇百怪的事情。如同这个光怪陆离的世界,是由每个人、每个个体组成的,如果我们剖析每个人

视频直播流程以及直播黑屏问题

爱⌒轻易说出口 提交于 2020-03-15 08:06:59
视频直播流程以及直播黑屏问题 最近做了一个视频直播的项目,要求在直播不流畅或者网络不可用的时候需要做本地录制,而保证视频不丢失。之前的项目都是只有直播没有本地录制,所以在原来项目上需要做非常多的修改以及代码流程的变更。代码编写工作基本完成之后在做压力测试的时候发现,偶现的直播的时候视频会黑屏。我们的项目是基于开源项目 SopCastComponent 来进行的,下面的代码分析也是基于此开源项目。视频直播也是基于RTMP协议完成的。 首先说一下基于RTMP协议如何进行一次直播。RTMP协议是基于TCP协议实现的。首先当然是建立TCP链接,TCP链接建立成功之后发送rtmp相关头信息: private void rtmpConnect() { SessionInfo.markSessionTimestampTx(); Command invoke = new Command("connect", ++transactionIdCounter); AmfObject args = new AmfObject(); args.setProperty("app", connectData.appName); args.setProperty("flashVer", "LNX 11,2,202,233"); // Flash player OS: Linux, version: 11.2

如何在 Knative 中部署 WebSocket 和 gRPC 服务?

最后都变了- 提交于 2020-03-08 14:27:12
作者 | 冬岛 阿里云容器平台工程师 **导读:**虽然说 Knative 默认就支持 WebSocket 和 gRPC,但在使用中会发现,有时想要把自己的 WebSocket 或 gRPC 部署到 Knative 中,还是存在各种不顺利。虽然最后排查发现,大多是自己的程序问题或是配置错误导致的。本文分别给出了一个 WebSocket 和 gRPC 的例子,当需要在生产或者测试环境部署相关服务时,可以使用本文给出的示例进行 Knative 服务的测试。 WebSocket 如果自己手动的配置 Istio Gateway 支持 WebSocket 就需要开启 websocketUpgrade 功能。但使用 Knative Serving 部署其实就自带了这个能力。本示例的完整代码放在 https://github.com/knative-sample/websocket-chat ,这是一个基于 WebSocket 实现的群聊的例子。 使用浏览器连接到部署的服务中就可以看到一个接收信息的窗口和发送信息的窗口。当你发出一条信息以后所有连接进来的用户都能收到你的消息。所以你可以使用两个浏览器窗口分别连接到服务中,一个窗口发送消息一个窗口接收消息,以此来验证 WebSocket 服务是否正常。 本示例是在 gorilla/websocket 基础之上进行了一些优化: 代码中添加了

svg的两个坑

本秂侑毒 提交于 2020-02-28 09:28:41
1. WebStorm 按两下空格输入 soft wrap 进行换行 2. 第一个坑: svg 中的 fill 属性处理 svg 里面如果有 fill="",就会有颜色,可以手动去除,但是如果有很多个 svg 那么一个个去很麻烦 用 svgo-loader 解决这个问题,在 vue.config.js 中配置 config.module .use('svgo-loader').loader('svgo-loader') .tap(options=>({ ...options, plugins:[{ removeAttrs:{attrs:'fill'} }] }) ) .end() 安装方法 yarn add svgo-loader -D 3. 碰到问题安装包和 node 版本不匹配 The engine "node" is incompatible with this module. Expected version "^8.16.0 || ^10.6.0 || >=11.0.0". Got "8.12.0" 解决办法用 nvm 安装 10 版本的,升级办法参考: https://dev.to/peterwitham/install-and-update-nodejs-on-the-mac-with-nvm-1m9j nvm install 10 4. 提交修改 点 Version

英语日常用语

十年热恋 提交于 2020-02-27 06:42:34
1、To save pepole's lives. 救死扶伤。 2、I don't like any of my options. 我不喜欢我的所有选项。 3、You are on the wrong team. 你站错了队。 4、Never be afraid. 不要害怕。 5、People need ressurance. 人们需要保证。 6、Normal shoud be lower. 通常应该更低一些。 7、Nice work. 干的好。 8、Just friendly warning. 只是友情提示。 9、That's all we need. 这就够了。 10、Are you proud or disappointed? 你是骄傲还是失望? 11、I'm your neighbor. 我是你的邻居。 12、Everything has to be perfect. 一切必须万无一失。 13、 scut work 打杂 14、You're not gonna figure out what he's thinking. 你不知道他在想什么。 15、What should I do with him? 我该拿他怎么样? 16、Why can't you answer my questions? 你为什么不回答我的问题? 17、You start to think about

图数据库设计实践 | 存储服务的负载均衡和数据迁移

不想你离开。 提交于 2020-02-26 23:52:20
在文章 《Nebula 架构剖析系列(一)图数据库的存储设计》 中,我们提过分布式图存储的管理由 Meta Service 来统一调度,它记录了所有 partition 的分布情况,以及当前机器的状态。当 DBA 增减机器时,只需要通过 console 输入相应的指令,Meta Service 便能够生成整个 Balance 计划并执行。而之所以没有采用完全自动 Balance 的方式,主要是为了减少数据搬迁对于线上服务的影响,Balance 的时机由用户自己控制。 在本文中我们将着重讲解在存储层如何实现数据和服务的负载平衡。 简单回顾一下, Nebula Graph 的服务可分为 graph,storage,meta。本文主要描述对于存储层(storage)的数据和服务的 balance。这些都是通过 Balance 命令来实现的:Balance 命令有两种,一种需要迁移数据,命令为 BALANCE DATA ;另一种不需要迁移数据,只改变 partition 的 raft-leader 分布(负载均衡),命令为 BALANCE LEADER 。 本文目录 Balance 机制浅析 集群数据迁移 Step 1:准备工作 Step 1.1 查看现有集群状态 Step 1.2 创建图空间 Step 2 加入新实例 Step 3 迁移数据 Step 4 假如要中途停止 balance

VirtualBox Euleros 虚拟机 安装docker-ce

喜欢而已 提交于 2020-02-26 22:08:24
一、安装: sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo sudo sed -i 's+download.docker.com+mirrors.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo sudo yum makecache fast sudo yum install docker-ce sudo rpm -ivh https://mirrors.huaweicloud.com/epel/epel-release-latest-7.noarch.rpm sudo cp -a /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup sudo mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup sudo sed -i "s/#baseurl/baseurl/g" /etc/yum.repos.d/epel.repo sudo sed -i "s

segfault on jump from PLT

非 Y 不嫁゛ 提交于 2020-02-06 07:41:06
问题 I am trying to find the cause of a segfault, and narrowed it to the PLT using gdb's btrace. The segfault occurs during a jump from the PLT to the GOT, which I interpret to signify that the PLT became corrupted during execution. Based on the analysis presented below, is this interpretation correct? What are likely culprits for corruption of the PLT? Stack overflow? I believe that installing a watchpoint on the GOT address could be helpful in this instance. Would watch -l 0x55555562f048 be the

undefined reference to `_GLOBAL_OFFSET_TABLE_' in gcc 32-bit code for a trivial function, freestanding OS

回眸只為那壹抹淺笑 提交于 2020-01-24 15:05:27
问题 I have a small c code file(function.c): int function() { return 0x1234abce; } I am using a 64 bit machine. However, I want to write a small 32 bit OS. I want to compile the code into a 'pure' assembly/binary file. I compile my code with: gcc function.c -c -m32 -o file.o -ffreestanding # This gives you the object file I link it with: ld -o function.bin -m elf_i386 -Ttext 0x0 --oformat binary function.o I am getting the following error: function.o: In function `function': function.c:(.text+0x9)

undefined reference to `_GLOBAL_OFFSET_TABLE_' in gcc 32-bit code for a trivial function, freestanding OS

耗尽温柔 提交于 2020-01-24 15:04:51
问题 I have a small c code file(function.c): int function() { return 0x1234abce; } I am using a 64 bit machine. However, I want to write a small 32 bit OS. I want to compile the code into a 'pure' assembly/binary file. I compile my code with: gcc function.c -c -m32 -o file.o -ffreestanding # This gives you the object file I link it with: ld -o function.bin -m elf_i386 -Ttext 0x0 --oformat binary function.o I am getting the following error: function.o: In function `function': function.c:(.text+0x9)