App 后台架构设计方案 设计思想与最佳实践

2023-05-16

CSDN 2016博客之星评选结果公布      【系列直播】零基础学习微信小程序!        “我的2016”主题征文活动     博客的神秘功能
标签: App后台架构设计用户验证方案后台架构的演进架构
2017-01-08 16:10 245人阅读 评论(0) 收藏 举报
本文章已收录于:
分类:
作者同类文章 X

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    转载请注明出处:http://blog.csdn.net/smartbetter/article/details/53933096

    做App做的久了,就想研究一下与之相关的App后台,发现也是蛮有趣的。App后台的两个重要作用就是 远程存储数据 和 消息中转。这里面的知识体系也是相当复杂,做好一个App后台也是需要长期锤炼的。本篇文章从 App 后台架构 的角度介绍。好了,下面进入正题:

    说起架构,我们先看一下何为架构,百度百科是这样说的:架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。那么我们也可以看出,架构是和业务紧密相关的,是由业务驱动的。

    由于App客户端的特性,因此App后台对技术实现和一般的Web后台是有区别的。首先看一个适合App开发的开发模式:

    1.敏捷开发模式

    这里推荐Scrum这个敏捷开发框架,具体可以查看Scrum官网学习使用,这里只是引入。

    Scrum流程如下图:

    Scrum流程

    2.选择合适的数据库产品和服务器系统

    数据库产品众多,这里我就针对Redis、MongoDB、MySQL还有MySQL的分支MariaDB展开说明:

    1.数据库产品

    数据库数据存放位置查找数据的区别
    Redis内存基于键值对存储,读写速度快
    MongoDB同时使用了硬盘和内存每个数据有一个id(索引),知道id(索引)查询速度快,不知道id(索引)效率低
    MySQL(MongoDB)硬盘每个数据有一个id(索引),知道id(索引)查询速度快,不知道id(索引)效率低

    然后根据不同的产品需求选择恰当的数据库产品,如果没有特殊的需求,Redis做缓存系统,MySQL 或 MariaDB 做数据库(常见的设置是 数据库默认字符集utf8,默认排序utf8_general_ci) 将会是很好的选择。

    软件优化:

    1)正确使用MyISAM和InnoDB存储引擎
    2)正确使用索引
    3)避免使用 select *
    4)字段尽可能的设置 非NULL
    

    硬件优化:

    1)增加物理内存
    2)增加应用缓存
    3)使用SSD硬盘
    

    架构优化:

    1)分表
    2)读写分离
    

    读写分离架构

    3)分库(把一张表的数据分别存储在不同的数据库,可用MyCat实现,MyCat,关系型数据库分布式处理软件)。
    MyCat以代理服务器的形式位于App服务器和后台数据库之间,
    对外开放的接口是MySQL通信协议,将App服务器传过来的sql语句按照路由的规则拆解转发到不同的后台数据库,并把结果汇总返回。
    MyCat部署模型如下:
    

    MyCat部署模型

    2.服务器系统

    CentOS 则是一个不错的选择。关于服务器的部署,我在之前已经介绍过了,地址如下:

    Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
    http://blog.csdn.net/smartbetter/article/details/53535435

    Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
    http://blog.csdn.net/smartbetter/article/details/53615313

    下面补充两个常见的Linux命令:

    top           显示系统资源情况
    netstat       查看网络相关信息
    

    3.选择合适的消息队列软件

    当后台系统发现完成某些小任务需要花费很多时间,而且迟点晚成也不影响整个任务的完成进度时,就会把这些小任务交给消息队列。例如发送邮件、短信、推送消息等任务都非常适合在消息队列中处理。

    把这些任务放在消息队列中,可加快App后台请求都响应时间。同时消息队列也能把大量的并发请求变成串行的请求,来减轻服务器的负担。

    常见的消息队列软件有:

    消息队列软件说明
    RabbitMQ重量级,适合企业级的开发,自带Web监控界面,方便监控队列的情况
    Redis轻量级,是一个key-value系统,但是也支持消息队列这种数据结构,App后台中Redis被广泛使用
    ZeroMQ号称最快,尤其针对大吞吐量的需求场景
    ActiveMQApache的一个子项目,能够以代理人和点对点的技术实现队列

    4.使用分布式服务实现业务的复用

    随着业务不断增加,后台系统由一个单一应用膨胀为一个巨无霸系统,系统中聚合了大量的应用和服务,各个模块之间有很多功能重复实现(例如登录模块),造成了开发、运维、部署的麻烦。

    膨胀的系统

    大量应用中的重复模块会带来大量的访问,而每个应用与数据库的连接,一般是使用数据库的连接池,这个连接池的资源一般是不释放且一直保留着。假设连接池中有10个连接,中一个数百的服务器集群中,就占用了数据库1000个连接。数据库中的每个连接都是十分珍贵的资源,在资源有限的情况下,这里被占用了,其他能用的资源就少了。

    解决这些问题的方法就是把重复实现的模块独立部署为远程服务,新增的业务调用远程服务所提供的功能实现相关的业务,不依赖于里面具体的代码实现。

    使用远程服务后的系统

    实现远程服务可以 参考 REST设计原则 和 RPC远程调用协议。

    开源的RPC库有:

    开源的RPC库说明
    Hprose轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库
    Dubbo分布式服务框架,致力于提供高性能和透明化的RPC远程调用服务和SOA服务治理方案

    5.用户验证方案最佳实践

    App操作中经常涉及用户登录操作,登录就需要使用到用户名和密码,为了安全起见,在登录过程中暴漏密码的次数越少越好。

    1.使用HTTPS协议

    HTTPS协议是 HTTP协议 和 SSL/TLS协议 的组合。其是一个安全通信通道,基于HTTP开发,用于在客户计算机和App后台之间交换信息。其使用安全套接字层(SSL)进行信息交换,简单来说就是HTTP的安全版。

    HTTPS实际上应用了安全套接字层(SSL)作为HTTP应用层的子层。

    HTTPS的模型:

    HTTP
    SSL/TLS(安全套接字层/传输层安全协议)
    TCP
    IP
    网络传输

    避免信息的泄漏,最基本的方案是所有涉及安全性的API请求都必须使用HTTPS协议。

    2.选择JSON作为数据交换格式

    JSON是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,易于编写,也易于机器解析和生成,而且对比XML更省流量,这些特性使得JSON成为理想的数据交换语言。

    3.基本的用户验证方案

    传统Web网站使用Cookie+Session保持用户的登录状态,App后台则使用token进行验证,流程如下:

    App后台基本的用户登录方案

    此时App已经获取到了token值,为了安全,我们不在网络上传输token,而使用签名校验(这里使用URL签名)的方式,API请求加上URL签名sign和用户id后如下:

    test.com/user/update?uid=2&sign=3f1e736bc4ae958ae7e8500b45aefdbb&age=22
    

    这样,token就不需要附在URL上了。App后台签名校验流程如下:

    App后台签名校验流程

    还有的童鞋喜欢设置时间戳,这样时间一长,URL就失效了,也是一种不错的进一步的优化方案。

    建议:为了保障数据安全,这里建议 同时使用 HTTPS 和 签名校验

    6.App后台架构的演进原则

    App后台的架构是由业务规模驱动而演进的,App后台是为业务服务的,App后台的价值在于能为业务提供其所需要的功能,不应过度设计。

    从项目的角度,当App访问量不大时,应该快速搭建App后台,让App尽快上线给用户提供服务,验证商业模式的正确性,同时快速迭代产品。

    当App访问量不断上升,这时要在保证快速迭代的前提下,同时兼顾高性能和高可用。

    当App访问量达到一定阶段后,增长曲线就会放缓,但业务变得更加复杂,对高性能和高可用的要求也更高,性能问题、模块间的耦合、代码的复杂性会更加突出和明显,这时要使用业务拆分、分布式服务调用,甚至是技术转型等问题。

    1.项目启动时——单机部署

    我们看一个App后台极简化的架构:

    App后台极简化的架构

    一开始就使用Redis的好处:

    既能用作缓存,又能充当队列服务,而且并发性能高,能在长时间内应对业务压力,非常适合初期的项目。

    这里使用Redis验证用户信息,充当消息队列。

    而文件服务初期可以选择 文件云存储服务,或者自己搭建一个资源服务器。

    2.项目一定规模时——分布式部署

    我们看一个百万级到千万级的架构:

    百万级到千万级的架构

    这里新增了专门用于连接内部服务器的SSH服务的外网通道,保证SSH操作随时可用,同时加入了服务器集群,提供负载能力。

    随着业务的发展,某些数据表的规模会以几何级增长,当数据达到一定规模时,查询读取性能就下降的厉害,数据库主从的架构不能应对业务上的读写压力,这时架构上要考虑分表(水平拆分/垂直拆分)。

    当业务继续不断发展,数据库分表后的读写性能也可能没法满足业务上的需求,这时只能采用进一步的拆分策略——分库。用 Cobar 或者 MyCat 等关系型数据等分布式处理系统后,分库后的架构如下:

    分表分库的架构

    下来看一个真实社交App项目所采用的后台架构方案:

    7.社交App后台架构设计方案分享

    场景:类似 微博,用户与用户之间存在关注/粉丝两种关系,一个用户发表了新内容,关注他的用户也能在个人主页上收到最新的动态。类似 微博 这种场景:

    weibo

    社交核心功能是 Feed(指用户通过关注,聚合了被关注用户的最新的内容,也包含自己的内容,以供自己浏览的信息服务)。

    1.Feed基本表结构

    常见的Feed架构是把数据存储在MySQL,热点数据存储(一般最近3天)在缓存(Redis/Memcached),保证绝大多数请求通过缓存直接返回,只有少量请求穿透缓存落到数据库。

    下面看一下最简单的Feed表结构:

    send_content:发送内容表,存储用户发表的内容:

    字段说明
    feed_id发表的feed的id,主键自增
    author_id发表该feed的用户id
    contentfeed的内容

    reveive_content:接收内容表,用于推模式时存储用户接收的内容:

    字段说明
    feed_id发表的feed的id,主键自增
    author_id发表该feed的用户id
    reveive_id接收该feed的用户id
    contentfeed的内容

    followings:关注表,存储用户关注的人:

    字段说明
    id主键自增
    uid用户id
    following_id该用户关注的其他用户id

    followers:粉丝表,存储用户的粉丝:

    字段说明
    id主键自增
    uid用户id
    follower_id关注该用户的用户id

    2.Feed推拉模式——推模式用户发表一条内容的流程

    1)uid为1的用户发表一条内容 “HelloWorld” 信息。
    2)这条内容写入发送内容表 “send_content” 后内容如下:

    feed_idauthor_idcontent
    11HelloWorld

    3)在粉丝表 “followers” 查找uid为1用户的粉丝,粉丝表 “followers” 的内容如下:

    iduidfollower_id
    112

    可知,id为1用户的粉丝是id为2的用户。

    4)因为id为2的用户的feed中需要显示这条内容,因此把内容写入接收内容表 “reveive_content”,写入后接受内容表 “reveive_content” 内容如下:

    feed_idauthor_idreveive_idcontent
    112HelloWorld

    5)当id为2的用户显示feed时,通过sql语句 “select * from reveive_content where reveive_id=2” 就能查询该用户需要显示的数据了。

    推模式的缺点是:

    推送人数过大会出现延时,而且浪费存储空间;
    更新操作成本大,不但变更 “send_content” 表,而且需要同步变更 “reveive_content” 表。
    

    3.Feed推拉模式——拉模式用户发表一条内容的流程:

    1)uid为5的用户发表一条内容 “Thinks” 信息。
    2)这条内容写入发送内容表 “send_content” 后内容如下:

    feed_idauthor_idcontent
    11HelloWorld
    25Thinks

    3)当uid为10的用户显示feed时,在关注表 “followings” 查找uid为10所关注的用户,关注表如下:

    iduidfollowing_id
    1105

    可知,uid为10的用户关注了uid为5的用户,因此需要获取uid为5的用户发表的内容。

    4)uid为5的用户通过sql语句 “select * from send_content where author_id in (5)” 查询所以需要显示的内容。

    由上述可知,拉模式采用了时间换空间的策略,用户推送内容时效率很高,但当用户显示feed时,需要花费大量的时间在聚合运算上。

    总结:

    -发表内容显示feed变更通知
    推模式推送给所有粉丝一个sql语句就能完成变更成本高
    拉模式不推送需要大量的聚合运算无变更成本

    像 “微博” 中公开的微博采用拉模式,私密性的微博采用推模式。

    拉模式最大的问题就是大量的聚合运算,请求的响应时间可能较长,可以通过缓存策略让大部分的请求的响应时间达到2到3毫秒。

    8.其他的一些经验

    1.高效更新数据——内容的推拉

    平常App设计中,如果App需要知道首页是否有内容更新,通过一个轮询机制访问获取数据API,从API是否返回更新的数据得知是否有内容更新,轮询上很典型的拉模式,但是耗电、耗流量。

    怎么减少轮询呢? 这里给出解决方案是推模式,如下图:

    内容的推拉

    当然不能只用推模式,因为手机环境的复杂性,不能保证数据更新的通知一定能够到达App,所以也要采用轮询的方式定期拉数据,时间间隔设置可以相对长一点,通过这种推拉结合的模式,就能大大减少App访问App后台的频率和传输的数据量。

    2.处理表情的一些技巧

    表情在MySQL的存储,表情UTF-8编码有的是3个字节,有的是4个字节,所以一般的UTF编码(3个字节)是无法存储表情数据的,常用的解决方案是:

    把MySQL升级到5.5以上,然后把字符编码改为utf8mb4_general_ci。

    3.可供选择的成熟稳定的开源软件

    功能可供选择的开源软件
    项目管理软件Mantis、BugFree
    代码管理软件SVN、Git
    编程语言Java、PHP、Python等
    服务器系统CentOS、Ubuntu
    HTTP/HTTPS服务器Nginx、Tomcat、Apache
    负载均衡Nginx、LVS、HAProxy
    邮件服务Postfix、Sendmail
    消息队列RabbitMQ、ZeroMQ、Redis
    文件系统Fastdfs、mogileFS、TFS
    Android推送Androidpn、gopush
    IOS推送Javapns、Pyapns
    地理位置查询LBSMongoDB
    聊天Openfire、ejobberd
    监控ngiOS、zabbix
    缓存Memcache、Redis
    关系型数据库MySQL、MariaDB、PostgreSQL
    NoSQL数据库Redis、MongoDB、Cassandra
    搜索Coreseek、Solr、ElasticSearch
    图片处理GraphicsMagick、ImageMagick
    分布式访问服务dubbo、dubbox

    3.可供选择的成熟可靠的云服务

    对于初创公司还是建议尽可能的使用成熟可靠的云服务和开源软件,自身只专注于业务逻辑。

    功能可供选择的云服务
    项目管理工具Teambition、Tower
    代码托管平台GitHub、Gitlab、Bitbucket、CSDN CODE、Coding
    负载均衡阿里云SLB、腾讯云CLB
    邮件服务SendCloud、MailGun
    消息队列阿里云MNS、腾讯云CMQ
    文件系统、图片处理七牛云、阿里云对象存储OSS、腾讯云对象存储COS
    Android推送极光、个推、百度推送
    IOS推送极光、个推、百度推送
    聊天融云、环信
    监控监控宝、云服务器自带的监控服务
    缓存阿里云缓存服务、腾讯云弹性缓存
    关系型数据库阿里云RDS、腾讯云CDB
    NoSQL数据库阿里云NoSQL产品、腾讯云NoSQL产品
    搜索阿里云开放搜索、腾讯云搜TCS
    分布式访问服务阿里云EDAS
    防火墙阿里云云盾、腾讯云安全
    短信发送shareSDK、bmob、Luosimao
    社交登录分享shareSDK

    最后,在移动互联网项目中,产品的研发讲求 小步快走,快速迭代。 架构的设计也可以遵循同样的思路,喜欢本文的记得 顶 一下哦!

    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

    App 后台架构设计方案 设计思想与最佳实践 的相关文章

    • 对于很多公司不使用STL 引发的思考

      有些公司不使用STL xff0c 个人认为大概有以下几种可能 1 这公司应该有针对它们自己特定项目需求的特定东西 2 STL不是每个人都能用好 比如什么时候用vector高效 xff0c 什么时候用list高效 xff0c 这些都要清楚知道
    • 纯C++实现的HTTP请求封装(POST/GET)

      纯C 43 43 实现的HTTP请求 xff08 POST GET xff09 xff0c 支持windows和linux xff0c 进行简单的封装 xff0c 方便调用 实现如下 xff1a span class hljs prepro
    • error LNK2038: 检测到“RuntimeLibrary”的不匹配项的解决办法

      编译cef binary 3 3112 1659 gfef43e0 windows32 xff0c 生成了一个libcef dll wrapper lib xff0c 供另一个工程所用 结果编译的时候报错 错误信息如下 xff1a 1 gt
    • python实现归并排序

      排序算法 xff1a python实现基数排序 python实现归并排序 python实现交换排序 python实现选择排序 python实现插入排序 归并排序 归并 34 是将两个或者两个以上的有序表组成一个新的有序表 假定待排序表含有n
    • 5. 嵌入式OpenWRT入门基础篇-----OpenWRT与电脑之间互传文件

      OpenWRT与电脑之间互传文件方式有多种 xff0c 方法会陆续更新 一 Winscp与OpenWRT互传文件 由于 openwrt 默认开启 scp 服务器 xff0c 所以我们不需要在开发板上安装其他软件 xff0c 即可用scp 协
    • [LeetCode周赛复盘] 第 343 场周赛20230430

      LeetCode周赛复盘 第 343 场周赛20230430 一 本周周赛总结2660 保龄球游戏的获胜者1 题目描述2 思路分析3 代码实现 2661 找出叠涂元素1 题目描述2 思路分析3 代码实现 2662 前往目标的最小代价1 题目
    • 使用Git下载指定分支

      使用Git下载指定分支 使用Git下载指定分支命令为 xff1a git clone b 分支名 仓库地址 使用命令 xff1a git clone b feature v2 1 11 20210129 upgrade http ip gS
    • 调试记录

      1 xff0c 发布失败问题 如果在本机程序运行正常 xff0c 拿到别人同样系统机器上运行失败 xff0c 经常因为缺一些程序运行需要的插件依赖库 2 xff0c 跨平台代码 xff0c 未声明的标识符错误 qt程序在linux下正常编译
    • Nvidia Jetson TX2刷机过程

      近来 xff0c 项目需要 xff0c 实验室配置了TX2 xff0c 有幸能够接触使用 xff0c 下面简单介绍刷机过程 写在前面 a 使用VM虚拟机Ubuntu14 04成功刷机 xff0c 不过听说有的会出现连接不稳定的情况 xff0
    • 梯度向量、Jacobian矩阵、Hessian矩阵

      这里 xff0c 讨论三个概念 xff1a 梯度向量 Jacobian矩阵 Hessian矩阵 xff1b 由自变量x 61 x1 x2 xn T 因变量 xff1a 为一维f x 时 xff0c 此时其一阶导数构成的向量为梯度向量g x
    • 匿名飞控位置估计笔记

      摸着石头过河 xff0c 一边看一边学 感谢两位博主的文章 xff1a 1 px4位置估计 inav 2 根据两点的经纬度求方位角和距离 主要过程如下 1 机体加速度转换2 GPS测量值与推测值误差3 通过测量值与推测值的误差求NED坐标系
    • bmi055六轴传感器获取数据

      BMI055的加速度计和陀螺仪的地址是分开的 xff0c 在读取的时候要分开读取 xff0c 我是用的iic的方式读取的 define ACC ADDRESS 0X18 加速度计的地址 define GYRO ADDRESS 0X68 陀螺
    • 使用arecord、aplay命令实现音频的采集和播放

      arecord和aplay是alsa utils一部分 我们在Linux系统下进行音频开发时经常使用 xff0c 非常方便 先简单介绍一下 arecord 采集原始音频 arecord r 8000 t raw c 1 f S16 BE t
    • centos7安装docker与删除容器实例和镜像

      doker简介 docker是一个开源的应用容器引擎 xff0c 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 xff0c 然后发布到任何流行的linux机器或者windows机器上 xff0c 也可以实现虚拟化 容器是完全使用
    • 刘韧:记者的数字力量

      本文写于2003年09月04日 真正到了收拾物品离开报社的那一刻 xff0c 他才确切感到空落来得如此地具体 从明天起 xff0c 他的稿件将不能再见诸本报 xff1b 从明天起 xff0c 他将失去本报读者 xff1b 从明天起 xff0
    • 刘韧:此时使用文字 只因为文字简练

      以下文字写于2007年 一 此时使用文字只因为文字简练 1 博士说他的女儿有阅读障碍 我说 xff0c 我10多岁的时候 xff0c 也有阅读障碍 我爸让我读杂志上的一篇文章 xff0c 读完 xff0c 问我这篇文章在讲什么 xff0c
    • 刘韧:角色、扮相、知识与历史

      以下文字皆写于2008年1月 一 角色与扮相的欺骗 1 当编辑时 xff0c 最怕向名家约稿 xff0c 名家赏脸写的稿子 xff0c 质量不高 xff0c 不能用 2 喜欢李白的人 xff0c 千万不要买 李白全集 xff0c 全集里有许
    • 刘韧:和人物共同创作人物故事

      编者按 xff1a 本文为DoNews编辑部内训课实录 xff0c 创作于2011年 由传媒见闻谭缘于2020年4月根据录音整理 我从1997年开始人物写作 xff0c 一直写到2003年 5年间 xff0c 无论刮风下雨 xff0c 还是
    • 刘韧马杰花总:诗歌小说电影游戏都是元宇宙

      时间 xff1a 2021年10月31日晚 访谈 xff1a 花总 xff08 网络红人 xff0c 被 华盛顿邮报 称为 在风险中推动变革的博客 代表 xff09 嘉宾 xff1a 刘韧 xff08 中国著名IT记者 xff09 马杰 x
    • 刘韧:怎样做记者

      编发按 xff1a 2021年11月27日 xff0c CSDN刘韧写作班第一期课后 xff0c 潜山同学说 xff1a 2001年 xff0c 我爸说你给他们培训 xff0c 主题是 怎样做记者 xff0c 他把你当时培训的内容打印出来

    随机推荐

    • 尤雨溪Vue登榜GitHub之路看似不难

      本文完成于2022年3月6日 xff0c CSDN首发 xff0c 将在 新程序员 杂志刊登 采访撰稿 xff1a 刘韧 谷磊 林兴陆 李彤等 录音整理 xff1a 谷磊 周扬 林兴陆 鲁飞龙 编辑校对 xff1a 田玮靖 萧少聪 王雪艳
    • ROS:关于xacro模型在gazebo的加载

      ROS xff1a 关于xacro模型在gazebo的加载 这个模型加载问题折磨了我好几天 xff0c 今天总算是找到问题所在 我还一直以为是新版本的问题 xff0c 结果却是自己的问题 不够仔细 因此记录下来 xff0c 引以为戒 1 问
    • 刘韧:元宇宙不需要普通人

      作者 xff1a 刘韧 编辑 xff1a 谷磊 1 躲进小楼成一统 xff0c 我理解是 xff0c 躲进小圈子的小宇宙 xff0c 这个小宇宙基础如果是Web3 0 xff0c 那么就叫元宇宙了 自嘲 鲁迅 运交华盖欲何求 xff1f 未
    • 开源时代:刘韧对话任旭东崔宝秋章文嵩蒋涛

      来源 xff1a 1024程序员节 之 技术英雄会 主题 xff1a 开源英雄共话 我们的开源时代 时间 xff1a 2022年 10月 24日 主持嘉宾 刘韧 xff1a 云算科技董事长 知识英雄 作者 DoNews创始人 对话嘉宾 任旭
    • 刘韧工作手册(2023年版)

      刘韧于2022年9月22日为云算科技做内部演讲 由谭缘整理成文 xff0c 李欣欣编辑 xff0c 朱芳文审定 一 认知篇 01 干中学 xff0c 重复做 学 是为了 习 xff0c 学到的东西是为了下一次习的时候 xff0c 做得更好
    • 个人大于集体

      詹姆斯库克大学新加坡校舍正门 我依旧记得高中时发的一条朋友圈 xff1a 一个人的价值是由他周围的人决定的 十五岁时 xff0c 我一个人离开家乡 xff0c 来到新加坡 半年后 xff0c 把第一所学校的语言班老师骂退休了 xff0c 我
    • Foresight对话:刘韧对谈王建硕、曾映龙、Joy Xue

      Foresight 2023论坛现场 自 2022年 11月上线以来 xff0c OpenAI研发的ChatGPT一度风靡全球 面对这波 AI浪潮 xff0c 有些人拥抱了新趋势 xff0c 有些人则担心会被取代 xff0c 另一些人发掘其
    • 贾扬清开源 AI 框架 Caffe | 开源英雄

      编者按 在开源与人工智能的灿烂星河里 xff0c 贾扬清的名字都格外地耀眼 因为导师 Trevor Darrell 教授的一句 你是想多花时间写一篇大家估计不是很在意的毕业论文 xff0c 还是写一个将来大家都会用的框架 xff1f xff
    • 一个程序员的连续套现

      Fishman xff0c 吴锡桑 28岁 xff0c 中国软件行业协会理事 xff0c 1995年毕业于暨南大学计算机系 致力于多媒体和互联网软件的开发多年 xff0c 著作的软件曾获广东省 34 高校杯 34 软件比赛第一名 xff1b
    • 雷军留名

      影响中关村的50个人 知识英雄 Wednesday December 26 2001 3 29 PM 刘韧 雷军 xff0c 1969年2月16日出生于湖北省仙桃市 xff1b 1991年 xff0c 毕业于武汉大学计算机系 xff1b 1
    • docker load 是个什么东西?

      docker load 是个什么东西 xff1f docker load 是一个用于将 Docker 镜像加载到本地 Docker 环境中的命令 通常 xff0c 我们将 Docker 镜像从 Docker Hub 或者其他镜像仓库中下载到
    • Git同步一直转的解决方法

      之前遇到的一个问题 xff1a 使用VScode软件的Git同步不管怎样都无法拉取推送 xff08 左下角会一直转 xff0c 而且没有报错提示 xff09 但是在对应项目的文件目录下 xff0c 使用控制台就可以 在VSCode的控制台输
    • ROS:关于节点和节点句柄以及命名空间

      ROS xff1a 关于节点和节点句柄以及命名空间 参考资料 xff1a ROS官方文档 首先 xff0c 我们需要明确的是 节点 和 节点句柄 是不同的 一般而言 xff0c 一个cpp文件只能启动一个ROS节点 xff0c 但作为该节点
    • 【操作系统】生产者消费者问题

      生产者消费者模型 文章目录 生产者消费者模型 64 toc 一 生产者消费者问题二 问题分析三 伪代码实现四 代码实现 xff08 C 43 43 xff09 五 互斥锁与条件变量的使用比较 一 生产者消费者问题 生产者消费者问题 xff0
    • VScode中使用git终端,无法识别命令

      提示 xff1a vscode中使用git终端 xff0c 无法识别输入的命令 xff1a vscode版本 xff1a VSCodeUserSetup x64 1 60 1 exe git版本 xff1a 2 32 0 windows 2
    • Ubuntu18.04 VINS-Mono & Fast-Planner

      Ubuntu18 04 VINS Mono amp Fast Planner 官方GIthub 安装依赖 span class token comment 额外ros包 span span class token function sudo
    • Autoware Docker 安装

      1 Ubuntu20 04 Docker 官方教程安装 Docker 官方教程安装 2 安装 nvidia container runtime Access an NVIDIA GPU 官方参考 span class token comme
    • 卡尔曼滤波公式理解

      卡尔曼滤波 卡尔曼滤波适用于线性高斯系统 xff0c 即系统满足叠加性 齐次性 xff0c 噪声满足正态分布 其使用上一次的最优结果预测当前的值 xff08 先验估计 xff09 xff0c 同时使用观测值修正当前值 xff0c 得到最优结
    • 学习编程,API很重要么?

      学习编程 xff0c API的重要性几何 xff1f 在培训中 xff0c 很多人问到了 xff0c 学习Java xff0c 是否需要学习那些大量API的用法 xff0c 从而成为一个精通Java编程开发的coder xff1f 首先 x
    • App 后台架构设计方案 设计思想与最佳实践

      CSDN 2016博客之星评选结果公布 系列直播 零基础学习微信小程序 xff01 我的2016 主题征文活动 博客的神秘功能 App 后台架构设计方案 设计思想与最佳实践 标签 xff1a App后台架构设计用户验证方案后台架构的演进架构