人邮异步社区

人民邮电出版社异步社区官方博客

  • 博客(31)
  • 资源 (6)
  • 收藏
  • 关注

原创 机器学习需要哪些数学基础?

机器学习是近几年炙手可热的话题。每天都有新的应用和模型进入人们的视野。世界各地的研究人员每天所公布的实验结果都显示了机器学习领域所取得的巨大进步。技术工作者参加各类课程、搜集各种资料,希望使用这些新技术改进他们的应用。但在很多情形下,要理解机器学习需要深厚的数学功底。这就为那些虽然具有良好的算法技能,但数学概念欠佳的程序员们设置了较高的门槛。为了掌握它们背后的动机和理论,有必要回顾并建立所有基本推理知识体系,包括统计、概率和微积分。下面先从一些基本的统计概念开始。1.3.1 统计学——不确定

2020-06-28 14:45:27 1287

原创 Python必学基础知识之函数

本章主要内容定义函数 使用函数参数 用可变对象作为参数 理解局部变量和全局变量 创建和使用生成器函数 创建和使用lambda表达式 使用装饰器本章假定读者至少熟悉另一种计算机语言的函数定义方法,包括函数定义、实参(argument)和形参(parameter)等概念。9.1 基本的函数定义Python函数定义的基本语法如下:def name(parameter1, parameter2, . . .): body与代码流程控制结构一样,Python用缩进来界定函数

2020-06-23 17:54:16 509

原创 基于锁的并发数据结构:如何给数据结构加锁?

在结束锁的讨论之前,我们先讨论如何在常见数据结构中使用锁。通过锁可以使数据结构线程安全(thread safe)。当然,具体如何加锁决定了该数据结构的正确性和效率?因此,我们的挑战是:关键问题:如何给数据结构加锁? 对于特定数据结构,如何加锁才能让该结构功能正确?进一步,如何对该数据结构加锁,能够保证高性能,让许多线程同时访问该结构,即并发访问(concurrently)?当然,我们很难介绍所有的数据结构,或实现并发的所有方法,因为这是一个研究多年的议题,已经发表了数以千计的相关论文。因此,

2020-06-22 07:19:16 1017

原创 Git 的常用命令及一些基本操作

本节将详细介绍Git 的常用命令及一些基本操作。使用以下命令可以显示相关命令的帮助文档。git help <command>24.4.1 仓库管理命令1.git init功能:初始化 Git仓库。执行完 git init命令后,会在本地目录生成一个.git的目录,此目录包括了资源的所有元数据。2.git clone功能:复制仓库,默认只会建立 master分支。常用的基本用法如下。git clone remotes/origin/dev #复制远程dev分支

2020-06-19 15:30:20 290

原创 命令式编程:可变数据+迭代

我们已经介绍了命令式编程的两个基本概念,接下来将回到推荐程序的例子,以便说明数据可变性和迭代共同作用的强大功能。我们使用的例子是对元素列表进行排序。5.5.1 为什么要排序?因为运行时间很重要在深入研究排序细节之前,我们先确定为什么对数据进行排序很有用。原因之一是排序后的数据让数据处理快得多。但是,如何衡量快与慢?分析程序运行多长时间的关键,是计算在给定大小的输入下它要执行的操作数。计算机科学家很少关心很小的输入的程序速度有多快,如果输入很小,它们几乎总是很快。但是,在处理大量输入时(例如,数百

2020-06-18 07:21:52 329

原创 在亚马逊的新员工(程序员)都被推荐要读一读这本书

如果您想真正学习,最好的方法是阅读Robert C Martin的Clean Code。基本上,它普遍推荐给亚马逊的新员工。中文版由人民邮电出版社异步社区出版,中文名:《代码整洁之道》,作者:Robert,C,Martin。学写整洁代码很难。它可不止于要求你掌握原则和模式。你得在这上面花工夫。你须自行实践,且体验自己的失败。你须观察他人的实践与失败。你须看看别人是怎样蹒跚学步,再转头研究他们的路数。你须看看别人是如何绞尽脑汁做出决策,又是如何为错误决策付出代价。阅读本书要多用心...

2020-06-17 21:56:40 653 1

原创 堆数据结构:Dijkstra算法的提速

堆的最后一个也是最高级的应用是单源最短路径问题的Dijkstra算法(第3章)的近似线性时间的实现。这个应用非常生动地体现了算法设计与数据结构设计之间的互动。4.4.1 为什么要使用堆我们在命题3.1中看到了Dijkstra算法的简单实现需要O(mn)的运行时间,其中m表示边的数量,n表示顶点的数量。如果只是处理中等规模的图(有数以千计的顶点和边),那么这个速度已经足够,但对于巨型的图,还是有点力不从心。我们能不能做得更好?堆能够实现具有令人惊讶的高速度,也就是近似线性时间的Dijkstra算法。

2020-06-17 21:45:59 1076

原创 程序员如何拓展技术技能?

截至目前,我已经罗列了一长串的待拓展的技术技能,你现在可能急于想知道,你将如何拓展所有这些技能,以及这个过程需要耗费多长时间。好吧,先不用担心时间的长短,只要你是一名软件开发者,你就一直都在拓展自己的技术技能。因此,就把拓展技能这件事看作是一次旅行吧,别当作是目的地。你会一直优秀下去,只要你愿意。在很长一段时间里,我都在错误地拓展自己的技术技能。后来,在三年的时间里,我在Pluralsight创建了超过50门高级技术培训课程,我自己也学会了如何以飞快的速度自学技术技能并且教会别人。回首往昔,我曾

2020-06-17 13:17:33 1178

原创 CSS选择器世界:精通CSS选择符

CSS选择符目前有下面这几个:后代选择符空格( )、子选择符箭头(>)、相邻兄弟选择符加号(+)、随后兄弟选择符弯弯(~)和列选择符双管道(||)。其中对于前4个选择符,浏览器支持的时间较早,非常实用,是本章的重点。最后的列选择符算是“新贵”,与Table等布局密切相关,但目前浏览器的兼容性还不足以使它被实际应用,因此就简单介绍下。4.1 后代选择符空格( )后代选择符是非常常用的选择符,随手抓一个线上的CSS文件就可以看到这个选择符,它从IE6时代就开始被支持了。但即使天天见,也不见得真的很

2020-06-14 18:24:33 1015

原创 《Java编程十五讲》第十四讲:Java里提供的常用数据容器框架三

#第十五讲 容器框架三我们到此已经把ArrayList、HashSet和HashMap讲过了。JDK里面还有一些实现,如Queue、Deque、TreeSet、TreeMap等,我就不一一讲了。现在回顾一下。Collection保存单一的元素,而Map把保存键值对。用泛型技术,就可以将制订类型的对象放到容器中,不会出现类型错误的元素,取出来的时候也不需要再进行类型转换。Collection和Map都不定长,向里面添加更多元素的时候,会自动调整容量。跟数组一样,List维持位置索引和对象的关联,因此是

2020-06-13 10:22:16 358

原创 《Java编程十五讲》第十四讲:Java里提供的常用数据容器框架LinkedList

第十四讲 容器框架二LinkedList,它实现的基础是双向链表,因此在插入和删除方面具有性能优势。它也可以用来实现stack和queue。顺便说一句,Java容器框架中有一个遗留的类Stack,它是基于Vector实现的,不建议使用。LinkedList主要有3个属性:int sizeNode<E> firstNode<E> last也就是通过一个链表把size个Node从头串到尾。而Node就是一个类的节点包装类,有item,有prev和next。图示如下:L

2020-06-13 10:20:47 314

原创 《Java编程十五讲》第十三讲:Java里提供的常用数据容器框架

第十三讲 容器框架一计算机程序的主要用途是处理各类数据,而这些数据是有结构的,不是散乱的。几十年以前软件大师N. Wirth写道:程序=算法+数据结构。我们在数据结构里面学到过,数据的组织方式,有数组、链表、树、图、字典等。我们现在着手探究一下Java里面提供的数据容器框架。Java里面从JDK 1.2起引入容器框架,主要分成List、Set、Queue和Map这4类。List是有序、可重复的;Set是无序的、不可重复的;Queue代表一种队列;Map是具有映射关系的集合。这些也叫集合类,但是可能引起

2020-06-13 10:18:01 308

原创 《Java编程十五讲》第十二讲:多线程

第十二讲 多线程现代计算机一般是多CPU和多核的,而传统的程序是单线程的,只在一个核上运行,就会浪费掉这些计算资源,于是就发明多线程来充分利用它们。甚至在单CPU单核上也还是能有效果,因为许多时候计算在等IO,空隙时间就可以再运行别的线程。现代操作系统的主要任务就是进行进程和线程的调度。我们深入到操作系统内部,一定会发现一片繁忙的景象。我们先看基本型,实现Runnable接口,写执行代码在run()中,代码如下(NewThread.java):public class NewThread implem

2020-06-13 10:16:09 359

原创 《Java编程十五讲》第十一讲:脚本

第十一讲 脚本大家好。我前两年意识到一件事情,就是Java里面有一个很好的功能许多人没有注意到,而要做大型一点的系统或者是做扩展性好一点的系统却都会用到,那就是脚本(script)技术。学技术之前,还是先看场景。我们做的应用系统里面,经常需要设置一些业务规则。比如权限控制,不管是网络层的防火墙还是应用层的数据权限,一般用户是希望设置一个规则,网络权限像IP between 192.168.2.101 and 192.168.2.149,像port=80 or port=8080 or port=21等

2020-06-13 10:15:09 383

原创 《Java编程十五讲》第十讲:Lambda 表达式

第十讲 Lambda 表达式我们要从匿名类开始讲起,一点点引出Lambda表达式。我比较喜欢Lambda这个词,显得比较有学问似的。我讲过,技术点不是孤立的,它们之间是有关联的,按照某种层次结构关联在一起就构成一个体系。我们在学习某个技术的时候,要了解它的来龙去脉,把某个技术点放在整体中学习会更有收获。事实上,学术论文一般都要求开头一段讲学术史,这是有道理的。当然,有个别天才能在不引用任何参考文献的情况下提出划时代的理论,横空出世。最著名的就是爱因斯坦在1905年写的《论动体的电动力学》。以前提到过内

2020-06-13 10:13:49 340

原创 《Java编程十五讲》第九讲:IO和NIO

第九讲 IO和NIO一个完备的语言可以自成体系,并不需要与外部文件打交道,不过这种说法只是理论上的,实际上任何一个语言都需要与外部文件进行数据交换。一个不能与外部进行任何交换的系统似乎用处不大,一个封闭的单细胞怕是生存不下来,广而言之,“闭关锁国”真是要不得啊。Java一生下来就有了对I/O的支持,后来在Java 1.4版本中增加了一套平行的API,即NIO,这些新的API都是为了提高性能而设计的。在Java 7之后又有了NIO2,改进了File操作,对所有文件系统提供了统一的支持。在具体看程序之前,

2020-06-13 10:12:49 403

原创 《Java编程十五讲》第八讲:正则表达式

第八讲 正则表达式正则表达式(regular expression)定义了一种文本搜索模式。正则表达式在文本的搜索编辑的场景中很有用处。正则表达式并不是在Java中首次出现的,可以说很久以前就出现了。19世纪50年代,由美国数学家Stephen Cole Kleene提出,后来随着UNIX的普及,它从左往右逐个字符扫描文本,找到匹配的模式,继续往下扫描,模式可以使用一次或者多次。JDK 1.4版本开始支持了。实际上,我们不用编写程序就在使用正则表达式了。一个例子就是在命令窗口执行命令“dir *.tx

2020-06-13 10:10:15 373

原创 《Java编程十五讲》第七讲:内步类

第七讲 内部类大家好,这一次讲座,我们讲一下内部类(Inner Class)。我们平时写的程序是由一个个类构成的,这些类之间是相互独立的关系。我说过,这种思路源自对现实世界的模拟,拉近了“问题空间”和“解决空间”。因此,简化了系统的设计。而内部类是指一个类是另一个类的内部成员,定义在某个类的内部的,对外可能可见,也可能不可见。基本形式还是很简单的,我们看一个例子:public class OuterClass {private String outerName;public void disp

2020-06-13 10:08:57 330

原创 《Java编程十五讲》第六讲:代理

第六讲 代理代理是Proxy的翻译。在系统搭建的时候,经常会有用到代理的地方,如一个公司访问外网的代理,比如服务器端的反向代理、远程调用代理,还有为了安全或者灵活采取的访问代理,这些都是代理。日常生活中,我们会经常遇到代理的场景。比如说旅行社,我们一般人没有那么多时间和专业能力安排好自己的行程,就只要告诉代理就可以了,它会把最终的服务提供者如航空公司,铁路,酒店什么的都屏蔽掉,我们只跟代理打交道就行。计算机系统借鉴了现实世界的这个场景。从程序上来讲,目的是为了访问A对象的方法,但有的时候,我们又不想

2020-06-13 10:07:31 344

原创 《Java编程十五讲》第五讲:什么是泛型?作用是什么?一个案例串讲

第五讲 泛型前几次讲座,我们在程序里面看到了泛型(Generics),今天我们就来专门谈一谈。下面先看泛型的作用:它们被设计出来用于扩展Java的类型系统,允许一个类型或者方法操纵不同类型的对象并同时提供编译时类型安全。这里明白地指明了泛型的两个用处,一是允许一个类或者方法操纵不同类型的对象,二是提供编译时类型安全。这是在Java 5里面引进来的。这是Java设计团队与时俱进的结果,又是跟历史妥协的结果,基本达到目的,但是远不完美,业界毁誉参半。为了了解这个概念,我们从头来,先看没有泛型的时候我们怎么

2020-06-13 10:05:36 479

原创 《Java编程十五讲》第四讲:今天我们来谈一谈Java里面的事件机制

第四讲 事件今天我们来谈一谈Java里面的事件机制。程序的结构在不同的时代是在变化的。刚学编程序的时候,老师总会讲,程序是一个流程,线性执行,分支跳转,循环,有时候加上递归。我们总是能一步步跟踪下来,知道程序确切的运行次序。后来就会碰到事件的概念,程序先是准备好了,然后等待你做出某种反应,键输入,网络数据流,鼠标移动,程序获取事件的消息,执行相关的动作。这种程序结构之下,不再有事先确定的运行次序了。刚开头遇到这种程序的时候,还真有点不习惯。印象最深刻的就是将近三十年前刚学到Windows编程的时候,看的

2020-06-13 10:03:58 447

原创 敏捷开发被误读、被腐化了吗?看看他能不能颠覆你对敏捷的认识

敏捷开发到底是什么?它从何而来?又如何演进至今?自“敏捷开发”这个词诞生之日起,已近 20 年历史,它从被人质疑,已发展到行业内几乎人人言必称“敏捷”。然而,“此敏捷”已非“彼敏捷”。2010 年之后,我的口头语变为“别提敏捷,只解决问题”。因为,从那时起,敏捷就已经开始出现似是而非的倾向了。很多人出于不同的目的,将无限多的内容加入到“敏捷”之中,使它变得模糊不清。鲍勃大叔对这些问题给出了深思熟虑的答案,同时也指出了敏捷开发被误读、被腐化的各种形式。作为敏捷开发最初的奠基人之一,他在这个话题上有着举足轻重的

2020-06-12 17:56:55 715

原创 函数式编程:密码学和素数

3.1 密码学和素数外星人坐在咖啡馆里,享受着他们精心制作的含咖啡因的饮料。他们要购买全套的《星球大战》传奇,但无法通过流传输到自己的星球!他们准备输入信用卡号,从Nile网站完成购买,但他们停下来想了一下:当他们的财务信息通过Wi-Fi和许多互联网节点到达Nile网站,再到他们的银行授权这次购买时,如何保护信息的安全。这种担心很合理。好消息是,即使通信链路是开放的和公开的,加密技术仍可确保此类交易的安全。很快就要回家了,但先要再买一些东西!RSA是最广泛使用的加密策略之一,它是3位设计者Ron

2020-06-12 09:06:58 759

原创 无论计算机有多强大、攻击者多么聪明都无法破解的密码:一次一密

在本章中读者将要学习的密码,不论计算机有多么强大、花费了多少时间或者攻击者是多么聪明,都无法破解。它被称为一次一密(One-time pad)。好消息是不必编写新的程序来使用它!读者在第18章中编写的维吉尼亚密码程序可以在不做任何修改的情况下实现此密码。但由于一次一密非常不便于使用,因此它常常只用于最机密的消息。本章要点不可破解的一次一密。 两次一密即为维吉尼亚密码。21.1 不可破解的一次一密一次一密是维吉尼亚密码的一种,当密钥满足以下标准时,密码将变得不可破解。它和加密的消息一样长。

2020-06-10 09:57:29 4569

原创 Python金融大数据分析:用pandas处理金融时间序列数据的基础知识

时间是阻止所有事情同时发生的力量。——雷•卡明斯本节使用的是以CSV文件形式在本地存储的金融数据集形式为本地存储的CSV文件。从技术上讲,CSV文件是包含数据行结构的文本文件,其特征是以逗号分隔单个值。在导入数据之前,导入一些软件包并进行定制:In [1]: import numpy as np import pandas as pd from pylab import mpl, plt plt.style.use('seaborn') .

2020-06-09 07:32:50 2932 3

原创 正则表达式与vim 编辑器的使用

6.1 什么是正则表达式对于什么是正则表达式,网络上有很多解释。作者的理解是:正则表达式是一种文本模式,或者说是一种特殊的字符串模式,它的作用是处理字符串。6.2 字符学习正则表达式的前提是了解正则表达式中需要用到的一些字符及其含义。正则表达式中的字符及其含义见表 6-1。6.3 文本处理命令为什么要介绍这些文本处理命令呢?因为正则表达式经常会与这些命令配合一起使用。6.3.1 grep 命令grep 命令是一个强大的文本搜索工具,它与正则表达式配合,将匹配到的行输出到.

2020-06-06 14:46:04 564

原创 深度强化学习方法——策略梯度法

现在我们来看Open AI Gym中无法用标准列表法解决的车杆问题(cart pole)和新的深度强化学习方法——策略梯度(policy gradients)。“车杆”游戏如图6.8所示,在一维轨道上有一辆推车,一根杆子通过一个粘着的接头连接在推车上,当车被推向某个方向时,杆子的顶部会根据牛顿定律向左或向右移动。一个状态由四个值组成——前一次移动后的推车位置、当前移动后的推车位置、前一次移动后的车杆角度和当前移动后车杆角度。我们给出连续时间上的数值,使程序能够计算出运动的方向。玩家可以采取两种行动:向右或向

2020-06-06 14:07:12 660

原创 Python自动化运维实战:从Linux系统中收集数据

使用Linux命令可以查看当前系统状态和运行状况的相关数据。然而,单个Linux命令和应用程序只能获取某一方面的系统数据。我们需要利用Python模块将这些详细信息反馈给管理员,同时生成一份有用的系统报告。我们将报告分为两部分。第一部分是使用platform模块获取的一般系统信息,第二部分是硬件资源,如CPU和内存等。首先从导入platform模块开始,它是一个内置的Python库。platform模块中有很多方法,它们可用来获取当前运行Python命令的操作系统的详细信息。import pl

2020-06-05 11:50:01 743

原创 6月即将出版新书10本:算法书、Python书成为焦点

6月刚刚开始,这个月新书很多,也很值得大家期待。小编先带大家来盘点一下即将在6月出版的新书。1、算法精粹:经典计算机科学问题的Python实现(6月10日左右上架)用Python语言求解经典的计算机科学问题 阅读本书既可掌握算法的精髓 也可提升Python求解问题的代码实现能力“无论是新手还是经验丰富的专业人士,本书能让每个人都有顿悟之感。”——James Watson,Adaptive公司“本书用现代Python动手求解经典计算机科学问题,这种体验非常有趣。”——Je...

2020-06-05 11:48:09 918

原创 “让代码能工作”才是专业开发者的头等大事?看看Bob大叔怎么说

当有人查看底层代码实现时,我们希望他们为其整洁、一致及所感知到的对细节的关注而震惊。我们希望他们高高扬起眉毛,一路看下去。我们希望他们感受到那些为之劳作的专业人士们。但若他们看到的只是一堆像是由酒醉的水手写出的鬼画符,那他们多半会得出结论,认为项目其他任何部分也同样对细节漠不关心。你应该保持良好的代码格式。你应该选用一套管理代码格式的简单规则,然后贯彻这些规则。如果你在团队中工作,则团队应该一致同意采用一套简单的格式规则,所有成员都要遵从。使用能帮你应用这些格式规则的自动化工具会很有帮助。...

2020-06-02 19:08:51 629

原创 程序员学习算法,有这样几本基础书

什么是算法呢?它是一组具有良好定义的规则(或者说是一种配方),可以有效地解决一些计算方面的问题。我们可能要处理一大串数字,需要对它们进行重新整理,使它们按顺序排列;我们可能需要在地图上计算从某个起点到某个目标地点的最短路径;我们可能需要在某个最后期限之前完成一些任务,并且需要知道应该按照什么样的顺序完成这些任务,使它们都能在各自的最后期限之前完成。我们为什么要学习算法呢?算法对计算机科学的所有分支都非常重要。在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密

2020-06-01 15:08:04 830

Python物理建模初学者指南下载

# 用Python解决科学问题的实践指南,众多世界知名大学教授推荐阅读 # 本书旨在帮助Python 学习者掌握足够的Python编程技能以进行物理建模。全书分为8 章和5 个附录,包括Python 基础知识、数据结构与程序控制、 数据输入和输出、Python 高级知识和高级技术等,其中贯穿了三次不同方向和难度的物理建模上机实验。附录部分介绍了Python 的安装、错误消息、版本差异以及可供深入学习的话题。 本书适合Python 初学者阅读,尤其适合想要用Python 进行科学计算和物理建模的读者学习参考。

2017-10-26

奔跑吧Linux内核

本书内容基于Linux 4.0内核,主要选取了Linux内核中最基本最常用的内存管理、进程管理、并发与同步以及中断管理这4个内核模块进行讲述。全书共分为6章,依次介绍了ARM体系结构、Linux内存管理、进程调度管理、并发与同步、中断管理、内核调试技巧等内容。本书的每节内容都是一个Linux内核的话题或者技术点,读者可以根据每小节前的问题进行思考,进而围绕问题进行内核源代码的分析。 本书内容丰富,讲解清晰透彻,不仅适合有一定Linux相关基础的人员学习和使用,包括从事与Linux相关的开发人员、操作系统的研究人员、嵌入式开发人员及Android底层开发人员等,而且适合作为对Linux感兴趣的程序员学习用书。

2017-08-15

爱上Android-试读

本书深入浅出,详细讲解了Android开发的知识,主要内容包括:Android的体系架构、Android Studio、项目的创建、Android工程目录、调试程序、界面的搭建;常用的控件和属性、提示信息Toast和Snackbar、点击事件3种写法等;Activity之间的跳转、Activity生命周期、Activity启动模式等;数据存储、网络编程;图片的处理;复杂控件的使用;Fragment、广播接收者、Service、动画等;以及Android新特性、Kotlin语言、性能优化、屏幕适配、自定义控件、JNI/NDK开发等高级知识。并通过开发一个真实的项目让读者学以致用。 本书内容通俗易懂,比较适合初学者阅读,也可以作为专业人员的工具书,以及大专院校相关专业师生的学习用书和培训学校的教材。

2017-08-04

深入理解Android内核设计思想(第2版)(上下册)

 全书从操作系统的基础知识入手,全面剖析进程/线程、内存管理、Binder机制、GUI显示系统、多媒体管理、输入系统、虚拟机等核心技术在Android中的实现原理。书中讲述的知识点大部分来源于工程项目研发,因而具有较强的实用性,希望可以让读者“知其然,更知其所以然”。本书分为编译篇、系统原理篇、应用原理篇、系统工具篇,共4篇25章,基本涵盖了参与Android开发所需具备的知识,并通过大量图片与实例来引导读者学习,以求尽量在源码分析外为读者提供更易于理解的思维方式。   本书既适合Android系统工程师,也适合于应用开发工程师来阅读,从而提升Android开发能力。读者可以在本书潜移默化的学习过程中更深刻地理解Android系统,并将所学知识自然地应用到实际开发难题的解决中。

2017-06-28

空空如也

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

TA关注的人

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