工作地点是在浙江金华。本地是浙江除杭州外IT企业最集中的地方,环境适宜,物价便宜。生活节奏不快,本公司成立10年已经是行业领军地位,目前正准备上IPO,工作能力突出者有股份奖励,本人也是个程序员已经获得部分奖励。 不管是高手,新手,只要热爱编程,我们都欢迎。具体请看招聘信息链接然后投简历过来,最好能付带作品。谢谢大家捧场。
招聘ASP.NET程序员。具体信息:http://job.cnblogs.com/Offer/20492/
招聘前端工程师。具体信息: http://job.cnblogs.com/Offer/20493/
招聘纯美工。具体信息:http://job.cnblogs.com/Offer/20530/
昨天谈话听到的一些记录,觉得很有道理,分享给大家。
不要急于成交,要塑造产品价值。
当别人没有认识到你的产品和服务的价值之前,你绝不应该谈价格。
你卖的是价值,价格只是衡量价值的标尺。如果你上去就扔价格,对方会被吓跑。
有一个网站(成长家园www.aoecn.cn)项目中,使用了Hashtable来维护在线用户的状态,具体代码如下:
代码
if(hs.Contains(uid)){ //比较Hashtable 表中是否有这个用户
hs[uid] = DateTime.Now;//有用户的更新最后活动时间
}else{
hs.Add(uid, DateTime.Now);//没有的插入一个新的行
}
DateTime t1 = getUpdateTime();//取得保存的上次更新时间
DateTime nowt = DateTime.Now;
TimeSpan ts = nowt - t1;
if (ts.Minutes >2)
{
//大于2分钟就把Hashtable表中的数据更新到数据库中
lock (hs)
{
foreach (DictionaryEntry o in hs)
{
Updata(o.Key, o.Value);//更新到数据库方法
}
hs.Clear();//清空Hashtable
setUpdateTime(DateTime.Now);//保存这次更新时间
}
}
现在问题出来了,如果正在执行foreach 的时候,又有另一个请求来执行hs.Add(uid, DateTime.Now);那么程序会报错说“Hashtable表中的集合已修改;可能无法执行枚举操作。”
所以要把lock锁住整个操作方法,修改后代码如下:
代码
lock (hs) //要锁住操作Hashtable 的整个过程
{
if(hs.Contains(uid)){ //比较Hashtable 表中是否有这个用户
hs[uid] = DateTime.Now;//有用户的更新最后活动时间
}else{
hs.Add(uid, DateTime.Now);//没有的插入一个新的行
}
DateTime t1 = getUpdateTime();//取得保存的上次更新时间
DateTime nowt = DateTime.Now;
TimeSpan ts = nowt - t1;
if (ts.Minutes >2)
{
//大于2分钟就把Hashtable表中的数据更新到数据库中
foreach (DictionaryEntry o in hs)
{
Updata(o.Key, o.Value);//更新到数据库方法
hs.Clear();//清空Hashtable
setUpdateTime(DateTime.Now);//保存这次更新时间
}
}
在一个网站内容采集程序中,以前一直都能正常使用,但是这几天采集某一个网站时总是返回403错误。错误信息如下:
“System.Net.WebException: 远程服务器返回错误: (403) 已禁止”
考虑到可能是对方网站做了一些改动,防止他人抓取信息。原来采集是用 WebClient 的,我试着在WebClient中加入一些Headers,但还是无效果。一气之下就使用了HttpWebRequest,结果就能正常抓取信息了。
修改之前的代码:
代码
2 {
3 string host = Regex.Replace(url, "http://", "", RegexOptions.IgnoreCase);
4 host = host.Substring(0, host.IndexOf("/"));
5 webc.Headers.Add(HttpRequestHeader.Referer,"http://"+host);
6 byte[] bstr = webc.DownloadData(new Uri(url));
7 return Enc.GetString(bstr);
8 }
使用HttpWebRequest后正确抓取的代码:
代码
string strResult = "";
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
//req.Method = "POST";
req.KeepAlive = true;
req.ContentType = "application/x-www-form-urlencoded";
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8";
res = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(res.GetResponseStream(), Enc);
strResult = reader.ReadToEnd();
}
catch (Exception ex)
{
WWSoft.Often.LogClass.Write("PuBll.GetPageHtml(" + url + ")", "抓取页面内容", ex);
}
finally
{
if (res != null)
{
res.Close();
}
}
return strResult;
其中原因我就不知道为什么会这样了。
服务器安装完成后,其它工作都很顺利的完成。唯独邮件发送服务一直无法解决,出现的症状是,客户端提交的邮件都保存在等待队列里(\mailroot\Queue 文件夹)一封都没有发出去。因为前阵子事情太多就没有去研究原因,把STMP服务改成别人的邮件服务器暂时使用。
今天,手头的事情暂时都做完了,闲下来研究了一下windows server 2008R2 的SMTP服务,终于功夫不负有心了。找到了无法发送邮件的原因。邮件无法发送的最终原因是,现在的邮件服务器都会方向查询一下发送者的服务器提交的域名和MX记录是否一致,而我这台服务器还没有MX记录指定到这个服务器的IP地址,所以发送邮件都被拒绝,而出现在等待目录中。
知道原因后,我就去指定了一个MX记录到这台服务器的IP。然后在STMP设置里绑定这个IP地址,如下图:

然后在"传递"->"高级" 中设置MX的域名,如下图:

这样设置后就可以对外发送邮件了。
如果要让SMTP服务自动运行,那么还需要在“服务”里把“简单邮件传输协议(SMTP)”设置成自动运行。

经过设置后,SMTP服务正常运行。
2010年5月21日补充
今天,突然发现邮件无法发送了,登上服务器一看,发现以前的设置没掉了,变成了默认的设置,前几天在服务器上安装了一个杀毒软件,然有卸载了,不知道和这个操作有没有关系。
按原来的设置回去后,试一下还是不能发送邮件,提示是“550 5.7.1 Uable to relay” 的错误。原来是要在中继中设置邮件的使用IP。看下图

点“访问”选项卡,然后点“中继” 在出现的窗口中设置允许访问的IP.确定后就能正常发送邮件了。


