最近遇到这样一个问题,后端用Scala结合Play框架,前端jQuery+Bootstrap, 需求是这样的,其实跟SO上的这个问题一样, 根据Ajax的Post请求要求server端或者直接返回Json数据或者直接返回可以下载的file文件。搜索了下问题,貌似单独一次ajax请求搞不定。
背景:之前在腾讯实习的时候做了相关接口监控报送状态时写了PHP中的AOP ,这几天在UMeng实习要做到一个log模块,之前的类似代码是这样的:
现在我已经是坐在学校的寝室里面写以下这些文字了.然后当时去武汉面试时的场景仍记忆犹新.
已经从腾讯离职了,今天在学校整理电脑里面的资料,看到了以前写的一篇文章,发到KM里面了,虽然没啥响应的人。我这里还是在blog里记录下(原文含有保密信息,稍稍改下),给备份一下。下面说说背景:
前一篇文章说了通过构造Hash冲突实现PHP/Java等语言的拒绝服务攻击,今天看到一篇文章,或许能帮助解答上一篇文章中的遗留问题。现在转过来学习下。原文见:http://www.codinglabs.org/html/hash-collisions-attack-on-php.html
前几天看到公司php群谈到这篇博文通过构造Hash冲突实现各种语言的拒绝服务攻击,说的是在PHP中,使用hash来存储k-v数据, 包括常用的来自用户的POST数据, 攻击者可以通过构造请求头, 并伴随POST大量的特殊的”k”值(根据每个语言的Hash算法不同而定制), 使得语言底层保存POST数据的Hash表因为”冲突”(碰撞)而退化成链表. 这样一来, 如果数据量足够大, 那么就可以使得语言在计算, 查找, 插入的时候, 造成大量的CPU占用, 从而实现拒绝服务攻击. 举个例子:如下代码中:
$size = pow(2, 16); // 16 is just an example, could also be 15 or 17
$startTime = microtime(true);
$array = array();
for ($key = 0, $maxKey = ($size – 1) * $size; $key <= $maxKey; $key += $size) {
$array[$key] = 0;
}
$endTime = microtime(true);
echo 'Inserting ', $size, ' evil elements took ', $endTime - $startTime, ' seconds', "\n";
$startTime = microtime(true);
$array = array();
for ($key = 0, $maxKey = $size - 1; $key <= $maxKey; ++$key) {
$array[$key] = 0;
}
$endTime = microtime(true);
echo 'Inserting ', $size, ' good elements took ', $endTime - $startTime, ' seconds', "\n";
//http://www.laruence.com/2011/12/30/2435.html
运行结果如下:
昨天接到一个新需求,给图片加文字。用于感恩节还是圣诞节之类的哦。也就是图片加文字水印。网上查了下,很多相关的内容。英文是很好解决滴,不过中文可搞死我了。
在上一篇坑爹的QQ手机管家说了,我把问题在BBS上反馈了。今天有人联系我了。首先是开发联系我的,直接用RTX联系,我把我记录的log发给他看后,他提出了问题的原因。
上周五因为考研报名要现场确认(保送的也得走流程)。所以就周五下班后回长沙了。其实后来才发现,没有必要自己亲自回去啊。也是走一个流程而已。听登科所说,有人报名就是同学帮忙拿着照片在相机前面拍一下就可以了。我当时也感觉到过程没有受到很多重视。拍照时,没有说什么坐姿啊,衣服领子啊扣子啊之类的。排到你了,往那一坐,咔嚓。OK,下一个。
从9月9号回到学校,差不多主要是看看保研的事情吧,另一方面毕业设计啊之类的可能也要看看是怎么安排的。转眼近2个月过去了,保研的事情也定下来了。与其在学校呆着无所事事,还不如来公司实习,赚点经验的同时搞点生活费用用。
感觉这一周没有做什么。因为就等着招聘问答发布。计划30号发布,结果到9月1号才正式发布出去。前两天跟测了下,因为涉及到我的那几个页面比较简单,没有什么bug,于是就做了另外一个需求,替换掉以前的User大对象,做重构吧,把以前的代码重新划分下模块。然后还做了一个产品那边要的数据。1000个用户的二度人脉的相册统计,并写到文件。这个代码简单,不过耗时很久。程序几乎跑了一天吧。才把所有结果跑出来了。
今天导师分了一个任务,让我算1000个QQ号的所有好友和可能认识的人的相册数量和照片数量,并把相册的封面信息等输出到文件,每个Q号一个文件。结果写出来了,跑了9个多小时了,还没跑完,因为想看到实时输出文件名数量等的状态,是前台运行的,要回家了,不能就一直前台嘛,于是查了下后台运行,且退出当前shell,进程不死,下面这篇文章是搜出来滴,转载了。注意,刚开始转后台进程时,我居然一个不小心按了 ctrl+c,于是挺掉了。还好输入的文件列表能知道当前处理到哪个QQ号码了,重新把剩下的跑一次。
这周好像没做什么,主要就是跟测吧。30号上线啊得……
收到了留用考核的通知,再加上学校的要交各种实习报告,实习总结,实习日记等。就小结了一下。
8-8:搜索tag补录入 邀请其他人回答问题发送系统消息 模块调用代码熟悉
8-1:问答管理的topics 增删改查。
公司搞开发,往往配置hosts在开发环境里面。然后,有时候又需要访问外网。现在在开发朋友网www.pengyou.com,开发的时候域名是写死了滴,但指向的服务器IP,因环境不同而不同,比如开发环境,测试环境,和外网的真实环境。这样开发就得直接在hosts文件里面配置了。每次想在机子上访问pengyou网站的外网时,都得去改hosts文件。公司配的WIN7系统,网上下的一些什么各种hosts快速切换小工具啊之类的不行。leaner给的一个.hta文件也不行。还不能建个快捷方式直接改,改完后另存为不行。非得通过cmd.exe以管理员身份运行。记事本打开保存才可以。。后台想到自己以前用学校机房和自己寝室的一个改变IP的批处理文件。就想着也通过这样来实现吧。然而不是那么简单。写不出复杂的批处理,写一两个命令种改可以吧。就把多个环境的hosts先写好保存dev.txt out.txt之类的。直接用命令copy 到windows\system32\drivers\etc\hosts 即可。最后执行的时候吧。以管理员身份执行。不能直接在批处理文件.bat上已管理员身份运行,不行。通过cmd.exe以管理员身份运行,再cd到.bat目录下,运行。才可以。后来看到firefox有个插件可以用,进去看了下,介绍了两条命令http://code.google.com/p/fire-hostadmin/wiki/GAIN_HOSTS_WRITE_PERM,可以实现对hosts文件具有可写的权限。
7-26:上午写完分配给我的需求,对后台一个数据的统计,按照月份查询。
今天上午让Leaner和Peru看了下这几天写的PHP的demo。Peru说可以了不再继续了,这个demo告一个段落,让我看后台管理的代码。然后Leaner给我说了目录,搭建好环境。唉,之前因laoxuehost出问题还配置过hosts文件,今天Leaner突然让我加测试的环境,说到hosts我咋一时都没反应过来啊。把admin的代码down下来,用zend studio打开看了下index.php。熟悉了下流程,搞清楚了如果菜单关联和函数调用。
这两天没有写日志了。前天在赶qzhttp+cgi+ttc作业的最后测试。昨天上午这个作业的点评。各个小组跑上去演示下。自我感觉我们这组算是good的。呵呵
。下午打包收拾东西,准备搬到新的办公楼,隔壁的大族大厦。唉,虽然这个地方有了自己的独立的位置,不过还是有坏处的,茶水间离我远了,不能转身就喝咖啡和果汁了。吃饭,1楼的食堂量好少,不好吃。还不如腾大的13楼。就今天中午去吃了一次,难怪王向要跑到腾大去吃的。夜宵也没有,得跑腾大。
腾讯实习的培训布置的作用中需要用Qzhttp+FastCGI+TTC架构写demo.网上参照了下,最后成功在Tomcat下配置CGI并实现简单例子.
Tomcat提供了对CGI的支持,但默认情况下,Tomcat对CGI的支持被禁止了。开启支持要采取如下配置:
将文件 $CATALINA_BASE/server/lib/servlets-cgi.renametojar 的名称修改为$CATALINA_BASE/server/lib/servlets-cgi.jar。有的还说要将此目录下servlets-ssi.renametojar改成servlets-ssi.jar. 如果想让Tomcat下所有的Application支持支持CGI,可以修改 $CATALINA_BASE/conf/web.xml;如果只希望某些Application支持CGI,那么只需要修改这些应用root目录下的/WEB-INF/web.xml文件。
使用batch命令编写CGI脚本,可以将以下几行配置代码添加到web.xml就可完成对web.xml文件的修改(具体见下):其中的参数: 配置CGI servlet的行为,涉及到以下几个servlet的初始化参数。
cgiPathPrefix – CGI程序所在的目录,CGI servlet将按照以下路径搜索CGI程序:应用程序root目录 + 路径分割符 + cgiPathPrefix。其默认值为 WEB-INF/cgi。CGI程序应该放在WEB-INF下面的目录以防止程序被当作普通文件被下载或其脚本内容被查看。
debug – 设置servlet在日志中记录调试信息的级别,其值越大,信息越详细。默认值为0。
executable – 用来运行脚本的可执行程序,默认为perl。
parameterEncoding – CGI servlet使用的编码类型名称。默认值取 System.getProperty(“file.encoding”,”UTF-8″)。
passShellEnvironment – 是否将shell的环境变量传递给CGI脚本。默认值为false。
举例:
myeclipse新建一个web项目。web.xml内容如下
今天周日,本来不上班的.但是鉴于自己对php还不熟悉,对明天要答疑的qzhttp+fastcgi+tcc的架构不了解这样的情况下,准备到公司主动加班.周日公司食堂不开啊没有班车各种不爽。
今天第一觉醒来,去上厕所,看了下时间7点多,还早。就算去公司也还早。于是睡下……再醒来,9点半了,去公司也没班车了,就不去了吧。然后主要是公司周末加班的话,食堂也没开。看来TX是不鼓励大家周末加班的。所以也没有加班费这一说了。
今天上午有培训了。早上班车过去,下车的时候买包子,Carmelo差点就把我收藏的“古币”给用了,幸好被我发现了,给换回来了。上午9点半到达腾讯2412.讲的是公共组件与后台技术的介绍。一些基本概念,框架。后来讲了腾讯内部使用的框架,Qzhttp,TTC等。还有CGI,还布置了一个作业。Qzhttp,ttc,cgi程序连一下,配置。cgi用C++写,我表示压力很大啊。分组写,当然我跟我小组的brian,还有Carmelo了。brian29号那批,现在在跟项目有任务了,但还得跟我们这批实习生培训。
今天8点10多分左右被Carmelo叫起来,然后去搭去腾大的班车。这张没拍好,明天准备好了再重新拍一张远点的。
感谢桂英姐昨晚去机场接我,好好招待我啊。今天又送我去报道,请我吃饭。(*^__^*) 嘻嘻。
最开始,还在说要去贵州支教滴。现在也不用我去了。有老大亲自带队,不用我了。呵呵。
o(︶︿︶)o 唉,原本来打算想6月底就去深圳实习的。就给tencent给了封邮件过去。申请提前。然后给我回复了。。。
腾讯的offer,等得太久了。从武汉回来都10多天了。今天终于得到消息了。收到了offer。
11号晚上11点才从外面回来。他把火车票给我了。我就说看看能不能赶上了,赶不上改签只有。然后叫他12号先走。再问了下hr面问了些啥问题,都是谈人生谈理想,问有没有女朋友啊之类的。他的三面还是个男滴问滴,担心问些啥腾讯的啥企业文化啊之类的,我答不上岂不是很尴尬。反正他在附近的网吧还充钱了,就叫我12号早上再去上一个小时网,说看看腾讯企业文化啊啥滴。之间还聊了下将来打算之类。
12号,7点40左右起床,去网吧。王向给输了帐号密码后走人。我就上网约9点,去了珞珈山国际酒店直接到了709.此时里面还有个人在面试,不过这个hr面是个美女吖,哈哈。等吧在外面。眼看时间一分一分的过了。9点半了已经,还没说完的意思啊。我估计不能赶上火车了。再等吧继续。9点40过了,终于轮到我了。进去说了句:想见到你,不容易啊。呵呵。然后她首先进行了下自我介绍。看着我的简历,都没让我作自我介绍,然后就问了一些基本情况的问题,学习,社会工作,家庭等。随便聊聊而已,很轻松。最后再问我有啥问题问她没……我问了结果啥时候出,还问了实习时间啥时候开始,都说尽快会通知。其实我还准备想问问她哪一级的,她都问我姐姐哪一级的了,不过我估计比我姐姐小。呵呵,最后还是没问了。
接下来,赶往火车站改签吧,把三面完的消息发信息给她俩。到火车站的公车上,查了下到长沙的火车,有趟10点55滴还,还试图想赶上这辆呢。如果可以先上车再改签的话。结果问了下最近的无座位的车也要下午3点,有座的下午6点。就换了6点的吧,正好去华科,找冉瑞杰耍耍。跟激动聊得挺好的,华科好大啊感觉。以前的一些朋友都有了自己要走的路了呀。
其实我就想不通啊,宏杰就莫名其妙的,回答问题回答得挺好的啊,就只有最后一个问题关于gc设计的问题没回答得很好,怎么就没通知二面了啊。然后刘科发短信说买票了,11号下午3点的叫要不要一起回。我经过一番思想斗争后,决定再等最后半天,王向不也还没出结果么。自己辛辛苦苦从长沙跑过来,就这么没有确切的结果的情况下就返回长沙,不甘心啊。不过不管最后结果是怎么样的,这次武汉之行还是收获蛮大滴。后来王向面完了,据说2面3面连在一起,这才是真正的大神级别的人物啊。算法厉害……面试官刚好问算法,不正和他胃口么。
后来傍晚时候联系上了武大的冉俊芳童鞋,o(∩_∩)o 哈哈,不管那么多了,先让她陪我转转再说。带我去吃牛排……呃,我还是第一次吃呢。吃撑了。在吃的过程中,接到电话了,让通知12号下午2点半在709进行hr面。然后王向已经帮我买票了,12号上午10点22的,我就要求看能不能换下时间。然后打电话那人说还得往上报,叫再等下。运气真好吧,正好一个本来安排上午的女生要求下午面,就刚好换了。于是我安排在12号上午9点半面,然后面10多分钟吧,近10点的样子打车到武昌火车站,刚好赶上火车,当然这只是我的设想而已啦。继续吃,这下吃得就更有味啦……我说冉俊芳童鞋啊,把我当小孩了不是。带我逛武大几圈之后,还非得送我到绿洲那个饭店十字路口,说怕我迷路。挺感谢她滴,当她收到我说我在武大旁的短信后就立马说叫我等,她马上出来陪我。
本来开始以为要今天晚上给打点话通知我一面结果和何时参加二面滴。结果昨晚12点左右的时候接到电话通知我今天下午4点参加2面。这次打电话哥们用座机打滴,听语气就感觉没有昨天那哥们好了。
昨晚就是等笔试结果和等电话或者短信了。以为只是公布下笔试通过的名单,自己在网上找,或者也跟参加笔试一样,最多发个一模一样的短信通知你面试详情看网上。先后接到两个外地号码,一个是从南京打过来的,04级哥哥,说有没同学意愿实习,呃,我武汉外地漫游啊,就说我在面腾讯,等回长沙再跟他联系。另一个打来,看归属地是深圳,呃。腾讯打电话过来了。happy啊,总算笔试是通过了嘛。然后问是否从在武汉参加笔试,我说是,然后就问住在哪,武大附近吧。然后 就叫我第二天8点在8点半之间直接去珞珈山国际酒店739房间面试。好吧就……电话刚打完,我们这边用手机上查腾讯笔试通过名单出来了。让老姐帮忙看说就找不到我的电话号尾数。宏杰那边朱静也帮忙查到面试时间地点了,得明天10号。为啥就我这么早呢,再留点时间抱抱佛脚嘛……后来果然没有我的信息在晚上公布,这是为啥呢……不管了,反正打电话通知我去面试了就OK了。
刚开始还在纠结要不要来武汉面腾讯呢。最后还是来了。7号晚上10点10的火车,昨天(8号)凌晨1点半到达武昌。然后在火车站周围找了加小旅店,住下。睡了几个小时。7点半起来,开始找武大工学部笔试。刚好公交车有402直接到武大工学部,就坐了。一坐就是一个小时,谁叫他是旅游专线呢。武汉长江大桥先过去,绕一下,然后再从长江大桥二桥绕回来。
之前刚讲了汉得,现在讲讲群硕。群硕就显得要专业点了。有个笔试阶段,笔试没通过滴,就没面试。笔试题目还行,比较基础,有3个大点的题目吧。一个是递归求最大公约数,降低了难度,都给了提示说用求模运算。所以就比较简单。还有一个考的是设计模式,之前好想课堂上,刘伟老师讲过一样。就是猫叫,老鼠跑,主人惊醒。显然观察者模式。还有一个是17分钟过桥问题。o(︶︿︶)o 唉,这个题目当时把我给卡在了。思维收到局限了。后来查了下是微软的一道面试题目。具体题目如下:“有4个人要过一座桥。她们都站在桥的某一边,要让她们在17分钟内全部通过这座桥。这时是晚上。她们只有一个手电筒。最多只能让两个人同时过桥。不管是谁过桥,不管是一个人还是两个人,必须要带着手电筒。手电筒必须要传来传去,不能扔过去。每个人过桥的速度不同,两个人的速度必须以较慢的那个人的速度过桥。第一个人:过桥需要1分钟;后面分别需要用2,5,10分钟过桥。”当时卡在了,回来接人时一定是过去的那两个人当中的一个,当然搞不定。其实就是以前的脑筋急转弯嘛,好像类似的题目是农夫啊,白菜啊,狼啊之类的题目过河。主要这一点知道就很快能出答案了。
学院6月17号让我们外出实习。前几天来了几个公司宣讲会。群硕跟汉得。先来的汉得,讲了下公司,实习生待遇,600块,不过包吃住。没有笔试题目,直接提交一个调查问卷样的东西,就开始面试了。调查问卷里面有个东西,就是讲自己做过的最能体现编程能力的项目。我没写大学生创新性实验计划项目,而是写了个之前做的基于飞信的校园社区系统,因为里面用了httpclient和htmlparser,抓取本校教务网站系统,实现程序自动化帮忙算加权成绩。调查问卷里面还有个表格,就是填写你认识的同学当中认为他代码行最多的人的名字,这个问题厉害啊。一下子就把年级的一些高手都露出来了。不过面试觉得效率有些低啊,一个一个的面试,还好人不是很多。不然要面到何年何月啊。刚开始一面,差不多15分钟左右吧。到我面试的时候,汉得过来的那个部门经理,后来才晓得姓杨,都没跟我说啥。因为宋昂啊,之类的项目中的成员都介绍了一下,然后估计好多人在写代码行的人的时候也把我给写进去了吧。所以一面面我的时候就没问我啥问题,然后跟我说,对你们几个项目中的成员也有所了解了,差不多主要是让我介绍我们这项目中成员啥啥问题。涉及到针对我自己的问题就较少了。最后跟我说了几句,其实也没什么好问的了,主要是看项目吧。让我把之前的Ichat和飞信的校园咨询网给带过去给他们看看,讲解下。
