决策树的可视化呈现 (www.biaodianfu.com)
上一篇决策树学习的文章中讲到决策树其中的一个优点是决策树模型可以可视化,非常直观。今天就一起来学习下如何使用决策树将模型可视化出来。

决策树的可视化一般使用的工具是Graphviz。在使用Graphviz之间还是有些门道。具体流程为:

安装Graphviz的可执行包,并在环境变量的PATH添加安装路径 安装需要的Python库: pip install graphviz ,并在代码中使用graphviz
by @技术头条 2019-03-29 23:14 查看详情
利用资源约束委派进行的提权攻击分析 (blog.nsfocus.net)
国外安全研究员elad_shamir在2019年一月底发表了一篇名为”Wagging the Dog: Abusing Resource-Based Constrained Delegation to Attack Active Directory”的文章,不同于以往利用无约束委派以及传统约束委派攻击,首次提出并详细介绍利用基于资源的约束委派进行活动目录攻击的方式。文中详细解释了该攻击发现过程,对协议的分析以及攻击原理,并给出不同场景下基于此攻击进行的远程代码执行,本地权限提升等操作。

绿盟科技M01N Red Team​对基于该攻击的本地权限提升进行了研究和复现,并在此基础上结合PowerShell Remoting对进一步获得域管理员权限进行了分析探讨。
by @技术头条 2019-03-29 23:00 查看详情
饿了么MySQL多IDC架构设计 (wubx.net)
关于饿了么MySQL多IDC架构外面材料比较多,而且目前属于上线运行,运行比较好的业务,这里做一个记录。

分区依据: 把数据库首先分Zone,然后依赖于地区ID分布到不同Zone中,同一个Zone依赖于商户ID分布到不同分版中(shard)。每个Zone在不同IDC中进行互备。
by @技术头条 2019-03-29 13:46 查看详情
MySQL每秒57万的写入,带你飞 (wubx.net)
XeLabs TokuDB是针对官方TokuDB做一些性能及易性的优化,在写入速度上更稳定,对CPU销耗更低。
by @技术头条 2019-03-28 22:21 查看详情
一种轻量级 C++ Lua 传参方法 - Protobuf 反射 (yangwenbo.com)
虽然很多动态语言(例如 PHP)的性能在近些年有了大幅度的提升,也得到了更广泛的应用,但是在一些对性能要求比较严苛的场合,C/C++ 还是有着难以替代的优势。可 C/C++ 最大的缺点就是它的不够灵活,很小一点修改都必须得重新编译,部署,重启上线。为了增强 C/C++ 的灵活性,很多项目都选择嵌入 Lua 解析器来处理程序逻辑中的动态部分,我们也不例外。

目前我们对 Lua 的使用还是比较保守,主要是封装了一些基于特定条件的排序或者过滤规则。它的特点就是传入参数较多,但返回值特别少,基本上就是一个数字或者布尔值。最开始是使用的原始方法,手工去拼 Lua Table 作为传入参数,每加一个参数,就要手写几行添加元素的代码。最近我看到 brpc 里的 pb2json ,忽然想到完全可以用 Protobuf 的反射机制,自动拼 Lua Table。下面是基本类型的转换方法,当然,也可以用类似的方法对 Protobuf 的 map, message 等高级数据结构进行进一步封装。

by @技术头条 2019-03-27 21:15 查看详情
如何实现高效的 URL 过滤算法 (yangwenbo.com)
通过某些字面特征,筛选出符合条件的 URL,对其执行特定的操作。虽然看起来像是很遥远专业的技术,但其实早就根植在你手机里的各类浏览器相关 app,以及你使用的各类互联网服务中了。举一个最简单的例子:你在微信里打开淘宝链接,背后就是一个 URL 过滤算法的实现。

还有,很多浏览器 APP 设置项里有一个开关,叫做“广告过滤”,其中很大一部分也是通过 URL 过滤实现的。那如何做到高效的 URL 过滤呢?

如果拿这个问题来面试,大概率候选人会回答用正则表达式实现。其实这一点不令人惊讶,因为我曾经亲眼见过一个日活惊人的 APP 也是用正则表达式做的(真不敢相信自己的眼睛)。用正则表达式本身来实现 URL 匹配不是很大的问题,但在“广告过滤”这样的场合,意味着有成千上万的 URL 规则,很难有人能用这些规则写出来高效的正则表达式。
by @技术头条 2019-03-27 21:14 查看详情
机器学习算法之逻辑回归 (www.biaodianfu.com)
逻辑回归算法的名字里虽然带有“回归”二字,但实际上逻辑回归算法是用来解决分类问题的。简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。 注意,这里用的是“可能性”,而非数学上的“概率”,logisitc回归的结果并非数学定义中的概率值,不可以直接当做概率值来用(逻辑回归是基于分布假设建立的,假设在现实案例中并不是那么容易满足,所以,很多情况下,我们得出的逻辑回归输出值,无法当作真实的概率,只能作为置信度来使用)。该结果往往用于和其他特征值加权求和,而非直接相乘。

逻辑回归(Logistic Regression)与线性回归(Linear Regression)都是一种广义线性模型(generalized linear model)。逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布。 因此与线性回归有很多相同之处,去除Sigmoid映射函数的话,逻辑回归算法就是一个线性回归。可以说,逻辑回归是以线性回归为理论支持的,但是逻辑回归通过Sigmoid函数引入了非线性因素,因此可以轻松处理0/1分类问题。
by @技术头条 2019-03-27 21:13 查看详情
机器学习算法之岭回归、Lasso回归和ElasticNet回归 (www.biaodianfu.com)
在处理较为复杂的数据的回归问题时,普通的线性回归算法通常会出现预测精度不够,如果模型中的特征之间有相关关系,就会增加模型的复杂程度。当数据集中的特征之间有较强的线性相关性时,即特征之间出现严重的多重共线性时,用普通最小二乘法估计模型参数,往往参数估计的方差太大,此时,求解出来的模型就很不稳定。在具体取值上与真值有较大的偏差,有时会出现与实际意义不符的正负号。
by @技术头条 2019-03-27 21:13 查看详情
深入Node.compareDocumentPosition API (www.zhangxinxu.com)
Node.compareDocumentPosition()方法可以用来对比两个HTML节点在文档中的位置关系,包括前后,父子,自身以及跨文档。不仅是DOM节点,文本节点,注释节点甚至属性节点的位置关系都可以判定,很强。
by @技术头条 2019-03-27 21:12 查看详情
在Linux中查询CPU的核数 (colobu.com)
以一台Linux服务器为例。这台Linux包括两颗Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz CPU, 单颗CPU包括 10 个 cpu core, 使用超线程包含20个逻辑cpu core, 具体的官方介绍: E5-2630 V4。

下面让我们通过Linux的命令来查找对应的参数,看看是否符合官方的介绍, 主要是查看/proc/cpuinfo的信息获得。
by @技术头条 2019-03-27 21:11 查看详情
从 io.Reader 中读数据 (colobu.com)
Go 的标准库提供了多个从 io.Reader 中读取数据的方法 (io、ioutil),本文通过从 net.Conn中读取数据为例,演示各种方法已经应用场景。
by @技术头条 2019-03-27 21:09 查看详情
Go Reflect 性能 (colobu.com)
Go reflect包提供了运行时获取对象的类型和值的能力,它可以帮助我们实现代码的抽象和简化,实现动态的数据获取和方法调用, 提高开发效率和可读性, 也弥补Go在缺乏泛型的情况下对数据的统一处理能力。

通过reflect,我们可以实现获取对象类型、对象字段、对象方法的能力,获取struct的tag信息,动态创建对象,对象是否实现特定的接口,对象的转换、对象值的获取和设置、Select分支动态调用等功能, 看起来功能不错,但是大家也都知道一点: 使用reflect是有性能代价的!
by @技术头条 2019-03-27 21:09 查看详情
[译]Go开发中一些有用的模式 (colobu.com)
从 VB.net、Java、C# 和 Python 开始转到 Go开发的时候,我对Go语言层级的模式的缺乏有点懊恼,这促使我花了一点时间找出容易表达的那些模式。

这里是一些通用的模式的集合,以及我发现的最容易表示它们的方式。
by @技术头条 2019-03-27 21:08 查看详情
如何查看 Linux 下 CPU、内存和交换分区的占用率? (linux.cn)
在 Linux 下有很多可以用来查看内存占用情况的命令和选项,但是我并没有看见关于内存占用率的更多的信息。

在大多数情况下我们只想查看内存使用情况,并没有考虑占用的百分比究竟是多少。如果你想要了解这些信息,那你看这篇文章就对了。我们将会详细地在这里帮助你解决这个问题。

这篇教程将会帮助你在面对 Linux 服务器下频繁的内存高占用情况时,确定内存使用情况。
by @技术头条 2019-03-27 21:07 查看详情
正则表达式的分组和数字 (linux.cn)
大约一周前,我在编辑一个程序时想要更改一些变量名。我之前认为这将是一个简单的正则表达式查找/替换。只是这没有我想象的那么简单。
by @技术头条 2019-03-27 21:06 查看详情
Go 生态圈的 K/V 数据库 benchmark (colobu.com)
Go生态圈有好几个K/V数据库,我们经常用它来做我们的存储引擎,但是这些数据库引擎的性能如何呢?本文试图用性能而不是功能的数据考察这些数据库,我测试了几种场景: 并发写、并发读、单一写并发读、并发删除,得出了一些有趣的数据。
by @技术头条 2019-03-27 21:06 查看详情
如何在 Linux 中查看可用的网络接口 (linux.cn)
在我们安装完一个 Linux 系统后最为常见的任务便是网络配置了。当然,你可以在安装系统时进行网络接口的配置。但是,对于某些人来说,他们更偏爱在安装完系统后再进行网络的配置或者更改现存的设置。众所周知,为了在命令行中进行网络设定的配置,我们首先必须知道系统中有多少个可用的网络接口。本次这个简单的指南将列出所有可能的方式来在 Linux 和 Unix 操作系统中找到可用的网络接口。
by @技术头条 2019-03-27 21:05 查看详情
在 Linux 中如何删除文件中的空行 (linux.cn)
有时你可能需要在 Linux 中删除某个文件中的空行。如果是的,你可以使用下面方法中的其中一个。有很多方法可以做到,但我在这里只是列举一些简单的方法。

你可能已经知道 grep、awk 和 sed 命令是专门用来处理文本数据的工具。

如果你想了解更多关于这些命令的文章,请访问这几个 URL:在 Linux 中创建指定大小的文件的几种方法,在 Linux 中创建一个文件的几种方法 以及 在 Linux 中删除一个文件中的匹配的字符串。

这些属于高级命令,它们可用在大多数 shell 脚本中执行所需的操作。
下列 5 种方法可以做到。

sed:过滤和替换文本的流编辑器。
grep:输出匹配到的行。
cat:合并文件并打印内容到标准输出。
tr:替换或删除字符。
awk:awk 工具用于执行 awk 语言编写的程序,专门用于文本处理。
perl:Perl 是一种用于处理文本的编程语言。
by @技术头条 2019-03-27 21:04 查看详情
浅析 Bash 中的 {花括号} (linux.cn)
让我们继续我们的 Bash 基础之旅,来近距离观察一下花括号,了解一下如何和何时使用它们。

在前面的 Bash 基础系列文章中,我们或多或少地使用了一些还没有讲到的符号。在之前文章的很多例子中,我们都使用到了括号,但并没有重点讲解关于括号的内容。

这个系列接下来的文章中,我们会研究括号们的用法:如何使用这些括号?将它们放在不同的位置会有什么不同的效果?除了圆括号、方括号、花括号以外,我们还会接触另外的将一些内容“包裹”起来的符号,例如单引号、双引号和反引号。
by @技术头条 2019-03-27 21:04 查看详情
降低 Emacs 启动时间的高级技术 (linux.cn)
简而言之:做下面几个步骤:

使用 Esup 进行性能检测。
调整垃圾回收的阀值。
使用 use-package 来自动(延迟)加载所有东西。
不要使用会引起立即加载的辅助函数。
by @技术头条 2019-03-27 21:04 查看详情