chunpu
chunpu
好久没扯淡了,先是辞职不算顺利(老是交接啊我晕) 然后是面试被拒了俩,没有满意的offer,可喜的是所有发出去的简历都有面试通知 起初,被淘宝第3次拒的时候我着急的不行,害怕裸辞会进入“找工作没经验,没工作没经验”的死循环 现在却反而慢慢平静下来,我一直担心的是不在大公司会不会跟不上大家的节奏,现在看来错了,如果能熟练使用github,会看英文文档,能知道在哪里能快速学习知识的话,在家反而是进步最快的,因为在公司,你不得不按着流程一点一点的执行,修bug,code review,报告bug,单元测试, 总结报告。甚至可能会有无止境的奇怪需求变更 说到github,小屌丝第一次被merge了一次pull request,还是大名鼎鼎的`connect`,哟呵呵呵 不去海投简历会不会工作机会丢失?这还真不用担心,只能庆幸当年选了个好专业,计算机根本不用担心岗位不够,每天都能看到招聘,而且随着知识面变广,很多职位都很对口 回到找工作经历,愈发觉得自己项目经验缺乏了,在简历上写的项目我自己看了都羞愧,实在是太小太过简单(不少是刚学的时候写着玩的),但是公司的项目显然又不能贴出来(毫无亮点又涉及机密),因此我又动手写了些,不仅是为了增加点项目内容,也是增加自己经验 比如redis,我之前用过,但不熟练,不好意思在简历中写,但近来发现要求会nosql的招聘越来越多,于是这次做了个聊天室应用,主要是手机上用。用socket.io做聊天室只需要10分钟,但配合redis,可以做出一个随意新建房间,显示之前timeline,且时刻显示最火房间及人数的小应用。说白了还是为了练redis。。 然后又做了个论坛,这个大量借鉴了cnodejs的nodeclub,除了目录结构等,有很多我之前不解的问题也看着nodeclub源码解决了,比如token到底是怎么生成和解析,要不要session等 不过比cnodejs好的是用了express3+,并加入板块的概念,这个论坛本来是为了练习mongodb,不过现在我觉得做论坛太有意思了,我决定把它做成一个像觅链一样的东西,这样就算没人,我也可以自己一个人玩的开心,哈哈 现在愈发不想搞界面了,主要是有几次面试的CSS打击到了我,每次到实际的布局场景,我就暴露经验少的问题 其实我觉得用bootstrap真的太棒了,响应式布局,内置大量样式,还有网格,用bootstrap的话手写CSS的机会少太多了,我只能说,在不响应式就软了! 最后,我还想说,看源码真的是开挂的学习方式。看过源码,再用这个库,绝对是驾轻熟路,比如jQuery,自己尝试实现一下,再参考一下源码,不要比买一本jQuery书厉害太多
Web语义化主要分两个 1. `HTTP`语义化 2. `HTML`语义化 ## HTTP语义化 HTTP语义化是针对HTTP协议来说的,最有代表性的是`Rest API` ### path 首先是path,路径,对于有大量接口的服务器,我们需要仔细的设计自己的API 比如看新浪微博的APIhttp://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI 一般的话path用`/`来表示嵌套关系, 用querystring来表示filter,和属性值 ### HTTP method HTTP method也具有语义化 一般来说普通服务器只用`GET`和`POST`,但还有`PUT`和`DELETE`来对应数据库操作.不过说实话在实践的过程中,我还是觉得只用`GET`和`POST`好 ### 无状态HTTP HTTP必须要是无状态的,所谓无状态,说细点就是用户带着你给用户配的`token`,可以访问任意的带有自己`私钥`的服务器. HTTP无状态,说白了就是为了负载均衡. 如果HTTP是有状态的,你在后台保存着用户的session,那用户就只能访问你这台服务器,除非你还做了session同步 另一种方法是在负载均衡中配置会话保持,一般的方法是使用cookie保存server的ID,也可以是保存一张IP HASH表,但很显然这会产生其他问题 可以看出牵连会话的HTTP对于性能会有巨大的损失,而且如果一个服务器坏了,那上面的用户都没法继续会话了 ##...
上文提到具体应该怎么写技能匹配,为什么选前端呢,因为我关注的大大经常转发前端招聘信息,肯定是有就业机会的. 先看下当今的招聘都有哪些要求,拿出几个近期的招聘瞧瞧 招聘信息太长了放到文末 总结一下 - 理解Web,W3C标准 (一淘,SAE,云适配,Zealer,小米,蘑菇街,DNSpod,百姓网) - jQuery (云适配,金蚕网络,小米) - 跨浏览器适配 (一淘,Zealer,蘑菇街,) - HTML5 (云适配,小米,金蚕网络,DNSPod,新浪手机微博) - Web语义化 (云适配) - 后端语言或经验 (一淘,云适配,小米,金蚕) - Backbone或Angular (云适配,小米,DNSPod) - Ajax (云适配) ### 熟悉Web|W3C标准...
以前写简历一直很认真,但还是被同学嘲笑.这次专门学习了一下怎么写简历 首先看简历是如何被筛选的 1. HR收邮件,把简历下载下来,以大约20秒一封的速度看简历,HR筛选大约筛掉80% 2. HR将技能匹配的,条件较为优秀的简历交给此职位专业人员(可能是面试官),专业人员以专业的眼光筛掉自己认为不行的简历,比例不定,可能也高达80%. 3. 然后才有可能收到面试通知 看上去非常吓人,一封简历寄过去,十有八九是被扔到垃圾桶里. 但事实我们不用太害怕,我以前的简历蠢爆了,也可以有一面二面. 原因是因为目前的形式都是: 普通简历泛滥,好简历稀缺 因为不少使用大街网,51Job这样的童鞋都是海投的,这些简历并不能大比例匹配技能,经常会被刷掉,因此写简历是不能一招鲜吃遍天的,需要"定制"相关简历. ## 个人资料 个人资料只需两行或三行 ``` 姓名 | 男 | 出生日期 | 中国XXXX大学 邮箱: mail | 电话: 1000000000 应聘职位:...
jQuery是一个伟大的库,但我一直没有去专门学习它.不过jQuery非常的人性化,导致于我们不需要像backbone那样去看说明书. 不过不看说明书的后果就是我对jQuery产生很多误区. 这些误区直接暴露在我几个月前的面试中,比如 > 我会原生Javascript,同时也会jQuery [@朴灵](http://weibo.com/shyvo)大大听后立马纠正我,jQuery也是原生Javascript. 这点我在此次学习中算是了解了,jQuery确实是完全的Javascript,除了两个全局变量`$`和`jQuery`外,做到了完全没有污染其他空间. 也就是说如果引进了jQuery,照样可以写原生的js,完全不妨碍. > jQuery自已定义了dom,用起来不舒服 我现在想起自己的回答都想找个缝钻进去,当时的我根本没意识到所有的jQuery DOM对象都是一个类数组(Arraylike) ## 选择器 jQuery从名字上讲,是一个js的dom选择器.我们熟知的dom选择器是`document.getElementById`和`document.getElementsByTagName` 但我们知道CSS的选择器非常实用,比如`div h1.title`,他一下子表达了很多意思,想一下子选出这些dom在css中很快,但是在JS中却非常难办. jQuery本身主要是为了解决这个问题.要注意的是现代浏览器都提供了`document.querySelectorAll`让我们开发者也能用css选择器的接口 让人大跌眼镜的是很多同学,甚至是一些jQuery讲师,居然不知道这个接口.jQuery和css选择器接口的返回值都是一个NodeList,他们都是类数组 > 类数组是指键是从0,1,2,...这样像数组那样排列,可能有length属性,但没有数组中prototype的比如push,pop等方法的对象 jQuery和css选择器返回的NodeList都不是动态的(getElementsByTagName是动态的),jQuery返回的NodeList有大量的proto方法,比如bind,click等等,正是这些proto方法让jQuery变得如此简单易用. ## jQuery的nodeList 正是这个nodeList让我刚学js的时候困惑不解.我天真的以为在选id的时候就是调用`getElementById`而其他的时候是调用其他高级选择器. 就是说我根本无法理解我明明是选定一个id,它怎么可能返回一个类数组. 因此我才会在面试的时候说jquery返回的不是原生的dom对象,比如不能用`myDiv.innerHTML`来获取innerHTML. 我们知道jQuery获取innerHTML的方法是`$('xxx').html()`. 看到上面这个api,我当然是以为`$('xxx')`是返回一个自己封装的dom对象,我当时抱怨为何把innerHTML的属性给删了.真是怎么也想不到我们这样是对一个列表调用`.html()` `$('xxx').html()`返回的当然是字符串,不是数组,因此实际上`$('xxx').html()`的返回值就是`$('xxx')[0].innerHTML`...
一直不会Linux,有些遗憾,不过我觉得现在最可以胜任的工作可能是运维了。 首先是因为我目前的工作虽叫研发但每天代码量不到50.大量的修复前人的烂摊子。 其次我们经常看集群,网络等信息,反而很接近运维。再加上我本人对各种服务器很熟悉,也算了解各种协议,而且又会shell,perl。活脱脱一个运维嘛。。 运维怎么可能不懂Linux,你可能要问了。原因是我根本不用Linux系统,我是windows的粉丝,一直觉得Linux非常反人类。 我使用Linux的方式全部为在windows中用putty远程登录,因此Linux的图形界面很少接触。 Linux之所以实用性远不如windows,归根到底是Linux的cli太强大了。这让大多数人沉迷在命令行界面无法自拔,不愿去接触图形界面。 这次又入门了一下Linux,我发现不少之前的误区 ### shell 首先是shell,什么是shell,shell就是系统的壳,用来和系统交互的。我以前的误区在于认为命令行就是shell。现在看来大错特错了,GNOME同样有shell,GNOME shell就是我们看到的图形界面,这个shel用openGL渲染,它也可以编辑文件,修改配置等。当然bash也是一个shell。 因此shell分两类,一种是GUI(Graphical User Interface)的shell,图形shell,比如GNOME,KDE. 另一种是CLI(Command Line Interafce),命令行shell,有bash,zsh等。 之所以会有这个误区,是因为我们把shell当成了终端. 在很早以前,终端是一个类似打字机的东西,而现在我们在OS X或者Ubuntu上打开命令行仍然叫terminal,是因为现在的terminal是虚拟terminal. 其实终端是包括这两种shell的.终端可以理解为一个设备,`/dev/tty` ``` bash echo "hello" > /dev/tty ``` 直接就打印到屏幕了.tty同样也是个命令 man一下可以看到这个:`tty...
我发现c语言学习环境极为恶劣, 有问题上网找, 首先c关键词太弱..而且c语言的博客根本没法看, 一段代码基本是不能跑的, 如果有缩进我都已经感激涕零了. 不得不感叹还是js好啊, 毕竟会js的文章不会太丑. 所以我写c有关的学习博客, 都只求代码美观, 能直接运行. ### socket socket方法是用来获取一个文件描述符的。 ``` c int fd = socket(PF_INET, SOCK_STREAM, 0); ``` `SOCK_STREAM`表示流式数据,也就是tcp协议,udp的参数是`SOCK_DGRAM`.全程叫datagram,数据豌豆,也就是我们常说的数据报啦。 这下我终于明白为啥nodejs中使用udp协议是`require("dgram");`了 ### `AF_INET`和`PF_INET` 在网上找例子的时候, 会看到有的写AF_INET, 有的写PF_INET, AF是address...
Linux通过文件来提供底层接口, 有句话说的好, Linux中一切都是文件. 不管是系统信息(`/proc`)还是目录, 甚至是socket套接字, 都是文件. 程序使用文件是通过文件描述符, 英文叫file description. 通常简写为fd. 文件描述符是一个非负整形. 程序进程运行的时候, 会默认有三个预置的文件描述符,分别是: - 1. 标准输入, stdin - 1. 标准输出, stdout - 1. 标准错误输出, stderr 在shell中, 我们用小于号``提供标准输出 ``` bash svn...
set函数就是上一篇提到的很重要的函数之一, 是command命令结构体中的第三个参数.在读取命令时候触发的回调函数. set是一个函数指针, 原型是这样的. ``` c char * (*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); ``` ### 返回值 `char *`, 返回值可以是NGX_CONF_OK, 或者NGX_CONF_ERROR. 也就是0或者-1的指针. ### 参数 `ngx_conf_t *cf`含义未知 `ngx_command_t *cmd` 表示自己所在的那个command结构体 `void...
http handler是http模块中最重要的函数, 直接托管http请求. 和前文set不同, set是在nginx启动的时候读取配置的过程中被触发的, 而handler函数是在真实请求到那个路径上时被触发的. 也就是浏览器请求多少次, handler就触发多少次. ### 返回值 handler的返回类型是`ngx_int_t`, 因为一般的http handler定义好body后就能交给http filter函数了, 比如我们hello模块的`ngx_http_output_filter`, 而filter函数都是返回整形数的.比如error就是-1. ### 参数 handler参数只有一个, `ngx_http_request_t *req`, 这个简单的出奇, 不过我用过不少http服务器框架, 也就只有nodejs分了`request, response`两个参数. req是一个巨大的结构体. 不过这样的后果就是response的信息都写在request这个结构体上, 比如头部信息就是`request.headers_out`中. 请求的头部在`headers_in`中. 我们可以清楚的看到各种请求信息,...