自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (2)
  • 收藏
  • 关注

原创 深入理解SQL表连接(join)

关系数据库中最重要的两个概念,当属表连接和聚合。表连接将一条数据分开成多条,表聚合将多条合成一条。这一分一合,形成了关系数据库强大的逻辑表达能力,这篇文章讲表连接,关于聚合请移步:https://blog.csdn.net/wry2008wry/article/details/804795321、理解各种表连接的思维捷径“内连接、外连接、左外连接、右外连接、全连接、交叉连接、自然连接”,这么多种连接方式,你是不是已经晕了?一般的教科书都是从集合论及关系代数入手,搬出一大堆晦涩难懂的名...

2020-09-27 14:32:45 851 1

翻译 世界第一个微处理器4004研发回忆录

本文以日本比吉康公司的视角,讲述了世界上第一个微处理器——英特尔4004的研发历程,比吉康是日本一家台式计算器制造商,我于60年代末至70年代初在那里工作,1969年比吉康启动了一个项目,为基于ROM的宏指令可编程十进制计算机开发大规模集成电路(LSI)芯片,当时它是一家成功的电子计算器制造商,通过这个项目,它和英特尔公司于1971年3月成功研发出了世界上第一个4位微处理器——英特尔4004。控制单元由带地址递增器的8位程序计数器、存储程序的ROM、8位指令寄存器、指令译码器和指令执行控制模块组成。

2023-05-07 15:24:42 559

原创 深入理解Linux管道实现

曾经的一个误解:日常工作中,要将数据从一个库迁移到另一个,可以使用“mysqldump xxx | mysql xxx”这个命令,这个命令先从源导出数据,然后经管道通过mysql命令导入目标数据库,正是通过这个命令的一些担心,加深了我对管道的认识。当时的担心是这样的:该命令不停的从源数据库取数据,然后写到目标数据库,那么在写入的时候,会不会创建多个MySQL链接,导致性能问题呢?查看后发现目标MySQL只有一个数据库连接,这是怎么回事呢?误解的澄清:先放...

2021-12-19 19:50:37 1550

原创 巧用管道实现MySQL不落盘数据迁移

需要迁移一个几百G的大数据库,原计划将数据导出成文件再导入,但服务器上磁盘空间不足,如下脚本可以不落盘直接迁移数据:nohup sh -c "mysqldump -h172.26.0.1 --port=33061 -uroot --password='xx' --set-gtid-purged=OFF --lock-tables=false db_name tables_name | mysql -h172.26.18.222 -P3307 --ssl-mode=DISABLED -uroot --pa

2021-12-17 17:03:49 1108

原创 Linux下删除正在写入的文件会发生什么?

某天,我启动了一个进程,向一个文件a.txt中写入内容,但不小心在另一个窗口用命令rm -f a.txt把它删除了,我以为这应该会触发一个警告,比如“不能删除一个打开的正在写入的文件”之类的,结果命令干脆的执行成功了,更出乎预料的是,我回到之前的那个窗口,我发现进程还在正常的写入数据,程序并没有报出任何异常,并打印出了一批批成功写入的日志。这就有点让我费解了,伟大的好奇心让我寻找答案。原来Linux中真正表示一个文件的是一个叫inode的数据结构,而文件名只是指向了ino...

2021-11-26 21:40:26 4444 4

原创 基于浏览器的x86架构模拟器-v86

发现有一个有趣的项目v86,它是一个x86兼容框架的模拟器,完全运行于浏览器上,所以你可以在浏览器本地启动一个操作系统,可以用来看一些古老的或者奇奇怪怪的操作系统

2021-11-25 11:27:38 1010

原创 在vmware上直接运行xv6

xv6是一个用来学习操作系统非常好的一个项目,它还原的是非常出名的unix v6操作系统,而且还增加了对多处理器的支持。官方给我运行环境是qemu,当时好奇在想,能不能用vmware来运行呢,因为vmware不也是给操作系统模拟了一个二进制代码的执行环境吗?但是搜遍全网也没有找到方法,后面自己找到了方法,验证了自己的想法。当时的思维路径是,操作系统是放在磁盘上的起始位置的,bios中的代码会将磁盘的第一个扇区加载到内存中执行,那么我把xv6的代码写到磁盘的起始位置不就可以了。另一个问题是操作系统镜像

2021-10-19 14:41:58 813

原创 《刨根问底系列》01:操作系统凭什么可以调度程序?

《刨根问底系列》01:操作系统凭什么可以调度程序?一、问题的提出#include<stdio.h>int main(){ while(1) { printf("hello word"); } return 0;}上面的程序是一个死循环,不停的输出“hello world”,将这个程序在一个单核计算机上运行两个实例(进程),这两个进程会同时执行,都在不停的输出。另一方面,我们知道一个cpu同时只能执行一条指令,这个执行后.

2020-10-31 20:38:35 150

原创 linux下top命令显示完整命令行

top可能是日常工作中使用频率最高的命令了。我们知道如果想要查看top命令中进程的命令行,就在top后按c,但是即使这样,如果命令行比较长,还是无法查看完整。其实这时只需要按键盘上的方向键右键,即向右滚动屏幕就可以了。...

2020-10-19 19:42:29 8537

原创 tcpdump抓包按内容过滤

tcpdump -i any -A |grep xxxx-i any表示所有网络接口-A表示按ascii打印内容

2020-10-15 15:23:59 1301

原创 《刨根问底系列》:序言

敬请期待

2020-09-29 16:31:54 122

原创 代码重构:文件相关变量命名约定

一、文件相关变量的命名进行文件操作时,我们需要定义相关的一些变量,比如目录、文件名、全路径、文件扩展名。我在写代码是使用以下的变量命名约定:比如有一个配置文件,它的全路径变量就命名为config_path、它所在的目录就是config_directory、配置文件本身直接用fd_config,具体如下(xxx表示具体的业务名,如配置文件config、语料文件courpus):fd_xxx 表示文件本身,fd是文件描述符(file descriptor),来自于c语言习惯,认可度...

2020-09-28 09:21:15 870

原创 javascript“关联数组”澄清

所谓“关联数组”指以名字作为下标的数组,比如:var a = [];a['key'] = 'value'; 其实javascript中根本就没有“关联数组”,javascript的数组只能以数字作为下标,以名字作为下标访问的叫作对象:如果你需要用到名字作为下标即key-value的结构,你应该使用对象而不能使用数组:var a = {};a['key'] = 'valu...

2019-02-18 16:28:22 158

原创 neo4j browser中定义参数变量

概念在neo4j browser网页中调试cypher语句时,使用预先定义的变量会更方便且增加代码的可读性,类似于SQL语句中的参数。参数对当前会话有效,网页刷新变量消失。变量为一个kv的键值对。定义的语法是:param a:1, b:2或:param {a: 1, b: 2}如上,定义方式为一个冒号+param+空格+参数,注意有一个空格。有两种方式定义变量 :叠加的...

2018-10-09 16:42:47 2633

原创 linux sort命令优化提高速度

我们经常使用sort来对文本文件进行排序,因为排序是很多操作的基础。甚至会使用-u选项来清除重复行。因此排序的效率往往是瓶颈所在,要优化sort的效率,可以试下下面的方法:LC_ALL=C sort -S 80% -o output.txt input.txtLC_ALL=C意思是使用C的字符串比较方式,其实就是不对文件中的字节流进行字符解码,字符编解码是非常耗时的操作; -S 80%...

2018-08-01 08:23:23 3107

原创 neo4j使用cypher查询路径避免出现环路

neo4j在使用可变长路径找两个点之前的所有路径时会返回包含环路的路径(一个点在路径中出现两次),如下面的语句:MATCH path = (x)-[:KNOWS*]-(y)可能返回a-&gt;b-&gt;c-&gt;d-&gt;b-&gt;e这样的路径,如图:解决方法:纯cypher实现MATCH path = (x)-[:KNOWS*]-(y) UNWIND NODES(path) AS n...

2018-07-03 16:07:13 8968 6

原创 使用clion

觉得jetbrains的自动完成、代码规范警告做得不错,于是使用clion来写c++试下:1 安装cygwin,选择包的时候要选上Devl,这样才会有g++等开发工具;2 安装clion;3 新建工程,设置cygwin为其编译器;4 书写代码,运行。注意生成的exe是在cygwin环境下的,直接双击无法运行,需要cygwin的dll,可以在cygwin terminal中运行;...

2018-06-29 11:11:41 688

原创 力引导算法深入理解及其在d3.js中实现的源码分析

    中学时最喜欢的学科是物理,大学误打误撞读了计算机。最近在做图计算的相关工作,图的可视化中有一个非常重要的算法:“力引导算法”,这个算法的原理居然就是最简单的粒子间的作用力,真是没想到我喜爱的两个东西在这里结合起来了,也有一个感慨:虽然我们的抽象理论已经这么发达的今天,仍然还是需要这种模拟物理世界的“蛮力”算法。    进入正题,我将按如下顺序带着疑问的由浅入深的讲解一下力引导算法(forc...

2018-06-26 11:29:56 4509 2

原创 neo4j使用cypher求多个结点两两间的最短路径

with [3105, 200025928, 200025929, 151286502, 135660351] as id_listmatch (v:vertices) where v.id in id_list with collect(v) as nodes unwind nodes as source unwind nodes as target with source,t...

2018-06-21 17:01:03 3842 3

原创 cypher求最短路径shortestPath后的条件

shortestPath后的条件(谓词)会先执行,并不是先求出最短路径后再判断。我们知道最短路径使用双向BFS实现,也就是在每一步遍历的时候都会去判断是否满足条件。创建一个测试图:CREATE (n1:Person {name:'1'})CREATE (n2:Person {name:'2'})CREATE (n3:Person {name:'3'})CREATE (n4:Person {n...

2018-06-20 16:38:04 6104

原创 非常易于理解的超简单图广度优先遍历、深度优先遍历算法python实现

#!/usr/bin/env python#coding=utf-8import networkx as nximport Queuedef bfs(adj, start): visited = set() q = Queue.Queue() q.put(start) while not q.empty(): u = q.get() print(...

2018-06-14 17:57:11 26085 12

原创 压力测试遇到的坑

    今天对图谱系统做压力测试,没有用ab或loadrunner测试工具,自己写的python,因为会取一些不同的公司id。方法是先将所有待测试公司的id取出来,划分成N等份,然后起N个进程(因为python的多线程有GIL的限制),每个进程分别执行每一份中的数据,打印出每个请求的日志,最后汇总后在分析数据时发现一些问题,数据如下:进程112283进程211123进程322231上面的表格表示三...

2018-06-14 15:36:52 462

原创 代码重构:适当的使用短变量

一 适时的使用短变量这时我们使用像i、j、k这样的短命名变量反而会让代码理想清晰,比如多重for循环的下标或者是嵌套的lambda表达式的或者是迭代变量(如下),因为这已经约定俗成了,有这样一个背景知道。我把它们称之为“随手变量”意思就是随手拿来临时用一下,用完即扔。但注意这“随手变量”的作者域一定不能太大,否则到后面你就不知道它存放的是什么东西了,因为它的命名无法体现出来。打个乘法表:for(i...

2018-06-11 11:00:10 325

原创 networkx源码解析-无权图最短路径

g = nx.DiGraph()g.add_edges_from([(1, 2), (1, 3), (2, 4), (3, 4), (4, 1)])print(list(nx.all_shortest_paths(g, 1, 4)))

2018-06-08 15:32:02 2203 2

原创 networkx简介(下)

图的创建即构建Graph/DiGraph/MultiGraph/MultiDiGraph对象,三种方式:使用图产生器(Graph generators)产生一些典型的图如完全图、树状图,可以用这个很方便的构造一些模拟数据来进行算法的测试G=nx.balanced_tree(3,3)nx.draw(G)上面的代码创建了一个三层的树状图从其它文件中导入显式的添加结点和边图报告实在是不知道怎么翻译“G...

2018-06-08 10:47:54 1210

原创 networkx简介(上)

主要模块:从源代码就可以看出networkx的整个结构,主要是以下几部分:图对象类,其定义图的存储结构结构;创造图类,用来产生一些标准的经典的图,比如完全图、树状图等等;从其它数据源读取并构建图的辅助函数;图分析功能,里面包含了经常多的图算法,基本你叫得出名的都可以在里面找到;图绘制功能,只是提供了一个接口,具体由其它库实现比如graphviz;api设计原则:network大多数api都是一个全...

2018-06-07 17:50:36 2890

原创 安装networkx

安装pythonnetworkx使用纯python实现,因此需要先安装python的环境,我使用Anaconda因为它内置了很多机器学习算法常用的库,不用逐个去安装相当方便。去https://www.anaconda.com/download/下载,我选择了内置python 2.7的64 bit安装包,下载后默认选项安装直至完成,需要注意的是官方文档要求必须安装在没有空格及中文字符的路径上验证py...

2018-06-07 15:46:22 5174 3

原创 neo4j使用嵌入方式示例

操作系统:windows 7开发环境:IntelliJ IDEA 2016.1JAVA:1.81 打开 IDEA,新建一个Maven的空工程2 找到pom.xml加入所需的neo4j的maven库依赖,maven在编译时会自动去下载相关文件&lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.n...

2018-05-30 18:27:59 4822

原创 neo4j图查询语言cypher中无处不在的笛卡尔积

一 什么是笛卡尔积笛卡尔积可以说是关系型数据的一个重要理论基础,它的意思是将两个集合中的元素两两组合形成一个新的集合,数据库中的多种连接方式(什么自然连接、内连接、外连接)都是在笛卡尔积的基础上加上一些条件形成的。以前学数据库理论的时候碰到笛卡尔积真的是不明白怎么会有这么奇怪的东西,为什么突然冒出一个要把两个集合里面的元素两两组合这么个怪东西呢,看起来简单又笨又没用。后来在工作中写sql时遇到很多...

2018-05-29 17:47:11 1241

原创 neo4j中图的存储结构

一直以为neo4j是使用十字链表(Orthogonal List)来存储图数据的,后面跟踪源代码发现并不是,因为十字链表是:结点中单独存放“入边”、“出边”两个指针分别指向结点的第一个入边出边(注意这里的“第一个”指有顺序可以按结点的物理id来排列,因为这会影响到后续边上的“同弧头”的指向)边上两个指针域名,一个指向现该边同终点的下一条边,一个指向与该边同起点的下一条边而neo4j中的结构更像是邻...

2018-05-28 17:21:06 3682

原创 neo4j中的分组查询

cypher语言中的分组与sql略有不同,在cypher中不用显式的写group by分组字段,由解释器自动决定:即未加聚合函数的字段自动决定为分组字段,如:with [ {name:'a',sex:'F',country:'CN',age:10}, {name:'b',sex:'F',country:'CN',age:10}, {name:'c',sex:'M...

2018-05-28 15:15:38 7308 1

原创 深入理解sql分组查询(group by)

理解group by语义个人认为sql中的group by和join是两大难点,因为它们转换了原来的表结构,group把表按某些字段统计缩小,join则使用笛卡尔积将多个表连接展开。咱们回到group by,顾名思义group即为分组,即将原来的一整块数据分成几小块。分组是聚合的前提,聚合是在每个分组内进行一些统计,如在分组内的最大值,最小值,平均值,个数等。未分组时查询返回的行直接与数据库表中的...

2018-05-28 11:24:00 26795

翻译 《Cypher官方编程指南》

Cypher风格指南译者:[email protected]原文:https://github.com/opencypher/openCypher/blob/master/docs/style-guide.adoc内容列表1. 为什么风格很重要2. 规则 2.1. 缩进和换行 2.2. 元字符 2.3. 大小写 2.4. 模式 2.5. 空格3. 建议 3.1. 图建模这是Cyphe...

2018-05-17 15:12:06 2056

原创 python codecs.open视\u2028字符为换行符

使用codecs.open逐行读取文件时,发现有一行数据被分成了两行,原因是使用codecs.open打开后再逐行读取时会将字符\u2028视为换行,经搜索发现该字符是javascript中的转义字符,在一些从网页上抓取的文本中常见,同理还有\u2029,示意代码如下:import codecstxt = u'aa\nbb\u2028cc'fd = open('a.txt', 'wb')

2017-09-11 15:08:39 1996 1

原创 《刨根问底系列》:从硬盘读取一个文件,底层都做了什么?

eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果用C语言来解释,可以把这些寄存器当作变量看待。比方说:add eax,-2 ;//可以认为是给变量eax加上-2这样

2011-08-31 15:29:26 389

原创 《刨根问底系列》:sleep到底是怎么让程序“睡眠”的?

c代码反汇编研究初探(1),DEBUG篇。Author:xue23email:[email protected]下面是原代码。我在vc6.0中对这段代码进行完全的反汇编,以研究c语言在机器码级的运行状态。这一部分研究DEBUG下的情况。int __stdcall st

2011-08-31 15:19:36 761

原创 《刨根问底系列》:printf到底是怎么打印到屏幕上的?

很多地方出现未定义行为,可每每当它出现时,我们都不知道它是一个未定义行为,或者只是单纯的理解成一个错误。使用未定义行为直接带来的后果是:编译器碰到此类情况可以为所欲为。人类的恐惧来自对一个事物的无知,但追求问题解的过程又充满了痛苦。所以在追求把所有的未定义行为都总结出来这个过

2011-08-25 14:40:27 496

原创 《刨根问底系列》:socket到底是怎么把数据发送出去的?

int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send

2011-08-01 14:32:30 575

firefox-beta安装包

firefox-beta,可以修改配置,用于通过socks上网

2021-12-20

Linux 1.0内核C源代码

Linux 1.0内核C源代码 分析Linux内核的好工具 祝大家学业有成!!

2008-09-13

空空如也

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

TA关注的人

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