♌

Mr. Leo


  • 首页

  • 分类26

  • 标签142

  • 归档138

  • 关于

  • 搜索

接口规范

发表于 2017-01-07 | 更新于 2021-05-12 | 分类于 规范 | 评论数: 0 | 阅读次数:
  • 所有的返回数据都要配合全局状态码;
  • 接口参数 requestData 中的 XXX 需要根据实际业务需求进行替换,其他参数为固定接口参数;
  • 接口返回值 returnData 中的 KEY 需要根据实际业务需求进行替换,格式要保持统一,其他返回参数为固定接口参数。
阅读全文 »

命名规范

发表于 2017-01-07 | 更新于 2021-05-12 | 分类于 规范 | 评论数: 0 | 阅读次数:

对象名、方法名语义化,英语不行用拼音

阅读全文 »

科学上网

发表于 2017-01-07 | 更新于 2017-01-08 | 分类于 工具 | 评论数: 0 | 阅读次数:

爱翻墙 是一个网址导航网站,收录了中国大陆不能正常访问的网址。

为什么要科学上网

在天朝的 IT 从业者,没有人不知道 GFW 的存在。GFW 的利与弊在这不再深究。以下列出的我科学上网的理由:

  1. 搜索,百度的竞价排名搜出来的东西更 google 不在同一档次,想要更高的搜索质量。
  2. 软件/库更新老旧,大部分优质的(开源)软件/库都是国外的人开发的。当获取某一个库的时候,不翻墙,更新很慢,甚至无法更新。
  3. 锻炼英语能力,通过阅读一些原始的文档(至少有工作驱使)来练练英语水平。
  4. 世界那么大,我想去看看。我可以看看外面的资讯,避免一面之辞。
  5. 获取灵感,知乎与 Quora,segmentfault 与 stackoverflow…这些是多么的相似。

现在比较流行的科学上网方式

  1. Hosts最成功、最有效,也是最为跨平台的方法。它简单高效,并且随时可修改,通过绕过 DNS 直接访问 IP 的方式,可以让翻墙变得十分容易,不会像客户端软件那样需要不停地切换国内国外网络,大大简化了操作步骤。 维基百科
  2. VPN虚拟专用网络。
  3. GAE(GoAgent)一个基于 Google Appengine 的代理工具,代理 IP。
  4. Shadowsocks一个轻量级 socks 加密代理,全主流平台支持。
  5. XX-Net免费开源的翻墙工具安装简单、速度快、智能路由。中文教程
  6. Lantern和“XX-Net”类似。
  7. V2RayV2Ray 是一个于 Shadowsocks 之后非常好用的代理软件,但是由于 V2Ray 的配置略复杂,GUI 客户端不完善,所以 V2Ray 并没有像 Shadowsocks 在科学上网人群之中那么流行。官网
阅读全文 »

Hello World

发表于 2017-01-07 | 更新于 2021-05-12 | 分类于 建站 | 评论数: 0 | 阅读次数:

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

JSON Helper

发表于 2013-11-20 | 分类于 代码片段 , c# | 评论数: 0 | 阅读次数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ServiceModel.Web;///记得引用这个命名空间
using System.Runtime.Serialization.Json;
using System.IO;
using System.Text;

namespace Sigil.Common
{
/// <summary>
/// JSON操作类
/// </summary>
public class JsonHelper
{
/// <summary>
/// 把对象序列化 JSON 字符串
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="obj">对象实体</param>
/// <returns>JSON字符串</returns>
public static string GetJson<T>(T obj)
{
//记住 添加引用 System.ServiceModel.Web
/**
* 如果不添加上面的引用,System.Runtime.Serialization.Json; Json是出不来的哦
* */
DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream())
{
json.WriteObject(ms, obj);
string szJson = Encoding.UTF8.GetString(ms.ToArray());
return szJson;
}
}

/// <summary>
/// Json反序列化,用于接收客户端Json后生成对应的对象
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="jsonString">JSON字符串</param>
/// <returns>对象实体</returns>
public static T ParseFormJson<T>(string jsonString)
{
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms);
}
}

/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;
}

/// <summary>
/// JSON反序列化
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T obj = (T)ser.ReadObject(ms);
return obj;
}
}
}

C# 导出 Excel

发表于 2013-10-31 | 更新于 2018-07-28 | 分类于 代码片段 , c# | 评论数: 0 | 阅读次数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/// <summary>
/// 导出Excel
/// </summary>
public void ExportExcel()
{
#region 添加引用
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();//需要添加 Microsoft.Office.Interop.Excel引用
if (app == null) return;//app == null ,则代表服务器上“服务器上缺少Excel组件,需要安装Office软件”
#endregion

#region 设置app属性
app.Visible = false;
app.UserControl = true;
Microsoft.Office.Interop.Excel.Workbooks workbooks = app.Workbooks;
Microsoft.Office.Interop.Excel._Workbook workbook = workbooks.Add(Server.MapPath("~/Template/Template.xls")); //加载模板
Microsoft.Office.Interop.Excel.Sheets sheets = workbook.Sheets;
Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
Microsoft.Office.Interop.Excel.Range range = null;

worksheet = (Microsoft.Office.Interop.Excel._Worksheet)sheets.get_Item(1);//获取第一个Sheet页
if (worksheet == null)
worksheet = (Microsoft.Office.Interop.Excel._Worksheet)workbook.Worksheets.Add(System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);
#endregion

#region 根据获得的数据,进行数据的插入(到Excel模板中)
var _row = 15;//从第15行开始导入列表

//合并A14到K14
range = worksheet.get_Range("A" + (_row - 1), "K" + (_row - 1));
range.Merge(range.MergeCells);

//取得数据集,并导入Excel
DataTable table = new DataTable();
for (int i = _row; i < table.Rows.Count + _row; i++)
{
worksheet.Cells[_row, 1] = "第_row行 第一列";
worksheet.Cells[_row, 2] = "第_row行 第二列";
}

//插入行
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Rows[_row, Missing.Value];
range.Insert(Microsoft.Office.Interop.Excel.XlInsertShiftDirection.xlShiftDown, Missing.Value);
#endregion

#region 对已导出好的Excel报表进行保存到服务器,以便进行下载
if (!Directory.Exists(Server.MapPath("~/Excel/"))) Directory.CreateDirectory(Server.MapPath("~/Excel/"));
string savaPath = "~/Excel/" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
workbook.SaveAs(Server.MapPath(savaPath), Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);//Missing 在System.Reflection命名空间下。
#endregion

#region 释放资源
// 关闭电子表格,释放资源
workbook.Close(null, null, null);
app.Workbooks.Close();
workbook = null;

// 退出 Excel,释放资源
app.Quit();
app = null;
GC.Collect();
#endregion

#region 下载Excel
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");
Response.TransmitFile(savaPath);
Response.Flush();
Response.Close();
#endregion
}

/// <summary>
/// 用于excel表格中列号字母转成列索引,从1对应A开始
/// </summary>
/// <param name="column">列号</param>
/// <returns>列索引</returns>
private int ColumnToIndex(string column)
{
if (!Regex.IsMatch(column.ToUpper(), @"[A-Z]+"))
{
throw new Exception("Invalid parameter");
}
int index = 0;
char[] chars = column.ToUpper().ToCharArray();
for (int i = 0; i < chars.Length; i++)
{
index += ((int)chars[i] - (int)'A' + 1) * (int)Math.Pow(26, chars.Length - i - 1);
}
return index;
}

/// <summary>
/// 用于将excel表格中列索引转成列号字母,从A对应1开始
/// </summary>
/// <param name="index">列索引</param>
/// <returns>列号</returns>
private string IndexToColumn(int index)
{
if (index <= 0)
{
throw new Exception("Invalid parameter");
}
index--;
string column = string.Empty;
do
{
if (column.Length > 0)
{
index--;
}
column = ((char)(index % 26 + (int)'A')).ToString() + column;
index = (int)((index - index % 26) / 26);
} while (index > 0);
return column;
}

http://www.cnblogs.com/herbert/archive/2010/06/30/1768271.html

csharp过滤HTML标签

发表于 2013-05-22 | 分类于 代码片段 , c# | 评论数: 0 | 阅读次数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
///   <summary>
/// 去除HTML标记
/// </summary>
/// <param name=”NoHTML”>包括HTML的源码 </param>
/// <returns>已经去除后的文字</returns>
public static string NoHTML(string Htmlstring)
{
//删除脚本
Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "",
RegexOptions.IgnoreCase);
//删除HTML
Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "",
RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "",
RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"–>", "", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"<!–.*", "", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "\"",
RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&",
RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<",
RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">",
RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", " ",
RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "\xa1", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "\xa2", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "\xa3", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "\xa9", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);", "", RegexOptions.IgnoreCase);
Htmlstring.Replace("<", "");
Htmlstring.Replace(">", "");
Htmlstring.Replace("\r\n", "");
Htmlstring = HttpContext.Current.Server.HtmlEncode(Htmlstring).Trim();
return Htmlstring;
}
1
2
3
4
5
6
7
8
9
10
11
写一个静态方法移除HTML标签
#region
/// <summary>
/// 移除HTML标签
/// </summary>
/// <param name="HTMLStr">HTMLStr</param>
public static string ParseTags(string HTMLStr)
{
return System.Text.RegularExpressions.Regex.Replace(HTMLStr, "<[^>]*>", "");
}
#endregion
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#region
/// <summary>
/// 取出文本中的图片地址
/// </summary>
/// <param name="HTMLStr">HTMLStr</param>
public static string GetImgUrl(string HTMLStr)
{
string str = string.Empty;
string sPattern = @"^<img\s+[^>]*>";
Regex r = new Regex(@"<img\s+[^>]*\s*src\s*=\s*([']?)(?<url>\S+)'?[^>]*>",
RegexOptions.Compiled);
Match m = r.Match(HTMLStr.ToLower());
if (m.Success)
str = m.Result("${url}");
return str;
}
#endregion
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
///   <summary>
/// 提取HTML代码中文字的C#函数
/// </summary>
/// <param name="strHtml">包括HTML的源码 </param>
/// <returns>已经去除后的文字</returns>
using System;
using System.Text.RegularExpressions;
public class StripHTMLTest
{
public static void Main()
{
string s = StripHTML(
"<HTML><HEAD><TITLE>中国石龙信息平台</TITLE></HEAD><BODY>faddfs龙信息平台</BODY></HTML>");
Console.WriteLine(s);
}

public static string StripHTML(string strHtml)
{
string[]aryReg =
{
@"<script[^>]*?>.*?</script>",

@"<(\/\s*)?!?((\w+:)?\w+)(\w+(\s*=?\s*(([""'])(\\["
"'tbnr]|[^\7])*?\7|\w+)|.{0})|\s)*?(\/\s*)?>", @"([\r\n])[\s]+", @
"&(quot|#34);", @"&(amp|#38);", @"&(lt|#60);", @"&(gt|#62);", @
"&(nbsp|#160);", @"&(iexcl|#161);", @"&(cent|#162);", @"&(pound|#163);",
@"&(copy|#169);", @"&#(\d+);", @"-->", @"<!--.*\n"
};

string[]aryRep =
{
"", "", "", "\"", "&", "<", ">", " ", "\xa1", //chr(161),
"\xa2", //chr(162),
"\xa3", //chr(163),
"\xa9", //chr(169),
"", "\r\n", ""
};

string newReg = aryReg[0];
string strOutput = strHtml;
for (int i = 0; i < aryReg.Length; i++)
{
Regex regex = new Regex(aryReg[i], RegexOptions.IgnoreCase);
strOutput = regex.Replace(strOutput, aryRep[i]);
}
strOutput.Replace("<", "");
strOutput.Replace(">", "");
strOutput.Replace("\r\n", "");
return strOutput;
}
}

自动备份(支持MySQL,MSSQL,文本文件) - LT.DataBackup

发表于 2013-04-27 | 分类于 db | 评论数: 0 | 阅读次数:

概述

在 Window 系统下使用的数据库份工具,轻量级,简单易用。使用工厂模式开发,可以扩展支持其它类型数据的备份操作,目前支持:

  • 支持数据库:MSSQL、MySQL
  • 支持本地文件(完整复制或差异化备份)
  • 支持备份后的文件压缩,节省硬盘空间
  • 支持备份后的文件二次上传至 FTP 或其它共享目录
阅读全文 »
1…161718
Leo

Leo

😆
138 日志
26 分类
142 标签
RSS
QQ 微博 E-Mail GitHub 我的主页
Creative Commons
友情链接
  • ZM
  • july
0%
© 2016 – 2021 Leo
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Gemini v7.0.1
|