哎,又是一条鲜活的生命
今天据说学校又一个大一的跳楼了。
觉得好可惜啊。
长这么大了。
为什么心里承受能力会那么差。
是我们广工大的环境么?
也不是吧,那么多人,即使悲观,也该相信这个世界是美好的。
努力即便没有收获,那又如何,大不了再努力一把。
怕什么。
为什么有些人连死都不怕,却害怕生活的压力?
是你父母给你的压力太大了么。
那又为什么不跟他们说说呢。
一辈子,在最美好的年华自己结束了。
不能不说这是一种可悲。
且行且珍惜。
一路走好。
-2014/4/27
-—GDUT
专注游戏服务器开发
哎,又是一条鲜活的生命
今天据说学校又一个大一的跳楼了。
觉得好可惜啊。
长这么大了。
为什么心里承受能力会那么差。
是我们广工大的环境么?
也不是吧,那么多人,即使悲观,也该相信这个世界是美好的。
努力即便没有收获,那又如何,大不了再努力一把。
怕什么。
为什么有些人连死都不怕,却害怕生活的压力?
是你父母给你的压力太大了么。
那又为什么不跟他们说说呢。
一辈子,在最美好的年华自己结束了。
不能不说这是一种可悲。
且行且珍惜。
一路走好。
-2014/4/27
-—GDUT
基于Select模型的匿名聊天室v10
最近在无聊完成了一个简单的基于select模型的匿名聊天室程序,均使用C++开发
服务器工作原理:
每接收一条客户端的信息,就将遍历所有的socket,并将该信息发给所有的客户端.
客户端使用两条线程,一个是接收服务端信息的线程,一个是等待阻塞输入的线程,获得输入时,将输入发送到服务器。
项目源码:https://github.com/coderguang/Chat
版本为v2.0的release.
其中ComLib也在github上
服务器核心代码:
int main(int argc,char **argv){
int i,counter,maxfd,sockfd,listenfd,connfd;
int nready,client[FD_SETSIZE];
ssize_t n;
fd_set rset,allset;
char buf[MSGSIZE];
socklen_t clilen;
struct sockaddr_in cliaddr;
struct sockaddr_in servaddr;
listenfd=Socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(PORT);
//servaddr.sin_port=htons(atoi(argv[0]));
servaddr.sin_addr.s_addr=INADDR_ANY;
Bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
Listen(listenfd,10);
maxfd=listenfd; //initialize
counter=-1;
for(i=0;i<FD_SETSIZE;i++){
client[i]=-1;
}
FD_ZERO(&allset);
FD_SET(listenfd,&allset);
for(;;){
rset=allset;
nready=Select(maxfd+1,&rset,NULL,NULL,NULL);
if(FD_ISSET(listenfd,&rset)){//new client connecton
clilen=sizeof(cliaddr);
connfd=Accept(listenfd,(struct sockaddr *)&cliaddr,&clilen);
for(i=0;i<FD_SETSIZE;i++){
if(client[i]<0){
client[i]=connfd;//save the new sockfd
break;
}
}
if(i==FD_SETSIZE){
cout<<”sockfd set full!”<<endl;
}
FD_SET(connfd,&allset);//add new to set
if(connfd>maxfd){
maxfd=connfd;//for select
}
if(i>counter){//max index in client[]
counter=i;
}
if(nready<=0){
continue; //no more readable
}
}
for(i=0;i<FD_SETSIZE;i++){//check all clients for data
if((sockfd=client[i])<0){
continue;
}
if(FD_ISSET(sockfd,&rset)){
memset(buf,sizeof(buf),’\0’);
if((n=Read(sockfd,buf,MSGSIZE))==0){
close(sockfd);//connection closed by client
FD_CLR(sockfd,&allset);
client[i]=-1;
}else{
buf[n]=’\0’;
cout<<”get the msg:”<<buf<<endl;
for(int j=0;j<FD_SETSIZE;j++){
if(client[j]!=-1)
Writen(client[j],buf,n);
}
}
if(nready<=0){
break;
}
}
}
}
}
客户端核心代码:
int main(){
WORD mVersionRequested;
WSADATA wsaData;//WSADATA结构被用来保存AfxSocketInit函数返回的WindowsSockets初始化信息。
int ret;
SOCKET sClient;
struct sockaddr\_in saServer;
bool fSuccess=true;
//winSock 初始化
mVersionRequested=MAKEWORD(2,2);//WinSock dll的版本
ret=WSAStartup(mVersionRequested,&wsaData);
if(ret!=0){
cout<<"WSASartup failed!"<<endl;
getchar();
getchar();
exit(1);
}
if(LOBYTE(wsaData.wVersion)!=2HIBYTE(wsaData.wVersion)!=2){
WSACleanup();
cout<<"invaild version"<<endl;
getchar();
getchar();
exit(1);
}
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET){
WSACleanup();
cout << “socket failed” << endl;
getchar();
getchar();
exit(0);
}
saServer.sin\_family=AF\_INET;
saServer.sin\_port=htons(port);
saServer.sin\_addr.S\_un.S\_addr=inet\_addr(host);
ret=connect(sClient,(struct sockaddr \*)&saServer,sizeof(saServer));
if(ret==SOCKET\_ERROR){
cout<<"连接失败!"<<endl;
closesocket(sClient);
WSACleanup();
getchar();
getchar();
exit(1);
}
thread recThread(Receive, sClient);
thread sendThread(ChatInput,sClient);
recThread.join();
sendThread.join();
cout << “over” << endl;
closesocket(sClient);
WSACleanup();
getchar();
getchar();
return 0;
}
重新找工作以来,投了第一家,昨天去面了,9377,感觉还不错,不过感觉自己要价太高了~~~
一个应届生,没有服务端的工作经验,只有半年的U3D实习经验,要8K确实过了,还是太年轻,经验太少啊,其实8K只是期望,低点也是无所谓的,6K5我就接受啦下午三点笔试面试一直面到了总经理面,到了6点他们总经理还没有空,HR说等他们确定了之后再约,这个确定是神马意思~~~,看来要多投几份了~~~,不过还是挺喜欢9377的,离我现在住的走路地方只要5分钟路程~~~
do hard~~
—————————————————————————————————————————————————————————————————
//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。
转载请注明出处:http://blog.csdn.net/qq844352155
author:天下无双
Email:royalchen@royalchen.com
2015-6-30
于广州天河荷光路
——————————————————————————————————————————————————————————————————
如何不使用一个中间变量反转一个字符串
该题是我腾讯一面时候遇到的一个算法题。
当时很脑残的用中间变量解决了!
好坑,当时有点紧张,面试没经验,没意识到是要考我算法。
为了稳妥,哎,其实技术就是要show出来。
其实这是一个很简单的不利用中间变量交换两个值的操作。
利用的是位运算的一个特性。
那就是:
如果a=A,b=B;
经过下面三个步骤:
a=a^b;
b=a^b;
a=a^b;
就将a和b的值交换了!
原理很简单。
我们都知道,a^X^X最后的结果还是a;仔细分析:
a=a^b; //a=A^B;
b=a^b; //b=A^B^B=A
a=a^b; //a=A^B^A=B;
一个简单的实现例子:
#include
#include <string.h>//for strlen()
using namespace std;
char *reverse(char *str)
{
if(str==nullptr)
return nullptr;
int len=strlen(str);
int i=0;
while(i<len-i-1){
str[i]=str[i]^str[len-i-1];
str[len-i-1]=str[i]^str[len-i-1];
str[i]=str[i]^str[len-i-1];
i++;
};
return str;
};
int main(int argc,char **argv)
{
if(argc==2){
cout<<”str=”<<argv[1]<<endl;
reverse(argv[1]);
cout<<”reverse str=”<<argv[1]<<endl;
}else
cerr<<”input error,only one pram”<<endl;
}
运行截图:
如何把握好你的黄金职场四年
NLP导读:22岁到26岁这四年时间被称为职场黄金四年,因为这段时间是你从离开校园到走上并融入社会的一个过程,可以说这段时间是一个黄金时期,你的状态、表现直接决定了你今后的职业生涯。那么如何把握好这四年的黄金时期呢?请读下文。
当时公司招了大批应届本科和研究生毕业的新新人类。平均年龄25岁。那个新的助理,是经过多次面试后,我亲自招回来的一个女孩。名牌大学本科毕业,聪明,性格活泼。私下里我得承认,我招她的一个很重要的原因,除了她在大学里优秀的表现之外,还因为她写了一手漂亮的字。女孩能写一手好字的不多,尤其像她,看起来长发飘飘,多么女性化的一个姑娘,一手字却写的铿锵倜傥,让我对她不由多了很多好感。
手把手的教。从工作流程到待人接物。她也学的快。很多工作一教就上手。一上手就熟练。跟各位同事也相处的颇融洽。我开始慢慢的给她一些协调的工作,各部门之间以及各分公司之间的业务联系和沟通让她尝试着去处理。
开始经常出错。她很紧张,来找我谈。我告诉她:错了没关系,你且放心按照你的想法去做。遇到问题了,来问我,我会告诉你该怎么办。仍然错。又来找我,这次谈的比较深入,她的困惑是,为什么总是让她做这些琐碎的事情?我当时问她:什么叫做不琐碎的工作呢?
她答不上来,想了半天,跟我说:我总觉得,我的能力不仅仅能做这些,我还能做一些更加重要的事情。那次谈话,进行了1小时。我知道,我说的话,她没听进去多少。后来我说,先把手头的工作做好,先避免常识性错误的发生。然后循序渐进罢。
半年以后,她来找我,第一次提出辞职。我推掉了约会,跟她谈辞职的问题。问起辞职的原因,她跟我直言:本科四年,功课优秀,没想到毕业后找到了工作,却每天处理的都是些琐碎的事情。没有成就感。我又问她:你觉得,在你现在所有的工作中,最没有意义的最浪费你的时间精力的工作,是什么?她马上答我:帮您贴发票,然后报销,然后到财务去走流程,然后把现金拿回来给您。
我笑着问她:你帮我贴发票报销有半年了吧?通过这件事儿,你总结出了一些什么信息?
她呆了半天,答我:贴发票就是贴发票,只要财务上不出错,不就行了呗,能有什么信息?
我说,我来跟你讲讲,当年我的做法吧:98年的时候,我从财务被调到了总经理办公室,担任总经理助理的工作。其中有一项工作,就是跟你现在做的一样,帮总经理报销他所有的票据。本来这个工作就像你你刚才说的,把票据贴好,然后完成财务上的流程,就可以了。
其实票据是一种数据记录,它记录了和总经理乃至整个公司营运有关的费用情况。看起来没有意义的一堆数据,其实它们涉及到了公司各方面的经营和运作。于是我建立了一个表格,将所有总经理在我这里报销的数据按照时间,数额,消费场所,联系人,电话等等记录下来。
我起初建立这个表格的目的很简单,我是想在财务上有据可循,同时万一我的上司有情况来询问我的时候,我会有准确的数据告诉他。通过这样的一份数据统计,渐渐的我发现了一些上级在商务活动中的规律,比如,哪一类的商务活动,经常在什么样的场合,费用预算大概是多少;总经理的公共关系常规和非常规的处理方式。等等等等。
当我的上级发现,他布置工作给我的时候,我会处理的很妥贴。有一些信息是他根本没有告诉我的,我也能及时准确的处理。他问我为什么,我告诉了他我的工作方法和信息来源。
渐渐的,他基于这种良性积累,越来越多的交待更加重要的工作。再渐渐的,一种信任和默契就此产生,我升职的时候,他说我是他用过的最好用的助理。
说完这些长篇大论,我看着这个姑娘,她愣愣的看着我。我跟她直言:我觉得你最大的问题,是你没有用心。在看似简单不动脑子就能完成的工作里,你没有把你的心沉下去,所以,半年了,你觉得自己没有进步。她不出声。但是收回了辞职报告。
又坚持了3个月,她还是辞职了。这次我没有留她。让她走了。
后来她经常在MSN上跟我聊天。告诉我她的新工作的情况。一年内,她换了三份工作。每一次都坚持不了多久。每一次她都说新的工作不是她想要的工作。2005年的时候,她又一次辞职了。很苦恼,跑来找我,要跟我吃饭。我请她去写字楼后面的商场吃日本料理。吃到中途,忽然跟我说:我有些明白你以前说的话是什么意思了。
所谓的职业生涯,其实你很难预测到你将来真正要从事什么工作,将来所要从事的工作,是否跟你在大学里学的专业有关。大多数人,很有可能将来所作的工作,跟他当初所学的专业一点关系都没有。从22岁大学毕业在26岁之间这四年,重要的不是你做了什么,重要的是你在工作中养成了怎么样的良好的工作习惯。这个良好的工作习惯,指的是:认真,踏实的工作作风,以及是否学会了如何用最快的时间接受新的事物,发现新事物的内在规律,比别人更短时间内掌握这些规律并且处理好它们。具备了以上的要素,你就成长为一个被人信任的工作的人。
人都有惰性,也都愿意用那些用起来顺手的人。当你具备了被人信任的基础,并且在日常的工作中逐渐表现出你的踏实,聪明,和细致的时候,越来越多的工作机会就会提供到你面前。原因很简单,用一句话就能交代清楚并且能被你顺利完成的工作,谁愿意说三句话甚至半小时交待一个怎么都不明白的人呢?沟通也是一种成本,沟通的时间越少,内耗越少,这是作为管理者最清楚的一件事。
当你有比别人更多的工作机会去接触那些你没有接触过的工作的时候,你就有了比别人多的学习机会,人人都喜欢聪明勤奋的学生,作为管理者,大概更是如此。
一个新手,大多数新手,在这四年里,是看不出太大的差距的。但是这四年的经历,为以后的职业生涯的发展奠定的基础,是至关重要的。很多人不在乎年轻时走弯路,很多人觉得日常的工作人人都能做好没什么了不起。然而就是这些简单的工作,循序渐进的、隐约的,成为今后发展的分水岭。
漫不经心的对待基层工作的最大的损失,就是将看似简单的事物性处理方式,分界成为长远发展的能力问题。
聪明的人,总是不认为自己的能力有问题。时间长了,他会抱怨自己运气不好,抱怨那些看起来资质普通的人,总能比自己更能走狗屎运。抱怨她容貌比自己好,或者他更会讨领导欢心。等等等等。慢慢的,影响心态。所谓的怀才不遇,有时是这种情况。
工作需要一个聪明人,工作其实更需要一个踏实的人。在聪明和踏实之间,我更愿意选择后者。
而踏实,是人人都能做到的。和先天条件没有太大关系。
如何在同一台VPS上使用apache绑定多个域名(亲测可行!!!)
今天下午搞这个搞了好长时间,最后还是靠官方的API文档才搞定,其实在同一台VPS上绑定多个域名以及绑定二级域名是非常简单的一件事情,只不过是自己完全没经验,导致走了比较多的弯路而已。
先说下我这里的环境:
服务器是腾讯的云服务器:CentOS 6.5 64bit
拥有一个独立的IP地址。
先来看一个概念(基于域名的虚拟主机):
基于主机名的虚拟主机 - Apache 2.2 中文版参考手册
基于域名的虚拟主机相对比较简单,因为你只需要配置你的DNS服务器将每个主机名映射到正确的IP地址,然后配置Apache HTTP服务器,令其辨识不同的主机名就可以了。基于域名的服务器也可以缓解IP地址不足的问题。所以,如果没有特殊原因使你必须使用基于IP的虚拟主机,您最好还是使用基于域名的虚拟主机。下列情况下,你可能会想要使用基于IP的虚拟主机。
我这里的就是基于域名的虚拟主机,首先你需要到你的DNS解析商那里设置正确的A记录。我这里首先讲解如何绑定不同的域名地址。
例如,我有两个域名:royalchen.com和iicode.cn,我希望两个域名都由同一台VPS提供服务。
首先到DNS解析那里设置正确的A记录,例如
iicode的主机记录为www A记录 记录值为182.254.*.*
royalchen.com的主机记录为www A记录 记录值为182.254.*.*(这里的记录值和上一个是完全一样的,即同一台VPS)
然后只需要编辑/etc/httpd/conf/httpd.conf文件即可。
因为是基于域名的虚拟主机,因此要将NameVirtualHost *:80前面的#去掉使其生效!(最好检查一下LoadModule rewrite_module modules/mod_rewrite.so这一句,去掉前面的#使其生效)
然后在httpd.con最后加上虚拟主机的内容
<VirtualHost *:80>
ServerName www.royalchen.com #浏览器访问www.royalchen.com的时候
DocumentRoot /var/www/html/www #royalchen的内容路径
DirectoryIndex index.html #首页
<VirtualHost *:80>
ServerName www.iicode.cn #浏览器访问www.iicode.cn的时候
ServerAlias iicode.cn *.iicode.cn
DocumentRoot /var/www/html/iicode #iicode.cn的内容目录
DirectoryIndex index.html
最后重启一下httpd服务即可!这样就可以让一台web服务器绑定两个域名了,多个域名的设置也是完全一样的。
下面再稍微说下二级域名的设置。
其实也是完成一样的,以我的royalchen.com为例,拥有blog,mail,home,code等多个二级域名。
首先也是设置正确的DNS解析,例如
home A 182.254.*.*
blog A 182.254.*.*(和上面那个是同一个)
一样需要打开NameVirtualHost *:80
然后virtualHost的内容也是差不多的
<VirtualHost *:80>
ServerName home.royalchen.com
DocumentRoot /var/www/html/home
DirectoryIndex index.htm
<VirtualHost *:80>
ServerName blog.royalchen.com
DocumentRoot /var/www/html/blog
DirectoryIndex index.php
重启httpd之后就可以了,需要注意的是,如果使用了*名字进行模糊匹配,则要将该匹配放到最后,因为apache是顺序下来匹配的!
不懂的可以留言或者email给我~~
第一次在自有博客写文章,哈哈哈哈~~~
文章作者:coderguang email: royalchen@royalchen.com
博客链接:http://blog.royalchen.com
备注:自2015-03-25之后,如无特殊说明,文章均为coderguang原创,转载请注明出处,文章由coderguang保留所有权利。
日期:2015-03-25
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent:
meta: false
pages: false
posts:
title: true
date: true
path: true
text: false
raw: false
content: false
slug: false
updated: false
comments: false
link: false
permalink: false
excerpt: false
categories: false
tags: true