文章目录:
Java EE的基本学习路线是什么
可从事岗位:初级JAVA软件工程师
Java核心编程(15天) JavaSE编程基础 介绍JavaEE的应用领域及整体技术体系,生态圈,以及当前就业环境。强调学习纪律及相关约定,讲师的个人介绍;DOS常用命令;安装JDK、设置环境变量;DOS系统编译、执行Java程序;Java的注释;标识符、标识符的命名规范;Java 关键字;Java的数据类型;变量的定义及初始化;Java的运算符;表达式;转义字符;运算符的优先级;类型转换;Java分支if...else;多重if、嵌套if;Java switch;switch vs if;Java循环 for、while 、do-while;循环的嵌套;break、continue、return;方法的定义;方法的形参和实参;无返回值的方法;有返回值的方法;方法的重载
Java数组 Java 数组的定义;数组的静态赋值;数组的动态赋值;数组单个元素的访问;数组的遍历访问;数组的增强for循环;数组的排序;数组的顺序查找;数组的二分法查找;命令行参数args的使用;可变参数的应用;Arrays工具类的使用;二维数组的使用
Java面向对象 面向对象的分析与设计;面向对象与面向过程的区别;Java与面向对象;类的定义;对象的定义;类中成员变量及方法的定义;构造方法的定义和调用;构造方法的重载;面向对象的封装特性;this调用属性、方法、构造方法;局部变量和成员变量的作用域问题;static静态属性、方法、代码块;工具类的概念及工具类的制作;super关键字的使用及理解;Java中访问权限控制机制;继承中构造方法的细节;方法的重写;equals及toString方法的正确理解;Java中的包机制;抽象类,接口,多态;对象的转型;final修饰类、属性、方法;抽象类,接口;多态机制;内部类;通过内部类制作性能检测工具;Java的内存分析
常用基础类 常用数据类型的包装类;String、StringBuffer、StringBuilder;Date的使用;SimpleDataFormate对日期和字符串之间的转换处理;Calendar日历类的使用;Math常用方法;Random类;Runtime类;System 类;Java8特性
集合 集合框架体系介绍;集合框架与数组的对比;集合框架之Collection接口;集合框架之List接口;ArrayList和LinkedList的使用;深入源码探究ArrayList和LinkedList的工作原理;迭代器的工作原理;迭代器的使用;集合框架之Set;HashSet和TreeSet的使用;深入源码探究HashSet和TreeSet的工作原理;HashMap和TreeMap的使用;分析Map和Set的之间的关系;Collections工具类
异常处理 Java的异常体系;异常的概念及分类;异常的处理方式;异常设计原则;自定义异常
线程和I/O I/O;NIO;文件操作;多线程;线程池;同步;线程调度;多线程下载;网络http、socket;基于HTTP协议访问网络资源、XML解析;文件的下载;ThreadLocal
项目 FTP服务器、多人聊天服务器
第二阶段:JavaWeb实战(25天)
可从事岗位:WEB初级前端开发工程师,初级BI工程师
JavaWeb实战(25天) HTML5 HTML的作用;全局标签;绝对路径与相对路径;常见标签;字符集;表单标签;布局指定的网页
CSS3 CSS声明类型;常见的各种属性;圆角属性:border-radius的使用;阴影属性:box-shadow的用法;背景属性扩展:多背景应用;新的颜色表示方式:HSLA色轮模式;浮动;完成自己的初级课页面实战
Javascript JavaScript基本语法;JavaScript数据类型;JavaScript对象和常用对象;history对象;location对象;bom对象;表单对象;DOM对象;window对象;常用事件;选项卡、幻灯片、贪吃蛇、瀑布流各种特效
MySQL使用 Mysql数据库;MySql命令行客户端的使用;MySql图形化客户端的使用;SQL语句介绍;DDL;DML;DQL;多表的联合查询;子查询;排序、聚合、分组
JDBC连接池 JDBC的介绍;采用JDBC实现CRUD;采用PrepareStatement防止SQL注入,提高安全性
Servlet Tomcat与idea的集成开发;什么是Servlet;Servlet接收客户端请求信息;Servlet响应客户端信息;Servlet的生命周期;什么是JSP;JSP的内置对象;透析JSP的本质;JSTL+EL;MVC介绍;分层的重要性;MySql的事务特性;MySql的事务实现;Session的使用;Cookie的使用;实现系统的安全控制;DBCP连接池的使用;C3P0连接池的使用;DBUils;实现用户的自动登录;文件的上传;文件的下载;过滤器解决编码问题;过滤器解决安全验证问题;监听器;反射、注解、泛型
MVC 设计模式;ORM原理;自定义框架
ajax Ajax的工作原理;JSON解析;Ajax 数据格式(XML格式、HTML格式、JSON格式、各种格式对比);使用 jQuery 实现 Ajax(load()方法、$.get()方法、$.post()方法、序列化、Ajax应用);聊天室小实例
jQuery jQuery选择器;jQuery的常用事件;事件冒泡;事件委派;jQuery中的动化;模拟操作;jQuery综合实例
Bootstrap 响应式设计;Bootstrap安装;Bootstrap 组件;进度条和列表组件;Bootstrap综合实例
项目 讲解项目开发流程;项目简介;项目功能演示;项目功能实现分析;数据库设计分析;项目架构设计分析;实现网站首页的商品展示;实现商品详情页面;实现购物车功能;实现我的订单管理;项目验收
第三阶段:企业核心框架(30天)
可从事岗位:中级BI工程师,JAVA微服务研发工程师
企业核心框架(30天) Linux基础 Linux系统-基础;Linux网络基础;VMWare下安装Linux;Linux命令;Linux下Java环境的搭建;Linux下Tomcat安装和配置
maven Maven简介和环境搭建;Maven构建和自动化构建;pom.xml详细说明、依赖管理;Maven坐标、依赖、生命周期等;IDEA下的Maven使用
Git Git概述、Git与SVN对比;Git常用命令;Git分支以及代码冲突的解决;客户端TortoiseGit使用;IDEA中Git集成使用
Spring5 框架原理介绍;框架环境搭建;快速入门;创建Bean的方式及实现原理;Bean种类;Bean生命周期;Bean的作用域;Bean的注值方式;SpEL;整合Junit测试;Web项目集成Spring;注解装配Bean;AOP思想;AOP原理解剖;传统方式实现AOP开发;AspectJ介绍及实现AOP开发
SpringMVC Spring MVC 概述;使用 @RequestMapping映射请求;请求处理方法签名概述;处理方法签名详细说明;使用 HttpMessageConverter;处理模型数据;数据绑定流程剖析;数据转换;数据格式化;数据校验;视图和视图解析器;处理方法的数据绑定
MyBatis 安装和配置MyBatis;使用映射语句;执行非查询语句;使用高级查询技术;事务;使用动态SQL;使用高速缓存提高性能;MyBatis数据访问对象;DAO使用进阶
项目整合 使用SSM开发实际项目;通过项目理解框架
SpringData Spring Data 概述;Repository;CrudRepository;PagingAndSortingRepository;JpaRepository;条件查询;使用@Query自定义查询;@Query 与 @Modifying 执行更新操作;索引参数与命名参数;用@Query来指定本地查询;为某一个 Repository 上添加自定义方法;所有的 Repository 都添加自定义的方法
Maven高级 pom文件依赖传递介绍;Maven继承与聚合项目;私服仓库介绍和搭建;公共模块上传到私服、引用私服jar包;Maven常用插件使用;使用Maven的profile实现多环境配置
Gitlab/Jenkins Gitlab使用;持续集成工具Jenkins使用;Jenkins+Gitlab+maven+tomcat实现自动集成、打包、部署
WebSocket WebSocket原理介绍;WebSocket的使用
RESTful http协议;RESTful规范;postman使用;spring 实现 RESTful
ECharts图表插件 图表介绍和选择什么样的图表;5分钟快速上手;常用API和模块;移动端自适应
项目一 10个大型项目选择;各种项目特点分析;项目设计;项目分组;选择框架;后台搭建;使用Maven构建项目;项目开发;压力测试;webhooks项目自动部署;面试中常问到的项目问题;项目bug收集和解决;项目验收;项目答辩
第四阶段:高并发和分布式应用(40天)
可从事岗位:服务端架构师, 平台架构师
高并发和分布式应用(40天) Nginx反向代理和负载均衡 Nginx服务器的优势;Nginx服务器配置;什么是反向代理;什么是负载均衡;负载均衡算法;构建数十台服务器的负载均衡环境
Docker Docker介绍;Docker安装;Docker 常见操作;Docker 自定义镜像;Docker Compose服务编排;Docker Compose 安装Nexus;Docker Compose 安装 Gitlab;Docker Compose 安装 Docker Registry;基于Gitlab实现CI
UML和常用工具的使用 UML介绍以及在软件开发中的应用;UML常用图的绘制以及使用;Enterprise Architect的使用;结合UML知识对项目做需求分析;结合UML知识对项目做架构设计以及技术选型
亿级并发架构演进 架构演进特点;大并发架构;微服务
MySQL高级 ACID和MySQL的实现原理;SQL优化技巧;MySQL分区;分库分表技巧;Explain分析
MyCat分库分表技术 MyCat介绍;分库分开技术讲解;其他的数据库中间件;配置与自动分表
Vue Vue 入门;Vue 语法;Vue 事件;Axios 网络通信;Vue表单输入;Vue 计算属性;Vue内容分发与自定义事件;Vue-cli脚手架;Vue-Router 路由;Vuex 状态管理
SpringBoot SpringBoot基本介绍和使用;SpringBoot的核心功能;SpringBoot开发web项目;SpringBoot整合Junit以及MockMvc的使用;SpringBoot集成Swagger;Spring Data JPA 的使用;SpringBoot整合MyBatis
Shiro Authentication;Authorization;Role;编程授权;Realm;Realms的认证实现;Realms的授权实现;Spring 集成 Shiro;基于注解的授权
CAS 单点登录介绍;CAS单点登录配置;CAS MD5配置;CAS 盐值MD5;CAS整合Shiro
Zookeeper/Consul Zookeeper 简介;Zookeeper安装;Zookeeper高可用集群;Curator-API;Zookeeper分布式锁;统一配置管理;Consul使用
Dubbo Dubbo简介;Spring整合Dubbo2.6x使用;Dubbo管控台;Springboot 2.x整合dubbo 2.6x;Dubbo负载均衡;Dubbo集群容错
Spring Cloud SpringCloud之 微服务简介;SpringCloud之 Eureka;SpringCloud之 Ribbon;SpringCloud之 Feign;SpringCloud之 HyStrix;SpringCloud之 Zuul;SpringCloud之Stream;SpringCloud之Sleuth;SpringCloud之 ConfigServer;微服务安全解决方案:Oauth2/JWT
Redis NoSQLRedis;Redis特点与优势以及使用场景;Redis主从、哨兵、集群模式安装配置;Redis持久化策略、淘汰策略;Redis五大数据类型和基本操作命令;SpringBoot集成Lettuce API;SpringBoot集成Redisson API分布式场景应用
Elasticsearch ElasticSearch简介;ElasticSearch基础入门;ElasticSearch集群以及Kibana和分词插件的安装;ElasticSearch索引、分片创建与管理;ElasticSearch基本搜索;ElasticSearch组合搜索;Elasticsearch全文检索,高亮显示;Elasticsearch Java High Level REST Client使用
RabbitMQ 队列 RabbitMQ 简介;RabbitMQ 安装;RabbitMQ账户;RabbitMQ消息模式;Spring整合RabbitMQ;SpringBoot整合RabbitMQ;消息确认机制;消息延迟队列;RabbitMQ高可用集群
分布式事务 分布式事务场景;分布式事务解决方案;CAP理论;两段提交协议;三段提交协议;MQ事务消息;TX-LCN/TCC-Transaction
分布式任务(Quartz/Elastic-Job) Quartz基本使用;Quartz不同触发器;Quartz自动化任务;Spring定时任务;Spring整合Quartz;Elastic-Job分布式任务
微信开发 微信公众号;微信支付;微信小程序
综合项目实战 15个大型项目选择;各种项目特点分析;项目设计;项目分组;选择框架;后台搭建;使用Maven构建项目;项目开发;压力测试;项目自动部署;面试中常问到的项目问题;项目bug收集和解决;项目上线;项目验收;项目答辩
怎样使用Spring Cloud跨云管理
使用Spring Cloud构建实际的微服务架构。
基本概念:
使用Docker进行集成测试
混合持久化
微服务架构
服务发现
API网关
Docker
使用Docker对每一个服务进行构建和部署。使用Docker Compose在一个开发机上进行端到端的集成测试。
混合持久化
混合持久化其实就是说使用多种数据库来存储。不同的微服务实例都会使用它们自己的数据库,并通过REST服务或者消息总线来通信,举个例子,你可以使用基于以下数据库来构建微服务:
Neo4j(图形化)
MongoDB(文档化)
MySQL(关联)
微服务架构
这个例子演示了如何使用微服务创建一个新的应用。由于在项目中的每一个微服务只有一个单一的父项目。开发者为此得到的收益是可以在本机上运行和开发每一个微服务。添加一个新的微服务非常简单,当发现微服务时将会自动发现运行时的集群环境上。
Service Discovery
项目中包含两个发现服务,一个在Netflix Eureka,另一个使用了
Consul from Hashicorp。多种发现服务提供了多种选择,一个是使用(Consul)来做DNS服务集群,另一个是(Consul)基于代理的API 网关。
API 网关
每一个微服务都关联Eureka,在整个集群中检索API路由。使用这个策略,每一个在集群上运行的微服务只需要通过一个共同的API网关进行负载均衡和暴露接口,每一个服务也会自动发现并将路由请求转发到自己的路由服务中。这个代理技术有助于开发用户界面,作为平台完整的 API通过自己的主机映射为代理服务。
Docker 实例
下面的实例将会通过Maven来构建,使用Docker为每一个微服务构建容器镜像。我们可以很优雅的使用Docker Compose在我们自己的主机上搭建全部的微服务集群。
开始构建
在这之前,请先移步至项目的GitHub 仓库。
克隆或者fork这个项目并且把源码下载到自己的电脑上。下载完毕后,你需要使用Maven和Docker来编译和构建本地的容器镜像。
下载Docker
首先,如果你还没有Docker请先下载它。可以跟随这个指南来获取Docker:,然后在开发机上安装并运行。
当然你也需要安装Docker Compose(https//docs.docker.com/compose/),这个指南将会帮到你:。
环境要求
能够运行实例程序,需要在你的开发机上安装下面的软件:
Maven 3
Java 8
Docker
Docker Compose
构建项目
通过命令行方式来构建当前项目,在项目的根目录中运行如下的命令:
$ mvn clean install
项目将会根据pom.xml中的每一个项目声明中下载相应的依赖jar包。每一个服务都将会被构建,同时Maven的Docker插件将会自动从本地Docker Registry中构建每一个容器镜像。Docker将会在构建成功后,根据命令行运行mvn clean install来清除相应的资源。
如何用Consul打造弹性可扩展的PaaS平台
如何用Consul打造弹性可扩展的PaaS平台
杜威,程序员,混迹互联网研发和运维近十年。《Linux系统案例精解》合著者之一。目前就职亮风台,专注DevOps、云计算、大数据等相关领域。
应用背景
HiAR 是亮风台打造的新一代增强现实(AR)开发平台,提供简单易用、功能强大、跨平台的 AR 服务。让广大开发者可以轻松使用最前沿的计算机视觉技术、计算机图形学技术,快速搭建个性化的 AR 应用。
云服务是HiAR平台中重要的基础设施。无论从高可用,还是到可扩展,服务发现都发挥着不可或缺的作用。在没有使用服务发现之前,我们遇到的几个痛点:
◆ 系统添加一个服务节点,我们需要手工修改Nginx/LVS的配置文件、修改DNS记录。
◆ 应用服务发布新版本,我们还是需要手工修改Nginx的配置文件把节点下线、等待发布成功后,再次修改Nginx的配置文件把服务上线。
◆ 尽管后来我们对上面两种场景的运维做了改进,编写脚本把过程改良为半自动半手动的方式,但还不是很方便,而结合服务注册就可以做到全自动。
◆ 内网DNS出了故障,我们需要对DNS服务进行维护。
◆ 没有服务注册,限制了Docker的发挥,只能当轻量级虚拟机来用。
现在,有了服务发现,一切都变得简单有趣。增减服务节点可以自动更新Nginx/LVS的配置文件;DNS丢一边吧!用IP就好;接入Mesos+Docker玩弹性扩展。
为什么选择 Consul
已经有很多文章对Zookeeper、etcd、Consul进行比较,这里就不重复类比了。没有什么比合适更重要!Consul 的运维成本低,部署简单、使用方便、五脏俱全,这对于中小型团队应该是性价比很高的。
在进入实战前,先看看 Consul 都有哪些特性。
◆ 服务注册。通过HTTP API或DNS,告诉服务注册中心有新的服务加入。
◆ 服务发现。通过HTTP API或DNS,可以知道目标服务的地址和端口。
◆ 健康检查。支持多种方式,HTTP、TCP、Docker、Shell脚本定制化监控。
◆ 配置模板。Consul Template 负责定期从服务注册中心获取信息,如果有变化自动更新配置文件并重新加载。
以上四点已经能满足很多企业的需求。当然这不是Consul的所有,Consul还有很多锦上添花的特性,比如:可视化Web界面、支持多数据中心。
实战经验
我们对Consul的使用可以归纳到四个方面:部署、应用、管理、升级。
部署
Consul Cluster有Server和Client两种角色。Server一般是3~5台,这也是官方推荐的。Consul Client就是需要进行服务注册或服务发现的节点。
Consul的部署简单、开箱即用,一个consul可执行文件,还没有乱七八糟的依赖。在官网下载编译好的Consul agent可执行文件,并上传到所有Server和Client角色的节点,便随时可启动consul agent了。
下面一起来看看,如何启动一个Consul集群(3台Server、1台Client)。
实验环境:
server01 192.168.1.11
server02 192.168.1.12
server03 192.168.1.13
client01 192.168.1.21
分别登录Server01、Server02、Server03,并启动agent。
[worker@server01 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.11 -node=server01
[worker@server02 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.12 -node=server02
[worker@server03 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.13 -node=server03
新开窗口登录Server03,加入Server01、Server02的集群。
[worker@server03 ~]$ consul join 192.168.1.11 192.168.1.12
上面几步就完成了初始化Server节点,以后通过-rejoin参数启动,可以重新加入集群。
[worker@server01 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.11 -node=server01 -rejoin
[worker@server02 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.12 -node=server02 -rejoin
[worker@server03 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.13 -node=server03 -rejoin
就这样三个Server节点部署完毕。接下来,部署Client节点,和Server节点一样,有初次启动、手工加入和重新加入集群三步。
[worker@client01 ~]$ consul agent -data-dir /tmp/consul -bind=192.168.1.21 -node=client01
还是在Client01上,新开一个登录窗口,加入Server01的集群。
[worker@client01 ~]$ consul join 192.168.1.11
Client01节点日后的维护,通过-rejoin参数启动,便可重新加入集群。
[worker@client01 ~]$ consul agent -data-dir /tmp/consul -bind=192.168.1.21 -node=client01 -rejoin
到这里为止,我们已经搭建好了一个Consul集群。然而,怎么进行服务注册和服务发现呢?这得跟实际需求紧密结合,在接下来的小节中进一步说明。
应用
Consul不是单独存在的。为了充分发挥Consul的优势,可以结合Nginx、LVS、Docker等工具来应用。
Nginx、LVS是系统的基础组件,RecoService、FeatureService、SearchService是基于SOA的内部服务。前者向Consul集群发现服务,后者向Consul集群注册服务。Consul是粘合剂也是开关,让整个系统的运作起来,低成本的实现了弹性伸缩。
接入层,用的是Nginx,负责反向代理和负载均衡。Nginx节点上跑两个Consul相关服务。一个是Consul Agent,做Consul Client;另外一个是Consul Template,做服务发现和配置更新。Consul Template负责定期查询本地Consul Agent,如果相关服务的注册信息有变化,则更新Nginx的配置文件并重新加载Nginx服务。
运行Consul Template是实现弹性扩展的关键步骤:
$ consul-template -consul 127.0.0.1:8500 -template "/etc/nginx/conf/vhosts/test.ctmpl:/etc/nginx/conf/vhosts/test.conf:nginx -s reload"
上面这句命令中,test.conf是Nginx的虚拟主机配置文件,test.ctmpl是该配置文件对应的模板。下面是模板在负载均衡上的代码片段:
upstream test-cluster {
ip_hash;{{range service "test"}}
server {{.Address}}:{{.Port}};{{end}}
}
逻辑层,基于SOA的内部服务集群。不同的内部服务集群之间通信需要做服务发现,这里引入LVS做服务发现。好处是不用在内部服务的代码里实现服务发现,而且规模大了还要做负载均衡。与接入层的Nginx类似,LVS也用Consul Template定期查询本地Consul Agent,更新相关配置文件,然后重载服务。
内部服务如何向服务中心注册?有两种方式,一是通过Consul的服务注册HTTP API,由服务自身在启动后调用API注册自己,二是通过在配置文件中定义服务的方式进行注册。建议使用后面一种方式来做服务注册。怎么办到的?请继续往下看 :)
为项目添加一个配置文件consul.json,指定服务名称和服务端口,并加上健康检查,内容如下:
{
"service":
{
"name" : "test",
"port" : 9999,
"check":
{
"tcp": "127.0.0.1:9999",
"interval": "10s"
}
}
}
最后一步,对服务进行注册,需要在Consul agent启动时指定配置文件,如下:
$ consul agent -data-dir /tmp/consul -node=test -bind=192.168.1.21 -config-dir=/tmp/consul.json
管理
一是节点管理,也就是Consul进程的管理。由于Consul Agent本身不具备高可用能力,所以我们有必要对Consul进程进行接管,我们用的是Systemd,你也可以选择Supervisord或者Upstart这些进程管理工具。
二是集群管理,Consul提供了可视化管理界面。可以查看所有的服务和节点,以及它们的健康检测和当前状态。
升级
由于Consul关系到整个系统的正常运作,所以升级的时候还是要很小心。最好在测试环境试验多几次,再到生产环境升级。升级的状况可以归纳为下面三种,需要对号入座之后再进行升级。
◆ 特殊版本的升级。在upgrade-specific页面查看当前升级的版本是否有特殊说明。比如:0.5.1之前的版本直接升级到0.6版本,要借助工具consul-migrate进行数据迁移。
◆ 不兼容的升级。使用consul -v查看新版的向后兼容协议版本号,当出现与当前版本不兼容时,需要分两步升级。先通过参数-protocal=旧的协议版本号,把整个集群升级一次,再把启动命令中的参数-protocal去掉来重启所有节点。
◆ 标准的升级。如果上面两种情况都不是,那么恭喜你,你需要做的只是简单的标准升级。即:停止旧版本的agent,然后启动新版本的agent。PS:其实大多数情况都是标准升级。
升级节点的推荐顺序是,先升级Server的Follower节点,再升级Server的Leader节点,最后升级所有Client的节点。
结语
在系统中引入服务注册和发现,虽然是一发牵动全身的改造,但整个系统架构会因此受益,尤其是现代的微服务架构。相信很多系统都具备负载均衡、健康检查、心跳检测等能力,利用好服务发现,那么弹性伸缩、服务高可用、灰度发布,自然是水到渠成的事情。
;基于HTTP协议访问网络资源、XML解析;文件的下载;ThreadLocal 项目 FTP服务器、多人聊天服务器 第二阶段:JavaWeb实战(25天)可从事岗位:WEB初级前端开发工
的地址和端口。◆ 健康检查。支持多种方式,HTTP、TCP、Docker、Shell脚本定制化监控。◆ 配置模板。Consul Template 负责定期从服务注册中心获取信息,如果有变化自动更新配置文件并重新加载。以上四点已经能满足很多企业的需求。当然这不
要通过一个共同的API网关进行负载均衡和暴露接口,每一个服务也会自动发现并将路由请求转发到自己的路由服务中。这个代理技术有助于开发用户界面,作为平台完整的 API通过自己的主机映射为代理服务。Dock
景HiAR 是亮风台打造的新一代增强现实(AR)开发平台,提供简单易用、功能强大、跨平台的 AR 服务。让广大开发者可以轻松使用最前沿的计算机视觉技术、计算机图形学技术,快速搭建个性化的 AR 应用。云服务是HiAR平台中重要的基础设施。无论从高可