自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Tensorflow-Go的扩展

谷歌的tensorflow虽然提供了go版本,但是官方的说法是: TensorFlow provides APIs for use in Go programs. These APIs are particularly well-suited to loading models created in Python and executing them within a Go applicatio

2017-12-07 17:44:59 1217

原创 TensorFlow模型保存的一个坑

最近工作需要,使用tensorflow(r1.3)中contrib的某个库,根据tf官网的说法,go版本是只能调用py版本训练好的模型,而个人对go比较熟且线上环境用go作服务,所以想用go调python训练好的模型。使用python import tf和tf.contrib相关库,使用tf.saved_model.builder.SavedModelBuilder保存模型,但使用go使用LoadS

2017-11-23 17:10:48 2755

原创 glibc-文件读缓存的EOF判定坑

本文基于glibc2.24版本。问题起源于一个学弟的代码:#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main() { int rec = dup(0); int fd = open("./a.txt", O_RDON

2017-07-14 00:08:14 733

原创 linux源码 网络包接收--从中断到协议栈

本文基于4.11内核linux在硬中断触发后,会进入do_IRQ函数(arch/x86/kernel/irq.c):/* * do_IRQ handles all normal device IRQ's (the special * SMP cross-CPU interrupts have their own specific * handlers). */__visible unsig

2017-06-27 23:36:53 1778

原创 linux内核与netlink有关的两个坑

最近做一些与netfilter/ulogd2性能调优有关的工作(https://github.com/InsZVA/ulogd-with-syslog-tcp),在过程中发现了两个内核概念理解的坑点。第一个问题是下面代码:```clen = recv(fd, ui->nfulog_buf, bufsiz_ce(upi->config_kset).u.value, 0);

2017-06-14 16:14:36 1545

原创 Linux内核netfilter子系统ulogd项目性能调优记录

使用ULOGD打SYSLOG到SYSLOG-NG,当NFLOG拿到的数据包在6K左右时,CPU有两个核心占了15%左右使用修改过的ULOGD直接打TCP,CPU只有一个核心占15%左右(修改版在https://github.com/InsZVA/ulogd-with-syslog-tcp)使用perf top查看, 8.89% libc-2.12.so [.

2017-05-10 17:04:08 848

原创 Visual Studio 调试器bug一例分析

背景Visual Studio一度被认为是“最强大的IDE”,不过前段时间有thu学长遇到一个问题,是和调试器相关的,我和他qq联系,让他远程发图,发现了一例VS的调试器bug。问题这是调试过程中的截图,在运行光标处之前,看到lReturn是0然后运行到第二条语句,lReturn还是0,state是0但是运行完那句if判断,lReturn突然变成了一个负数,而且state也没有变,是0.但是那句if

2017-04-15 23:32:55 876

原创 制作一个自己的对战平台

缘起因为在浙大,物理网卡的地址被分配为222.205.XX.XX,但是子网掩码是255.255.255.0,这样的话虽然大家都在一个局域网里面,但是却不一定在同一个子网。 局域网联机游戏为了发现局域网中的主机,会发送广播包,有些局域网联机游戏,会发送到255.255.255.255这个广播地址(典型代表War3),但是这个广播地址 是只能广播到子网的,路由器默认不转发,这样就造成了我们同在校园网

2017-03-14 00:30:58 5730 1

原创 通过简单的处理去除WinRAR中文版的广告

winRAR中文版老是弹出一些广告,很头疼,比如:使用OD进行处理,发现了CreateWindowEx这个敏感函数,查找引用,发现有个地址传递了一看就知道是广告的className:RARReminder:这里不能直接把调用CreateWindowEx的代码NOP抹掉,因为后面可能要ShowWindow或者SetWindowPos来设置窗口位置的,如果这时候的代码NOP了, 存这个广告的HANDL

2017-03-13 17:19:32 3324

原创 HTML5直播技术探究

传统直播技术,大多使用RTMP通过Flash进行传输。随着HTML5的逐渐实现,<video>等媒体标签的浏览器支持, 很多视频逐渐向HTML5靠拢。Youtube等视频网站纷纷开始使用HTML5播放器,然而纵观当前的直播网站,大多 还是依赖Flash。直播为何不采用HTML5呢?目前的HTML5直播思路有以下几种。一是使用js调用WebGL渲染视频,用websocket/XHR传输,比如jsm

2017-02-02 15:28:31 3689

原创 统治世界的缓存 --- glibc源码拜读 - printf

问题由来有这么一段代码:int main() { printf("aaa\n"); pid_t pid = fork(); if (pid < 0) { printf("an error occur\n"); } else if (pid == 0) { printf("i am child\n"); } else {

2017-01-08 15:41:45 2514 2

原创 Go语言中的多核调度

Go语言中的多核调度浙江大学 14级软件工程 李自乐 近年来,随着工业技术的发展,服务器的CPU数量越来越多,动辄几十核心。为了发挥多核的优势,大多数程序都会采用多线程的方式来利用多核。另外,服务器编程一般都涉及较多的IO,包括网络或者外存,同步阻塞的IO对于大多数应用环境是一种很糟糕的方法:Fd.Read();这种语句一般在文件读准备完成之后会返回,但是文件的读取(这里的文件

2017-01-05 03:16:32 5275 1

原创 Nginx源码分析 - Nginx启动以及IOCP模型

Nginx 源码分析 - Nginx启动以及IOCP模型版本及平台信息本文档针对Nginx1.11.7版本,分析Windows下的相关代码,虽然服务器可能用linux更多,但是windows平台下的代码也基本相似 ,另外windows的IOCP完成端口,异步IO模型非常优秀,很值得一看。Nginx启动曾经有朋友问我,面对一个大项目的源代码,应该从何读起呢?我给他举了一个例子,我们学校大一大二是在紫

2016-12-27 21:21:23 7075 2

原创 非官方浙江大学校园网认证客户端开发笔记(一)

为什么会有这个项目在浙大是通过VPN认证上网的,在windows下官方的校园网客户端表现非常好,可以自动解决部分问题,而且不需要什么配置,输入 用户名和密码即可实现一键上网。但是很多同学使用Linux系统,尤其是刚开始学习Linux的苦手,有线网的上网便成为了最大的问题。 当然cc98流传着多种版本的bash脚本,可以通过自动配置xl2tpd和pppd实现一键上网。因为脚本普遍依赖xl2tpd和

2016-12-14 16:26:23 6807 3

原创 Sapphire 算法简要分析

序几个月前为了分析goroutine的垃圾回收去看了Sapphire算法的论文,在博客里面也贴了第一部分的译文, 不过太监了,对此表示遗憾。于是将该篇论文重新看了一遍,然后整理了一下大致思路。个人理解,水平有限 ,可能有误还望大家批评指教!概述支持并发的语言(多线程等)的垃圾回收工作尤为复杂,大多语言采用了以标记-回收算法为主的回收机制, 然而在并发的环境下,在进行标记回收的过程中,应用程序新

2016-11-18 23:35:42 2052

原创 匹配队列问题

匹配队列问题最近在做视频聊天平台,想让他支持随机配对,做一个匹配队列。要求每个客户端到达后加入队列,匹配时随机找到 匹配目标。并且能够实现,广播所有人正在匹配的人数,在客户端离开后,也能及时清除垃圾。最初的设想–无头苍蝇乱撞最初的设计方案,采用每个客户端一个线程,同时每个客户端连接的时候,进入队列,客户端匹配的时候,更改状态 为正在匹配,并在队列中搜寻目标。如果搜寻到了目标,先试图获得自己的锁,

2016-10-18 22:15:22 2320

原创 WebRTC初试用-在线视频聊天室的基本流程

WebRTC技术在线视频传输,传统做法是做一个中继服务器,负责客户端的发现和数据的中介传输,那么就会产生一个很明显的问题,中继服务器需要 传输大量的数据,不仅如此还有复杂的流信息控制以及同步等问题。而且,随着数据量的增大,中继服务器单机无法承载,不得不做负载 均衡甚至地区分发等,大大增加系统复杂度,增加了各种成本,降低了稳定性。而且服务器作为中介,有记录用户传输数据的能力,用户 的隐私问题也值

2016-10-17 17:39:09 1583

原创 关于NAT的一些事儿

关于NAT的一些事儿从丢包开始因为经常玩Dota2,然后又是校园网(万恶的ZJUVPN),所以每隔一段时间就会出现持续数十秒的高丢包(40%以上) 甚至掉线。在网上搜索之后发现,处于学校网络或者大型社区之类的网络环境下比较容易出现这种情况,这就是NAT的 原因了。什么是NAT大家如果用过路由器(包括无线路由)的话,应该是了解,多台设备使用的是用一个IP地址,想想也是对的,毕竟给你 的ip资源肯

2016-10-04 01:58:29 3735

原创 微信支付官方SDK-phpV3的一处坑

在使用微信支付官方SDK时,发现成功的回调处理程序无法正常调用,经审查,是 lib/WxPay.Api.php 中第415中使用了 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; 而该语句只有在php.ini设置后才可使用,导致xml输入数据获取不到。 改为 $xml = file_get_contents("php://input"); 则可以适用一切情况。 还是希

2016-08-07 23:06:48 2395 4

原创 Golang1.7 Goroutine源码分析

一、       Golang简介1.1概述 Golang语言是Google公司开发的新一代编程语言,简称Go语言,Go 是有表达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核和网络应用,而新奇的类型系统允许构建有弹性的模块化程序。 Go 编译到机器码非常快速,同时具有便利的垃圾回收和强大的运行时反射。而他最广为人知的特性便是语言层面上对多核编程的支持,他有简单的关键字go来

2016-06-29 16:29:07 4418 3

转载 Async Programming - 1 async-await 糖的本质(1)

原文出处:Pointer-SMQ的博客这一个系列的文章主要来讲 C# 中的语言特性 async-await 在语言层面的本质,我们都知道 await 是编译器进行了一个 rewrite,然而这个 rewrite 并不是直接 rewrite 成其他没有原生支持 await 的语言的 lambda 回调的形式,而是整个对方法进行了重写,下面就让我们来从最简单的方法,一步一步剖析 await 糖

2016-05-06 17:03:19 1110

原创 自己动手写数据库(三) 持久化方案与索引树

自己动手写数据库(三) 持久化方案与索引树推荐一点资源之前说我所有实现都是Go写的,在MonkeyDB2@Github,但是有些同学可能不喜欢Go的风格或者设计思想, 在此推荐大一学弟的项目,Java写的:CauchyDB内存分块管理既然要实现一个数据库,我们之前所有的东西都是在内存里面的,这如果服务器关机,那内存里面的数据还不得全部GG啊~所以我们需要对内存进行管理, 将所有的数据操作在我们所

2016-04-30 18:48:02 2821

原创 自己动手写数据库(二)表的结构

自己动手写数据库(二)表的结构一点点声明我不准备贴多少代码,因为代码实现是开发者自由去做的,我这篇文章只是为了提供一个思路或者结构,具体的实现,如果做不出来,请多多练习基本功。 另外我这篇文章讲的是以行为储存的,列式储存的数据库类似。表的逻辑模型我们知道,在关系型数据库中,数据是以表的形式来储存的,那么我们也应该实现一个表的数据结构,比如下面这样(伪代码):Table { Row[]

2016-04-28 15:38:37 2948

原创 自己动手写数据库(一) 从SQL语句开始

自己动手写数据库(一) 从SQL语句开始关于本教程作者:InsZVA,浙江大学 软件工程系,也是第一次尝试写数据库,如有错误还望多多指正,写此篇文章也望有抛砖引玉的作用。 面向读者:有一定C语言基础。(其他知识会在教程中提到)从SQL语句开始对于数据库,我们最直观的概念或许就是在命令行中输入SQL语句来运行或者在PHP等语言中使用SQL语句进行增删改查。 我们这篇教程的目的就是做出像上图一样

2016-04-23 19:04:46 13582

原创 内存映射系统开发

为了使用内存作为数据库的主要存储方式,开发内存数据库,我们需要对内存中的数据进行保证。即可以备份与还原,那么为了将内存中的数据备份到外存中,我们可以采取以下策略:选取一个外存文件,将其映射到某个内存地址;当更新内存时,适时地更新外存文件;系统重启时,从外存中重新读取内存内容。那么这里就有几个问题,首先是映射问题,起初我尝试了win32api: createFileMapp

2016-03-18 14:55:47 947

原创 Go语言黑魔法中的问题修正

原文: http://studygolang.com/articles/2909文中大多技巧都是正确的,但是结构体和[]byte之间的转换:第三式 - 结构体和[]byte互转有一天,你想把一个简单的结构体转成二进制数据保存起来,这时候你想到了encoding/gob和encoding/json,做了一下性能测试,你想到效率有没有可能更高点?于是你又试了encoding/binady

2016-03-13 00:13:32 1033

翻译 Sapphire算法:GC Without Stop the World(上)

Go的GC一致为人诟病,然而Go1.5据说大大优化了GC,具体可以见这篇文章http://www.oschina.net/translate/go-gc-solving-the-latency-problem-in-go-1-5于是我打开了Go源代码,查看了Go GC相关代码,注释中说,Go现在使用的GC是一种不用停止世界的GC,基于Richard大师2001年的论文,我便翻译了这篇paper

2016-03-02 14:18:02 1814 1

原创 打造先进的内存KV数据库-7 反射以及并发锁

反射反射作为一种代码组织形式,带来了极大的不安全因素,同时也带来了许多便利之处,通过方法、对象、类型名称来获得具体实例,可以避免大量if-else分支,使得代码优雅,monkeyDB的服务端代码最后采用反射组织。并发锁多线程访问同一资源时,需要对资源加锁,否则可能会得到预料之外的后果。由于内存数据库优越的读写性能,锁的粒度可以尽量大,monkeyDB使用库级锁(相当于表级锁)来保证线程安全。 Mo

2016-01-26 14:11:54 1274

原创 打造先进的内存KV数据库-6 PHP支持

PHPphp作为使用极广的程序设计语言,monkey数据库对php的支持是必须的~代码实现//test.php<?phpclass MonkeyDB{ private $socket; private function read() { $data = ""; $total = 0; $t = fread($this->so

2016-01-05 23:50:34 1781

原创 打造先进的内存KV数据库-5 TCP侦听

TCP侦听作为支持集群的数据库,必定要与多个客户端交互信息,不可能让数据库与所有客户共享地址空间(虽然这样性能好),所以需要使用TCP协议进行交互数据,(UDP协议不可靠。。。弃用),C语言的TCP库其实还好,但是对于高并发和并行的处理不如Go,而且并发锁机制比较难写,所以使用Go写了服务器和客户端调用C的库,目前版本没有什么身份验证,之后会加上。代码实现//server.gopackage ma

2016-01-05 23:46:16 1019

原创 打造先进的内存KV数据库-4 伙伴内存管理系统

伙伴算法大概是这样的,monkey储存引擎(今年猴年了嘛~取个名字,重了再换)的内存管理使用伙伴算法,大概原理是这样的: 1.多个空闲内存块的链表,分别是不同大小的内存块,1K,2K,4K,8K,…,,按照这样的情况一直到4M,当程序申请内存时,选择一个稍大于其所要申请的块,比如申请1023字节,给1K,1024字节也给1K(为什么呢– 后文会讲),2056字节给4K。 2.如果要给的内存块没有

2016-01-04 19:34:33 1424

原创 打造先进的内存KV数据库-3 最终选择-C & B-Tree

多种索引与语言我尝试了tire树索引 B+树索引 B树索引,发现还是B树索引最快,另外使用C写了完善的B树索引,但是我发现使用cgo调用的时候,会有500%左右的性能损失,tire树大概比B树慢2倍,所以还是选择使用原生C来写完后续的进程。索引代码实现//BTree.h//实现对order序(阶)的B-TREE结构基本操作的封装。//查找:search,插入:insert,删除:remove。

2015-12-27 00:11:46 1652

原创 Ubuntu Server 配置中的各种坑

Ubuntu Server 配置中的各种坑安装在windows下将iso镜像刻录到U盘安装,最开始使用的是UltraISO,结果安装的时候老提示找不到CDROM,后来使用win32diskimage,结果就ok了无线连浙大VPN使用xl2tpd连接浙大vpn,发现经常掉,而且wlan0都会关闭,真是烦人,后来直接使用post方法网页链接wifi:curl -d "action=login&usern

2015-12-22 22:29:58 1437

原创 打造先进的内存KV数据库-2 B树索引的建立(2)

索引的插入接上篇文章,我们实现了B树的查找log2n的算法,然而在后来的单元测试中,我发现了bug,在此进行修正,修正后的查找函数://查找指定索引 如果找到返回找到的node和position,失败的话返回最近的node和position,//并返回返回值相对于查询值是大了还是小了 true->小 false->大 优先返回大 供插入时插在前面func (bt *B_Tree) Select(

2015-12-19 13:51:36 988

原创 打造先进的内存KV数据库-1 B树索引的建立(1)

设计目的在搜索引擎的设计中,往往需要使用倒排索引,在当前内存价格不断走低的情况下,内存数据库必然会成为主流。KV数据库由于适合Map-Reduce用于分布式处理。 本系统设计实现如下目标: * 实现极高性能的查询 * 实现分布式集群储存 * 实现可靠的日志系统索引设计索引采用B数索引,这样做的目的是大大利用CPU的缓存,让每个节点的大小与CPU二级缓存相匹配,另外,将索引值连续储存在节点中,

2015-12-18 15:17:08 2227

原创 CPU L2缓存初探

CPU L2缓存初探探索目的为了设计高性能的内存数据库,往往要考虑CPU缓存的命中率,查阅资料发现,Intel架构的处理器有3级缓存的设置,其中L1,L2较小,L3较大但被三个核心所公用。在我使用的i7 4712mq中,使用dmidecode查看缓存大小:inszva@inszva-Aspire-E5-572G:~$ sudo dmidecode[sudo] password for inszva

2015-12-17 14:38:36 2879 2

原创 nodejs-初探-简单的判定位置是否在市区API

看来nodejs还是越来越火了,WordPress也用上了nodejs抛弃了php,虽然php7比php5的效率高了一倍,然而在node,java等静态语言面前,还是不值一提.当然php还是有他的好处,开发迅速,修改便捷,适宜于调用api做应用层.另外由于node的封装性较低,node可以操作很多较为低级的操作,做路由,代理,解析头是相当方便,再加他不错的执行效率,我觉得用node做一些计算密集和

2015-11-27 22:30:48 1155

原创 php7 性能测试

满怀激动的编译安装了php7 RC6然后对整数相加相乘及浮点数相加相乘做了测试:<?php echo "整数加法性能:"; $time = time(); for($i = -214748364;$i < 214748364;$i ++); echo "4000M次循环相加:" . (time() - $time) . "s"; echo "整数乘法性能:"; $time = t

2015-11-09 17:22:32 856

原创 浙大PTA OJ漏洞

对PTA测试网站高危漏洞可以导致任意用户代码曝光的测试报告,1.打开PTA提交列表,进行抓包:发现使用Ajax获取了提交列表,查看有getSubmitList项:http://pta.patest.cn/api/exam/getSubmitList?limit=50&offset=0&hasTotal=true&order=&tId=56&userName=&timestamp

2015-09-22 22:09:51 7742 5

原创 多级分销对接第三方API获取数据系统的优化

最近在做一个基于有赞的多级分销管理系统,所有成员的店面均在有赞商城,使用有赞API获得他们的业绩,但是有赞提供的分销只有一级,故制作该系统。考虑到减轻工作量,理清层次关系,采用了OOP设计方法,将数据库,表封装为基类,分销成员,店面等继承表。但是在列出销售量报表和分销商的时候出现了严重性能问题,由于分销商的业绩奖励是与其下级分销商挂钩的,故封装数据库的时候,进行了DFS遍历来获得所有分销商的关

2015-07-23 13:02:01 2610

D3Dwindow 窗口化工具

不错的游戏的窗口化钩子,支持游戏窗口化运行. 支持现有的大多数游戏.

2011-08-15

vb源码-*号密码查看器

自己做的vb*号密码查看器,主要是运用WinAPI的getwindowtext、windowsfrompoint、getcursorpos函数。

2011-08-13

空空如也

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

TA关注的人

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