首页
免费后端云服务
关于
推荐
免费图床源码
Search
1
小程序后端入门系列视频教程【一-微信开发工具介绍】
9,715 阅读
2
微信小程序三级联动之多列选择器
9,598 阅读
3
小程序开发免费后端之神秘利器分享
9,526 阅读
4
Golang-开发企业级资源权限管理【第一步表设计】-1
9,075 阅读
5
学会微信服务端开发第一步
8,972 阅读
日常记录
日常
随笔
Bmob后端云
从零开始学物联网
Serverless实战驾校小程序
心邮
Serverless
向量数据库
登录
Search
Magic
累计撰写
120
篇文章
累计收到
21
条评论
首页
栏目
日常记录
日常
随笔
Bmob后端云
从零开始学物联网
Serverless实战驾校小程序
心邮
Serverless
向量数据库
页面
免费后端云服务
关于
推荐
免费图床源码
搜索到
118
篇与
的结果
2014-08-25
一些经典的SQL编程问题
一 数字辅助表 数字辅助表是一个只包含从1到N的N个整数的简单表,N通常很大。数字辅助表是一个非常强大的工具,所以我们创建一个持久的数字辅助表: CREATE TABLE Nums( a INT UNSIGNED NOT NULL PRIMARY KRY )ENGINE=InnoDB; CREATEPRODURE CreateNums(t INT UNSIGNED) BEGIN DECLARE s INT UNSIGNEDDEFAULT1; TRUNCATETABLENums; INSERTINTONumsSELECTs; WHILE s*2<=t DO BEGIN INSERTINTONumsSELECTa+sFROMNums; SETs=s*2 END; ENDWHILE; END; 二 连续范围 CREATETABLEt(a INT UNSIGNEDNOTNULLPRIMARYKEY); INSERTINTOtVALUES(1); INSERTINTOtVALUES(2); INSERTINTOtVALUES(3); INSERTINTOtVALUES(100); INSERTINTOtVALUES(101); INSERTINTOtVALUES(103); INSERTINTOtVALUES(104); INSERTINTOtVALUES(105); 如何得到下面的输出结果呢? SELECTMIN(a)start,MAX(a)endFROM( SELECTa,rn,a-rnASdiff FROM(SELECTa,@a:=@a+1 rnFROMt,(SELECT@a:=0)ASa) ASb )ASc GROUPBYdiff; 三 最小缺失值 点击(此处)折叠或打开 CREATE TABLE x( aINTUNSIGNED PRIMARY KEY, b CHAR(1)NOTNULL )ENGINE=InnoDB; INSERTINTOx SELECT 3,'a'; INSERTINTOx SELECT 4,'b'; INSERTINTOx SELECT 6,'c'; INSERTINTOx SELECT 7,'d'; 注意a列必须是一个正整数,所以这里的类型为INT UNSGINED。最小缺失值的问题是,假设列a从1开始,对于当前表中的数据3、4、6、7,查询应返回1。 如果当前表的数据为1、2、3、4、6、7,则返回5。 解决方案如下: SELECT CASE WHENNOTEXISTS(SELECTaFROMxWHEREa=1)THEN1 ELSE (SELECTMIN(a)+1ASmissing FROMxASA WHERENOTEXISTS (SELECT*FROMxASB WHEREA.a+1=B.a)) ENDASmissing; 运行上面的SQL,得到结果为1,若向a列插入1,2后得到的结果为5。 若要对最小缺失值进行补缺操作,解决方案如下: INSERTINTOx SELECT CASE WHENNOTEXISTS(SELECTaFROMxWHEREa=1)THEN1 ELSE (SELECTMIN(a)+1ASmissing FROMxASA WHERENOTEXISTS (SELECT*FROMxASB WHEREA.a+1=B.a))ENDASmissing,'p'; 运行上面的SQL,我们将会在a列插入5,b列插入'p'。 四 获取行号 行号是指按顺序为查询结果集的行分配的连续整数。 CREATETABLEsales( empidvarchar(10)NOTNULL, mgridvarchar(10)NOTNULL, qty` int(11)NOTNULL, PRIMARYKEY(empid) ); INSERINTOsalsesVALUES('A',Z',300); INSER INTO salses VALUES('B',X',100); INSERINTOsalsesVALUES('C',Y',100); INSER INTO salses VALUES('D',Z',300); INSERINTOsalsesVALUES('E',X',200); INSER INTO salses VALUES('F',Z',100); 现在我们根据empid进行行号统计 SELECTempid, (SELECTCOUNT(*)FROMsalesAST2 WHERET2.empid<=T1.empid)ASrownum FROMsalesAST1; 但是上面这句SQL效率不是最理想的,在Mysql数据库中得到行号最快的解决方案是采用CROSS JOIN。
2014年08月25日
1 阅读
0 评论
0 点赞
2014-06-30
解密搜索引擎技术之中文分词与实现
中文分词一直都是中文自然语言处理领域的基础研究,也是中文搜索引擎的核心模块之一。目前而言的分词系统绝大多数都是基于中文词典的匹配算法,其中,最为常见的是最大匹配算法(Maximum Matching,以下简称MM算法),而MM算法有三种:一种正向最大匹配、一种逆向最大匹配和双向匹配。本文以正向最大匹配算法为例介绍其基本思想和实现。 一、基本思想 (1)假设词典中最长的词语字数为w(一般设置为8个字符,即4个汉字)。 (2)判断带分词语句长度是否大于w个字,如果大于w则跳到(3),如果小于w则跳到(6)。 (3)取待分词语句的前w个字。 (4)在词典中查找w,如果存在,则从语句中去掉w,从语句中w后的词开始重复上面过程。 (5)如果不存在,就去掉这w个字的最后一个字。 (6)检查是否是单字或者空,如果是,则退出。 (7)如果不是,则继续判断词库中是否存在这个词,如此反复循环,直到输出一个词。 (8)继续取短语的前w个字反复循环,这样就可以将一个语句分成词语的组合了。 二、简单实现includeincludeincludeusing namespace std; set g_setWordDictionary; int construct() { g_setWordDictionary.insert("中国"); g_setWordDictionary.insert("中国人"); g_setWordDictionary.insert("纽约"); g_setWordDictionary.insert("北京"); } bool match(string &word) { set::iterator itor = g_setWordDictionary.find(word); if (itor == g_setWordDictionary.end()) { return false; } return true; } void forward_maximum_matching(string content, set &keywords) {define MAX_LEN 12 //词库中最长词语(utf-8一个汉字3个字节)define MIN_LEN 3 //单字(原理同上)int len = content.length(); int right_len = len; int start_pos = 0; bool ret = false; string kw_value = ""; int kw_len = 0; int kw_pos = 0; //单字或空串 while (right_len > MIN_LEN) { //语句大于词库中最长词语 if (right_len >= MAX_LEN) { kw_value = content.substr(start_pos, MAX_LEN); } //语句小于词库中最长词语 else { kw_value = content.substr(start_pos, right_len); } //词库匹配 ret = match(kw_value); kw_len = kw_value.length(); kw_pos = 0; while (!ret && kw_len > 2*MIN_LEN) { //去掉候选词右边一个汉字 kw_len -= MIN_LEN; kw_value = kw_value.substr(kw_pos, kw_len); //继续匹配 ret = match(kw_value); } //匹配到词 if (ret) { keywords.insert(kw_value); //从语句中去掉匹配到的词 start_pos += kw_len; right_len = len - start_pos; } //未匹配到词,下移一个字 else { start_pos += MIN_LEN; right_len = len - start_pos; } }//while (right_len > MIN_LEN) } int main() { //构造词库 construct(); //切分词库 string content = "我是中国人,我是来自中国北京的中国人,在纽约工作"; set keywords; forward_maximum_matching(content, keywords); set::iterator itor; //输出分词 for (itor=keywords.begin(); itor!=keywords.end(); ++itor) { printf("result: %s\n", (*itor).c_str()); } return 0; }
2014年06月30日
3 阅读
0 评论
0 点赞
2014-06-14
精选37条强大的常用linux shell命令组合
原文已删除
2014年06月14日
3 阅读
0 评论
0 点赞
2014-04-03
amd规范、cmd规范异同
相同之处RequireJS 和 Sea.js 都是模块加载器,倡导模块化开发理念,核心价值是让 JavaScript 的模块化开发变得简单自然。不同之处两者的主要区别如下:定位有差异 。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。Sea.js 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 环境中。遵循的规范不同 。RequireJS 遵循 AMD(异步模块定义)规范,Sea.js 遵循 CMD (通用模块定义)规范。规范的不同,导致了两者 API 不同。Sea.js 更贴近 CommonJS Modules/1.1 和 Node Modules 规范。推广理念有差异 。RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。Sea.js 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。对开发调试的支持有差异 。Sea.js 非常关注代码的开发调试,有 nocache、debug 等用于调试的插件。RequireJS 无这方面的明显支持。插件机制不同 。RequireJS 采取的是在源码中预留接口的形式,插件类型比较单一。Sea.js 采取的是通用事件机制,插件类型更丰富。还有不少差异,涉及具体使用方式和源码实现,欢迎有兴趣者研究并发表看法。总之,如果说 RequireJS 是 Prototype 类库的话,则 Sea.js 致力于成为 jQuery 类库。最重要的最后,向 RequireJS 致敬!RequireJS 和 Sea.js 是好兄弟,一起努力推广模块化开发思想,这才是最重要的。更新2013.06.30 推荐一篇图片并茂的文章:参考从 RequireJS 到 Sea.js 系列: (要翻墙)(要翻墙)CMD 规范在这里: AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。 CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。 类似的还有 CommonJS Modules/2.0 规范,是 BravoJS 在推广过程中对模块定义的规范化产出。 还有不少?? 这些规范的目的都是为了 JavaScript 的模块化开发,特别是在浏览器端的。 目前这些规范的实现都能达成浏览器端模块化开发的目的 。区别: 1. 对于依赖的模块,AMD 是提前执行 ,CMD 是延迟执行 。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible. 2. CMD 推崇依赖就近 ,AMD 推崇依赖前置 。看代码: // CMD define(function(require, exports, module) { var a = require('./a') a.doSomething() // 此处略去 100 行 var b = require('./b') // 依赖可以就近书写 b.doSomething() // ... }) // AMD 默认推荐的是 define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好 a.doSomething() // 此处略去 100 行 b.doSomething() ... }) 虽然 AMD 也支持 CMD 的写法,同时还支持将 require 作为依赖项传递,但 RequireJS的作者默认是最喜欢上面的写法,也是官方文档里默认的模块定义写法。 3. AMD 的 API 默认是一个当多个用 ,CMD 的 API 严格区分,推崇职责单一 。比如 AMD 里,require 分全局require 和局部 require,都叫 require。CMD 里,没有全局 require,而是根据模块系统的完备性,提供 seajs.use来实现模块系统的加载启动。CMD 里,每个 API 都简单纯粹 。 4. 还有一些细节差异,具体看这个规范的定义就好,就不多说了。
2014年04月03日
3 阅读
0 评论
0 点赞
2014-01-24
windows svn自动更新
实现原理是,利用svn版本库,hooks目录的bat钩子开展工作。 共在hooks目录下建立3个文件如下: post-commit.bat 作用是:钩子入口! postcommit.log 作用是:记录最后一次执行的结果(可以记录最后一次报错)建立一个空文件就好! post-commit-run.bat 作用是:自动更新的核心部分! post-commit.bat的代码是: call %~dp0post-commit-run.bat %* > %~dp0postcommit.log 2>&1 post-commit-run.bat的代码是: @echo off SET REPOS=%1 SET REV=%2 SET DIR=%REPOS%/hooks SET PATH=%PATH%; svnupdate D:\Web\ditan520 --username admin --password 123456 注意填写用户名和密码,这里的是:admin和123456.
2014年01月24日
4 阅读
0 评论
0 点赞
1
...
17
18
19
...
24