自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张维鹏的博客

芝兰生于幽谷,不以无人而不芳!

  • 博客(235)
  • 资源 (2)
  • 收藏
  • 关注

原创 Redis的分布式锁详解

1、什么是分布式锁:为了防止分布式系统中的多个进程之间相互干扰,我们需要一种分布式协调技术来对这些进程进行调度。而这个分布式协调技术的核心就是来实现这个分布式锁。2、分布式锁应该具备哪些条件在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行 高可用的获取锁与释放锁 高性能的获取锁与释放锁 具备可重入特性(可理解为重新进入,由多于一个任务并发使用,而不必担心数据错误) 具备锁失效机制,防止死锁 具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败分布式锁的实.

2021-01-25 00:02:16 3307 1

原创 Java虚拟机:类加载机制与双亲委派模型

类加载机制,就是虚拟机把类的数据从class文件加载到内存,并对数据进行校检,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型的过程。JVM的类加载机制,规定一个类有且只有一个类加载器对它进行加载。而如何保证这个只有一个类加载器对它进行加载呢?则是由双亲委派模型来实现的。一个类加载器收到了类加载的请求,他不会去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,因此所有请求都会被传到最顶层的启动类加载器,只有当父加载器反馈无法完成加载请求时,子加载器才会尝试加载

2020-11-22 11:39:57 14770 2

原创 Java基础篇:反射机制详解

一、什么是反射: 反射是Java的特征之一,是一种间接操作目标对象的机制,核心是JVM在运行的时候才动态加载类,并且对于任意一个类,都能够知道这个类的所有属性和方法,调用方法/访问属性,不需要提前在编译期知道运行的对象是谁,他允许运行中的Java程序获取类的信息,并且可以操作类或对象内部属性。程序中对象的类型一般都是在编译期就确定下来的,而当我们的程序在运行时,可能需要动态的加载一些...

2019-12-03 23:50:42 99821 51

原创 MySQL数据库:SQL优化与索引优化

一、索引优化规则:1、union、in、or 都能够命中索引,建议使用 in:(1)union:能够命中索引,并且MySQL耗费的CPU最少。select * from doc where status=1union allselect * from doc where status=2;(2)in:能够命中索引,查询优化耗费的CPU比union all多,但可以忽略不计,一般情况下建议使用in。select * from doc where status in...

2018-11-25 02:36:55 5701 5

原创 MySQL数据库:事务和ACID实现原理

数据库的事务是并发控制的基本单位,是指逻辑上的一组操作,要么全部执行,要么全部不执行。1、事务的特性:(1)原子性:事务是一个不可分割的工作单元,事务里的操作要么都成功,要么都失败,如果事务执行失败,则需要进行回滚。(2)隔离性:事务的所操作的数据在提交之前,对其他事务的可见程度。(3)持久性:一旦事务提交,它对数据库中数据的改变就是永久的。(4)一致性:事务不能破坏数据的完整性和业务的一致性。

2018-11-19 00:25:55 1216

原创 Java基础篇:什么是hashCode 以及 hashCode()与equals()的联系

1、什么是hashCode:hashCode就是对象的散列码,是根据对象的某些信息推导出的一个整数值,默认情况下表示是对象的存储地址。通过散列码,可以提高检索的效率,主要用于在散列存储结构中快速确定对象的存储地址,如Hashtable、hashMap中。为什么说hashcode可以提高检索效率呢?我们先看一个例子,如果想判断一个集合是否包含某个对象,最简单的做法是怎样的呢?逐一取出集合中的每个元素与要查找的对象进行比较,当发现该元素与要查找的对象进行equals()比较的结果为true时,则停止继续

2018-10-19 19:39:44 18531 18

原创 Spring常见面试题总结(超详细回答)

1、Spring是什么?Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。主要由以下几个模块组成:Spring Core:核心类库,提供IOC服务;Spring Context:提...

2018-07-08 15:36:08 541221 83

原创 MySQL数据库:索引的实现原理

一、MySQL索引的数据结构:常见的索引的数据结构有:B+Tree、Hash索引。1、Hash索引:MySQL中,只有Memory存储引擎支持hash索引,是Memory表的默认索引类型。hash索引把数据以hash值形式组织起来,因此检索效率非常高,可以一次定位。hash索引的缺点:(1)Hash索引仅能满足等值的查询,不能满足范围查询、排序。因为数据在经过Hash算法后,其大小关系就可能发生变化。(2)当创建组合索引时,不能只适用组合索引的部分列进行查询。因为hash索引是把多

2018-06-25 10:22:41 1922 2

原创 Java虚拟机:垃圾回收机制与垃圾收集器

当Eden区没有足够的内存空间给对象分配内存时,虚拟机会发起一次Minor GC,在GC开始的时候,对象会存在Eden和From区,To区是空的。进行GC时,Eden区存活的对象会被复制到To区,From区存活的对象会根据年龄值决定去向,达到阈值(默认15)的对象会被移动到老年代中,没有达到阈值的对象会被复制到To。这时Eden区和From区已经被清空了。接下来From区和To区交换角色,以保证To区在GC开始时是空的。Minor GC会一直重复这样的过程,直到To区被填满,To被填满之后,会将所有对象移动

2018-05-12 17:23:14 879 2

原创 Elasticsearch搜索引擎:ES的segment段合并原理

一、segment文件的合并流程:当我们往 ElasticSearch 写入数据时,数据是先写入 memory buffer,然后定时(默认每隔1s)将 memory buffer 中的数据写入一个新的 segment 文件中,并进入 Filesystem cache(同时清空 memory buffer),这个过程就叫做 refresh;每个 Segment 事实上是一些倒排索引的集合, 只有经历了 refresh 操作之后,数据才能变成可检索的。ElasticSearch 每次 refresh

2021-06-16 11:48:39 137 2

原创 ElasticSearch搜索引擎:常用的存储mapping配置项 与 doc_values详细介绍

1、Elasticsearch的mapping设置:enabled,index,doc_values,store,_source2、doc_values 详细说明:doc values就是在构建倒排索引时,对开启 doc values 的字段额外构建一个有序的 "document文档 ==> field value“ 的列式存储映射,从而实现对指定字段进行排序和聚合时对内存的依赖,提升该过程的性能。3、doc_values 与 source 的区别?使用 docvalue_fields 检索指定字段

2021-06-15 08:49:05 81

原创 两分钟读懂什么是TPS和QPS

1、TPS:Transactions Per Second,每秒事务数。一个事务是指客户端向服务器发送请求然后服务器做出反应的过程,具体的事务定义,可以是一个接口、多个接口、一个业务流程等等。2、QPS:Queries Per Second,意思是每秒查询率。指一台服务器每秒能够响应的查询次数,用于衡量特定的查询服务器在规定时间内所处理流量多少,主要针对专门用于查询的服务器的性能指标。

2021-06-15 08:48:02 153 4

原创 MySQL自增主键auto_increment原理 与 自增主键出现间隙不连续现象的定位

MySQL自增主键auto_increment原理;MySQL的innodb_autoinc_lock_mode参数说明;MySQL的AUTO-INC锁原理;自增主键出现间隙不连续现象的定位;

2021-06-05 17:49:59 1172 9

原创 架构入门!常见的服务器架构,从单体架构、EAI 到 SOA 再到微服务和 ServiceMesh

1、单体架构:将所有业务的表现层,业务逻辑层,数据访问层放在一个工程中最终部署在一台服务器2、垂直架构:按业务场景拆分为互不相干的单体架构项目3、前后端分离:前端关注页面样式与动态数据的解析及渲染,后端专注于具体业务逻辑4、EAI架构:连通与集成相互独立的异构系统,解决信息孤岛的问题。5、SOA架构:将各系统的不同功能单元抽象为服务,服务间通过标准的接口协议连接,从而到达复用6、微服务:SOA思想的一种提炼,强调业务系统彻底的组件化和服务化7、微服务2.0:由服务网格以代理的方式建立稳定的通信

2021-06-01 18:46:12 1022 5

原创 海量数据处理的方法总结

基础知识:bit:位 byte:字节 1 byte= 8 bit int 类型为 4 byte,共32位bit,unsigned int也是 2^32 byte = 4G 1G= 2^30 =10.7亿海量数据处理概述:所谓海量数据处理,就是指数据量太大,无法在较短时间内迅速解决,或者无法一次性装入内存。而解决方案就是:针对时间,可以采用巧妙的算法搭配合适的数据结构,如 Bloom filter/Hashmap/bit-map/堆/数据库/倒排索引/trie树;针对空间...

2021-04-14 00:54:01 701

原创 ElasticSearch搜索引擎常见面试题总结

一、ElasticSearch基础:1、什么是Elasticsearch:Elasticsearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎,每个字段都被索引并可被搜索,可以快速存储、搜索、分析海量的数据。全文检索是指对每一个词建立一个索引,指明该词在文章中出现的次数和位置。当查询时,根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。2、Elasticsearch 的基本概念:(1)index 索

2021-04-12 01:29:31 1192 1

原创 计算机网络常见面试题总结

计算机网络模型:TCP/IP 与 OSI 都是为了使网络中的两台计算机能够互相连接并实现通信与回应,但他们最大的不同在于,OSI 是一个理论上的网络通信模型,而 TCP/IP 则是实际上的网络通信标准。一、OSI七层模型:1、物理层:实现计算机节点之间比特流的透明传输,规定传输媒体接口的标准,屏蔽掉具体传输介质和物理设备的差异,使数据链路层不必关心网络的具体传输介质,按照物理层规定的标准传输数据就行2、数据链路层:通过差错控制、流量控制等方法,使有差错的物理线路变为无差错的数据链路。

2021-04-06 00:52:59 1187 3

原创 RabbitMQ消息队列常见面试题总结

RabbitMQ消息队列常见面试题总结;1、什么是消息队列?消息队列的优缺点?2、Kafka、ActiveMQ、RabbitMQ、RocketMQ的区别?3、如何保证消息不被重复消费?4、如何保证消息不丢失,进行可靠性传输?5、如何保证消息的有序性?6、如何处理消息堆积情况?7、如何保证消息队列的高可用?

2021-03-23 23:23:45 4460 6

原创 MySQL数据库:参数优化

数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO。本文先从 MySQL 数据库IO相关缓存参数的角度来介绍可以通过哪些参数进行IO优化:一、参数说明:1、query_cache_size / query_cache_type (global):Query cache 主要.

2021-03-08 02:26:20 452

原创 MySQL数据库常见面试题总结

1、数据库中的范式:(1)第一范式(1NF):指表的列不可再分,数据库中表的每一列都是不可分割的基本数据项,同一列中不能有多个值;(2)第二范式(2NF):在 1NF 的基础上,还包含两部分的内容:一是表必须有一个主键;二是表中非主键列必须完全依赖于主键,不能只依赖于主键的一部分;(3)第三范式(3NF):在2NF 的基础上,消除非主键列对主键的传递依赖,非主键列必须直接依赖于主键。(4)BC范式(BCNF):在 3NF 的基础上,消除主属性对于码部分的传递依赖2、SQL语句的执..

2021-03-07 17:41:32 9616 17

原创 MySQL数据库:SQL语句的执行过程

一、客户端的MySQL驱动:我们的系统在和 MySQL 数据库进行通信前,需要先和数据库建立连接,而这个功能就是由MySQL驱动底层帮我们完成的,建立完连接之后,我们只需要发送 SQL 语句就可以执行 CRUD 了。如下图所示:一次 SQL 请求就会建立一个连接,多个请求就会建立多个连接。假设我们的系统是部署在 tomcat 容器中的,tomcat 是可以并发处理多个请求的,这就会导致多个请求会去建立多个连接,然后使用完再都去关闭,这样会有什么问题呢?Java系统在通过 MySQL 驱动 和 .

2021-02-28 23:56:20 2585 6

原创 Spring的Bean加载流程

Spring IOC容器就像是一个生产产品的流水线上的机器,Spring创建出来的Bean就好像是流水线的终点生产出来的一个个精美绝伦的产品。既然是机器,总要先启动,Spring也不例外。因此Bean的加载流程总体上来说可以分为两个阶段:容器启动阶段 Bean创建阶段一、容器启动阶段:容器的启动阶段做了很多的预热工作,为后面Bean的实例化做好了充分的准备,我们首先看一下容器的启动阶段都做了哪些预热工作。1、配置元信息:Spring IOC容器将对象实例的创建与对象实例的使用分离,当业务

2021-02-22 03:25:01 1994 8

原创 Spring容器的启动流程

Spring的启动流程可以归纳为三个步骤:1、初始化Spring容器,注册内置的BeanPostProcessor的BeanDefinition到容器中;2、将配置类的BeanDefinition注册到容器中;3、调用refresh()方法刷新容器;

2021-02-18 00:08:13 5674 13

原创 Redis集群原理详解

一、redis cluster 介绍:1、单实例的Redis架构:最开始的一主N从加上读写分离,Redis作为缓存单实例貌似也还不错,并且有Sentinel哨兵机制,可以实现主从故障迁移。单实例Redis本质上只有一台Master作为存储,就算机器为128GB的内存,一般建议使用率也不要超过70%-80%,所以最多使用100GB数据就已经很多了,实际中50%就不错了,因为数据量太大也会降低服务的稳定性,而且数据量太大意味着持久化成本高,可能严重阻塞服务,甚至最终切主。所以,单实例还存在以下几

2021-02-16 00:13:04 3482 5

原创 布隆过滤器Bloom Filter简介

背景:如果在平时我们要判断一个元素是否在一个集合中,通常会采用查找比较的方法,下面分析不同的数据结构查找效率:采用线性表存储,查找时间复杂度为O(N) 采用平衡二叉排序树(AVL、红黑树)存储,查找时间复杂度为O(logN) 采用哈希表存储,考虑到哈希碰撞,整体时间复杂度也要O[log(n/m)]当需要判断一个元素是否存在于海量数据集合中,不仅查找时间慢,还会占用大量存储空间,接下来看一下布隆过滤器如何解决这个问题1、什么是布隆过滤器:布隆过滤器是一种空间效率很高的随机数据结..

2021-02-08 15:35:45 266

原创 Redis为什么这么快?Redis的线程模型与Redis多线程

一、Redis有多快?Redis是基于内存运行的高性能 K-V 数据库,官方提供的测试报告是单机可以支持约10w/s的QPS二、Redis为什么这么快:(1)完全基于内存,数据存在内存中,绝大部分请求是纯粹的内存操作,非常快速,跟传统的磁盘文件数据存储相比,避免了通过磁盘IO读取到内存这部分的开销。(2)数据结构简单,对数据操作也简单。Redis中的数据结构是专门进行设计的,每种数据结构都有一种或多种数据结构来支持。Redis正是依赖这些灵活的数据结构,来提升读取和写入的性能。.

2021-02-01 03:06:08 829 3

原创 使用LinkedHashMap实现LRU算法

LRU算法,最近最少使用原则,如果要实现该算法,可以借助LinkedHashMap数据结构,LinkedHashMap继承HashMap,底层使用哈希表和双向链表来保存所有元素,使用LinkedHashMap可以确保元素按照顺序进行存储。默认情况下,LinkedHashMap是按照元素的添加顺序存储,也可以启用按照访问顺序存储,即最近读取的数据放在最前面,最早读取的数据放在最后面,然后它还有一个判断是否删除最老数据的方法,默认是返回false,即不删除数据。下面就基于这两种存储方式,简单展示一下如何

2021-01-31 23:54:02 174

原创 Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级

一、缓存雪崩:1、什么是缓存雪崩:如果缓在某一个时刻出现大规模的key失效,那么就会导致大量的请求打在了数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库宕机。这时候如果运维马上又重启数据库,马上又会有新的流量把数据库打死。这就是缓存雪崩。2、问题分析:造成缓存雪崩的关键在于同一时间的大规模的key失效,为什么会出现这个问题,主要有两种可能:第一种是Redis宕机,第二种可能就是采用了相同的过期时间。搞清楚原因之后,那么有什么解决方案呢?3、解决方案:(1)

2021-01-31 17:52:39 6392 3

原创 Redis的五种数据结构的底层实现原理

Redis的五种数据结构的底层实现原理:1、String底层实现方式:动态字符串sds 或者 long;2、Hash底层实现方式:压缩列表ziplist 或者 字典dict;3、List在Redis3.2之前的底层实现方式:压缩列表ziplist 或者 双向循环链表linkedlist;4、List在Redis3.2及之后的底层实现方式:quicklist5、Set底层实现方式:有序整数集合intset 或者 字典dict6、Sorted set底层实现方式:压缩列表ziplist 或者zset

2021-01-31 02:49:22 1225

原创 Redis的事务机制

一、Redis事务的相关命令:1、MULTI:用于标记事务块的开启。MULTI执行之后,Redis会将后续的命令逐个放到一个缓存队列中,当EXEC命令被调用时,所有队列中的命令才会被原子化执行。2、EXEC:在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态。当使用WATCH命令时,只有当受监控的键没有被修改时,EXEC命令才会执行事务中的命令。3、DISCARD:放弃事务,清除事务队列中的命令,然后恢复正常的连接状态。如果使用了UNWATCH命令,那么DISCARD命令

2021-01-31 02:38:16 307 1

原创 Redis的数据过期清除策略 与 内存淘汰策略

在使用Redis时,我们一般会为Redis的缓存空间设置一个大小,不会让数据无限制地放入Redis缓存中。可以使用下面命令来设定缓存的大小,比如设置为4GB:CONFIG SET maxmemory 4gb既然 Redis 设置了缓存的容量大小,那么缓存被写满是不可避免的。我们需要面对缓存写满时的替换操作。缓存替换需要解决两个问题:决定淘汰哪些数据,如何处理那些被淘汰的数据。一、Redis有哪些淘汰策略Redis共提供了8中缓存淘汰策略,其中 volatile-lfu 和 allk.

2021-01-30 16:01:34 1986

原创 Redis的持久化机制

Redis是一个基于内存的数据库,所有的数据都存放在内存中,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。Redis的持久化机制有两种,第一种是RDB快照,第二种是AOF日志。RDB快照是一次全量备份,AOF是连续的增量备份。快照是内存数据的二进制序列化形式,在存储上非常紧凑,而 AOF 日志记录的是内存数据修改的指令记录文本。一、RDB机制:RDB快照就是把数据以快照的形式保存在磁盘上,是某个..

2021-01-17 02:01:11 364

原创 Redis哨兵机制原理详解

哨兵模式:(心跳检测机制)前面说到主从模式其实是一种数据的备份方式,如果master宕机了,需要手动切换,并且还要切换客户端的连接数据源。这就无法达到高可用。哨兵模式就可以解决这一问题。哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。 哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过sentinel代理访问redis的主节点,当redis的主节点发生变化,哨兵会第一时间感知到,并且哨兵会早主从模式的从节点..

2021-01-15 23:53:31 520 6

原创 Spring中所使用的设计模式

Spring是一个非常优秀的开源框架,项目源码中所使用的设计模式随处可见,这篇文章主要记录一下Spring中常见的设计模式:(1)工厂模式:Spring使用工厂模式,通过BeanFactory和ApplicationContext来创建对象(2)单例模式:Bean默认为单例模式(3)策略模式:例如Resource的实现类,针对不同的资源文件,实现了不同方式的资源获取策略(4)代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术(5)模板方法:可以将相同部分

2021-01-14 02:51:09 1707

原创 Redis主从复制原理

一、为什么需要主从复制:1、单台Redis节点的局限性:(1)单节点的Redis能够支撑QPS大概在5万左右,如果上千万的用户访问,Redis就承载不了,成为了高并发的瓶颈。(2)内存上,单个Redis的内存不宜过大,内存过大会导致主从同步时全量同步时间过长,而且在实例重启恢复时也会消耗很长的数据加载时间,一般控制在10G以内即可。(2)CPU 的利用率上,单个 Redis 实例只能利用单个核心,这单个核心在面临海量数据的存取和管理工作时压力会非常大。四、Redis主从复..

2021-01-10 23:26:24 302

转载 Spring如何解决循环依赖问题

1、什么是循环依赖:类与类之间的依赖关系形成了闭环,就会导致循环依赖问题的产生。2、循环依赖问题在Spring中主要有三种情况:(1)通过构造方法进行依赖注入时产生的循环依赖问题。(2)通过setter方法进行依赖注入且是在多例(原型)模式下产生的循环依赖问题。(3)通过setter方法进行依赖注入且是在单例模式下产生的循环依赖问题。3、Spring解决的单例模式下的setter方法依赖注入引起的循环依赖问题,主要是通过两个缓存来解决的

2020-12-09 02:23:10 5054 6

原创 Mybatis中 Dao接口和XML文件的SQL如何建立关联

面试题:Mybatis中的Dao接口和XML文件里的SQL是如何建立关系的? 如果有两个XML文件和这个DAO建立关系,岂不是冲突了?一、解析XML:首先,Mybatis在初始化SqlSessionFactoryBean的时候,找到mapperLocations路径去解析里面所有的XML文件,这里我们重点关注两部分。1、创建SqlSource:Mybatis会把每个SQ...

2020-12-04 03:06:53 7211 4

原创 Java虚拟机:对象的创建过程

1、对象的创建过程:对象的创建过程一般是从new指令(JVM层面)开始的,整个创建过程如下:(1)首先检查new指令的参数是否能在常量池中定位到一个类的符号引用;(2)如果没有,说明类还没有被加载,则须先执行相应的类加载、解析和初始化;类加载过程可阅读这篇文章:https://blog.csdn.net/a745233700/article/details/80274743(3)如果有,虚拟机将在堆中为新生对象分配内存,并使用CAS保证操作原子性。分配内存方式有:指针碰撞和空闲列表;

2020-11-22 01:39:06 329

原创 JUC多线程:线程池的创建及工作原理

一、什么是线程池:线程池主要是为了解决 新任务执行时,应用程序为任务创建一个新线程 以及 任务执行完毕时,销毁线程所带来的开销。通过线程池,可以在项目初始化时就创建一个线程集合,然后在需要执行新任务时重用这些线程而不是每次都新建一个线程,一旦任务已经完成了,线程回到线程池中并等待下一次分配任务。二、创建线程池:1、通过Executors创建线程池:在JUC包中的Executors中,提供了一些静态方法,用于快速创建线程池,常见的线程池有:(1)newSingleThreadExecutor:创建一

2020-11-01 02:33:36 529

原创 ubuntu系统使用Anaconda安装tensorflow-gpu环境

一、环境配置版本信息:安装tensorflow-gpu,需特别注意tensorflow-gpu、Python、CUDA、cuDNN版本的适配信息,版本不适配会导致tensorflow-gpu安装失败,该安装教程选择的软件版本信息为:ubuntu18.04 + Anaconda3.5.3.1 + Python3.6.12 + tensorflow-gpu2.2.0 + CUDA10.1 + cuDNN7.6.5更多版本适配信息可参考官网:https://tensorflow.google.cn/insta

2020-10-30 00:50:06 1357

Spring+SpringMVC+Mybaits整合jar包

spring4.3.9+springmvc4.3.9+mybatis3.4.4的整合jar包依赖完整版。

2018-07-13

Spring+Struts + Hibernate整合jar包

spirng4.3.9+struts2.3.24+hibernate5.0.9整合jar包依赖完整版。

2018-07-13

空空如也

空空如也

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

TA关注的人 TA的粉丝

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