自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Kirito的博客

EL PSY KONGROO!

  • 博客(123)
  • 资源 (1)
  • 收藏
  • 关注

原创 Redis面试整理

1 redis 简介简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。2 为什么要用 redis/为什么要用缓存主要从“高性能”和“高并发”这两点来看待这个问题高性能:假如用户第一次访问数据库中的某些数据。这个过程会比

2021-04-26 23:01:16 1086 2

原创 面向对象和面向过程的区别及面试问答

面向对象和面向过程的区别面向过程 :面向过程性能比面向对象高。 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发。但是,面向过程没有面向对象易维护、易复用、易扩展。面向对象 :面向对象易维护、易复用、易扩展。 因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是,面向对象性能比面向过程低。面试问答:Java作为一种编程语言性能不高的原因是否是因为

2021-04-19 16:30:13 2569

原创 在浏览器中输入url地址到显示主页的过程

在浏览器中输⼊url地址 ->> 显示主⻚的过程总体来说分为以下⼏个过程:DNS解析TCP连接发送HTTP请求服务器处理请求并返回HTTP报⽂浏览器解析渲染⻚⾯连接结束

2021-04-16 20:51:32 1270

原创 Json fastjson及相关前后端联调整理

Json是一种轻量级的数据交换格式,采用一种key-value对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言。为什么要用json?1.数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小,其可读性也不错,基本具备了结构化数据的性质。2.易于解析这种语言, 客户端JavaScript可以简单的通过eval()进行JSON数据的解析,通过遍历数组以及访问对象属性来获取数据,3.因为JSON格式能够直接为服务器端代码使用, 大大简化了服务器端和客户端的代码开

2021-04-07 21:18:59 1072 2

原创 new controller导致空指针

new controlller后会导致原controller中的自动注解失效。解决办法之一:在新controller中注解旧controller。

2022-12-13 14:50:09 245 1

原创 ZIPKIN 整理

简介微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性,决定了问题难以定位。所以微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,出了问题,很快定位。链路追踪组件有Google的Dapper,Twitter 的Zipkin,以及阿里的Eagleeye (鹰眼)

2021-06-22 10:26:15 489 1

原创 与、或、非、与非、或非、异或、同或

与:and或:or非:not与非:nand或非:nor异或:xor同或:xnor与:and 有1则1,否则为0或:or 有0则0,否则为1非:not 1->0 0->1与非:nand 与然后非或非:nor 或然后非异或:xor 相异为1,相同为0同或:xnor 相同为1,相异为0...

2021-05-05 11:51:49 4640 2

转载 认证授权面试题总结

1 认证 (Authentication) 和授权 (Authorization)的区别是什么?Authentication(认证) 是验证您的身份的凭据(例如用户名/用户ID和密码),通过这个凭据,系统得以知道你就是你,也就是说系统存在你这个用户。所以,Authentication 被称为身份/用户验证。Authorization(授权) 发生在 Authentication(认证) 之后。授权嘛,光看意思大家应该就明白,它主要掌管我们访问系统的权限。比如有些特定资源只能具有特定权限的人才能访问比如a

2021-04-27 23:35:54 1089 2

原创 MyBatis面试题总结

1 #{}和${}的区别是什么?后者是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如${driver}会被静态替换为 com.mysql.jdbc.Driver 。#{} 是 sql 的参数占位符,Mybatis 会将 sql 中的 #{} 替换为?号,在 sql 执行前会使用 PreparedStatement 的参数设置方法,按序给 sql 的?号占位符设置参数值,比如 ps.setInt(0, parameterValue), #{item

2021-04-27 18:54:37 277 2

原创 Spring面试题总结

1 什么是 Spring 框架?Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是:核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。比如:Core Container 中的 Core 组件是Spring 所有组件的核心,Beans 组件和 Context 组件是实现IOC和依赖注入的基础,AOP

2021-04-27 15:34:47 457 1

原创 一条SQL语句执行得很慢的原因有哪些?

针对偶尔很慢的情况1、数据库在刷新脏页(flush)当我们要往数据库插入一条数据、或者要更新一条数据的时候,我们知道数据库会在内存中把对应字段的数据更新了,但是更新之后,这些更新的字段并不会马上同步持久化到磁盘中去,而是把这些更新的记录写入到 redo log 日记中去,等到空闲的时候,在通过 redo log 里的日记把最新的数据同步到磁盘中去。当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。刷脏页

2021-04-26 18:59:16 317 1

原创 数据库命令规范

数据库命令规范•所有数据库对象名称必须使用小写字母并用下划线分割•所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)•数据库对象的命名要能做到见名识意,并且最后不要超过 32 个字符•临时库表必须以 tmp_为前缀并以日期为后缀,备份表必须以 bak_为前缀并以日期 (时间戳) 为后缀•所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低)数据库基

2021-04-26 17:20:49 269

原创 一条SQL语句在MySQL中如何执行的

MySQL 基本架构概览请先了解InnoDB引擎•连接器: 身份认证和权限相关(登录 MySQL 的时候)。•查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。•分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确。•优化器: 按照 MySQL 认为最优的方案去执行。•执行器: 执行语句,然后从存储引擎返回数据。MySQL 主要分为 Server

2021-04-25 23:46:08 284 2

原创 分库分表之后,id 主键如何处理?

分库分表之后,id 主键如何处理?因为要是分成多个表之后,每个表都是从 1 开始累加,这样是不对的,我们需要一个全局唯一的 id 来支持。生成全局 id 有下面这几种方式:UUID不适合作为主键,因为太长了,并且无序不可读,查询效率低。比较适合用于生成唯一的名字的标示比如文件的名字。数据库自增 id两台数据库分别设置不同步 ,生成不重复ID的策略来实现高可用。这种方式生成的 id 有序,但是需要独立部署数据库实例,成本高,还会有性能瓶颈。利用 redis 生成 id性能比较好,灵活方便,不依

2021-04-25 23:27:17 763 3

原创 什么是池化设计思想?什么是数据库连接池?为什么需要数据库连接池?

池化设计思想我们常用的如java线程池、jdbc连接池、redis连接池等就是这类设计的代表实现。这种设计会初始预设资源,解决的问题就是抵消每次获取资源的消耗,如创建线程的开销,获取远程连接的开销等。就好比你去食堂打饭,打饭的大妈会先把饭盛好几份放那里,你来了就直接拿着饭盒加菜即可,不用再临时又盛饭又打菜,效率就高了。除了初始化资源,池化设计还包括如下这些特征:池子的初始值、池子的活跃值、池子的最大值等,这些特征可以直接映射到java线程池和数据库连接池的成员属性中。什么是数据库连接池?为什么需要数据库

2021-04-25 23:24:10 681

原创 数据库事务

数据库事务事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。事物的四大特性(ACID)1.原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部

2021-04-25 23:04:27 367

原创 数据库大表优化

当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常用的优化措施如下:限定数据的范围务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内;读/写分离经典的数据库拆分方案,主库负责写,从库负责读;垂直分区根据数据库里面数据表的相关性进行拆分。 例如,用户表中既有用户的登录信息又有用户的基本信息,可以将用户表拆分成两个单独的表,甚至放到单独的库做分库。简单来说垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表。 如下

2021-04-22 22:13:24 228 1

原创 HTTP 和 HTTPS 的区别

1.端口HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。2.安全性和资源消耗HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更

2021-04-22 21:13:27 191

原创 URI和URL的区别

URI的作用像身份证号一样,URL的作用更像家庭住址一样。URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI(Uniform Resource Identifier)统一资源标志符,可以唯一标识一个资源。URL(Uniform Resource Location)统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。...

2021-04-22 21:08:27 370

原创 HTTP 1.0和HTTP 1.1的主要区别

HTTP1.0最早在网 中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在:1.长连接在HTTP/1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。 HTTP 是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用长连接来发

2021-04-22 21:06:50 5039

原创 HTTP协议中的Session、Cookie

HTTP协议中的Session、CookieSession 机制HTTP 是一种不保存状态,即无状态(stateless)协议。也就是说 HTTP 协议自身不对请求和响应之间的通信状态进行保存。那么我们保存用户状态呢?Session 机制的存在就是为了解决这个问题, Session 的主要作用就是通过服务端记录用户的状态。典型的场景是购物 ,当你要添加商品到购物 的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟

2021-04-22 21:01:07 506

原创 HTTP长连接,短连接

HTTP长连接,短连接在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web 中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive在使用长连接的情

2021-04-22 20:47:40 147 2

原创 各种协议与HTTP协议之间的关系

各种协议与HTTP协议之间的关系

2021-04-22 20:28:03 214

原创 计算机网络状态码

计算机网络状态码

2021-04-22 18:50:33 185

原创 TCP/IP拥塞控制

拥塞控制在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。为了进行拥塞控制,

2021-04-22 17:39:18 478

原创 滑动窗口和流量控制

滑动窗口和流量控制TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。...

2021-04-22 17:35:08 346

原创 TCP 协议如何保证可靠传输

TCP 协议如何保证可靠传输1.应用数据被分割成 TCP 认为最适合发送的数据块。2.TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。3.校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。4.TCP 的接收端会丢弃重复的数据。5.流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数

2021-04-22 17:31:42 571

原创 ARQ(自动重传请求)协议

自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送。ARQ包括停止等待ARQ协议和连续ARQ协议。停止等待ARQ协议停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认(回复ACK)。如果过了一段时间(超时时间后),还是没有收到 ACK 确认,说明没有发送成功,需

2021-04-22 17:31:00 7208 1

原创 TCP,UDP 协议的区别

TCP,UDP 协议的区别UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等。TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递

2021-04-22 16:45:30 115

原创 TCP 三次握手和四次挥手

TCP 三次握手漫画图解简单示意图:客户端–发送带有 SYN 标志的数据包–一次握手–服务端服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端为什么要三次握手三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常第二次握手:Client 确认

2021-04-22 16:42:18 391 3

原创 TCP/IP协议族

体系结构应用层应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。我们把应用层交互的数据单元称为报文。DNS域名系统(Domain Name System缩写 DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可

2021-04-22 15:21:50 506

原创 Java对象的创建过程

Java对象的创建过程①类加载检查虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。②分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来。分配方式有 “指针碰撞” 和 “空闲列表” 两种,选择那种分配方式由 Java 堆是否规整

2021-04-22 13:40:17 436

原创 线程池详解

1. 为什么要用线程池?线程池、数据库连接池、Http 连接池等等都是对池化技术思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。使用线程池的好处:1降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。3提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统

2021-04-21 23:25:57 228

原创 ThreadLocal处理线程私有数据

1. ThreadLocal简介通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK中提供的 ThreadLocal 类正是为了解决这样的问题。ThreadLocal 类主要解决的就是让每个线程绑定自己的值,可以将 ThreadLocal 类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。如果你创建了一个 ThreadLocal 变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是 ThreadLocal

2021-04-21 22:49:15 654 1

原创 synchronized 关键字和 volatile 关键字的区别

volatile 关键字的主要作用1 保证变量的可见性在 JDK1.2 之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而在当前的 Java 内存模型下,线程可以把变量保存本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。要解决这个问题,就需要把变量声明为volatile,这就指示 JVM,这个变量是不稳定的,每次使用它都到主存中进行

2021-04-21 20:08:49 190

原创 并发编程的三个重要特性

并发编程的三个重要特性1.原子性 : 一个的操作或者多次操作,要么所有的操作全部都得到执行并且不会收到任何因素的干扰而中断,要么所有的操作都执行,要么都不执行。 synchronized 可以保证代码片段的原子性。2.可见性 :当一个变量对共享变量进行了修改,那么另外的线程都是立即可以看到修改后的最新值。 volatile 关键字可以保证共享变量的可见性。3.有序性 :代码在执行的过程中的先后顺序,Java 在编译器以及运行期间的优化,代码的执行顺序未必就是编写代码时候的顺序。 volatile 关键

2021-04-21 20:07:43 485

原创 synchronized和ReentrantLock 的区别

synchronized和ReentrantLock 的区别① 两者都是可重入锁两者都是可重入锁。“可重入锁”概念是:自己可以再次获取自己的内部锁。比如一个线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的,如果不可锁重入的话,就会造成死锁。同一个线程每次获取锁,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。②synchronized 依赖于 JVM 而 ReentrantLock 依赖于 APIsynchronized 是依赖于 JV

2021-04-21 19:31:43 273

原创 synchronized 关键字 整理

synchronized 关键字synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。另外,在 Java 早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的 Mutex Lock 来实现的,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换

2021-04-21 16:50:10 403 1

原创 Java多线程中为什么调用 start() 方法时会执行 run() 方法,为什么不能直接调用 run() 方法?

为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?new 一个 Thread,线程进入了新建状态;调用 start() 方法,会启动一个线程并使线程进入了就绪状态,当分配到时间片后就可以开始运行了。 start() 会执行线程的相应准备工作,然后自动执行 run() 方法的内容,这是真正的多线程工作。 而直接执行 run() 方法,会把 run 方法当成一个 main 线程下的普通方法去执行,并不会在某个线程中执行它,所以这并不是多线程工作。总结:

2021-04-21 16:08:59 1098

原创 sleep() 方法和 wait() 方法区别和共同点

sleep() 方法和 wait() 方法区别和共同点两者最主要的区别在于:sleep 方法没有释放锁,而 wait 方法释放了锁 。两者都可以暂停线程的执行。Wait 通常被用于线程间交互/通信,sleep 通常被用于暂停执行。wait() 方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的 notify() 或者 notifyAll() 方法。sleep() 方法执行完成后,线程会自动苏醒。或者可以使用 wait(long timeout)超时后线程会自动苏醒。...

2021-04-21 16:06:21 419

cnn卷积神经网络

cnn卷积神经网络 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。由于卷积神经网络能够进行平移不变分类(shift-invariant classification),因此也被称为“平移不变人工神经网络(Shift-Invariant Artificial Neural Networks, SIANN)” 。 对卷积神经网络的研究始于二十世纪80至90年代,时间延迟网络和LeNet-5是最早出现的卷积神经网络 ;在二十一世纪后,随着深度学习理论的提出和数值计算设备的改进,卷积神经网络得到了快速发展,并被大量应用于计算机视觉、自然语言处理等领域 。 卷积神经网络仿造生物的视知觉(visual perception)机制构建,可以进行监督学习和非监督学习,其隐含层内的卷积核参数共享和层间连接的稀疏性使得卷积神经网络能够以较小的计算量对格点化(grid-like topology)特征,例如像素和音频进行学习、有稳定的效果且对数据没有额外的特征工程(feature engineering)要求 。

2019-04-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除