All posts by 龙生
MySQL数据库高并发优化配置
在Apache, PHP, mysql的体系架构中,MySQL对于性能的影响最大,也是关键的核心部分。对于Discuz!论坛程序也是如此,MySQL的设置是否合理优化,直接 影响到论坛的速度和承载量!同时,MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识,同时还需要长时间的观察统计并且根据经验 进行判断,然后设置合理的参数。 下面我们了解一下MySQL优化的一些基础,MySQL的优化我分为两个部分,一是服务器物理硬件的优化,二是MySQL自身(my.cnf)的优化。 一、服务器硬件对MySQL性能的影响 ① 磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变。 MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。所以,通常认为磁盘I/O是制约MySQL性能的最大因素之一,对于日均访问量 在100万PV以上的Discuz!论坛,由于磁盘I/O的制约,MySQL的性能会非常低下!解决这一制约因素可以考虑以下几种解决方案: 使用RAID-0+1磁盘阵列,注意不要尝试使用RAID-5,MySQL在RAID-5磁盘阵列上的效率不会像你期待的那样快。 ②CPU 对于MySQL应用,推荐使用S.M.P.架构的多路对称CPU,例如:可以使用两颗Intel Xeon 3.6GHz的CPU,现在我较推荐用4U的服务器来专门做数据库服务器,不仅仅是针对于mysql。 ③物理内存对于一台使用MySQL的Database Server来说,服务器内存建议不要小于2GB,推荐使用4GB以上的物理内存,不过内存对于现在的服务器而言可以说是一个可以忽略的问题,工作中遇到了高端服务器基本上内存都超过了16G。 二、 MySQL自身因素 当解决了上述服务器硬件制约因素后,让我们看看MySQL自身的优化是如何操作的。对MySQL自身的优化主要是对其配置文件 my.cnf中的各项参数进行优化调整。下面我们介绍一些对性能影响较大的参数。 由于my.cnf文件的优化设置是与服务器硬件配置息息相关的,因而我们指定一个假想的服务器硬件环境: 下面,我们根据以上硬件配置结合一份已经优化好的my.cnf进行说明: #vim /etc/my.cnf以下只列出my.cnf文件中[mysqld]段落中的内容,其他段落内容对MySQL运行性能影响甚微,因而姑且忽略。 port = 3306 serverid = 1 socket = /tmp/mysql.sock skip-locking #避免MySQL的外部锁定,减少出错几率增强稳定性。 skip-name-resolve #禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求! back_log = 384 #back_log 参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。 如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自 己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。 key_buffer_size = 256M #key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。对于内存在4GB左右的服务器该参数可设置为256M或384M。注意:该参数值设置的过大反而会是服务器整体效率降低! max_allowed_packet = 4M thread_stack = 256K table_cache = 128K sort_buffer_size = 6M #查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占,如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。 read_buffer_size = 4M #读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。 join_buffer_size = 8M #联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。 myisam_sort_buffer_size = 64M table_cache = 512 thread_cache_size = 64 query_cache_size = 64M […]
View Details执行xpath时提示,需要命名空间管理器或XsltContext。此查询具有前缀、变量或用户定义的函数
如果 XPath 表达式包含前缀,则必须将前缀和命名空间 URI 对添加到 XmlNamespaceManager 中。 XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); 例子: xml文件内容: <?xml version="1.0"?> <roots weight="3" xmlns:sml="www.sdkd.net.cn"> <sml:root leaf="a">1111</sml:root> <sml:root leaf="b">2222</sml:root> <sml:root leaf="c">3333</sml:root> <sml:root leaf="de">3333</sml:root> <sml:root leaf="d">4444</sml:root> <sml:root leaf="e">5555</sml:root> <sml:root leaf="f">6666</sml:root> <sml:root leaf="g">7777</sml:root> <sml:root leaf="h">8888</sml:root> <sml:root leaf="i">9999</sml:root> <sml:root leaf="j">0000</sml:root> </roots> 程序: XmlDocument doc = new XmlDocument(); doc.Load("a.xml"); XmlNode root = doc.DocumentElement; XmlNamespaceManager nsp = new XmlNamespaceManager(doc.NameTable); nsp.AddNamespace("sml", "www.sdkd.net.cn"); XmlNodeList a = root.SelectNodes("child::sml:root[starts-with(@leaf,’d')]",nsp); Console.WriteLine("Find " + a.Count.ToString()); foreach (XmlNode e in a) { Console.WriteLine(e.InnerText); } 以上程序中使用到了sml前缀,因此需要添加命名空间管理 XmlNamespaceManager 类包含命名空间 URI 及其前缀的集合。它允许解析、添加和移除集合中的命名空间。某些上下文需要此类以提高 XML 处理性能。例如,XsltContext 类使用 XmlNamespaceManager 以支持 XPath。 http://blog.163.com/lzh_19999/blog/static/14127362008821188317/
View DetailsC# HttpWebRequest GET HTTP HTTPS 请求
这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全部采用手工操作工作量大而且繁琐,因此周公决定利用C#来实现。在很多地方都需要验证用户身份才可以进行下一步操作,这就免不了POST请求来登录,在实际过程中发现有些网站登录是HTTPS形式的,在解决过程中遇到了一些小问题,现在跟大家分享。 通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需要获取认证信息(如Cookie),所以返回的是HttpWebResponse对象,有了返回的HttpWebResponse实例,可以获取登录过程中返回的会话信息,也可以获取响应流。 代码如下:
|
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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.DirectoryServices.Protocols; using System.ServiceModel.Security; using System.Net; using System.IO; using System.IO.Compression; using System.Text.RegularExpressions; namespace BaiduCang { /// <summary> /// 有关HTTP请求的辅助类 /// </summary> public class HttpWebResponseUtility { private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; /// <summary> /// 创建GET方式的HTTP请求 /// </summary> /// <param name="url">请求的URL</param> /// <param name="timeout">请求的超时时间</param> /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param> /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param> /// <returns></returns> public static HttpWebResponse CreateGetHttpResponse(string url,int? timeout, string userAgent,CookieCollection cookies) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Method = "GET"; request.UserAgent = DefaultUserAgent; if (!string.IsNullOrEmpty(userAgent)) { request.UserAgent = userAgent; } if (timeout.HasValue) { request.Timeout = timeout.Value; } if (cookies != null) { request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); } return request.GetResponse() as HttpWebResponse; } /// <summary> /// 创建POST方式的HTTP请求 /// </summary> /// <param name="url">请求的URL</param> /// <param name="parameters">随同请求POST的参数名称及参数值字典</param> /// <param name="timeout">请求的超时时间</param> /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param> /// <param name="requestEncoding">发送HTTP请求时所用的编码</param> /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param> /// <returns></returns> public static HttpWebResponse CreatePostHttpResponse(string url,IDictionary<string,string> parameters,int? timeout, string userAgent,Encoding requestEncoding,CookieCollection cookies) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } if(requestEncoding==null) { throw new ArgumentNullException("requestEncoding"); } HttpWebRequest request=null; //如果是发送HTTPS请求 if(url.StartsWith("https",StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion=HttpVersion.Version10; } else { request = WebRequest.Create(url) as HttpWebRequest; } request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; if (!string.IsNullOrEmpty(userAgent)) { request.UserAgent = userAgent; } else { request.UserAgent = DefaultUserAgent; } if (timeout.HasValue) { request.Timeout = timeout.Value; } if (cookies != null) { request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); } //如果需要POST数据 if(!(parameters==null||parameters.Count==0)) { StringBuilder buffer = new StringBuilder(); int i = 0; foreach (string key in parameters.Keys) { if (i > 0) { buffer.AppendFormat("&{0}={1}", key, parameters[key]); } else { buffer.AppendFormat("{0}={1}", key, parameters[key]); } i++; } byte[] data = requestEncoding.GetBytes(buffer.ToString()); using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } } return request.GetResponse() as HttpWebResponse; } private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; //总是接受 } } } |
从上面的代码中可以看出POST数据到HTTP和HTTPS站点不同,POST数据到HTTPS站点的时候需要设置ServicePointManager类的ServerCertificateValidationCallback属性,并且在POST到https://passport.baidu.com/?login时还需要将HttpWebResquest实例的ProtocolVersion属性设置为HttpVersion.Version10(这个未验证是否所有的HTTPS站点都需要设置),否则在调用GetResponse()方法时会抛出“基础连接已经关闭: 连接被意外关闭。”的异常。 用法举例 这个类用起来也很简单: (1)POST数据到HTTPS站点,用它来登录百度:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
string loginUrl = "https://passport.baidu.com/?login"; string userName = "userName"; string password = "password"; string tagUrl = "http://cang.baidu.com/"+userName+"/tags"; Encoding encoding = Encoding.GetEncoding("gb2312"); IDictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("tpl", "fa"); parameters.Add("tpl_reg", "fa"); parameters.Add("u", tagUrl); parameters.Add("psp_tt", "0"); parameters.Add("username", userName); parameters.Add("password", password); parameters.Add("mem_pass", "1"); HttpWebResponse response = HttpWebResponseUtility.CreatePostHttpResponse(loginUrl, parameters, null, null, encoding, null); string cookieString = response.Headers["Set-Cookie"]; |
(2)发送GET请求到HTTP站点 在cookieString中包含了服务器端返回的会话信息数据,从中提取了之后可以设置Cookie下次登录时带上这个Cookie就可以以认证用户的信息,假设我们已经登录成功并且获取了Cookie,那么发送GET请求的代码如下:
|
1 2 3 4 |
string userName = "userName"; string tagUrl = "http://cang.baidu.com/"+userName+"/tags"; CookieCollection cookies = new CookieCollection();//如何从response.Headers["Set-Cookie"];中获取并设置CookieCollection的代码略 response = HttpWebResponseUtility.CreateGetHttpResponse(tagUrl, null, null, cookies); |
(3)发送POST请求到HTTP站点 以登录51CTO为例:
|
1 2 3 4 5 6 7 8 9 |
string loginUrl = "http://home.51cto.com/index.php?s=/Index/doLogin"; string userName = "userName"; string password = "password"; IDictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("email", userName); parameters.Add("passwd", password); HttpWebResponse response = HttpWebResponseUtility.CreatePostHttpResponse(loginUrl, parameters, null, null, Encoding.UTF8, null); |
在这里说句题外话,CSDN的登录处理是由http://passport.csdn.net/ajax/accounthandler.ashx这个Handler来处理的。 总结 在本文只是讲解了在C#中发送请求到HTTP和HTTPS的用法,分GET/POST两种方式,为减少一些繁琐和机械的编码,周公将其封装为一个类,发送数据之后返回HttpWebResponse对象实例,利用这个实例我们可以获取服务器端返回的Cookie以便用认证用户的身份继续发送请求,或者读取服务器端响应的内容,不过在读取响应内容时要注意响应格式和编码,本来在这个类中还有读取HTML和WML内容的方法(包括服务器使用压缩方式传输的数据),但限于篇幅和其它方面的原因,此处省略掉了。如有机会,在以后的文章中会继续讲述这方面的内容。 from:http://www.cnblogs.com/youfeng365/p/6138944.html
View DetailsC#中DateTime转换成毫秒数
var dateTimeStart = new DateTime(1970, 1, 1, 8, 0, 0); var milliseconds = DateTime.Now.Subtract(dateTimeStart).TotalMilliseconds;
View Details远程服务器返回错误: (401)未经授权的解决办法
1、错误号401.1 症状:HTTP 错误 401.1 – 未经授权:访问由于凭据无效被拒绝。 分析: 由于用户匿名访问使用的账号(默认是IUSR_机器名)被禁用,或者没有权限访问计算机,将造成用户无法访问。 解决方案: (1)查看IIS管理器中站点安全设置的匿名帐户是否被禁用,如果是,请尝试用以下办法启用: 控制面板->管理工具->计算机管理->本地用户和组,将IUSR_机器名账号启用。如果还没有解决,请继续下一步。 (2)查看本地安全策略中,IIS管理器中站点的默认匿名访问帐号或者其所属的组是否有通过网络访问服务器的权限,如果没有尝试用以下步骤赋予权限: 开始->程序->管理工具->本地安全策略->安全策略->本地策略->用户权限分配,双击“从网络访问此计算机”,添加IIS默认用户或者其所属的组。 注意:一般自定义 IIS默认匿名访问帐号都属于组,为了安全,没有特殊需要,请遵循此规则。 2、错误号401.2 症状:HTTP 错误 401.2 – 未经授权:访问由于服务器配置被拒绝。 原因:关闭了匿名身份验证 解决方案: 运行inetmgr,打开站点属性->目录安全性->身份验证和访问控制->选中“启用匿名访问”,输入用户名,或者点击“浏览”选择合法的用户,并两次输入密码后确定。 3、错误号:401.3 症状:HTTP 错误 401.3 – 未经授权:访问由于 ACL 对所请求资源的设置被拒绝。 原因:IIS匿名用户一般属于Guests组,而我们一般把存放网站的硬盘的权限只分配给administrators组,这时候按照继承原则,网站文件夹也只有administrators组的成员才能访问,导致IIS匿名用户访问该文件的NTFS权限不足,从而导致页面无法访问。 解决方案: 给IIS匿名用户访问网站文件夹的权限,方法:进入该文件夹的安全选项,添加IIS匿名用户,并赋予相应权限,一般是读、写。 4、C#开发程序出现问题 在System.Net中提供了一个NetworkCredential,通过它我们可以在网络中提供一个凭证,只有获得该凭证的用户才能访问相应的服务的权限。在这里我们也使用NetworkCredential。
|
1 2 3 4 5 6 |
HttpWebRequest req = (HttpWebRequest)WebRequest<span class="hljs-preprocessor">.Create</span>(url)<span class="hljs-comment">;</span> NetworkCredential d = new NetworkCredential(<span class="hljs-string">"USERNAME"</span>, <span class="hljs-string">"PASSWORD"</span>)<span class="hljs-comment">;//添加此代码</span> req<span class="hljs-preprocessor">.Credentials</span> = d<span class="hljs-comment">;</span> HttpWebResponse resp = (HttpWebResponse)req<span class="hljs-preprocessor">.GetResponse</span>()<span class="hljs-comment">;</span> |
在webconfig配置web代理,使用httpweb请求的时候不需要设置proxy属性。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<span class="hljs-tag"><<span class="hljs-title">system.net</span>></span> <span class="hljs-comment"><!--使用Web代理的设置--></span> <span class="hljs-comment"><!--usesystemdefault指定是否使用 Internet Explorer 代理设置。 如果设置为 true,则后面的特性将重写 Internet Explorer 代理设置。 默认值为 unspecified。--></span> <span class="hljs-tag"><<span class="hljs-title">defaultProxy</span>></span> <span class="hljs-tag"><<span class="hljs-title">proxy </span> <span class="hljs-attribute">usesystemdefault</span>=<span class="hljs-value">"True"</span> <span class="hljs-attribute">proxyaddress</span>=<span class="hljs-value">"http://172.27.1.191:80"</span> <span class="hljs-attribute">bypassonlocal</span>=<span class="hljs-value">"True"</span> /></span> <span class="hljs-tag"><<span class="hljs-title">bypasslist</span>></span> <span class="hljs-tag"><<span class="hljs-title">add</span> <span class="hljs-attribute">address</span>=<span class="hljs-value">"172\.27\.\d{1,3}\.\d{1,3}"</span> /></span> <span class="hljs-tag"></<span class="hljs-title">bypasslist</span>></span> <span class="hljs-tag"></<span class="hljs-title">defaultProxy</span>></span> <span class="hljs-tag"></<span class="hljs-title">system.net</span>> </span> |
http://blog.csdn.net/mang_liu/article/details/7708864
View Detailsjs中的时间与毫秒数互相转换
【1】js毫秒时间转换成日期时间 var oldTime = (new Date("2012/12/25 20:11:11")).getTime(); //得到毫秒数 //不是上面格式的时间需要转换 //starttime =’2012-12-25 20:17:24′; starttime = starttime.replace(new RegExp("-","gm"),"/"); var starttimeHaoMiao = (new Date(starttime)).getTime(); //得到毫秒数 【2】毫秒数转化为时间 var oldTime = (new Date("2012/12/25 20:11:11")).getTime(); //得到毫秒数 var newTime = new Date(oldTime); //就得到普通的时间了 参考:http://blog.csdn.net/qq435792305/article/details/7973751
View DetailsJavaScript Date 对象
Date 对象 Date 对象用于处理日期和时间。 创建 Date 对象的语法:
|
1 |
var myDate=new Date() |
注释:Date 对象会自动把当前日期和时间保存为其初始值。 Date 对象属性 属性 描述 constructor 返回对创建此对象的 Date 函数的引用。 prototype 使您有能力向对象添加属性和方法。 Date 对象方法 方法 描述 Date() 返回当日的日期和时间。 getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。 getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。 getMonth() 从 Date 对象返回月份 (0 ~ 11)。 getFullYear() 从 Date 对象以四位数字返回年份。 getYear() 请使用 getFullYear() 方法代替。 getHours() 返回 Date 对象的小时 (0 ~ 23)。 getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。 getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。 getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。 getTime() 返回 1970 年 1 月 […]
View DetailsMySQL字符截取函数
1、从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) 例:select left(content,200) as abstract from my_content_t 2、从右开始截取字符串 right(str, length) 说明:right(被截取字段,截取长度) 例:select right(content,200) as abstract from my_content_t 3、截取字符串 substring(str, pos) substring(str, pos, length) 说明:substring(被截取字段,从第几位开始截取) substring(被截取字段,从第几位开始截取,截取长度) 例:select substring(content,5) as abstract from my_content_t select substring(content,5,200) as abstract from my_content_t (注:如果位数是负数 如-5 则是从后倒数位数,到字符串结束或截取的长度) 4、按关键字截取字符串 substring_index(str,delim,count) 说明:substring_index(被截取字段,关键字,关键字出现的次数) 例:select substring_index("blog.jb51.net","。",2) as abstract from my_content_t 结果:blog.jb51 (注:如果关键字出现的次数是负数 如-2 则是从后倒数,到字符串结束) 函数简介: SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FORlen) 不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。 详情请查阅手册。 实例: 表1:user 表2:jl 期望效果:通过user表jlid字段存储的id值,读取jl表中的相应记录,这里想要读取,jl表中id为1、2的记录,首先想到用in,但是很遗憾由于 jlid字段存储的id值有2个,尽管从形式上符合in(1,2)的格式,但是如果你使用select jl.* from jl where jl.id in(select jlid from user where user.id=1)来查询的话,是不行的,他总是返回id为1的记录。 那么怎么办呢?如果我们能够分别得到1,2中的1和2就行了。好在mysql也提供了字符串截取函数SUBSTRING。 sql句法如下: SELECT […]
View Details除了 Python ,这些语言写的机器学习项目也很牛(一)
Python 由于本身的易用优势和强大的工具库储备,成为了在人工智能及其它相关科学领域中最常用的语言之一。尤其是在机器学习,已然是各大项目最偏爱的语言。 其实除了 Python ,也不乏有开发者用其他语言写出优秀的机器学习项目。在此,列出其中一些个人认为值得关注的开源机器学习项目。由于篇幅有限,考虑分多期整理。 1、C Darknet —— 神经网络框架 Darknet 是一个用 C 和 CUDA 编写的开源神经网络框架。它快速,易于安装,并支持 CPU 和 GPU计算。 CCV —— 计算机视觉库 CCV 是 C-based/Cached/Core Computer Vision Library 的简称, 它是一个现代的计算机视觉库。 CCV 是一种以应用驱动的算法库,比如对静态物体(如人脸)的快速检测算法、对某些不容易定位物体(如猫)的准确检测算法、艺术文本的检测算法、长期目标的跟踪算法和特征点检测算法。 2、C++ CNTK —— 深度学习工具包 微软出品的开源深度学习工具包,它把神经网络描述成一个有向图的结构,叶子节点代表输入或者网络参数,其他节点计算步骤。 CNTK 不仅使深度神经网络(DNN)、卷积神经网络(CNN)、循环神经网络(RNN)和长短时记忆单元(LSTM)的实现变得非常容易,还支持多个 GPU 组合、服务器自动分化和并行的随机梯度下降(SGD)学习。 Caffe —— 深度学习框架 Caffe 是一个清晰而又高效的深度学习框架,模型与相应优化都是以文本形式而非代码形式给出,并给出了模型的定义、最优化设置以及预训练的权重,方便立即上手。同时,它能够运行最棒的模型与海量的数据,也能很方便扩展到新的任务和设置上。 Kaldi —— 语音识别工具包 Kaldi 是用 C ++ 编写的语言识别工具包,旨在供语音识别研究人员使用,且易于修改和扩展。它在设计之初就尽可能地以最通用的形式提供的算法,以保证其可扩展性。 3、Go CloudForest —— 决策树组合算法 纯 Go 编写的快速、灵活、多线程的决策树,允许一些相关的算法用于具有缺失值的异构数据的分类、回归、特征选择和结构分析。它可以实现更快的训练时间,非常适合现代处理器来学习二进制。 4、Java CoreNLP —— 自然语言处理工具 coreNLP 是斯坦福大学开发的一套关于自然语言处理的工具,使用简单功能强大。它可以通过输入原始文本,给出单词的基本形式,它们的词性、公司、人员的名称、解释日期、时间和数量等等。它最初针对英语开发,但现在也已支持中文。 H2O —— 机器学习和预测分析框架 H2O 是一个分布式的、基于内存的、可扩展的机器学习和预测分析框架,适合在企业环境中构建大规模机器学习模型。它使用开发者熟悉的界面,可与 Hadoop 和 Spark 等大型数据技术无缝工作。它也提供许多流行算法的实现,例如 GBM、Random Forest、Deep Neural Networks、Word2Vec 等。 Deeplearning4J —— 分布式神经网络库 Deeplearning4J 是一个使用 Java 和 Scala 编写的分布式神经网络库,集成了 Hadoop 和 Spark ,设计用于运行在分布式 GPU 和 CPU 上的商业环境。它即插即用,方便开发者在 APP 中快速集成深度学习功能 Deeplearning4j 包括了分布式、多线程的深度学习框架,以及普通的单线程深度学习框架。 5、Javascript […]
View Details多线程里的EF
这几天写个小功能,在多线程里用到EF,程序第一次启动总是记录到几个错误。 如果在多线程外访问一次数据库就没有问题,真是让人无奈啊~ 另外还发现log4net的实例化必须写在其他实例的前面,否则在控制台程序下不显示日志~~
View Details