IT程序员 的现状等级

好吧,我就拿一些大公司的在面试时给你评级的标准来说吧。
5个级别,从T1到T5,应聘时的一面之缘也许并不能客观公平的反应出你的真实水平。那现在我们就自己给自己评级,清楚的认识到自己的处境,对自己的努力方向有很大好处。很多人,包括我自己,在可以借助搜索引擎和文档解决工作问题时会产生飘飘然的感觉,其实这种错觉会害了自己,所以我们要客观的认识自己的真实水平。

我就拿某公司的评级标准大致划分一下等级吧。如果大家有不同意见,也可以给出自己的等级划分,但最好是一个比较有影响力的公司的评级标准,这样才对以后我们找工作比较有帮助。

T1:
架构:理解web的基本模型,可以使用面向过程方式写一些不是很复杂的业务逻辑,具备初级面向对象思想。

数据结构与算法:了解一些基本的算法,比如冒泡排序。了解一些最常用的数据结构,比如树,

掌握的技能:PHP,javascript,熟悉基本的数据库知识,基本的sql语句。

T2:
架构:具备初步MVC思想,理解应该把程序分层次,熟悉面向对象编程,可以利用一些面向对象的特性进行编程。

数据结构与算法:对一些简单的算法和数据结构有一定认识,如循环,迭代,递归的区别。各种排序算法的使用场合,字符搜索算法。链表,队列,堆栈,二叉树,堆等数据结构有初步的认识。可以描述出这些算法与数据结构的大致原理。

掌握的主要技能:对PHP的语言特性有一定了解,比如垃圾回收机制,PHP解释器的基本原理,知道如何写出高效的代码,了解Javascript语言的特性,可以使用面向对象方式编写代码。熟练掌握正则表达式,对数据库有比较深的了解,知道如何优化SQL语句,数据库的一些特性,如各种数据类型的特点,数据库各种引擎的特点。

掌握的辅助技能:Linux的基本操作,LAMP环境的搭建,优化,对各种缓存机制有一定了解,会在合适的情况使用合适的缓存。

T3:除了要具备T2所拥有的能力外,要更加实际的应用过一些东西。
架构:使用过MVC结构开发项目,对架构有很深的了解。熟悉几种常用的设计模式,理解其带来的好处,并能实际应用在项目中。

算法与数据结构:熟悉所有常用数据结构,算法,并且对一些较复杂的算法也有一定认识。

领导及组织能力:具备一定需求分析能力,能够管理一个不超过4人的小组,然后将项目按模块划分,分配给每个人。

掌握的主要技能:至少再熟练掌握一门服务器端脚本语言,如python,shell,perl。在某些情况下,需要使用这种更高效的语言来完成工作。

掌握的辅助技能:对C/C++有一定了解,熟练使用Linux,可以编写一些服务器应用模型,对现有的Lamp架构进行改造,使得服务器可以更加高效的运行,对一些分布时网络架构有一定了解,懂得如何处理负载均衡等。对服务器架构在高压力下如何调优有一定见解。

T4: 除了要具备T3所掌握的东西外,要具备出色的领导能力,可以管理很大的一个项目组,对项目的各个模块开发进度,疑难问题的发生有很强的处理和监督作用。对一些新出现很流行的技术很敏感,并能拿到自己的项目中实施。对一些项目中遇到的疑难问题能够提出很合适的解决方案。

T5:未知

以上,就是某公司的评级标准,当然,也加入了我的一些个人理解。T5那个等级我确实不知道,但我觉得,发展方向应该是创新。突破原有模式,创造出一些自己独特的见解与实际解决方案来。

可能大家觉得有些苛刻,觉得这有点太夸张了,但这确实是国内一些比较有名公司的评级标准。
级别是跟你的薪水挂钩的,据我所知,在北京,T1的薪水标准应该在3000 – 4000,T2在5000 – 8000,T3在10000 – 15000,T4年薪会超过20万,T5未知。
这是一些比较好的企业,因为公司盈利,所以薪水和待遇都高出一般公司。当然一般的公司,肯定给不了这么多。另外,这些公司,如果你是T1水平的话,其实一般他们是不会要的,T2是必须的。

大家可以以这个为标榜,朝着目标努力。

在这个标准内,我被公司评的级别是T2+,原以为自己还可以,以为自己可以到达T3,但现实就是这么打击人。也从侧面敲击自己,要继续努力,不要自我感觉良好。

C的控制台非正常退出的处理

只粘代码了,运用到了WINAPI
主要运用到了SetConsoleCtrlHandler
及捕获相关事件
[code]
#include "Windows.h"
#include
BOOL WINAPI ConsoleHandler(DWORD CEvent)
{
switch(CEvent)
{
case CTRL_C_EVENT:
MessageBox(NULL,
"CTRL + C received!", "signal", MB_OK);
break;
case CTRL_BREAK_EVENT:
MessageBox(NULL,
"CTRL+BREAK received!", "signal", MB_OK);
break;
case CTRL_CLOSE_EVENT:
MessageBox(NULL,
"Program being closed!", "signal", MB_OK);
break;
case CTRL_LOGOFF_EVENT:
MessageBox(NULL,
"User is logging off!", "signal", MB_OK);
break;
case CTRL_SHUTDOWN_EVENT:
MessageBox(NULL,
"User is logging off!", "signal", MB_OK);
break;

}
return TRUE;
}
int main()
{
char buf[256];

if (SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleHandler, TRUE) == FALSE)
{
// 安裝失敗
printf("Unable to install event handler!n");
return -1;
}

GenerateConsoleCtrlEvent(CTRL_CLOSE_EVENT, 0); // 手工産生一個事件
scanf("%s", buf); // 模擬等待事件發生,如果不要這句運行
// 程序的時候,程序一閃即過,來不急觀
// 察程序。

return 0;
}

[/code]

li浮动时ul自动适应高度方法

在网页制作中经常会用到浮动。用了浮动就会涉及到一个清除浮动的问题,因为包含浮动的元素是不会自动适应高度的,也就是不会被浮动元素撑开。
先看一个例子:

HTML:

CSS:

ul {
margin:0;
padding:10px;
list-style:none;
background-color:#006699;
}
ul li {
width:100px;
height:100px;
float:left;
margin-right:10px;
background-color:#99cc00;
}

可以看到,外面 ul 即蓝色的区域高度为0,如果没有设置 padding,这个 ul 是看不到的。当然要让它伸长也很简单,只需要在最后一个 li 后面加一个标签清楚下浮动就可以了。不过这样的话就改变了HTML结构,不好。现在这里要讨论的就是如何在不改变结构的情况下让 ul 自动伸长。

注意:自动伸长针对的是包含浮动元素的元素(这里是 ul)。而不是浮动元素自身(li)。
第一种方法:

IE 支持一个 CSS 属性 zoom, 这个元素接受一个数字或一个百分数,表示这个元素放大(缩小)的比例。例如:zoom:0.5或zoom:50% 表示缩小一半,而zoom:2或zoom:200%则表示放大一倍。
当定义了这个属性之后在 IE 浏览器里面就会自动适应高度了。当应用了这个属性之后,IE 就会自动伸长了。一般情况下我们不需要放大或缩小,所以定义 zoom:1 就行了。现在的 CSS:

ul {
margin:0;
padding:10px;
list-style:none;
background-color:#006699;
zoom:1; /* IE */
}

而非 IE 浏览器不支持这个属性。所以第一种方法需把浏览器分为两个阵营:IE 和 非IE。
对于非 IE 浏览器需要用到一个伪类 :after (IE 浏览器不支持)。CSS 代码如下:

ul:after {
content:".";
display:block;
clear:both;
height:0;
}

:after 伪类用于向元素后面插入一段内容,即 content 属性。然后在这个插入的内容里清除浮动,我们可以想象成在最后一个

  • 后面插入了一个 .里面的内容是一个”.”,然后设置display:block; clear:both; height:0; 等属性 (这个比喻不一定准确)。
    我们看下在 Firefox 下面的效果:

    可以看到 ul 已经自动伸长了,但下面有个小小的黑点。相信你已经猜到了,这个黑点对应的就是 content:”.” 。
    这个黑点肯定是要去掉的啦,我们可以用 font-size:0;line-height:0; 将其去掉。
    好了,现在在两个阵营的浏览器里都实现目标了。以下是 ul 所有的CSS代码:

    ul {
    margin:0;
    padding:10px;
    list-style:none;
    background-color:#006699;
    zoom:1;/* IE */
    }
    ul:after {
    content:".";
    display:block;
    clear:both;
    height:0;
    font-size:0;
    line-height:0;
    }

    第二种方法

    我刚说过不止一种方法可以解决,那现在就来说说第二种方法。第二种方法还要更简单一些。同样,需要将浏览器分成两个阵营。不过和上一个有所不同,这 一次 IE7 站到了另外一个阵营。即 IE7, Firefox, Opera, Safari 等(这里暂时称为A浏览器)。对于这些浏览器,只要定义一个 overflow:auto; 即可,但是对于 IE6 和 IE5 (称为B浏览器)却不起作用。不过要 IE6,IE5 听话也很简单。只要定义一个高度即可,哪怕是 0 ,也会自动伸长。知道这些还没用,我们还得区分这两个阵营的浏览器才行。怎么区分呢?
    A 浏览器支持属性选择符,而B浏览器不支持。

    所以以下代码只有A浏览器才会执行。

    [xmlns] ul { /* html[xmlns] ul 的简写 */
    overflow:auto;
    }

    需要注意的是HTML 必须要有< !DOCTYPE >头部以及有xmlns属性才会起作用。不过这个问题似乎不大,现在绝大部分网页都有这两个东东,包括 Dreamweaver 默认新建的网页都会自动加上。

    而对于B浏览器则可以通过以下方式:

    * html ul {
    height:1%;
    }

    其实 height 完全可以写成 0,为什么要写1%呢?告诉你其实我也不知道,大家都这么写。

    好了,第二种方法的 ul 全部样式代码如下:

    ul {
    margin:0;
    padding:10px;
    list-style:none;
    background-color:#006699;
    }
    [xmlns] ul { /*html[xmlns] ul 的简写*/
    overflow:auto;
    }
    * html ul {
    height:1%;
    }

    现在既然有两种方法,那么那一种更好呢?我个人比较喜欢第二种方法。原因很简单,代码更少,而且是符合标准的。只是在极少数情况下会出现滚动条,所 以应该这两种方法配合使用。

    还有,这些代码是可以通用的,可以提取为一个类比如 .clearfix 。这个任务就交给你自己完成吧。