自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

刘一凡的博客

软件测试、开发,测试总监

  • 博客(85)
  • 资源 (5)
  • 收藏
  • 关注

原创 ospf 5类LSA和7类LSA中的forwarding address字段的作用

forwarding address的作用。Forwarding address在5类LSA和7类LSA中都有,作用是相同的。forwarding address用来通告达到AS外部网络的更快捷的下一跳。以免在广播网上可能出现的多走一跳的问题。例如router1、router2、router3连在同一广播网上。Router1和router2属于一个OSPF路由域。Router1重发布下一跳为router3的路由。如果不填写Forwarding Address。Router2会先把数据发送给rou

2021-03-12 12:50:00 29

原创 PIM-SM基础原理:共享树的建立、源注册、共享树向源树的切换

共享树共享树的概念共享树(shared tree/RP Tree)中无论组播组的源是什么,都有一个共同的根。所有这些树的共享根被称为RP(集合点)。在共享树中,我们会看到(*,G),因为并不关心源,星号代表任何源。所有的流量从源发送到RP,然后数据沿着共享树到达接收者。共享树的建立当PIM-SM路由器收到组播组G的IGMP membership report,它检查是否创建了对应的(*, G)。如果有了,则把收到membership report的接口加入到OIL(outgoing inte

2021-03-12 12:48:48 42 1

原创 使用gcov进行C语言代码覆盖率统计

介绍:gcov是一个测试代码覆盖率的工具。它必须与GCC一起使用来分析程序,以帮助并发现程序的未测试部分,还可以结合lcov工具生成html格式的统计报告,可以方便的查看代码覆盖率的情况,甚至可以查看每一行代码的执行次数。基本原理:基本块BB:如果一段程序的第一条语句被执行过一次,这段程序中的每一条语句都要执行一次,那么这段程序构成一个基本块。一个BB中的所有语句的执行次数一定相同。一般情况下BB的最后一条语句一定是一个跳转语句,跳转的目的地是另外一个BB的第一条语句,如果跳转是有条件的,就产生

2021-03-02 19:59:55 2199

原创 考核漫谈

考核漫谈做部门经理已经快十年了。公司里每个月有考核,每个季度有季度考核,每年有年度考核。担心自己对下属的考核不够充分,所以会读书和思考,期望能够最大程度上匹配下属的实际情况,也能帮助他们成长,让部门业绩更好。考核目的:考核的目的是为了改善绩效。而不是为了修理谁。要让被考核者明白,考核是改进自己业绩的一次机会,管理者会想办法帮助他改善绩效。改善的建议不宜多,每个季度能改善一个方面就很不错了。改善的方面应该是和具体工作相关的,而不是个性、价值观等方面的,那些是个人的选择,考核者无权干涉,..

2021-02-07 12:31:50 156

原创 软件测试杂谈:测试设计、bug漏测、探索测试、能测出好软件吗?

软年测试杂谈:测试设计、bug漏测、探索测试、能测出好软件吗?关于bug漏测:非测试人员最喜欢问的就是,为什么会有漏测?其实这和开发写的代码中有bug是一个道理。开发不能保证自己的思路一定正确,也无法保证程序各种路径、环境、状态下都工作正常。测试人员也一样。有了测试人员只是增加了一层扑捉bug的网,但是总有漏网的。因为测试人员是最后一道防线,所以任何漏了的,测试人员都有责任。要分析遗漏的原因,思考改进的方法。虽然漏测总是有,但是只有这样,才能让测试人员有足够的质量意识,不断减少漏测。减少漏.

2021-02-02 12:26:28 183 7

原创 MPLS/BGP虚拟专用网络跨域解决方案 背靠背VRF(VRF-to-VRF)/Option A、One-hop MP-EBGP/Option B、Multi-hop MP-EBGP/Option C

背靠背VRF(VRF-to-VRF)/Option A基础拓扑CE1---PE1---P1---ASBR1-----ASBR2---P2---PE2---CE2路由通告VPNv4路由是分段逐AS通告的。CE1将IPv4路由通告给PE1。PE1将VPNv4路由通告给ASBR1。ASBR1通过匹配RT,将其放入对应的VRF中,然后将IPv4路由通告给ASBR2。ASBR2将VRF下收到的路由转换成VPNv4路由通告给PE2。PE2通过RT匹配,将路由放入对应的VRF中。最后通告IPv4路由给CE

2021-01-27 22:38:44 84

原创 MPLS/BGP虚拟专用网络路由通告和数据转发

MPLS/BGP虚拟专用网络路由通告当PE设备从某个VRF中的VPN站点接收到IPv4路由之后,它就在IPv4前缀前面添加该VRF的RD(8个字节长),IPv4前缀就变成了VPNv4前缀。PE为本地每个VRF分配一个MBGP标签(3个字节长)。这里还有另外两种方式,第一种是为本地每个启用了VRF的接口分配一个MBGP标签,第二种是为本地每条VPNv4路由分配一个MBGP标签(三个字节)。长度、标签、VPNv4路由三部分,组成了MP_UNREACH_NLRI属性中的NLRI字段。地址族设置为AFI=1

2021-01-27 22:28:07 50

原创 IP报文格式详解

IP报文首部讲解 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service|

2021-01-27 22:17:58 3202

原创 python中内置函数getatrr()、setattr()、hasattr()、delattr()的作用

Python可以在类之外添加、删除属性,虽然很灵活,但是给代码书写者带来了不确定性。Python提供了一组内置函数方便属性操作。内置函数hasattr(object, name)用来判断对象是否包含对应的属性。如果包含,则返回True,否则返回False。内置函数getattr(object, name[, default]) 用来获取属性值。如果属性不存在,则返回default,没有指定default时,抛出异常AttributeError。内置函数setattr(object, name,

2020-12-15 23:21:14 59

原创 互联网应用扩容:应用拆分、数据库拆分、读写分离、主从同步

如何扩容应用拆分的垂直拆分将系统拆分为各种服务。使用带有服务注册、发现功能的SOA框架(面向服务的架构)来进行交互。一个功能的读写可以拆分成不同的服务。不同的服务由不同的团队维护。通过服务注册中心,服务消费者不需要进行配置更改,就可以发现新的服务提供者并使用它。数据库拆分分库,即垂直数据拆分,比如拆分为商家库、客户库、订单库。分库解决多个表之间的IO竞争、单机容量问题。分表,即水平数据拆分。分表提高了单表查询速度。先按照业务维度进行垂直拆分,不同的应用可以使用不同的数据库,再根.

2020-11-28 18:50:08 54

原创 常见的服务器集群负载均衡技术:二三四七层负载均衡,DNS、LVS、F5、nginx负载均衡

服务器集群负载均衡技术LB:load balance负载均衡器。有时也叫做director。DNS负载均衡DNS负载均衡,最基础的是轮询方式,循环返回不同的服务器IP地址。可以同时返回多个服务器IP地址,但是IP地址顺序在变化。用户会首先使用第一个IP地址进行访问。现在有了改进版本。比如AWS Route53 。DNS服务器可以检测服务器的状态。如果服务器故障了,不会告诉用户使用这个服务器。DNS服务器可以按照权重返回DNS应答。DNS服务器可以返回时延最小的那个服务器。.

2020-11-28 18:48:46 107

原创 实现一个简单的python自动化测试框架

实现一个简单的python自动化测试框架。父类中实现runTest()方法和assertEqual()。子类编写test开头的测试函数,其中调用assertEqual()。实例化子类,运行父类中runTest()方法,执行测试函数。如何在父类中的runTest()中发现子类中的测试函数?我们使用的是子类的实例调用runTest(),所以dir()就能够知道子类中的所有名字,然后使用getattr()将名字转换成测试函数。另外在父类中实现了钩子方法setUp()和tearDown()。

2020-08-26 22:08:47 181

原创 C语言常见内存管理错误

C语言常见内存管理错误:内存没有分配就开始访问。这常常是分配内存后,没有返回值。如果内存分配失败了,就开始使用,就会发生解引用空指针。 内存没有初始化,那么其中的值是不确定的。如果程序员当做值是0来使用,就出现了错误。 内存用完没有释放。这导致内存泄露。 内存重复释放。如果这块内存已经分配给程序的其它部分,则影响了其它部分的功能。如果这块内存还没有分配给程序的其它部分,则没有危害。 释放内存后又访问。如果这块内存已经分配给程序的其它部分,那么执行写操作就影响了新使用者的功能,执行读操作,则读出了

2020-08-26 22:08:20 81

原创 python测试框架unittest源代码分析

Python3.6.3 unittest源代码分析程序入口:main.py中定义类TestProgram,它实现了运行测试的命令行程序。它不支持在代码中定义的testsuite。测试加载:loader.TestLoader将test加载到testsuite中。其中定义了discover(),用来支持用例的自动发现。因为unittest代码中有defaultTestLoader = TestLoader(),所以测试代码中可以直接使用loader.TestLoader的实例unit..

2020-07-30 21:11:56 258

原创 selenium弹窗处理,包括Javascript弹窗、HTML弹出层和Windows弹窗

弹窗处理Javascript弹窗Javascript中有3种弹窗:alert(只有一个确认按钮)、confirmation(有确认和取消两个按钮供选择)、prompt(需要输入内容)。无法使用selenium提供的find_element_by_xx()定位到alert中的元素。Selenium提供一组统一的API处理它们,代码形式上都当做Alert的实例来处理。alert = driver.switch_to_alert()切换到当前弹出的alert。关闭了alert之后,回到aler

2020-07-15 20:16:48 605

原创 Selenium一些特殊情况的处理:失去焦点、点击不生效、长页面处理、先触发事件才能动态加载的元素、日期输入

Selenium一些特殊情况的处理失去焦点focus有时候click()或者send_keys(),没有反应。那是因为失去了焦点。使用driver. switch_to_active_element()或者driver.execute_script("arguments[0].focus();", element)解决。点击不生效的替代办法首先使用EC.element_to_be_clickable()确认元素是clickable的。然后可以尝试如下替代方法方法1:使用回车键代替。

2020-07-15 20:16:29 955

原创 如何提升Selenium脚本执行稳定性,selenium定位不到元素,selenium操作不了元素,元素可靠定位,元素可靠操作,JS执行未完成,alert、frame、window可靠切换,新页面加载

如何提升Selenium用例执行稳定性使用selenium会发现很多稳定性问题,有时定位不到,有时操作不了。对于不熟悉selenium的人来说是很痛苦的。有些问题增加等待时间可以减少出问题的几率,但是出了问题就增加硬性等待时间会导致案例执行时间越来越长。所以在增加等待时,应该使用显示等待,或者封装出显示等待的效果,这样一来一旦条件满足就会立刻进行后续操作。通过合理的库的封装,既提高可靠性,又不会不合理的增加案例执行时间。有些问题需要特殊处理。这里我列出项目中遇到过的稳定性问题及其解决办法。将

2020-07-15 20:03:04 259

原创 基于nose、使用django实现的自动化测试执行平台实现Rerun Failed功能。

Windautotest是我开发的一个基于Web界面进行操作的测试用例自动化执行平台。Windautotest使用python+django在nose+unittest的基础上开发。相比于直接使用nose,使得测试执行更方便,测试结果更易于管理。需求:点击job的Rerun Failed按钮,生成一个新的job,运行当前job的失败用例。对于Rerun Failed生成的job,仍然可以执行Rerun Failed操作。思考:nosetests --with-id运行时可以生成.nos.

2020-06-29 13:02:36 209

原创 python测试框架unittest数据驱动插件ddt源代码分析

unittest需要第三方插件ddt来实现数据驱动。数据可以是列表、字典或者JSON文件。>pip install ddt进行安装下面是一个简单的使用举例。import unittestimport ddt@ddt.ddtclass TestAdd(unittest.TestCase): @ddt.data([1,2,3],[3,4,7]) @ddt.unpack def test_add(self,a,b,c): assert ...

2020-05-22 20:31:09 323

原创 实现python pytest excel数据驱动

pytest支持数据驱动基础举例:import pytest@pytest.mark.parametrize("a,b,c",[[1,2,3],[3,4,7]])def test_add(a,b,c):assert a+b==c执行时,将分别使用上面两组数据,执行两个test。实际中我们经常使用excel文件来提供数据。所以实现excel数据驱动。实现思路:将读取出的excle文件中的标题行中各个单元格使用逗号连接成一个字符串,数据以双重列表的方式返回,作为@pyt.

2020-05-22 12:41:45 1477

原创 OSPF重发布路由时E1和E2的用法

E1、E2工程意义在OSPF域外路径metric值和OSPF域内路径metic值具有可比性时,设置外部路由类型为E1,比如说重发布一个参考带宽相同的OSPF域中的路由,或者重发布时能选择出一个能对内部而言有意义的metric值。在OSPF域外路径度量值和OSPF域内路径的度量值不具可比性时,设置外部路由类型为E2。OSPF重发布BGP路由时,因为OSPF域外路径代价通常情况下远远大于OSPF域内路径代价,所以通常使用E2。E2用法用法1:根据到ASBR的路径cost值进行流量分担:对于有多个

2020-05-20 12:40:57 1109 2

原创 OSPF为什么选择raw IP传输协议报文?

OSPF采用raw IP协议进行协议报文的传输,IP报文头部中协议号为89。因为使用了raw IP,所以OSPF要有需要自己实现确认重传机制,还需要通过OSPF报文中的checksum字段验证协议报文的内容是否正确。通过LSA中的sequence值来应对乱序问题。OSPF为什么不使用TCP?OSPF支持邻居的动态发现,而邻居动态发现需要使用组播报文。使用AllSPFRouters(224.0.0.5)作为DIP。在发现邻居之前,并不知道邻居的IP地址,也就无法使用TCP。另外,在多路访问网络中,DR使用

2020-05-20 12:38:59 444

原创 OSPF可扩展性分析

以2000台OSPF路由器的大型网络为例。分成10个区域,每个区域200台路由器。每台路由器连接度为4。1、LSDB占用内存:假设每台路由器都通告一个loopback接口。那么一个区域中有200个router LSA ,每个router-LSA包含5个网络,另外,还有400个network LSA。假设每个区域汇总为一条3类LSA。没有4类和5类LSA。则区域内路由器上有610条LSA。假设1个ABR直连接两个区域,那么ABR上有1220条LSA。每个route-LSA占20+4+4*3*5=84字

2020-05-20 12:35:29 254

原创 递归查找指定目录中含有指定关键字的文件

Windows不支持搜索.java、.c、.py、.tcl文件的内容。这里我实现一个函数find_files_by_suffix_and_content()递归查找指定目录中含有指定关键字的文件。可以根据文件后缀过滤文件。#python3.6#Windows不支持搜索.java、.c、.py、.tcl文件的内容。这里我实现一个函数find_files_by_suffix_and_content()递归查找指定目录中含有指定关键字的文件。可以根据文件后缀过滤文件。import os#查找指定目录

2020-05-14 20:02:10 399

原创 xlrd和xlwt封装,实现修改、删除excel文档单元格内容,插入、删除行

xlwt不能修改已有的excel文档。这里我在xlrd和xlwt基础上实现了修改excel文档的功能,包括插入、删除行,修改单元格内容、删除单元格内容。限制:虽然能够打开xlsx文件,但是只能生成xls文件。公式和宏丢失了。注意:行和列都是从0开始计数#coding=UTF-8#python 3.4 3.6#excel 2007#author=liuyifan#date=20171102#xlrd 1.1#xlwt 1.3'''在xlrd和xlwt基础上实现了修改excel

2020-05-14 20:00:29 2123 2

原创 实现通用的接口自动化测试用例脚本,自动读取excel接口文档进行接口测试

这里介绍一种方式,实现了读取excel接口文档,生成通用的接口自动化测试用例脚本utils.py源代码:import xlrddef parse_intf(file,sheet_index): with xlrd.open_workbook(file) as f: table = f.sheet_by_index(sheet_index) for row in range(0,table.nrows): if (table.ro

2020-05-09 22:19:34 890

原创 python类讲解

简单的类的举例:class Person: def set_name(self, name): # self相当于java中的this self.name=name def get_name(self): return self.name; def greet(self): print("hello,i'm %...

2020-04-30 21:19:56 322

原创 python函数讲解

函数定义举例:def my_square(x):return x*x函数调用时位置参数(positional)必须提供值,并且必须通过位置来表示值的含义。关键字参数(keyword)在调用时对参数的个数和位置没有固定要求,在调用时没有提供的参数值使用默认值。使用/表示位置参数的结束,用*表示名字参数的开始,这中间的是带默认值的参数。但是很多时候并没有明确标识边界。举例:...

2020-04-30 20:53:51 174

原创 各种RAID磁盘阵列简介:RAID0、RAID1、RAID5、RAID6、RAID10、RAID50

RAID Redundant Array of Independent Disks,通过并行I/O以提高磁盘性能,同时提供数据备份恢复功能。把连续的数据分散到多个磁盘上存取,存取数据时多个磁盘并行的执行,从而提高存取性能。RAID 0 并行读写。在所有RAID级别存取性能最高。但是不提供备份恢复功能。磁盘利用率100%。RAID 1也称为mirror,它把用户写入硬盘的数据百分之百写入备份...

2020-04-30 13:02:01 233

原创 rabbitMQ消息队列特点、原理、使用(发布订阅模式、workqueue模式、RPC模式)

消息队列好处:队列好处:异步处理(提高响应速度,后续可以批量处理)、流量削峰(平滑流量)、应用解耦。通过异步技术可以提升主流程响应速度。比如用户注册成功之后,发送注册成功邮件。非主流程可以集中批量处理。再例如:用户支付成功后,需要通知配货系统。只需要放入消息队列,之后需要做哪些工作,不需要知道,即解耦了。RabbitMQ消息队列RabbitMQ符合AMQP(消息队列的一个...

2020-04-30 12:48:53 166

原创 封装方法实现Selenium点击table指定行的某个单元格

在Web测试中常会遇到table,要操作的可能是其中的某一行。比如一张表显示商品信息,每一行显示一种商品,在每一行的末尾有删除按钮,想要删除指定ID的商品。这种需求常有遇到,而且这个操作涉及到xpath的一些用法,有些Page Object书写人员可能并不能轻松应对,所以我封装一个方法。实现如下。代码中虽然有些自研框架封装的API,但是不难使用原始的selenium API替换。def cl...

2020-04-26 12:55:50 597

原创 MySQL too many connections故障排除方法

如果出现“too many connections”的错误消息,SHOW PROCESSLIST可以帮我们看清楚发生了什么。如果sleep的连接很少,sleep的时间都不长,说明最大连接数太小了。show variables like '%max_connections%';查看最大连接数。可以在配置文件中进行修改最大连接数:my.cnf 中[mysqld]下面添加max_conn...

2020-04-26 12:37:12 149

原创 MPLS/BGP 虚拟专用网络中 RT vs RD,既生瑜何生亮?

RT的局限性/RD的用途有人直观认为RD标识了一个虚拟专用网络。实际上呢?RD只能标识一个VRF。位于不同的PE上的不同的VRF是否属于同一个虚拟专用网络,路由是否能够互通,取决于route-target。那么通告路由时为什么还要携带RD?因为RT是一种扩展团体属性。而BGP的Route withdraw报文只携带NLRI,不携带任何路由属性,所以回收路由的报文中没有RT。如果一个PE上多个...

2020-01-13 12:43:51 1506

原创 1bit-Trie(一种二叉树)实现路由表

树的定义和基本术语树:是n(>=0)个结点的有限集,它或为空树(n=0);或为非空树,对于非空树T:(1)有且仅有一个称之为根的结点;(2)除根结点以外的其余节点可分为 m(m>0)互不相交的有限集T1,T2,…,Tm,其中每一个集合本身又是一棵树,并且称为根的子树(subtree).从树的定义中我们要知道树的固有特性,即树的定义中又用到了树的定义,是一个递归的定义.键树...

2020-01-10 12:54:13 427

原创 发现失效后做什么?IS-IS联动BFD时的一个bug的全面分析

测试中遇到失效,删除IS-IS联动BFD的命令,BFD会话依然up。确认bug有效性:在这之前IS-IS和BFD会话都正常,IS-IS和BFD的绑定关系也正常。说明配置正确,而且出现失效之前系统处于正常工作状态。说明这是一个有效的bug。重现条件总结:对比之前的测试,之前删除IS-IS联动BFD的命令,BFD会话是会被删除的。所以说明这是一个特定条件下触发的失效。我考虑可能的原因,这个环境...

2020-01-04 13:01:21 215 1

原创 状态机法测试设计举例

基本方法:根据需求画出状态转换图。然后覆盖每一种状态下触发动作和状态变化的事件和不会触发动作和状态变化的事件。实际中的思路是:首先通过常见的场景来覆盖一些状态转换的路径。检查是否覆盖了所有的状态转换。如果没有则补充场景来进行覆盖。例如VRRP状态机测试、ATM机状态机测试。举例:在网络中,由于种种原因会导致路由的震荡和网络的震荡,这种震荡会引起路由计算不断进行,也会导致路由更新反复发送...

2020-01-03 18:05:06 1062

原创 服务器缓存系统

WEB系统中各参与者都可以进行缓存。数据库缓存,应用服务器缓存,Web服务器缓存,客户端浏览器缓存。java缓存级别:堆缓存堆外缓存磁盘缓存分布式缓存典型java服务器端缓存系统:1、接入nginx负载均衡到应用nginx。2、应用nginx读取本地缓存(Nginx Proxy Cache或者Local Redis缓存)。如果命中,则直接返回。后续步骤中...

2019-11-21 14:39:36 377

原创 CoAP和MQTT介绍和对比

CoAPCoAP(受限应用协议 2018年5月24日,51job上有167条职位)RFC 7252 - The Constrained Application Protocol (CoAP)。CoAP支持内在的服务和资源发现,有URI和媒体类型的概念,为机器到机器的应用(M2M)而设计,应用端点之间使用查询/响应模型进行交互。是一个简化的Web传输协议,开销极低。可以很容易和HTTP互联,和W...

2019-11-13 09:55:26 1295

原创 面向对象编程原则

单一职责原则 开闭原则OCP:模块应该对扩展开放,但是对修改关闭。例如需要调用各种类型的传感器进行状态检查。面向对象方法可以设计为父类Sensor作为对外的接口:read();enable();disable(),然后子类是各种具体的传感器,子类中重写这些方法。当需要添加新的传感器时,只需要增加新的子类,父类不用修改,对外的接口不变。不会影响其它传感器的功能。如果是面向过程方法,比较好的的方法...

2019-11-13 09:37:50 568

原创 为什么无法发现所有Bug

可以从很多角度来回答这个问题。1、程序执行路径数目无限多。考虑有2个if语句,则可能的路径是4个。如果这2个if语句包含在一个循环中,这个循环最多可以执行100次,那么可能的执行路径为4的100次方。实际程序可能有数百万行代码,其中包含着数十万个if语句,几万个循环。执行路径的数目远超上面的数值。而且,很多进程的主函数就是一个无限循环,一直在响应输入。2、多线程每个线程都有...

2019-10-17 17:54:45 614

使用Python Django开发web应用 示例代码 python3.6 django2.0.zip

使用Python Django开发web应用配套的示例代码 python3.6 django2.0。讲义第三页链接https://blog.csdn.net/jxzdsw/article/details/99312523。只是一个简单的blog系统的例子。我是想找到一个分享平台,并不想收取C币。但是CSDN自动设置了C币价格。我修改不了。

2019-08-12

Python3程序开发指南 第二版 高清 扫描版

Python3程序开发指南 第二版 高清 扫描版

2017-08-24

思科RIP命令手册v12.4 Cisco RIP Command Reference.pdf

思科RIP命令手册v12.4 Cisco RIP Command Reference.pdf

2011-12-03

Python基础教程(第2版)P2008 Python2.5.pdf 高清 扫描版

Python基础教程(第2版)P2008 Python2.5.pdf 高清 扫描版 。作者:Magnus Lie Hetland

2017-08-24

Tensorflow+实战Google深度学习框架 加 google的python编码规范.pdf 郑泽宇 著 有书签 高清扫描版

Tensorflow+实战Google深度学习框架 加 google的python编码规范.pdf 郑泽宇 著 有书签 高清扫描版

2017-11-24

空空如也

空空如也

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

TA关注的人 TA的粉丝

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