基础架构开发-操作系统、编译器、云原生、嵌入式、ic
基础架构开发-操作系统、编译器、云原生、嵌入式、ic
- 操作系统
- 编译器
- 词法分析
- AST语法树生成
- 语法优化
- 生成机器码
- 云原生容器开发
- 一般遇到的岗位描述
- RDMA、DPDK是什么东西
- NFV和VNF是什么
- RisingWave云原生存储引擎开发实践
- 单片机、嵌入式
- 雷达
- 路线规划
- ic开发
操作系统
以C和Rust为主。
开发上一般是基于Linux开源版本进行重构或者二次开发,也有为了学习或者科研的目的从头开始构建,但依旧会借鉴Linux系统。
在操作系统之下有几种软件架构开发是比较重要的——编译器、云原生容器、数据库等。
编译器
编译器算是一种基于操作系统的软件开发,任何高级开发语言都是基于编译器才能编译成机器码或者汇编给操作系统执行。
词法分析
先分类,例如关键字、数值、字符、变量名/函数名、符号、运算符(符号和运算符可能有重叠)等,再进行语法分析,得出变量/函数/类/结构体的声明与定义、指针、赋值、判断、循环、函数。
之后对其上下文和指针在栈进行处理。
这个解析过程是使用正则进行大部分判断,可以把输入都当作一个个单词来考虑,例如int
关键字正则就是int\s
,函数式的判断例如void add(int a, int b) {}
使用正则是void\s[^(_|[a-b]){1}a-bA-Z_0-9]*\([^\)]*\)\{[^\}]*\}
而数值要注意可以根据开头或者结尾区分二进制、四进制、八进制、十进制、十六进制等,也要根据符号位区分正数、负数,根据小数点区分整数、浮点数。
词法和语法分析其实与AST语法树生成有紧密联系,只不过同时这种分析也要用于编辑器ide本身的即时提示和纠错。
AST语法树生成
一般是先中间后两边的树结构,例如a=1的赋值语法,父节点就是=,左节点是a,右节点是1,同理扩展到函数定义,void main(int num) {/
函数体/},中间是函数名,左边是参数值,右边是函数体,且挂靠孙子节点为返回值类型。
语法优化
生成机器码
要点:
- 寄存器的分配,通过变量-图的着色算法RCG(Register Conflict
Graph)来整理适用范围、冲突从而决定寄存器的分配,高级点的系统有16~32个寄存器,低级系统只有8个寄存器。 - 指令码的生成(查CPU手册)
- 特殊处理,如循环需要考虑具体的机器码生成,由于同一条指令最多只能使用3个寄存器,因此会出现对寄存器的预分配导致循环体内的代码顺序与实际处理后的顺序不一致的情况(会出现例如代码赋值是在真假判断里,而生成后是在判断外面,内存失去控制)。
云原生容器开发
以C++、Rust和Golang较为常见。
一般遇到的岗位描述
基础架构小组,致力于研发资源架构技术,跟进最前沿的云原生网络场景,参与云原生开源社区最前沿的技术
工作职责:
- 负责云计算网络转发面架构与研发,包括、容器网络、虚拟化、软硬件结合等云网络和云原生技术;
- 负责云网络数据化、网络优化以及线上运维等工作;
任职要求 - 精通C/C++/Go中的一种或者多种高级语言,熟悉一种或者多种脚本语言,如shell、python等;
- 深刻理解路由交换原理,及二三层网络协议栈实现;
- 深刻理解操作系统原理,有较好的系统架构和设计能力;
- 有多核平台下开发及性能调优经验,如RDMA、DPDK等;或有丰富的高性能服务器网络编程经验;
- 喜欢挑战性的工作,饱满的工作激情,能承受工作压力,有较强的自我驱动能力;
有以下经验者优先: - 有Kubernetes/Cilium/Calico/eBPF/CNI 等开源社区贡献者优先;
- 有 NFV和VNF 经验者优先;
RDMA、DPDK是什么东西
RDMA(Remote Direct Memory Access)和DPDK(Data Plane Development Kit)是在多核平台下进行开发和性能调优的两个重要技术。
RDMA:RDMA是一种网络通信技术,它允许在不经过CPU的情况下,直接在内存之间进行数据传输。RDMA技术通过绕过操作系统内核,将数据传输的负载从CPU转移到网络适配器上,从而提高了网络传输的效率和性能。RDMA常用于高性能计算、云计算和大数据等领域,可以显著提升数据传输的速度和降低延迟。
DPDK:DPDK是一个用于数据平面开发的软件开发工具包。它提供了一组优化的用户态库和驱动程序,用于加速数据包处理和网络应用的性能。DPDK通过绕过操作系统内核,直接在用户态进行数据包处理,从而减少了系统调用和上下文切换的开销,提高了网络应用的吞吐量和响应速度。DPDK常用于网络功能虚拟化(NFV)、软件定义网络(SDN)和高性能网络应用等领域。
这些技术在多核平台下的开发和性能调优中发挥了重要作用。它们可以提高系统的吞吐量、降低延迟,并充分利用多核处理器的计算能力。然而,使用这些技术需要深入理解底层硬件和网络协议,并进行相应的编程和配置。在实际应用中,需要根据具体的场景和需求,选择合适的技术和优化策略,以达到最佳的性能和效果。
NFV和VNF是什么
NFV(Network Functions Virtualization)和VNF(Virtualized Network Function)是与网络功能虚拟化相关的两个概念。
-
NFV(Network Functions
Virtualization):NFV是一种网络架构和技术范式,旨在将传统的专用网络设备(如路由器、防火墙、负载均衡器等)转变为基于通用服务器和虚拟化技术的软件实现。NFV的目标是通过将网络功能从专用硬件中解耦,将其作为虚拟化的软件实例在通用服务器上运行,从而提高网络的灵活性、可扩展性和成本效益。 -
VNF(Virtualized Network
Function):VNF是在NFV架构中运行的虚拟化网络功能。它代表了传统网络设备的虚拟化实例,可以在通用服务器上以软件的形式运行。VNF可以包括各种网络功能,如路由、防火墙、负载均衡、加密解密等。通过将这些网络功能虚拟化为软件实例,VNF可以根据需要进行动态部署、配置和管理,从而提供更高的灵活性和可定制性。
NFV和VNF的引入使得网络的部署和管理更加灵活和高效。它们可以帮助提供商在网络中快速部署和调整各种网络功能,同时降低了硬件成本和维护成本。这些概念在网络领域中得到广泛应用,特别是在云计算、软件定义网络(SDN)和网络运营商等领域。
RisingWave云原生存储引擎开发实践
云原生流式数据库,特点是数据通过流的方式不断写入,难点在于保留数据库特性,例如一致性和持久化。
假设现在有以下表结构:
# 出价表
CREATE TABLE Bid
(auction BIGINT COMMENT ‘拍品’,price BIGINT COMMENT ‘单次出价价格’
);
# 拍品表
CREATE TABLE Auction
(id BIGINT COMMENT ‘标识’,item_name VARCHAR COMMENT ‘拍品名称’
);
执行关联查询拿到拍品的一些信息和均价:
SELECT A.id AS auction_id,A.item_name AS auction_item_name,COUNT(B.auction) as bid_count,SUM(B.price) / COUNT(B.auction) as bid_avg_price
FROM Auction AJOIN Bid BON A.id == B.auction
GROUP BY A.id, A.item_name;
若每张表都有几百万数据,这么计算可能延迟性比较大,更常见的是做成VIEW视图查询。
云原生中会将两个源数据(这里是两张表)进行雾化成视图的形式,再进行聚合操作,过程中视图会使用流式传输持续加入新的数据,从而对下游形成新的聚合结果。
这个过程中会利用Hash对数据更新进行一个判断,并且状态会使用一些key-value的抽象化存储模型。
需要完成状态一致性:
- source无界数据流(实际是有界的,利用这点是可以计算出是否一致)
- source从开头到任意范围内的数据位有界数据子集
- 流式计算中所有的状态和source对应的范围是一致的
- 系统初始化后则达到一致性的状态
- 集群出错后可以恢复到一致性的状态
- 查询和实际的source必须保持一致,而不是source增加了新数据后查询依旧是旧的状态
这种状态流更新是利用Inject Barrier的方式,将source切片计算Hash等值确认后再进行传输处理。
利用分布式模型分别处理这些切片,这里再次利用Hash计算source主键来确保各自处理的切片段数据只被处理了一次而不会重复。
以上过程利用key-value将这些抽象化存储模型按照一定大小存储为本地持久化不可变的索引文件,而为满足要求大小的新数据则继续保持创建为新的barrier。
这种方式就是可以依靠barrier作为边界来来维护一致性,也可以从错误中快速恢复和完成异步检查,也可以并行完成各种操作。
整体是分享+分布式集群方式,嫁接在多个数据源之上,统一调度完成计算而不需要用户关心多个数据源或者拆分的数据库如何聚合统计的问题。
单片机、嵌入式
一般是汇编、C/C++和Android的领地,充斥各种大小型家电设备、电动玩具、无人机、车载系统、柜台、LED展板等。
嵌入式设备一般内存有限,还可能是定制电路板有自己一套编程规则,但大体都是用汇编或者基础C,车载设备和柜台、电视盒子等智能家电则是Android制霸。
工作中需要大量与各种协议、雷达/摄像头等传感器打交道。
也有特化赛道就是智能机器人
雷达
机器人是通过各种感应器持续反馈进行雷达式检测周围环境,从而完成2D乃至3D建模地图,从而可以执行后续的路线规划和行进动作。
具体可以参考:
扫地机器人的两种测距方式:TOF激光雷达和三角测距
路线规划
如果不是完全动态的线路而是先建立好了地图,则机器人需要通过gps等定位自己当前的位置,从而按照预规划好的路线行进。
而一般机器人会搭载一个基础操作系统,完成大部分与硬件交互和基础工作。如Autolabor的ROS系统
就可以完成“雷达-导航-地盘”的系统操作。
ROS编程教程
用ROS程序发布导航目标点
ic开发
ic即集成系统,ic开发一般是指ic芯片开发,也会分为前后端,需要掌握底层软硬件知识,是混合了电路设计和硬件编程的开发岗位。
相关文章:

基础架构开发-操作系统、编译器、云原生、嵌入式、ic
基础架构开发-操作系统、编译器、云原生、嵌入式、ic 操作系统编译器词法分析AST语法树生成语法优化生成机器码 云原生容器开发一般遇到的岗位描述RDMA、DPDK是什么东西NFV和VNF是什么RisingWave云原生存储引擎开发实践 单片机、嵌入式雷达路线规划 ic开发 操作系统 以C和Rust…...

C++-Mongoose(3)-http-server-https-restful
1.url 结构 2.http和 http-restful区别在于对于mg_tls_opts的赋值 2.1 http和https 区分 a) port地址 static const char *s_http_addr "http://0.0.0.0:8000"; // HTTP port static const char *s_https_addr "https://0.0.0.0:8443"; // HTTP…...

git多分支、git远程仓库、ssh方式连接远程仓库、协同开发(避免冲突)、解决协同冲突(多人在同一分支开发、 合并分支)
1 git多分支 2 git远程仓库 2.1 普通开发者,使用流程 3 ssh方式连接远程仓库 4 协同开发 4.1 避免冲突 4.2 协同开发 5 解决协同冲突 5.1 多人在同一分支开发 5.2 合并分支 1 git多分支 ## 命令操作分支-1 创建分支git branch dev-2 查看分支git branch-3 分支合…...

ChatGPT或将引发现代知识体系转变
作为当下大语言模型的典型代表,ChatGPT对人类学习方式和教育发展所产生的变革效应已然引起了广泛关注。技术的快速发展在某种程度上正在“倒逼”教育领域开启更深层次的变革。在此背景下,教育从业者势必要学会准确识变、科学应变、主动求变、以变应变&am…...

【爬虫实战】用pyhon爬百度故事会专栏
一.爬虫需求 获取对应所有专栏数据;自动实现分页;多线程爬取;批量多账号爬取;保存到mysql、csv(本案例以mysql为例);保存数据时已存在就更新,无数据就添加; 二.最终效果…...

焦炭反应性及反应后强度试验方法
声明 本文是学习GB-T 4000-2017 焦炭反应性及反应后强度试验方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 7— 进气口; 8— 测温热电偶。 图 A.1 单点测温加热炉体结构示意图 A.3 温度控制装置 控制精度:(11003)℃。…...

链表(3):双链表
引入 我们之前学的单向链表有什么缺点呢? 缺点:后一个节点无法看到前一个节点的内容 那我们就多设置一个格子prev用来存放前面一个节点的地址,第一个节点的prev存最后一个节点的地址(一般是null) 这样一个无头双向…...

【TES720D】基于复旦微的FMQL20S400全国产化ARM核心模块
TES720D是一款基于上海复旦微电子FMQL20S400的全国产化核心模块。该核心模块将复旦微的FMQL20S400(兼容FMQL10S400)的最小系统集成在了一个50*70mm的核心板上,可以作为一个核心模块,进行功能性扩展,特别是用在控制领域…...

Python 列表切片陷阱:引用、复制与深复制
大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 Python 列表的切片和赋值操作很基础,之前也遇到过一些坑, 但今天刷 Codewars 时发现了一个更大的坑,故在此记录。 Python 列表赋值&am…...

macbook电脑删除app怎么才能彻底清理?
macBook是苹果公司推出的一款笔记本电脑,它的操作系统是macOS。在macBook上安装的app可能会占用大量的存储空间,因此,当我们不再需要某个app时,需要将其彻底删除。macbook删除app,怎么才能彻底呢?本文将给大…...

【数据结构】二叉树--链式结构的实现 (遍历)
目录 一 二叉树的遍历 1 构建一个二叉树 2 前序遍历 3 中序遍历 4 后续遍历 5 层序 6 二叉树销毁 二 应用(递归思想) 1 二叉树节点个数 2 叶子节点个数 3 第K层的节点个数 4 二叉树查找值为x的节点 5 判断是否是二叉树 一 二叉树的遍历 学习二叉树结构࿰…...

reids基础数据结构
文章目录 一.整体1.RedisDb2.对象头 二.string三.list1.ziplist2.quicklist 四.hash五.set六.zset1.查找2.插入3.删除4.更新5.元素排名 一.整体 1.RedisDb redis内部的所有键值对是两个hash结构,维护了键值对和过期时间 dict *dictdict *expire 2.对象头 int t…...

gitlab 维护
一 环境信息 二 日常维护 2.1 gitlab mirror 2.1.1 常见方法 社区版本gitab mirror 只能push,默认限制了局域网内mirror 需要修改admin/setting/network(网络)/outbound(出站请求) 勾选允许局域网即可。 2.1.2 疑难问题 内网有三个gitlab A: GITLAB 12 B\C GI…...

ABB机器人RWS连接方法
目录 方法一:curl 方法二:网页地址 方法三:Postman 与ABB机器人通讯,较新机器人,可以使用Robot Web Services,直接方便地使用网页进行查看当前数据,但是网页需要用户名密码验证,测…...

Spring Boot的循环依赖问题
目录 1.循环依赖的概念 2.解决循环依赖的方法 1.构造器方法注入: 2.Lazy注解 3.DependsOn注解 1.循环依赖的概念 两个或多个bean之间互相依赖,形成循环,此时,Spring容器无法确定先实例化哪个bean,导致循环依赖的…...

postgresql|数据库|恢复备份的时候报错:pg_restore: implied data-only restore的处理方案
一, 前情回顾 某次在使用pg_dump命令逻辑备份出来的备份文件对指定的几个表恢复的时候,报错pg_restore: implied data-only restore 当然,遇到问题首先就是百度了,但好像没有什么明确的解决方案,具体的报错命令和…...

Elasticsearch:使用 Langchain 和 OpenAI 进行问答
这款交互式 jupyter notebook 使用 Langchain 将虚构的工作场所文档拆分为段落 (chunks),并使用 OpenAI 将这些段落转换为嵌入并将其存储到 Elasticsearch 中。然后,当我们提出问题时,我们从向量存储中检索相关段落,并使用 langch…...

安全巡检管理系统—隐患排查治理
安全管理越来越重要,每个生产企业都需要一个安全隐患排查治理小程序!利用凡尔码平台搭建安全巡检管理系统主要有以下四个功能 1、制定巡检计划:安全巡检管理系统可以帮助用户制定巡检计划,用户可以根据需要创建不同的计划…...

第9期ThreadX视频教程:自制个微秒分辨率任务调度实现方案(2023-10-11)
视频教程汇总帖:【学以致用,授人以渔】2023视频教程汇总,DSP第12期,ThreadX第9期,BSP驱动第26期,USB实战第5期,GUI实战第3期(2023-10-11) - STM32F429 - 硬汉嵌入式论坛 …...

C++ 11 lamdba表达式详解
C lamdba 表达式 Lambda表达式是C11引入的一个新特性,它允许我们在需要函数对象的地方,使用一种更加简洁的方式定义匿名函数。Lambda表达式通常用于STL中的算法、回调函数、事件处理程序等场合。 Lambda表达式的基本语法为: Copy Code[captu…...

Linux运行环境搭建系列-Zookeeper安装
Zookeeper安装 ## 下载Zookeeper:https://zookeeper.apache.org/releases.html https://dlcdn.apache.org/zookeeper/zookeeper-3.8.3/apache-zookeeper-3.8.3-bin.tar.gz ## 解压 tar -zxvf apache-zookeeper-3.8.3-bin.tar.gz ## 删除原文件,重命名 r…...

vscode利用lauch.json和docker中的delve调试本地crdb
---- vscode利用delve调试crdb 创建了一个delve容器用于debug crdbdelve: Delve是一个用于Go编程语言的调试器。它提供了一组命令和功能,可以帮助开发人员在调试过程中检查变量、设置断点、单步执行代码等操作。Delve可以与Go程序一起使用,…...

【java|golang】多字段排序以及排序规则
奖励最顶尖的 K 名学生 给你两个字符串数组 positive_feedback 和 negative_feedback ,分别包含表示正面的和负面的词汇。不会 有单词同时是正面的和负面的。 一开始,每位学生分数为 0 。每个正面的单词会给学生的分数 加 3 分,每个负面的词…...

腾讯云 轻量云 上海 VPS 测评
description: 发布于 2023-07-05腾讯云 轻量云 上海 VPS 测评 腾讯云国内机非常稳定,一年用下来没有掉线丢包的情况。国内机适合与备案域名一起建站使用。带宽很小,图片资源使用CDN加速或海外机提供。 规格 CPU - 2核 内存 - 2GB 系统盘 - SSD云硬盘…...

消息称苹果或在明年推出搭载M3芯片的MacBook产品
近日据 DigiTimes 发布的博文,苹果公司计划在 2024 年推出搭载 M3 芯片的 MacBook 产品。然而,关于这款新产品的发布日期仍存在争议。虽然一些爆料认为苹果可能会在今年发布这款产品,但也有一些爆料认为发布时间会推迟到 2024 年。根据各项报…...

Generalizable NeRF in ICCV‘23
文章目录 前置知识Generalizable《Enhancing NeRF akin to Enhancing LLMs: Generalizable NeRF Transformer with Mixture-of-View-Experts》《WaveNeRF: Wavelet-based Generalizable Neural Radiance Fields》NeO 360: Neural Fields for Sparse View Synthesis of Outdoor …...

Unity2017适配安卓12
测试版本为Unity2017.4.25f1 1.在自定义AndroidManifest.xml(位于Assets\Plugins\Android\)中添加android:exported"true" <?xml version"1.0" encoding"utf-8"?> <manifestxmlns:android"http://schema…...

ios UI 基础开发一
目录 第一节:基础库 第二节:弹出模拟器的键盘 第三节:模拟器回到桌面 第四节:Viewcontroller 与 View 的关系 第五节:快捷键 第六节:键盘召回 第七节:启动流程xcode介绍 第八节…...

echarts一些配置项的使用
前言:我是自己最近写项目用到的,我做个整理; 一. 基本使用 1.具有大小(宽高)的div ,id唯一; 例如: <div id"crewEchart"></div> 2.在项目中引入: import * as echarts from "echarts"; 3.写一个关于他的方法,在mounted的时候调用: moun…...

python yaml库:safe_load()(安全解析函数,解析yaml)(防止yaml文件中包含恶意代码)
文章目录 Python YAML: 使用 safe_load 进行安全解析什么是 safe_load?如何使用 safe_load?为什么选择 safe_load 而非 load? Python YAML: 使用 safe_load 进行安全解析 YAML (YAML Ain’t Markup Language) 是一种人类可读的数据序列化标准。它被广泛用于配置文件、多语言…...